Webamator Blog

Интернационализация плагинов Wordpress
MENU
Home » Сайтостроителю » Интернационализация плагинов Wordpress

Интернационализация плагинов Wordpress

Итак, предположим мы написали некий плагин, который уже успешно работает. Один из способов сделать его более популярным – это добавить возможность перевода на другие языки.
Интернационализация и транслитерация.
Для начала давайте определимся с терминами. Перевод готового плагина – это транслитерация. А когда при написании плагина мы создаем возможность сделать этот самый перевод – это интернационализация. Именно о ней мы будем говорить в нашем сегодняшнем уроке. Стоит отметить, что интернационализацию часто сокращенно обозначают i18n (потому что в этом слове (Internationalization) между ‘i’ и ‘n’ 18 букв), а локализацию сокращают l10n (потому что аналогично между ‘l’ и ‘n’ размещается 10 букв).

Заголовки перевода.

Первый шаг к интернационализации, будет заключаться в добавлении заголовков перевода.
Заголовки перевода – это Text Domain и Domain Path.
Text Domain используется для обозначения всего текста, принадлежащего плагину.
Это уникальный идентификатор, который обеспечивает WordPress возможность различать все загруженные переводы. Это позволяет сохранять компактность файлов и обеспечивает лучшее взаимодействие с уже существующими инструментами WordPress.
Простой пример, сравните два варианта кнопки настроек:

<input type="submit" name="settingsUpdated" value="<?php _e('Save Changes') ?>" />

и

<input type="submit" name="settingsUpdated" value="<?php _e('Save Changes', 'my-plugin') ?>" />

В первом случае плагин выведет текст, соответствующий строке “Save Changes” самого вордпресса. А во втором случае указан Text Domain, и плагин выведет текст, указанный вами в процессе перевода плагина.
Domain Path – это каталог, в которой WordPress будет искать файлы перевода .mo. Если он не указан, WordPress будет искать файлы .mo в корневой папке плагина.
Простой пример Text Domain и Domain Path:

Text Domain: my-plugin
Domain Path: /languages/

Перевод строк.

Чтобы сделать строку переводимой, просто используйте функцию __():

$text =  __( 'Hello, User!', 'my-plugin' );

А чтобы вывести строку в браузере, используйте функцию _e():

_e( 'Hello, User!', 'my-plugin' );

Иногда вам понадобится вывод переменных, в этом случае воспользуйтесь функцией printf:

$name = 'Donald';
printf(
    __( 'Your name is %s.', 'my-plugin' ),
    $name
);

Иногда строка должна меняться в зависимости от количественного значения переменной, например:
Вы получили 1 сообщение
Вы получили 5 сообщений
В таком случае воспользуйтесь функцией _n(). Функция принимает 4 аргумента:
Singular – единственная форма строки;
Plural – множественная форма строки;
Count – количество объектов;
Text Domain – text domain плагина.

printf(
    _n(
        'One message',
        '%s messages',
        $messages,
        'my-plugin'
    ),
    $messages
);

Следует учесть, что функция _n() подходит только для английского и похожих на него языков (т.е. таких, в которых единственная и множественная формы отличаются одной буквой). Для украинского, русского и некоторых других (например в русском единственная форма одна – 1 сообщение, а множественных уже две – 2 сообщения но 5 сообщений) придется использовать сторонние решения, к примеру вот такое.

Генерация .po и .mo файлов.

После того, как строки будут помечены для перевода в исходных файлах, можно будет воспользоваться специальным средством xgettext, которое извлечет оригинальные строки и сформирует шаблонный файл перевода POT (Portable Object Template).
пример строки в файле POT:

#: my-plugin/my-plugin.php:159
msgid "Your settings are saved"
msgstr ""

Файл .po (Portable Object) имеет тот же самый формат, но также содержит и переведенную строку:

#: my-plugin/my-plugin.php:159
msgid "Your settings are saved"
msgstr "Ваши настройки сохранены"

Из переведенного файла .po специальным редактором (к примеру Poedit) создается файл .mo (Machine Object) – двоичный файл, содержащий в себе оригинальные строки и их переводы в формате, подходящем для быстрого извлечения.

Советы при интернационализации.

Точный английский стиль — минимум сленга и сокращений
Полные предложения – в большинстве языков порядок слов отличается от использования в английском.
Разбиение на абзацы – объединяйте связанные предложения, правда, без перебора; не стоит вставлять целую страницу сплошного текста, набранного в одной строке.
Используйте форматирование строк вместо их конкатенации: запись sprintf(__(‘Replace %1$s with %2$s’), $a, $b); лучше, чем __(‘Replace ‘).$a.__(‘ with ‘).$b;
Избегайте использования ненужной разметки и управляющих символов – не включайте теги, окружающие текст, и не оставляйте URL для трансляции.
Не оставляйте в переводимой фразе начальные или конечные пробелы.
Ваш Text Domain, который чаще всего совпадает с названием плагина, не должен содержать в себе знаков подчеркивания.

Удачного кодинга! А если что-то непонятно – как всегда, можете уточнить в комментариях.

Popularity: 37%

Добавлено 4 января 2016
Рубрика: Сайтостроителю
Метки: ,

Если данный пост показался вам полезным или интересным, нажмите на одну из кнопок ниже - от vkontakte, facebook, tweeter или google+, чтобы о нем узнали ваши друзья. Спасибо!

Также рекомендую публикации, похожие на "Интернационализация плагинов Wordpress"

Подключение JS только там, где это необходимо

Один из методов ускорения скорости загрузки сайтов на вордпресс – подключение дополнительных файлов только там, где это необходимо. Если судить по тем сайтам, которые меня просили оптимизировать, проблема достаточно [...]

SLON – пример плагина

Повторное подключение JavaScript приводит к его повторному выполнению, то есть к проблеме производительности сайта. Кроме того, это может привести к неприятным побочным эффектам – например, если данный скрипт [...]

Single Load Only. Избавляемся от дублирования js

В данной статье я расскажу об одной из проблем Wordpress – повторному подключению javascript. Подключение скрипта несколько раз приводит к его повторному выполнению, т.е. страдает производительность. Кроме того, [...]

WA Edit States List – бесплатный плагин для WooCommerce

Иногда владельцам магазина на базе WooCommerce требуется изменить список штатов США на странице оформления заказа. Причины могут быть разными – например, владелец не хочет доставлять свои товары в [...]

Нет комментариев

No comments yet.

RSS feed for comments on this post.

Leave a comment