Статьи

Как интернационализировать темы и плагины WordPress

В 5 «Кардинальных грехах разработки тем WordPress» мы кратко говорили о значении интернационализации тем и плагинов, но на самом деле мы не обсуждали, как это сделать.

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


Когда дело доходит до интернационализации проектов WordPress, возможно, самым сложным является понимание того, как это сделать — интернационализация проекта WordPress действительно очень проста.

Прежде чем посмотреть, как это сделать, важно взглянуть на значение интернационализации и почему мы, как разработчики, должны даже потрудиться сделать это.

Проще говоря, интернационализация — это процесс, с помощью которого мы готовим нашу тему к переводу. Это означает, что независимо от того, какой [разговорный] язык использовался для развития нашей работы, будущие пользователи (или даже разработчики) могут легко перевести проект на любой требуемый язык. Интернационализация на самом деле не требует, чтобы мы предоставили переводы (хотя многоязычный среди нас мог бы легко это сделать), просто мы предпринимаем шаги, необходимые для того, чтобы будущие переводчики сделали это.

Несколько лет назад я бы сказал, что интернационализация должна проводиться только в том случае, если целевой рынок для вашей работы отличается от вашего родного языка, но это уже не так. Благодаря Интернету мы можем общаться, сотрудничать, и общаться с людьми со всего мира. Потенциальная аудитория для любого данного проекта шире, чем когда-либо прежде.

Более того, WordPress поддерживает значительное количество современных веб-сайтов. С этой целью мы должны глобально думать о нашей работе. Я бы сказал, что интернационализация коммерческих тем или плагинов больше не подлежит обсуждению. Если платформа, на которой построена ваша работа, используется разными языками — а WordPress — и что платформа предоставляет простой и понятный способ интернационализации темы — а WordPress — то это больше вопрос, почему я не интернационализировать мою работу.

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

В любом случае, это единственное уникальное значение, которое WordPress будет использовать для интернационализации текста по всей вашей теме. — __ ($ text, $ key) — это функция, которая возвращает переведенную строку. Эта функция не выводит, не печатает и не отображает строку. Это часто используется, когда необходимо выполнить другую операцию с переведенной строкой (например, передать ее в другую функцию). Он принимает два аргумента — строку для перевода и ключ интернационализации. — _e ($ text, $ key) — это функция, которая фактически отображает переведенную строку.

Это лучше всего использовать, когда вам нужно получить переведенное значение и отобразить его где-нибудь в вашей теме или плагине. переводы. Мы рассмотрим эти функции немного подробнее подробнее.

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


Прежде чем интернационализировать тему, давайте посмотрим, как выглядит стандартная часть разметки:

1
2
3
<h1>My WordPress Blog</h1>
<h2>Just one of the best sites on the Internet</h2>
<p>This paragraph is only the best paragraph that exists in all of the WordPress blogs on the Internet.

Ничего впечатляющего, верно? Выглядит как стандартный кусок HTML (и это все, что есть). Конечно, это простой пример, но это все, что требуется, чтобы продемонстрировать, как интернационализировать тему.

Чтобы интернационализировать этот текст выше, нам нужно определить, какой уникальный идентификатор мы будем использовать для интернационализации нашего текста — я собираюсь перейти к «tutsplus». Во-вторых, поскольку весь приведенный выше текст отображается на экране, мы будем использовать функцию __e (). Интернационализированный код должен быть:

1
2
3
<h1><?php _e(‘My WordPress Blog’, ‘tutsplus’);
<h2><?php _e(‘Just one of the best sites on the Internet’, ‘tutsplus’);
<p><?php _e(‘This paragraph is only the best paragraph that exists in all of the WordPress blogs on the Internet. Read it and enjoy.’, ‘tutsplus’);

Но как насчет текста, который необходимо перевести перед отображением на экране? Это не сильно отличается, но давайте посмотрим, как мы можем интернационализировать боковые панели.

