Gettext всегда будет использовать системную локаль по умолчанию

Мне нужно локализовать веб-приложение PHP только для Windows, и я оцениваюрасширение gettext но я испытываю самые трудные времена, пытаясь заставить это работать в моей коробке разработки Windows 7. Я использовал метод проб и ошибок вместе сМонитор процесса чтобы преодолеть плохую и неточную документацию, и мне удалось сделать_() отображать строки из каталога * .po, соответствующие локали компьютера по умолчанию (современный испанский в моем случае).Все мои попытки установить другой язык молча игнорируются.

Я написал тестовый скрипт с большим количеством лишних вещей:

<dl><?php

define('DIR_LOCALE', __DIR__ . DIRECTORY_SEPARATOR . 'locale');
bindtextdomain('general', DIR_LOCALE);
bind_textdomain_codeset('general', 'UTF-8');
textdomain('general');

if(!defined('LC_MESSAGES')){
    define('LC_MESSAGES', 5);
}

$pruebas = array(
    'enu',
    'es_ES',
    'en_GB',
    'english-uk',
    'Spanish_Spain.1252',
    'esn',
    'spanish',
    'spanish-modern',
);
foreach($pruebas as $locale){
    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);

    putenv("LC_MESSAGES=$locale");
    setlocale(LC_MESSAGES, $locale);

    putenv("LANGUAGE=$locale");
    putenv("LANG=$locale");
?>
    <dt><?=htmlspecialchars($locale)?></dt>
    <dd><?=_('codigo_idioma')?></dd>
<?php } ?>
</dl>

В моем случае,<?=_('codigo_idioma')?> всегда печатаетes_ES@modern.

У меня есть PHP / 5.4.5, но я ожидаю, что он заработает на любом достаточно современном сервере, которым владеют наши клиенты.

Я читал много расплывчатых ссылок о необходимости установки локалей даже в Windows, но точных подробностей нет.В чем может быть проблема?

(Я знаю, что общий совет - выгрузить gettext и использовать любую другую библиотеку.)

Дальнейшее тестирование:

Мой код безупречно работает на двух других компьютерах: 32-разрядной Windows Vista и 32-разрядной Windows 7 32-разрядной. Сбой на моем компьютере (64-битная Windows 7) и другой (32-битная Windows Server 2003)

Версия Apache кажется неактуальной (это также происходит с командной строкой interp, reter).Версия 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';

Ответы на вопрос(5)

Ваш ответ на вопрос