我遇到了同样的错误。我的情况有点不同,我开始认为它与线程有关,尽管它发生在我更改代码之后。
我有一个语言栏:
<?php
include_once (dirname(__FILE__) . "/resources/config.php");
?>
<div id='language_bar'>
<a style="margin-left:50px" href="./index.php?locale=es_ES">
<img src='<?php echo $config['paths']['images']['lang']?>/es_ES.gif'/>
</a>
<a href="./index.php?locale=en_UK">
<img src='<?php echo $config['paths']['images']['lang']?>/en_UK.gif'/>
</a>
<a href="./index.php?locale=de_DE">
<img src='<?php echo $config['paths']['images']['lang']?>/de_DE.gif'/>
</a>
</div>
还有一个配置文件:
if (isset($_GET['locale'])) {
$locale = $_GET['locale'];
setcookie('locale', $locale, time() + 60 * 60 * 24 * 30);
} else {
if(isset($_COOKIE['locale'])) {
error_log('En _COOKIE');
$locale = $_COOKIE['locale'];
}
else {
$locale = $config['localization']['default_locale'];
setcookie('locale', $locale, time() + 60 * 60 * 24 * 30);
}
}
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
error_log('setlocale->'.setlocale(LC_ALL, "0")." Env ->". getenv("LC_ALL"));
error_log(_("Submit"));
我的主页有一些通过 jQuery 交互的 div,并在级联中重新加载。有时,其中一些(随机)给出默认字符串值。
默认情况下,它是西班牙语(es_ES),点击几下强制div刷新后,一些字符串以英文打印(en_UK原始字符串)。更重要的是。如果我切换到德语(de_DE),在第一次刷新后,我得到德语的每个字符串,gettext 开始用西班牙语重新输入字符串,过一会儿,用英语重新输入字符串。
请注意,我在 php 日志中添加了调试行。他们真的很有趣:
当事情进展顺利时:
[Thu May 31 00:28:51 2012] [error] [client ::1] setlocale->es_ES Env ->es_ES
[Thu May 31 00:28:51 2012] [error] [client ::1] Aplicar, referer: xxxxxxxx/index.php
什么时候不要:
[Thu May 31 00:29:45 2012] [error] [client ::1] setlocale->es_ES Env ->es_ES, referer: xxxxxxxxx/index.php
[Thu May 31 00:29:45 2012] [error] [client ::1] Submit, referer: xxxxxxxx/index.php
所以我猜这是 _() 函数失败(我总是使用别名)。为了以防万一,我在函数上循环了 10.000 次,它在翻译时给出了 10.000 次点击或 10.000 次错误,因此对于整个 http 请求它都会失败,或者没有。
我很抱歉写了这么多,但我真的很感激能帮助我指明正确的方向。(这个错误不仅发生在@我的本地主机上,也发生在我的在线测试服务器上)
¿ 可能与我为每个连接设置区域设置这一事实有关?
我的在线“游乐场”是:
Linux server8.nixiweb.com 2.6.32-71.29.1.el6.x86_64 #1 SMP Mon Jun 27 19:49:27 BST 2011 x86_64
我的服务器:
Linux filete 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 PHP 版本 5.3.10-1ubuntu3.1
请注意,两者都是 64 位