Gettext (i18n) 和 Smarty 运行不稳定

发布于 2024-09-18 12:34:40 字数 573 浏览 8 评论 0原文

我正在使用 PHP 和 Smarty 开发一个网络应用程序。我使用 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 计算机中运行测试:

apa​​che2 2.2.14

gettext 0.17

php 5.3.2

smarty 3-SVN$Rev: 3286

I'm developing a webapp with PHP and Smarty. I use gettext to internationalize, but I've a problem: it only works sometimes, absolutly randomly. I load a locale ('de_DE', by example) with putenv+setlocale+bindtextdomain+textdomain, reload the page, and see "Search"; reload again and I see "Suche"; two more reloads and get "Suche" but thirth give me "Search" again, then I see "Search" many time and suddenly I can see "Suche" again... randomly.

I've deactivated cache for Smarty, but same issue. I've configured Smarty to use different directories for different languages, templates_c/en_GB, templates_c/de_DE, and so on. Compiling works fine that manner.

I'm using smarty-gettext for templates translation.

Are there any known issue about using gettext and Smarty?

Edit to add some information: I'm running my tests in a Linux machine:

apache2 2.2.14

gettext 0.17

php 5.3.2

smarty 3-SVN$Rev: 3286

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

护你周全 2024-09-25 12:34:40

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

Do you have Xcache or any other opcode cacher installed/enabled? Try disabling them.

骷髅 2024-09-25 12:34:40

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

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

目前正在尝试解决问题 - 如果成功,我会让您知道。

I'm experiencing the same issue - sometimes the page shows the translation, and sometimes it doesn't.

But I'm using vanilla PHP (no Smarty), and running on Mac OS X (not Linux).

My code looks like:

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

Currently trying to hunt the problem down - I will let you know if I succeed.

凉城已无爱 2024-09-25 12:34:40

在实际使用俄语单词时,使用语言环境“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。

Used to get similar problem while using locale "pt_BR" when actually using russian words.
Solved this by setting locale to "ru_RU".
Hope this might help.

This is my configuration that actually worked:

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

One more important note:
started working only after using msgfmt -c -v -o
msgfmt -o wasn't enough.
Also important: need to be root when issuing formatting commands,
also don't forget to restart apache.

伴梦长久 2024-09-25 12:34:40

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

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

sudo service php5-fpm restart

sudo service apache2 restart

I had a similar intermittent problem PHP gettext and vagrant running ubuntu

Try one of the following, I think it will depend how you have PHP running with Apache

sudo service php5-fpm restart

sudo service apache2 restart
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文