Obwohl ich im Voraus fast nichts über die Implementierung der Lokalisierung unter Linux wusste, versuchte ich mein Bestes, um mich damit vertraut zu machen.
Kurze Beschreibung
/ usr / lib / locale / locale-archive
locale-archive
ist eine Speicherzuordnungsdatei, die durch locale-gen(8)
Aufrufen generiert wird localedef(1)
. Speicherzuordnung bedeutet, dass sie nach dem Erstellen und Aufrufen durch ein Programm nur einmal in den Speicher geladen wird.
Da alle in definierten /etc/locale.gen
Sprachsätze vordefiniert sind und das Archiv selbst sehr statisch ist, muss es nicht mehrmals im Speicher gespeichert werden. Jedes Mal, wenn es von einem anderen Programm aufgerufen wird, wird der Prozess auf das bereits im Speicher geladene Archiv verwiesen, sodass nur der virtuelle Speicher des Programms addiert wird. Auf diese Weise wird nicht nur der physische Speicherbedarf des Prozesses verringert, sondern auch jedes System zur Lokalisierung beschleunigt. (Keine zusätzlichen Festplatten-E / A erforderlich!)
Außerdem scheint es als eine Art Failback-Gebietsschemadatei zu funktionieren, die alle systemweiten Sprachen enthält. Darüber hinaus wird das Archiv häufig von mit glibc geschriebener Software verwendet.
/usr/share/locale/$LOCALE_DIR/LC_MESSAGES/$PROGRAM.mo
Die Internationalisierung ( i18n, 18 chars between 'i' and 'n'
) von Software unter Linux kann mithilfe von GNU-gettext erreicht werden.
- Wenn ein Programm geschrieben wird, wird jede Druckanweisung angepasst, um die GNU-
gettext()
Funktion zu verwenden, die die Zeichenfolge umschließt, die gedruckt werden muss.
- Anschließend wird
xgettext(1)
die Quelle durchlaufen und .pot (Portable Object Template Files)
auf ihrem Weg erstellt.
- Der menschliche Übersetzer kann es dann verwenden
msginit(1)
, um es in .po (Portable Object)
Dateien zu analysieren , die im Allgemeinen einen Nachrichtenkatalog darstellen. Dann werden alle Zeichenfolgen von Hand übersetzt.
- Danach
msgfmt(1)
wird die bearbeitete .po
Datei in Binärdateien kompiliert .mo (Message Object)
. Diese können zusammen mit dem Softwarepaket geliefert werden.
Wird bei der Installation eines Pakets auf einem System /usr/share/locale/<locale_dir>/LC_MESSAGES/
mit $PROGRAM.mo
Dateien gefüllt. Wenn Sie beispielsweise wget aufrufen, zeigt Ihre LANG
env-Variable wget
auf die Verwendung Ihrer aktuellen Gebietsschemaeinstellung, was dazu führt, dass wget
die richtigen vorkompilierten Übersetzungen über Zeiger in den Lesevorgang aufgenommen werden .mo binary
.
Zusätzliche Details und Quellen
Für das Gebietsschema-Archiv:
Speicherzuordnung: CentOS-Mailing-Listen-
Methoden I18N-Unterverpackung: Fedora-Dokumentation zu verschiedenen Gebietsschema-Archiv-Kompilierungen
Berücksichtigen Sie auch Manpages für locale(1), localedef(1)
und locale-gen(8)
.
Für .mo
Dateien:
Prozess der Erstellung von .mo
Dateien: Wikipedia auf Gettext
GNU MO Dateiformat: Erklärung und Binärformat
Berücksichtigen Sie auch Manpages für xgettext(1), msginit(1)
und msgfmt(1)
.
Schauen Sie sich auch die ENV-Variablen LC_MESSAGE
und an LOCPATH
.
Ich bin sicher, das hat nur die Oberfläche dieses riesigen Themas zerkratzt. Trotzdem hoffe ich, dass dies ausreicht, um Ihnen den Einstieg zu erleichtern.