web-dev-qa-db-fra.com

I18n dans Spring boot + Thymeleaf

J'essaie de créer une application multilingue en utilisant Spring boot et Thymeleaf.

J'ai fait quelques fichiers de propriétés pour enregistrer les différents messages mais je ne peux que l'afficher dans la langue de mon navigateur (j'ai essayé des extensions pour changer les paramètres régionaux du navigateur mais elles ne semblent pas fonctionner), de toute façon je voulais mettre un bouton dans mon site web pour faire ce devoir (changer la langue), mais je ne sais pas comment ni où trouver comment gérer cela.

Je vais vous montrer ma config:

Structure du projet

Structure of the project


Classe de configuration I18n

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
public class I18nConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

}

Page HTML Thymleaf

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
    th:with="lang=${#locale.language}" th:lang="${lang}">

<head>
<title>Spring Boot and Thymeleaf example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h3>Spring Boot and Thymeleaf</h3>
    <p>Hello World!</p>
    <p th:text="${nombre}"></p>
    <h1 th:text="#{hello.world}">FooBar</h1>
</body>
</html>

Messages (fichiers de propriétés)

messages_en_US.properties

hello.world = Hello people

messages_es.properties

hello.world = Hola gente

En fait, le message s'affiche en espagnol, je ne sais pas comment changer cela, donc si vous pouviez m'aider, merci beaucoup.

Il y a une autre question qui me vient à l'esprit ... Comment puis-je obtenir les messages de la base de données à la place du fichier de propriétés?

11
No One

Votre application doit s'étendre WebMvcConfigurerAdapter

@SpringBootApplication
public class NerveNetApplication extends WebMvcConfigurerAdapter {

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

    @Bean
    public LocaleResolver localeResolver() {
        return new CookieLocaleResolver();
    }

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

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

Ensuite, sur le navigateur, vous pouvez changer de langue avec param lang Exemple: http: // localhost: 1111 /? lang = kh quels messages_kh.properites stockeront le contenu de la langue khmère.

14
Lay Leangsros