メッセージの多言語対応

今回のお題

今回のお題はメッセージの多言語対応です。

以前にプロパティファイルを用いてメッセージを標準化する方法を解説しました。

今回は、言語ごとにメッセージファイルを用意することで、ブラウザの言語設定に応じて表示されるメッセージを切り替える方法をご紹介します。

目次

  • ファイルの用意
  • ファイルの記述
  • サービスの編集
  • コントローラの編集
  • 変数localeについて

ファイルの用意

前回は、messages.propertiesというファイルを用意してその中に日本語用のメッセージを書きました。

今回はmessages_en.propertiesというファイルをあたらに作成し、その中に英語用のメッセージを書いていきます。

ファイルの記述

ファイルの書き方は、日本語の時と同じです。

message_1=xxxxxx

message_2=yyyyy

などと右側の部分だけを英語に変更すればOKです。

サービスの編集

前回までの作業で、プロパティファイル内のメッセージをサービスから参照できるようになっています。

今回は設定言語によって参照するファイルが切り替わるようにしたいので、どの言語がブラウザに設定されているのかを引数として渡せるようにします。

 

以下、Serviceファイルの変更点です。

// Localeのimport

import java.util.Locale;

// メソッドの引数としてLocaleを設定

public Map<Integer, String> getAlertMap(Locale locale){
    Map<Integer, String> alertMap = new LinkedHashMap();

    String message1 = messageSource.getMessage("message_1", null, locale);

    String message2 = messageSource.getMessage("message_2", null, locale);

   .....以下、同じなので省略........

}

これで、設定言語に応じて参照先のプロパティファイルが切り替わるようになりました。

次に、このサービスを呼び出しているコントローラを編集します。

コントローラの編集

public String getSignup(Model model, Locale locale){
    Map<Integer, String> alertMap = service.getAlertMap(locale);

    .....省略.....

}

補足:引数localeについて

サービス及びコントローラで引数として設定したlocaleですが、これに関する情報はブラウザの設定から自動で拾ってくれるみたいです。