Gettext (i18n) и Smarty работают с ошибками - PullRequest
4 голосов
/ 10 сентября 2010

Я разрабатываю веб-приложение на 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

Ответы [ 4 ]

1 голос
/ 06 апреля 2011

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

Но я использую ванильный 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");

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

1 голос
/ 02 декабря 2010

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

0 голосов
/ 28 августа 2015

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

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

sudo service php5-fpm restart

sudo service apache2 restart
0 голосов
/ 16 сентября 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.

...