Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Локализация сайтов WordPress

Автор: в категории Создание сайтов 4 комментария

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

Локализация шаблонов WordPress

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

Знакомьтесь *.po и *.mo

Уверен что большинство разработчиков сталкивались с файлами с расширением *.po и *.mo — именно эти файлы и позволяют локализовать строки вашего сайта очень простым путем. Они содержат в себе инструкции в формате «ключ = значение», где ключ — идентификатор строки, а значение — ее перевод.

Если вы с ними не знакомы, то можете открыть папку wp-content/languages, или папку с языками вашей темы, которая может находится в папке с самой темой и познакомиться с ними поближе, открыв их, например, NotePad или любым другим текстовым редактором.

Обратите внимание: имя каждого файла состоит из названия плагина или темы (или любой другой идентификационной информации), а также кода языка, перевод которого содержит данный файл локализации. Таким образом для каждого языка создается по одному файлу *.po и *.mo.

Если вы откроете *.mo файл при помощи текстового редактора, то вы наверняка увидите абракадабру и ничего не поймете, ведь это и есть скомпилированный языковый файл для системы, который генерируется из файла *.po. Если проводить аналогию с редактированием изображений, то *.psd = *.po, а *.jpg = *.mo.

Файл *.po имеет уже более понятную структуру и можно разобраться в нем. Если разобрать данный файл, то вы увидите что строки идут парами «ключ-значение», о чем мы и говорили в начале статьи. Выглядит это примерно так:

#: views/start.php:59
msgid "Sign up with a different email address"
msgstr "Войти с другим адресом электронной почты"

Как видите символ «#«, как и в многих C-подобных языках программирования, обозначает комментарий, в котором в данном случае указан путь к файлу в котором была обнаружена строка с «msgid» (message ID — идентификатор сообщения). Далее следует значение для данного ключа с указанием «msgstr» (message string — строка сообщения), которую необходимо вывести в случае если в шаблоне встретится данный идентификатор.

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

Локализуем шаблон WordPress

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

load_theme_textdomain('your_translation_ID', 'path_to_mo_files');

где your_translation_ID — это идентификатор вашего перевода (можно занести название темы или плагина например), он будет использоваться далее при вызове строки перевода. А path_to_mo_files — естественно путь к вашим файлам локализации (*.mo и *.po).

По идее: в случае использования стандартной папки для переводов (т.к. параметр path_to_mo_files является необязательным) your_translation_ID используется как идентификатор файла, т.к. там расположены переводы разных плагинов и тем. То есть файл должен иметь имя your_translation_ID-en_GB.mo, например для стандартной темы файл называет так: twentysixteen-en_GB.mo.

Обратите внимание: по-умолчанию файлы хранятся в папке wp-content/languages и далее либо в папке themes или plugins. Также путь к файлам указывается БЕЗ слеша в конце. Для того чтобы указать путь к языкам, которые находятся в папке с темой можно использовать следующую конструкцию:

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

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

_e("404 error", "your_translation_ID");

или

__("404 error", "your_translation_ID");

Данные строки и являются местами вызова локализационных файлов. Эти функции отличаются лишь тем, что одна (_e()) выводит строку на экран (выполняется функция php «echo»), а другая (__()) просто возвращает локализованую строку. Данные функции принимают два параметра: идентификатор строки (по которому будет идти поиск соответствующего msgid) и идентификатор перевода, откуда будет браться данная строка.

Теперь нам необходимо «пройтись» по всем файлам нашей темы или плагина и заменить все строки на подобные конструкции. После этого мы будем их парсить (просматривать программным обеспечением) и переводить строки, создавая файлы *.po и *.mo.

Создаем файл локализации *.po и *.mo

Для работы с файлами локализации шаблона на WordPress *.po *.mo понадобится программа Poedit, которая позволит работать с файлами переводов (*.po) и генерировать непосредственно файл, который использует WordPress (*.mo). Для примера, я создам файл test.php, который будет содержать два примера строк: с переменными и обычную, а идентификатором выступит ключ «nikita-spivak».

