GNU/Linux >> Tutoriales Linux >  >> Linux

Linux – ¿Por qué Locale Es_mx funciona pero no Es?

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.


Linux
  1. ¿Linux Setuid no funciona?

  2. ¿Por qué este "mientras se lee" funciona en una terminal, pero no en un script de Shell?

  3. ¿Por qué `exit &` no funciona?

  4. Linux:¿por qué Rsync en Linux no conserva todas las marcas de tiempo (hora de creación)?

  5. ¿Por qué no funciona la edición de javascript en Chrome Developer Tools?

¿Por qué Windows no reconoce los archivos dentro de las particiones de Linux?

¿Por qué esta expresión regular no funciona en Linux?

ZFS bajo Linux, ¿funciona?

¿Por qué timer_t está definido en time.h en Linux pero no en OS X?

La repetición automática no funciona

¿Por qué Linux Out-of-memory (OOM) Killer no se ejecuta automáticamente, sino que funciona con sysrq-key?