Bem vindo a Parte 5 da série de artigos sobre o org.springframework.web.servlet.view.tiles2.TilesConfigurer
na definição do bean para definir o arquivo de configuração do Tiles. Isso dividiu nossa aplicação HelloWorld com o Spring MVC em seções como cabeçalho, rodapé, etc.
Nesse artigo discutiremos sobre internacionalização (I18N) e localização (L10N) no Spring 3.0 MVC. Adicionaremos suporte a i18n seguido por suporte a l10n à nossa aplicação HelloWorld, criada nos artigos anteriores da série. Recomendo fortemente que leia os artigos previamente publicados e baixe o código fonte da aplicação.
O que é i18n e L10n?
Em computação, internacionalização e localização são meios de adaptar software para idiomas e regionalismos diferentes. Internacionalização é o processo de projetar uma aplicação de software de forma que ela possa ser adaptada a vários idiomas e regiões sem alterações na engenharia. Localização é o processo de adaptar software internacionalizado para uma região específica ou idioma através do acréscimo de componentes específicos do local e de texto traduzido.
Os termos são frequentemente abreviados para i18n (onde 18 indica o número de letras entre o primeiro i e o último n em internationalization) e L10n, respectivamente, devido ao tamanho das palavras. A letra L maiúscula em L10n ajuda a distingui-la do i minuscula em i18n.
Nosso objetivo
Nosso objetivo é adicionar suporte a internacionalização e localização a nossa aplicação Spring MVC. Uma vez finalizada, a aplicação se parecerá com isso:
Adicionaremos suporte a dois idiomas a nossa aplicação> Inglês e Alemão. Dependendo da configuração do navegador de seu usuário, o idioma adequado será selecionado. Além disso, o usuário será capaz de selecionar manualmente o idioma no canto superior direito da aplicação.
Arquivo de Mensagens
Criaremos dois arquivos de propriedade que conterão todas as mensagens a serem exibidas pela aplicação. Esses arquivos são mantidos em um diretório raiz chamado “resources”. Crie um diretório raiz em seu projeto clicando com o botão direito em Project name > New > Source Folder e nomeio como resources.
Crie dois arquivos chamado messages_en.properties
e messages_de.properties
nesse diretório e copie o seguinte conteúdo neles.
Arquivo: resources/messages_en.properties
label.firstname=First Name label.lastname=Last Name label.email=Email label.telephone=Telephone label.addcontact=Add Contact label.menu=Menu label.title=Contact Manager label.footer=© ViralPatel.net
Arquivo: resources/messages_de.properties
label.firstname=Vorname label.lastname=Familiename label.email=Email label.telephone=Telefon label.addcontact=Addieren Kontakt label.title=Kontakt Manager label.menu=Menü label.footer=© ViralPatel.net |
Configurando Internacionalização (i18n) / Localização (L10n) no Spring MVC
Agora que criamos os arquivos de Mensagens para nossa aplicação, precisamos declarar esses arquivos no arquivo de configuração do Spring. Usaremos a classe org.springframework.context.support.ReloadableResourceBundleMessageSource
para definir as Mensagens.
Além disso, observe que forneceremos um recurso onde os usuários serão capazes de selecionar o idioma da aplicação. Isso é implementado através do uso da classe org.springframework.web.servlet.i18n.LocaleChangeInterceptor
. A classe LocaleChangeInterceptor interceptará quaisquer mudanças no idioma. Essas mudanças serão salvas em um cookie para futuras requisições. A classeorg.springframework.web.servlet.i18n.CookieLocaleResolver
será usada para armazenar as mudanças de idioma nos cookies.
Adicione o código a seguir no arquivo spring-servlet.xml.
Arquivo: WebContent/WEB-INF/spring-servlet.xml
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:messages" /> <property name="defaultEncoding" value="UTF-8"/> </bean> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang" /> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="defaultLocale" value="en"/> </bean> <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <ref bean="localeChangeInterceptor" /> </property> </bean>
Observe que no arquivo de configuração acima definimos a propriedade basename no bean messageSource como classpath:messages. Fazendo isso, o Sptring irá identificar que a recurso message_ será usado nessa aplicação.
Alterando os Views – Os JSPs
Após criar os dois arquivos de Mensagens e configura-los no Spring MVC, usaremos essas mensagens nos arquivos JSP. Abra todos os arquivos JSP de nossa aplicação exemplo e atualize com o seguinte código.
Arquivo:WebContent/WEB-INF/jsp/header.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> <h3><spring:message code="label.title"/></h3> <span style="float: right"> <a href="?lang=en">en</a> | <a href="?lang=de">de</a> </span> |
Arquivo: WebContent/WEB-INF/jsp/menu.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> <p><spring:message code="label.menu"/></p>
Arquivo: WebContent/WEB-INF/jsp/footer.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> <spring:message code="label.footer"/> |
Arquivo: WebContent/WEB-INF/jsp/contact.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <html> <head> <title>Spring 3 MVC Series - Contact Manager</title> </head> <body> <form:form method="post" action="addContact.html"> <table> <tr> <td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td> <td><form:input path="firstname" /></td> </tr> <tr> <td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td> <td><form:input path="lastname" /></td> </tr> <tr> <td><form:label path="lastname"><spring:message code="label.email"/></form:label></td> <td><form:input path="email" /></td> </tr> <tr> <td><form:label path="lastname"><spring:message code="label.telephone"/></form:label></td> <td><form:input path="telephone" /></td> </tr> <tr> <td colspan="2"> <input type="submit" value="<spring:message code="label.addcontact"/>"/> </td> </tr> </table> </form:form> </body> </html> |
Observe que no JSP acima, usamos a tag <spring:message>
para exibir a mensagem contida no arquivo de Mensagens.
Uma coisa que precisamos observar aqui é que no arquivo header.jsp especificamos dois links para seleção do idioma. O link adicione um parâmetro ?lang= quando o usuário clica nele. Observe que o Sptring identifica esse parâmetro através do uso do interceptador LocaleChangeInterceptor
e altera a configuração de forma apropriada. Note também que ao configurar LocaleChangeInterceptor
no arquivo spring-servlet.xml, especificamos a propriedade “paramName” com o valor “lang”
<property name="paramName" value="lang" /> |
Dessa forma o framework Spring irá procurar por um parâmetro “lang” na requisição.
Isso é tudo pessoal
E isso é basicamente tudo. Apenas adicionamos suporte a internacionalização e localização a nossa aplicação exemplo. Tudo que você tem que fazer agora é executar a aplicação no Eclipse. Pressione Alt + Shift +X, R.
Baixe o código fonte
Click here to download Source Code (10.2kb)
Traduzido de viralpatel.net