Статьи

На моем языке, пожалуйста! — Перевод тем WordPress и плагинов

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

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

Цель этой статьи — показать вам, как правильно перевести любую тему или плагин, используя методы интернационализации и локализации. Вкратце, интернационализация (i18n) имеет дело с тем, чтобы строки текста были обернуты в вызовы определенных функций. Это практика подготовки текста к локализации, в то время как сама локализация (L10n) — это процесс перевода текста для определенной локали. WordPress управляет процессом локализации, проверяя конкретные файлы перевода и затем выполняя перевод. Это, конечно, звучит легко, поэтому давайте проверим это.

Начиная

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

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

<?php
$domain = "myplugin";
$path = "myplugin/languages/";
load_theme_textdomain($domain, $path);

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

Вот еще один пример, этот пример взят из файла functions.php

 <?php
load_theme_textdomain( 'twentyeleven', TEMPLATEPATH.'/languages' );
  
$locale = get_locale();
$locale_file = TEMPLATEPATH."/languages/$locale.php";
if ( is_readable( $locale_file ) )
require_once( $locale_file );

Здесь «twentyeleven» — это домен, который соответствует имени каталога темы. Вы можете использовать все, что хотите, но это считается наилучшей практикой. Во втором параметре константа TEMPLATEPATH Оставшийся код говорит WordPress, чтобы получить файл перевода из папки языков.

В случае плагина используемая функция похожа, но принимает три параметра:

 <?php
load_plugin_textdomain($domain, $abs_rel_path, $plugin_rel_path);

$abs_rel_path $plugin_rel_path Вы должны поместить это в свой файл плагина, а не functions.php

 <?php
add_action("init", "pluginname_init");

function pluginname_init() {
   load_plugin_textdomain("myplugin", false, "myplugin/languages/");
}

Использование функций локализации

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

Первая функция готовит ваш текст к переводу и возвращает его для использования в PHP. Вот два примера:

 <?php
$text = "Hello World!";
$domain = "myplugin";
__($text, $domain); // begins with double underscore
 <?php
edit_post_link(__("Edit", "twentyeleven"), '<span class="edit-link">', "</span>");

Функция __()$text Он используется для управления отображением текста, уже содержащегося в тегах PHP. Если файлов локализации, кроме английского, не существует, текст останется прежним. Значение переменной $domain

Вторая функция, которую вы будете использовать, готовит ваш текст к переводу и распечатывает его прямо в браузере. Он принимает те же параметры, что вы только что видели:

 <?php
_e($text, $domain);

Функция _e()$text Это следует использовать для заголовков и заголовков, которые будут отображаться на экране и которые еще не содержатся в тегах PHP.

В некоторых случаях вы захотите использовать заполнители для вставки динамической информации в текстовую строку во время выполнения. Заполнители полезны, потому что они позволяют вам переводить строки, не разбивая их на части. Функции перевода в WordPress не могут самостоятельно выводить заполнители, поэтому вам необходимо использовать соответствующую функцию PHP, такую ​​как printf()sprintf()

 <?php
printf(__("About %s", "twentyeleven"), get_the_author());

Здесь get_the_author()printf()

Иногда вам нужно несколько заполнителей в одной текстовой строке. К счастью, и printf()sprintf() Лучше использовать пронумерованные заполнители, потому что порядок слов на одном языке может отличаться на другом.

 <?php
$site_name = get_bloginfo("name");
$comments_count = wp_count_comments();
$mod_comments = $comments_count->moderated
$appr_comments = $comments_count->approved
$all_comments = $comments_count->total_comments

printf(__('There are %3$s comments on %4$s. %2$s approved and %1$s in moderation.', $domain), $mod_comments, $appr_comments, $all_comments, $site_name);

Создание файлов переводов

Теперь, когда файлы тем или плагинов правильно интернационализированы, вам нужно создавать файлы переводов, которые WordPress будет использовать для поиска перевода.

