Gettext всегда будет использовать системную локаль по умолчанию
Мне нужно локализовать веб-приложение PHP только для Windows, и ям оценкирасширение gettext но я'Я испытываю самые тяжелые времена, пытаясь заставить это работать в моей коробке разработки Windows 7. Я'мы использовали метод проб и ошибок вместе сМонитор процесса чтобы преодолеть плохую и неточную документацию и янам удалось сделать_()
отображать строки из каталога * .po, соответствующие компьютеру 'Язык по умолчанию (современный испанский в моем случае).Все мои попытки установить другой язык молча игнорируются.
Мы написали тестовый скрипт с большим количеством лишних вещей:
В моем случае, всегда печатает.
es_ES@modern
У меня есть PHP / 5.4.5, но яЯ рассчитываю на то, что он будет работать на любом достаточно современном сервере, которым владеют наши клиенты.
Мы читали много смутных ссылок о необходимости установки локалей даже в Windows, но не уточняли подробности.В чем может быть проблема?
(Я'Я знаю, что общий совет - выгрузить gettext и использовать любую другую библиотеку.)
Дальнейшее тестирование:
Мой код безупречно работает на двух других компьютерах: 32-разрядной Windows Vista и 32-разрядной Windows 7 32-разрядной. Сбой на моем компьютере (64-битная Windows 7) и другой (32-битная Windows Server 2003)
Версия Apache кажется неактуальной (это также происходит с интерпретатором командной строки).Версия PHP кажется неактуальной (также попробовал последнюю 32-битную версию PHP / 5.5.5 на моем ПК).мой[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls]
Дерево реестра идентично другому семерке.Редактировать: Во время тестирования в командной строке ямы обнаружили, что установкаLANG
Переменная среды перед запуском PHP-скрипта окончательно меняет язык:
C:\>set LANG=en_GB
C:\>php C:\test\gettext.php
Это окончательно доказывает, что мой компьютер имеет правильные активы, но также заставляет меня задуматься, почему PHP утверждает, чтоputenv()
работает, а затем игнорирует это:
var_dump( getenv('LANG'), putenv('LANG=en_GB'), getenv('LANG') );
bool(false)
bool(true)
string(5) "en_GB"
Даже это нене имеет никакого эффекта:
$_ENV['LANG'] = 'en_GB';
$_SERVER['LANG'] = 'en_GB';