Статьи

Интернационализация проектов WordPress: Введение

Несколько лет назад я писал о процессе интернационализации проектов на основе WordPress . Хотя я думаю, что в некоторых случаях учебники не обязательно нуждаются в обновлении, обновлении или повторном посещении, бывают другие случаи, когда мы все можем извлечь пользу из повторного рассмотрения темы.

В конце концов, программное обеспечение меняется из года в год, и мы также приобретаем опыт, продолжая работать с данным компонентом программного обеспечения. WordPress ничем не отличается.

Начиная с этой статьи и переходя к следующему набору статей, мы рассмотрим следующее:

  • что означает интернационализация в контексте WordPress
  • как мы можем интернационализировать нашу работу
  • как интернационализация и локализация отличаются
  • инструменты, доступные для локализации
  • как интернационализировать контент, содержащийся в JavaScript
  • и более

Мы даже собираемся создать небольшой, хотя и функциональный плагин для WordPress, который поможет нам практически продемонстрировать пункты, которые мы перечислили выше.

Однако прежде чем мы начнем, важно понять, что такое интернационализация и что предлагает WordPress для этого. Кроме того, есть несколько ошибок, которые могут вас удивить, особенно если вы опытный программист.

С этим, изложенным в общих чертах этой серии, давайте начнем понимать, как интернационализировать нашу работу в WordPress.

Кодекс WordPress всегда является одним из лучших мест, с которого можно начать, когда вы хотите узнать больше о данной теме. Вот что он предлагает на пути интернационализации (который мы также сокращаем как i18n на тот случай, если вы видите, что он написан таким образом):

Интернационализация — это процесс разработки вашего плагина, чтобы его можно было легко перевести на другие языки.

Кроме того, Кодекс продолжает описывать, почему это важно:

Поскольку WordPress используется во всем мире, хорошей идеей является подготовка плагина WordPress, чтобы его можно было легко перевести на любой необходимый язык. Как разработчик, вам может быть нелегко предоставлять локализации для всех ваших пользователей; Вы не можете говорить на их языке в конце концов. Однако любой разработчик может успешно интернационализировать тему, чтобы позволить другим создавать локализацию без необходимости изменения самого исходного кода.

Это имеет смысл, верно? WordPress работает примерно на четверти веб-сайта и используется во всем мире. Почему выполняемая нами работа должна оставаться на родном языке, на котором мы говорим?

Это не значит, что не бывает времени, когда это нормально. Например, если вы создаете решение для кого-то и знаете, что они вместе с небольшой группой будут использовать приложение, то имеет смысл оставить его на родном языке указанного клиента.

Но если вы создаете что-то для широкого распространения, нет сомнений в том, что вы должны интернационализировать свою работу.

Короче говоря, интернационализация — это процесс, с помощью которого мы обеспечиваем перевод нашей работы на другой язык.

Далее в этой статье мы рассмотрим функции в WordPress API, чтобы убедиться, что наши строки PHP правильно интернационализированы. Но есть невероятно важное предупреждение, которое вы должны помнить.

Помните ли вы, когда впервые узнали о переменных на каком-либо языке программирования? Это было потрясающе, верно? Вы можете определить переменную один раз, а затем использовать эту переменную вместо строки (или любого другого значения) в любом другом месте кода, чтобы вам не пришлось повторяться.

На самом деле, это часть основных принципов программирования , не так ли?

Принцип СУХОЙ гласит: «Каждая часть знаний должна иметь одно, однозначное, авторитетное представление в системе».

Я абсолютно, почти однозначно согласен с этим определением. Но когда дело доходит до интернационализации строк в WordPress, мы должны сделать исключение. Вы поймете почему на мгновение, но я решил включить этот раздел здесь, чтобы вы могли избежать любой потенциальной ошибки в будущем. Я также решил упомянуть об этом, чтобы вы не спрашивали о попытке использовать переменные в контексте API интернационализации в будущих точках контакта.

Если вы помните это сейчас, вы избежите этого препятствия позже.

На данный момент мы готовы взглянуть на функции, которые предоставляет WordPress. Мы не будем использовать их в этой конкретной статье, но мы будем смотреть на имена функций, как их использовать и для чего они используются в более широком контексте.

