locale — Internationalisierungsdienste¶
Quellcode: Lib/locale.py
Das Modul locale öffnet den Zugriff auf die POSIX-Locale-Datenbank und -Funktionalität. Der POSIX-Locale-Mechanismus ermöglicht es Programmierern, bestimmte kulturelle Aspekte einer Anwendung zu berücksichtigen, ohne dass der Programmierer alle Besonderheiten jedes Landes kennen muss, in dem die Software ausgeführt wird.
Das Modul locale wird auf dem Modul _locale aufgebaut, das wiederum eine ANSI C-Locale-Implementierung verwendet, falls verfügbar.
Das Modul locale definiert die folgende Ausnahme und Funktionen
- exception locale.Error¶
Ausnahme, die ausgelöst wird, wenn die an
setlocale()übergebene Locale nicht erkannt wird.
- locale.setlocale(category, locale=None)¶
Wenn locale angegeben und nicht
Noneist, ändertsetlocale()die Locale-Einstellung für die category. Die verfügbaren Kategorien sind in der folgenden Datenbeschreibung aufgeführt. locale kann ein String oder ein Paar aus Sprachcode und Kodierung sein. Ein leerer String gibt die Standardeinstellungen des Benutzers an. Wenn die Änderung der Locale fehlschlägt, wird die AusnahmeErrorausgelöst. Bei Erfolg wird die neue Locale-Einstellung zurückgegeben.Wenn locale ein Paar ist, wird es mithilfe der Locale-Aliasing-Engine in einen Locale-Namen umgewandelt. Der Sprachcode hat dasselbe Format wie ein Locale-Name, jedoch ohne Kodierung und @-Modifikator. Der Sprachcode und die Kodierung können
Nonesein.Wenn locale weggelassen wird oder
Noneist, wird die aktuelle Einstellung für category zurückgegeben.setlocale()ist auf den meisten Systemen nicht threadsicher. Anwendungen beginnen typischerweise mit einem Aufruf vonimport locale locale.setlocale(locale.LC_ALL, '')
Dies setzt die Locale für alle Kategorien auf die Standardeinstellung des Benutzers (typischerweise in der Umgebungsvariable
LANGangegeben). Wenn die Locale danach nicht geändert wird, sollte die Verwendung von Multithreading keine Probleme verursachen.
- locale.localeconv()¶
Gibt die Datenbank der lokalen Konventionen als Wörterbuch zurück. Dieses Wörterbuch hat die folgenden Strings als Schlüssel
Kategorie
Schlüssel
Bedeutung
'decimal_point'Dezimaltrennzeichen.
'grouping'Sequenz von Zahlen, die angibt, an welchen relativen Positionen das
'thousands_sep'erwartet wird. Wenn die Sequenz mitCHAR_MAXendet, wird keine weitere Gruppierung durchgeführt. Wenn die Sequenz mit einer0endet, wird die letzte Gruppengröße wiederholt verwendet.'thousands_sep'Zeichen, das zwischen den Gruppen verwendet wird.
'int_curr_symbol'Internationales Währungssymbol.
'currency_symbol'Lokales Währungssymbol.
'p_cs_precedes/n_cs_precedes'Ob das Währungssymbol dem Wert vorangeht (für positive bzw. negative Werte).
'p_sep_by_space/n_sep_by_space'Ob das Währungssymbol durch ein Leerzeichen vom Wert getrennt ist (für positive bzw. negative Werte).
'mon_decimal_point'Dezimaltrennzeichen, das für monetäre Werte verwendet wird.
'frac_digits'Anzahl der Nachkommastellen, die bei der lokalen Formatierung von monetären Werten verwendet werden.
'int_frac_digits'Anzahl der Nachkommastellen, die bei der internationalen Formatierung von monetären Werten verwendet werden.
'mon_thousands_sep'Gruppentrennzeichen, das für monetäre Werte verwendet wird.
'mon_grouping'Äquivalent zu
'grouping', wird für monetäre Werte verwendet.'positive_sign'Symbol, das zur Kennzeichnung eines positiven monetären Wertes verwendet wird.
'negative_sign'Symbol, das zur Kennzeichnung eines negativen monetären Wertes verwendet wird.
'p_sign_posn/n_sign_posn'Die Position des Vorzeichens (für positive bzw. negative Werte), siehe unten.
Alle numerischen Werte können auf
CHAR_MAXgesetzt werden, um anzuzeigen, dass in dieser Locale kein Wert angegeben ist.Die möglichen Werte für
'p_sign_posn'und'n_sign_posn'sind unten aufgeführt.Wert
Erläuterung
0Währung und Wert sind in Klammern eingeschlossen.
1Das Vorzeichen sollte dem Wert und dem Währungssymbol vorangehen.
2Das Vorzeichen sollte dem Wert und dem Währungssymbol folgen.
3Das Vorzeichen sollte unmittelbar dem Wert vorangehen.
4Das Vorzeichen sollte unmittelbar dem Wert folgen.
CHAR_MAXNichts ist in dieser Locale spezifiziert.
Die Funktion setzt vorübergehend die
LC_CTYPE-Locale auf dieLC_NUMERIC-Locale oder dieLC_MONETARY-Locale, wenn die Locales unterschiedlich sind und die numerischen oder monetären Strings nicht-ASCII sind. Diese temporäre Änderung beeinflusst andere Threads.Geändert in Version 3.7: Die Funktion setzt nun in einigen Fällen vorübergehend die
LC_CTYPE-Locale auf dieLC_NUMERIC-Locale.
- locale.nl_langinfo(option)¶
Gibt einige locale-spezifische Informationen als String zurück. Diese Funktion ist nicht auf allen Systemen verfügbar, und die Menge der möglichen Optionen kann auch plattformabhängig variieren. Die möglichen Argumentwerte sind Zahlen, für die symbolische Konstanten im Modul locale verfügbar sind.
Die Funktion
nl_langinfo()akzeptiert einen der folgenden Schlüssel. Die meisten Beschreibungen sind aus der entsprechenden Beschreibung in der GNU C-Bibliothek übernommen.- locale.CODESET¶
Ruft einen String mit dem Namen der Zeichenkodierung ab, die in der ausgewählten Locale verwendet wird.
- locale.D_T_FMT¶
Ruft einen String ab, der als Formatierungsstring für
time.strftime()verwendet werden kann, um Datum und Uhrzeit auf eine locale-spezifische Weise darzustellen.
- locale.D_FMT¶
Ruft einen String ab, der als Formatierungsstring für
time.strftime()verwendet werden kann, um ein Datum auf eine locale-spezifische Weise darzustellen.
- locale.T_FMT¶
Ruft einen String ab, der als Formatierungsstring für
time.strftime()verwendet werden kann, um eine Zeit auf eine locale-spezifische Weise darzustellen.
- locale.T_FMT_AMPM¶
Ruft einen Formatierungsstring für
time.strftime()ab, um die Zeit im AM/PM-Format darzustellen.
- locale.DAY_1¶
- locale.DAY_2¶
- locale.DAY_3¶
- locale.DAY_4¶
- locale.DAY_5¶
- locale.DAY_6¶
- locale.DAY_7¶
Ruft den Namen des n-ten Tages der Woche ab.
Hinweis
Dies folgt der US-Konvention, dass
DAY_1Sonntag ist, nicht der internationalen Konvention (ISO 8601), dass Montag der erste Tag der Woche ist.
- locale.ABDAY_1¶
- locale.ABDAY_2¶
- locale.ABDAY_3¶
- locale.ABDAY_4¶
- locale.ABDAY_5¶
- locale.ABDAY_6¶
- locale.ABDAY_7¶
Ruft den abgekürzten Namen des n-ten Tages der Woche ab.
- locale.MON_1¶
- locale.MON_2¶
- locale.MON_3¶
- locale.MON_4¶
- locale.MON_5¶
- locale.MON_6¶
- locale.MON_7¶
- locale.MON_8¶
- locale.MON_9¶
- locale.MON_10¶
- locale.MON_11¶
- locale.MON_12¶
Ruft den Namen des n-ten Monats ab.
- locale.ABMON_1¶
- locale.ABMON_2¶
- locale.ABMON_3¶
- locale.ABMON_4¶
- locale.ABMON_5¶
- locale.ABMON_6¶
- locale.ABMON_7¶
- locale.ABMON_8¶
- locale.ABMON_9¶
- locale.ABMON_10¶
- locale.ABMON_11¶
- locale.ABMON_12¶
Ruft den abgekürzten Namen des n-ten Monats ab.
- locale.RADIXCHAR¶
Ruft das Radixzeichen (Dezimalkomma, Dezimalpunkt usw.) ab.
- locale.THOUSEP¶
Ruft das Tausendertrennzeichen (Gruppen von drei Ziffern) ab.
- locale.YESEXPR¶
Ruft ein reguläres Ausdrucksmuster ab, das mit der Regex-Funktion verwendet werden kann, um eine positive Antwort auf eine Ja/Nein-Frage zu erkennen.
- locale.NOEXPR¶
Ruft ein reguläres Ausdrucksmuster ab, das mit der
regex(3)-Funktion verwendet werden kann, um eine negative Antwort auf eine Ja/Nein-Frage zu erkennen.
- locale.CRNCYSTR¶
Ruft das Währungssymbol ab, vorangestellt mit „-“, wenn das Symbol vor dem Wert erscheinen soll, „+“, wenn das Symbol nach dem Wert erscheinen soll, oder „.“, wenn das Symbol das Radixzeichen ersetzen soll.
- locale.ERA¶
Ruft einen String ab, der beschreibt, wie Jahre pro Ära in einer Locale gezählt und dargestellt werden.
Die meisten Locales definieren diesen Wert nicht. Ein Beispiel für eine Locale, die diesen Wert definiert, ist die japanische. In Japan umfasst die traditionelle Darstellung von Daten den Namen der Ära, die der Herrschaft des damaligen Kaisers entspricht.
Normalerweise sollte dieser Wert nicht direkt verwendet werden müssen. Die Angabe des
E-Modifikators in ihren Formatierungsstrings bewirkt, dass die Funktiontime.strftime()diese Informationen verwendet. Das Format des zurückgegebenen Strings ist in *The Open Group Base Specifications Issue 8*, Abschnitt 7.3.5.2 LC_TIME C-Language Access, spezifiziert.
- locale.ERA_D_T_FMT¶
Ruft einen Formatierungsstring für
time.strftime()ab, um Datum und Uhrzeit auf eine locale-spezifische, auf Ären basierende Weise darzustellen.
- locale.ERA_D_FMT¶
Ruft einen Formatierungsstring für
time.strftime()ab, um ein Datum auf eine locale-spezifische, auf Ären basierende Weise darzustellen.
- locale.ERA_T_FMT¶
Ruft einen Formatierungsstring für
time.strftime()ab, um eine Zeit auf eine locale-spezifische, auf Ären basierende Weise darzustellen.
- locale.ALT_DIGITS¶
Ruft einen String ab, der aus bis zu 100 durch Semikolon getrennten Symbolen besteht, die verwendet werden, um die Werte 0 bis 99 auf eine locale-spezifische Weise darzustellen. In den meisten Locales ist dies ein leerer String.
Die Funktion setzt vorübergehend die
LC_CTYPE-Locale auf die Locale der Kategorie, die den angeforderten Wert bestimmt (LC_TIME,LC_NUMERIC,LC_MONETARYoderLC_MESSAGES), wenn die Locales unterschiedlich sind und der resultierende String nicht-ASCII ist. Diese temporäre Änderung beeinflusst andere Threads.Geändert in Version 3.14: Die Funktion setzt nun in einigen Fällen vorübergehend die
LC_CTYPE-Locale.
- locale.getdefaultlocale([envvars])¶
Versucht, die Standard-Locale-Einstellungen zu ermitteln und gibt sie als Tupel im Format
(Sprachcode, Kodierung)zurück.Gemäß POSIX läuft ein Programm, das
setlocale(LC_ALL, '')nicht aufgerufen hat, mit der portablen'C'-Locale. Der Aufruf vonsetlocale(LC_ALL, '')lässt es die Standard-Locale verwenden, wie sie durch die VariableLANGdefiniert ist. Da wir die aktuelle Locale-Einstellung nicht beeinträchtigen wollen, emulieren wir das Verhalten auf die oben beschriebene Weise.Um die Kompatibilität mit anderen Plattformen zu gewährleisten, wird nicht nur die Variable
LANGgetestet, sondern eine Liste von Variablen, die als Parameter `envvars` übergeben werden. Die erste gefundene, die definiert ist, wird verwendet. envvars ist standardmäßig der Suchpfad von GNU gettext; er muss immer den Variablennamen'LANG'enthalten. Der Suchpfad von GNU gettext enthält'LC_ALL','LC_CTYPE','LANG'und'LANGUAGE', in dieser Reihenfolge.Der Sprachcode hat dasselbe Format wie ein Locale-Name, jedoch ohne Kodierung und @-Modifikator. Der Sprachcode und die Kodierung können
Nonesein, wenn ihre Werte nicht ermittelt werden können. Die „C“-Locale wird als(None, None)dargestellt.Seit Version 3.11 veraltet, wird in Version 3.15 entfernt.
- locale.getlocale(category=LC_CTYPE)¶
Gibt die aktuelle Einstellung für die angegebene Locale-Kategorie als Tupel zurück, das den Sprachcode und die Kodierung enthält. category kann einer der
LC_*-Werte sein, außerLC_ALL. Standardmäßig ist esLC_CTYPE.Der Sprachcode hat dasselbe Format wie ein Locale-Name, jedoch ohne Kodierung und @-Modifikator. Der Sprachcode und die Kodierung können
Nonesein, wenn ihre Werte nicht ermittelt werden können. Die „C“-Locale wird als(None, None)dargestellt.
- locale.getpreferredencoding(do_setlocale=True)¶
Gibt die Locale-Kodierung zurück, die für Textdaten gemäß den Benutzereinstellungen verwendet wird. Benutzereinstellungen werden auf verschiedenen Systemen unterschiedlich ausgedrückt und sind auf einigen Systemen möglicherweise nicht programmatisch verfügbar, sodass diese Funktion nur eine Schätzung liefert.
Auf einigen Systemen ist es notwendig,
setlocale()aufzurufen, um die Benutzereinstellungen zu erhalten, daher ist diese Funktion nicht threadsicher. Wenn der Aufruf von setlocale nicht notwendig oder erwünscht ist, sollte do_setlocale aufFalsegesetzt werden.Unter Android oder wenn der Python UTF-8-Modus aktiviert ist, wird immer
'utf-8'zurückgegeben, die Locale-Kodierung und das Argument do_setlocale werden ignoriert.Die Python-Vorinitialisierung konfiguriert die LC_CTYPE-Locale. Siehe auch die Dateisystemkodierung und Fehlerhandler.
Geändert in Version 3.7: Die Funktion gibt nun unter Android immer
"utf-8"zurück, oder wenn der Python UTF-8-Modus aktiviert ist.
- locale.getencoding()¶
Ruft die aktuelle Locale-Kodierung ab.
Unter Android und VxWorks wird
"utf-8"zurückgegeben.Unter Unix wird die Kodierung der aktuellen
LC_CTYPE-Locale zurückgegeben. Gibt"utf-8"zurück, wennnl_langinfo(CODESET)einen leeren String zurückgibt: zum Beispiel, wenn die aktuelle LC_CTYPE-Locale nicht unterstützt wird.Unter Windows wird die ANSI-Codepage zurückgegeben.
Die Python-Vorinitialisierung konfiguriert die LC_CTYPE-Locale. Siehe auch die Dateisystemkodierung und Fehlerhandler.
Diese Funktion ist ähnlich wie
getpreferredencoding(False), mit dem Unterschied, dass diese Funktion den Python UTF-8-Modus ignoriert.Hinzugefügt in Version 3.11.
- locale.normalize(localename)¶
Gibt einen normalisierten Locale-Code für den angegebenen Locale-Namen zurück. Der zurückgegebene Locale-Code ist für die Verwendung mit
setlocale()formatiert. Wenn die Normalisierung fehlschlägt, wird der ursprüngliche Name unverändert zurückgegeben.Wenn die angegebene Kodierung nicht bekannt ist, greift die Funktion wie
setlocale()auf die Standardkodierung für den Locale-Code zurück.
- locale.strcoll(string1, string2)¶
Vergleicht zwei Zeichenketten gemäß der aktuellen Einstellung von
LC_COLLATE. Wie jede andere Vergleichsfunktion gibt sie einen negativen, einen positiven Wert oder0zurück, je nachdem, ob string1 vor oder nach string2 sortiert wird oder gleich ist.
- locale.strxfrm(string)¶
Transformiert eine Zeichenkette in eine, die für sprachabhängige Vergleiche verwendet werden kann. Zum Beispiel ist
strxfrm(s1) < strxfrm(s2)äquivalent zustrcoll(s1, s2) < 0. Diese Funktion kann verwendet werden, wenn dieselbe Zeichenkette wiederholt verglichen wird, z. B. beim Sortieren einer Sequenz von Zeichenketten.
- locale.format_string(format, val, grouping=False, monetary=False)¶
Formatiert eine Zahl val gemäß der aktuellen Einstellung von
LC_NUMERIC. Das Format folgt den Konventionen des%-Operators. Bei Gleitkommawerten wird der Dezimalpunkt bei Bedarf geändert. Wenn groupingTrueist, wird auch die Gruppierung berücksichtigt.Wenn monetary wahr ist, verwendet die Konvertierung Tausendertrennzeichen und Gruppierungszeichen für Währungen.
Verarbeitet Formatierungsbezeichner wie in
format % val, berücksichtigt aber die aktuellen Locale-Einstellungen.Changed in version 3.7: Der Schlüsselwortparameter monetary wurde hinzugefügt.
- locale.currency(val, symbol=True, grouping=False, international=False)¶
Formatiert eine Zahl val gemäß den aktuellen Einstellungen von
LC_MONETARY.Die zurückgegebene Zeichenkette enthält das Währungssymbol, wenn symbol wahr ist, was der Standard ist. Wenn grouping
Trueist (was nicht der Standard ist), wird die Gruppierung mit dem Wert durchgeführt. Wenn internationalTrueist (was nicht der Standard ist), wird das internationale Währungssymbol verwendet.Hinweis
Diese Funktion funktioniert nicht mit der 'C'-Locale. Sie müssen zuerst eine Locale mit
setlocale()einstellen.
- locale.str(float)¶
Formatiert eine Gleitkommazahl mit demselben Format wie die eingebaute Funktion
str(float), berücksichtigt jedoch den Dezimalpunkt.
- locale.delocalize(string)¶
Konvertiert eine Zeichenkette in eine normalisierte Zahlenzeichenkette, die den Einstellungen von
LC_NUMERICfolgt.Hinzugefügt in Version 3.5.
- locale.localize(string, grouping=False, monetary=False)¶
Konvertiert eine normalisierte Zahlenzeichenkette in eine formatierte Zeichenkette, die den Einstellungen von
LC_NUMERICfolgt.Hinzugefügt in Version 3.10.
- locale.atof(string, func=float)¶
Konvertiert eine Zeichenkette in eine Zahl, die den Einstellungen von
LC_NUMERICfolgt, indem func auf das Ergebnis des Aufrufs vondelocalize()auf string aufgerufen wird.
- locale.atoi(string)¶
Konvertiert eine Zeichenkette in eine Ganzzahl gemäß den Konventionen von
LC_NUMERIC.
- locale.LC_CTYPE¶
Locale-Kategorie für Zeichenfunktionstypen. Am wichtigsten ist, dass diese Kategorie die Textkodierung definiert, d. h. wie Bytes als Unicode-Codepunkte interpretiert werden. Siehe PEP 538 und PEP 540, wie diese Variable möglicherweise automatisch auf
C.UTF-8gesetzt wird, um Probleme zu vermeiden, die durch ungültige Einstellungen in Containern oder inkompatible Einstellungen, die über Remote-SSH-Verbindungen übermittelt werden, entstehen.Python verwendet intern keine Locale-abhängigen Zeichenumwandlungsfunktionen aus
ctype.h. Stattdessen bietet ein internespyctype.hLocale-unabhängige Äquivalente wiePy_TOLOWER.
- locale.LC_COLLATE¶
Locale-Kategorie für das Sortieren von Zeichenketten. Die Funktionen
strcoll()undstrxfrm()des Modulslocalesind betroffen.
- locale.LC_TIME¶
Locale-Kategorie für die Formatierung von Zeit. Die Funktion
time.strftime()folgt diesen Konventionen.
- locale.LC_MONETARY¶
Locale-Kategorie für die Formatierung von monetären Werten. Die verfügbaren Optionen sind über die Funktion
localeconv()verfügbar.
- locale.LC_MESSAGES¶
Locale-Kategorie für die Nachrichtenanzeige. Python unterstützt derzeit keine anwendungsspezifischen, Locale-bewussten Nachrichten. Nachrichten, die vom Betriebssystem angezeigt werden, wie die von
os.strerror()zurückgegebenen, können von dieser Kategorie betroffen sein.Dieser Wert ist auf Betriebssystemen, die nicht dem POSIX-Standard entsprechen, insbesondere auf Windows, möglicherweise nicht verfügbar.
- locale.LC_NUMERIC¶
Locale-Kategorie für die Formatierung von Zahlen. Die Funktionen
format_string(),atoi(),atof()undstr()des Modulslocalesind von dieser Kategorie betroffen. Alle anderen numerischen Formatierungsoperationen sind nicht betroffen.
- locale.LC_ALL¶
Kombination aller Locale-Einstellungen. Wenn dieses Flag beim Ändern der Locale verwendet wird, wird versucht, die Locale für alle Kategorien zu setzen. Wenn dies für eine Kategorie fehlschlägt, wird keine Kategorie geändert. Wenn die Locale mit diesem Flag abgerufen wird, wird eine Zeichenkette zurückgegeben, die die Einstellung für alle Kategorien angibt. Diese Zeichenkette kann später zum Wiederherstellen der Einstellungen verwendet werden.
- locale.CHAR_MAX¶
Dies ist eine symbolische Konstante, die für verschiedene Werte verwendet wird, die von
localeconv()zurückgegeben werden.
Beispiel
>>> import locale
>>> loc = locale.getlocale() # get current locale
# use German locale; name might vary with platform
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
>>> locale.strcoll('f\xe4n', 'foo') # compare a string containing an umlaut
>>> locale.setlocale(locale.LC_ALL, '') # use user's preferred locale
>>> locale.setlocale(locale.LC_ALL, 'C') # use default (C) locale
>>> locale.setlocale(locale.LC_ALL, loc) # restore saved locale
Hintergrund, Details, Hinweise, Tipps und Vorbehalte¶
Der C-Standard definiert die Locale als eine programminterne Eigenschaft, deren Änderung relativ teuer sein kann. Darüber hinaus sind einige Implementierungen fehlerhaft, sodass häufige Locale-Änderungen zu Core-Dumps führen können. Dies macht die Locale etwas schwierig richtig zu verwenden.
Ursprünglich ist die Locale beim Start eines Programms die C-Locale, unabhängig von der bevorzugten Locale des Benutzers. Es gibt eine Ausnahme: Die Kategorie LC_CTYPE wird beim Start geändert, um die aktuelle Locale-Kodierung auf die bevorzugte Locale-Kodierung des Benutzers einzustellen. Das Programm muss explizit angeben, dass es die bevorzugten Locale-Einstellungen des Benutzers für andere Kategorien wünscht, indem es setlocale(LC_ALL, '') aufruft.
Es ist im Allgemeinen keine gute Idee, setlocale() in einer Bibliotheksroutine aufzurufen, da dies als Nebeneffekt das gesamte Programm beeinflusst. Das Speichern und Wiederherstellen ist fast genauso schlimm: Es ist teuer und beeinträchtigt andere Threads, die zufällig laufen, bevor die Einstellungen wiederhergestellt wurden.
Wenn Sie beim Programmieren eines Moduls für den allgemeinen Gebrauch eine Locale-unabhängige Version einer Operation benötigen, die von der Locale betroffen ist (wie z. B. bestimmte Formate, die mit time.strftime() verwendet werden), müssen Sie einen Weg finden, dies ohne die Standardbibliotheksroutine zu tun. Noch besser ist es, sich davon zu überzeugen, dass die Verwendung von Locale-Einstellungen in Ordnung ist. Nur als letzte Option sollten Sie dokumentieren, dass Ihr Modul nicht mit Nicht-C-Locale-Einstellungen kompatibel ist.
Der einzige Weg, numerische Operationen gemäß der Locale durchzuführen, ist die Verwendung der speziellen Funktionen, die von diesem Modul definiert werden: atof(), atoi(), format_string(), str().
Es gibt keine Möglichkeit, Groß-/Kleinschreibungsumwandlungen und Zeichenklassifizierungen entsprechend der Locale durchzuführen. Für (Unicode-)Textzeichenketten werden diese nur anhand des Zeichenwerts durchgeführt, während für Bytezeichenketten die Umwandlungen und Klassifizierungen anhand des ASCII-Werts des Bytes durchgeführt werden, und Bytes, deren höchstes Bit gesetzt ist (d. h. Nicht-ASCII-Bytes), werden niemals umgewandelt oder als Teil einer Zeichenklasse wie Buchstabe oder Leerzeichen betrachtet.
Locale-Namen¶
Das Format des Locale-Namens ist plattformabhängig, und der Satz unterstützter Locales kann von der Systemkonfiguration abhängen.
Auf POSIX-Plattformen hat es normalerweise das Format [1]
language ["_" territory] ["." charset] ["@" modifier]
wobei language ein zwei- oder dreibuchstabiger Sprachcode aus ISO 639 ist, territory ein zweibuchstabiger Länder- oder Regionscode aus ISO 3166, charset eine Locale-Kodierung und modifier ein Skriptname, ein Sprach-Subtag, eine Sortierordnungsbezeichnung oder ein anderer Locale-Modifikator ist (z. B. „latin“, „valencia“, „stroke“ und „euro“).
Unter Windows werden mehrere Formate unterstützt. [2] [3] Eine Teilmenge von IETF BCP 47 Tags
language ["-" script] ["-" territory] ["." charset] language ["-" script] "-" territory "-" modifier
wobei language und territory die gleiche Bedeutung wie unter POSIX haben, script ein vierbuchstabiger Skriptcode aus ISO 15924 ist und modifier ein Sprach-Subtag, eine Sortierordnungsbezeichnung oder ein benutzerdefinierter Modifikator ist (z. B. „valencia“, „stroke“ oder „x-python“). Sowohl Bindestrich ('-') als auch Unterstrich ('_') Trennzeichen werden unterstützt. Nur UTF-8-Kodierung ist für BCP 47 Tags zulässig.
Windows unterstützt auch Locale-Namen im Format
language ["_" territory] ["." charset]
wobei language und territory vollständige Namen sind, wie z. B. „English“ und „United States“, und charset entweder eine Codepagennummer (z. B. „1252“) oder UTF-8 ist. Nur das Unterstrich-Trennzeichen wird in diesem Format unterstützt.
Die „C“-Locale wird auf allen Plattformen unterstützt.
Für Erweiterungsautoren und Programme, die Python einbetten¶
Erweiterungsmodule sollten niemals setlocale() aufrufen, außer um herauszufinden, welche die aktuelle Locale ist. Da der Rückgabewert jedoch nur portabel zum Wiederherstellen verwendet werden kann, ist dies nicht sehr nützlich (außer vielleicht, um festzustellen, ob die Locale C ist oder nicht).
Wenn Python-Code das Modul locale verwendet, um die Locale zu ändern, wirkt sich dies auch auf die einbettende Anwendung aus. Wenn die einbettende Anwendung dies nicht möchte, sollte sie das Erweiterungsmodul _locale (das die gesamte Arbeit erledigt) aus der Tabelle der integrierten Module in der Datei config.c entfernen und sicherstellen, dass das Modul _locale nicht als Shared Library zugänglich ist.
Zugriff auf Nachrichten-Kataloge¶
- locale.gettext(msg)¶
- locale.dgettext(domain, msg)¶
- locale.dcgettext(domain, msg, category)¶
- locale.textdomain(domain)¶
- locale.bindtextdomain(domain, dir)¶
- locale.bind_textdomain_codeset(domain, codeset)¶
Das Modul locale stellt die gettext-Schnittstelle der C-Bibliothek auf Systemen zur Verfügung, die diese Schnittstelle bereitstellen. Sie besteht aus den Funktionen gettext(), dgettext(), dcgettext(), textdomain(), bindtextdomain() und bind_textdomain_codeset(). Diese sind ähnlich den gleichen Funktionen im Modul gettext, verwenden jedoch das Binärformat der C-Bibliothek für Nachrichten-Kataloge und die Suchalgorithmen der C-Bibliothek zum Auffinden von Nachrichten-Katalogen.
Python-Anwendungen sollten normalerweise keinen Bedarf haben, diese Funktionen aufzurufen, und stattdessen gettext verwenden. Eine bekannte Ausnahme von dieser Regel sind Anwendungen, die mit zusätzlichen C-Bibliotheken verknüpft sind, welche intern die C-Funktionen gettext oder dcgettext aufrufen. Für diese Anwendungen kann es notwendig sein, die Textdomäne zu binden, damit die Bibliotheken ihre Nachrichten-Kataloge ordnungsgemäß finden können.