Internacionalização (Internationalization) é o processo de projetar aplicações que podem se adaptar a diferentes localidades geográficas sem a necessidade de alterar o código. O termo é abreviado para i18n devido às 18 letras entre o primeiro “i” e o último “n” do termo original em inglês “internationalization”.
As características fundamentais de uma aplicação que se adapta a diferentes idiomas sem alteração em código são as seguintes:
- Independente da localização, a aplicação será executada da mesma forma.
- Elementos textuais, como mensagens de status e labels de componentes GUI, não são colocados no meio do código (hardcoded). Os elementos textuais são armazenados fora do código fonte e recuperados dinamicamente.
- Adicionar novos idiomas não requer uma nova compilação do código fonte.
- Datas e formatos monetários aparecem de acordo com a localidade do usuário.
Localização (Localization) é o processo que adapta o software a uma região específica ou idioma, considerando-se componentes e tradução de textos. Além de alterar números, datas e moedas, outros tipos de dados devem ser levados em consideração, como sons e imagens, que podem requerer alterações se forem culturalmente sensíveis.
Quanto melhor a internacionalização de uma aplicação, mais fácil é a sua localização para um idioma particular.
Um exemplo simples de internacionalização
Suponha que você tenha o seguinte programa.
public class NotI18N {
static public void main(String[] args) {
System.out.println("Hello.");
System.out.println("How are you?");
System.out.println("Goodbye.");
}
}
É preciso que ele seja disponibilizado em diversos países. Ter várias versões do programa, em termos de manutenção, é uma péssima ideia. Este é um exemplo claro de que o programa precisa de internacionalização.
A seguinte versão mostra o programa em uma versão internacionalizada.
import java.util.*;
public class I18N {
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"));
}
}
Para compilar e executar o programa internacionalizado é preciso ter os arquivos de propriedade que contém as mensagens a serem exibida, de acordo com a localização escolhida. Note que a localização padrão é en-US.
Abaixo segue o conteúdo dos arquivos de propriedade.
MessagesBundle.properties
greetings = Hello. farewell = Goodbye. inquiry = How are you?
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?
Agora o programa permite escolher, via linha de comando, o idioma a ser utilizado durante sua execução. O seguinte comando inicia a aplicação utilizando o código de idioma fr (francês) e o código de país FR (França), então o programa irá utilizar as mensagens do arquivo MessagesBundle_fr_FR.properties.
java I18NSample fr FR
Referências
The Java Tutorials, Internationalization. Disponível em: http://docs.oracle.com/javase/tutorial/i18n/. Acessado em 29 mai. 2013.
Boa tarde Gabriel.
No eclipse eu tive que importar a ResourceBundle e ficou assim o código
import java.util.Locale;
import java.util.ResourceBundle;
public class I18N {
static public void main(String[] args) {
String language;
String country;
if (args.length != 2) {
language = new String(“pt”);
country = new String(“BR”);
} 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”));
}
}
Preferi do que importar todas com *
Olá, Adriano!
Realmente a melhor opção para import é como você fez, o import específico. Embora o import com asterisco não influencie na performance da aplicação, o import específico é uma boa prática que melhora a legibilidade do código.
Abraço!
Para ajudar na tradução dos arquivos .properties de maneira online, eu recomendo esta colaborativa plataforma de tradução do software – https://poeditor.com/