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-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 einLocaleResolver
? 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) einLocaleResolver
zu bestimmen, für eine bestimmte Anforderung, was Gebietsschema zu verwenden, und (optional) 3) einLocaleChangeInterceptor
so dass Sie, von einer Anfrage, setzen Sie das Gebietsschema in derLocaleResolver
. - 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 derLocale
aber stattdessen liest es aus derRequest
. 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 einemLocaleResolver
welches Gebietsschema zu verwenden. Sind Sie sicher, dass Sie festgelegt habenThymeLeaf
zu verwenden, der FrühlingMessageSource
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte Ihre Anwendung erstreckt sich WebMvcConfigurerAdapter
Dann auf browser können Sie die Sprache wechseln mit param lang
Beispiel: http://localhost:1111/?lang=kh die messages_kh.Eigenschaften speichern wird der Inhalt des Khmer-Sprache.