24.2. Lokalindstillinger

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.

24.2.1. Oprettelse af en lokalindstilling

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.

24.2.2. Tilgængelige lokalindstillinger

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

Sprog- og landekoderne er ISO-standarder, som kan findes på nettet.

Lad os nu se på hvordan lokalindstillinger kan anvendes.