Локаль переключается / не загружается должным образом (иногда) - PullRequest
1 голос
/ 16 января 2012

У меня очень досадная проблема с языком / языковым стандартом для нашего сайта. Я искал здесь, но не нашел ничего подобного.

Таким образом, мы поддерживаем несколько разных языков и настроили все файлы .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, мы не используем какую-либо языковую переменную на реальной странице редактирования пользователя. Так что не должно быть в состоянии изменить это там. (Я также отлаживал и проверял язык при возвращении из аутентификации. Каждый раз это был шведский).

Я не ожидаю, что кто-нибудь сможет решить эту проблему с помощью предоставленной мной информации. Мне просто интересно, если кто-то испытал это или имел какое-либо представление, почему это иногда «переключается», пожалуйста, дайте мне знать, если я могу прикрепить еще немного кода, чтобы разобраться в этом.

Спасибо!

1 Ответ

0 голосов
/ 28 августа 2015

У меня была похожая периодически возникающая проблема PHP gettext и vagrant работали с ubuntu , он отображал правильный текст при третьем запросе.

Попробуйте выполнить одно из следующих действий, думаю, это будет зависетькак у вас работает PHP с Apache

sudo service php5-fpm restart

sudo service apache2 restart

Я думаю, что это связано с тем, что я поиграл со значением, переданным setLocale ()

...