Python: internacionalizacija i lokalizacija
-
module locale
(službena dokumentacija) nudi pristup lokalnim i regionalnim postavkama operacijskog sustava -
locale.setlocale(category, locale)
postavlja kategorijucategory
na lokalne postavkelocale
;category
može bitilocale.LC_ALL
,locale.LC_CTYPE
,locale.LC_NUMERIC
,locale.LC_TIME
,locale.LC_COLLATE
,locale.LC_MONETARY
ilocale.LC_MESSAGES
(objašnjenja kategorija) -
locale.getlocale(category)
vraća uređeni par koda lokalne postavke i kodiranja znakova;category
može biti bilo koja od kategorija koje postoje ulocale.setlocale()
osimlocale.LC_ALL
import locale # nakon pokretanja Python postavlja samo LC_CTYPE u skladu s postavkama operacijskog sustava locale.getlocale(locale.LC_CTYPE) # vraća ('hr_HR', 'UTF-8') locale.getlocale(locale.LC_NUMERIC) # vraća (None, None) locale.getlocale(locale.LC_TIME) # vraća (None, None) locale.getlocale(locale.LC_COLLATE) # vraća (None, None) locale.getlocale(locale.LC_MONETARY) # vraća (None, None) locale.getlocale(locale.LC_MESSAGES) # vraća (None, None) locale.setlocale(locale.LC_ALL, 'hr_HR.UTF-8') # postavili smo i LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY i LC_MESSAGES na hr_HR i UTF-8 locale.getlocale(locale.LC_CTYPE) # vraća ('hr_HR', 'UTF-8') locale.getlocale(locale.LC_NUMERIC) # vraća ('hr_HR', 'UTF-8') locale.getlocale(locale.LC_TIME) # vraća ('hr_HR', 'UTF-8') locale.getlocale(locale.LC_COLLATE) # vraća ('hr_HR', 'UTF-8') locale.getlocale(locale.LC_MONETARY) # vraća ('hr_HR', 'UTF-8') locale.getlocale(locale.LC_MESSAGES) # vraća ('hr_HR', 'UTF-8')
-
locale.nl_langinfo(option)
(zahtijeva prethodni pozivlocale.setlocale()
jer ovisi olocale.LC_*
) dohvaća informaciju o lokalnim postavkama u obliku niza znakova, npr.option
postavljen nalocale.DAY_1
dohvaća lokalni naziv nedjelje (radi prema američkoj konvenciji o poretku dana u tjednu, a ne prema ISO 8601), alocale.MON_1
dohvaća lokalni naziv siječnja; čitav popis u službenoj dokumentaciji locale.localeconv()
(zahtijeva prethodni pozivlocale.setlocale()
jer ovisi olocale.LC_*
) dohvaća popis svih konvencija koje lokalne postavke sadrže, npr. znak koji se koristi za decimalnu točku, odvajanje tisućica, valutu; čitav popis u službenoj dokumentaciji
Zadatak
Saznajte nazive dana i mjeseci te konvencije vezane uz ispis brojeva prvo u hrvatskim, a onda američkim engleskim lokalnim postavkama.
locale.strcoll(string1, string2)
vraća negativnu, pozitivnu ili vrijednost 0 ovisno o tome je listring1
prije, poslije ili jednakstring2
(respektivno) ovisnu o lokalnoj postavciLC_COLLATE
locale.strxfrm(string)
pretvara znakovni niz koji sadrži znakove specifične za lokalne postavke u oblik koji se može koristiti za uobičajeno uspoređivanje znakovnih nizova operatorima<
,>
i==
locale.format_string(format, val)
formatira vrijednostval
u oblikuformat
, koji može biti%d
za cijele brojeve te%f
i5.2f
za brojeve s pomičnim zarezom i brojeve s 5 mjesta prije decimalne točke i dva iza (respektivno)locale.currency(val)
formatira vrijednostval
kao novčanu vrijednost ovisnu o lokalnoj postavciLC_MONETARY
locale.atof(string)
pretvara znakovni niz u broj s pomičnim zarezom ovisno o lokalnoj postavciLC_NUMERIC
locale.atoi(string)
pretvara znakovni niz u cijeli broj ovisno o lokalnoj postavciLC_NUMERIC
Zadatak
Prvo u hrvatskoj, a zatim u američkoj engleskoj lokalnoj postavci:
- usporedite znakovne nizove Cunj, Čabar, Ćićarija i Dubrovnik i odredite koji po abecedi dolaze prije, a koji poslije,
- formatirajte broj 1234567,89 prvo kao broj s pomičnim zarezom, a zatim kao novčanu vrijednost.
Author: Vedran Miletić