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.