Segundo o Wikipédia, Internacionalização é um processo de desenvolvimento (ou adaptação) de um software em que se busca criar um software que se adapte mais facilmente a determinadas características regionais, legais, culturais e técnicas.
A classe java.util.Locale é destinada a representar regiões geográficas, políticas e culturais na plataforma Java. A principal representação de um Locale é:
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale[] idiomas = {new Locale("pt"),
new Locale("fr"),
new Locale("ja"),
new Locale("en")
};
for (Locale idioma : idiomas) {
System.out.println("Idioma: " +
idioma.getDisplayLanguage());
}
}
}
A saída desse código seria:
Idioma: português
Idioma: francês
Idioma: japonês
Idioma: inglês
O exemplo acima mostrou como criar um objeto Locale utilizando apenas o código do idioma desejado. A definição das siglas de cada idioma encontra-se disponível em: http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt.
Uma outra opção de utilização do construtor da classe Locale é acrescentar à definição de idioma o código que representa o país:
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale[] idiomas = {new Locale("pt", "BR"),
new Locale("pt", "PT"),
new Locale("fr", "CA"),
new Locale("fr", "FR"),
new Locale("en", "US"),
new Locale("en", "GB")
};
for (Locale idioma : idiomas) {
System.out.println("Idioma: " +
idioma.getDisplayLanguage() +
" - País: " + idioma.getDisplayCountry());
}
}
}
E a saída desse programa é:
Idioma: português - País: Brasil
Idioma: português - País: Portugal
Idioma: francês - País: Canadá
Idioma: francês - País: França
Idioma: inglês - País: Estados Unidos
Idioma: inglês - País: Reino Unido
O segundo exemplo demonstrou o uso do código do país na criação de um objeto Locale. A definição dos códigos dos países está disponível em: http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html.
A última opção de construtor é o que permite adicionar variantes/dialetos específicos:
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale portugues = new Locale("pt", "BR", "WIN");
System.out.println(portugues.getDisplayName());
}
}
Agora um exemplo com uma classe que tem suporte à localização: a classe DateFormat:
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
Locale[] idiomas = {new Locale("pt", "BR"),
new Locale("fr", "FR"),
new Locale("en", "US"),
new Locale("ja", "JP"),
new Locale("ko", "KP"),
new Locale("de", "DE")
};
Calendar c = Calendar.getInstance();
DateFormat dt = null;
for (Locale idioma : idiomas) {
dt = DateFormat.getDateInstance(DateFormat.FULL,
idioma);
System.out.println(idioma.getDisplayName()
+ " - " + dt.format(c.getTime()));
}
}
}
Como resultado:
português (Brasil) - Sábado, 19 de Abril de 2008
francês (França) - samedi 19 avril 2008
inglês (Estados Unidos) - Saturday, April 19, 2008
japonês (Japão) - 2008?4?19?
coreano (Coréia do Norte) - 2008? 4? 19? ???
alemão (Alemanha) - Samstag, 19. April 2008
É interessante observar que nós idiomas coreano e japonês existem caracteres não disponíveis.
É importante lembrar que a classe Locale não faz o trabalho sozinha, para tirar proveito da localização é necessário utilizar classes com esse suporte. Boa internacionalização.
Referências:
JANDL, Peter Jr. Mais Java, Internacionalização, Cap: 2. São Paulo: Futura, 2003.
SIERRA, Kathy & BATES, Bert. Certificação Sun para Programador JAVA 5 - Guia de Estudo (Exame 310-055). Alta Books, 2ª. Edição, 2006.
JavaDoc, Locale, disponível em http://java.sun.com/j2se/1.4.2/docs/api/java/util/Locale.html no dia 19/04/2008.
Wikipédia, Internacionalização, disponível em http://pt.wikipedia.org/wiki/Internacionalização no dia 19/04/2008.
0 comentários: