O Gettext sempre usará a localidade padrão do sistema

Eu preciso localizar um aplicativo da Web PHP somente para Windows e estou avaliando oextensão gettext mas estou tendo o pior momento tentando fazer isso funcionar na minha caixa de desenvolvimento do Windows 7. Eu usei tentativa e erro junto comMonitor de processo para superar a documentação pobre e imprecisa e consegui fazer_() exibir seqüências de caracteres do catálogo * .po que corresponde ao idioma padrão do computador (espanhol moderno no meu caso).Todas as minhas tentativas de definir uma localidade diferente são silenciosamente ignoradas.

Eu escrevi um script de teste com muitas coisas redundantes:

<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>

No meu caso,<?=_('codigo_idioma')?> sempre imprimees_ES@modern.

Eu tenho PHP / 5.4.5, mas estou esperando para fazê-lo funcionar em qualquer servidor razoavelmente atualizado que nossos clientes possuam.

Eu li muitas referências vagas sobre a necessidade de instalar locais, mesmo no Windows, mas sem detalhes exatos.Qual pode ser o problema?

(Estou ciente de que o conselho comum é despejar o gettext e usar qualquer outra biblioteca.)

Teste aprofundado:

Meu código é executado perfeitamente como está em outros dois computadores: Windows Vista de 32 bits e 32 bits do Windows 7 de 32 bits. Ele falha no meu computador (Windows 7 de 64 bits) e outro (Windows Server 2003 de 32 bits)

A versão do Apache parece irrelevante (isso também acontece com o interpretador de linha de comando).Versão do PHP parece irrelevante (também tentei mais recente PHP / 5.5.5 de 32 bits no meu PC).Minhas[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls] A árvore de registro é idêntica à outra caixa Sete.

Editar: Durante o teste na linha de comando, descobri que definir oLANG variável de ambiente antes de executar o script PHP finalmente altera o idioma:

C:\>set LANG=en_GB
C:\>php C:\test\gettext.php

Isso prova definitivamente que meu computador tem os ativos corretos, mas também me faz pensar porque PHP afirma queputenv() funciona e, em seguida, ignora:

var_dump( getenv('LANG'), putenv('LANG=en_GB'), getenv('LANG') );
bool(false)
bool(true)
string(5) "en_GB"

Mesmo isso não tem nenhum efeito:

$_ENV['LANG'] = 'en_GB';
$_SERVER['LANG'] = 'en_GB';

questionAnswers(6)

yourAnswerToTheQuestion