5

我正在用 PHP 和 Smarty 开发一个 webapp。我使用 gettext 进行国际化,但我有一个问题:它有时只能工作,绝对随机。我用 putenv+setlocale+bindtextdomain+textdomain 加载一个语言环境(例如'de_DE'),重新加载页面,然后查看“搜索”;再次重新加载,我看到“Suche”;再重新加载两次并获得“Suche”,但第三次再次给我“搜索”,然后我多次看到“搜索”,突然我又可以看到“Suche”......随机。

我已经为 Smarty 停用了缓存,但同样的问题。我已经将 Smarty 配置为针对不同的语言使用不同的目录,templates_c/en_GB、templates_c/de_DE 等等。以这种方式编译工作正常。

我正在使用 smarty-gettext 进行模板翻译。

使用 gettext 和 Smarty 是否有任何已知问题?

编辑以添加一些信息:我在 Linux 机器上运行我的测试:

阿帕奇2 2.2.14

获取文本 0.17

php 5.3.2

smarty 3-SVN$Rev: 3286

4

4 回答 4

1

您是否安装/启用了 Xcache 或任何其他操作码缓存器?尝试禁用它们。

于 2010-12-02T12:27:38.163 回答
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。

于 2011-09-16T06:16:37.223 回答
0

我遇到了同样的问题 - 有时页面显示翻译,有时不显示。

但我使用的是普通 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");

目前正试图找出问题所在 - 如果我成功了,我会告诉你的。

于 2011-04-06T09:15:12.230 回答
0

我有一个类似的间歇性问题PHP gettext 和 vagrant running ubuntu

尝试以下方法之一,我认为这将取决于您如何让 PHP 与 Apache 一起运行

sudo service php5-fpm restart

sudo service apache2 restart
于 2015-08-28T10:38:05.037 回答