Содержание

Плагин Loco Translate

После установки и активации плагина в админ-панели появится новый пункт меню плагина:

Как можно заметить, плагин позволяет делать перевод как темы, так и плагина.

Перевод темы

Будем делать перевод на примере англоязычной темы Experon.

Итак, в админ-панели переходим Переводчик Loco -> Themes.

Перед Вами открылся список всех тем, установленных на сайте. Выбираем Experon.

Как видно из рисунка, для нашей темы еще нет ни одного перевода. Итак, для создания файла перевода необходимо нажать New language. Далее в поле Choose a language следует выбрать русский язык, а в поле Choose a location отметить пункт System (в этом случае Ваш языковый файл сохранится, даже если Вы обновите тему).

После нажатия кнопки Start translating Вы попадаете в редактор языкового файла.

Окно редактора разделено на 3 основных блока. В первом блоке имеется список всех текстовых ресурсов, которые используются в теме. Под ним располагается блок основного перевода (английского). Самый нижний – это русский перевод. В нем мы и будем вносить наши переводы. Итак, для начала в первом блоке нужно выбрать текстовую фразу, которую будем переводить. Пусть это будет “Sorry, we could not find the page you are looking for.” Дальше в блоке Russian translation вписываем уже эту переведенную текстовую фразу (можно воспользоваться Гугл-переводчиком). В итоге должно получится так:

Дальше, выбирая следующую фразу, тоже вносим ее перевод. После перевода всего текста необходимо нажать кнопку Save. Чтобы проверить результат перевода в нашем примере, необходимо на сайте перейти на несуществующую страницу (например, site.ru/abcdefg).

Перевод плагина

Действия по переводу плагина являются аналогичными. Чтобы попасть в список плагинов, необходимо в админ-панели перейти Переводчик Loco -> Plugins, выбрать нужный для перевода плагин и нажать New language. Далее аналогично выбираете русский язык и отмечаете System. После перевода всех текстовых блоков необходимо будет нажать кнопку Save.

Важно!!! Для применения Ваших переводов необходимо, чтобы язык сайта был русским. Для этого в админ-панели следует перейти Настройки -> Общие и в пункте Язык сайта выбрать Русский.

Приложение Poedit

Перевод на основе существующего шаблона

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

/wp-content/themes/experon/languages/experon.pot

Языковые файлы обычно располагаются в подкаталоге languages основного каталога плагина или темы.

Если сайт находится уже на хостинге, то файл нужно будет скопировать себе на компьютер (например, через FileZilla). В случае, если сайт находится локально, то для этого просто нужно будет указать его месторасположение.

Итак, после запуска программы Poedit, Вам будет предложено выбрать операцию:

Для начала перевода необходимо выбрать Создать новый перевод и указать на файл перевода (в нашем случае – это experon.pot). После нажатия клавиши Открыть, Вам будет предложено выбрать будущий язык перевода. Выбираем русский и нажимаем кнопку OK. В итоге Вы попадете в окно, в котором увидите уже знакомые 3 блока.

Будем переводить ту же фразу (“Sorry, we could not find the page you are looking for.”) Итак, вставив перевод в блоке Перевод:, должно получится следующее:

После вставки всех переведенных текстовых блоков необходимо нажать кнопку Сохранить. Программа предложит создать новый файл, предлагая дать ему название. Имя файла следует указать experon-ru_RU. Первая часть названия – это имя темы, а вторая – язык. Отметим, что важно придерживаться такой схемы, иначе перевод просто не будет работать.

В итоге было создано 2 файла:

experon-ru_RU.mo experon-ru_RU.po

Их нужно будет поместить в каталог

/wp-content/languages/themes

В результате Ваш перевод сохранится, даже если Вы обновите тему.

С переводом плагина ситуация аналогичная. Только эти 2 файла необходимо будет поместить в каталог

/wp-content/languages/plugins

Создание нового шаблона

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

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

Рассмотрим создание нового шаблона перевода на примере темы. Для плагина все действия будут аналогичными.

Итак, для создания нового шаблона в программе Poedit нужно в меню Файл выбрать пункт Создать, и указать язык перевода. Дальше необходимо сохранить этот файл шаблона (обычно это /wp-content/themes/Ваша_тема/languages), нажав кнопку Сохранить и указав его имя (для русского языка оно должно быть ru_RU). Все, шаблон создан, и теперь можно переходить к его наполнению текстовыми фразами Вашей темы.

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

9 лучших плагинов для перевода вашего WordPress сайта

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

1. Polylang

Polylang это бесплатный плагин перевода. Он позволяет вам создавать мультиязычный контент на неограниченном количестве языков.

Polylang позволяет вашим пользователям выбирать предпочитаемый язык в своем профиле и автоматически скачивает соответствующий языковой пакет WordPress.

WordPress полностью поддерживает RTL языки и работает с большинством тем WordPress.

