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

の最新バージョンはMavenからダウンロードできます。中央です。


3

LocaleResolver


アプリケーションが現在使用されているロケールを判断できるようにするには、

LocaleResolver

Beanを追加する必要があります。

@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";
    }
}

HTMLページを表示するためにthymeleafを使用しているので、ロケール固有の値は


\ {key} __という構文のキーを使用してアクセスされます。

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

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

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

2つの異なるロケールでページにアクセスしたい場合は、パラメータ

lang

を次の形式でURLに追加する必要があります。


/international?lang = fr

URLに

lang

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

US

ロケールです。

私たちのHTMLファイルにドロップダウンを追加しましょう。その2つのロケールはプロパティファイルにもローカライズされています。

<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

パラメータを指定して

/international

URLを呼び出す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);
    }
}

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

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

リンク:/uploads/piceng.png[]

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

リンク:/uploads/picfr-300×82.png%20300w[]


8結論

このチュートリアルでは、Spring Bootアプリケーションで国際化対応のサポートをどのように使用できるかを示しました。

例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-boot[over on GitHub]にあります。