Сначала давайте настроим боковую панель:

1
2
3
4
5
6
register_sidebar(
    array(
        ‘name’ => ‘Custom Sidebar’,
        ‘id’ => ‘sidebar’
    )
);

Для справки я использую функцию register_sidebar, доступную через WordPress API. Обратите внимание, что имя боковой панели отображается на экране виджетов. Как таковой, мы должны интернационализировать это; однако массив не принимает отображаемую строку — он принимает строковое значение.

В этом случае мы воспользуемся функцией __ ():

1
2
3
4
5
6
register_sidebar(
    array(
        ‘name’ => __(‘Custom Sidebar’, ‘tutsplus’),
        ‘id’ => ‘sidebar’
    )
);

Достаточно просто, а?

Помните, интернационализация должна применяться только к статическому тексту. Разработчик не несет ответственности за обеспечение интернационализации содержимого страницы, публикации содержимого и т. Д.


После того, как вы просмотрели свою тему и правильно обратились к тексту, который необходимо интернационализировать, вы должны указать теме или плагину, где найти файлы интернационализации. Мы рассмотрим это более подробно в мгновение ока, но сначала я всегда рекомендую создать каталог ‘lang’ в корне каталога темы или плагина для хранения файлов интернационализации.

Помните функции load_theme_text_domain и функции load_plugin_text_domain из предыдущих? Вот где мы их используем. Если вы работаете с темой, нам нужно определить пользовательскую функцию, которая вызывается в хуке after_setup_theme :

1
2
3
4
5
function custom_theme_setup() {
     
 
} // end custom_theme_setup
add_action(‘after_setup_theme’, ‘custom_theme_setup’);

Далее мы расскажем функции, где найти переводы. Для этого добавьте следующие строки в вашу тему (обратите внимание на комментарии, объясняющие, что делает каждая строка):

01
02
03
04
05
06
07
08
09
10
function custom_theme_setup() {
 
    // Retrieve the directory for the internationalization files
    $lang_dir = get_template_directory() .
     
    // Set the theme’s text domain using the unique identifier from above
    load_theme_textdomain(‘tutsplus’, $lang_dir);
 
} // end custom_theme_setup
add_action(‘after_setup_theme’, ‘custom_theme_setup’);

Относительно просто, верно? Для плагинов это не сильно отличается. Подобно темам, я всегда помещаю файлы интернационализации моего плагина в подкаталог ‘lang’. Во-первых, мы должны сообщить WordPress, где находятся файлы интернационализации. Предполагая, что вы находитесь в каталоге ‘lang’:

1
load_plugin_textdomain(‘tutsplus’, false, dirname(plugin_basename(__FILE__)) . ‘/lang/’);

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

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

1
2
3
4
5
6
7
class My_Custom_Widget {
 
    function My_Custom_Widget() {
        load_plugin_textdomain(‘tutsplus’, false, dirname(plugin_basename(__FILE__)) . ‘/lang/’);
    } // end constructor
     
} // end My_Custom_Widget

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

1
2
3
4
function custom_plugin_setup() {
    load_plugin_textdomain(‘tutsplus’, false, dirname(plugin_basename(__FILE__)) . ‘/lang/’);
} // end custom_theme_setup
add_action(‘after_setup_theme’, ‘custom_plugin_setup’);

На данный момент ваша тема или плагин готовы к интернационализации.


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

  • Перевести текст. Переводчики будут обрабатывать вашу тему с помощью приложения для перевода (такого как POEdit ), которое будет генерировать файлы, которые хранятся в вашем каталоге «lang», где WordPress будет извлекать файлы.
  • Обновления WP-Config.php. На этом этапе переводчики должны будут проинструктировать WordPress для включения интернационализации и указать, какой язык они используют. Это выходит за рамки данной статьи, но вы можете прочитать больше об этом в Кодексе .

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

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