locale
— Internationaliseringstjänster¶
Källkod: Lib/locale.py
Modulen locale
ger tillgång till POSIX locale-databasen och dess funktioner. POSIX locale-mekanismen gör det möjligt för programmerare att hantera vissa kulturella frågor i en applikation, utan att programmeraren behöver känna till alla detaljer i varje land där programvaran körs.
Modulen locale
implementeras ovanpå modulen _locale
, som i sin tur använder en ANSI C-localeimplementering om sådan finns tillgänglig.
Modulen locale
definierar följande undantag och funktioner:
- exception locale.Error¶
Exception uppstår när den locale som skickas till
setlocale()
inte känns igen.
- locale.setlocale(category, locale=None)¶
Om locale anges och inte
None
, ändrarsetlocale()
locale-inställningen för category. De tillgängliga kategorierna listas i databeskrivningen nedan. locale kan vara en sträng eller en iterabel av två strängar (språkkod och kodning). Om det är en iterabel konverteras den till ett lokalt namn med hjälp av locale aliasing engine. En tom sträng anger användarens standardinställningar. Om modifieringen av locale misslyckas, uppstår undantagetError
. Om det lyckas returneras den nya lokalinställningen.Om locale utelämnas eller
None
returneras den aktuella inställningen för category.setlocale()
är inte trådsäkert på de flesta system. Applikationer börjar vanligtvis med ett anrop avimport locale locale.setlocale(locale.LC_ALL, '')
Detta innebär att alla kategoriers språkinställning ändras till användarens standardinställning (som vanligtvis anges i miljövariabeln
LANG
). Om lokalinställningen inte ändras därefter bör det inte orsaka problem att använda multithreading.
- locale.localeconv()¶
Returnerar databasen för de lokala konventionerna som en ordbok. Denna ordbok har följande strängar som nycklar:
Kategori
Nyckel
Betydelse
'decimal_point'
Tecken för decimalpunkt.
'grouping'
Sekvens av siffror som anger vilka relativa positioner som
'thousands_sep'
förväntas. Om sekvensen avslutas medCHAR_MAX
, utförs ingen ytterligare gruppering. Om sekvensen avslutas med0
används den senaste gruppstorleken upprepade gånger.'thousands_sep'
Karaktär används mellan grupperna.
'int_curr_symbol'
Internationell valutasymbol.
'currency_symbol'
Symbol för lokal valuta.
'p_cs_precedes/n_cs_precedes'
Om valutasymbolen föregår värdet (för positiva resp. negativa värden).
'p_sep_by_space/n_sep_by_space'
Om valutasymbolen är åtskild från värdet med ett mellanslag (för positiva resp. negativa värden).
'mon_decimal_point'
Decimalpunkt som används för monetära värden.
'frac_digits'
Antal fraktionerade siffror som används vid lokal formatering av monetära värden.
'int_frac_digits'
Antal bråksiffror som används vid internationell formatering av monetära värden.
'mon_thousands_sep'
Gruppseparator som används för monetära värden.
'mon_grouping'
Motsvarar
'grouping'
, används för monetära värden.'positive_sign'
Symbol som används för att markera ett positivt penningvärde.
'negative_sign'
Symbol som används för att markera ett negativt penningvärde.
'p_sign_posn/n_sign_posn'
Tecknets position (för positiva resp. negativa värden), se nedan.
Alla numeriska värden kan sättas till
CHAR_MAX
för att ange att det inte finns något värde angivet i denna locale.De möjliga värdena för
'p_sign_posn'
och'n_sign_posn'
anges nedan.Värde
Förklaring
0
Valuta och värde omges av parenteser.
1
Tecknet ska föregå värde- och valutasymbolen.
2
Tecknet ska följa värde- och valutasymbolen.
3
Tecknet ska omedelbart föregå värdet.
4
Tecknet ska följa omedelbart efter värdet.
CHAR_MAX
Ingenting anges i denna locale.
Funktionen ställer temporärt in
LC_CTYPE
locale tillLC_NUMERIC
locale ellerLC_MONETARY
locale om locale är olika och numeriska eller monetära strängar är icke-ASCII. Denna tillfälliga ändring påverkar andra trådar.Ändrad i version 3.7: Funktionen ställer nu tillfälligt in
LC_CTYPE
locale tillLC_NUMERIC
locale i vissa fall.
- locale.nl_langinfo(option)¶
Returnerar viss lokalspecifik information som en sträng. Denna funktion är inte tillgänglig på alla system, och uppsättningen möjliga alternativ kan också variera mellan olika plattformar. De möjliga argumentvärdena är siffror, för vilka symboliska konstanter finns tillgängliga i locale-modulen.
Funktionen
nl_langinfo()
accepterar en av följande nycklar. De flesta beskrivningar är hämtade från motsvarande beskrivning i GNU C-biblioteket.- locale.CODESET¶
Hämta en sträng med namnet på den teckenkodning som används i den valda lokalen.
- locale.D_T_FMT¶
Hämta en sträng som kan användas som formatsträng för
time.strftime()
för att representera datum och tid på ett lokalspecifikt sätt.
- locale.D_FMT¶
Hämta en sträng som kan användas som formatsträng för
time.strftime()
för att representera ett datum på ett lokalspecifikt sätt.
- locale.T_FMT¶
Hämta en sträng som kan användas som formatsträng för
time.strftime()
för att representera en tid på ett lokalspecifikt sätt.
- locale.T_FMT_AMPM¶
Hämta en formatsträng för
time.strftime()
för att representera tid i am/pm-format.
- locale.DAY_1¶
- locale.DAY_2¶
- locale.DAY_3¶
- locale.DAY_4¶
- locale.DAY_5¶
- locale.DAY_6¶
- locale.DAY_7¶
Hämta namnet på den n:te veckodagen.
Anteckning
Detta följer den amerikanska konventionen att
DAY_1
är söndag, inte den internationella konventionen (ISO 8601) att måndag är den första dagen i veckan.
- locale.ABDAY_1¶
- locale.ABDAY_2¶
- locale.ABDAY_3¶
- locale.ABDAY_4¶
- locale.ABDAY_5¶
- locale.ABDAY_6¶
- locale.ABDAY_7¶
Hämta det förkortade namnet på den n:te veckodagen.
- 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¶
Hämta namnet på den n:te månaden.
- 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¶
Hämta det förkortade namnet på den n:te månaden.
- locale.RADIXCHAR¶
Hämta radixtecknet (decimalpunkt, decimalkommatecken etc.).
- locale.THOUSEP¶
Hämta separatortecknet för tusentals (grupper om tre siffror).
- locale.YESEXPR¶
Hämta ett reguljärt uttryck som kan användas med regex-funktionen för att känna igen ett positivt svar på en ja/nej-fråga.
- locale.NOEXPR¶
Hämta ett reguljärt uttryck som kan användas med funktionen
regex(3)
för att känna igen ett negativt svar på en ja/nej-fråga.
- locale.CRNCYSTR¶
Hämta valutasymbolen, föregången av ”-” om symbolen ska visas före värdet, ”+” om symbolen ska visas efter värdet, eller ”.” om symbolen ska ersätta radixtecknet.
- locale.ERA¶
Hämta en sträng som beskriver hur år räknas och visas för varje era i en lokal.
De flesta lokala språk definierar inte detta värde. Ett exempel på en lokal som definierar detta värde är den japanska. I Japan inkluderar den traditionella representationen av datum namnet på den era som motsvarar den dåvarande kejsarens regeringstid.
Normalt bör det inte vara nödvändigt att använda detta värde direkt. Genom att ange modifieraren
E
i formatsträngarna får funktionentime.strftime()
att använda denna information. Formatet på den returnerade strängen specificeras i The Open Group Base Specifications Issue 8, paragraf 7.3.5.2 LC_TIME C-Language Access.
- locale.ERA_D_T_FMT¶
Hämta en formatsträng för
time.strftime()
för att representera datum och tid på ett lokalspecifikt tidsbaserat sätt.
- locale.ERA_D_FMT¶
Hämta en formatsträng för
time.strftime()
för att representera ett datum på ett lokalspecifikt tidsbaserat sätt.
- locale.ERA_T_FMT¶
Hämta en formatsträng för
time.strftime()
för att representera en tid på ett lokalspecifikt tidsbaserat sätt.
- locale.ALT_DIGITS¶
Hämta en sträng som består av upp till 100 semikolonseparerade symboler som används för att representera värdena 0 till 99 på ett lokalspecifikt sätt. I de flesta lokala språk är detta en tom sträng.
Funktionen ställer tillfälligt in
LC_CTYPE
locale till locale för den kategori som bestämmer det begärda värdet (LC_TIME
,LC_NUMERIC
,LC_MONETARY
ellerLC_MESSAGES
) om locales är olika och den resulterande strängen är icke-ASCII. Denna tillfälliga ändring påverkar andra trådar.Ändrad i version 3.14: Funktionen ställer nu temporärt in
LC_CTYPE
locale i vissa fall.
- locale.getdefaultlocale([envvars])¶
Försöker fastställa standardinställningarna för locale och returnerar dem som en tupel av formen
(språkkod, kodning)
.Enligt POSIX körs ett program som inte har anropat
setlocale(LC_ALL, '')
med den portabla'C'
locale. Genom att anropasetlocale(LC_ALL, '')
kan programmet använda den förvalda locale som definieras av variabelnLANG
. Eftersom vi inte vill störa den aktuella locale-inställningen emulerar vi alltså beteendet på det sätt som beskrivs ovan.För att upprätthålla kompatibilitet med andra plattformar testas inte bara variabeln
LANG
, utan en lista med variabler som anges som envvars-parameter. Den första som definieras kommer att användas. envvars är standard för den sökväg som används i GNU gettext; den måste alltid innehålla variabelnamnet'LANG
. GNU gettexts sökväg innehåller'LC_ALL'
,'LC_CTYPE'
,'LANG'
och'LANGUAGE'
, i den ordningen.Med undantag för koden
'C'
motsvarar språkkoden RFC 1766. language code och encoding kan varaNone
om deras värden inte kan bestämmas.Deprecated since version 3.11, will be removed in version 3.15.
- locale.getlocale(category=LC_CTYPE)¶
Returnerar den aktuella inställningen för den angivna locale-kategorin som en sekvens innehållande språkkod, kodning. category kan vara ett av värdena i
LC_*
förutomLC_ALL
. Standardvärdet ärLC_CTYPE
.Med undantag för koden
'C'
motsvarar språkkoden RFC 1766. language code och encoding kan varaNone
om deras värden inte kan bestämmas.
- locale.getpreferredencoding(do_setlocale=True)¶
Returnerar den locale encoding som används för textdata, enligt användarens preferenser. Användarens preferenser uttrycks olika på olika system och kanske inte är tillgängliga programmatiskt på vissa system, så den här funktionen returnerar bara en gissning.
På vissa system är det nödvändigt att anropa
setlocale()
för att få fram användarinställningarna, så denna funktion är inte trådsäker. Om det inte är nödvändigt eller önskvärt att anropa setlocale, bör do_setlocale sättas tillFalse
.På Android eller om Python UTF-8 Mode är aktiverat, returneras alltid
'utf-8'
, locale encoding och do_setlocale-argumentet ignoreras.Python preinitialization konfigurerar LC_CTYPE-domänen. Se även filesystem encoding and error handler.
Ändrad i version 3.7: Funktionen returnerar nu alltid
"utf-8"
på Android eller om Python UTF-8 Mode är aktiverat.
- locale.getencoding()¶
Hämta aktuell locale encoding:
På Android och VxWorks returneras
"utf-8"
.På Unix returneras kodningen för aktuell
LC_CTYPE
locale. Returnera"utf-8"
omnl_langinfo(CODESET)
returnerar en tom sträng: till exempel om den aktuella LC_CTYPE-lokalen inte stöds.I Windows returneras ANSI-kodsidan.
Python preinitialization konfigurerar LC_CTYPE-domänen. Se även filesystem encoding and error handler.
Den här funktionen liknar
getpreferredencoding(False)
förutom att den här funktionen ignorerar Python UTF-8 Mode.Tillagd i version 3.11.
- locale.normalize(localename)¶
Returnerar en normaliserad lokalkod för det angivna lokalnamnet. Den returnerade lokalkoden är formaterad för användning med
setlocale()
. Om normaliseringen misslyckas returneras det ursprungliga namnet oförändrat.Om den angivna kodningen inte är känd använder funktionen standardkodningen för den lokala koden, precis som
setlocale()
.
- locale.strcoll(string1, string2)¶
Jämför två strängar enligt den aktuella inställningen för
LC_COLLATE
. Som alla andra jämförelsefunktioner returneras ett negativt eller positivt värde, eller0
, beroende på om sträng1 kollationerar före eller efter sträng2 eller är lika med den.
- locale.strxfrm(string)¶
Omvandlar en sträng till en sträng som kan användas i lokalanpassade jämförelser. Till exempel är
strxfrm(s1) < strxfrm(s2)
likvärdigt medstrcoll(s1, s2) < 0
. Den här funktionen kan användas när samma sträng jämförs upprepade gånger, t.ex. när en sekvens av strängar kollationeras.
- locale.format_string(format, val, grouping=False, monetary=False)¶
Formaterar ett tal val enligt den aktuella inställningen för
LC_NUMERIC
. Formatet följer konventionerna för operatorn%
. För värden med flyttal ändras decimaltecknet om så är lämpligt. Om grouping ärTrue
, tas även hänsyn till grupperingen.Om monetary är true används tusentalsavgränsare och grupperingssträngar i monetära termer vid konverteringen.
Behandlar formateringsangivelser som i
format % val
, men tar hänsyn till de aktuella lokalinställningarna.Ändrad i version 3.7: Nyckelordsparametern monetary har lagts till.
- locale.currency(val, symbol=True, grouping=False, international=False)¶
Formaterar ett tal val enligt de aktuella inställningarna för
LC_MONETARY
.Den returnerade strängen innehåller valutasymbolen om symbol är true, vilket är standard. Om grouping är
True
(vilket inte är standard), görs gruppering med värdet. Om international ärTrue
(vilket inte är standard) används den internationella valutasymbolen.Anteckning
Den här funktionen fungerar inte med ’C’ locale, så du måste först ange en locale via
setlocale()
.
- locale.str(float)¶
Formaterar ett flyttal med samma format som den inbyggda funktionen
str(float)
, men tar hänsyn till decimaltecknet.
- locale.delocalize(string)¶
Konverterar en sträng till en normaliserad talsträng, enligt
LC_NUMERIC
-inställningarna.Tillagd i version 3.5.
- locale.localize(string, grouping=False, monetary=False)¶
Konverterar en normaliserad talsträng till en formaterad sträng enligt inställningarna för
LC_NUMERIC
.Tillagd i version 3.10.
- locale.atof(string, func=float)¶
Konverterar en sträng till ett tal, enligt inställningarna i
LC_NUMERIC
, genom att anropa func på resultatet av anropet avdelocalize()
på string.
- locale.atoi(string)¶
Konverterar en sträng till ett heltal, enligt
LC_NUMERIC
-konventionerna.
- locale.LC_CTYPE¶
Locale-kategori för teckentypsfunktionerna. Viktigast av allt är att den här kategorin definierar textkodningen, dvs. hur byte tolkas som Unicode-kodpunkter. Se PEP 538 och PEP 540 för hur denna variabel automatiskt kan tvingas till
C.UTF-8
för att undvika problem som skapas av ogiltiga inställningar i behållare eller inkompatibla inställningar som skickas via SSH-anslutningar på distans.Python använder inte internt lokalberoende teckenomvandlingsfunktioner från
ctype.h
. Istället tillhandahåller en internpyctype.h
lokaloberoende motsvarigheter somPy_TOLOWER
.
- locale.LC_COLLATE¶
Lokalkategori för sortering av strängar. Funktionerna
strcoll()
ochstrxfrm()
i modulenlocale
påverkas.
- locale.LC_TIME¶
Lokalkategori för formatering av tid. Funktionen
time.strftime()
följer dessa konventioner.
- locale.LC_MONETARY¶
Lokalkategori för formatering av monetära värden. De tillgängliga alternativen är tillgängliga från funktionen
localeconv()
.
- locale.LC_MESSAGES¶
Lokalkategori för visning av meddelanden. Python stöder för närvarande inte applikationsspecifika lokalmedvetna meddelanden. Meddelanden som visas av operativsystemet, som de som returneras av
os.strerror()
kan påverkas av denna kategori.Detta värde kanske inte är tillgängligt på operativsystem som inte följer POSIX-standarden, framför allt Windows.
- locale.LC_NUMERIC¶
Lokalkategori för formatering av siffror. Funktionerna
format_string()
,atoi()
,atof()
ochstr()
i modulenlocale
påverkas av denna kategori. Alla andra numeriska formateringsoperationer påverkas inte.
- locale.LC_ALL¶
Kombination av alla lokala inställningar. Om den här flaggan används när språkdräkten ändras, försöker man ställa in språkdräkten för alla kategorier. Om det misslyckas för någon kategori ändras ingen kategori alls. När locale hämtas med hjälp av denna flagga returneras en sträng som anger inställningen för alla kategorier. Denna sträng kan senare användas för att återställa inställningarna.
- locale.CHAR_MAX¶
Detta är en symbolisk konstant som används för olika värden som returneras av
localeconv()
.
Exempel:
>>> 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
Bakgrund, detaljer, tips, råd och varningar¶
C-standarden definierar locale som en egenskap som gäller för hela programmet och som kan vara relativt dyr att ändra. Dessutom är vissa implementationer trasiga på ett sådant sätt att frekventa ändringar av locale kan orsaka core dumps. Detta gör locale något smärtsamt att använda korrekt.
Initialt, när ett program startas, är locale C
locale, oavsett vad användaren föredrar för locale. Det finns ett undantag: kategorin LC_CTYPE
ändras vid start för att ställa in den aktuella locale-kodningen till den locale-kodning som användaren föredrar. Programmet måste uttryckligen säga att det vill ha användarens föredragna locale-inställningar för andra kategorier genom att anropa setlocale(LC_ALL, '')
.
Det är i allmänhet en dålig idé att anropa setlocale()
i någon biblioteksrutin, eftersom det som en bieffekt påverkar hela programmet. Att spara och återställa är nästan lika illa: det är dyrt och påverkar andra trådar som råkar köras innan inställningarna har återställts.
Om du, när du kodar en modul för allmänt bruk, behöver en localeoberoende version av en operation som påverkas av locale (t.ex. vissa format som används med time.strftime()
), måste du hitta ett sätt att göra det utan att använda standardbibliotekets rutin. Ännu bättre är att övertyga sig själv om att det är okej att använda locale-inställningar. Endast som en sista utväg bör du dokumentera att din modul inte är kompatibel med locale-inställningar som inte är C
.
Det enda sättet att utföra numeriska operationer enligt locale är att använda de specialfunktioner som definieras av denna modul: atof()
, atoi()
, format_string()
, str()
.
Det finns inget sätt att konvertera versaler och klassificera tecken enligt lokal språkdräkt. För (Unicode) textsträngar görs dessa endast enligt teckenvärdet, medan för bytesträngar görs konverteringarna och klassificeringarna enligt bytets ASCII-värde, och byte vars höga bit är inställd (dvs. icke-ASCII-byte) konverteras aldrig eller betraktas som en del av en teckenklass som bokstav eller blanksteg.
För skribenter och program som bygger in Python¶
Tilläggsmoduler bör aldrig anropa setlocale()
, förutom för att ta reda på vad den aktuella locale är. Men eftersom returvärdet bara kan användas portabelt för att återställa det, är det inte särskilt användbart (utom kanske för att ta reda på om locale är C
eller inte).
När Python-kod använder modulen locale
för att ändra locale, påverkar detta även den inbäddande applikationen. Om det inbäddande programmet inte vill att detta ska hända bör det ta bort tilläggsmodulen _locale
(som gör allt arbete) från tabellen över inbyggda moduler i filen config.c
och se till att modulen _locale
inte är tillgänglig som ett delat bibliotek.
Tillgång till meddelandekataloger¶
- 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)¶
locale-modulen exponerar C-bibliotekets gettext-gränssnitt på system som tillhandahåller detta gränssnitt. Den består av funktionerna gettext()
, dgettext()
, dcgettext()
, textdomain()
, bindtextdomain()
och bind_textdomain_codeset()
. Dessa liknar samma funktioner i modulen gettext
, men använder C-bibliotekets binära format för meddelandekataloger och C-bibliotekets sökalgoritmer för att hitta meddelandekataloger.
Python-program bör normalt inte behöva anropa dessa funktioner och bör använda gettext
istället. Ett känt undantag från denna regel är program som länkar med ytterligare C-bibliotek som internt anropar C-funktionerna gettext
eller dcgettext
. För dessa program kan det vara nödvändigt att binda textdomänen, så att biblioteken kan hitta sina meddelandekataloger på rätt sätt.