Использование gettext в проекте php - переведен только один язык

Я пытаюсь перевести веб-страницу на несколько языков. Однако я могу заставить gettext работать только на испанском.

Я использую этот код:

$lang = "de_DE";
if (isset($_GET['lang'])) $lang = $_GET['lang'];
putenv("LC_ALL=$lang");
setlocale(LC_ALL, $lang);
bindtextdomain("messages", "locale");
bind_textdomain_codeset('messages', 'UTF-8');
textdomain("messages");

Если я устанавливаю $ lang = "es_ES", строки переводятся на испанский язык, но если я устанавливаю $ lang = "de_DE", перевод не работает, я вижу только английскую версию по умолчанию.

Я думаю, это может быть что-то в моем компьютере (я использую Windows на испанском языке). Я работаю в Windows (использую Wamp localhost), и я не знаю, нужно ли мне устанавливать что-то еще, и если да, то как это сделать.

Если мне придется это сделать, будет ли это работать на моем онлайн-хостинге без установки чего-либо там?

Спасибо! :)


person user2348684    schedule 04.05.2013    source источник


Ответы (1)


У setlocale () есть проблемы в Windows, которые упоминаются в самой официальной документации PHP:

Информация о языковом стандарте сохраняется для каждого процесса, а не для потока. Если вы используете PHP на многопоточном серверном API, таком как IIS или Apache в Windows, вы можете столкнуться с внезапными изменениями настроек локали во время работы скрипта, хотя сам скрипт никогда не вызывал setlocale (). Это происходит из-за того, что другие сценарии выполняются в разных потоках одного и того же процесса одновременно, изменяя локаль всего процесса с помощью setlocale ().

Пользователи Windows найдут полезную информацию о строках локали на веб-сайте Microsoft MSDN. Поддерживаемые языковые строки можно найти в »языковых строках документация и поддерживаемые строки страны / региона в »документация по строкам страны / региона.

В основном вам нужно понять, что многие функции PHP являются оболочками над программными API * ix OS. Таким образом, они будут хорошо работать в Linux и других совместимых ОС - не так хорошо в Windows.

person raidenace    schedule 04.05.2013