Интернационализация и локализация вашей темы WordPress в 6 шагов

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

Обзор процесса

Вот краткий обзор процесса интернационализации и локализации WordPress тему:

  1. Загрузите текстовый домен,
  2. Обработка текстовых сообщений с функциями WordPress,
  3. Извлекайте эти сообщения с помощью соответствующего программного обеспечения,
  4. Предоставить перевод для каждого сообщения,
  5. Создание языкового файла для определенного языка,
  6. Проинструктируйте WordPress, чтобы включить локализацию и загрузить языковой файл.

Добавление функций WordPress

Первое, что нужно сделать, это загрузить текстовый домен, добавив следующую строку в functions.php файл нашей теме:

load_theme_textdomain('mytheme', get_template_directory() . '/languages');

Первый аргумент должен быть уникальным идентификатором (хорошая практика заключается в использовании названия вашей темы); он определяет домен темы, так как текст для перевода не будет в основных файлах перевода WordPress. Второй аргумент определяет папку языковых файлов. Чтобы загрузить эти файлы, функция должна быть привязана к after_setup_theme действию:

add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
    load_theme_textdomain('mytheme', get_template_directory() . '/languages');
}

Обработка текстовых сообщений

После functions.php редактирования, следующий шаг заключается в том, чтобы просмотреть исходные файлы, найти сообщения, которые должны быть переведены и обрабатывать их с соответствующей функцией WordPress. Два наиболее важных и широко используемых _e($text_message) являются и __($text_message) . Первая функция выполняет поиск перевода $text_message и печатает его. Если перевода не существует, то он печатает $text_message . Эта функция используется для текстовых сообщений, которые не входят в функции PHP, так как она печатает результат. Возьмем следующую строку:

echo ‘Hello user’;

Это должно быть преобразовано в:

_e(‘Hello user’,’mytheme’);

Вторая функция ищет перевод $text_message и возвращает его. Если перевода не существует, то он $text_message возвращается. Он используется для текста, который находится в функциях PHP. Например:

the_content( ‘Read more’ );

Этот вызов функции должен быть преобразован в:

the_content( __(‘Read more’,’mytheme’) );

Иногда текстовое сообщение включает динамические данные, такие как число из переменной PHP. В этом случае мы используем sprintf функцию PHP для создания строки окончательного сообщения:

$results_found = 12;
$message = sprintf( __(‘%s results found’ , ‘mytheme’) , $results_found );

Сингулярные и множественные

WordPress предоставляет функцию для сингулярного и множественного перевода одного и того же текстового сообщения:

_n( $single, $plural, $number, $domain )

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

Хотя _n() функция встроена в WordPress, ее использование не рекомендуется, потому что программное обеспечение для перевода разбирает только первый параметр функции, и поэтому эти два текстовых сообщения не будут получены. Вместо этого мы можем использовать if заявление PHP:

if($results_found == 1)
    $message = __(‘1 result found’ , ‘my-text-domain’);
else
    $message = sprintf( __(‘%s results found’ , ‘my-text-domain’) , $results_found );

Языковые файлы

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

  • Файл POT содержит список всех переводимых сообщений в нашей теме.
  • Файл .po создается при переводе файла POT в определенный язык.
  • Это .mo двоичный файл, который создается автоматически программным переводом и не читается человеком.

Список сообщений

Первое, что нужно сделать, это создать файл POT, который содержит все текстовые сообщения наших исходных файлов и который будет файл, который переводчик использует для перевода сообщений в другой язык. Существует несколько инструментов для создания файлов POT. Самый популярный, и тот, который мы будем использовать в этой статье, является кросс-платформенный инструмент под названием Poedit.

  1. Откройте Poedit и создайте новый каталог.
  2. Заполните информацию о проекте во вкладке “Информация о проекте”:Project info tab of Poedit
  3. Во вкладке “Пути” определите папку Poedit для поиска исходных файлов, содержащих переводимые текстовые сообщения. Эти папки по отношению к папке нашего файла языка, так что если мы сохраняем файл в папке в нашей папке темы, то мы должны .. добавить:Paths info tab of Poedit
  4. В вкладке “Ключевые слова” определите функции WordPress, используемые для перевода сообщений (имейте в виду, что Poedit не только для WordPress). В нашей теме, два ключевых слова мы использовали __ и _e .Keywords info tab of Poedit
  5. После нажатия кнопки “OK” Poedit сканирует папки, предоставленные во вкладке Пути, и перечисляет текстовые сообщения в исходных файлах.Messages list in Poedit
  6. Сохраните файл POT в папке, названной languages в справочнике темы:Languages directory with POT file

