0

我们使用 Smarty gettext 插件进行本地化,它在本地服务器上运行良好。虽然在生产服务器(Linux Debian)上有时翻译是正确的,有时不是。

我的意思是我们在弹出 iframe 中有一些内部 URL,它有时有效,有时无效。我检查了 Stack Overflow 上发布的所有解决方案,但没有成功。

我的代码是这样的

putenv("LANGUAGE=nl_NL.UTF-8");
$domain = 'mydomain';
bindtextdomain($domain, "./locale"); 
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');
date_default_timezone_set('Europe/Amsterdam');
setlocale(LC_ALL, array('nl_NL.UTF-8','nl_NL@euro','nl_NL','dutch'));
4

1 回答 1

1

setlocale我怀疑您的问题是对不同页面加载的调用相互中断。

PHP,当在许多常见的服务器设置下运行时(例如,在线程工作模型下的 Apache mod_php)本身并不是“线程安全的”;不幸的是,底层的 C 函数也不是setlocale包装的。

在调用setlocale和实际输出某些内容之间,同一进程中的不同线程因此可以控制 CPU 并调用setlocale; 一旦第一个线程重新获得控制并生成一些输出,语言环境设置就会丢失。

解决方案是将您的服务器配置为使用非线程执行模型(例如 Apache 的“pre-fork MPM”)或更改代码以使用线程安全的不同语言环境机制。

于 2013-05-04T22:59:31.803 回答