Русификация Wordpress или зачем нужны файлы .mo и po, часть 1
Из статьи ты узнаешь, как русифицировать твою любимую тему или новый, но очень зашибенный англоязычный плагин к Wordpress (чтобы пользователи на твоем блоге особо не напрягались с английским). Причем сделать это так, чтобы после обновления этой темы или того плагина не пришлось его переводить заново. Статья также поможет тебе, если нужно ТОЛЬКО ОБНОВИТЬ перевод темы или плагина. Такое бывает, если плагин кардинально переделался, а переводчик забил на обновление и некоторые новые или обновленные фразы остались на английском.
Как я подозреваю, этот способ работает не только с Wordpress'ом, но и с другими CMS и программами с открытым исходным кодом.
В инете есть куча статей с советами типа: «Открываем файл footer.php и заменяем все тексты, которые там нашли, на русский эквивалент (не забудьте про кодировку). Повторить для всех файлов в папке твоей темы». И как только ты послушался этого совета, а тема взяла и обновилась, и тебе придется переводить все заново.
Что же предлагаю я?
Я предлагаю создать (или отредактировать уже существующий) файл локализации. Тогда при обновлении плагина или Wordpress темы перевод никуда не денется.
Что это за файл локализации .po (.mo)? Теория.
Ты, наверное, часто видел файлы с расширением .po или .mo в папке с темой для Wordpress'а или в папке зашибенного_плагина? Если не нашел сразу, то они еще могут прятаться в папке Languages. Ну а если не видел, то сейчас услышишь о них впервые (очень полезные и бесплатные файлы, между прочим).
.po файлы - это файлы локализации. Многие популярные языки программирования (C, C++, сценарии sh, Python, Perl, PHP, Java, Паскаль и куча других) имеют функцию gettext
, ngettext
или подобные, которыми размечают текст для будущего перевода. Но ты скажешь, что ничего подобного не видели в файлах footer.php, header.php или зашибенный_плагин.php и будешь прав. Поскольку эти функции, для удобочитаемости кода, заменяют коротким синонимом __
(два символа подчёркивания) или _e
или _c
или еще чем-то.
В итоге код:
printf(gettext("My name is %s."), my_name)
выглядит так:
printf(__("My name is %s."), my_name)
Потом специальным экстрактором извлекают все такие строчки в специальный файл-шаблон с расширением .pot. Эта же строка в .pot файле будет выглядеть так:
#: header.php:19
msgid "My name is %s."
msgstr ""
где header.php - это тот файл, из которого извлекли строку "My name is %s."
, а число 19 - это номер этой строки.
Потом переводчик создает из этого файла-шаблона файл локализации с расширением .po. И вот в этот файл ты можешь вписать перевод строки. Выглядеть это будет так:
#: header.php:19
msgid "My name is %s."
msgstr "А зовут меня %s."
Но это еще не конец. Но уже и не начало .
Как последний, штрих программа переводчик создает бинарный файл (откомпилированный) с расширением .mo, который и скармливается движку Wordpress'а. Вот почему те, кто пробывали не смогли редактировать файл .mo. Как его создать (редактировать) ты узнаешь дальше.
Последовательность действий для перевода.
Теперь пошагово расскажу как нужно действовать если у тебя ни с того ни с сего появилось непредсказуемое желание перевести плагин или тему под любимый CMS.
01.
Качай редактор .po файлов
02.
Если .po файлы уже существуют, то можно открыть любой из них (если нету русского ru_RU.po) и отредактировать (заменить фразы другого языка на русские). Но я, для универсальности метода, расскажу о создании этого файла с нуля.
03.
Создай где-нибудь папку (называй как хочешь) и закачивай (или копируй) туда все .php файлы твоей темы, которые нужно русифицировать;
Продолжение читайте во второй части статьи о Переводе плагинов и тем под WordPress, где продолжаются пошаговые инструкции.