2. WPML

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

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

3. qTranslate X

qTranslate X — еще один мощный бесплатный плагин перевода для WordPress. Он похож на Polylang и WPML по функционалу. Плагин предлагает простой способ создания мультиязычного контента.

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

4. xili-language

xili-language — это бесплатный и мощный плагин для создания мультиязычности в WordPress. Он не только позволит вам создавать материалы на разных языках, но и подгрузит языковые файлы вашей темы в зависимости от языка контента.

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

5. Google Language Translator

Перевод вашего контента на различные языки занимает много времени и усилий. Именно поэтому многие владельцы сайтов пользуются онлайн-переводчиками вроде Google Translate.

Плагин Google Language Translator предлагает простой способ добавления Google Translate на ваш WordPress сайт. Подробнее о том, как добавить Google Translate в WordPress можно узнать в нашей статье.

6. Gtranslate – Google Translate

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

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

7. Transposh WordPress Translation

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

8. Bing Translator

Как и Google, Bing предлагает инструменты автоматического перевода. Плагин Bing Translator использует переводчик Bing для автоматического перевода контента ваших страниц. Разработанный Microsoft Open Technologies, этот плагин не обновлялся уже длительное время, но это не сказывается на его работоспособности.

9. Goo Translate Widget

Еще одним простым способом добавления Google Translate на ваш WordPress сайт является плагин Goo Translate Widget. Этот простой плагин добавляет мощный виджет на ваш сайт.

Просто перетяните виджет в сайдбар, выберите нужный язык, а затем сохраните настройки.


Заключительная статья в рубрике про шаблоны будет не большая, и ответит на вопрос как перевести шаблон wordpress на русский. Большинство бесплатных шаблонов не на русском языке, поэтому для удобства пользования посетителями надо все переводить.

Ручной перевод

Ручной перевод разберу на примере страницы 404, чтобы ее открыть надо ввести всякую ерунду адрес страницы.

Как видите страница не переведена, поэтому надо исправлять. Страница ошибки ввода адреса находиться в файле 404.php. Можете его открыть по любому либо через файловый менеджер, либо через стандартный редактор. Для простоты я открою через стандартный редактор html. На скриншоте показан путь до данной страницы.

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

Вот эти места надо исправлять. Для понимания как искать необходимые места надо скопировать тот текст, который написан на английском. Для этого надо скопировать английский текст на странице сайта.

Идем в редактор, нажимаем cntrl+f для вывода поиска, и вводим там эту фразу. На скриншоте написан весь алгоритм.

Найдена одна строчка, ее и меняем, если не дословно, то она переводится “похоже ничего не было найдено, попробуйте изменить ссылку либо использовать поиск”, берем и меняем. После изменения не забываем всё сохранять.

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

На этом можно закончить ручной перевод. Остальные моменты меняйте сами в остальных файлах темы, потому что все показать нельзя в рамках одной статьи. Осуществляется все по плану.

  • Находим фразы для перевода.
  • Ищем их в коде сайта.
  • Обновляем и сохраняем.

Переходим к программной части.

Переводим с помощью программы

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

В корне темы должна быть папка languages и в ней стандартный файл перевода .pot тогда все в порядке.

Если данной папки нет, то можете дальше не читать этот раздел, а переходить ниже.

Папка обнаружена, и это хорошо. Начинаем подготовку, надо скачать файл .pot на компьютер- открываем languages, и находим.

Скачали и переместили в удобное для вас место. Теперь скачиваем программу poedit здесь и устанавливаем ее.

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

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

Есть пункт перевода темы wordpress, но она будет открыта только после покупки программы, поэтому работаем дальше.

Далее открываем необходимый файл перевода, который скачивали из темы.

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

Открывается основное окно программы переводчика тем, скрин и к нему описание.

  1. Выделяем строку фразы, которую будем переводить.
  2. Она дублируется сюда.
  3. Сюда пишем сам перевод к данной строчке.
  4. Как написали перевод сразу автоматом покажется здесь.
  5. Остальные строки шаблона подлежащие переводу.
  6. Сохраняем.

После процедуры сохранения, у вас должно образоваться 2 файла ru_RU.

Закидываем их в папку languages в теме.

И для проверки я обновлю страницу 404, должно сработать автоматически. Смотрите ниже на скриншот, у меня все получилось.

На этом данный способ разобрали, переходим к следующему.

Что переводить?

Прежде чем переходить к переводу, давайте определимся что нам нужно перевести, потому что это влияет на то, как нужно переводить.

Перевод темы/плагина из каталога WordPress

Для такого перевода нужно использовать сайт translate.wordpress.org. Что нужно сделать:

  1. Авторизоваться.
  2. Выбрать нужный язык перевода
  3. Найти плагин/тему которую нужно перевести.
  4. И прям на сайте переводить.
  5. После того, как ваш перевод будет проверен, в админке вашего сайта на WordPress вы уведите обновления перевода для плагина/темы.

    Заметка: обновление появится не раньше, чем 95% всего перевода будет готово. Чтобы ускорить проверку, можете написать на форум в раздел «переводы» или в русскоязычный slack на канал #translations.

  6. Обновляем. Перевод сделан!

