I18n in Spring boot + Thymeleaf

Ich versuche zu machen, eine Mehrsprachige Anwendung mit Spring boot und Thymeleaf.

Machte ich einige Eigenschaften, die Dateien zu speichern, die unterschiedliche Nachrichten, aber ich bin nur in der Lage, um ihn in meine browser-Sprache (ich habe versucht extensions zu ändern browser-locale -, sondern Sie scheinen nicht zu funktionieren), trotzdem wollte ich ein button in meine website zu tun, diese Pflicht, die (ändern der Sprache), aber ich weiß nicht, wie oder wo Sie zu finden, wie dies zu bewerkstelligen.

Werde Ihnen zeigen, meine config:

Struktur des Projekts

I18n in Spring boot + Thymeleaf


I18n-Konfiguration-Klasse

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>

Nachrichten (Properties-Dateien)

messages_en_US.Eigenschaften

hello.world = Hello people

messages_es.Eigenschaften

hello.world = Hola gente

Eigentlich die Nachricht angezeigt, in Spanisch, nicht sicher, wie würde ich das ändern, also wenn Ihr mir helfen könntet, ich danke Ihnen sehr.

Gibt es eine andere Frage, die mir in den Sinn kommt... Wie kann ich die Nachrichten aus der Datenbank statt aus der properties-Datei?

  • Blöde Frage: wie sind Sie mit der Einstellung der Locale? Haben Sie konfiguriert ein LocaleResolver? Wie werden Sie übergeben Sie das Gebietsschema, das Sie möchten?
  • Ich bin nicht, ich denke, Frühling ist, wobei es von der browser-Konfiguration. Soll ich das Gebietsschema je auf eine Taste drücken? Nicht sicher, ob es funktionieren würde auf diese Weise.
  • Starten Sie unter oben und geht weiter. Es gibt 3 Dinge, die Sie benötigen 1) eine MessageSource 2) ein LocaleResolver zu bestimmen, für eine bestimmte Anforderung, was Gebietsschema zu verwenden, und (optional) 3) ein LocaleChangeInterceptor so dass Sie, von einer Anfrage, setzen Sie das Gebietsschema in der LocaleResolver.
  • Nein, ich hatte nicht konfigurieren von Gebietsschema-resolver, gonna überprüfen Sie die Anleitung, die Boris an mir vorbei, und ich werde Sie aktualisieren, danke nochmal.
  • Sie können auch prüfen, AcceptHeaderLocaleResolver, das nicht speichern der Locale aber stattdessen liest es aus der Request. Bis Sie...
  • Ich habe versucht, die Anleitung, die Sie übergeben mir, aber es funktioniert nicht für mich und scheint es aufgrund der Thymleaf Vorlagen und ich bin nicht mit JSPs.
  • Die template-engine ist egal - die MessageSource tut. Sie beschließt, mit einem LocaleResolver welches Gebietsschema zu verwenden. Sind Sie sicher, dass Sie festgelegt haben ThymeLeaf zu verwenden, der Frühling MessageSource eher, dass seine eigene?
  • Vielen Dank Boris, ich habe es endlich funktioniert, mein problem war, dass ich nicht definieren MessageSource der richtige Weg, ich Danke Ihnen sehr.

InformationsquelleAutor No One | 2016-04-10
Schreibe einen Kommentar