【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷


   JSP/サーブレット編
多国語対応のサイトを構築する(JSTL編)

山田祥寛
2005/2/1

 「リソースファイルで多国語対応のサイトを構築する」では、リソースファイルとjava.util.ResourceBundleクラスを用いて、ソースコードから地域依存のデータ(文字列)を分離する「国際化対応」の手法を紹介しました。しかし、決まりきったリソースファイルの読み込みとプロパティ値取得のために、いちいちスクリプトレットを記述しなければならないのは、あまり好ましくありません。

 そこで本稿では、JSTL(JSP Standard TagLibrary)のi18n(Internationalization)タグライブラリに用意された<fmt:message>タグを利用して、スクリプティング要素を使わずに国際化対応のJSPページを作成する方法を紹介します。なお、JSTLタグライブラリのインストール、利用方法については、「個別のJSPページでJSTL宣言を省略する」を参照してください。

■解説

(1)リソースファイルを作成する

 まずは「.jsp」ファイルから参照するリソースファイルを作成します(リスト1リスト2)。

リスト1 msg_ja.properties.sjis
sample.title=国際化対応サンプル
sample.msg=サンプルです

リスト2 msg_en.properties
sample.title=Internationalization Sample
sample.msg=This is sample.

 なお、リソースファイルに日本語(2バイト文字)が含まれている場合には、native2asciiコマンドを利用して、あらかじめUnicodeエスケープしておく必要がある点に注意してください。上の例でファイル名の拡張子を「.sjis」としているのは、エスケープの前後でファイル名が重複しないようにするためです。ここでは仮に「.sjis」という拡張子を付加していますが、これは一時ファイルとしての処理なので、拡張子は自由に決めて構いません。Unicodeエスケープの結果、最終的に「msg_ja.properties」というファイルを作成します。なお、Unicodeエスケープの詳細については、「リソースファイルの内容が文字化けする場合には」を参照してください。

 これらのプロパティファイルは「WEB-INF/classes」フォルダに配置します。

(2)デプロイメント・ディスクリプタに基本情報を設定する

 i18nタグライブラリを利用する場合には、あらかじめデプロイメント・ディスクリプタ(web.xml)に、使用するリソースファイルのベース名やロケールなどの基本的な設定情報を追加しておくと便利です。web.xmlの記述は必須ではありませんが、その場合、個々のJSPページに<fmt:setBundle>(<fmt:bundle>)要素などを記述する必要があります。

リスト3 web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
  version="2.4">
  ……中略……
  <!--デフォルトのロケール-->
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
    <param-value>ja_JP</param-value>
  </context-param>
  <!--指定されたロケールに対応するリソースファイルが存在しない場合に
      採用される代替のロケール-->

  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
    <param-value>ja_JP</param-value>
  </context-param>
  <!--デフォルトのリソースファイル(ベース名)-->
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>msg</param-value>
  </context-param>
  ……中略……
</web-app>

(3)JSPページを用意する

 最後にリソースファイルを利用するJSPページを記述してみましょう。

リスト4 message.jsp
<fmt:setLocale value="${pageContext.request.locale.language}" />
<html>
<head>
<title><fmt:message key="sample.title" /></title>
</head>
<body>
<fmt:message key="sample.msg" />
</body>
</html>
注:本稿では、「個別のJSPページでJSTL宣言を省略する」の設定が完了していることを前提とし、一連のディレクティヴ記述を省略しています。

 <fmt:setLocale>要素では、現在のページで使用するロケールを設定します。式言語の「${pageContext.request.locale.language}」はHttpServletRequest#getLocaleメソッドと同意です。つまり、クライアントのロケール設定に基づいて、ページのロケールを設定しているわけです。あとは、<fmt:message>要素を指定するだけで、対応するキーの値を取得することができます。

 ブラウザから言語設定を変更し、最も優先順位の高いロケールの言語が表示されれば成功です。

言語設定によって表示が動的に切り替わる。日本語を選択した場合

言語設定によって表示が動的に切り替わる。西ヨーロッパ言語を選択した場合

 

「Java TIPS」

ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?