GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:perché Locale Es_mx funziona ma non Es?

La voce di Wikipedia per GNU gettext mostra un esempio in cui la localizzazione è solo la lingua, "fr". Considerando che l'esempio "i18n gettext() "hello world"" in SO ha il valore della localizzazione sia con la lingua che con il paese, "es_MX “.

Ho modificato “es_MX ” esempio per utilizzare solo la lingua, “es”. Questo riguarda la creazione di un catalogo di messaggi "es" anziché "'es_MX'" e il richiamo del programma con la variabile d'ambiente LANG impostata su "es". Ma questo produce il testo inglese piuttosto che lo spagnolo previsto.

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

In base al controllo delle impostazioni locali con le variabili di ambiente:

variabile d'ambiente, LANGUAGE, che
è utilizzata solo da GNU gettext … Se
definita, LANGUAGE ha la precedenza
su LC_ALL, LC_MESSAGES e LANG.

LANGUAGE=es.utf8 ./hellogt

produce il testo spagnolo previsto anziché l'inglese.

Ma questo non spiega perché “LANG=es” non funziona.

Risposta accettata:

Wikipedia non è probabilmente il miglior riferimento per cose come questa. Di solito contiene esempi molto semplici che potrebbero non essere ampiamente applicabili, costruiti per comprendere concetti più che per considerazioni pratiche.

Perché non utilizzare la documentazione di gnu?

http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale

Puoi impostare LANGUAGE su "es" (o anche "es:fr:en" per un elenco di priorità), ma LANG dovrebbe comunque essere impostato su es_MX o qualcosa del genere. I documenti lo spiegano abbastanza chiaramente.


Linux
  1. Perché l'espressione regolare funziona in X ma non in Y?

  2. Linux Setuid non funziona?

  3. Perché `zip` in un ciclo For funziona quando il file esiste, ma non quando non lo è?

  4. Perché `esce &` non funziona?

  5. Perché Tomcat funziona con la porta 8080 ma non con la 80?

Linux:perché Rsync su Linux non conserva tutti i timestamp (ora di creazione)?

Perché find -exec mv {} ./target/ + non funziona?

Perché Windows non riconosce i file all'interno delle partizioni Linux?

ZFS sotto Linux, funziona?

perché timer_t è definito in time.h su Linux ma non su OS X

La ripetizione automatica non funziona