Gettext (i18n) и Smarty работают беспорядочно

Я разрабатываю веб-приложение с PHP и Smarty. Я использую gettext для интернационализации, но у меня проблема: он работает только иногда, абсолютно случайно. Я загружаю локаль (например, de_DE) с помощью putenv + setlocale + bindtextdomain + textdomain, перезагружаю страницу и вижу «Поиск»; перезагрузите снова, и я вижу "Suche"; еще две перезагрузки и получаю "Suche", но третий снова дайте мне "Search", затем я вижу "Search" много раз, и внезапно я снова вижу "Suche" ... случайным образом.

Я отключил кеш для Smarty, но проблема та же. Я настроил Smarty на использование разных каталогов для разных языков, templates_c / en_GB, templates_c / de_DE и так далее. Компиляция отлично работает.

Я использую smarty-gettext для перевода шаблонов.

Есть ли какие-нибудь известные проблемы с использованием gettext и Smarty?

Отредактируйте, чтобы добавить некоторую информацию: я запускаю свои тесты на машине Linux:

apache2 2.2.14

gettext 0.17

php 5.3.2

smarty 3-SVN $ Rev: 3286


person ARemesal    schedule 10.09.2010    source источник
comment
Я обнаружил, что при перезапуске Apache (полный перезапуск: /etc/init.d/apache2 restart) он снова начинает работать нормально, но я не могу принять это как решение, когда перехожу в производственную среду ... Любые идеи?   -  person ARemesal    schedule 10.09.2010


Ответы (4)


Установлен ли / включен ли у вас Xcache или какой-либо другой кэшер кодов операций? Попробуйте отключить их.

person Kemal    schedule 02.12.2010

У меня та же проблема - иногда на странице отображается перевод, а иногда нет.

Но я использую ванильный PHP (без Smarty) и работаю в Mac OS X (не Linux).

Мой код выглядит так:

$locale='fr_FR'; //...for example...
putenv("LC_ALL=$locale");
setlocale(LC_ALL,$locale);
bindtextdomain("messages","./locale");
bind_textdomain_codeset("messages","UTF-8");
textdomain("messages");

В настоящее время пытаюсь найти проблему - я дам вам знать, если у меня получится.

person xgretsch    schedule 06.04.2011

Раньше возникала аналогичная проблема при использовании локали "pt_BR" при фактическом использовании русских слов. Решил эту проблему, установив локаль на «ru_RU». Надеюсь, это поможет.

Это моя конфигурация, которая действительно сработала:

$directory = './locale';
$domain = 'smartybook';
$locale ="ru_RU";
setlocale(LC_ALL, $locale);
bindtextdomain($domain, $directory);
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');

Еще одно важное замечание: начал работать только после того, как msgfmt -c -v -o msgfmt -o было недостаточно. Также важно: при вводе команд форматирования необходимо быть root, также не забудьте перезапустить apache.

person Evgeny Tryastsin    schedule 16.09.2011

У меня была аналогичная периодически возникающая проблема PHP gettext и vagrant running ubuntu

Попробуйте одно из следующего, я думаю, это будет зависеть от того, как у вас PHP работает с Apache

sudo service php5-fpm restart

sudo service apache2 restart
person Carlton    schedule 28.08.2015