segunda-feira, 12 de janeiro de 2009

Internacionalizando Aplicações Java

Bom pessoal sempre vejo iniciantes no desenvolvimento WEB, ter dificuldade em aplicar I18N em suas aplicações, hoje irei demonstrar um pequeno exemplo de como é simples.

package com.teste;

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Prestes
 */
public class MessageHelper {

private final static Log logger = LogFactory.getLog(MessageHelper.class);

/* "messages" é o nome do arquivo .properties que irá armazenar as mensagens */
private final static ResourceBundle messages =  ResourceBundle.getBundle("messages",
Locale.getDefault());
// Foram criadas constantes para armazenar as chaves das mensagens
public static final String CODE_CAN_NOT_BE_NULL = "InvalidCodeException.CodeCanNotBeNull";
public static final String NAME_CAN_NOT_BE_NULL = "InvalidNameException.NameCanNotBeNull";
/**
* Retorna a mensagem baseada na chave passada como parametro, caso nao encontre retorna a propria  * chave
* @param id the message identifier
* @return the localized string corresponding to the message identifier
*/
public static String getString(String id) {
String message = id;
try {
message = messages.getString(id);
} catch (MissingResourceException e) {
logger.warn("Não foi encontrado a mensagem para a chave \"" + id  + "\"");
}
return message;
}
}
 

A única atenção que deve-se ter na classe acima é que o nome do arquivo .properties "messages" irá ser apenas o pre fixo.  O porque disso é o seguinte, em aplicações WEB deve-se adicionar o Locale como parametro na Classe ResourceBundle, assim caso o Locale Default seja o inglês o nome do arquivo será da seguinte maneira: messages_en_US.properties; em portugues seria: messages_pt_BR.properties.

No meu caso eu coloquei os aquivos messages_pt_BR.properties. e messages_en_US.properties na raiz do projeto.


/* A classe abaixo irá testar a internacionalização */
package com.teste;

public class HelloWord {
public static void main(String[] argumentos) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("com.teste.messages");
System.out.println(resourceBundle.getString("InvalidNameException.CodeCanNotBeNull"));
}

}


É isso pessoal não tem muito mistério apenas um pouco de atenção e estudo.
Caso tenham duvidas ou dificuldades postem suas dúvidas ou entre no site da SUN

0 Comentários: