Эта статья охватывает основы интернационализации, которая представляет собой процесс разработки темы таким образом, что конечный пользователь может адаптировать его к различным языкам без необходимости изменения исходного кода, и локализации, которая является процессом перевода текста сообщения на определенный язык. Расширение круга пользователей нашей темы является большим делом,и WordPress предоставляет простой способ сделать это.
- Как вести локализацию веб-сайта
- Интернационализация, управляемая CSS в JavaScript
- Если вы спросите пользователя или его браузер?
- Дневник WordCamp
Обзор процесса
Вот краткий обзор процесса интернационализации и локализации 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. В этом случае мы используем 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.
- Откройте Poedit и создайте новый каталог.
- Заполните информацию о проекте во вкладке «Информация о проекте»:
- Во вкладке «Пути» определите папку Poedit для поиска исходных файлов, содержащих переводимые текстовые сообщения. Эти папки по отношению к папке нашего файла языка, так что если мы сохраняем файл в папке в нашей папке темы, то мы должны
..
добавить: - В вкладке «Ключевые слова» определите функции WordPress, используемые для перевода сообщений (имейте в виду, что Poedit не только для WordPress). В нашей теме, два ключевых слова мы использовали
__
и_e
. - После нажатия кнопки «OK» Poedit сканирует папки, предоставленные во вкладке Пути, и перечисляет текстовые сообщения в исходных файлах.
- Сохраните файл POT в папке, названной
languages
в справочнике темы:
Пожалуйста, обратите внимание: WordPress не нуждается в файле POT для загрузки конкретного перевода. Файл — это просто шаблон, содержащий все переводные строки сообщений, которые вы можете предоставить переводчику для перевода и возврата вам в качестве .po
файла.
Предоставление перевода
Наш файл POT теперь создан! Следующим шагом является перевод сообщений этого файла POT в определенный язык, а затем сохранение его в виде .po
файла:
- Выберите строку, которая требуется из списка, и введите перевод в поле в нижней части окна.
- Повторяйте это действие до тех пор, пока все сообщения не будут переведены.
- Сохранить файл в виде
.po
файла в той же папке, установив языковой код и код страны, как имя файла (иногда они идентичны), как это определено ISO 639-1 и ISO 3166-1, соответственно. Например, если языком перевода является британский английский, то название будетen_GB.po
. Теперьlanguages
папка будет содержать.po
.mo
и файлы нашего перевода, а также файл POT:
Пожалуйста, обратите внимание: При сохранении .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