Заметка: Не все плагины из каталога поддерживают перевод через translate.wordpress.org. В таких случаях переводить нужно как обычно (читайте следующий пункт).

Перевод темы/плагина НЕ из каталога WordPress

В этом случае, нужно:

  1. Открыть папку плагина и найти в ней файлы перевода. Это файл .po, .pot, .mo. Обычно они лежать в папках languages или lang.
  2. Затем переходите к «Этап 2» из этой статьи. Т.е. вам нужно будет создать .mo файл перевода. Для создания такого файла, используйте программу Poedit и .pot (если есть в плагине) или .po файл (закидывайте этот файл в Poedit и там создаете перевод на свой язык, сохраняете его с правильным названием). Или для создания .mo файла можно использовать плагин «Loco Translate», он даже удобнее (подробности в этой статье не описаны).

Перевод своей темы/плагина

Как это делается и работает описано ниже в «Этап 1» и «Этап 2».

Если вы планируете размещать ваш плагин/тему в каталоге WordPress. То настоятельно рекомендуется делать перевод через translate.wordpress.org. Подробнее об этом читайте в руководстве (англ.) (подробности в этой статье не описаны).

меню

Как работает перевод в WordPress (теория)

Начать надо с самого главного: файлов перевода: .mo .po .pot. PHP работает только с .mo файлом, .po и .pot — они для людей и программ перевода.

  • .pot файл (Portable Object Template) — содержит оригинальные строки перевода (без перевода). Это шаблон перевода. POT файл является основой для создания .po файла (для создания перевода на любой язык). POT файл не является обязательным файлом, перевод можно делать и без него — это просто шаблон. Как создать .pot файл читайте ниже.

  • .po файл (Portable Object) — содержит оригинальные строки перевода и сам перевод этих строк. Его можно изменять в любом текстовом редакторе или в программе (например Poedit, с ней мы и будет работать ниже). Из .po файла автоматически создается .mo файл.

  • .mo файл (Machine Object) — скомпилированный вариант PO файла. Cодержит бинарные данные, которые парсит WordPress и создает из них данные для перевода отдельных строк. Используется для перевода тем/плагинов и импортируется в GNU gettext.

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

Таким образом, чтобы переводить строки в теме/плагине нам нужно:

  1. Создать файл .mo и разместить его в папку темы/плагина. Или в глобальную папку переводов.

  2. Подключить этот файл в теме/плагине с помощью одной из функций: load_theme_textdomain(), load_plugin_textdomain(). (Если размещается в глобальной папке подключать необязательно, WP сам это сделает).

  3. Использовать специальные функции перевода: , _x(), _n() и другие.

Важно понимать, что при подключении .mo файла ему задается идентификатор (параметр $domain) и такой идентификатор (домен) указывается для функций перевода строк. Домен связывает файл .mo с функциями перевода. Т.е. при переводе, в функции мы указываем из какого MO файла нужно получить перевод указанной строки. Пример:

// подключаем MO файл перевода и указываем ему ID — mydomain: load_theme_textdomain( ‘mydomain’, get_template_directory() . ‘/languages’ ); // переводим — опять указываем ID — mydomain: _e( ‘Comment:’, ‘mydomain’ ); меню

Этап 1: Создадим свой плагин и переведем его

Если у вас уже есть готовая тема/плагин и её простой нужно перевести, переходите сразу к переводу (этап 2).

Чтобы процесс перевода был понятен, давайте создадим очень просто плагин и переведем его на русский язык. Назовем плагин my-translation-demo. У нас должна получиться такая структура плагина:

  1. В папке плагинов WordPress создадим папку my-translation-demo: /plugins/my-translation-demo.
  2. В этой папке создадим папку lang: /my-translation-demo/lang.
  3. Создадим файл my-translation-demo.php: /my-translation-demo/my-translation-demo.php.
  4. Добавим следующий код в созданный php файл:

