Leitfaden zur Internationalisierung im Spring Boot

1. Übersicht

In diesem kurzen Tutorial werden wir uns ansehen, wie wir einer Spring Boot-Anwendung Internationalisierung hinzufügen können .

2. Maven-Abhängigkeiten

Für die Entwicklung benötigen wir folgende Abhängigkeit:

 org.springframework.boot spring-boot-starter-thymeleaf 1.5.2.RELEASE 

Die neueste Version von Spring-Boot-Starter-Thymeleaf kann von Maven Central heruntergeladen werden.

3. LocaleResolver

Damit unsere Anwendung feststellen kann, welches Gebietsschema derzeit verwendet wird, müssen wir eine LocaleResolver- Bean hinzufügen :

@Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); slr.setDefaultLocale(Locale.US); return slr; }

Die LocaleResolver- Schnittstelle verfügt über Implementierungen, die das aktuelle Gebietsschema basierend auf der Sitzung, Cookies, dem Accept-Language- Header oder einem festen Wert bestimmen .

In unserem Beispiel haben wir den sitzungsbasierten Resolver SessionLocaleResolver verwendet und ein Standardgebietsschema mit dem Wert US festgelegt .

4. LocaleChangeInterceptor

Als Nächstes müssen wir eine Interceptor-Bean hinzufügen, die basierend auf dem Wert des an eine Anforderung angehängten lang- Parameters zu einem neuen Gebietsschema wechselt :

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

Um wirksam zu werden, muss diese Bean zur Interceptor-Registrierung der Anwendung hinzugefügt werden.

Um dies zu erreichen, muss unsere @ Configuration- Klasse die WebMvcConfigurer- Schnittstelle implementieren und die Methode addInterceptors () überschreiben :

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

5. Definieren der Nachrichtenquellen

Standardmäßig sucht eine Spring Boot-Anwendung im Ordner src / main / resources nach Nachrichtendateien mit Internationalisierungsschlüsseln und -werten.

Die Datei für das Standardgebietsschema hat den Namen messages.properties , und Dateien für jedes Gebietsschema heißen messages_XX.properties , wobei XX der Gebietsschemacode ist.

Die Schlüssel für die zu lokalisierenden Werte müssen in jeder Datei gleich sein und die Werte müssen der Sprache entsprechen, der sie entsprechen.

Wenn in einem bestimmten angeforderten Gebietsschema kein Schlüssel vorhanden ist, wird die Anwendung auf den Standardwert für das Gebietsschema zurückgesetzt.

Definieren wir eine Standardnachrichtendatei für die englische Sprache namens messages.properties :

greeting=Hello! Welcome to our website! lang.change=Change the language lang.eng=English lang.fr=French

Als Nächstes erstellen wir eine Datei mit dem Namen messages_fr.properties für die französische Sprache mit denselben Schlüsseln:

greeting=Bonjour! Bienvenue sur notre site! lang.change=Changez la langue lang.eng=Anglais lang.fr=Francais

6. Controller und HTML-Seite

Erstellen wir eine Controller-Zuordnung, die eine einfache HTML-Seite mit dem Namen international.html zurückgibt, die in zwei verschiedenen Sprachen angezeigt werden soll:

@Controller public class PageController { @GetMapping("/international") public String getInternationalPage() { return "international"; } }

Da wir thymeleaf zum Anzeigen der HTML-Seite verwenden, wird auf die länderspezifischen Werte mit den Schlüsseln mit der Syntax # {key} zugegriffen :

Bei Verwendung von JSP-Dateien lautet die Syntax:

Wenn wir auf die Seite mit den zwei verschiedenen Gebietsschemas zugreifen möchten, müssen wir der URL den Parameter lang in der folgenden Form hinzufügen : / international? Lang = fr

Wenn in der URL kein lang- Parameter vorhanden ist, verwendet die Anwendung das Standardgebietsschema, in unserem Fall das US- Gebietsschema.

Fügen wir unserer HTML-Seite ein Dropdown-Menü mit den beiden Gebietsschemas hinzu, deren Namen auch in unseren Eigenschaftendateien lokalisiert sind:

:     

Anschließend können wir ein jQuery-Skript hinzufügen, das die URL / international mit dem entsprechenden lang- Parameter aufruft , je nachdem, welche Dropdown-Option ausgewählt ist:

   $(document).ready(function() { $("#locales").change(function () { var selectedOption = $('#locales').val(); if (selectedOption != ''){ window.location.replace('international?lang=' + selectedOption); } }); }); 

7. Ausführen der Anwendung

Um unsere Anwendung zu initialisieren, müssen wir die mit @SpringBootApplication kommentierte Hauptklasse hinzufügen :

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

Abhängig vom ausgewählten Gebietsschema wird die Seite beim Ausführen der Anwendung entweder in Englisch oder Französisch angezeigt.

Sehen wir uns die englische Version an:

Und jetzt sehen wir uns die französische Version an:

8. Fazit

In diesem Tutorial haben wir gezeigt, wie wir die Unterstützung für die Internationalisierung in einer Spring Boot-Anwendung nutzen können.

Den vollständigen Quellcode für das Beispiel finden Sie auf GitHub.