La entrada de Wikipedia para GNU gettext muestra un ejemplo en el que la configuración regional es solo el idioma, "fr". Mientras que el ejemplo “i18n gettext() “hello world”” en SO tiene el valor local con el idioma y el país, “es_MX
“.
He modificado el “es_MX
” ejemplo para usar solo el idioma, “es”. Esto cubre hacer un catálogo de mensajes "es" en lugar de "'es_MX'" e invocar el programa con la variable de entorno LANG configurada en "es". Pero esto produce el texto en inglés en lugar del español esperado.
cat >hellogt.cxx <<EOF
// hellogt.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
int main (){
setlocale(LC_ALL, "");
bindtextdomain("hellogt", ".");
textdomain( "hellogt");
std::cout << gettext("hello, world!") << std::endl;
}
EOF
g++ -ohellogt hellogt.cxx
xgettext -d hellogt -o hellogt.pot hellogt.cxx
msginit --no-translator -l es -o hellogt_spanish.po -i hellogt.pot
sed --in-place hellogt_spanish.po --expression='/#: /,$ s/""/"hola mundo"/'
sed --in-place hellogt_spanish.po --expression='s/PACKAGE VERSION/hellogt 1.0/'
mkdir -p ./es.utf8/LC_MESSAGES
msgfmt -c -v -o ./es.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.po
LANG=es.utf8 ./hellogt
De acuerdo con el control de su entorno local con variables de entorno:
variable de entorno, LANGUAGE, que
es utilizada únicamente por GNU gettext... Si
se define, LANGUAGE tiene prioridad
sobre LC_ALL, LC_MESSAGES y LANG.
LANGUAGE=es.utf8 ./hellogt
produce el texto esperado en español en lugar de inglés.
Pero esto no explica por qué “LANG=es” no funciona.
Respuesta aceptada:
Wikipedia probablemente no sea la mejor referencia para cosas como esta. Por lo general, tiene ejemplos muy simples que pueden no ser ampliamente aplicables, construidos para comprender conceptos más que para consideraciones prácticas.
¿Por qué no usar la propia documentación de gnu?
http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale
Puede configurar IDIOMA en "es" (o incluso "es:fr:en" para una lista de prioridades), pero aún así, LANG deberá configurarse en es_MX o algo así. Los documentos lo explican con bastante claridad.