<?php /** * Plugin Name: Demo WordPress translation * Description: Test plugin for learning how to create translations in WordPress * Author: Kama * Version: 0.1 * Text Domain: myl10n * Domain Path: /lang */ // строки для перевода заголовков плагина, чтобы они попали в .po файл. __( ‘Demo WordPress translation’ ); __( ‘Test plugin for learning how to create translations in WordPress’ ); // подключение файла перевода // здесь .mo файл должен лежать в папке /lang, которая находится в папке текущего файла // файл должен назваиться «$domain-локаль»: myl10n-ru_RU.mo add_action( ‘plugins_loaded’, function(){ load_plugin_textdomain( ‘myl10n’, false, dirname( plugin_basename(__FILE__) ) . ‘/lang’ ); } ); // страница админки add_action( ‘admin_menu’, function(){ add_options_page( __(‘Demo translation’,’myl10n’), __(‘Demo translation’,’myl10n’), ‘manage_options’, ‘myl10n_plugin’, function(){ _nx_noop( ‘%s noop star’,’%s noop stars’,’Контекст _nx_noop’,’myl10n’ ); _n_noop( ‘%s noop star’,’%s noop stars’,’myl10n’ ); ?> <div class=»wrap»> <h2><?php echo get_admin_page_title() ?></h2> </div> <h3><?= __( ‘Different variants of translation in WordPress.’,’myl10n’) ?></h3> <p class=»description»><?= __( ‘WordPress translation functions.’,’myl10n’) ?></p> <p>_e() — <?php _e( ‘Some translation text.’,’myl10n’ ); ?></p> <p>_ex() — <?php _ex( ‘Some translation text.’,’Фраза контекста _ex’,’myl10n’ ); ?></p> <p>_x() — <?php echo _x( ‘Some translation text.’,’Контенкст echo _x’,’myl10n’ ); ?></p> <p>_n(1) — <?php printf( _n( ‘%s star’,’%s stars’, 1, ‘myl10n’ ), 1 ); ?></p> <p>_n(3) — <?php printf( _n( ‘%s star’,’%s stars’, 3, ‘myl10n’ ), 3 ); ?></p> <p>_n(10) — <?php printf( _n( ‘%s star’,’%s stars’, 10, ‘myl10n’ ), 10 ); ?></p> <p>_nx(1) — <?php printf( _nx( ‘%s star’,’%s stars’, 1, ‘Фраза контекста для множественного числа _nx’,’myl10n’ ), 1 ); ?></p> <p>_nx(3) — <?php printf( _nx( ‘%s star’,’%s stars’, 3, ‘Фраза контекста для множественного числа _nx’,’myl10n’ ), 3 ); ?></p> <p>_nx(10) — <?php printf( _nx( ‘%s star’,’%s stars’, 10, ‘Фраза контекста для множественного числа _nx’,’myl10n’ ), 10 ); ?></p> <p>esc_attr__() — <?php echo esc_attr__(‘string 1′,’myl10n’) ?></p> <p>esc_attr_e() — <?php esc_attr_e(‘string 2′,’myl10n’) ?></p> <p>esc_html__() — <?php echo esc_html__(‘string 3′,’myl10n’) ?></p> <p>esc_html_e() — <?php esc_html_e(‘string 4′,’myl10n’) ?></p> <?php } ); } );

Плагин готов! Зайдем в админку, активируем плагин, перейдем на страницу плагина.

В плагине используются все функции перевода, которые есть в WordPress. А также подключается еще не существующий .mo файл перевода myl10n-ru_RU.mo. После создания .mo файла плагин будет переведен (его мы создадим ниже).

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

* Text Domain: myl10n * Domain Path: /lang

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

// строки для перевода заголовков плагина, чтобы они попали в .po файл. __( ‘Demo WordPress translation’ ); __( ‘Test plugin for learning how to create translations in WordPress’ );

Также WordPress использует параметр Text Domain: чтобы искать файл перевода в глобальной папке переводов. Там файл должен называться ДОМЕН-ПЕРЕВОДА_ЛОКАЛЬ.mo.

меню

Этап 2: Перевод. Создание .mo .po файлов

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

Вариантов создать PO файл несколько, тут мы рассмотрим работу с программой «Poedit». Для начала нужно и установить его (бесплатная версия позволяет делать все что нам нужно).

