Sunteți pe pagina 1din 5

Internationalizare

Clasa Locale
Text
Numar si valuta

1. Clasa Locale
Crearea obiectelor java.util.Locale se face prin invocarea constructorului clasei
Locale si transmitand acestuia codul limbii si codul tarii. Aceste coduri se gasesc la
adresele:
ISO Language Code: http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
ISO Country Code: http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
Locale l1 = new Locale("en","US");
Locale l2 = new Locale("en","GB");

Obiectul de tip Locale este doar un identificator care se transmite altor obiecte pentru
a realiza o afisare conform specificatiilor tarii. Putem afisa aceste specificatii pentru
un anumit tip de obiect, de exemplu pentru data calendaristica vom afisa toate
formatele cunoscute de catre acesta. Lista formatelor se obtine de la
clasa DateFormat cu metoda getAvailableLocales().:
import java.util.*;
import java.text.*;
public class Available {
static public void main(String[] args) {
Locale list[] = DateFormat.getAvailableLocales();
for (int i = 0; i < list.length; i++) {
System.out.println(list[i].getLanguage() + " " +
list[i].getCountry());
}
}
}

Putem seta valorile implicite pentru limba si tara in doua moduri:


prin setarea unor valori corespunzatoare pentru proprietatile
sistem user.language si user.region.

prin crearea unui obiect Locale si invocand metoda setDefault a acestuia.


Exemplul urmator ilustreaza aceste tehnici:
import java.util.*;
public class DefaultLocale {
static public void main(String[] args) {
Properties props = System.getProperties();
props.put("user.language", "ja");
props.put("user.region", "JP");
System.setProperties(props);
Locale aLocale = Locale.getDefault();
System.out.println(aLocale.toString());
aLocale = new Locale("fr", "FR");
Locale.setDefault(aLocale);
System.out.println(aLocale.toString());
}

In cadrul unei aplicatii putem seta aceste proprietati pentru fiecare obiect al aplicatiei.

2. Text
Sa presupunem va dorim sa scriem un program care afiseaza diferite tipuri de mesaje
in limba materna a utilizatorului. La inceput sa presupunem ca avem trei tipuri de
mesaje: salutare de bun-venit, intrebare de politete, salutare de ramas bun. Un
program prntru engleza ar arata in modul urmator:
System.out.println("Hello.");
System.out.println("How are you?");
System.out.println("Goodbye.");

Si acum sa resriem codul intr-un format international.


import java.util.*;
public class LocaleSample {
static public void main(String[] args) {
String language;
String country;

if (args.length != 2) {
language = new String("en");
country = new String("US");
} else {
language = new String(args[0]);
country = new String(args[1]);
}
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale(language, country);
messages =
ResourceBundle.getBundle("MessagesBundle",currentLocale);
System.out.println(messages.getString("greetings"));
System.out.println(messages.getString("inquiry"));
System.out.println(messages.getString("farewell"));
}
}

Utilizatorul acestui program va putea specifica la linia de comanda codul limbii si


codul tarii. Pentru fiecare pereche limba-tara va exista cate un fisier de proprietati cu
aceste trei tipuri de mesaje. Daca se specifica o pereche limba-tara pentru care nu
exista fisier, atunci se va utiliza fisierul implicit pentru citirea datelor. Exemple de
fisiere:
MessagesBundle.properties
greetings = Hello.
farewell = Goodbye.
inquiry = How are you?

MessagesBundle_de_DE.properties
greetings = Hallo.
farewell = Tsch.
inquiry = Wie geht's?

MessagesBundle_en_US.properties
greetings = Hello.
farewell = Goodbye.
inquiry = How are you?

MessagesBundle_fr_FR.properties
greetings = Bonjour.
farewell = Au revoir.
inquiry = Comment allez-vous?

Localizarea acestui fisier de proprietati se face cu urmatoarea


constructie: ResourceBundle messages =
ResourceBundle.getBundle("MessagesBundle", currentLocale);

In acest caz se presupune ca numele familiei de fisiere este MessageBundle la care se


adauga continutul obiectului currentLocale. In exemplul nostru acesta contine doua
lucruri: codul limbii si codul tarii. Pentru limba se utilizeaza un cod format din dou
litere(minuscule), iar pentru tara un cod format din doua majuscule.
Metoda getBundle() a clasei ResourceBundle incearca sa localizeze fisierul de
proprietati. si va incarca in obiectul messages.

3. Numar si valuta
Pentru afisarea numerelor si a valutei se utilizeaza clasa NumberFormat. Aceasta
clasa are metode pentru obtinerea unor obiecte care se utilizeaza la formatarea
numerelor respectiv a valutei. De exemplu formatarea unui numar real conform
specificatiilor locale se realizeaza in modul urmator:
Presupunem ca dorim sa afisam numarul double d = new Double( 123456.789
1. Se construieste un obiect Locale: Locale l = new Locale("en","GB");
2. Se obtine obiectul de formatare: NumberFormat formatter =

NumberFormat.getNumberInstance( l );

3. Se formateaza numarul:

formatter.format( numar );

import java.util.*;
import java.text.*;
public class NumberFormatDemo {
static public void displayNumber(Locale currentLocale) {
Integer quantity = new Integer(123456);
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String quantityOut;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
quantityOut = numberFormatter.format(quantity);
amountOut = numberFormatter.format(amount);
System.out.println(quantityOut + "
System.out.println(amountOut + "

" + currentLocale.toString());
" + currentLocale.toString());

}
static public void displayCurrency(Locale currentLocale) {

Double currency = new Double(9876543.21);


NumberFormat currencyFormatter;
String currencyOut;
currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);
currencyOut = currencyFormatter.format(currency);
}

System.out.println(currencyOut + "

" + currentLocale.toString());

static public void displayPercent(Locale currentLocale) {


Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;
percentFormatter = NumberFormat.getPercentInstance(currentLocale);
percentOut = percentFormatter.format(percent);
System.out.println(percentOut + "

" + currentLocale.toString());

}
static public void main(String[] args) {
Locale[] locales = {
new Locale("fr","FR"),
new Locale("de","DE"),
new Locale("en","US")
};
for (int i = 0; i < locales.length; i++) {
System.out.println();
displayNumber(locales[i]);
displayCurrency(locales[i]);
displayPercent(locales[i]);
}
}

S-ar putea să vă placă și