Leitfaden zur Internationalisierung in Spring Boot

Leitfaden zur Internationalisierung im Frühjahr Boot

1. Überblick

In diesem kurzen Tutorial werden wir uns ansehen, wie wiradd internationalization to a Spring Boot application 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 vonspring-boot-starter-thymeleaf kann von Maven Central heruntergeladen werden.

3. LocaleResolver

Damit unsere Anwendung bestimmen kann, welches Gebietsschema derzeit verwendet wird, müssen wir eineLocaleResolver-Bean hinzufügen:

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

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

In unserem Beispiel haben wir den sitzungsbasierten ResolverSessionLocaleResolver verwendet und ein Standardgebietsschema mit dem WertUS festgelegt.

4. LocaleChangeInterceptor

Als Nächstes müssen wir eine Interceptor-Bean hinzufügen, die basierend auf dem Wert des Parameterslang, der an eine Anforderung angehängt ist, 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 Klasse@Configurationdie SchnittstelleWebMvcConfigurerimplementieren und die MethodeaddInterceptors()überschreiben:

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

5. Definieren der Nachrichtenquellen

Standardmäßig sucht eine Spring Boot-Anwendung im Ordnersrc/main/resourcesnach Nachrichtendateien mit Internationalisierungsschlüsseln und -werten.

Die Datei für das Standardgebietsschema hat den Namenmessages.properties, und die Dateien für jedes Gebietsschema heißenmessages_XX.properties, wobeiXX der Gebietsschemacode ist.

Die Schlüssel für die Werte, die lokalisiert werden, müssen in jeder Datei gleich sein, wobei die Werte 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 mit dem Namenmessages.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 Namenmessages_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 Nameninternational.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 verwenden, um die HTML-Seite anzuzeigen, 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 Parameterlang in der folgenden Form hinzufügen:/international?lang=fr

Wenn in der URL keinlang-Parameter vorhanden ist, verwendet die Anwendung das Standardgebietsschema, in unserem Fall das GebietsschemaUS.

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 von/internationalmit dem entsprechenden Parameter vonlangaufruft, je nachdem, welche Dropdown-Option ausgewählt ist:


7. Ausführen der Anwendung

Um unsere Anwendung zu initialisieren, müssen wir die mit@SpringBootApplication versehene 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:

screen shot in English

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

screen shot in French

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.

Der vollständige Quellcode für das Beispiel istover on GitHub.