Пожалуйста, обратите внимание: WordPress не нуждается в файле POT для загрузки конкретного перевода. Файл — это просто шаблон, содержащий все переводные строки сообщений, которые вы можете предоставить переводчику для перевода и возврата вам в качестве .po файла.

Предоставление перевода

Наш файл POT теперь создан! Следующим шагом является перевод сообщений этого файла POT в определенный язык, а затем сохранение его в виде .po файла:

  1. Выберите строку, которая требуется из списка, и введите перевод в поле в нижней части окна.Type translation for a text message in Poedit
  2. Повторяйте это действие до тех пор, пока все сообщения не будут переведены.
  3. Сохранить файл в виде .po файла в той же папке, установив языковой код и код страны, как имя файла (иногда они идентичны), как это определено ISO 639-1 и ISO 3166-1, соответственно. Например, если языком перевода является британский английский, то название будет en_GB.po . Теперь languages папка будет содержать .po .mo и файлы нашего перевода, а также файл POT:Languages directory with .po files

Пожалуйста, обратите внимание: При сохранении .po файла Poedit автоматически создает .mo файл, который является двоичным файлом и не читается человеком.

Обновление файла конфигурации

После того как мы создали .po и .mo файлы, пришло время поручить WordPress, чтобы локализация и для загрузки языковых файлов. Отредактируем wp-config.php файл в корневой папке WordPress и установите WPLANG переменную в соответствующем локаль. Например:

define('WPLANG', ’);

Если мы используем британский английский язык, то мы хотели бы изменить линию выше:

define('WPLANG', 'en_GB');

Как насчет плагинов?

Хотя эта статья посвящена темы WordPress, стоит отметить, что различия в процессе интернационализации плагина незначительны. Подобно тому, что мы сделали, мы говорим WordPress, где найти языковые файлы, добавив следующую функцию в основной файл плагина:

load_plugin_textdomain('myplugin', false, basename( dirname( __FILE__ ) ) . '/languages' );

Первый параметр определяет область текста; использование названия плагина рекомендуется, так как оно должно быть уникальным. Второй параметр определяет траекторию папки, в которой .mo находится файл. Это соответствует амортизированной функции, которая была действительна до WordPress 2.7, поэтому мы указываем его как false . Третьим параметром является папка, в которой находятся языковые файлы (в данном случае мы предполагаем, что они находятся в каталоге с languages именем).

Чтобы загрузить языковые файлы, нам нужно добавить крючок и связать эту функцию в init действие WordPress:

function myplugin_internationalization()
{
    load_plugin_textdomain('myplugin', false, basename( dirname( __FILE__ ) ) . '/languages' );
}
add_action('init', 'myplugin_internationalization');

Наконец, мы обрабатываем текстовые сообщения так же, как и раньше, используя _e($text_message) и __($text_message) функции. После обработки всех текстовых сообщений наш плагин готов к локализации.

Заключение

Пользовательская база WordPress быстро растет, что делает CMS одним из самых популярных инструментов в мире веб-разработки. С людьми, приезжающими со всего мира и говорящими на разных языках, WordPress предлагает гибкую платформу и предоставляет простой метод интернационализации, позволяющий пользователям переводить без каких-либо изменений в исходный код.

Прочие ресурсы

Эта статья охватывает основы интернационализации и локализации WordPress тему. Для получения более подробной информации, посмотрите на следующие связанные ресурсы, доступные в WordPress Codex:

Источник: smashingmagazine.com

Великолепный Журнал

Великолепный, сокрушительный, разящий (см. перевод smashing) независимый журнал о веб-разработке. Основан в 2006 году в Германии. Имеет няшный дизайн и кучу крутых авторов, которых читают 2 млн человек в месяц.

Добавить комментарий

%d такие блоггеры, как: