前回「クラスライブラリを攻略『基本クラス編』」では「Javaクラスライブラリ」の中でも最も基本的な機能を提供するjava.langパッケージについて解説しました。今回は、国際化機能やカレンダー、配列などの機能を提供するjava.utilパッケージ、正規表現機能を提供するjava.util.regexパッケージなどについてご紹介することにしましょう。
リソースファイルで国際化ページを作成する―ResourceBundle/Localeクラス
昨今では日本語/英語対応をうたうサイトも決して珍しくなくなってきました。ことに、ビジネスサイトに至っては、日本語にだけしか対応していないページの方がむしろ珍しいくらいなのではないでしょうか。
このようなバイリンガルサイトを構築する場合、旧来のように各国語単位にページを作成していたのではキリがありません。特に動的サイトの場合、プログラムの改訂が入る都度、対応言語の数だけ修正を行わなければならないとしたら、これは大変な手間となります。
そこで、JSP(Java)の世界では、ResourceBundleというクラスを提供することで、バイリンガルサイトの構築を容易にしています。ResourceBundleクラスは、あらかじめプロパティファイル(「.properties」ファイル)として言語単位のリソース情報を外部ファイル化しておくことで、あとは動的に適切なリソースを取得する手段を提供してくれます。
例えば、今回のサンプルでは日本語、英語のメッセージをブラウザの言語設定に応じて切り替えてみることにします。日本語、英語など言語に依存する文字列情報は「.jsp」ファイルには記述しません。「.properties」ファイルとして外部ファイル化し、「.jsp」ファイルからはただ引用するだけです。
これでたとえフランス語、ドイツ語と対応言語が増えたとしても、あるいは「.jsp」ファイルに改訂が入ったとしても、ただプロパティファイルを追加するだけで容易にマルチ言語対応が可能となります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ロジックの概要
HttpServletRequest#getLocaleメソッドで取得したクライアントのロケール情報に応じて、プロパティファイルをコールします。
ResourceBundle#getBundleメソッドは、第1引数にプロパティファイルのベース名、第2引数にロケールを指定することで、適切なプロパティファイルを有効にします。プロパティファイル名は「ベース名[_国コード[_地域コード[_バリアントコード]]].properties」というファイル名から構成されます。
ResourceBundle#getBundleメソッドは、有効化されたプロパティファイルから指定されたプロパティ値を引用します。プロパティファイルの中身は「プロパティ名=値」の組み合わせからなり、2つ以上のプロパティを記述する場合には改行区切りで追記することができます。
プロパティファイルは、アプリケーションフォルダ配下の「/WEB-INF/classes」フォルダに配置します。
プロパティファイルに日本語が含まれる場合
プロパティファイルに日本語(2バイト文字)が含まれる場合、そのまま使用することはできません。コマンドラインからnative2asciiツールを使って、Unicodeエスケープする必要があります。
エスケープ前のファイル名を「rs_ja.properties.sjis」、エスケープ後のファイル名を「rs_ja.properties」とした場合、以下のようにします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
native2asciiコマンドのパスは環境によって異なる可能性がありますので、注意してください。
ResourceBundleクラスを用いることで、簡単に国際化対応ページを作成することができます。国際化のポイントは「.jsp」ファイルから言語依存要素を取り除き、「.properties」ファイルに集約してしまうことです。
Copyright © ITmedia, Inc. All Rights Reserved.