Spring 3 MVC – Parte 5 – Tutorial de Internacionalização & Localização através de exemplo

Bem vindo a Parte 5 da série de artigos sobre o Spring 3.0 MVC. Na seção anterior vimos como configurar o framework Tiles em uma aplicação Spring 3 MVC. Usamos a classe 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 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:
contact-manager-screen-de
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.
message-resources-properties-spring-mvc
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.
contact-manager-screen-en
contact-manager-screen-de

Baixe o código fonte

Click here to download Source Code (10.2kb)
Traduzido de viralpatel.net