1. 概要

このクイックチュートリアルでは、Spring Bootアプリケーションに国際化を追加する方法を見ていきます。

2. Mavenの依存関係

開発には、次の依存関係が必要です。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>

spring-boot-starter-thymeleaf の最新バージョンは、MavenCentralからダウンロードできます。

3. LocaleResolver

アプリケーションが現在使用されているロケールを判別できるようにするには、LocaleResolverBeanを追加する必要があります。

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

LocaleResolver インターフェースには、セッション、Cookie、 Accept-Language ヘッダー、または固定値に基づいて現在のロケールを決定する実装があります。

この例では、セッションベースのリゾルバー SessionLocaleResolver を使用し、デフォルトのロケールを値USで設定しました。

4. LocaleChangeInterceptor

次に、リクエストに追加されたlangパラメーターの値に基づいて新しいロケールに切り替わるインターセプターBeanを追加する必要があります。

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

有効にするには、このbeanをアプリケーションのインターセプターレジストリに追加する必要があります。

これを実現するには、@ConfigurationクラスがWebMvcConfigurerインターフェイスを実装し、 addInterceptors()メソッドをオーバーライドする必要があります。

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

5. メッセージソースの定義

デフォルトでは、Spring Bootアプリケーションは、 src / main /resourcesフォルダー内の国際化キーと値を含むメッセージファイルを検索します。

デフォルトロケールのファイルの名前はmessages.propertiesで、各ロケールのファイルの名前は messages_XX.properties です。ここで、XXはロケールコードです。 。

ローカライズされる値のキーは、対応する言語に適した値で、すべてのファイルで同じである必要があります。

要求された特定のロケールにキーが存在しない場合、アプリケーションはデフォルトのロケール値にフォールバックします。

messages.propertiesという英語のデフォルトのメッセージファイルを定義しましょう。

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

次に、同じキーを使用して、フランス語用のmessages_fr.propertiesというファイルを作成しましょう。

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

6. コントローラとHTMLページ

2つの異なる言語で表示したいinternational.htmlという単純なHTMLページを返すコントローラーマッピングを作成しましょう。

@Controller
public class PageController {

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

thymeleafを使用してHTMLページを表示しているため、ロケール固有の値には、構文#{key}のキーを使用してアクセスします。

<h1 th:text="#{greeting}"></h1>

JSPファイルを使用する場合、構文は次のとおりです。

<h1><spring:message code="greeting" text="default"/></h1>

2つの異なるロケールでページにアクセスする場合は、パラメーターlangを次の形式のURLに追加する必要があります。/international?lang = fr

URLにlangパラメータが存在しない場合、アプリケーションはデフォルトのロケール(この場合は US locale)を使用します。

プロパティファイルでも名前がローカライズされている2つのロケールを含むドロップダウンをHTMLページに追加しましょう。

<span th:text="#{lang.change}"></span>:
<select id="locales">
    <option value=""></option>
    <option value="en" th:text="#{lang.eng}"></option>
    <option value="fr" th:text="#{lang.fr}"></option>
</select>

次に、選択したドロップダウンオプションに応じて、それぞれのlangパラメーターを使用して/internationalURLを呼び出すjQueryスクリプトを追加できます。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">
</script>
<script type="text/javascript">
$(document).ready(function() {
    $("#locales").change(function () {
        var selectedOption = $('#locales').val();
        if (selectedOption != ''){
            window.location.replace('international?lang=' + selectedOption);
        }
    });
});
</script>

7. アプリケーションの実行

アプリケーションを初期化するには、@SpringBootApplicationで注釈が付けられたメインクラスを追加する必要があります。

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

選択したロケールに応じて、アプリケーションの実行時に英語またはフランス語でページが表示されます。

英語版を見てみましょう:

そして今、フランス語版を見てみましょう:

8. 結論

このチュートリアルでは、SpringBootアプリケーションで国際化のサポートを使用する方法を示しました。

この例の完全なソースコードは、GitHubにあります。