GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – Pourquoi la locale Es_mx fonctionne-t-elle mais pas Es ?

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.


Linux
  1. Pourquoi l'expression régulière fonctionne-t-elle dans X mais pas dans Y ?

  2. Linux Setuid ne fonctionne pas ?

  3. Pourquoi "zip" dans une boucle For fonctionne-t-il lorsque le fichier existe, mais pas lorsqu'il n'existe pas ?

  4. Pourquoi ce "pendant la lecture" fonctionne-t-il dans un terminal, mais pas dans un script shell ?

  5. Pourquoi `exit &` ne fonctionne pas ?

Pourquoi 'dd' ne fonctionne-t-il pas pour créer une clé USB amorçable ?

Pourquoi cette regex ne fonctionne-t-elle pas sous Linux ?

ZFS sous Linux, ça marche ?

pourquoi timer_t est-il défini dans time.h sous Linux mais pas sous OS X

La répétition automatique ne fonctionne pas

Pourquoi Linux out-of-memory killer (OOM) ne s'exécute-t-il pas automatiquement, mais fonctionne-t-il sur sysrq-key ?