Создать PO файл можно через Poedit, но мы создадим его нестандартно — так гораздо проще:

  1. Просто создадим файл с расширением .po в папке lang нашего плагина. Файл должен иметь название ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.po, у нас это myl10n-ru_RU.po. (создавать файл нужно в кодировке UTF-8).

    Именно такое название файла требует функция load_plugin_textdomain() и язык перевода (русский).

    • myl10n — это название нашего перевода (домен), который используется в функции load_plugin_textdomain().
    • ru_RU — это язык перевода (локаль в WordPress, когда мы переключаемся на русский язык).

    Для темы название файла должно быть ЛОКАЛЬ.po, подробнее см. ниже.

  2. Откроем файл и скопируем в него следующий текст (при сохранении не забываем про кодировку UTF-8):

    msgid «» msgstr «» «Project-Id-Version: my-plugin-name\n» «Last-Translator: Myname <myemail@gmail.com>\n» «Language-Team: My Super Team\n» «Language: ru\n» «Content-Type: text/plain; charset=UTF-8\n» «Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n» «X-Poedit-SourceCharset: UTF-8\n» «X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n» «X-Poedit-Basepath: ..\n» «X-Poedit-SearchPath-0: .\n» #»X-Poedit-SearchPathExcluded-0: js\n» #»X-Poedit-SearchPathExcluded-1: css\n»

    Пояснения по параметрам:

    • Project-Id-Version — название и версия проекта.
    • Last-Translator — имя и email переводчика.
    • Language-Team — название команды переводчиков.
    • Language — язык на который переводит файл.
    • Plural-Forms — форма множественного числа.
    • X-Poedit-KeywordsList — названия и параметры функций, строки из которых будут взяты для перевода. (тут указаны все возможные функции WordPress).
    • X-Poedit-Basepath — основная папка. Файлы в ней и в её подпапках будут просматриваться на наличие строк перевода. .. две точки тут означает, что основная папка находится на уровень выше папки текущего файла. Так как .po файл у нас лежит в /lang папке, то папка на уровень выше — это корневая папка плагина.
    • X-Poedit-SearchPath-0 — папки (относительно основной), в которых нужно просматривать файлы. . точка тут означает, что нужно просматривать все файлы.
    • X-Poedit-SearchPathExcluded-0 — тут можно указать папку (относительно основной), где не нужно просматривать файлы.

      Все эти параметры можно изменить из программы Poedit, в любой момент. Для этого зайдите в Каталог > Свойства в Poedit.

      Подробнее про формат PO файла смотрите в документации.

  3. Откроем установленную программу Poedit и закинем в нее наш, пока еще пустой, файл .po.

  4. Выбираем «Извлечь из исходного кода».

    В появившемся окне меняем настройки перевода (не обязательно) и жмем OK.

    Ждем пока программа просканирует код и соберет из него все строки перевода.

    Переводим, жмем «Сохранить»

Все, MO файл готов! При нажатии на «Сохранить» он автоматически создастся рядом с сохраненным .po файлом с таким же называнием.

Перевод готов и работает. Если теперь зайти на страницу плагина, то все строки будут переведены:

Почему удобно создавать .po файл вручную, а не через программу Poedit?

Потому что так быстрее: в этом случае не надо указывать никаких настроек, можно просто скопировать код (из пункта 2) в .po файл, закинуть этот файл в Poedit, нажать «Извлечь из исходного кода», затем «ОК» и переводить. (настройки можно изменить в самом po файле, программа для этого не нужна).

А чтобы создать файл через Poedit нужно:

  1. Открыть Poedit.
  2. Выбрать: Файл > Создать….
  3. В появившемся окне выбрать язык на который переводим.
  4. Окно просто пропадет, а мы сидим тупим «а что дальше то делать?».
  5. А дальше, нужно нажать на кнопку Сохранить, в появившемся проводнике найти папку темы зайти в папку lang, вписать название файла myl10n-ru_RU.po и нажать ОК.
  6. Окно опять пропадает, а мы дальше тупим «что теперь делать?».
  7. А теперь, нужно нажать кнопку: Извлечь из исходного кода. Откроется окно где нужно выставить настройки для PO файла. Все то что написано в коде для PO файла выше: название проекта, команда проекта, кодировки, папки где собирать строки перевода, ключевые слова для поиска строк перевода. В общем, тут надо будет повозиться и не ошибиться.

    После того как настройки выставлены жмем «ОК».

  8. Далее ждем пока, строки перевода собираются из файлов проекта и мы попадаем в окно перевода строк (скрин выше). Переводим строки, жмем Сохранить.
  9. Перевод и MO файл созданы!

меню

Создание POT файла

.pot файл — это шаблон перевода. Это прям копия .po файла, только когда не переведена ни одна строка. Т.е. все строки перевода получены из файлов проекта, но еще ничего не переведено.

Из вышесказанного следует, чтобы создать POT файл нужно пройти всю процедуру по созданию .po файла, и под конец ничего не переводить, а зайти в Файл > Сохранить как и сохранить файл с расширением .pot.

Создать POT файл можно еще проще. Взять .po файл и поменять ему расширение на .pot. Это грубый метод, но такой файл с переведенными строками, тоже можно использовать как шаблон для создания перевода на любой язык (по крайней мере так работает Poedit).

Зачем нужен .pot файл?
Для того, чтобы был какой-то один файл, в котором всегда актуальные строки перевода. Чтобы использовать его как основу для создания перевода на очередной язык.

Например, если PO и MO файлы перевода размещаются в глобальную папку переводов, то мы не можем закинуть PO файл в программу и нажать «Обновить из кода», потому в PO файле скорее всего путь до файлов плагина будет неправильный (или его там вообще не будет) и строки перевода обновиться не смогут. В этом случае используется POT файл, который всегда должен лежать в папке плагина и при изменении кода в нем нужно обновлять строки перевода, так мы получим всегда актуальный шаблон строк перевода.

Если PO файл лежит в папке плагина, то POT файл не нужен, перевод можно создать из PO файла.

меню

Подключение .mo файла перевода

