Gettext siempre usará la configuración regional predeterminada del sistema

Necesito localizar una aplicación web PHP solo para Windows y estoy evaluando elextensión gettext pero me cuesta más intentar que funcione en mi caja de desarrollo de Windows 7. He usado prueba y error junto conMonitor de proceso para superar la documentación pobre e inexacta y he logrado hacer_() mostrar cadenas del catálogo * .po que corresponde a la configuración regional predeterminada de la computadora (español moderno en mi caso).Todos mis intentos de establecer una configuración regional diferente se ignoran silenciosamente.

He escrito un script de prueba con un montón de cosas 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>

En mi caso,<?=_('codigo_idioma')?> siempre imprimees_ES@modern.

Tengo PHP / 5.4.5 pero espero que funcione en cualquier servidor razonablemente actualizado que nuestros clientes tengan.

He leído muchas referencias vagas sobre la necesidad de instalar locales, incluso en Windows, pero sin detalles exactos.Cuál puede ser el problema?

(Soy consciente de que el consejo común es volcar gettext y usar cualquier otra biblioteca).

Pruebas adicionales:

Mi código se ejecuta perfectamente como está en otras dos computadoras: Windows Vista de 32 bits y Windows 7 de 32 bits de 32 bits. Falla en mi computadora (Windows 7 de 64 bits) y en otra (Windows Server 2003 de 32 bits)

La versión de Apache parece irrelevante (también sucede con el intérprete de línea de comandos).La versión de PHP parece irrelevante (también probé el último PHP / 5.5.5 de 32 bits en mi PC).Mi[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls] El árbol de registro es idéntico al otro cuadro de siete.

Editar: Mientras realizaba las pruebas en la línea de comandos, descubrí que la configuración deLANG La variable de entorno antes de ejecutar el script PHP finalmente cambia el idioma:

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

Esto demuestra de manera definitiva que mi computadora tiene los activos correctos, pero también me hace preguntarme por qué PHP afirma queputenv() Trabaja y luego lo ignora:

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

Incluso esto no tiene ningún efecto:

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

Respuestas a la pregunta(5)

Su respuesta a la pregunta