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);
}
}
選択したロケールに応じて、アプリケーションの実行時にページを英語またはフランス語で表示します。
英語版を見てみましょう:
それでは、フランス語版を見てみましょう。
8. 結論
このチュートリアルでは、Spring Bootアプリケーションで国際化のサポートを使用する方法を示しました。
この例の完全なソースコードはover on GitHubにあります。