Интернационализация и локализация WordPress темы

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



globe
(Изображение: somegeekintn)

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

Вот краткий обзор процесса интернационализации и локализации 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. В этом случае мы используем PHP функцию sprintf  для получения окончательной строки сообщения:

$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”:Project info tab of Poedit
  3. Во вк …

    Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров


Comments are closed.