2012-01-16 91 views
1

我有一个非常恼人的问题,我们的网站的语言/区域设置。我一直在这里四处寻找,但没有发现任何类似的东西。区域设置正在切换/不正确加载(有时)

所以我们支持几种不同的语言,并且一切都设置了.po和.mo文件,这些文件在大多数情况下都能正常工作。有时它会在您加载内容或刷新页面时切换语言。也没有真正的模式,有时6'en'连续,然后'sv',有时每秒'sv'和'en'。

Ex。如果要编辑用户你得到它首先包括authorize.php我们检测语言的弹出和使用此功能进行相应的设置:

function _set_locale ($lang){ 
    switch($lang) { 
     case 'sv': $locale = "sv_SE"; break; 
     case 'en': $locale = "en_SG"; break; 
     case 'nl': $locale = "nl_NL"; break; 
     case 'dk': $locale = "da_DK"; break; 
     case 'vi': $locale = "vi_VN"; break; 
     case 'zh': $locale = "zh_CN"; break; 
     default: $locale = "en_SG"; break; 
     } 
    putenv("LANGUAGE=$locale"); 
    setlocale(LC_ALL, "$locale.UTF-8"); 
    bindtextdomain("messages", "./locale/"); 
    textdomain("messages"); 

我用瑞典语,“SV”运行的帐户设置并刷新编辑用户弹出10次并调试此函数,$ lang是'sv',我记录了setlocale(LC_ALL,0),它每次都返回'sv_SE.UTF-8',但页面以英文显示5-6倍。

它似乎只是从当前的语言切换到原来的语言英语,所以我觉得它没有得到翻译。它看起来不像我们设置错误/默认语言,它只是忽略/没有时间?设置语言。

该语言未保存在Cookie中,某些帐户只有1种语言(不是英语),仍然可以获取该语言。

在上面的例子中,当我们从authorize.php返回时,我们不会在实际的“编辑用户”页面中使用任何语言变量。所以它不应该能够改变它。 (我也调试并检查了从auth返回时的语言,每次都是瑞典语)。

我不希望任何人能够通过我给出的信息解决这个问题我只是感兴趣,如果有人经历过这个或有任何想法,为什么它有时'切换'请让我知道,如果我可以附上更多的代码来解决这个问题。

谢谢!

+0

你玩弄了解[setlocale'手册页](http://php.net/manual/en/function.setlocale.php)中列出的基于过程的警告?这听起来像你可能会遇到来自其他请求的继承区域设置的情况。 – Charles 2012-01-17 00:58:47

+0

感谢您的回答,是的,我读过,但它说“如果您在多线程服务器API上运行PHP,如Windows上的IIS或Apache”,我们正在Linux上运行。我不知道幕后会发生什么,所以也许我们正在运行一些奇怪的配置或者允许这样做的东西? – Sup3rgnu 2012-01-17 15:52:04

+0

我听说过一些故事 - 未经证实的故事,介意你 - 通过'setlocale'和'putenv'来操作语言环境实际上会影响Apache孩子,而不仅仅是一个PHP请求,这会导致下一个请求触发Apache孩子默认处于意想不到的地区。不幸的是,我不记得更多的细节,但也许它可能足以帮助你...... – Charles 2012-01-17 17:08:53

回答

0

我有一个类似的间歇性问题PHP gettext and vagrant running ubuntu,它显示正确的文字在第三个请求。

请尝试以下方法之一,我认为这将取决于你如何使用PHP与Apache

sudo service php5-fpm restart 

sudo service apache2 restart 

运行,我认为它朵朵从我()传递给setLocale的价值