Функция PHP gettext возвращает только исходную непереведенную строку
Я пытаюсь использовать gettext добавить поддержку локализации на мой сайт. Я следовал различным руководствам по настройке gettext и сделал следующее:
Я создал следующие файлы и каталоги в корне моего проекта dir:
test.php
locale/
de_DE
LC_MESSAGES
messages.mo
messages.po
en_GB
LC_MESSAGES
messages.mo
messages.po
Я использовал Poedit для создания вышеописанного .файлы ПО и МО. Я заставил sue it использовать Unix-окончания строк, UTF-8 и установить язык и страну соответственно.
Затем я создал PHP-скрипт под названием test.php, который имеет следующий код:
<?php
define('LOCALE', 'de_DE');
// Set up environmental variables
putenv("LC_ALL=" . LOCALE);
setlocale(LC_ALL, LOCALE);
bindtextdomain("messages", "./locale");
bind_textdomain_codeset("messages", LOCALE .".utf8");
textdomain("messages");
die(gettext('This is a test.'));
?>
Я импортировал текст "это тест."чтобы Поедить и снабдить переводом и сохранить его.
Но почему-то тест.php скрипт будет выводить только исходный текст без перевода. Он отказывается загружать версию для файлов перевода.
Стоит отметить, что сервер работает под управлением Linux (Ubuntu),
Апач 2.2.11 и PHP 5.2.6-3ubuntu4.5. Я проверил phpinfo()
, и gettext включен.
3 ответа:
Ваша проблема может быть связана с отсутствием локали в вашей системе. Пожалуйста, установите немецкий язык, и все должно работать:
sudo apt-get install language-pack-de-base
Затем выполните следующую команду, и вы увидите немецкие локали:
locale -a
После этого, следующий код должен работать, предполагая, что у вас все еще есть .файлы po и. mo в описанной вами структуре каталогов:
<?php setlocale(LC_ALL, 'de_DE.UTF-8'); bindtextdomain('messages', './locale'); textdomain('messages'); echo gettext('This is a test.'); ?>
Да, да, PHP снова поддерживает gettext. Просто намек, который может быть или не быть полезным для вас:
Из-за ужасной реализации PHP gettext многие проекты с открытым исходным кодом, такие как WordPress, перешли на этот: http://savannah.nongnu.org/projects/php-gettext/ и полностью обойти исходную версию.
Я тоже это сделал в одном из своих проектов, и не могу сказать, что я что-то упустил.Недостаток для коммерческих проектов: это под GPL.