リソースファイルで多国語対応のサイトを構築するJavaTips 〜JSP/サーブレット編

» 2003年11月18日 10時00分 公開
[山田祥寛@IT]

 昨今ではサイトを2カ国語以上に対応させるケースも増えてきました。特にビジネスサイトなどでは最低でも日本語・英語、場合によっては中国語・韓国語などにも対応するというケースが少なくありません。

 そのようなときに、言語ごとにコードを記述していたらきりがないでしょう。開発時であればコードをコピー&ペーストしつつ、文字列部分だけを言語ごとに置き換えてやるという方法も(あるいは)あるかもしれません。しかし、ページに変更が発生した場合には言語の数だけコードを変更してやらなければいけませんし、追加時にも同様です。これはサイト規模に比例して、幾何級数的に増大する負荷でもあります。

 そこで、リソースファイルの登場なのです。リソースファイルとこれを制御するResourceBundleクラスを利用することで、コード部分は共通で、言語・地域依存のリソース(主に文字列)だけを外部ファイルで管理することが可能になります。

解説

 リソースファイル制御用の「.jsp」ファイルとリソースファイル(「.properties」ファイル)を以下のように作成します。

bundle.jsp
<%@ page contentType="text/html; charset=Shift_JIS" import="java.util.*" %>
<%
Locale objLcl=request.getLocale();
if(objLcl==null){objLcl=Locale.ENGLISH;}
ResourceBundle objRb=ResourceBundle.getBundle("rs",objLcl);
out.print(objRb.getString("sample.title"));
%>
rs.properties
sample.title=This is English screen.
rs_ja.properties
sample.title=日本語の画面です。

 bundle.jspでは、HttpServetRequest#getLocaleメソッドで取得したクライアントのロケール(取得できなかった場合はENGLISH)に基づいて、リソースファイルを呼び出しています。ResourceBundleクラスは、getBundleメソッドで指定されたりソース(rs_*.properties)を有効化し、getStringメソッドを使って指定されたプロパティ名に対応するリソース(文字列)を取得します。

 なお、リソースファイルは以下の規則で命名する必要がある点に注意してください。

 リソース名[_言語コード[_国コード[_バリアントコード]]].properties

 getBundleメソッドで指定するのは、このリソース名の部分だけです。あとは、ResourceBundleクラスがカレントのロケールに基づく言語・国・バリアント(地域)コードに従って、適切なリソースファイルを有効化します。なお、合致するリソースが存在しない場合、デフォルトのリソースファイル(リソース名.properties)をロードします(本例の場合はrs.properties)。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。