Как перевести тему WordPress на русский. Часть 2

Мы продолжаем изучать вопрос перевода тем wordpress на русский. Это вторая статья.

В прошлом уроке мы установили на свой сайт шаблон/плагин, а также подготовили все необходимые для русификации инструменты.

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

В этой статье мы поговорим о том, как сканировать шаблон плагином Codestyling Localization и создавать полные файлы локализации.

В видео показано как создать русский файл локализации для перевода темы wordpress. Объясняется как создается файл локализации, что туда входит и почему.

Содержание видео:

1. Установка плагина Codestyling Localization.
а) Обзор интерфейса плагина
б) Почему я не рекомендую использовать плагин Loco Translate?
в) Конфликты плагина Codestyling Localization со скриптами шаблона. Как исправить?

2. Добавление нового языка перевода и создание файла .PO

3. Сканирование шаблона wordpress плагином Codestyling Localization
а) Библиотека Gettext
б) Единственное и множественное число
в) Функции локализации которые сканирует плагин Codestyling Localization. Примеры функций локализации.
г) Какие выражения плагин Codestyling Localization не добавит в файл .PO. Почему так происходит?
д) Домен локализации — что это и зачем он нужен?

Создание файла локализации с помощью плагина Codestyling Localization

Наша следующая задача — создать русский файл локализации. Для этого мы будем использовать плагин Codestyling Localization и на его примере учиться.

После установки плагина, в админке в разделе Инструменты появится подраздел Локализация.

На этой странице сверху есть меню: WordPress, Плагины, Темы и т.д.

Нас в первую очередь интересуют пункты Плагины и Темы. В этих разделах находятся все темы и плагины, которые установлены на сайте (они не обязательно должны быть активированы, чтобы их увидел плагин Codestyling Localization).

Добавление русского языка

Так как мы говорим о русской локализации шаблона, то переходим по ссылке Темы. Видим список установленных тем. Для каждой темы в колонке Языки указаны доступные языки в виде наличия файлов локализации с расширением .po и .mo.

Файл .po — это файл для редактирования перевода. С ним работают программы. После сохранения перевода в программе Poedit или плагине Codestyling Localization компилируется файл .mo. Именно, из этого файла функции тем и плагинов подтягивают перевод для своих выражений.

Т.е., чтобы отредактировать перевод в файле .mo — необходимо открыть и отредактировать файл .po. Думаю, это понятно.
Для примера я установил и активировал зарубежный премиум-шаблон Sahifa. Этот шаблон по умолчанию не имеет русской локализации.

В колонке Языки отсутствуют языки. Нам нужно добавить Русский язык.
Для этого над колонкой нажимаем на кнопку «Добавить новый язык».

В списке языков находим пункт «ru_RU Русский/Россия», отмечаем этот пункт и нажимаем на кнопку «создать po-файл».

По умолчанию создается пустой файл .po.

Чтобы в этой файл добавить выражения, которые встречаются в админке и на сайте, нужно выполнить сканирование.

Сканирование продукта

Каким образом плагин Codestyling Localization выполняет сканирование продукта?

Плагин сканирует весь исходный код продукта, находит специальные функции (функции библиотеки интернационализации gettext) и добавляет выражения, которые обрамлены такими функциями в файл с расширением .po.

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

Примеры таких функций локализации:

__( 'Category:', 'tie' ),
__( 'Update', 'tie' ),
_e( 'Category Layout', 'tie' );

Оформление таких функций зависит от конкретного места в исходном коде.

В общем, каждая функция состоит из 3 частей: имя функции, строка (выражение, которое нужно переводить) и домен локализации (или еще называют «текстовый домен»).

Примеры имен:

__;
_e;
__ngettext:1,2;
_n:1,2;
__ngettext_noop:1,2;
_n_noop:1,2;
_c,_nc:4c,1,2;
_x:1,2c;
_ex:1,2c;
_nx:4c,1,2;
_nx_noop:4c,1,2

Строки должны быть всегда на английском языке.

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

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

Примеры продуктов, которые очень часто включают в шаблоны:

— WordPress importer
— Redux framework
— Другие фреймворки
— Слайдеры
— Woocommerce
— Установка плагинов
и др.

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

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

Сегодня большинство шаблонов и плагинов имеют поддержку локализации на разные языки (в описании продукта автор указывает Translation Support или Translation Ready). Когда я говорю о поддержке локализации, я имею ввиду то, что автор уже оформил все выражения в соответствующие функции локализации. В рамках данной статьи я не рассматриваю сам процесс оформления выражений, а только работу с уже готовыми функциями.

Сканирование продукта плагином Codestyling Localization

После того как мы добавили язык нажимаем на кнопку «Сканировать».

Появится окно «Сканирование PHP файлов» в котором снова нажимаем на кнопку «Сканировать». Начнется процесс сканирования. После завершения процесса — нажимаем на кнопку «завершить».

После сканирования в папке продукта на сайте появится файл .po со всеми выражениями.
Нажмите на кнопку «Редактировать».

Плагин Codestyling Localization нашел 1156 строк и 2 домена локализации + строки в которых не указан домен локализации (эти строки отмечены в поле Textdomain как Default).

Для строк, для которых не указан домен локализации применяется основной домен локализации, который прописан в функциональном файле продукта.

Плагин Codestyling Localization во время сканирования обращается к функции, которая подключает файлы локализации и которая прописана автором в файле functions.php (или в др. функциональном файле продукта).

В моем случае эта функция находится в файле \framework\functions\theme-functions.php

И имеет такой вид:

load_theme_textdomain( 'tie', get_template_directory() . '/languages' );

По этой функции мы видим, что основной домен — tie, а сам файл локализации находится в языковой папке шаблона.

Но, у нас есть два домена, который нашел плагин Codestyling Localization. Первый основной — tie, а второй — tgmpa.

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

Пример:

load_theme_textdomain( 'tie', get_template_directory() . '/languages' );
load_theme_textdomain( 'tgmpa', get_template_directory() . '/languages' );

 

Это позволит из одного файла локализации подтягивать перевод для разных продуктов/модулей. Рекомендую так всегда делать, если есть несколько доменов.

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

Примеры функций подключения локализации для темы:

load_theme_textdomain( 'textdomain', TEMPLATEPATH . '/languages/' );

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

Примеры функций подключения локализации для плагина:

function myplugin_init() {
  load_plugin_textdomain( 'textdomain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action('plugins_loaded', 'myplugin_init');
load_plugin_textdomain('textdomain', dirname(__FILE__) . '/languages/product-' . get_locale() . '.mo');

Языковые папки могут иметь разные названия: languages, lang, locales и др. А сами файлы локализации могут находится в этих папках, а могут находится и в корневой папке продукта. А иногда основной файл локализации после сканирования падает в языковую папку вторичного продукта, который подключен к основному продукту. В этом случае файл локализации нужно скачать через ФТП из этой папки, перевести и закачать в основную языковую папку продукта.

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

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

В следующей статье я расскажу о том, как переводить файлы локализации.

Дополнительно

Как найти в исходном коде продукта функцию подключения файла локализации?

Это можно сделать через Total Commander, через поиск слова textdomain. Или можно создать проект в программе Adobe Dreamweaver CS6 и уже через поиск найти слово textdomain.