Я пытаюсь создать файлы ресурсов для многоязычного сайта PHP.
Я создал файлы .po, а затем преобразовал их в двоичные файлы .mo с помощью этой небольшой библиотеки https://github.com/josscrowcroft/php.mo, но они, похоже, не работают. Но если я открываю сгенерированный файл .po с помощью Poedit, а затем нажимаю «Сохранить», я заметил, что размер файла .mo немного изменился по сравнению с исходным, и файл .po работает. Я не знаю, как заставить его работать напрямую, без использования Poedit Tool.
Пожалуйста, дайте мне несколько советов, если у вас есть! Спасибо
Следующий текст скопирован с http://php.net/manual/en/book.gettext.php
«Важно помнить:
Не забудьте установить кодировку в .po файл!
Например:
«Тип содержимого: текст / обычный; кодировка = UTF-8 \ n»
Затем PHP сможет найти сгенерированный вами файл .mo, используя msgfmt, из файла .po С CHARSET SET.
Из-за этого я потратил много времени на отладку своего кода, тестируя все небольшие изменения, предложенные людьми в этом руководстве и в Интернете:
<?php
//this:
setlocale( LC_MESSAGES, 'pt_BR')
//or this:
setlocale( LC_MESSAGES, 'pt_BR.utf8')
//or this:
setlocale( LC_MESSAGES, '')
//this:
putenv("LANG=pt_BR.utf8");
//or this:
putenv("LANGUAGE=pt_BR.utf8");
//this:
bindtextdomain('mydomain', dirname(__FILE__).'/locale');
//or this:
bindtextdomain("*", dirname(__FILE__).'/locale');
//or this:
bindtextdomain('*', dirname(__FILE__).'/locale');
//setting or not "bind_textdomain_codeset()":
bind_textdomain_codeset("mydomain", 'UTF-8');
?>
Как и какое имя каталога локали установить:
./locale/pt_BR.UTF8/LC_MESSAGES/mydomain.mo
или же
./locale/pt_BR/LC_MESSAGES/mydomain.mo
или же
./locale/pt/LC_MESSAGES/mydomain.mo
Наконец, код, который принес правильные переведенные строки (также с правильной кодировкой), был:
<?php
$directory = dirname(__FILE__).'/locale';
$domain = 'mydomain';
$locale ="pt_BR.utf8";
//putenv("LANG=".$locale); //not needed for my tests, but people say it's useful for windows
setlocale( LC_MESSAGES, $locale);
bindtextdomain($domain, $directory);
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');
?>
И имена трех каталогов сработали, используя локаль pt_BR.utf8. (Мои тесты были сделаны, перезапуская Apache, затем пробуя каждый каталог).
Я надеюсь помочь кому-то еще не тратить столько времени, сколько я потратил впустую … = P
С помощью:
Ubuntu 8.04 (харди)
Apache 2.2.8
PHP 5.2.4-2ubuntu5.6
«
Других решений пока нет …