Gettext не может заставить setlocale () работать - PullRequest
3 голосов
/ 08 февраля 2012

Я использую локализацию gettext следующим образом

$lang = $_GET['lang'];
echo $lang;
putenv("LANG=$lang"); 
setlocale(LC_ALL, $lang); 
bindtextdomain("messages", realpath("../locale")); 
bind_textdomain_codeset("messages", "utf-8"); 
textdomain("messages"); 

... 

echo _("Welcome!") etc.

Я вижу работу локализации, потому что сайт можно увидеть переведенным на словацкий.Тем не менее, не важно, что находится в переменной $ lang, сайт переведен только на словацкий или не переведен вообще.

Словацкий означает любые файлы .po и .mo, которые у меня есть в папке 'sk'.Я попытался поместить разные языки в папку 'sk', она работает, и я получаю разные переводы.Но я не могу сделать это, чтобы взять другую папку, например, 'en' или 'cs'.Все остальные папки игнорируются.Что я делаю не так?

PS setlocale () возвращает false, я не могу понять, почему, но это, вероятно, вызывает проблемы.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

setlocale() вернет false, если ваша система не поддерживает эту локаль.Вы можете увидеть, какие локали поддерживает ваша система, изучив вывод locale -a.Значение, которое вы передаете через lang get var, должно соответствовать одному из этих имен локали.

Как говорит Дэн, sk, вероятно, является вашей стандартной локалью, поэтому она используется, даже если setlocale возвращает false ..

0 голосов
/ 27 февраля 2014

Ну, есть еще один неприятный взлом:

В моей системе только en_DK.utf-8 установлен, и я не могу установить другие языки.

Итак, яm выберите язык, используя вместо этого домен:

$lang = "en";
putenv("LANG=en_DK.utf8"); 
setlocale(LC_ALL, "en_DK.utf8");
bindtextdomain($lang, realpath("./locale")); 
bind_textdomain_codeset($lang, "utf-8"); 
textdomain($lang);

Расположение файлов .mo выглядит следующим образом:

./locale/en_DK.utf-8/LC_MESSAGES/en.mo
...