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
wobeixx
es sich um ein Sprach-Subtag undYY
ein Region-Subtag handelt, manchmal gefolgt von einer Zeichensatzanzeige.Antworten:
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 dienen.
Warum nicht gnus eigene Dokumentation verwenden?
http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale
Sie können LANGUAGE auf "es" setzen (oder sogar "es: fr: en" für eine Prioritätsliste), aber LANG müsste immer noch auf es_MX oder ähnliches gesetzt werden. Die Dokumente erklären es ziemlich klar.
quelle
Von Zac Thompsons Link zu den GNU-Gettext-Dienstprogrammen Abschnitt 2.3 Festlegen des Gebietsschemas über Umgebungsvariablen Der Unterabschnitt Die LANGUAGE-Variable :
Macht den Punkt, dass "es" eine Abkürzung ist, die nur,
LANGUAGE
aber nichtLANG
unterstützt.quelle
Das von Ihnen verwendete Gebietsschema muss im System generiert werden. Verwenden Sie
locale -a
diese Option , um alle generierten Gebietsschemas anzuzeigen. Gebietsschema-Quelldateien müssen unter vorhanden sein/usr/share/i18n/locales/
, und soweit ich sehen kann, sind alle vom Typ 'language_COUNTRY'. Wenn Sie das Gebietsschema 'es' wirklich verwenden müssen, können Sie die erforderlichen Dateien vorbereiten, ändern/etc/locale.gen
, um 'es' einzuschließen, und locale-gen ausführen, um es zu generieren. Verwenden Sie andernfalls ein Gebietsschema 'es' mit einem Land.quelle
Könnte dies daran liegen, dass Spanisch in vielen verschiedenen Ländern gesprochen wird und möglicherweise Unterschiede und Macken zwischen den Dialekten aufweist? Gleich wie en_US, en_CA oder en_GB usw.
In der Tat sind hier Ihre Optionen - ich denke, Sie können die meisten Länder erraten (AR = Argentinien, BO = Bolivien, CL = Chile usw.)
quelle
Ich bin mir nicht sicher, aber ich habe mit Joomla und anderen CMS gearbeitet und der Code für Spanisch - Spanien lautet: es_ES
quelle