Как подключить MO файл в плагине, уже есть в коде плагина выше. А тут я сделаю акцент на функциях WordPress для подключения этого файла. Функции:

load_plugin_textdomain( $domain, false, $plugin_rel_path ) Подключает MO файл из плагина. Обертка для load_textdomain(). Сначала ищет MO файл в общей папке переводов плагинов: /wp-content/language/plugins. Файл должен называться ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo. load_muplugin_textdomain( $domain, $plugin_rel_path ) Подключает MO файл из MU плагина. Обертка для load_textdomain(). Сначала ищет MO файл в общей папке переводов плагинов: /wp-content/language/plugins. Файл должен называться ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo. load_theme_textdomain( $domain, $path ) Подключает MO файл из темы. Обертка для load_textdomain(). Сначала ищет MO файл в общей папке переводов тем: /wp-content/language/themes. Файл должен называться ЛОКАЛЬ.mo (когда файл внутри темы) и ПАПКА_ТЕМЫ-ЛОКАЛ.mo (когда файл в общей папке). load_textdomain( $domain, $mofile ) Подключает MO файл из любого места (нужно указать полный путь до MO файла, вместе с названием файла).

Рассмотрим примеры подключения MO файлов.

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

// файл перевода плагина. // файл должен называться: ДОМЕН-ЛОКАЛЬ.mo, например: myl10n-ru_RU.mo add_action( ‘plugins_loaded’, function(){ load_plugin_textdomain( ‘my-plugin’, false, dirname(plugin_basename(__FILE__)) . ‘/languages’ ) ); }); // файл перевода MU плагина. // файл должен называться: ДОМЕН-ЛОКАЛЬ.mo, например: myl10n-ru_RU.mo load_muplugin_textdomain( ‘my-plugin’, dirname(plugin_basename(__FILE__)) . ‘/languages’ ) ); // файл перевода темы. // файл должен иметь название текущей локали, например: ru_RU.mo add_action( ‘after_setup_theme’, function(){ load_theme_textdomain( ‘my_theme’, get_template_directory() . ‘/languages’ ); }); // любой файл перевода // Подключаем файл .mo (название файла: ru_RU.mo или другое, зависит от локали) add_action( ‘plugins_loaded’, function(){ $mo_file_path = dirname(__FILE__) . ‘/lang/’. get_locale() . ‘.mo’; load_textdomain( ‘mytranslate’, $mo_file_path ); }

Не обязательно подключать функции на хуки, но в примерах я все же сделал как рекомендуется.

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

Смотрите также: все функции связанные с подключением MO файлов.

меню

Функций перевода

Как использовать функции перевода, уже есть в коде плагина выше. А тут я опишу каждую функцию (подробное описание читайте в описании функции).

__( $text, $domain ) Переводит указанный текст и возвращает его для обработки. _e( $text, $domain ) Переводит указанный текст и выводит его на экран. _x( $text, $context, $domain ) Переводит указанный текст с учетом указанного контекста и возвращает его для обработки. _ex( $text, $context, $domain ) Переводит указанный текст с учетом указанного контекста и выводит его на экран. _n( $single, $plural, $number, $domain ) Получает строку перевода единственного или множественного числа, ту которая соответствует указанному числу (1 комментарий, 2 комментария). _nx( $single, $plural, $number, $context, $domain ) Получает строку перевода единственного или множественного числа с учетом указанного контекста. _n_noop( $singular, $plural, $domain ) Функция пустышка. Аналог _n(). Используется когда нужно определить строки перевода для множественных числе, но использовать их где-то позднее в коде. Результат который возвразает функцию нужно обрабатывать функцией translate_nooped_plural(). Результат этой функции, например, удобно использовать в параметрах, когда мы заранее не знаем какое будет число и нужно сделать перевод позднее. _nx_noop( $singular, $plural, $context, $domain ) Тоже что _n_noop(), только с контекстом. esc_attr__( $text, $domain ) Перевод для значений атрибутов HTML тегов. Сокращение для esc_attr( __() ). esc_attr_e( $text, $domain ) Тоже что esc_attr__(), только сразу выводит результат на экран. esc_html__( $text, $domain ) Перевод текста в котором могут быть HTML теги. Сокращение для esc_html( __() ). esc_html_e( $text, $domain ) Тоже что esc_html__(), только сразу выводит результат на экран. меню

Ошибки при использовании функций перевода

#1 Нельзя использовать переменные/константы в параметрах функций перевода

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

// Да _e( ‘Hello World!’, ‘mydomain’); // Нет _e( $string, ‘mydomain’ ); _e( ‘Hello World!’, $domain ); _e( ‘Hello World!’, DOMAIN );

#2 Не используйте HTML в строках перевода (если это возможно)

Например, если указать <div> в строке перевода и переводчик ошибется, то HTML разметка может «сломаться». Или если указать ссылку <a>, переводчик на её место может поставить свою, или просто неправильно её написать. Или любой HTML тег можно не закрыть и мы поймаем очень неприятный баг верстки.

