区域设置正在切换/未正确加载(有时)

时间:2012-01-16 16:03:22

标签: php locale gettext poedit

我的网站语言/语言环境有一个非常烦人的问题。我一直在这里环顾四周,但没有找到类似的东西。

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

例如如果你想编辑一个用户,你会得到一个弹出窗口,首先包括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返回时调试并检查了语言。每次都是瑞典语)。

我不希望任何人能够通过我给出的信息解决这个问题我只是感兴趣,如果有人经历过这个或者有任何想法为什么它有时会“切换”请告诉我,如果我能附上还有一些代码可以解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了类似的间歇性问题PHP gettext and vagrant running ubuntu,它在第3次请求时显示了正确的文字。

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

sudo service php5-fpm restart

sudo service apache2 restart

我认为这源于我玩传递给setLocale()

的值