国際化¶Caution本バージョンの内容は既に古くなっています。最新のガイドラインはこちらからご参照ください。国際化とは、アプリケーションで表示するラベルやメッセージを、特定の言語のみに固定せず、ロケール(Locale)と呼ばれる言語や国・地域を表す単位の指定により、複数言語の切替に対応させることである。本節では、画面に表示するメッセージを国際化する方法について説明する。国際化するためには、以下の対応が必要となる。画面内のテキスト要素(コード値の名称、メッセージ、GUIコンポーネントのラベルなど)は、プログラム内でハードコードせずに、プロパティファイルなどの外部定義から取得する。クライアントからLocaleを指定する仕組みを提供する。クライアントからLocaleを指定する方法は通りである。標準のリクエストヘッダを使用する。(ブラウザの言語設定で指定)リクエストパラメータを使用してCookieに保存する。リクエストパラメータを使用してSessionに保存する。Localeの切り替えイメージを以下に示す。MVCのControllerを使用してエラー画面に遷移すること。MVCを介さずエラー画面に直接遷移した場合、メッセージが意図した言語で出力されない場合がある。Tip国際化はi18nという略称が広く知られている。18文字があることに起因する。画面に表示するメッセージを国際化する場合は、メッセージを管理するためのコンポーネント(MessageSource)として、org.springframework.context.support.ResourceBundleMessageSourceorg.springframework.context.support.ReloadableResourceBundleMessageSourceのどちらかを使用する。ここでは、ResourceBundleMessageSourceを使用する場合の設定例を紹介する。説明(1)プロパティファイルの基底名として、i18n/application-messagesを指定する。国際化対応を行う場合、i18nディレクトリ配下にメッセージプロパティファイルを格納することを推奨する。プロパティファイルの格納例プロパティファイルは、以下のルールに則って作成する。Locale毎のファイル名は、application-messages_XX.propertiesという形式で作成する。存在しない場合、MessageSourceからメッセージを取得できず、JSPにメッセージを設定する際に、JspTagExceptionが発生する。application-messages.propertiesに定義するメッセージは、デフォルトで使用する言語で作成する。上記ルールに則ってプロパティファイルを作成すると、以下のような動作になる。クライアントのLocaleがzhの場合、application-messages_zh.propertiesが使用される。クライアントのLocaleがjaの場合、application-messages_ja.propertiesが使用される。クライアントのLocaleに対応するプロパティファイルが存在しない場合、デフォルトとして、application-messages.propertiesが使用される。(ファイル名に”_XX”部分が存在しないファイル)NoteLocaleの判別方法は、以下の順番で該当するLocaleのプロパティファイルが発見されるまで、Localeを確認していくことである。クライアントから指定されたLocaleのプロパティファイルが存在しない場合、デフォルトのプロパティファイルが使用されるとの誤解が挙げられる。実際は、次にアプリケーションサーバに指定されているLocaleを確認して、それでも該当するLocaleのプロパティファイルが見つからない場合に、デフォルトのプロパティファイルが使用されるので注意する。AcceptHeaderLocaleResolverの設定¶ブラウザの設定を使用してLocaleを切り替える場合は、AcceptHeaderLocaleResolverを使用する。このLocaleResolverを使用すると、リクエスト毎に設定されるHTTPヘッダー(”accept-language”)に指定されているLocaleが使用される。使用されるため、LocaleResolverの設定は、省略することもできる。以下に、メッセージの設定例を示す。以下に、JSPの実装例を示す。説明(1)JSPで出力する場合、Springのタグライブラリを用いてメッセージ出力を行うため、カスタムタグを定義する必要がある。