Gettext(i18n)和Smarty运行不稳定

时间:2010-09-10 11:12:44

标签: php smarty gettext php-gettext

我正在使用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

4 个答案:

答案 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