連載
» 2004年07月31日 00時00分 UPDATE

Strutsを使うWebアプリケーション構築術(7):国際化対応アプリケーションの作成 (2/2)

[山田祥寛,@IT]
前のページへ 1|2       

検証設定ファイルから日本語を取り除く

 次に忘れてならないのは、検証設定ファイル(validation.xml)に含まれている日本語の処理です。第5回の説明では、argX要素(Xは0〜3)のkey属性にエラーメッセージに埋め込むパラメータ値そのものを指定していましたが、resource属性を“true”に設定すれば、この部分を「メッセージリソース(プロパティファイル)のキー名」で指定することができます。以下の赤字部分に注目してください。

validation.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE form-validation PUBLIC
  "-//Apache Software Foundation//DTD Commons Validator Rules
 Configuration 1.0//EN"
 "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
  <formset>
    <form name="BookUpdateForm">
      <field property="isbn" depends="required,mask">
        <arg0 key="books.header.isbn" resource="true" />
        <var>
          <var-name>mask</var-name>
          <var-value>[0-9]{1,5}-[0-9]{1,7}-[0-9]{1,7}-[0-9A-Z]{1}
</var-value>
        </var>
      </field>
      <field property="title" depends="required,maxlength">
        <arg0 key="books.header.title" resource="true" />
        <arg1 name="maxlength" key="${var:maxlength}" resource=
"false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>100</var-value>
        </var>
      </field>
      <field property="author" depends="required,maxlength">
        <arg0 key="books.header.author" resource="true" />
        <arg1 name="maxlength" key="${var:maxlength}" resource=
"false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>20</var-value>
        </var>
      </field>
      <field property="price" depends="required,integer">
        <arg0 key="books.header.price" resource="true" />
      </field>
      <field property="publish" depends="required,maxlength">
        <arg0 key="books.header.publish" resource="true" />
        <arg1 name="maxlength" key="${var:maxlength}" resource=
"false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>100</var-value>
        </var>
      </field>
      <field property="published" depends="required">
        <arg0 key="books.header.published" resource="true" />
      </field>
    </form>
  </formset>
</form-validation>

言語依存要素をメッセージリソースに集約する

 さて、これでアプリケーションから言語依存の要素を取り除く作業が完了しました。次のステップとして、この言語依存の要素が取り除かれた各ファイルから参照されるリソースを用意する必要があります。

 ここで再び登場するのが、第5回「Validatorによる妥当性検証の実現(前編)」でも紹介したプロパティファイル(メッセージリソース)です。国際化対応といっても、Strutsでは言語表示を切り替えるために難しい制御を記述する必要はありません。ただ、対応したい言語の数(本稿の例では日本語と英語の2つ)だけ、メッセージリソースを用意するだけです。

 以下に、JSPファイルと検証設定ファイルから外部化されたキーを、プロパティファイルに漏れのないように書き出します。

ApplicationResources_ja.properties.sjis
errors.required ={0}はかならず入力してください。
errors.maxlength={0}は{1}文字以内で入力してください。
errors.invalid ={0}は正しい形式で入力してください。
books.title=書籍情報更新・削除
books.title.new=新規登録
books.header.isbn=ISBN番号
books.header.author=著者名
books.header.price=価格
books.header.publish=出版社
books.header.published=配本日
books.header.currency=円
books.header.submit=保存
books.header.reset=取消

注意:第5回でも紹介したように、ファイル名の拡張子を「.sjis」としているのは、このファイルを後からエスケープ変換するためです。アプリケーション上に配置するのは、エスケープ変換した後のファイルなので、エスケープの前後でファイル名が重複しないよう、ここでは仮に「.sjis」という拡張子を付加しています。もちろん、これは一時ファイル的な扱いなので、拡張子は自由に決めて構いません。

ApplicationResources.properties
errors.required ={0} is required.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid ={0} is invalid.
books.title=Books Information Update/Delete
books.title.new=New Info.
books.header.isbn=ISBN Code
books.header.author=Author
books.header.price=Price
books.header.publish=Publish
books.header.published=Publish Date
books.header.currency=Yen
books.header.submit=Save
books.header.reset=Clear

 メッセージリソースの記法やアプリケーション内で有効にする方法については、すでに第5回で紹介したとおりです。ここでは、国際化対応に特化した部分にだけフォーカスすることにします。

 国際化に当たって注意すべきことは、プロパティファイルの命名規則だけです。プロパティファイルの命名は、以下のようなルールに従って行う必要があります。

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

 言語コード、国コードとして指定可能な主な文字列は、以下のとおりです。バリアントコードには、言語/国コードでは指定できない地域を識別するためのコード(例えば、「EURO(ユーロ)」など)を指定するために使用します。

主な言語コード
コード 意味
ja 日本語
en 英語
fr フランス語
de ドイツ語
zh 中国語
ru ロシア語

主な国コード
コード 意味
JP 日本
US アメリカ合衆国
BK 英国
AU オーストラリア
FR フランス
DE ドイツ連邦共和国
CN 中華人民共和国
RU ロシア連邦

 本稿では、言語コードでメッセージリソースを指定していますので、メッセージリソースのファイル名は、例えば「ApplicationResources_ja.properties」のようになります。なお、このファイル名のベース名は「ApplicationResources」です。

 なお、「ApplicationResources.properties」のように、言語コードも省略されたベース名だけのメッセージリソースは「デフォルトのメッセージリソース」と見なされます。Strutsは、クライアント上で設定された言語設定によって、ベース名の等しい複数のメッセージリソースの中から適切なリソースを選択します。しかし、もしも該当する言語(国)コードに属するリソースが存在しない場合には、デフォルトのメッセージリソースが優先して使用されます。デフォルトのメッセージリソースは任意のファイルですが、想定しない言語設定のクライアントがアクセスしてきた場合に備え、最低限の表示を保証するために、設定しておくのが原則です。

 以上で、国際化対応の手続きは完了です。ブラウザの言語設定を「日本語(ja)」から「英語(en)」に変更したうえで、アプリケーションにアクセスしてみましょう。言語設定の変更は例えば、クライアントブラウザがInternet Explorerである場合には、[インターネットオプション]の[全般]タブから[言語...]を選択します。

[言語の優先順位]ダイアログ [言語の優先順位]ダイアログ

 ここで言語設定を入れ替えた後、本稿冒頭の実行例のように日本語と英語の表示が切り替われば成功です。

まとめ

 以上、本連載ではStrutsのごく基本的な機能部分にフォーカスして、アプリケーションを構築するための方法を紹介してきました。ただ、本連載で紹介したのは、あくまでもStrutsが提供する豊富な機能のごく一部分にすぎません。Strutsにはまだまだ実践の場で活用できるさまざまな機能が備わっています。さらに、今後、1.x、2.0へのバージョンアップでもたくさんの機能追加が予定されています。

 本連載は今回で終了になりますが、本稿で紹介し切れなかったトピックスについては、拙著「10日でおぼえるJakarta入門教室」などを参考にしていただければ幸いです。また、今後、Java Solutionフォーラム内のJavaに関するTIPS集「Java Tips」でも有用なテクニックを随時紹介していきます。どうぞお楽しみに。

前のページへ 1|2       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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