Resource Bundle Um dos requisitos para se construir uma aplicação nos dias de hoje, é o de que seja utilizada por pessoas em vários lugares no mundo e em diferentes línguas. Portanto, é preciso que as aplicações sejam facilmente internacionalizáveis. Para isso, existe um recurso no java chamado de Resource Bundle, que nada mais é do que um esquema de arquivos properties, onde cada arquivo representa uma língua e cada um desses arquivos possui um conjunto de chaves e valores, sendo que os valores são os textos que serão exibidos na aplicação e estão na língua correspondente à língua que o arquivo representa. O arquivo properties que será utilizado para montar a aplicação é escolhido pelo próprio usuário, seja através da língua definida no browser ou no próprio sistema operacional. Caso o usuário escolha uma língua que não está disponível na aplicação, uma língua default será utilizada. Por exemplo: vamos imaginar que em uma aplicação existem dois arquivos properties, um em português e outro em inglês, e que o arquivo default é o inglês. Vamos imaginar também que a aplicação é Web, portanto a língua escolhida está definida no próprio browser. Caso esteja configurado no browser do usuário a língua alemã e como não existe nenhum arquivo de properties para alemão, a aplicação será exibida na língua inglesa, que é a língua configurada como default. Todos os arquivos são criados praticamente com o mesmo nome. O que diferencia um arquivo do outro é o acréscimo da sigla que representa a língua daquele arquivo. O arquivo que representa a língua default não tem essa sigla ao fim do nome. Seguindo o exemplo citado acima e imaginando que o nome dos nossos arquivos é messages, ficaria da seguinte forma: messages.properties seria o arquivo default que representaria a língua inglesa e messages_pt.properties seria o arquivo da língua portuguesa. Veja abaixo um exemplo com esses dois arquivos. messages.properties: messages_pt.properties:
Utilizando Resource Bundle no Demoiselle Na versão 2.X do Demoiselle Framework, existe uma fábrica de Resource Bundle que fica no Core e permite seu uso através da injeção ou através de uma instanciação normal. O grande detalhe é que nessa fábrica é injetado um objeto do tipo Locale, isso quer dizer que é necessário criar também uma fabrica de Locale. Como a definição de Locale varia de acordo com a camada de apresentação, essas fábricas foram criadas nas extensões de apresentação: demoiselle-jsf, demoiselle-se e demoiselle-vaadin. Na extensão demoiselle-se a definição do Locale é dada através do Locale definido na máquina do usuário, enquanto que nas extensões demoiselle-jsf e demoiselle-vaadin essa definição acontece através do Locale do browser do usuário, por se tratarem de extensões para camada de apresentação Web. Por default, a fábrica de Resource Bundle vai injetar um bundle apontando para o arquivo messages, mas isso pode ser facilmente alterado através da anotação @Name. Veja abaixo como utilizar o Resource Bundle no Demoiselle. Utilizando Resource Bundle através da injeção: Utilizando Resource Bundle sem uso de injeção: