2005-05-17
_ 多言語対応
Strutsで多言語対応する場合の覚書.まずJSPの文字セットを変更.JSPの文字セットはpageディレクティブのcontentType属性を使用して定義する.多言語対応をサポートする場合は,UTF-8を指定する.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="SHIFT_JIS" %>
あとはlocaleにあわせた言語リソースを準備する.日本語ならApplicationResources_jp.properties.これで表示に関する部分はほぼ問題なく多言語対応できるはず.
ブラウザから文字列をアプリケーションサーバ側に渡す際に少し工夫がいる.アプリケーションサーバはブラウザの言語設定をもとにリクエストされた文字列の文字コードを判断する.多言語対応時はリクエストで送信されるメッセージはUTF-8になるので,例えば言語設定が日本語であった場合,アプリケーションサーバ側ではShift-JISなどでリクエストが送信されたと判断する.
処理する文字コードが異なれば,当然サーバで扱うその文字列は化けてしまいます.そこでリクエストされた文字列の文字コードを指定するようFilterをかませる.Filterはjavax.servlet.Filterクラスをインプリメント.
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class encodingFilter implements Filter { public void destroy() { } public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { } }
簡単に書くとこんな感じ.あとはweb.xmlにも追記が必要.
<filter> <filter-name>encodingFilter</filter-name> <display-name>encodingFilter</display-name> <filter-class>encodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <servlet-name>action</servlet-name> </filter-mapping>
ひとまずこの辺で簡単ではあるけど対応できているはず.一応,ブラウザの言語設定を英語,日本語,中国語で試してみたけど問題