В 90% случаев HTML теги можно и нужно выносить за пределы строки перевода, рассмотрим несколько примеров:

// Да echo ‘<h1>’. __( ‘Hello World!’, ‘mydomain’ ) .'</h1>’; // Нет _e( ‘<h1>Hello World!</h1>’, ‘mydomain’ ); // Да echo str_replace( ‘<a>’, ‘<a href=»http://example.com/portfolio»>’, __( ‘See <a>my portfolio</a>’, ‘mydomain’ ) ); // Нет _e( ‘See <a href=»http://example.com/portfolio»>my portfolio</a>’, ‘mydomain’ );

#3 Не делите фразу на отдельные слова

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

// Да echo sprintf( __( ‘I am %d today’, ‘mydomain’ ), $years ); // Нет echo __( ‘I am ‘, ‘mydomain’ ) . $years . __( ‘ today’, ‘mydomain’ );

#4 Не оставляйте пробелы в конце/начале строки (если это возможно)

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

// Да _e( ‘Book name:’, ‘mydomain’ ) .’ ‘. $book_name; // Да _e( ‘Book name:’, ‘mydomain’ ) .» $book_name»; // Нет _e( ‘Book name: ‘, ‘mydomain’ ) . $book_name; меню

Перевод множественного числа

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

Для перевода строк с числами, когда нужно получить разные переводы в зависимости от числа, в WordPress используется функция _n( $single, $plural, $number, $domain ) или _nx() (с контекстом). Она вернет разный вариант строки в зависимости от указанного числа. Например:

printf( _n( ‘%s star’,’%s stars’, 1, ‘myl10n’ ), 1 ); //> 1 звезда printf( _n( ‘%s star’,’%s stars’, 3, ‘myl10n’ ), 3 ); //> 3 звезды printf( _n( ‘%s star’,’%s stars’, 10, ‘myl10n’ ), 10 ); //> 10 звезд

Однако, чтобы все это правильно работало нужно:

  1. В настройках .po файла правильно указать форму множественного числа. Мы её указали в параметре Plural-Forms:

    «Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n»

    Смотрите также: Варианты Plural-Forms для разных языков.

  2. В настройках .po файла правильно указать шаблоны поиска функций:

    • _n:1,2 — для функции _n(). 1 и 2 — это параметры функции для множ. и единс. числа.
    • _nx:1,2,4c — для функции _nx(). Тут 4с — значит что 4 параметр функции это строка контекста.
  3. При переводе правильно перевести строки. Для русского языка нужно указать три варианта для перевода одной строки.

меню

В заключении

Термины связанные с переводом

Некоторые термины, которые нужно знать. Это самые основные (сокращением этих терминов в WordPress названы некоторые функции и хуки):

  • Интернационализация (internationalization — i18n) — это весь комплекс функций и классов в ядре позволяющий переводить WordPress и его дополнения на разные языки.

  • Локализация (localization — l10n) — это сам процесс перевода на разные языки.

  • Локаль (locale) — это связка языка и диалекта в регионе. Обычно под локалью понимается просто язык, допустим, русский. Но английский например может быть English (U.S.) или English (UK) — язык один, локали разные… Локаль определяется как КОД_ЯЗЫКА_КОД_СТРАНЫ (ru_RU) или код языка в стандарте ISO 639-3 (rus).

меню

Размещение файла перевода в глобальной папке

В WordPress есть общая папка для файлов перевода: /wp-content/languages. В ней лежат файлы перевода самого WordPress, а также могут лежать файлы переводов тем и плагинов (это работает в WordPress по умолчанию).

Все функции подключения MO файлов (кроме load_textdomain()), сначала проверяют наличие файла перевода в общей папке, и только потом ищут его в папке плагина или темы. Это чем-то похоже на иерархию файлов шаблона, только тут иерархия файлов перевода…

Общая папка переводов для:

  • плагинов /wp-content/languages/plugins/ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo.
  • тем /wp-content/languages/plugins/ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo.

В такие общие папки, например, загружается и обновляется перевод плагина, который находится в каталоге плагинов WordPress. Вы наверное видели переведенные плагины, в которых нет файлов перевода (это как раз эта тема). Как я писал в начале статьи плагины из каталога можно переводить через сайт translate.wordpress.org.

Заметка: если файл перевода есть в глобальной папке, то в плагине его подключать через функции load_(plugin/theme)_textdomain() не обязательно! WordPress автоматически его подключит, опираясь на параметр Text Domain: в заголовке плагина.

меню

Плагин для перевода

Loco Translate — отличный плагин для создания перевода (.mo файла). Этот плагин полностью заменяет программу Poedit. Он позволяет создавать переводы для чего угодно тем, плагинов или отдельных MU плагинов. Плагин можно активировать, перевести что нужно и деактивировать чтобы не «мешался».

