Spring Bootの国際化ガイド

Spring Bootの国際化ガイド

1. 概要

このクイックチュートリアルでは、add internationalization to a Spring Boot applicationを実行する方法を見ていきます。

2. Mavenの依存関係

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


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

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}のキーを使用してアクセスします。

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

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

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

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

:

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


7. アプリケーションを実行する

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

@SpringBootApplication
public class InternationalizationApp {

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

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

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

screen shot in English

それでは、フランス語版を見てみましょう。

screen shot in French

8. 結論

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

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