terça-feira, 7 de janeiro de 2014

Internacionalização (I18N)


Internationalization ou I18N como é chamado (devido ao fato de desde a primeira letra até a última ter um total de 18 letras entre elas nessa palavra), é um processo de adaptação dinâmica de textos e mensagens em softwares de computadores para uma língua e cultura de um país.
A utilização desse processo é relativamente simples, sendo utilizado essencialmente a classe ResourceBundle para buscar os arquivos de texto de tradução (que é usado na extensão .properties) e a classe Locale para definir o idioma que será traduzido.

Nesse post, irei mostrar um pouco sobre o seu funcionamento utilizando a linguagem de programação Java.

Para começar, vamos ver como funciona o arquivo properties. Ele nada mais é do que um arquivo de texto que irá conter as palavras (ou chaves) e suas traduções correspondentes salvado com a extensão .properties. Considere um arquivo properties contendo as seguintes palavras, na exata forma escrita:

                                                nome = Name
                                                end = Address

nesse caso, quando buscarmos pela chave "nome" passando como parâmetro no método getString da classe ResourceBundle, vamos obter a palavra "Name" e quando buscarmos por "end", vamos obter "Address" de dentro do nosso arquivo properties.


Agora que já vimos como exatamente é o arquivo properties, vamos ver um exemplo simples de utilização do I18N traduzindo a palavra "cadastro" para o inglês.

O primeiro passo a ser dado é criar o arquivo properties com a palavra "cadastro" seguido de sua tradução em inglês, logo ficaria assim:

                                               cadastro = Register

depois, devemos criar objetos do tipo ResourceBundle e Locale.


 public class I18nExemplo{
  
  public static void main(String[] args){
   Locale locale;
   ResourceBundle palavra;
  }
 }
  

A seguir, temos que definir no objeto locale o idioma a ser usado, inserindo como parâmetro a identificação do país e idioma entre aspas. No nosso caso, "en" e "US" (já que queremos traduzir para o inglês).

  locale = new Locale("en", "US");
  

O próximo passo então é atribuir ao objeto "palavra" a localização do arquivo .properties que vamos utilizar para traduzi-la para o ingles, utilizando o método getBundle da classe ResourceBundle e recebendo como parâmetros o arquivo properties de tradução e a váriavel do tipo locale.

Vamos supor que temos um pacote chamado "properties", e nele colocamos nosso arquivo de tradução para o ingles que se chama "ingles_en_US.properties". Então nosso código ficaria assim:

     palavra = ResourceBundle.getBundle("properties.ingles_en_US", locale);
  

Agora, usamos o método getString da classe ResourceBundle no objeto "palavra", passando como parâmetro a chave do arquivo properties
que vamos traduzir, que é "cadastro" nesse caso.
Se colocarmos isso dentro de um System.out.println() ou de uma janela já vamos obter a palavra traduzida.

    System.out.println(palavra.getString(cadastro)); //Register
  

Como pode perceber, não é difícil utilizar o I18N.
I18N ainda tem várias outras formas de utilização para horário, unidade monetária e etc.
Se interessou? dê mais uma lida sobre o assunto nesse link da Oracle:

http://docs.oracle.com/javase/tutorial/i18n/TOC.html

Nenhum comentário:

Postar um comentário