L'entrée Wikipedia pour GNU gettext montre un exemple où la locale est juste la langue, "fr". Alors que l'exemple "i18n gettext() "hello world"" dans SO a la valeur locale avec à la fois la langue et le pays, "es_MX
".
J'ai modifié le "es_MX
» exemple pour n'utiliser que la langue, « es ». Cela couvre la création d'un catalogue de messages "es" plutôt que "'es_MX'" et l'appel du programme avec la variable d'environnement LANG définie sur "es". Mais cela produit le texte anglais plutôt que l'espagnol attendu.
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
Selon Contrôler vos paramètres régionaux avec des variables d'environnement :
variable d'environnement, LANGUAGE, qui
n'est utilisée que par GNU gettext… Si
elle est définie, LANGUAGE a priorité
sur LC_ALL, LC_MESSAGES et LANG.
LANGUAGE=es.utf8 ./hellogt
produit le texte attendu en espagnol plutôt qu'en anglais.
Mais cela n'explique pas pourquoi "LANG=es" ne fonctionne pas.
Réponse acceptée :
Wikipédia n'est probablement pas la meilleure référence pour ce genre de choses. Il contient généralement des exemples très simples qui peuvent ne pas être largement applicables, construits pour comprendre des concepts plus que pour des considérations pratiques.
Pourquoi ne pas utiliser la propre documentation de gnu ?
http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale
Vous pouvez définir LANGUAGE sur « es » (ou même « es:fr:en » pour une liste de priorités), mais LANG devra toujours être défini sur es_MX ou quelque chose comme ça. La documentation l'explique assez clairement.