Sei sulla pagina 1di 12

Programao para a Internet

Arquivos Properties e Internacionalizao (i18n)

Ely elydasilvamiranda [at] gmail.com

Internacionalizao (i18n) Uma aplicao internacionalizada pode ter sua camada de viso adaptvel a vrios idiomas O ideal que no seja necessrio modificar os fontes ou mesmo recompilar a aplicao Motivao:
vrias empresas brasileiras produzem software para vrios pases sistemas inicialmente desenvolvidos em filiais no Brasil so adotados nas matrizes de multinacionais

Arquivos de Propriedades

A ideia bsica ter cada rtulo, ttulo, descrio dos campos e mensagens vindo de arquivos de propriedades Esses arquivos so tambm chamados de "Resource Bundles" e possuem a extenso ".properties"; Deve-se ter um arquivo de propriedades com as "strings" usadas pelo sistema para cada idioma Ex:
messages_pt_BR.properties: portugus/Brasil messages_de_DE.properties: alemo messages_en_US.properties: ingls/EUA messages.properties: idioma padro, caso a mensagem no seja encontrada nos outros arquivos
3

Arquivos de Propriedades
Formado por entradas chave=valor.
Ex: //aquivo messages_pt_BR registrationTitle=Cadastro registrationText=Preencha seu nome, sobrenome e e-mail //arquivo messages_en_US registrationTitle=Registration registrationText=Enter your first name,last name and e-mail.

O arquivo deve ser colocado dentro de um pacote de cdigo-fonte (ex: br.projetoi18n.visao) Para criar um arquivo de propriedades no NetBeans: File New Other Properties Files
4

Arquivos de Propriedades

messages_pt_BR.properties
registrationTitle=Cadastro registrationText=Preencha seu Nome, Sobrenome e E-mail firstName=Nome lastName=Sobrenome emailAddress=E-mail buttonLabel=Cadastrar successTitle=Sucesso successText=Cadastro realizado com sucesso requiredField=Campo obrigatrio

messages_en_US.properties
registrationTitle=Registration registrationText=Enter your First name,Last name and E-mail. firstName=First name lastName=Last name emailAddress=E-mail buttonLabel=Register successTitle=Success successText=Registered successfully. requiredField=Required field

messages_es_ES.properties
registrationTitle=Catastro registrationText=Escriba su Nombre, Apellido y E-mail. firstName=Nombre lastName=Apelido emailAddress=E-mail buttonLabel=Registro successTitle=xito successText=Registrado con xito. requiredField=Campo obligatorio

Arquivos de Propriedades

Arquivos de propriedades

Carregando um arquivo de propriedades Alternativa 1: referenciar o arquivo em cada pgina


<f:view locale="#{facesContext.externalContext.request.locale}"/> <f:loadBundle basename="br.projetoi18n.visao.messages" var="msgs"/>

Requisita-se do navegador, pelo request, a localidade atual A tag <f:loadBundle/> carrega o arquivo de propriedades:
O arquivo carregado o da localidade atual, por isso pode-se omitir o restante do nome do arquivo As mensagens so acessveis atravs da referncia msgs Deve-se fornecer o nome do pacote onde o arquivo se encontra Em memria, o arquivo mantido como um mapa 10 sendo acessvel pelo padro chave/valor

Carregando um arquivo de propriedades Alternativa 2: Registrar o arquivo no faces-config (no necessrio usar as tags anteriores na viso)
<faces-config version="2.0" ... <application> <resource-bundle> <base-name>br.projetoi18n.visao.messages</base-name> <var>msgs</var> </resource-bundle> <locale-config> <default-locale>pt_BR</default-locale> <supported-locale>en_US</supported-locale> <supported-locale>pt_BR</supported-locale> <supported-locale>es_ES</supported-locale> </locale-config> </application> 11 </faces-config>

Criando um arquivo faces-config.xml


Caso esteja usando a verso 2.0, o faces-config.xml criado por demanda Para isso v no menu File New File JavaServer Faces JSF Faces Configuration

12

Usando mensagens internacionalizadas

Para usar as mensagens, basta referencila usando EL:


... <h:outputText value="#{msgs.firstName}:"/> <h:inputText id="firstName" value="#{personController.person.firstName}" required="true" requiredMessage="#{msgs.requiredField}"/> ...

13

Mudando a localidade No Firefox: Ferramentas Opes Contedo Idiomas Selecionar

14

Mudando a localidade No IE: Ferramentas Opes da Internet Geral Idiomas

15

Mensagens Parametrizadas Muitas vezes, "strings" se repetem com no caso abaixo:


//arquivo messages_en_US registrationText=Enter your First name, Last name and E-mail. firstNamePrompt=First name lastNamePrompt=Last name emailAddressPrompt=E-mail

Pode-se substituir os itens repetidos em registrationText por parmetros e posteriormente preencher esses valores:
registrationText=Enter your {0},{1} and {2}.

16

Mensagens Parametrizadas Substituindo os parmetros:


Usa-se a tag h:outputFormat Passa-se uma mensagem base e aninham-se a ela parmetros pelas tags f:param com valores em tempo de execuo:
<h:outputFormat value="#{msgs.registrationText}"> <f:param value="#{msgs.firstName}"/> <f:param value="#{msgs.lastName}"/> <f:param value="#{msgs.emailAddress}"/> </h:outputFormat> Substitui as ocorrncias {0}, {1} e {2} presentes em registrationText pelos valores dos parmetros
17

Mensagens Idnticas Caso uma mesma mensagem seja a mesma para todos os idiomas, pode-se coloc-la no arquivo messages.properties Esse arquivo, sem a declarao da localizao/idioma, buscado caso a chave pesquisada no exista em nenhum dos outros arquivos

18

Traduzindo mensagens do JSF O JSF armazena suas mensagens internas no pacote javax.faces aconselhvel criar ou obter uma verso traduzida desse arquivo Para isso, deve-se criar um pacote javax.faces em sua aplicao e nele colocar o arquivo traduzido
19

Traduzindo mensagens do JSF Existem verses j traduzidas e disponibilizadas na Internet

20

10

Usando mensagens nos Validadores e Conversores

Chamando um mtodo utilitrio Arquivo com as mensagens traduzidas do JSF e as mensagens


21

Usando mensagens nos Validadores e Conversores


@FacesValidator(value = "cpfValidator") public class CPFValidator implements Validator { public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { ... if (valor.length() < 11 || !this.validaCPF(valor)) { ... message.setDetail(UtilMensagens. getMensagemI18N("cpfInvalido")); throw new ValidatorException(message); } } }
22

11

Usando mensagens nos Validadores e Conversores


public class UtilMensagens { protected static String getMensagemI18N(String chave) { String mensagem = null; try { ResourceBundle bundle = ResourceBundle.getBundle("javax.faces.Messages", FacesContext.getCurrentInstance().getViewRoot().getLocale()); mensagem = bundle.getString(chave); } catch (Exception e) { mensagem = "???" + chave + "???"; } return mensagem; } } 23

12

Potrebbero piacerti anche