Der Wikipedia-Eintrag für GNU gettext zeigt ein Beispiel, in dem das Gebietsschema nur die Sprache "fr" ist. Während das Beispiel 'i18n gettext () "Hallo Welt" in SO den Gebietsschemawert sowohl für die Sprache als auch für das Land hat, " es_MX
".
Ich habe das es_MX
Beispiel " " geändert , um nur die Sprache "es" zu verwenden. Dies umfasst das Erstellen eines Nachrichtenkatalogs "es" anstelle von "'es_MX'" und das Aufrufen des Programms mit der Umgebungsvariablen LANG, die auf "es" gesetzt ist. Dies erzeugt jedoch den englischen Text und nicht das erwartete Spanisch.
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
Gemäß Steuern Ihres Gebietsschemas mit Umgebungsvariablen :
Umgebungsvariable LANGUAGE, die nur von GNU gettext verwendet wird ... Wenn definiert, hat LANGUAGE Vorrang vor LC_ALL, LC_MESSAGES und LANG.
LANGUAGE=es.utf8 ./hellogt
erzeugt den erwarteten spanischen Text anstatt Englisch.
Dies erklärt jedoch nicht, warum "LANG = es" nicht funktioniert.
xx_YY
wobei xx
es sich um ein Sprach-Subtag und YY
ein Region-Subtag handelt, manchmal gefolgt von einer Zeichensatzanzeige.