Важная часть разработки WordPress темы, это подготовить ее так, чтобы пользователи из разных уголков планеты могли переводить ее сообщения на любой язык. В данной статье рассматриваются основы интернационализации, которая представляет собой процесс проектирования темы таким образом, что конечный пользователь может адаптировать ее к различным языкам без изменения исходного кода, и локализации, которая представляет собой процесс перевода текстовых сообщений на конкретный язык. Расширение круга пользователей нашей темы большое дело и WordPress предоставляет простой способ сделать это.
(Изображение: somegeekintn)
Обзор процесса
Вот краткий обзор процесса интернационализации и локализации WordPress темы:
- Загрузить текстовую область
- Обработать текстовые сообщения при помощи функций WordPress,
- Извлечь эти сообщения используя соответствующее программное обеспечение
- Предоставить перевод для каждого сообщения,
- Создать языковой файл для конкретной локали,
- Поручить 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.
- Откройте Poedit, и создайте новый каталог.
- Заполните информацию о проекте во вкладке “Project info”:
- Во вк …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров