Por que a localidade es_MX funciona, mas não es?

7

A entrada da Wikipedia para o gettext do GNU mostra um exemplo em que a localidade é apenas a lanuage, "fr". Considerando que o 'i18n gettext ()' hello world 'example' em SO tem o valor de locale com o idioma e o país, " es_MX ".

Eu modifiquei o exemplo " es_MX " para usar apenas o lanuage, "es". Isso abrange criar um catálogo de mensagens "es" em vez de "'es_MX'" e chamar o programa com a variável de ambiente LANG definida como "es" .Mas isso produz o texto em inglês, em vez do espanhol 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 acordo com Como controlar sua localidade com variáveis de ambiente :

environment variable, LANGUAGE, which is used only by GNU gettext ... If defined, LANGUAGE takes precedence over LC_ALL, LC_MESSAGES, and LANG.

LANGUAGE=es.utf8 ./hellogt

produz o texto em espanhol esperado, em vez de inglês.

Mas isso não explica porque "LANG = es" não funciona.

    
por C.W.Holeman II 03.07.2009 / 20:58

5 respostas

4

De link de Zac Thompson para utilitários GNU gettext seção 2.3 Configurando a localidade através de variáveis de ambiente a subseção A variável LANGUAGE :

In the LANGUAGE environment variable, but not in the other environment variables, ‘ll_CC’ combinations can be abbreviated as ‘ll’ to denote the language's main dialect. For example, ‘de’ is equivalent to ‘de_DE’ (German as spoken in Germany), and ‘pt’ to ‘pt_PT’ (Portuguese as spoken in Portugal) in this context.

Faz o ponto que "es" é uma abreviação que apenas LANGUAGE mas não LANG suporta.

    
por 16.02.2011 / 21:27
4

A Wikipedia provavelmente não é a melhor referência para coisas como essa. Geralmente tem exemplos muito simples que podem não ser amplamente aplicáveis, construídos para entender conceitos mais do que para considerações práticas.

Por que não usar a documentação do gnu?

link

Você pode definir LANGUAGE para "es" (ou mesmo "es: fr: en" para uma lista de prioridades), mas o LANG ainda precisa ser definido como es_MX ou algo parecido. Os documentos explicam isso com bastante clareza.

    
por 11.07.2009 / 02:59
4

A localidade usada deve ser gerada no sistema. Use locale -a para ver todos os locais gerados. Os arquivos de código-fonte da região devem estar presentes /usr/share/i18n/locales/ e, até onde eu posso ver, todos são do tipo 'language_COUNTRY'. Se você realmente precisa usar o código de idioma 'es', pode preparar os arquivos necessários, pode modificar o /etc/locale.gen para incluir 'es' e executar o código de idioma para gerá-lo. Caso contrário, use uma localidade 'es' com um país.

    
por 10.07.2009 / 22:04
2

Será porque o espanhol é falado em muitos países diferentes e pode ter variações e peculiaridades entre os dialetos? O mesmo que en_US, en_CA ou en_GB etc.

Na verdade, aqui estão suas opções - acho que você pode adivinhar a maioria dos países (AR = Argentina, BO = Bolívia, CL = Chile, etc)

es_AR
es_AR.iso88591
es_AR.utf8
es_BO
es_BO.iso88591
es_BO.utf8
es_CL
es_CL.iso88591
es_CL.utf8
es_CO
es_CO.iso88591
es_CO.utf8
es_CR
es_CR.iso88591
es_CR.utf8
es_DO
es_DO.iso88591
es_DO.utf8
es_EC
es_EC.iso88591
es_EC.utf8
es_ES
es_ES@euro
es_ES.iso88591
es_ES.iso885915@euro
es_ES.utf8
es_ES.utf8@euro
es_GT
es_GT.iso88591
es_GT.utf8
es_HN
es_HN.iso88591
es_HN.utf8
es_MX
es_MX.iso88591
es_MX.utf8
es_NI
es_NI.iso88591
es_NI.utf8
es_PA
es_PA.iso88591
es_PA.utf8
es_PE
es_PE.iso88591
es_PE.utf8
es_PR
es_PR.iso88591
es_PR.utf8
es_PY
es_PY.iso88591
es_PY.utf8
es_SV
es_SV.iso88591
es_SV.utf8
es_US
es_US.iso88591
es_US.utf8
es_UY
es_UY.iso88591
es_UY.utf8
es_VE
es_VE.iso88591
es_VE.utf8
    
por 03.07.2009 / 21:06
1

Não tenho muita certeza sobre isso, mas tenho trabalhado com o Joomla e outros CMS e o código para o espanhol - a Espanha é: es_ES

    
por 03.07.2009 / 21:02

Tags