Начиная с следующей статьи, мы начнем использовать их. А пока давайте посмотрим, что доступно.

  • __() , пожалуй, самая популярная или самая распространенная функция интернационализации, которую вы найдете в работе WordPress. Эта функция принимает одну строку для перевода и текстовый домен, к которому она будет принадлежать. Это никогда не должно включать ничего кроме строки (то есть без HTML, без JavaScript и т. д.).
  • Функция _e() аналогична приведенной выше функции, но вместо того, чтобы просто получить переведенную версию строки, она также отобразит результат перевода на экран.
  • _x() : к сожалению, бывают случаи, когда данная строка возвращает неправильный перевод. Когда это происходит, полезно использовать эту функцию, особенно при указании контекста перевода строки. Это обеспечит возвращение предполагаемой версии строки.
  • _ex() , так же как _e() и _x() перечисленные выше, обеспечит отображение правильного перевода строки на экране в зависимости от заданного контекста, чтобы неверная версия не была выбрана во время выполнения.
  • _n() — это аккуратная функция, потому что она позволяет WordPress выбирать одну или несколько версий указанного числа в зависимости от используемого. Это означает, что мы, как разработчики, должны предоставить строки как для единственной, так и для множественной версии, чтобы переводчики могли перевести ее вместе с фактическим числом. Но это делает работу с интернационализированными номерами намного проще, чем без.
  • _nx() должно быть понятно, как это работает. Это комбинация _n() которую мы только что поделили, и _x() которая была рассмотрена выше. Это означает, что если вы правильно указали форму единственного и множественного числа указанного числа вместе с соответствующей текстовой областью, то перевод будет отображаться, как и ожидалось.
  • _n_noop() должно звучать несколько знакомо для тех, кто знаком с информатикой или компьютерной инженерией. NOP — это сокращение от «без операции», и в этом случае используется для перевода множественных строк, которые мы не обязательно хотим использовать в конкретное время, но, возможно, захотим получить позже. Короче говоря, переводчик может предоставить перевод, и мы можем выбрать, когда его использовать.
  • _nx_noop() — это комбинация вышеуказанной функции и функции _x() мы видели много раз раньше. Это позволит нам получить доступ к переводу для конкретного текстового домена без необходимости их переводить.
  • translate_noop_plural() читает немного иначе, чем функции, которые мы до сих пор рассматривали, но реализация довольно проста: эта функция обеспечивает перевод результата _n_noop() и _nx_noop() . Ключевая вещь, которую следует отметить в отношении этой функции, заключается в том, что она ожидает, что первым аргументом будет массив с ключами единственного и множественного числа, полученными из вышеупомянутых функций.
  • esc_html__() очень похож на __() , но он предназначен для использования в тегах HTML. То есть он не предназначен для перевода тегов HTML, но он предназначен для захвата перевода и избежания его для безопасного использования в контексте HTML.
  • esc_html_e() похожа на функцию над ней и почти точно так же, как на функцию _e() мы рассмотрели выше; однако, он предназначен для того, чтобы идти вперед и отображать результат перевода на экран.
  • esc_html_x() должно быть ясно, учитывая, сколько раз мы видели, как _x() использовался в других функциях. Короче говоря, это будет делать то же самое, что и _x() , но предоставит текст в контексте gettext и подготовит его для безопасного использования в HTML.
  • esc_attr__() используется, чтобы взять указанную строку и правильно экранировать ее, чтобы ее можно было безопасно использовать в качестве атрибута, такого как атрибут title изображения.
  • esc_attr_e() отобразит переведенный текст с дополнительной кодировкой любых символов, таких как, больше, меньше, амперсанды и кавычки. Это еще одна функция, предназначенная для использования в контексте атрибута другого элемента.
  • esc_attr_x() будет захватывать перевод, экранировать его, а затем отображать в контексте атрибута элемента. Если перевод не был предоставлен, будет использоваться строка по умолчанию, предоставленная во время разработки.
  • number_format_18n() — мощная функция, особенно когда вы работаете с различными локалями. Например, если вы работаете с числом и хотите отобразить «1000», вы не указали бы второй параметр для этой функции; однако, если вы работаете с валютой или десятичными разрядами, вы должны передать «2» в качестве второго аргумента, чтобы две цифры добавлялись после десятичной дроби.
  • date_i18n() — еще одна мощная функция, которая позволит вам получать дату в локализованном формате на основе указанной метки времени. Чтобы узнать больше об этой конкретной функции, ее параметрах и примерах ее использования, пожалуйста, просмотрите ее страницу Кодекса .

Помните в разделе выше, где я говорил об избежании использования переменных? Вот где это пригодится. Как вы, несомненно, заметили, каждая из вышеперечисленных функций принимает два параметра:

  1. строка, которую можно перевести
  2. текстовая область строки

Текстовый домен относится к уникальным отношениям между плагином WordPress или темой WordPress, WordPress и переводчиком. В конечном счете, он должен убедиться, что переводчик может обеспечить перевод строки без переопределения перевода другой строки в другом месте WordPress (или другого стороннего решения).

В конечном итоге, лучше всего использовать в качестве текстовой области слаг плагина. Кроме того, этот параметр всегда должен быть строкой, а не переменной. Таким образом, независимо от того, сколько раз вам приходилось вводить его, не сохраняйте его в переменной. Просто введите текстовый домен в качестве второго параметра функции.

Это связано с тем, как работают инструменты перевода, и мы рассмотрим это более подробно в следующей статье.

И это учебник по функциям интернационализации. Если вы все еще не уверены, как применить некоторые из них в своей работе, не беспокойтесь. Есть еще что-то, что можно объяснить как с точки зрения объяснения, так и с точки зрения практических примеров

Например, мы кратко затронули концепцию gettext, верно? А как насчет JavaScript? Кроме того, как насчет инструментов, которые у нас есть, чтобы позволить другим переводить наши строки? Откуда мы знаем, что они работают правильно?

Все это будет рассмотрено в этой серии. Но прежде чем попасть туда, нам нужно было начать с основ. Так вот что мы сделали. В следующей статье мы продолжим, поговорив немного о gettext и некоторых доступных инструментах.

После этого мы обратим наше внимание на собственно написание кода (включая JavaScript) и на то, как все это сочетается в контексте наших собственных плагинов WordPress.

В то же время, если вы ищете другие утилиты, которые помогут вам создать свой растущий набор инструментов для WordPress или, например, код для изучения и стать более опытным в WordPress, не забудьте посмотреть, что у нас есть в Рынок Энвато .

Если вам интересно больше узнать о WordPress с точки зрения разработки, обратите внимание, что я работаю исключительно с WordPress и часто пишу об этом. Вы можете просмотреть все мои курсы и учебные пособия на странице моего профиля , а также можете следить за мной в моем блоге и / или Twitter по адресу @tommcfarlin, где я говорю о разработке программного обеспечения в контексте WordPress.

Не стесняйтесь оставлять любые вопросы или комментарии в ленте ниже, и я постараюсь ответить на каждый из них.