Guia de Internacionalização em Spring Boot

Guia de Internacionalização em Spring Boot

1. Visão geral

Neste tutorial rápido, vamos dar uma olhada em como podemosadd internationalization to a Spring Boot application.

2. Dependências do Maven

Para o desenvolvimento, precisamos da seguinte dependência:


    org.springframework.boot
    spring-boot-starter-thymeleaf
    1.5.2.RELEASE

A versão mais recente despring-boot-starter-thymeleaf pode ser baixada do Maven Central.

3. LocaleResolver

Para que nosso aplicativo possa determinar qual localidade está sendo usada, precisamos adicionar um beanLocaleResolver:

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver slr = new SessionLocaleResolver();
    slr.setDefaultLocale(Locale.US);
    return slr;
}

A interfaceLocaleResolver tem implementações que determinam o local atual com base na sessão, cookies, o cabeçalhoAccept-Language ou um valor fixo.

Em nosso exemplo, usamos o resolvedor baseado em sessãoSessionLocaleResolvere definimos uma localidade padrão com o valorUS.

4. LocaleChangeInterceptor

Em seguida, precisamos adicionar um bean interceptor que mudará para um novo local com base no valor do parâmetrolang anexado a uma solicitação:

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
    lci.setParamName("lang");
    return lci;
}

Para ter efeito, este bean precisa ser adicionado ao registro do interceptor do aplicativo.

Para conseguir isso, nossa classe@Configuration deve implementar a interfaceWebMvcConfigurer e substituir o métodoaddInterceptors():

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
}

5. Definindo as fontes de mensagens

Por padrão, um aplicativo Spring Boot irá procurar por arquivos de mensagens contendo chaves de internacionalização e valores na pastasrc/main/resources.

O arquivo da localidade padrão terá o nomemessages.properties, e os arquivos de cada localidade serão nomeadosmessages_XX.properties, ondeXX é o código da localidade.

As chaves para os valores que serão localizados devem ser as mesmas em todos os arquivos, com valores apropriados ao idioma ao qual eles correspondem.

Se uma chave não existir em uma determinada localidade solicitada, o aplicativo retornará ao valor de localidade padrão.

Vamos definir um arquivo de mensagem padrão para o idioma inglês chamadomessages.properties:

greeting=Hello! Welcome to our website!
lang.change=Change the language
lang.eng=English
lang.fr=French

A seguir, vamos criar um arquivo chamadomessages_fr.properties para o idioma francês com as mesmas chaves:

greeting=Bonjour! Bienvenue sur notre site!
lang.change=Changez la langue
lang.eng=Anglais
lang.fr=Francais

6. Controlador e página HTML

Vamos criar um mapeamento de controlador que retornará uma página HTML simples chamadainternational.html que queremos ver em duas linguagens diferentes:

@Controller
public class PageController {

    @GetMapping("/international")
    public String getInternationalPage() {
        return "international";
    }
}

Como estamos usando o thymeleaf para exibir a página HTML, os valores específicos da localidade serão acessados ​​usando as chaves com a sintaxe#{key}:

Se você estiver usando arquivos JSP, a sintaxe é:

Se quisermos acessar a página com as duas localidades diferentes, temos que adicionar o parâmetrolang ao URL no formato:/international?lang=fr

Se nenhum parâmetrolang estiver presente na URL, o aplicativo usará a localidade padrão, em nosso casoUS localidade.

Vamos adicionar um menu suspenso à nossa página HTML com as duas localidades cujos nomes também estão localizados em nossos arquivos de propriedades:

:

Em seguida, podemos adicionar um script jQuery que chamará a URL/international com o respectivo parâmetrolang, dependendo da opção suspensa selecionada:


7. Executando o aplicativo

Para inicializar nosso aplicativo, temos que adicionar a classe principal anotada com@SpringBootApplication:

@SpringBootApplication
public class InternationalizationApp {

    public static void main(String[] args) {
        SpringApplication.run(InternationalizationApp.class, args);
    }
}

Dependendo da localidade selecionada, exibiremos a página em inglês ou francês ao executar o aplicativo.

Vamos ver a versão em inglês:

screen shot in English

E agora vamos ver a versão francesa:

screen shot in French

8. Conclusão

Neste tutorial, mostramos como podemos usar o suporte à internacionalização em um aplicativo Spring Boot.

O código-fonte completo para o exemplo pode ser encontradoover on GitHub.