Python: internacionalizacija i lokalizacija
-
module locale(službena dokumentacija) nudi pristup lokalnim i regionalnim postavkama operacijskog sustava -
locale.setlocale(category, locale)postavlja kategorijucategoryna lokalne postavkelocale;categorymože bitilocale.LC_ALL,locale.LC_CTYPE,locale.LC_NUMERIC,locale.LC_TIME,locale.LC_COLLATE,locale.LC_MONETARYilocale.LC_MESSAGES(objašnjenja kategorija) -
locale.getlocale(category)vraća uređeni par koda lokalne postavke i kodiranja znakova;categorymože biti bilo koja od kategorija koje postoje ulocale.setlocale()osimlocale.LC_ALLimport 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.optionpostavljen nalocale.DAY_1dohvaća lokalni naziv nedjelje (radi prema američkoj konvenciji o poretku dana u tjednu, a ne prema ISO 8601), alocale.MON_1dohvać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 listring1prije, poslije ili jednakstring2(respektivno) ovisnu o lokalnoj postavciLC_COLLATElocale.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 vrijednostvalu oblikuformat, koji može biti%dza cijele brojeve te%fi5.2fza brojeve s pomičnim zarezom i brojeve s 5 mjesta prije decimalne točke i dva iza (respektivno)locale.currency(val)formatira vrijednostvalkao novčanu vrijednost ovisnu o lokalnoj postavciLC_MONETARYlocale.atof(string)pretvara znakovni niz u broj s pomičnim zarezom ovisno o lokalnoj postavciLC_NUMERIClocale.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ć