Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 | ||
---|---|---|
forrige | Kapitel 24. Internationale programmer | næste |
I JDK anvendes objekter af typen java.util.Locale
til at angive brugerens sprog og geografiske region. Vi vil kalde et konkret Locale
-objekt for en lokalindstilling. Klasser, der varierer deres adfærd på baggrund af en lokalindstilling, vil vi kalde for lokalafhængige.
Lokalindstillinger udfører intet i sig selv, men overgives til andre lokalafhængige objekter, som udfører det egentlige arbejde, f.eks. at formatere en beløbsstørrelse.
En lokalindstilling kan konstrueres ved at angive sprog- og landekode, f.eks.
Locale xLocale = new Locale("da", "DK");
En lokalindstilling kan oprettes med et tredje, brugerdefineret argument. Dette kan f.eks. signalere platform.
Locale xLocale = new Locale("da", "DK", "UNIX"); Locale yLocale = new Locale("da", "DK", "WINDOWS");
Det brugerdefineret argument har ingen speciel betydning i JDK. Programmøren står selv for at bestemme betydningen af indholdet.
Det er også muligt at undlade landekoden ved at lade den være tom, men sprogkoden er obligatorisk.
Locale xLocale = new Locale("da", "");
Som oftes er vi blot interesseret i at benytte en global lokalindstilling, hvilket opnås ved at invokere en klassemetode på Locale
:
Locale currentLocale = Locale.getDefault();
Dette objekt angiver den virtuelle maskines nuværende sprog- og regionsindstillinger. Ved opstart af den virtuelle maskine svarer denne lokalindstiling til brugerens indstillinger i operativsystemet.
Det er muligt at ændre den globale lokalindstilling ved at kalde klassemetoden Locale.setDefault(Locale aLocale)
men vær opmærksom på at alle programmer i den virtuelle maskine vil blive berørt, da de lokalafhængige klasser anvender den globale lokalindstilling i de situationer, hvor man ikke explicit fortæller hvilken lokalindstilling, der skal anvendes.
Man kan undersøge hvilke lokalindstillinger der er tilgængelige ved at læse afsnittet om understøttede lokalindstillinger i JDK-dokumentationen.
Det er også muligt at afgøre med Locale.getAvailableLocales()
.
import java.util.Locale; public class AvailableLocales { public static void main(String[] args) { Locale[] l = Locale.getAvailableLocales(); for (int i=0; i<l.length; i++) System.out.print(l[i]+" "); System.out.println( ); } }
Kørsel af ovenstående program giver en masse lokalindstillinger
en en_US ar ar_AE ar_BH ar_DZ ar_EG ar_IQ ar_JO ar_KW ar_LB ar_LY ar_MA ar_OM ar_QA ar_SA ar_SD ar_SY ar_TN ar_YE be be_BY bg bg_BG ca ca_ES ca_ES_EURO cs cs_CZ da da_DK de de_AT de_AT_EURO de_CH de_DE de_DE_EURO de_LU de_LU_EURO el el_GR en_AU en_CA en_GB en_IE en_IE_EURO en_NZ en_ZA es es_BO es_AR es_CL es_CO es_CR es_DO es_EC es_ES es_ES_EURO es_GT es_HN es_MX es_NI et es_PA es_PE es_PR es_PY es_SV es_UY es_VE et_EE fi fi_FI fi_FI_EURO fr fr_BE fr_BE_EURO fr_CA fr_CH fr_FR fr_FR_EURO fr_LU fr_LU_EURO hr hr_HR hu hu_HU is is_IS it it_CH it_IT it_IT_EURO iw iw_IL ja ja_JP ko ko_KR lt lt_LT lv lv_LV mk mk_MK nl nl_BE nl_BE_EURO nl_NL nl_NL_EURO no no_NO no_NO_NY pl pl_PL pt pt_BR pt_PT pt_PT_EURO ro ro_RO ru ru_RU sh sh_YU sk sk_SK sl sl_SI sq sq_AL sr sr_YU sv sv_SE th th_TH tr tr_TR uk uk_UA zh zh_CN zh_HK zh_TW
Som nævnt i sidste afsnit består en lokalindstilling af sprogkode, landekode og valgfrit argument. Ud fra ovenstående ser vi at der f.eks. er lokalindstillinger for
fr_BE: Fransk i Belgien
fr_BE_EURO: Fransk i Belgien med euro-valuta
fr_CA: Fransk i Canada
fr_FR: Fransk i Frankrig
fr_LU: Fransk i Louxembourg
Sprog- og landekoderne er ISO-standarder, som kan findes på nettet.
Sprog, ISO-639 http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
Landekoder, ISO-3166 http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
Lad os nu se på hvordan lokalindstillinger kan anvendes.