GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Warum funktioniert Locale Es_mx, aber nicht Es?

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.


Linux
  1. Linux – Arch Linux:Pacman funktioniert beim Chrooten nicht?

  2. Linux – Warum funktioniert Setuid nicht?

  3. Warum funktioniert „zip“ in einer For-Schleife, wenn die Datei existiert, aber nicht, wenn sie nicht existiert?

  4. Warum funktioniert dieses „beim Lesen“ in einem Terminal, aber nicht in einem Shell-Skript?

  5. Linux – Warum behält Rsync unter Linux nicht alle Zeitstempel (Erstellungszeit) bei?

Warum funktioniert `exit &` nicht?

Warum funktioniert Tomcat mit Port 8080, aber nicht mit 80?

Warum funktioniert das Bearbeiten von Javascript in den Chrome Developer Tools nicht?

Warum funktioniert „dd“ nicht zum Erstellen eines bootfähigen USB-Sticks?

Warum funktioniert diese Regex nicht unter Linux?

Funktioniert ZFS unter Linux?