terça-feira, 26 de agosto de 2008

Internacionalização com a classe Locale

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:

Seguidores

Total de visualizações

Tecnologia do Blogger.
Evandro Santos © 2016 Suporte Blogger Templates