2016-04-10 20 views
6

Ich versuche eine mehrsprachige Anwendung mit Spring Boot und Thymoleaf zu machen.I18n im Frühjahr Boot + Thymeleaf

Ich habe einige Properties-Dateien erstellt, um die verschiedenen Nachrichten zu speichern, aber ich kann sie nur in meiner Browser-Sprache anzeigen (Ich habe versucht, das Gebietsschema zu ändern, aber sie scheinen nicht zu funktionieren), trotzdem wollte ich ein Knopf auf meiner Website, um diese Pflicht zu erfüllen (Ändern der Sprache), aber ich weiß nicht, wie oder wo zu finden, wie man das schafft.

gehend, zeigen Sie meine config:

Struktur des Projekts

Structure of the project


I18n Konfigurationsklasse

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; 
    } 

} 

Thymleaf HTML-Seite

<!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 (Properties-Dateien)

messages_en_US.properties

hello.world = Hello people 

messages_es.properties

hello.world = Hola gente 

Eigentlich wird die Nachricht auf Spanisch angezeigt, nicht sicher, wie würde ich das ändern, also wenn Sie mir helfen könnten, vielen Dank.

Es gibt eine andere Frage, die mir in den Sinn kommt ... Wie würde ich die Nachrichten von der Datenbank statt von der Eigenschaftendatei bekommen?

+0

Dumme Frage: Wie stellen Sie das 'Locale' ein? Haben Sie einen [LocaleResolver] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/LocaleResolver.html) konfiguriert? Wie gibst du ihm das gewünschte Locale? –

+0

Ich bin nicht, ich nehme an, Spring nimmt es aus der Browserkonfiguration. Soll ich das Gebietsschema abhängig von einem Tastendruck einstellen? Nicht sicher, ob es so funktionieren würde. –

+1

Beginnen Sie bei [oben] (http://www.concretepage.com/spring-4/spring-4-mvc-internationalization-i18n-and-localization-l10n-annotation-example) und machen Sie weiter.Es gibt 3 Dinge, die Sie brauchen: 1) eine 'MessageSource', 2) ein' LocaleResolver' um für eine bestimmte Anfrage zu bestimmen, welche Locale zu verwenden ist und (optional) 3) einen 'LocaleChangeInterceptor', so dass Sie aus einer Anfrage Stellen Sie das Gebietsschema im 'LocaleResolver' ein. –

Antwort

9

sollte Ihre Anwendung erstreckt 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()); 
} 

}

dann auf Browser Sie Sprache mit param lang wechseln Beispiel: http://localhost:1111/?lang=kh dem messages_kh.properites speichert den Inhalt Khmer Sprache.

Verwandte Themen