Wikipedia entry for GNU gettext montre un exemple où la locale est juste la langue, "fr". Alors que le i18n gettext() “hello world” example a la valeur locale avec la langue et le pays, "es_MX
". J'ai modifié l'exemple "es_MX
" pour utiliser seulement la langue, "es", mais il produit le texte anglais plutôt que l'espagnol attendu.Pourquoi la locale es_MX fonctionne-t-elle mais pas es?
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++ -o hellogt hellogt.cxx
xgettext --package-name hellogt --package-version 1.2 --default-domain hellogt --output hellogt.pot hellogt.cxx
msginit --no-translator --locale es --output-file hellogt_spanish.po --input hellogt.pot
sed --in-place hellogt_spanish.po --expression='/"hello, world!"/,/#:/s/""/"hola mundo"/'
mkdir --parents ./es.utf8/LC_MESSAGES
msgfmt --check --verbose --output-file ./es.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.po
LANG=es.utf8 ./hellogt
Selon Controlling your locale with environment variables:
variable d'environnement, la langue, qui est utilisé que par GNU gettext ... Si définie, la langue a priorité sur LC_ALL, LC_MESSAGES et LANG.
LANGUAGE=es.utf8 ./hellogt
produit le texte espagnol devrait plutôt que l'anglais.
Mais cela n'explique pas pourquoi "LANG = es" ne fonctionne pas.