loading...
Похожие статьи:
- Русификация Wordpress или зачем нужны файлы mo po, часть 2
- Скачать бесплатно русскую тему Titan для Wordpress
Вам понравилась статья? Хочешь отблагодарить автора? Расскажи о ней друзьям.
Или подпишись на обновление блога по E-Mail. (via FeedBurner)
Вчера с помощью poedit поправил кривую руссификацию скачанного шаблона. Но в статье «многа букаф», пока продерешься сквозь «проследуй по моим шагам», «для пущей надежности»… Автор переделай эту статью для ЛЮДЕЙ
, а вообще хорошая статья.
loading...
Гм… статья-то для людей и писалась. Может, действительно много воды…
Переделаю немножко.
Спасибо, что уделил время на написание комментария.
loading...
Огромное спасибо за статью. Научился переводить уже готовый файл .po, а вот как создавать свой не знал. Статья направила на путь истинный;)
p.s. – насчет «многа букаф» не согласен – написано как раз в меру и только необходимое.
loading...
Автор, сейчас делаю плагин для вп, необходима мультиязычность. Создал при помощи поедитора в папке плагина файл ru_RU.po, вроде все зделал как в твоей статье написанно, но перевода на русский не просходит, подскажи пожалуйста в чем может быть причина?
Заранее спасибо!
loading...
Для Krion
Файл ru_RU.po нужен только тебе (для возможности редактирования). Для wordpress’а нужен только ru_RU.mo – это уже скомпилированный .po.
Про это, кстати, в статье тоже написано.
loading...
yuriki
.
ru_RU.mo тоже создал при помощи поедитора, но wordpress его как будно не видит, может необходимо куда-то путь до него вписать. Ты сам когда либо пробовал переводить прлагины или писать мультиязычные? Если да, то дай ссылку на плагин. Просто я в сети уже с десяток таких же постов нарыл, отличие буквально в пару строк и визде в коментах пишут что данная технология не работает. Думаю для тебя будет здорово если ты опишешь сдесь эту проблему(хотябы в комментах), и выделишь тем самым свой пост среди десятка оналогичных.
Если поможешь решить эту траблу обещаю тебе прямой пожизненный линк с сайта с ТИЦ 10 и PR 4
loading...
Ух, разобрался. Всем спасибо!
loading...
Спасибо за статью, я как раз хочу перевести свою тему. Уже скачала программу Poedit, у меня файл infuse.po уже имелся в скачанном шаблоне «infuse». Я просто открыла его в этой программе и увидела много английских слов и выражений, расположенных в столбик. Сразу стала переводить, т.е. ни названия файла не меняла, ни каталог не создавала. Переведено уже много, что теперь делать? Создавать каталог или переименовывать файл? Или все заново??? И второй вопрос: у меня ни __ (два символа подчёркивания), ни _e или _c, а _re. Это пойдет?
loading...
Заново ничего делать не нужно.
Нужно посмотреть как перевод подхватывается твоей темой.
_re – если такие символы стоят перед всеми фразами, которые можно переводить, то да – подойдет.
loading...
Да, _re стоят перед всеми фразами. Как я поняла, нужно перевести в программе Poedit все фразы до конца, затем сохранить файл под именем ru_RU.po и тогда автоматически появится файл ru_RU.mo, который и нужно поместить в корневую папку темы (туда, где я взяла файл infuse.po). Также нужно будет в файле wp-config.php добавить такую строку define (‘WPLANG’, ‘ru_RU’), правильно? У меня также в папке Languages также есть файлы: ru_RU.po, ru_RU.mo и ru_RU.php, но они почти пустые. С ними что делать? Или их не трогать?
loading...
Да, правильно.
Но вот если у тебя есть папка Languages, то файл ru_RU.mo нужно положить именно туда, а не в корень темы.
loading...
В чем же ты допустил ошибку, и как ее нашел, и особенно каким образом исправил? Народу интересно!
loading...
Оказывается, обязательным требование для локализации плагина является использование в функциях
__()
и_е()
второго параметра.Таким образом чтобы перевод плагина работал, помимо всего вышесказанного, нужно в его коде использовать следующую конструкцию:
__("переводимый текст", "название_плагина")
И файл mo должен иметь название – «название_плагина-ru_RU.mo«.
loading...
Приветствую!
Во-первых спасибо за содержательную статью. Однако мой первый же опыт в написании локализации потерпел полное фиаско )
Пытаюсь перевести на русский язык тему Garland-revisited (http://wordpress.org/extend/themes/garland-revisited )
Судя по тому что в исходных файлах присутствуют конструкции типа __(«Bla-bla-bla %s») тема должна поддерживать файлы локализации. Однако выполнив все инструкции данной статьи и залив файлы ru_RU.po и ru_RU.mo в корень темы перевода на морде сайта так и не увидел…
Может быть автор, либо кто другой съевший собаку на локализациях попробует выполнить сей финт ушами и ответит однозначно у меня ли руки кривые или с этой темой что-то не так?
Спасибо!
WP: 2.8.2
Garland-revisited: 1.4
loading...
Дмитрий, ответ на твой вопрос (если ты в точности сделал как написано в статье), возможно, находится в предыдущем комментарии от Krion.
P.S. Пожалуйста
UPD: Очень маловероятно, но возможно, что ты используешь плагин WP Super Cache (или подобный) и забыл удалить кэш.
loading...
Очень большое спасибо за статью.
loading...
Автор темы забыл упомянуть один маленький нюанс, из-за которого скорее всего не работает локализация у Дмитрия. А именно:
необходимо в фале wp-content/yuor-theme-name/functions.php указать следующую строчку
/**
* Задаем путь к файлу ru_RU.mo локализации темы
*/
load_theme_textdomain('your-theme-name');
И после этого локализация начинает работать, когда используем следующий механизм перевода строк:
_e('Некоторая строка для перевода', 'yuor-theme-name' );
loading...
Большое спасибо! Подтолкнули в нужном направлении… Но хотел бы добавить, что помимо названия темы, необходимо указать путь к файлу *.mo .
В моём случае, оказалось необходимым написать так:
load_theme_textdomain(‘my_theme’, get_template_directory() . ‘/languages’);
, т.е. добавить путь к каталогу в которой размещен файл *.mo (файл расположен в папке languages локализуемой темы)
Надеюсь инфа окажется полезной
loading...
Уважаемый, yuriki.
Вот эта вот штука:
nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100=20) ? 1 : 2
определяет форму множественного числа, как собственно и указано в редакторе, а именно, показывает с какими числами какие формы применять.
В итоге будет меняться падеж слов при числительных.
Например:
1 комментарий
2 комментария
5 комментариев
loading...
Статья классная!!!Спасибо,помогло!!!Респект!!!Но вот как открыть файл .mo? если файла .po не существует??? Вот задачка с которой я не могу справиться…
loading...
Спасибо! Пробую делать локализацию. Но пока кажется, что проще уж переводить каждую новую версию.))
loading...
Статья действительно хорошая.
Буду признателен автору, если укажет каким «специальным экстрактором извлекают все такие строчки в специальный файл-шаблон с расширением .pot.»
loading...
Этой же программкой Poedit можно все извлечь.
loading...
Не вижу в интерфейсе Poedit, где можно создать pot файл.
loading...
Файл .pot и .po – это по сути одно и то же. Просто файл .po уже с переводом, а .pot – без него.
Поэтому ты просто выбираешь Файл -> Создать каталог… и выполняешь, все шаги как в статье.
Потом изменяешь расширение, и подправляешь заголовок (если нужно). Привожу пример заголовка файла .pot со стандартной темы Wordpress:
msgid ""\n"\n"
msgstr ""
"Project-Id-Version: 1.6\n"
"Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com\n"
"POT-Creation-Date: 2008-12-11 09:48+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME
"Language-Team: LANGUAGE
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
loading...
Есть po файл для другой версии темы, в коде старой темы так
в новой версии темы так
Sorry, the page that you are looking for does not exist.
И т.к. не используется функция _e (и никакая другая), то Poedit не находит текст для перевода.
Есть ли решение, какое ключевое слово указать, чтобы Poedit увидел текст ?
Или же делать локализацию новой версии через Poedit не получится ?
loading...
Если я правильно понял вопрос, то… вообще-то, ответ на него содержится в самом тексте статьи. Вернее, ответы на все вопросы
Да, можно указать любое ключевое слово.
loading...
Сформулирую по-другому.
Локализовать через gettext и Poedit можно только шаблоны/плагины, содержащие функции
{__ или _e или _c или другие }. Если таких функций нет в php файлах, то такой php скрипт не подготовлен для локализации и Poedit ничего не найдет.
Все верно ?
loading...
Да
loading...
Спасибо за ценный совет! Оказывается файлы перевода нужно переименовывать в ru_RU.
Теперь локализация работает!
Жаль в WordPress с переводом сложнее, чем это сделано в Joomla1.5
loading...
Напутственный совет
Хвастуны со знанием англицкого должны еще и русский знать хотя бы в объеме первых трех классов, чтобы не появлялись в локализациях «ИзвЕните» и т.п. ))
loading...
Ну а как ты хотел?
Чтобы тебе и мёд и ложку? 
А вообще – это уже буквоедство.
loading...
Спасибо, всё настолько просто и понятно написано.
респект)
loading...
привет ! у меня вордпресс3.0, русский, установил тему забугорную, воспользовался poeditом, и выянилось, что не все слова переведены .. в выпадающем списке например есть «all items», выянилось что в корневом каталоги темы есть файл language.php – там есть все слова =)) , но выяснилось что если там заменить слова на русский то на сайте ????значки вопроса в ромбиках?? , значит я (по совету друзей решил приобрести автомашину «Москвич»), и они же посоветовали и я проделал:
Начнем по порядку:
1. Заходим в phpMyAdmin и просматриваем кодировку таблиц, должна быть cp1251
Знаки вопросов вместо текста
2. Идем в саму таблицу и смотрим в каком виде текст статей, если все в порядке, то пропускаем этот пункт, если вопросики, то делаем так:
* Открываем дамп с базой данных (сам файл) и сохраняем его в кодировке cp1251
* Идем в phpMyAdmin и при импорте выбираем кодировку cp1251
* Все, теперь знаков вопроса в таблицах не должно быть.
3. Заходим через фтп или менеджер файлов ISPmanager в папку с вашим сайтом /www/ваш_домен/ и переименовываем htaccess.txt в .htaccess
еще предполагалось заменить строки в файле daiabase.php но он есть вджумле а в вордпрессе его не нашлось…
Значится теперь часть слов захватила таки локализация самого ворд пресса, но не всё, когда я заменяю файлы pot локализации темы(шаблона), ворд пресс их не «подхватывает», приходится заменять в корневом каталоге ворд пресса potфайлы, теми, что я перевёл poeditom, но тогда админка становится не русской и опять таки poedit не достает файлы из кода php , с помощью которого организован поиск у меня.. Чта теперь делать та..Не дает потому что прыщи, а прыщи потому что не дает, помогите разорвать этот порочный круг
loading...
На сколько я понял, некоторых танцев с бубном можно было избежать. Просто для этого, когда ты правил language.php нужно было указать нужную кодировку.
По-поводу первых двух пунктов ничего сказать не могу – не было нужды такое проделывать.
По третьему пункту – это зачем было делать? Что у тебя там в .htaccess? Ты там кодировку указывал? И почему до этого у тебя не было .htaccess?
И дальше я не совсем понял. У тебя же были НЕ переведены только файлы ТЕМЫ. Почему случилось так, что уже и сам WORDPRESS не переведен?
loading...
Спасибо. Все подробно и понятно )))
loading...
Спасибо за пост перевел с помощью проги wordpress’ский плагин Theme My Loginздесь
Скачать перевод можно
loading...
Хорошо изложенный материал, мне пришлось по переводам читать, как и чего он делает. Но это было чисто для урезания локализации и изменение под свое понимание перевода текста, ну и заодно подсократил.
Чисто логически очень дубовый способ локализации – все в плюс и объемы и память. Взять ту же Joom или phpprobid – переключил раскладку и грузится только локализация, никаких проблем с нагрузками. А тут локу подключаем и память сразу в большой плюс. Конечно, ресурсов сейчас не меряно, но надо ли их так транжирить. И для локализации своих тем не нахожу логического подтверждения потребности в таких костылях.
loading...
А я так и не смог победить локализацию. Например, есть плагин subscribe-to-comment. Сначала я его активировал, смотрю на-английском, декативировал, подложил файл локализации subscribe-to-comments-ru_RU.mo, активирую – снова на английском. Читаю статью, читаю комментарии, особенно от uran и krion, убеждаюсь, что в самом subscribe-to-comments.php все нужное в плане __( и _е( имеется, а также есть строка load_plugin_textdomain(’subscribe-to-comments’); Деактивирую плагин, чищу куки и все что можно, активирую – снова на английском.
Я кстати уже не в первый раз с таким сталкиваюсь, если сначала активировать плагин, у которого не подложена локализация, то потом никак не могу его активировать, но уже на русском языке после подкладывания локализации. Например, с плагином all in One SEO такая же беда.
Может кто-нибудь сможет направить меня в нужную сторону, где рыть…
loading...
Спасибо за статью, оказалась очень полезной и познавательной для меня.
Вячеслав
у меня после обновления all in One SEO пропал русский язык, до этого был с переводом от Лекактуса, после прочтения этой статьи копнул последнее обновление плагина, и обнаружил в нем полное отсутствие русского .РО файла, в прочем и не только русского. По мимо всего прочего, оказалось, что в файле .POT есть не соответствие в номерах строк (расхождение на 50 строчек)… Возможно , вам будет полезна эта информация
loading...
Есть ведь более простой способ… у меня было все переведено, но после очередного обновления темы слетело
Не помню, в чем этот простой способ заключается.
Забавно, конечно, написать такую объемную статью о переводе тем и не перевести пару сслов из рейтинга: «Rating: 0 (from 0 votes)»
Браво!
loading...
У меня почему то русская локализация работает, а вот румынская переводит выборочно?? Скажем дату переводит, а другие части сайта нет…
loading...
Мои догадки: там есть русский .php в котором как то оговоривается работа скриптов. До конца не разобраля, но суть
add_data(«$locale-ie», ‘conditional’, ‘IE’);
wp_print_styles();
}
add_action(‘admin_head’, ‘ru_accomodate_markup’);
function ru_populate_options() {
add_option(‘rss_language’, ‘ru’);
}
add_action(‘populate_options’, ‘ru_populate_options’);
function ru_restore_scripts_l10n() {
global $wp_scripts;
if ( is_a($wp_scripts, ‘WP_Scripts’) ) {
do_action_ref_array(‘wp_default_scripts’, array(&$wp_scripts));
}
}
add_action(‘init’, ‘ru_restore_scripts_l10n’);
?>
loading...
И ещё. Я не понял как применить виджеты на двух языках. Ведь они отображаются одновременно обаДва. Или речь идет о написании вручную в теме с использованием «вилки»?
loading...
Товарищи, подскажите пожалуйста, можно ли из МО сделать обратно ПО. Или как открыть МО. Дело в том, что он не доконца переведен и есть ПО, но без перевода вообще.
Хочу открыть тот недоделаный и доперевести.
Жду ответа.
loading...
На сколько я знаю, файлы mo править нельзя. Вам нужной найти или нужный po или pot и уже их переводить.
loading...
Для тех, у кого локализация не работает, вот краткая инструкция:
1) Добавляем ru_RU в wp-config.php, получается define(‘WPLANG’, ‘ru_RU’);
2) В локализуемой теме смотрим в functions.php строку load_theme_textdomain(‘myname’);
3) Проверяем, что в .php файлах присутствует _e(’sometext’, ‘myname’);
4) В Poedit сверяем «Каталог»-»Настройки»-»Название проекта и версия»-»myname», а «Пути»-».» (одна точка, если файл локализации в той де папке, где и php-файлы) и генерируем из нашего .po файл .mo
5) Файл локализации должен называться ru_RU.mo, а не myname-ru_RU.mo
Теперь все должно работать!
loading...
Дело в следующем: я перевел сайт на русский используя *.po и *.mo файлы самого Wordpress`а «\wp-content\languages». Все было отлично до тех пор, пока вдруг не пропал перевод некоторых выражений. Оказалось, каким-то образом обновленный моим переводом *.mo файл перезаписывается дефолтовым. Почему это происходит не понятно. Но, есть подозрение, что временами Wordpress автоматически обновляется и затирает мои изменения. Настроек это подтверждающих я не нашел. Сайт пока находится на локальном сервере и перезагрузка компа или Денвера не портит перевод. Автор, что это за фокус и как с ним бороться?
loading...
Господа!!!
Вы будете смеяться, промучался я с этим делом до 3-х часов ночи.
В результате:
Переименовал с «моя-тема-ru_RU.po» на просто «ru_RU.po» и все заработало как часы!
Надеюсь кому нибудь будет полезна эта информация.
loading...
как изменить уже готовый .mo file
loading...
Никак. Только скомпилировать новый. Именно об этом, кстати, статья (нужно было осилить эти много букаф
)
loading...
Я перевел тему, но обнаружил, что еще один елемент требует перевода. Как мне добавить дополнительный путь к уже созданному .ро файлу?
loading...
В меню Каталог есть пункт Обновить из исходного кода и Обновить из POT-файла. Воспользуйтесь ими
loading...
Блоьшое спасибо. У меня ще возник вопрос. В теме имеется код:
Что нужно указать в пункте «Ключевые слова», чтобы перевести Add a Comment, Add a Comment to? Примного благодарен.
loading...
А что у вас за код перед этими вашими Add a Comment, Add a Comment to?
loading...
<strong></strong>
loading...
Нет. Меня интересует код в php-файле для вывода комментариев.
Вот у меня, к примеру, такой код:
<p class="moderation"><?php _e('Add a Comment') ?></p>
Так вот в ключевых словах и указан код
_e
.loading...
Как правило если прога сама не находит этот стринг «Add a Comment, Add a Comment to?» то значит скорее всего он не предусмотрен для перевода и надо переводить вручную в comments.php.
loading...
Такой вот попрос: А если ручками все тексты в файлах шаблона переменовал на язык который нужен (например русский), то можно ли удалить папку – languages из темы? Или если её просто удалить, то что-то нарушится? Вдруг она как-то, где-то в каком-то файле прописана и если её не будет, то в движке будет ошибка.
Или как?
loading...
Да, можно, но только может перестать быть русской админка (хотя и не уверен).
Ты поэкспериментируй: перенеси эти файлы в другое место, а на старом удали. Если что-то сломается (но не должно), то верни обратно.
loading...
Спасибо за ответ. Просто интересно влияет ли на скорость работы блога эта папка languages или нет.
loading...
Вряд ли влияет.
loading...
Пасиб огоромное!!! Пол-дня потратил на перевод php скриптов(( Изменение файла .po не давала результата! Оказывается, было допущено несколько ошибок и он не давал скомпилировать в .mo.
Еще раз спасибо!
loading...
Большое спасибо за программку (poedit, в смысле). Долго мучилась с подбором кодировки к этому *.мо… А его, оказывается, из *.по генерить надо… Фиг бы догадалась, если бы не ваш пост. Спасибо!!!
loading...
Я правильно понимаю, что если внести изменение в исходный php и строчки с выводом строк с переводом поедут – может слететь вся система перевода?
loading...
Всем салют!
Перевожу одну программку с помощью POedit, но вот обнаружилось что в файле .po (изначально это был .mo в папке локализаций программы, который я конвертировал в файл .po с помощью онлайн конвертера) сидят не все слова\фразы использованные в менюшках программы….
Вот и вопрос – где еще может сидеть не появившиеся в .po файле текстовые строки? или же при конвертации из .mo в .po файл происходят такие потери … ?
Плиз подскажите
loading...
Значит эти слова находятся в файлах (*.php, *.htm) без специального синтаксиса, который позволяет их просканировать poedit-ором. Их нужно либо править руками, либо просканировать заново, либо дописать к ним тот код, что я описал в статье.
При конвертации никаких потерь не может быть.
loading...
yuriki,
Спасибо за Ваш ответ. Но дело в том что я перевожу программку (не сайт, онлайн сервисы или вордпресс), а просто делаю локализацию одной маленькой программки. И у нее нет файлов (*.php, *.htm).
Неужели не отображающийся в .po текст сидит гденибудь в .exe???
loading...
Да, верно, он сидит в exe
loading...