我正在使用PHP和Smarty开发一个webapp。我使用gettext进行国际化,但我遇到了一个问题:它只是有时有效,绝对是随机的。我用putenv + setlocale + bindtextdomain + textdomain加载一个语言环境('de_DE',例如),重新加载页面,然后看“搜索”;重新加载,我看到“Suche”;两次重新加载并获得“Suche”但是thirth再次给我“搜索”,然后我看到“搜索”很多时间,突然我再次看到“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
答案 0 :(得分:1)
您是否安装/启用了Xcache或任何其他操作码cacher?尝试禁用它们。
答案 1 :(得分:1)
我遇到了同样的问题 - 有时页面显示翻译,有时则不显示。
但我使用的是vanilla 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");
目前正试图解决这个问题 - 如果我成功,我会告诉你。
答案 2 :(得分:0)
用于在实际使用俄语单词时使用语言环境“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。
答案 3 :(得分:0)
我有类似的间歇性问题PHP gettext and vagrant running ubuntu
尝试以下方法之一,我认为这将取决于您如何使用Apache运行PHP
sudo service php5-fpm restart
sudo service apache2 restart