Как русифицировать плагин для WordPress

Приветствую читателей блога! Вот и прошли 5,5 лет моей беззаботной жизни в общаге. Мы переехали в квартиру к сестре моего молодого человека, начинаем взрослую жизнь:)

Каждый пользователь WordPress знает, что для этого движка существует огромное количество плагинов для разных целей. Основные Вордпресс-плагины рассматриваются подробно на моем блоге. Но есть одна проблема: большая часть этих плагинов разработана иностранными программистами, поэтому они на английском языке. А это не совсем удобно для нас (а особенно для пользователей, не владеющих английским).

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

Poedit: как работать в программе

Приведу краткую инструкцию по работе с Poedit. Скачайте программу Poedit с официального сайта разработчика. При установке программы выбирайте русский язык.

Запускаем программу и открываем найденный файл с расширением .po.

Когда файл откроется, у вас должно появиться три окна.

Чтобы сделать перевод плагина WordPress, вам нужно:

  1. Выделить строку (см. скриншот выше).
  2. Скопировать слово во второе окно (см. скриншот выше).
  3. Перевести скопированное слово в переводчике (например, в Google-переводчике) и вписать его в третье поле (см. пункт 3 на скриншоте).

Таким образом нужно перевести все слова плагина. После чего сохраняем этот файл в ту же папку и с тем же именем, только с приставкой ru_RU.po. Если вы все правильно сделали, то у вас должен автоматически появиться еще и файл ru_RU.mo.

После этого программу PoEdit можно закрыть, а полученные файлы локализации залить на хостинг. Если плагин автоматически не переключился на русский язык, тогда найдите в корневом каталоге сайта файл wp-config.php и измените строку, содержащую WPLANG следующим образом: define ( ‘WPLANG’, ‘ru_RU’ );

Как внедрить перевод в тему своего сайта

Текст в теме WordPress находится в разных конструкциях html и php. Отсюда по разному эти php вариации будут выглядеть.

1. echo __(

Самый простой вариант:

1 <?php echo __( ‘Текст который будет переведен’, ‘ploshadka’ ); ?>

где ploshadka — это ваш домен.

2. printf в несколько строк

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

1 2 3 4 5 6 <?php printf(‘<div>%s<span>%s</span></div>’, __( ‘Текст для перевода 1 ‘, ‘ploshadka’ ), __( ‘Текст для перевода 2’, ‘ploshadka’ ) ); ?>

Результат будет иметь такой вид:

1 Текст для перевода 1 <span>Текст для перевода 2</span>

3. printf в одну строку

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

1 <?php printf( __( ‘Автомобили: %s (BMW) %s ‘, ‘ploshadka’ ), ‘<span>’ , ‘</span>’ ); ?>

Результат будет как и в предыдущем варианте:

1 Текст для перевода 1 <span>Текст для перевода 2</span>

Но при этом в программе перевода потребуется перевести только одну строчку. А это очень удобно.

4. Вместе с произвольными полями

1 <?php echo __( ‘Дата вручения награды: ‘, ‘ploshadka’ ) . get_post_meta($post->ID, ‘year’, true); ?> год

Или так:

1 <?php printf( __( ‘Дата вручения награды: %s год ‘, ‘ploshadka’ ), get_post_meta($post->ID, ‘year’, true) ); ?>

Результат будет один:

1 Дата вручения награды: 2020 год

5. Несколько переменных php

Если есть конструкция с переменными, например:

1 echo ‘Первый текст ‘ . $string . ‘ окончание предложения.’;

То выносим переменную и создаем перевод таким образом:

1 echo sprintf( __( ‘Первый текст %s окончание предложения.’, ‘ploshadka’ ), $string );

6. Перевод внутри переменной

Нужно перевести такую конструкцию:

1 $variable = ‘<div><p>Перый абзац ‘ . $string1 . ‘</p>’ . ‘<p>Второй абзац’ . $string2 . ‘</p></div>’;

Переделываем её в такую штуку:

1 2 3 4 5 $variable = sprintf( ‘<div><p>%s</p><p>%s</p></div>’, __( ‘Перый абзац’, ‘ploshadka’ ) . $string1, __( ‘Второй абзац’, ‘ploshadka’ ) . $string2 );

6. Перевод внутри функций

Если внутри функции содержится текст для перевода:

1 <?php single_cat_title( __( ‘Список статей ‘, ‘ploshadka’ ) ); ?>

Когда ту же функцию нужно вывести в более сложном варианте. Надо single_cat_title сделать переменной и тогда можно вставлять:

1 2 3 4 <?php $string = single_cat_title(», false); echo sprintf( __( ‘Первое предложение %s. Второе предложение %s.’, ‘ploshadka’ ), $string, $string ); ?>

Результат:

1 Первое предложение заголовок. Второе предложение заголовок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *