Intereting Posts
Динамическое пользовательское меню WordPress не показывает правильные результаты Есть быстрый способ добавить префиксы ко всем классам CSS и идентификаторам? PHP – подсчитать повторяющиеся значения в двухмерном массиве, а затем отобразить только уникальные значения со счетчиком PHP включает относительный путь Аутентификация Symfony2 не выполняется Использование TIMESTAMP MySQL для непосредственного хранения временных меток PHP – сеанс за вкладку Является ли PHP или ванильным Perl CGI быстрее? PHP – Относительные пути "требуют" Как я могу рекурсивно включать все файлы с определенным именем в папку с помощью PHP? Аутентификация прокси-сервера с помощью cURL Как вызвать привязку фильтра в внешнем файле PHP Как не показывать последнюю скобку в монологическом журнале? PDO: вызов функции-члена функции fetch () для не-объекта? Подробные регулярные выражения в PHP?

Ничто не переводится с использованием gettext

Как я могу отлаживать использование gettext? Я выполнил описанные здесь шаги, создал оба файла .pot .po и создал файл .mo.

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

Вот как я создал файлы перевода (название проекта – «ft»):

find ft/. -name "*.php" ! -path "*.svn*" > ft/i18n/listpot.txt xgettext --from-code=utf-8 --default-domain=ft --output=ft/i18n/ft.pot --files-from=ft/i18n/listpot.txt rm ft/i18n/listpot.txt #wrote the translated strings in poedit msgfmt -c -v -o ft/i18n/en/LC_MESSAGES/en.mo ft/i18n/ft_en.po #restarted apache 

На моей странице ft.php я включаю i18n.php, который содержит:

  $folder = 'ft'; $lang = 'en_US.UTF8'; $domain = 'messages'; setlocale(LC_ALL, 'en_US.UTF8', 'en.UTF8', 'en_US.UTF-8', 'en.UTF-8')."<br />"; putenv("LC_ALL=$lang"); bindtextdomain("$domain", dirname(__FILE__)."/$folder/i18n"); textdomain("$domain"); bind_textdomain_codeset("$domain", 'UTF-8'); 

В ft.php я повторяю строки с:

 echo _('test_string'); 

Но это повторяет «test_string», а не переведенную версию 🙁

Есть ли способ отображать ошибки, сгенерированные скриптом php-gettext? Я забываю о шаге?

edit : У меня есть следующее дерево папок:

 ./ft/i18n/en/LC_MESSAGES/messages.mo messages.po fr/LC_MESSAGES/messages.po messages.mo 

Я попытался сменить папку «en» на «en_US» и «en_US.UTF8», а файл «messages.mo» – «en.mo», «en_US.mo», «en_US.UTF8.mo», но ничего не переводится.

gettext не очень легко отлаживать, поскольку он ничего не говорит, когда что-то не так. Попробуйте использовать is_dir (), чтобы проверить папку, в которой находятся файлы .po и .mo.

У меня также была проблема с переменной областью в require ()

Вот что работает для меня:

 $folder = 'ft'; $domain = 'messages'; $lang = 'fr_FR.utf8'; $directory = dirname(__FILE__)."/../../$folder/i18n"; //putenv("LANG=".$locale); //not needed for my tests, but people say it's useful for windows setlocale(LC_MESSAGES, $lang); bindtextdomain($domain, $directory); textdomain($domain); bind_textdomain_codeset($domain, 'UTF-8'); 

Каталоги:

 ./ft/i18n/en/LC_MESSAGES/messages.mo messages.po fr/LC_MESSAGES/messages.po messages.mo