Как на практике переводить WordPress

Как на практике переводить WordPress



WordPress – это действительно всемирная CMS, которая пользуется огромной популярностью среди вебмастеров практически каждой страны. Это система, которая с каждым годом улучшается и модернизируется. А в последнее время локализации движка уделяется все большее внимание, ввиду его популярности, и не только среди англоязычных пользователей. Ведь, согласно статистическим данным, уже в 2014 году количество установленных не англоязычных дистрибутивов WordPress превысило количество англоязычных (впервые за все время!).
В этом уроке мы, на практике, рассмотрим как перевести ВордПресс (и саму CMS, и тему для нее), чтобы лучше понимать, как эта вся магия работает. Хотя готовых локализаций (языковых пакетов) для WordPress хоть отбавляй, не лишним будет знать, как самому изменить/улучшить перевод для своего собственного сайта!

Итак, приступим!
1 метод (простой): скачать готовый перевод для нужного вам языка (здесь есть перечень всех доступных переводов и степень их полноты). Скачиваете, копируете файлы локализаций в папку /wp-content/languages/, прописываете в корневом файле wp-config.php строчку

define ('WPLANG', 'код языка');

и наслаждаетесь готовым переводом.

 

2 метод (сложнее): быть готовым и уметь самому переводить CMS ВордПресс и темы для нее.
Но сначала немного теории.

WordPress использует для перевода библиотеку интернационализации gettext GNU.
В gettext для обозначения переводимых строк используются их английские оригиналы и значение перевода на нужный язык.
Библиотека gettext хранит переводы в файлах с расширениями .mo (Machine Object – бинарный файл для чтения программой), .po (Portable Object – файл перевода в человеко-читаемом виде) и .pot (PO template — заготовка файла .po для перевода на новый язык).


 

Как это работает?

В статье «Как перевести Мадженто на русский» мы затронули этот вопрос. По схожему принципу работает и ВордПресс: система сканирует сайт и, основываясь на наборы файлов .po и .mo, заменяет определенные слова и фразы в контенте переведенным текстом, который выводит на экран.
Просканируем и мы сайт, откроем например, файл header.php в шаблоне twentyfourteen (который содержится в последних версиях ВордПресс) через текстовый редактор и, посреди разного кода, найдем вот такую строчку:

<?php _e('Search', 'twentyfourteen'); ?>

 

Разберемся, что же в ней интересного.

Строка содержит функцию php, которая выводит возвращенный перевод текста.
Функция _e записывается в виде

<?php _e($text, $domain)?>

где $text — переменная, содержащая оригинальный текст для перевода, а $domain — переменная для домена, из которого будет получен перевод текста. Если перевода нет, или домен не загружен, то возвращается оригинальный текст. Переменные заключаются в кавычки.

В нашем случае оригинальный текст для перевода — Search, а домен для перевода — twentyfourteen (т.е. системное название шаблона).

Исходя из этих данных, система будет искать значение для перевода в шаблоне (теме) TwentyFourteen, обращая внимание на папку languages. А в этой папке движок будет искать файлы .pot, .po и .mo. Если WordPress найдет такие файлы (а некоторые темы и не содержат их), в них она будет искать строку со значением Search, чтобы перевести на нужный нам язык (указанный в корневом файле wp-config.php строчкой

define ('WPLANG', 'ru_RU')

– для русского).

 

Если система не увидит перевод этого значения, то она его так и выведет пользователю на экран (т.е. Search). А если увидит – выведет перевод текста (любой, какой мы напишем: хоть «Поиск», хоть «Поищи-ка», какой захотите)!

 

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

Внимание! Не переводите напрямую исходный код движка или темы!

Файлы переводов хранятся в папках languages:

  • /wp-content/languages/ — для перевода всего движка
  • /wp-content/languages/plugins/ — для перевода некоторых плагинов
  • /wp-content/themes/ВАША_ТЕМА/languages/ — для перевода определенной темы

 

Как правило переводы движка практически полные, поэтому мы сосредоточимся на переводе тем (шаблонов). Хотя принцип один и тот же.

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

После того, как вы установили Poedit, можете открывать у себя на компьютере языковые файлы .pot: Файл > Создать из POT файла. Затем выбираете файл .pot в папке languages темы, которую хотите перевести.

poedit

Работать с программой несложно — исходный текст слева, а ваш перевод – справа. Чтобы отредактировать перевод, нажмите на соответствующую строку и внизу введите свое значение. После этого нужно сохранить .po-файл с кодом языка (например ru_RU.po — для русского). Обычно Poedit автоматически создает и нужный файл .mo.
После сохранения остается только загрузить созданные файлы через FTP в нужную папку на сайте.

 

Что еще нужно знать?

 

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

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

__('Какой-то текст')
_e('Какой-то текст')
_n('Какой-то текст')
_x('Какой-то текст')

 

Первые две функции __() и _e() являются наиболее основными формами перевода. Функция двойного подчеркивания вернет наш текст, а _e() будет выводить текст, используя echo. Обе функции будут искать в локальном каталоге перевода (в файлах .mo и .po) значения для перевода. Если найдут — выведут переведенный текст, в противном случае выведут только оригинальное значение.

Метод _n() используется в случаях множественности. Он будет полезен, например, для вывода количества сообщений, комментариев и в других случаях, когда значение изменяется динамически (например, «1 комментарий», «2 комментария» и т.д.).

Более сложная функция _x() и _ex() используется для различения слов с аналогичными значениями, но в зависимости от контекста. В этом случае используется следующий код

<?php _ex($text, $context, $domain)?>

, где $context – дополнительная информационная переменная для переводчика.

 

 

Что делать, если в вашей теме нет файла .pot?

