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 None ist, ändert setlocale() 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 Ausnahme Error ausgelö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 None sein.

Wenn locale weggelassen wird oder None ist, wird die aktuelle Einstellung für category zurückgegeben.

setlocale() ist auf den meisten Systemen nicht threadsicher. Anwendungen beginnen typischerweise mit einem Aufruf von

import locale
locale.setlocale(locale.LC_ALL, '')

Dies setzt die Locale für alle Kategorien auf die Standardeinstellung des Benutzers (typischerweise in der Umgebungsvariable LANG angegeben). 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

LC_NUMERIC

'decimal_point'

Dezimaltrennzeichen.

'grouping'

Sequenz von Zahlen, die angibt, an welchen relativen Positionen das 'thousands_sep' erwartet wird. Wenn die Sequenz mit CHAR_MAX endet, wird keine weitere Gruppierung durchgeführt. Wenn die Sequenz mit einer 0 endet, wird die letzte Gruppengröße wiederholt verwendet.

'thousands_sep'

Zeichen, das zwischen den Gruppen verwendet wird.

LC_MONETARY

'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_MAX gesetzt 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

0

Währung und Wert sind in Klammern eingeschlossen.

1

Das Vorzeichen sollte dem Wert und dem Währungssymbol vorangehen.

2

Das Vorzeichen sollte dem Wert und dem Währungssymbol folgen.

3

Das Vorzeichen sollte unmittelbar dem Wert vorangehen.

4

Das Vorzeichen sollte unmittelbar dem Wert folgen.

CHAR_MAX

Nichts ist in dieser Locale spezifiziert.

Die Funktion setzt vorübergehend die LC_CTYPE-Locale auf die LC_NUMERIC-Locale oder die LC_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 die LC_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_1 Sonntag 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.

Hinweis

Die regulären Ausdrucksmuster für YESEXPR und NOEXPR verwenden eine Syntax, die für die regex-Funktion der C-Bibliothek geeignet ist, welche sich von der Syntax im Modul re unterscheiden kann.

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 Funktion time.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_MONETARY oder LC_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 von setlocale(LC_ALL, '') lässt es die Standard-Locale verwenden, wie sie durch die Variable LANG definiert 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 LANG getestet, 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 None sein, 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ßer LC_ALL. Standardmäßig ist es LC_CTYPE.

Der Sprachcode hat dasselbe Format wie ein Locale-Name, jedoch ohne Kodierung und @-Modifikator. Der Sprachcode und die Kodierung können None sein, 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 auf False gesetzt 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, wenn nl_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 oder 0 zurü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 zu strcoll(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 grouping True ist, 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 True ist (was nicht der Standard ist), wird die Gruppierung mit dem Wert durchgeführt. Wenn international True ist (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_NUMERIC folgt.

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_NUMERIC folgt.

Hinzugefügt in Version 3.10.

locale.atof(string, func=float)

Konvertiert eine Zeichenkette in eine Zahl, die den Einstellungen von LC_NUMERIC folgt, indem func auf das Ergebnis des Aufrufs von delocalize() 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-8 gesetzt 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 internes pyctype.h Locale-unabhängige Äquivalente wie Py_TOLOWER.

locale.LC_COLLATE

Locale-Kategorie für das Sortieren von Zeichenketten. Die Funktionen strcoll() und strxfrm() des Moduls locale sind 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() und str() des Moduls locale sind 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.