Первый файл, который вам нужно создать, это файл POT (Portable Object Template). POT-файл содержит список всех переводимых текстовых строк, которые можно найти в вашем приложении, и служит шаблоном для отдельных PO-файлов. Файл PO (Portable Object) — это файл, который отображает текстовые строки в фактический перевод. Переводчики работают с этим файлом, чтобы обеспечить перевод. Файлы POT и PO не обязательны для запуска перевода вашего плагина, но приятно упаковать его вместе с загрузкой вашего плагина для использования другими пользователями, которые могут захотеть обновить переводы в соответствии со своими потребностями. Наконец, PO-файл компилируется в файл MO (Machine Object), который является законченным файлом перевода, который WordPress использует для перевода интернационализированных текстовых строк для вашей темы или плагина.

Когда переводчики создают переводы вашей темы или плагина, они используют ваш файл POT для создания двух файлов: $locale.po$locale.mopluginname-$locale.popluginname-$locale.mo $localeязыка и кода страны, заданного средой gettext GNU — вы можете увидеть сокращения языка и страны в руководстве gettext. Например, WordPress использует «en_US» в качестве локали по умолчанию. «En» обозначает английский, а США обозначает страну / диалект.

Доступны различные инструменты для перевода, которые имеют открытый исходный код и могут быть загружены бесплатно. Однако одним из наиболее распространенных инструментов является Poedit, который прост и удобен в использовании. Вот шаги для создания файла POT с использованием Poedit:

Выберите « FileNew Catalog Откроется окно настроек с тремя вкладками. На вкладке «Информация о проекте» заполните поля ввода, относящиеся к вашему плагину, оставив поле Charset как UTF-8.

На вкладке Пути измените Базовый путь на ../. если вы размещаете свои переводы в папке languages Если нет, то оставьте это по умолчанию.

На вкладке Ключевые слова введите функции, которые вы изучили выше, в качестве ключевых слов.

Нажмите OK и сохраните ваш файл под themename.popluginname.polanguages Poedit отсканирует ваши PHP-файлы в поисках обернутых строк __()_e()

Нажмите ОК. Теперь вы увидите окно со своими строками.

Сохраните файл еще раз и закройте его. В вашем languages Удалите файл MO и переименуйте файл PO с расширением .pot Вот и все. Теперь ваша тема или плагин готовы к переводу.

Если у вас есть необходимые навыки, вы можете пойти дальше и сделать собственно перевод ваших файлов. Для этого выберите « FileNew catalog from POT file Найдите файл POT, откройте его и нажмите кнопку «ОК», чтобы перейти к последующим настройкам каталога (они точно такие же, как вы сами). Poedit спросит вас, что вы хотели бы сохранить как новый PO-файл, — дайте ему соответствующее имя, например es_ES.popluginname-es_ES.polanguages

Теперь просто нажмите на строку, которую вы хотите перевести в Poedit, и введите перевод в поле в нижней части окна Poedit.

Последнее, что вам нужно сделать для того, чтобы ваша тема или плагин были переведены, — это установить вашу локаль в файле wp-config.php Это говорит WordPress искать любые переводы с этим языком и загружать их. Если вы установите для языкового стандарта es_ES (испанский), WordPress загрузит файл с именем es_ES.mopluginname-es_ES.mo

 <?php
define('WPLANG', ''); // this is default for a fresh WordPress installation
define('WPLANG', 'es_ES') // set the second parameter to your locale

Резюме

Как видите, перевод тем и плагинов WordPress — довольно простой процесс. Нет необходимости быть гуру PHP; это просто вопрос выполнения нескольких простых шагов в логической последовательности. И теперь, когда вы хорошо разберетесь в этих шагах, я надеюсь, что вы примените эти знания в существующих или будущих проектах тем или плагинов, что даст пользователям WordPress возможность использовать свою любимую издательскую платформу на естественном для них языке.

Изображение через iQoncept / Shutterstock