LOCALIZATION
- static Locale getDefault() è il metodo che serve per recuperare il Locale impostato di default sulla JVM installata.
- Per settare il Locale di default si usa il metodo setDefault della classe Locale, che può essere utilizzato in 2 modi:
- utilizzando l’oggetto statico della classe Locale
Locale.setDefault(Locale.CANADA_FRENCH); - Istanziando un oggetto Locale e passandolo come parametro al metodo:
Locale newLoc = new Locale(“fr”,”CA”,””);
Locale.setDefault(newLoc); - Un oggetto di tipo Locale viene rappresentato con una stringa di questo tipo:
- Language + “_” + country + “_” + (variant + “_#” | “#”) + script + “_” + extensions
- static Locale[] getAvailableLocales() restituisce tutti i Locale disponibili con la JVM installata.
- I vari metodi get della classe Locale si dividono in quelli che restituiscono:
- Codici: getLanguage(), getCountry(), getVariant()
- Nomi: getDisplayLanguage(), getDisplayCountry(), getDisplayVariant()
- Ci sono 2 modi per utilizzare un Locale:
- Locale.setDefault(Locale.CANADA_FRENCH);
- Locale newLocale = new Locale(“fr”,”CA”,””);
Locale.setDefault(newLocale);
- ResourceBundle è una classe astratta. Da essa ereditano:
- ListResourceBundle
Fornisce un metodo getContents() che restituisce un Object[][] - PropertyResourcebundle
Gestisce i Locale sottoforma di file di properties
- ListResourceBundle
- Esempio di utilizzo di NumberFormat:
- Long n = 1_000_000L;
NumberFormat germanFormat = NumberFormat.getinstance(Locale.GERMANY);
String locN = germanFormat.format(n);
- Long n = 1_000_000L;
- Il metodo parse() della classe NumberFormat, in caso di fallimento del parsing della stringa, scatena una ParseException.
- Il costruttore della classe Locale prende 3 parametri: di tipo String:
- Locale loc = new Locale(“it”, “”,””);
- Il metodo getContents() dichiarato nella classe ListResourceBundle è definito dalla signature:
- protected abstract Object[][] getContents();
- java.text.Format è una classe abstract che supporta la formattazione delle informazioni sensibili di un’area geografica (Locale) come le date, le ore o le valute.
- java.text.NumberFormat deriva da Format ed è la classe utilizzata per formattare i numeri o la valuta di un Locale.
- java.text.DateFormat deriva da Format ed è la classe utilizzata per formattare le date ed il tempo di un Locale.
- La classe java.text.SimpleDataFormat permette di definire dei pattern personalizzati per il processamento di date e tempo di un Locale.
- java.util.ResourceBundle è la classe base ed è un’astrazione di resource bundle che contiene oggetti specifici di un Locale.
- java.util.ListResourceBundle definisce il metodo getKeys() che ritorna un enumerazione delle chiavi contenute nel resource bundle.
- Per accedere ad un membro static public final della classe Locale si fa ad esempio Locale.US
- Non esiste un costruttore della classe Locale che prende come parametro un altro oggetto di tipo Locale
- I possibili costruttori per la classe Locale sono:
- Locale loc1 = new Locale(“en”)
- Locale loc2 = new Locale(“en”, “in”)
- Locale loc3 = new Locale(“th”,”TH”,”TH”)
- Praticamente i costruttori prevedono uno, due o tre parametri di tipo String
- Nella creazione di un oggetto Locale si può passare qualsiasi Stringa. Se poi si stampano i valori dell’oggetto, vengono stampati tali valori delle stringhe.
- La creazione di un Locale con stringhe non esistenti non scatena alcun tipo di eccezione
- I caratteri per la formattazione delle date sono:
- y -> anno
- M -> mese dell’anno
- w -> settimana dell’anno
- E -> nome del giorno
- u -> numero del giorno della settimana (1-7)
- d -> numero del giorno del mese
- Esempio: “d ‘(‘E’)’ MMM, yyyy” produce 28 (Sun) Oct, 2014
- Nelle stringhe per la formattazione delle date, il carattere ‘E’ indica il giorno della settimana e nella forma ‘EEEE’ indica l’intera dicitura del giorno, ad esempio ‘Friday’
- Un altro metodo per creare un Locale è utilizzando il metodo forLanguageTag(String langTag)
- Il metodo getObject della classe ResourceBundle prende come parametro una String che rappresenta la key dell’oggetto da recuperare:
- Object getObject(String key)
- Il metodo parse() della classe NumberFormat NON utilizza il limite di cifre decimali settato con il metodo setMaximumFractionDigits(2)
- Tale limite viene invece utilizzato dal metodo format() che viene utilizzato per stampare in output i valori