Der Wikipedia-Eintrag für GNU gettext zeigt ein Beispiel, bei dem das Gebietsschema nur die Sprache „fr“ ist. Während das „i18n gettext() „hello world“-Beispiel“ in SO den Locale-Wert mit sowohl der Sprache als auch dem Land hat, „es_MX
„.
Ich habe die „es_MX
” Beispiel, um nur die Sprache „es“ zu verwenden. Dies umfasst das Erstellen eines „es“- anstatt „es_MX“-Nachrichtenkatalogs und das Aufrufen des Programms mit der auf „es“ gesetzten Umgebungsvariable LANG. Dies erzeugt jedoch eher den englischen Text als den erwarteten spanischen.
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 … Falls
definiert, hat LANGUAGE Vorrang
vor LC_ALL, LC_MESSAGES und LANG.
LANGUAGE=es.utf8 ./hellogt
erzeugt den erwarteten spanischen Text und nicht den englischen.
Aber das erklärt nicht, warum „LANG=es“ nicht funktioniert.
Akzeptierte Antwort:
Wikipedia ist wahrscheinlich nicht die beste Referenz für solche Dinge. Es enthält normalerweise sehr einfache Beispiele, die möglicherweise nicht allgemein anwendbar sind und eher zum Verständnis von Konzepten als für praktische Überlegungen konstruiert wurden.
Warum nicht die eigene Dokumentation von gnu verwenden?
http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale
Sie können LANGUAGE auf „es“ (oder sogar „es:fr:en“ für eine Prioritätsliste) setzen, aber LANG müsste immer noch auf es_MX oder so ähnlich gesetzt werden. Die Dokumentation erklärt es ziemlich klar.