Spring MVC 国際化対応
を、以下のサイトを参考に行う。・・・も、若干手こずったので手順をメモしておく。
- Spring 3 MVC: Internationalization & Localization Tutorial with Example
- SpringMVCをはじめる⑤ ~ ロケールを使用する。
- Have mvc:annotation-driven Setup I18N
プロパティファイルを作成し、WEB-INF/i18n フォルダに置く
message_[言語].properties ファイルを作成
- messages_en.properties
- messages_ja.properties
英語用 WEB-INF/i18n/messages_en.properties
label.firstname=First Name
日本語用 WEB-INF/i18n/messages_ja.properties
日本語などASCII文字以外を含む場合、native2ascii でユニコードに変換する
label.firstname=\u540d\u524d
Spring 設定ファイルの作成
国際化対応用の設定ファイルを作成 i18n.xml
Spring MVC 3.05 で確認していたのだが、上記サイトなどを参考にして試行錯誤の後に動くようになった設定。
- DefaultAnnotationHandlerMapping と mvc:annotation-dricen にコンフリクトの問題があるようだ
- mvc:annotation-driven の記述が必要
- locationChangeInterceptor の paramName で言語切り替えのパラメータを指定(デフォルトは locale) ?lang=ja 等を付加して切り替え
- messageSource の basename でメッセージプロパティファイルのパターンを指定
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <mvc:annotation-driven/> <mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang" /> </bean> </mvc:interceptors> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="WEB-INF/i18n/messages"/> <property name="defaultEncoding" value="UTF-8" /> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="cookieName" value="locale" /> </bean> </beans>
国際化対応用設定をインポートする root-context.xml
上記の設定を、root-context.xml(web.xml にて、DispatcherServlet の contextConfigLocation に指定されている設定ファイル) からインポートする。
<import resource="i18n.xml"/>
タグライブラリが見つからないエラーとなる場合
実行すると、タグライブラリが見つからない旨のエラーとなった(本来はクラスパスの TLDを自動で認識してくれるはずなのかな?) が、以下の手順で明示的に見つかる場所においてあげることで回避。(クラスローダが異なるのが問題っぽい)
org.springframework.web.servlet を含むJARを展開すると、 /META-INF/spring.tld が存在するので、/WEB-INF へコピーしておき、web.xml に以下の記述を追加する。
jsp-config の記述を忘れないように。
<web-app> : <jsp-config> <taglib> <taglib-uri>http://www.springframework.org/tags</taglib-uri> <taglib-location>/WEB-INF/spring.tld</taglib-location> </taglib> </jsp-config>
JSPからの利用方法
タグライブラリの宣言をファイル先頭で行う
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
JSPで出力する
<spring:message code="label.firstname"/>
JSPで変数に設定(JSTL の c:set EL式や、JSTLから利用できるように)
<spring:message code="label.firstname" var="firstname" scope="page"/>
とすると
${firstname}
で利用できる。
ブラウザの言語を変更する
ちなみに、IEの言語を設定するには、インターネットオプションから、言語を選択する
この本は、非常にわかりやすくて良かったけど、国際化対応の記述は
なかったなー
SpringによるWebアプリケーションスーパーサンプル 第2版
英語だけど、Spring Security 周りの記述がわかりやすい。しかも電子書籍が無料でダウンロードできる権利付きでお得。