Его можно создать самому. Для этой цели подойдет и рассмотренная програмка Poedit.

  • Откройте программу и перейдите Файл > Создать
  • Укажите язык перевода
  • Заполните вкладки в меню Каталог > Свойства: Свойства перевода (название проекта, кодировка и др.), Папки с исходными файлами (путь к папке с вашей темой на ВордПресс), Ключевые слова исходных файлов (перечень ключевых слов – рассмотренные ранее функции для перевода).
  • Сохраните файл в формате .pot
  • Нажмите кнопку «Обновить» вверху, либо Каталог > Обновить из исходного кода. Программа просканирует всю вашу тему и выведет строки, которые доступные для перевода.
  • Переведите текст, а затем сохраните.

 

2-й способ: установить плагин Codestyling Localization и переводить тему через консоль сайта. Либо создать плагином .pot-файл, скачать его, а затем уже переводить через программу Poedit (кому как удобнее).

 

 

Как подключить файл перевода к теме?

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

add_action('after_setup_theme', 'dev_load_theme_textdomain');
  function dev_load_theme_textdomain() {
    load_theme_textdomain('НАЗВАНИЕ_ВАШЕЙ_ТЕМЫ', get_template_directory() . '/languages');
  }

 

В данном примере мы подключаем файлы переводов по адресу:
/wp-content/themes/НАЗВАНИЕ_ВАШЕЙ_ТЕМЫ/languages/

Когда это может понадобиться? Например, если вы хотите переводить через консоль с помощью плагина Codestyling Localization, а он не определяет вашу тему. После подключения он «увидит» вашу тему и вы сможете заняться полноценным переводом.

 

 

Есть еще способы перевода?

Можно переводить с помощью текстового редактора Notepad++. Если вы откроете редактором файл .po, то увидите нечто подобное:

#: wp-includes/link-template.php:2297
#@ default
msgid "&laquo;Older Comments"
msgstr "&larr;Предыдущие комментарии"

 

  • 1-я строка указывает на файл, в котором найдена функция и в какой строке.
  • 2-я строка указывает область действия перевода (т.е. весь сайт)
  • 3-я строка: оригинальное значение, заключенное в кавычки
  • 4-я строка: перевод оригинального значения, заключенный в кавычки.

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

 

 

Что делать, если в теме код не поддерживает перевод?

Оптимизировать его для перевода. Например, строку

<div class="readmore"><span>read more</span></div>

можно оформить так:

<div class="readmore"><span><?php _e('read more', 'домен-локализации'); ?></span></div>

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

 

 

Надеюсь, что вам данный урок принес пользу!
Если у вас есть дополнительные комментарии или вопросы, не стесняйтесь делиться ими в комментариях к данной статье.

 

И в дополнение к посту посмотрите видео-урок:

 

(Photo credit: EMMEALCUBO/Foter/CC BY-SA)

 

В этом видео-уроке рассмотрим процесс перевода Вордпрес (и саму CMS, и тему для нее), чтобы понимать, как это работает, как изменить/улучшить перевод для своего сайта.


  1. Чин:

    Доброго времени суток!
    Недавно с джумлы перешел на ВП, назрел вопрос перевода сайта на казахский…
    На Вашем сайте, есть «перемычка» для перехода на украинский, как Вы это сделали?
    Заранее спасибо.

    1. ZAnatoly:

      Чтобы сделать ВордПресс мультиязычным вам понадобится плагин, суть которого заключается в том, что каждый пост (страница) имеет копию на другом (других) языке (языках). Один из самых популярных плагинов — это WPML, он мощный и функциональный, но платный. Бесплатный аналог, с нужным функционалом — это Polylang (https://wordpress.org/plugins/polylang/). Ставите на движок подходящий плагин, подготавливаете переводы темы и движка на нужный язык (как это делается описано в данном уроке), подготавливаете переводы контента на сайте — и у вас будет мультиязычный сайт!

  2. AHMAD:

    Как эделали сайт на 2 языка RU и UA на wordpres, woocommerce можна так сделат погите пожалуста.
    Я хачу зделат на два языка RU UZ

    1. ZAnatoly:

      Попробуйте бесплатный плагин Polylang, или же платный WPML. +рекомендации из этого урока. Успехов!

  3. Алексей:

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

  4. zpawn:

    Подскажите, есть ли еще техники, кроме программы Poedit ?

  5. Александр:

    Здравствуйте!
    Вы по-моему так и не показали как переводы полей, которые в админке заполняются делаются.
    Например название сайта
    Очень актуально — подскажите пожалуйста

    1. ZAnatoly:

      Здравствуйте, Александр!
      В основном, текст из шаблонов переводится файлами .pot, .mo и .po.
      Переводы полей, например, должны переводиться с помощью записей в базе данных, на основании кода языка. Для этого лучше всего использовать соответствующие плагины, типа Polylang.
      Плагины делают записи строк для каждого доступного языка на сайте, и их можно редактировать через Консоль. Также, каждая страница или пост должны будут иметь свою копию для каждого доступного языка.
      Надеюсь, что это вам поможет.

  6. Дмитрий:

    Был рад найти вашу публикацию… прочитал все до конца несколько раз. сделал попытку имплантировать ваш код в файл functions.php… все пропало- стер код — все вернулось как было. и нет у меня никакой идеи что я делаю не так. Может у вас найдется человек кто сможет в 2018 году мне подсказать? Не бесплатно, конечноже. Я пересмотрел кучу материала, но все они датированы годами назат. ГОДАМИ! а ВП получает апгрейды каждую неделю- все уже давным давно устарело- не работает. И насколько я вижу- работала исправно только моя оригинальная версия сделанная с нуля в 2008 году. Зарание спасибо за ответ.

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

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