Internacionalização de Aplicações

Internacionalização (i18n) refere-se ao processo de desenvolvimento de aplicações que suporatm múltiplos idiomas e formatos de dados, sem necessidade de reescrever a lógica do código. Localização (l10n), por outro lado, é o processo de adaptar uma aplicação internacionalizada para um idioma ou região específica. Uma região (locale) representa um contexto geográfico, político ou cultural. Exemplos de operações sensíveis à região incluem a exibição de datas, onde o formato varia conforme a localização do usuário — por exemplo, 01/27/2018 nos EUA versus 27/01/2018 na Austrália.

Para implementar internacionalização, há duas abordagens principais:

  1. Criar versões separadas de recursos estáticos para cada região.
  2. Isolar elementos de texto em arquivos de propriedades, permitindo que a aplicação carregue automaticamente os textos apropriados com base no locale.

A classe java.util.Locale define uma região. Um objeto Locale contém três componentes principais: idioma, país e variante. O idioma é fundamental, mas não suficiente sozinho — por exemplo, o inglês pode ser falado de formas diferentes em EUA e Reino Unido. A variante serve para identificadores específicos de fornecedor ou plataforma, como WIN para Windows ou MAC para Macintosh.

Exemplos de criação de objetos Locale:

Locale locale1 = new Locale("en", "US");
Locale locale2 = Locale.CHINA;
Locale locale3 = Locale.getDefault();

Os códigos de idioma seguem padrões ISO 639 (ex: zh para chinês, en para inglês), enquanto os códigos de país seguem ISO 3166 (ex: CN para China, US para Estados Unidos).

Para internacionalizar uma aplicação Spring MVC, os passos são:

  1. Separar textos em arquivos de propriedades.
  2. Selecionar e carregar o arquivo apropriado com base no locale do usuário.

Exemplo de arquivos de propriedades:

# i18n.properties (padrão)
i18n.username=Username
i18n.password=Password

# i18n_zh_CN.properties
i18n.username=\u7528\u6237\u540D
i18n.password=\u5BC6\u7801

O nome dos arquivos segue o padrão: basename_languageCode_countryCode. Para carregar esses arquivos, usa-se java.util.ResourceBundle, embora no Spring MVC se utilize o bean messageSource.

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  <property name="basenames">
    <list>
      <value>classpath:i18n</value>
    </list>
  </property>
  <property name="defaultEncoding" value="UTF-8"/>
  <property name="cacheSeconds" value="120"/>
</bean>

Para definir o locale da aplicação, pode-se usar LocaleResolver. As opções incluem:

  • AcceptHeaderLocaleResolver: Usa o cabeçalho HTTP Accept-Language.
  • SessionLocaleResolver: Armaznea o locale na sessão.
  • CookieLocaleResolver: Armazana o locale em um cookie.

Exemplo de configuração com SessionLocaleResolver e LocaleChangeInterceptor:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
<mvc:interceptors>
  <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>

No JSP, utiliza-se a tag <spring:message> para exibir mensagens localizadas:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<spring:message code="i18n.username" text="Username"/>
<spring:message code="i18n.password" text="Password"/>

<a href='<c:url value="/i18n?locale=zh_CN"/>'>中文</a>
<a href='<c:url value="/i18n?locale=en_US"/>'>English</a>

A URL deve incluir o parâmetro locale para mudar o idioma, como ?locale=zh_CN ou ?locale=en_US. Caso o arquivo correspondente não exista, será usado o arquivo padrão `i18n.properties.

Tags: Internacionalização Spring MVC locale resourcebundle

Publicado em 10-6 13:14