1

我对我们网站的语言/区域设置有一个非常烦人的问题。我一直在这里寻找,但没有发现类似的东西。

因此,我们支持几种不同的语言,并使用 .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 中,并且某些帐户只有一种语言(不是英语)并且仍然可以使用。

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

我不希望任何人能够通过我提供的信息来解决这个问题我只是感兴趣,如果有人经历过这个或者知道为什么它有时会“切换”请告诉我是否可以附加更多代码解决这个问题。

谢谢!

4

1 回答 1

0

我遇到了类似的间歇性问题PHP gettext 和 vagrant running ubuntu,它在第三个请求中显示了正确的文本。

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

sudo service php5-fpm restart

sudo service apache2 restart

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

于 2015-08-28T10:49:46.753 回答