SpringBootの国際化ガイド
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のにあります。