Как перевести тему WordPress на русский. Часть 2
Мы продолжаем изучать вопрос перевода тем wordpress на русский. Это вторая статья.
В прошлой статье Как перевести тему WordPress на русский. Часть 1 мы установили на свой сайт шаблон/плагин, а также подготовили все необходимые для русификации инструменты.
Замечу, что советы в этой статье подойдут одинаково как для локализации шаблона, так и для локализации плагина.
В этой статье мы поговорим о том, как сканировать шаблон плагином 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.
Свои вопросы, замечания и рекомендации — пишите в комментариях.