Поставил плагин, всё пучком, всё работает, но хочется перевести. Перевести хочется через gettext, тобишь .po/.mo. Вижу, что много уж человек на этом обломилось, но может кто-то всё же знает, как это сделать.
Собственно, проблема: перевожу в этом .po файле пару строк, через msgfmt генерирую .mo, называю его tdomf-ru_ru.mo (WPLANG выставлен в ru_ru, другие локализации так работают), кидаю его в папку плагина в /wp-content/plugins и не вижу эффекта…
Перевод TDO Mini Forms 0.10

Посмотреть в плагине параметры load_plugin_textdomain() и привести в соответствие язык, домен и путь к файлу.
Читал я кодекс, смотрел. Вот сам load:
load_plugin_textdomain(‘tdomf’,PLUGINDIR.TDOMF_FOLDER);
и
define(‘TDOMF_FOLDER’, dirname(plugin_basename(__FILE__)))
Так я правильно делаю, так называя файл, или нет?
Фйл tdomf-ru_ru.mo где лежит: в plugins или в папке с плагином?
В папке с плагином.
По идее должно видеть. А чего не хочет? Ну так и ru_RU у Вас чего-то не берется. Я б полез в код отладочные принты ставить. 🙂
Это какие? Давайте, я вставлю…
Так посмотрите цепочку, кто за кем идет и что делает. Начинаем с l10n.php. Находим там load_plugin_textdomain(), ставим echo $mofile. Вывело правильно? Пошли дальше, в load_textdomain(). Смотрим, что возвращается в $l10n[$domain]. И так далее… Где-то вернется не то, что ожидаем. Останется разобраться – почему.
Ну, PHP я не знаю совсем, но всё же…
Там примерно такой код:
function load_plugin_textdomain($domain, $path = false) {
$locale = get_locale();
if ( empty($locale) )
$locale = ‘en_US’;
if ( false === $path )
$path = PLUGINDIR;
$mofile = ABSPATH . "$path/$domain-$locale.mo";
load_textdomain($domain, $mofile);
}
А куда сюда ставить echo $mofile?
function load_plugin_textdomain($domain, $path = false) {
$locale = get_locale();
if ( empty($locale) )
$locale = ‘en_US’;
if ( false === $path )
$path = PLUGINDIR;
$mofile = ABSPATH . "$path/$domain-$locale.mo";
echo $mofile;
load_textdomain($domain, $mofile);
}
И потом зайти в этот файл браузером, так?
Что-то белая страничка, не более…
А, вру.
В админке появилась строка XXX/wp-content/pluginstdo-mini-forms/tdomf-ru_RU.mo
Странная какая-то строчка, неверный путь, после plugins нет обратного слэша. В этом бяда?
Ага.
load_plugin_textdomain(‘tdomf’,PLUGINDIR.’/’.TDOMF_FOLDER);
Кстати, обратите внимание на язык – ru_RU
Йяху!!! Всё, переведу его и будет всем счастье 🙂 .
А ru_RU – проект, на котором возникла проблема не мой, хотя и обслуживается мной, тестировать на нем я не стал, поставил WP на апач на локальном компе.
Ю.Б., спасибо вам огромное!
Огромное пожалуйста! 😀
Иэхх, не всё так просто… На локальном апаче работает, на сервере – нет…
Вставляю код, вижу следующую строчку:
XXX/wp-content/plugins/tdo-mini-forms/tdomf-ru_ru.mo/XXX/wp-content/plugins/polls/wp-polls-ru_ru.mo/XXX/wp-content/plugins/subscribe-to-comments-ru_ru.mo
Тут всё верно?
Это у меня в глазах двоится или у Вас в имени файла? А, понял! Это от трех плагинов. 🙂
А два других плагина по-русски говорят?
Да, вполне.
Оуфф… Права забыл выставить 777. Кстати, зачем они такие для WP?
А хотя знаете – нет, не говорят. Точнее, WP-Polls переведен жестко, в PHP, а Subscribe to comments вообще никак.
Но ещё раз огромное спасибо за интересный способ нахождения пути, по которому ищется локаль!
Кому права 777? Такие права нужны только для папок, в которые будет писать WP/Апач. Для остальных хватит 755. Для файлов – 666 и 644 соответственно.
Это не интересный способ. Это стандартный, нудный и тупой метод, которым приходится пользоваться при отсутствии дебагера с брык-пойнтами. 🙂
C файликом перевода никто не поможет?
Зачем помогать? Не надо отбирать у меня мой хлеб 🙂 . Да и там очень многие строки (жизненно важные) не вынесены в каталог gettext.
Я почти доперевел, через недельку сдам.
ну перевели?)
Перевела посл. версию tdo mini forms, к вечеру выложу на www.sonika.ru/blog