2016-04-10 26 views
6

Sto provando a creare un'applicazione multilingua utilizzando Spring boot e Thymeleaf.I18n in Spring boot + Thymeleaf

Ho fatto pochi file di proprietà per salvare i diversi messaggi ma sono solo in grado di visualizzarlo nella mia lingua del browser (ho provato le estensioni per cambiare le impostazioni del browser ma sembrano non funzionare), comunque volevo mettere un pulsante nel mio sito web per fare questo dovere (cambiando la lingua), ma non so come o dove trovare come gestirlo.

Gonna mostrare il mio config:

Struttura del progetto

Structure of the project


classe di configurazione 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; 
    } 

} 

pagina 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> 

Messaggi (file Beni)

messages_en_US.properties

hello.world = Hello people 

messages_es.properties

hello.world = Hola gente 

In realtà il messaggio viene visualizzato in spagnolo, non sono sicuro di come lo cambierei, quindi se poteste aiutarmi vi ringrazio molto.

C'è un'altra domanda che mi viene in mente ... Come posso ottenere i messaggi dal Database invece dal file delle proprietà?

+0

Domanda stupida: come stai impostando il 'Locale'? Hai configurato un [LocaleResolver'] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/LocaleResolver.html)? Come stai passando il locale che vuoi? –

+0

Non lo sono, immagino che Spring stia prendendo la configurazione del browser. Devo impostare le impostazioni locali in base alla pressione di un pulsante? Non sono sicuro se funzionerebbe in questo modo. –

+1

Inizia da [in alto] (http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example) e continua.Ci sono 3 cose che ti servono 1) un 'MessageSource', 2) un' LocaleResolver' per determinare per una particolare richiesta, quale locale usare e (facoltativo) 3) un 'LocaleChangeInterceptor' in modo che tu possa, da una richiesta, imposta la locale in 'LocaleResolver'. –

risposta

9

l'applicazione deve estende 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()); 
} 

}

Poi, il navigatore è possibile cambiare la lingua con param lang Esempio: http://localhost:1111/?lang=kh che messages_kh.properites sarà memorizzare il contenuto di Lingua khmer