Эта статья охватывает основы интернационализации, которая представляет собой процесс разработки темы таким образом, что конечный пользователь может адаптировать его к различным языкам без необходимости изменения исходного кода, и локализации, которая является процессом перевода текста сообщения на определенный язык. Расширение круга пользователей нашей темы является большим делом,и 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