<p>Тут может быть любой текст или верстка<p>
<?php _e("This text will be shown", "nikita-spivak"); ?>
<p>Также он может быть тут</p>
<p><?php printf(__('See full lesson %s here %s', 'nikita-spivak'), '<a href="//nikita-sp.com.ua">', '</a>'); ?>
или тут. Где угодно!</p>;

Теперь откроем программу Poedit и создадим новый файл (Файл — создать). Указываем язык, на который мы будем переводить строки, в нашем случае русский, и приступаем к настройке парсера. Для этого переходим во вкладку Каталог — Свойства. Заполняем всю информацию (по желанию) на первой вкладке «Свойства перевода», переходим к последней вкладке «Ключевые слова исходных файлов» и добавляем ключевые слова для парсера (__ и _e). Сохраняем файл в нужной нам директории шаблона или плагина.

После того как файл был успешно сохранен, переходим к настройке путей к файлам, которые необходимо просканировать на наличие строк для перевода. Переходим во вкладку Каталог — Свойства и открываем вторую вкладку (посередине) «папки с исходными файлами».  На данной вкладке расположены два списка которые нам необходимо заполнить:

  • папки которые включены в поиск;
  • исключенные папки, например, папки с css, js или sass файлами.

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

После сохранения файлов вы увидите, что в папке куда вы сохранили *.po файл будет сгенерирован также и файл с расширением *.mo. В случае если файл находится в папке с темой или плагином, название файла должно содержать только код языка, перевод которого содержится в файле, если же файл расположен в общей папке wp-content/languages то нужно перед кодом файла указать идентификатор перевода.

Если вам необходимо добавить новую строку в вашу тему или плагин, достаточно просто добавить ее в исходные файлы, открыть файл локализации *.po при помощи Poedit и нажать на кнопку «Обновить». Обратите внимание что структура папок должна оставаться той же! Если вы переместили файл(ы) — укажите новый путь в свойствах перевода.

Итог

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

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

comments powered by HyperComments

Не забудь подписаться на группы в социальных сетях, чтобы всегда быть вкурсе последних событий!

Maksim Gordienko
2016-03-11 16:39:48
Тут важный момент не только получить мультиязычный сайт, но и иметь возможность его оптимизировать под соответствующий язык. Минимально - возможность прописать разные мета-данные + разный текст для разных языков. Полиланг, если я не ошибаюсь, такой возможности не дает.
Nikita Sp
2016-03-11 16:42:01
Речь идет о мультиязычности самого шаблона - надписи такого плана, как: ошибка 404, опубликовано в категории, автор, формат даты и т.п. Какой модуль использовать для расширения языковых возможностей администраторской части - право каждого разработчика. Кстати Polylang создает копии страниц и связывает их, так что у тебя получаются две разные страницы, которым можно прописать разные мета. Так что все по идее ок.
Сергей
2016-08-22 17:40:17
Здравствуйте, а есть какой-нибудь софт или сервис для тестирования локализации? у меня есть сайт, который по идее уже переведен и нужно просто проверить все ли строки, которые используются сайтом имеют перевод ... и еще хотелось бы узнать есть ли метод, по которому можно определить какой именно файл * .po отвечает за тот или иной текст на сайте спасибо
Nikita Sp
2016-08-22 17:43:58
Добрый вечер! Думаю вряд ли, т.к. в случае отсутствия строки для перевода будет выведена или строка на английском или название переменной вида "your_string". В файлах переводов хранится "таблица" следующего вида: your_string = ваша строка другой файл содержит your_string = Your string У каждого файла соответственно в названии указан язык за который он отвечает. Найти не переведенные строки можно открыв файл перевода с помощью Poedit, сканировав ваши файлы темы и вы увидите для каких строк в файлике еще нет перевода. Надеюсь помог :)
Вверх!

Меню блога

Категории блога

Облако тегов