ヘッダーをスキップ
Oracle Application Serverグローバリゼーション・ガイド
10gリリース3(10.1.3.1.0)
B31838-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

7 Oracle Application Serverの多言語デモ

この章では、Oracle Application Serverに添付されているWorld-of-Booksについて説明します。このデモでは、Oracle Globalization Development Kit(GDK)を使用しています。

この章の項目は次のとおりです。

7.1 World-of-Booksデモの説明

World-of-Books(WOB)デモは、多言語Webアプリケーションを記述して、Oracle Application ServerのJ2EEコンテナにデプロイする方法を例示します。このアプリケーションは、次のWebサイトで構成されます。

オンライン書店は、顧客と対話する形式の多言語Webアプリケーションです。オンライン書店では、顧客が書籍を閲覧して価格を確認し注文を出すことができます。このアプリケーションは、HTTP接続によって注文をXML文書としてサプライヤに送信します。オンライン書籍サプライヤの管理サイトは、書籍サプライヤが書店から注文を受けて、注文状況レポートを書店に送り、新刊情報を書店に案内するために使用するWebアプリケーションです。

オンライン書店は60か国語をサポートします。これらのロケールの顧客は、自分の言語と文化的慣習に従ってオンライン書店を使用できます。オンライン書籍サプライヤの管理サイトは、英語専用です。

7.2 World-of-Booksデモのアーキテクチャと設計

WOBデモでは、顧客が様々なロケールを設定できます。このデモは、Javaサーブレット、Java BeanおよびJavaServer Pages(JSP)を使用して、主にJavaで記述されています。このデモは、Oracle GDK、XML、JDBCおよびOracleデータベースで使用可能なUnicode機能を使用して、多言語データおよび多言語ユーザー・インタフェースをサポートします。

この項の項目は次のとおりです。

7.2.1 World-of-Booksのアーキテクチャ

図7-1に、WOBデモのアーキテクチャを示します。

図7-1 WOBのアーキテクチャ

WOBのアーキテクチャ
「図7-1 WOBのアーキテクチャ」の説明

アプリケーション・アーキテクチャは、次のように要約することができます。

  • JSPは、UTF-8でエンコードされたHTMLページでコンテンツを動的に生成します。

  • JavaサーブレットとJava Beanがビジネス・ロジックを実装します。

  • Oracleデータベースには、書籍と顧客に関する情報が格納されます。

    • Oracle Textによって、ロケールに依存した、書籍の内容に対する完全テキスト検索が可能になります。

    • SQLのNVARCHAR2データ型には、多言語書籍に関する情報が格納されます。

  • Oracle JDBCドライバ(OCIまたはシン・ドライバ)は、Oracleデータベースに格納されたUnicodeデータにアクセスします。ターゲット列がSQLのCHARデータ型である場合、データはUTF-8でエンコード可能であり、ターゲット列がSQLのNCHARデータ型である場合、データはUTF-16でエンコード可能です。

  • オンライン書店と書籍サプライヤ間の通信用の文書フォーマットは、UTF-8でエンコードされたXMLです。

図7-1は、Oracle Application ServeでのWOBアプリケーションを示しています。WOBアプリケーションの処理用キャラクタ・セットは、UTF-16です。このアプリケーションは、XMLメッセージを使用して、中国語の書籍サプライヤや多言語書籍のサプライヤと通信します。XMLメッセージは、UTF-8キャラクタ・セットでエンコードされます。英語、日本語およびドイツ語を使用する顧客は、インターネットを経由してWOBアプリケーションに接続します。このアプリケーションは、すべての顧客にUTF-8キャラクタ・セットでエンコードされたHTMLページを提供します。

7.2.2 World-of-Booksの設計

表7-1は、WOBアプリケーションの大部分のグローバリゼーション機能を持つJavaプログラムを示しています。このプログラムは、$WOB_HOME/src/oracle/demo/wob2/wobディレクトリ内にあります。

表7-1 World-of-Booksアプリケーションのグローバリゼーション機能を持つJavaプログラム

Javaプログラム 目的

beans/LocalizationContext.java

特定のユーザー・セッションのロケールに依存するメソッドを含みます。

ApplicationLocales.java

Oracle GDK構成ファイルに構成されているアプリケーションのロケールに基づいて、便利なメソッドを提供します。


LocalizationContext Beanは、Oracle GDKを使用して、ロケールに依存する動作をWOBアプリケーションに公開します。Oracle GDKには、有効な多言語Webアプリケーションを構築するためのフレームワークが用意されています。JavaのApplicationLocalesクラスでは、アプリケーションのロケール・セットが管理され、これらのロケールに基づいてサービスが提供されます。このクラスでは、Oracle GDK構成ファイルgdkapp.xmlに構成されているアプリケーションのロケールに基づいて、便利なメソッドが提供されます。

オンライン書店の大部分のJSPには、LocalizationContext Java Beanを使用してセッション用ロケール情報を保持するheader.jspファイルが含まれます。JSPは、LocalizationContext Java Beanをコールして、日付の書式設定、URLのエンコーディング、HTMLフォーム・パラメータのJava文字列への変換など、ロケールに依存するすべての操作を実行します。

7.2.3 World-of-Booksのスキーマ設計

WOBデモのデータベース・スキーマは、次の表から構成されます。

  • customers: 各WOBユーザーのユーザー・プロファイルを格納します。

  • books: 各書籍に関する情報を格納します。

  • docs: 顧客が書籍の内容を検索できるように各書籍の内容を格納します。

表7-2に、customers表を示します。登録されたユーザーがログインすると、オンライン書店がLocalizationContext Beanのcustomer表のロケール・プリファレンスを使用します。

表7-2 customers表の説明

データ型 説明

currency1

VARCHAR2(10)

デフォルトの主要通貨がユーザーに使用されるISOロケール

currency2

VARCHAR2(10)

デフォルトの二重通貨がユーザーに使用されるISOロケール

custid

VARCHAR2(50)

ユーザー名(これが主キーです)

locale

VARCHAR2(10)

ユーザーが設定したISOロケール形式でのロケール(en-USなど)

timezone

VARCHAR2(50)

ユーザーのタイムゾーン(Asia/Hong Kongなど)


表7-3に、books表を示します。NVARCHAR2データ型は、書籍のタイトル、著者、概要説明および出版社のために使用します。この情報をNVARCHAR2データ型のUnicodeとして保存することによって、WOBデモでは世界中の言語の書籍をサポートできます。nsort列は、書籍に関する問合せに使用し、ロケールに対して適切な順序でリストが返されます。

表7-3 books表の説明

データ型 説明

author

NVARCHAR(300)

著者

bookid

NUMBER (10)

書籍の一意の識別子(これが主キーです)

descpt

NVARCHAR(2000)

書籍の概要説明

langid

NUMBER(3)

書籍の言語

nsort

VARCHAR2(30)

SQL関数のNLSSORT()で使用する、ロケールに依存する、書籍に対するソート基準

publisher

NVARCHAR(200)

書籍の出版社名

title

NVARCHAR(300)

書籍のタイトル


表7-4に、docs表を示します。この表は、書籍の内容を格納します。

表7-4 docs表の説明

データ型 説明

bookid

NUMBER(10)

書籍の一意の識別子(これが主キーです)

cset

VARCHAR2(30)

書籍の内容のキャラクタ・セット

doc

BLOB

書籍の内容

format

VARCHAR2(10)

書籍の内容の形式(TEXTまたはBINARY

langid

NUMBER(3)

書籍の言語

language

VARCHAR2(30)

Oracleのグローバリゼーション・サポート言語ネーミング規則を使用した、書籍の内容の言語

mimetype

VARCHAR2(50)

書籍のMIMEタイプ


これらの表には、索引が作成されています。次に示すSQLファイルを使用して、これらの表を作成し、対応する索引を作成します。これらのファイルは、$WOB_HOME/schemaディレクトリ内にあります。

  • customers.sql

  • books.sql

  • docs.sql

Oracle Textでは、docs表に完全テキスト検索索引を作成するために、docs表のlanguageformatcsetおよびdoc列が必要です。完全テキスト検索索引を設定するには、ctxidx.sqlおよびctxsys.sqlスクリプトを使用します。これらのスクリプトは、$WOB_HOME/schema/ctx内にあります。


関連項目:

完全テキスト検索索引の作成の詳細は、Oracle Databaseドキュメント・ライブラリ内の『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

7.3 World-of-Booksデモのインストール

World-of-Books(WOB)デモは、次のオラクル社のWebサイトからzipファイルでダウンロードできます。

http://www.oracle.com/technology/tech/java/oc4j/demos/index.html

globalization_wob_demo.zipファイルをダウンロードしたら、次の手順でファイルを解凍します。

  1. $ORACLE_HOME/j2ee/home/demoディレクトリに移動するか、またはこのディレクトリが存在していない場合は作成します。

  2. ファイルを$ORACLE_HOME/j2ee/home/demoディレクトリにコピーします。

  3. ファイルを解凍します。


注意:

$ORACLE_HOMEなどの環境変数の参照は、UNIX形式での表記です。Microsoft Windows環境では、%ORACLE_HOME%という表記を使用します。

ダウンロードしたファイルを解凍した後、$ORACLE_HOME/j2ee/home/demo下のディレクトリglobalizationを表示してください。このディレクトリ($ORACLE_HOME/j2ee/home/demo/globalization)が、WOBデモのルート・ディレクトリです。この章では、このルート・ディレクトリを$WOB_HOMEと呼びます。

7.4 World-of-Booksデモのビルド、デプロイおよび実行

WOBデモのソース・コードとビルド・ファイルは、$WOB_HOMEのWOBデモのホーム・ディレクトリ内にあります。表7-5に、$WOB_HOME下のディレクトリ構造を示します。


注意:

$ORACLE_HOMEなどの環境変数の参照は、UNIX形式での表記です。Microsoft Windows環境では、%ORACLE_HOME%という表記を使用します。

表7-5 World-of-Booksのディレクトリ構造

ディレクトリ/ファイル 説明

build.xml

WOBデモをビルドします。

docroot

HTMLファイル、JSP、イメージなどのすべての静的ファイルを含みます。

docroot/suppa

中国語の書籍のサプライヤ管理アプリケーションの静的ファイルを含みます。

docroot/suppb

世界中の書籍のサプライヤ管理アプリケーションの静的ファイルを含みます。

docroot/wob

オンライン書店のWebアプリケーションの静的ファイルを含みます。

etc

WOBデモ・アプリケーションの構成ファイルを含みます。

j2ee_config

WOBデモのJ2EEデプロイメント・ファイルを含みます。

README.TXT

WOBデモのビルドとデプロイのための有用な情報が記載されています。

schema

WOBデモで使用するデータベース・スキーマを作成および移入するSQLファイルを含みます。

src/oracle/demo/wob2

すべてのJavaプログラムを含みます。

src/oracle/demo/wob2/supp

2つのオンライン・サプライヤ・アプリケーションで共有されるJavaプログラムを含みます。

src/oracle/demo/wob2/wob

オンライン書店アプリケーションのJavaプログラムを含みます。


この項の項目は次のとおりです。

7.4.1 World-of-Booksデモのビルド方法

WOBデモをビルドする手順は次のとおりです。

  1. $ORACLE_HOME/j2ee/home/demo/globalizationディレクトリに移動します。

  2. $WOB_HOME/etcディレクトリのsuppa.propertiessuppb.propertiesおよびwob.propertiesファイルを更新します。

    • OC4Jがインストールされた場所のフルパスで<J2EE_HOME>を置き換えます。

    • マシンのホスト名で<HOSTNAME>を置き換えます。

    • ユーザーのデフォルトWebサイトのポート番号で<PORT>を置き換えます。

  3. JAVA_HOMEおよびCLASSPATH環境変数を定義して、Java構築環境を設定します。Oracle Application Serverでは、$ORACLE_HOME/jdkにJDKがバンドルされているので、このディレクトリをユーザーのJAVA_HOMEとして使用できます。

    ユーザーのJDKを使用することもできます。たとえば、次のように設定します。

    % setenv ORACLE_HOME yourOracleHome
    % setenv JAVA_HOME $ORACLE_HOME/jdk
    % setenv J2EE_HOME $ORACLE_HOME/j2ee
    % setenv J2EE_HOME $ORACLE_HOME/j2ee/home
    % mkdir $J2EE_HOME/applib
    % copy $ORACLE_HOME/lib/xsu12.jar to $J2EE_HOME/applib
    % copy $ORACLE_HOME/rdbms/jlib/xdb.jar to $J2EE_HOME/applib
    % copy $ORACLE_HOME/jlib/regexp.jar to $J2EE_HOME/applib
    
    
  4. 必ず$ORACLE_HOME/binおよび$ORACLE_HOME/jdk/binをディレクトリ・パスに追加します。たとえば、次のように設定します。

    % setenv PATH $ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
    
    
  5. 必ず、Oracle10gデータベースをWOBデモのスキーマとデータのロードに使用できるように、データベースを示すTWO_TASK環境変数を定義します。たとえば、接続文字列iasdbを使用してSQL*Plusからデータベースにアクセスできる場合は、その接続文字列を示す適切な環境変数を定義できます。

    • UNIXでは、次のようにTWO_TASK環境変数を設定します。

      % setenv TWO_TASK iasdb
      
      
    • Microsoftでは、次のようにLOCAL環境変数を設定します。

      set LOCAL=iasdb
      
      
  6. $WOB_HOMEディレクトリでANTコマンドを入力して、デモのスキーマをビルドします。

    % ant setupschema
    
    
  7. $J2EE_HOME/demo/globalizationディレクトリで、次のantコマンドを入力して、デモのEARファイルとWARファイルを作成します。

    % ant
    
    

    このビルドのプロセスによって、次の作業が実施されます。

    • すべてのJavaプログラムをコンパイルします。

    • WOBスキーマを作成してから、提供されたシード・データを移入します。

    • すべての静的ファイルとJavaクラスをパッケージ化して、デプロイメントに使用するEARファイルとWARファイルにします。

  8. ユーザーのデータベース内でOracle Textを使用可能にしている場合は、次のコマンドを使用して完全テキスト検索索引を作成することによって、書籍の内容に対する完全テキスト検索を設定できます。

    % ant setupctx
    

7.4.2 World-of-Booksデモのデプロイ方法

WOBデモをOracle Application Server J2EEにデプロイする手順は次のとおりです。

  1. $WOB_HOME/j2ee_config/data-sources.xmlを更新します。このファイルは、データベース接続に使用します。

    • HOSTNAMEをOracleデータベース・サーバーのホスト名に置き換えます。

    • PORTをOracleデータベース・サーバーのポート番号に置き換えます。

    • ORACLE_SIDをOracleデータベース・サーバーのシステム識別子に置き換えます。

    • data-sources.xmlファイルのコンテンツを切り取り、$J2EE_HOME/config/data-sources.xmlファイルに貼り付けます。

  2. DCMを使用して、次のとおり構成ファイルを更新します。

    dcmctl updateConfig
    
    
  3. Oracle Enterprise Managerを使用して、アプリケーション$WOB_HOME/lib/glln.earをデプロイします。または、次のとおり、dcmctlを使用してもアプリケーションをデプロイできます。

    dcmctl deployApplication -file $WOB_HOME/lib/glln.ear
                             -application glln -component home
    
    

7.4.3 World-of-Booksデモの実行方法

オンライン書店には、次のいずれかのブラウザが必要です。

  • Internet Explorer 5.0以降

  • Mozilla 1.5以降

  • Netscape 7.0.1以降

書籍サプライヤ管理アプリケーションには、Internet Explorer 5.0以降が必要です。

WOBデモを実行するには、ブラウザを起動して次のURLを入力します。

http://host_name:7778/g11n/imap.html

次のような画面が表示されます。

World-of-Booksのウィンドウ
図wob1.gifの説明

目的のアプリケーションを起動するためのリンクを選択します。

画像 リンク・ターゲット
World-of-Booksの画像 オンライン書店アプリケーション
サプライヤAの画像 中国語書籍のサプライヤ管理アプリケーション
サプライヤBの画像 世界中の書籍のサプライヤ管理アプリケーション

登録された顧客または訪問者としてオンライン書店をナビゲートします。

サプライヤBの画像をクリックすると、次の画面が表示されます。

サプライヤ2のウィンドウ
図wob2.gifの説明

サプライヤBの管理サイトのリンクは、次のようになっています。

リンク 説明
Update Catalog サプライヤは、オンライン書店に新刊情報を送信して書店カタログを更新できます。オンライン書店にXMLファイルを送信します。
Order Table サプライヤは、オンライン書店からの顧客の注文を確認して、注文状況を更新できます。
Clean up データを初期状態に戻します。以前の注文と新規に追加された書籍がすべて削除されます。
XML dir オンライン書店との間で送受信されたXML文書を一覧表示します。
Home WOBホーム・ページに戻ります。

7.5 World-of-Booksデモのロケール認識

World-of-Booksのオンライン書店は、ユーザーのロケールを完全に認識します。このアプリケーションでは、ユーザーのロケールを特定し、そのロケールを使用して動的HTMLページをユーザーの言語と文化的慣習に従うように書式設定します。

この項の項目は次のとおりです。

7.5.1 World-of-Booksでのユーザーのロケールの特定方法

オンライン書店では、次の順序で3つの方法を使用してユーザーのロケールを特定します。

  1. 顧客が書店にログインしている場合は、顧客のユーザー・プロファイルに関連付けられたロケールを調査して、それを推奨ロケールとして使用します。

  2. ユーザーに、書店のユーザー・インタフェースからロケールを入力させます。

  3. ブラウザから送信されたAccept-Language HTTPヘッダーを調査します。

World-of-Booksアプリケーションでは、ロケール決定機能に対するGDKアプリケーション・フレームワークのサポートを使用して、クライアントがユーザー・インタフェースに使用する言語が決定されます。このサポートは、GDK構成ファイルgdkapp.xml内に事前定義された<locale-sources> XMLタグ宣言を使用することによって提供されます。このファイルは、$WOB_HOME/docroot/WEB_INFディレクトリ内にあります。

gdkapp.xmlファイルの<locale-determine-rule> XMLタグを使用すると、開発者はWebアプリケーションのユーザー・インタフェースに使用する言語に、様々なソースのロケールを構成できます。ロケール・ソースの構成に使用するWOBのgdkapp.xml構成ファイルの構文は、次のようになります。

<locale-determine-rule>
  <db-locale-source data source-name="jdbc/WobWobDataSource"
     locale-source-table="customers"
     user-key="userinfo" user-column="custid" locale-column="locale"
     timezone-column="timezone">
     oracle.i18n.servlet.localesource.DBLocaleSource
  </db-locale-source>
  <locale-source>oracle.i18n.servlet.localesource.UserInput</locale-source>
  <locale-source>oraclei18n.servlet.localesource.HttpAcceptLanguage
  </locale-source>
</locale-determine-rule>

WOBのロケール決定モデルは、次のように評価されます。

  • ユーザーがログインすると、<db-locale-source> XML要素の属性locale-columnによって、ロケールなどのユーザー・インタフェースに使用される言語が決定されます。WOBの場合、customer表のlocale列によってユーザーのロケール・プリファレンスが決定されます。この使用例は、ユーザーが認証されて、WOBアプリケーションにログインすると実行されます。

  • ユーザーがログインしないと、ユーザー・インタフェースに使用される言語は、メニューを介して、またはHTTP問合せ文字列パラメータのようなHTTPプロトコルのパラメータとして、ユーザーが指定するロケールによって決定されます。これは、ユーザーがWOBの最初のページで特定の国の旗をクリックしたときに当てはまります。ユーザーがログインせず、ロケール情報を明示的に入力しない場合、ユーザー・インタフェースに使用される言語は、HTTPプロトコルのAccept-Languageヘッダーの値によって決定されます。

  • LocalizationContext Beanによって、多言語ユーザーに対してユーザー・インタフェースのローカライゼーションを補助するサービスを提供するGDK機能が構成されます。LocalizationContext Beanには、現在のHTTPリクエストに対するGDK Localizerオブジェクトへの参照が含まれ、この参照はローカライズされたメッセージと、事前定義済のロケールへのアクセスの取得に使用されます。これは他のGDK APIを使用して、日付および通貨の書式設定、タイムゾーンの表示、その他のローカライズされた表示名の取得およびその他のロケール固有の属性の取得を行います。

7.5.2 World-of-BooksでのLocalizationContextメソッドでのロケール情報の使用方法

Localizerがユーザーのロケールで初期化されると、LocalizationContextのすべてのメソッドはロケールに依存します。表7-6に、LocalizationContextで定義されたロケール依存メソッドの例を示します。

表7-6 Localizer Beanのロケール依存メソッドの例

メソッド 使用例

String formatDate()

次のJSPでは、formatDate()メソッドを使用します。

  • welcome.jspは、最初のページが表示するシステムの日付を書式設定します。

  • History.jspは、注文履歴の日付を書式設定します。

  • setting.jspは、登録ユーザーがユーザー・プロファイルを更新したときに表示される日付を書式設定します。

String getCurrency()

Changeprofile1.jspは、ユーザー・プロファイル変更画面に表示される主要通貨記号を取得します。

String getDirection()

setting.jspは、現行ユーザーに基づいて、テキストを記述する方向を表示します。

String getDualCurrency()

Changeprofile1.jspは、ユーザー・プロファイル変更画面に表示される代替通貨記号または二重通貨記号を取得します。

String getMessage()

大部分のJSPは、現行ロケールに対応する翻訳されたメッセージをリソース・バンドルから取得するために、このメソッドを使用します。

String getNLSLanguage()

search.jspは、現行ロケールにおいて言語に依存する検索を実行するために使用するOracleの言語名を取得します。

String getTimeZone()

myaccount.jspは、現行ユーザーのタイムゾーンを表示します。


その他のロケールに依存する機能は、次の項で説明します。

7.5.3 World-of-Booksでの問合せ結果のソート方法

問合せ結果の中で書籍を一覧表示する順序は、現行ユーザーのロケールによって異なります。次に、検索テンプレートを示します。

SELECT books.bookid,
       langmap.language,
       books.title,
       books.author,
         substr(books.descpt, 1, 50)
FROM  books, langmap
WHERE  specific search criteria 
           books.langid = langmap.langid AND
           nlssort(books.title, 'NLS_SORT = '|| books.nsort) IS NOT NULL
ORDER BY  langord(books.langid, 'Oracle_NLS_language'),
           nlssort(books.title, 'NLS_SORT='||books.nsort);

langmap表は、言語IDをOracleグローバリゼーション・サポート言語名やNLSSORT SQL関数で使用されるOracleソート名にマッピングします。$WOB_HOME/schema/langmap.sqlファイルは、langmap表を作成します。

SELECT文は、次のようにORDER BY句によって、書籍の順序を並び替えます。

  1. この文は、PL/SQL関数のlangordが返す第1ソート・キーを使用して、書籍を言語によって分類します。langord関数は、現行ユーザーのロケールに対応するOracleグローバリゼーション・サポート言語が書籍の言語に一致すると、最小キー値を返します。書籍がこのように分類されるため、最初のグループは、言語がユーザーのロケールに一致する書籍で構成されます。

  2. 各言語グループ内では、NLSSORT SQL関数が返すソート・キーによって書籍が並び替えられます。NLSSORT関数は、NLS_SORTパラメータで指定した言語順序に基づいて、ソート・キーを生成します。NLS_SORTパラメータの値は、books表のnsort列に格納されます。このように、ソートされたグループの書籍は、nsort列に格納されたOracleのソート基準名で並び替えられます。

また、アプリケーションも、ロケール情報を使用してユーザー・インタフェースのリストを並び替えます。たとえば、ユーザーが言語を選択できるように、LocalizationContext BeanのdisplayLanguageOptions()メソッドを使用して言語のリストを構成します。displayLanguageOptions()メソッドは、GDK Localizerによって決定される現行ロケールに基づいて、リストで言語を照合します。次に、displayLanguageOptions()コードの例を示します。

public String displayLanugageOptions()
{
    Set set = appLocales.getSupportedLanguagesByStyle(locale,
    ApplicationLocales.LANGUAGE_DISPLAY_ITEM):
    StringBuffer optionBuffer = new StringBuffer();
    Iterator iter = set.iterator();
    OraDisplayLocaleInfo odli = OraDisplayLocaleInfo.getInstance(locale);

    while (iter.hasNext())
    {
       OraLocaleInfo oli = (OraLocaleInfo) iter.next();
       String oliLang = oligetLocale().getLanguage();
       option.Buffer.append("<option value=\"" + oliLang + "\"" +
       (locale.getLaguage().equals(oliLang) ? " selected" : "")
       + ">" + odli.getDisplayLangauge(oli.getDisplayLanguage(oli.getLocale()) +
       " [" + oliLang + "]</option>\n");
    }
    return optionBuffer.toString();
}

ApplicationLocales Javaクラスでは、gdkapp.xml構成ファイルに宣言されているアプリケーションのロケールに、別のロケール・ビューのサブセットが提供されます。前述のコード例では、getSupportedLanguagesByStyle()メソッドによって、WOBのサポート言語を表すOraLocaleInfoオブジェクトのセットが返されます。さらに、このセットのアイテムは、GDK OraCollatorクラスを使用して、言語の表示名によってソートされます。照合されたOraLocaleInfoオブジェクトは、言語選択リストのHTMLコードの生成に使用されます。

リストを照合するその他のメソッドとして、displayCountryOptions()displayCurrencyOptions()およびdisplayScriptCountryVars()があります。

7.5.4 World-of-Booksでの書籍の内容の検索方法

オンライン書店では、ロケールに依存する方法で、ユーザーが書籍の内容を検索することができます。次に示す問合せは、書籍の内容をdocs表から検索します。

   SELECT  books.bookid,
           langmap.language,
           books.title,
           books.author,
           substr(books.descpt, 1, 50)
     FROM  books, langmap, docs
    WHERE  contains(docs.doc, 'search_key', 0) > 0 AND
           books.langid = langmap.langid AND
           nlssort(books.title, 'NLS_SORT = '|| books.nsort) IS NOT NULL

 ORDER BY  langord(books.langid, 'Oracle_NLS_language'),
           nlssort(books.title, 'NLS_SORT='||books.nsort);

WHERE句のcontains(docs.doc, 'search_key', 0)関数は、docs表のdoc列に格納されたドキュメントの内容に検索キーが存在すると、正の数を返します。その他の問合せは、書籍検索で使用する問合せに類似しています。

Oracle Textは、デフォルトでは、NLS_LANGUAGEセッション・パラメータによって定義されたとおりに検索キーの言語を使用します。言語に依存する方法で検索を実施するには、search.jspALTER SESSION文を発行して、ユーザーが内容検索の問合せを実行する前に指定した値にNLS_LANGUAGEパラメータの値を変更します。ALTER SESSION文は次のようになります。

ALTER SESSION SET NLS_LANGUAGE=language;

HTTPServletRequestオブジェクトのgetParameter("v_language")メソッドをコールすることによって、言語の値を取得します。このv_languageは、拡張検索画面のフォーム入力パラメータです。

7.6 World-of-BooksデモのHTMLページ・エンコーディング

オンライン書店では、LocalizationContext Beanの属性がHTMLページに使用するエンコーディングを保存します。GDK構成ファイルの<page-charset> XMLタグを使用して、サポートされるエンコーディングを指定します。現在は1つ(UTF-8)のみが定義されており、これがデフォルトとして設定されます。オンライン書店は、デフォルトでUTF-8をHTMLページ・エンコーディングとして使用して、多言語コンテンツをサポートします。

<page-charset default="yes">UTF-8</page-charset>

前述のXMLコードを宣言すると、Oracle GDKによって、HTTPリクエストに対するキャラクタ・セットと、実行時のこの値(ここではUTF-8)に対するレスポンス・オブジェクトが自動的に設定されます。

7.7 World-of-BooksデモでのHTMLフォーム入力の処理

オンライン書店は、HTMLフォーム入力として多言語テキストをサポートします。この入力は、ユーザーが書籍を検索するときの検索キーやログイン時のユーザー名の場合があります。ブラウザは、HTMLフォームと同一のエンコーディングでバイトのシーケンスとしてフォーム入力を送信します。ページ・エンコーディングは、UnicodeでエンコードされたJava文字列の入力の変換に必要です。ページ・エンコーディングは、入力が正しく変換されるように、実行時にGDKクラスによって自動的に認識および変換されます。

7.8 World-of-BooksデモでのHTMLページの書式設定

オンライン書店では、HTMLページに対して、次に示すロケールに依存するテキスト書式設定要素を使用します。

複数のロケールを同時にサポートするには、オンライン書店で、これらの要素をJSPにハードコードするのではなく、ロケール固有のカスケーディング・スタイル・シート(CSS)ファイルに外部化します。CSSファイル構造は、WOBオンライン・ヘルプの静的HTMLファイル構造と同じです。CSSファイルは、次のとおりです。

$WOB_HOME/docroot/wob/jsp/header.jspでは、LocalizationContext BeanのgetLocalizedURL()メソッドが現行ロケールに対応するCSSのフルパスを取得します。ロケールに固有のCSSがない場合は、アプリケーションではデフォルトのCSSが使用されます。

次に、アラビア語テキスト用のCSSの例を示します。

html { direction: rtl }
h3 { font-size: 100%;
     text-align: end;
     font-weight: bold;
     color: #FFFFFF }

アラビア語CSSでは、HTMLページの記述方向を右から左(RTL)と定義します。テキストは、必ず記述方向の最後に位置が揃えられます。

次に、日本語テキスト用のCSSの例を示します。

html { direction: ltr }
h3 { font-size: 100%;
     text-align: end;
     
     font-weight: bold;
     color: #FFFFFF }
tr { 
     font-size: 12pt; }
p {  
     font-size: 12pt}

日本語のCSSでは、記述方向を左から右(LTR)と定義します。テキストは、必ず記述方向の最後に位置が揃えられます。日本語テキストの表示に使用するフォント・ファミリは、MSゴシックとMS明朝です。これらは、Microsoft Windowsの日本語フォントです。フォント・ファミリをCSSで指定しない場合は、アプリケーションではブラウザのデフォルト・フォントが使用されます。

7.9 World-of-BooksデモでのURLのエンコーディング

HTMLページに埋め込まれたURLはすべて、エンコードする必要があります。これらのURLでは、HTMLページと同一のエンコーディングを使用する必要があります。LocalizationContext Beanは、encodeURL()メソッドのカプセル化に最も適しています。このメソッドは、LocalizationContext Beanのエンコーディング属性に従ってURLをエンコードします。

次のJSPは、encodeURL()メソッドをコールします。

オンライン書店の埋込み型URLは、ASCIIでエンコードされているので、さらにエンコードする必要はありません。encodeURL()メソッドは、URLのエンコードの概念を示すためにコールします。

7.10 World-of-Booksデモでのデータベース接続

WOBデモでは、Oracle JDBCドライバを使用して、Oracleデータベースに接続します。JDBCドライバは、データベース内に格納されたデータをJava文字列との間で透過的に変換します。ほとんどの場合、データベースに格納されたUnicodeデータにアクセスするために、特別な処理は必要ありません。


注意:

SQL文のINSERTまたはUPDATENVARCHARデータ型の列にバインドされているJava文字列には、特別な処理が必要です。OraclePreparedStatementクラスのsetFormOfUse()メソッドを使用して、ターゲット列のデータ型がNVARCHARであることをJDBCに示します。

setFormOfUse()メソッドは、新しい書籍がbooks表に挿入されると、$WOB_HOME/src/oracle/demo/wob2/supp/beans/insertItem.javaでコールされます。


7.11 World-of-BooksデモでのHTMLページ・コンテンツの構成

オンライン書店は、次に示す翻訳可能なコンテンツで構成されています。

この項の項目は次のとおりです。

7.11.1 World-of-Booksのオンライン・ヘルプの静的ファイル

WOBのオンライン・ヘルプの静的HTMLファイルは、$WOB_HOME/docroot/wob/help内にあります。オンライン・ヘルプの英語バージョンは、helpディレクトリの最上位にあります。各ロケールの翻訳済ヘルプは、それぞれhelp/locale_nameディレクトリにあります。たとえば、日本語のオンライン・ヘルプは、help/ja_JPディレクトリにあります。

現行のユーザー・ロケールによって、アプリケーションが使用するhelpサブディレクトリは異なります。LocalizationContext Beanは、ユーザーの現行ロケールを保存します。getLocalizedURL()メソッドは、ユーザーのロケールに対応するHTMLファイルの正しいパスを返します。たとえば、ヘルプの相対パスが../help/index.htmlであり、現行ロケールがja_JPであるとすると、このメソッドは、列挙された順序で次のファイルの存在を確認して、最初に見つかったファイルを返します。

  • $WOB_HOME/docroot/wob/help/ja_JP/index.html

  • $WOB_HOME/docroot/wob/help/ja/index.html

  • $WOB_HOME/docroot/wob/help/index.html

header.jspファイルは、適切なオンライン・ヘルプを参照できるように、このメソッドをコールしてすべての翻訳済HTMLファイルの正しいパスを取得し、その結果を使用してHREFタグを構成します。

7.11.2 World-of-BooksのHTMLページ・コンテンツに対するリソース・バンドルの使用

リスト・リソース・バンドルは、オンライン書店のユーザー・インタフェースを設定するすべての変換可能なメッセージを保存します。リソース・バンドルは、$WOB_HOME/src/oracle/demo/wob2/wob /resource/MessageBundle.javaにあります。このリソース・バンドルは、27か国語に翻訳され、翻訳済のリソース・バンドル名にはJavaロケール名に対応する接尾辞が付けられています。

LocalizationContext BeanのgetMessage()メソッドは、現行ロケールに対応するリソース・バンドルから翻訳済メッセージを取得します。大部分のJSPはこのメソッドをコールします。このメソッドは、最終的にGDK Localizerクラスをコールして実際にメッセージを取得するラッパーです。

GDKには、アプリケーションで必要になる可能性のあるリソース・バンドルを構成する方法が用意されています。いずれかのリソース・バンドルを、アプリケーションのデフォルトのリソース・バンドルに設定できます。WOBは、次のようにデフォルトのリソース・バンドルを定義します。

oracle.demo.wob2.wob.resource.MessageBundle

<message-bundles>
  <resource-bundle name =
  "default">oracle.demo.wob2.wob.resource.MessageBundle</resource-bundle>
</message-bundles?

前述の例での構成の後、LocalizationContext BeanのgetMessage()メソッドをコールすると、デフォルトのリソース・バンドルoracle.demo.wob2.wob.resource.MessageBundleからすべてのメッセージが取得されます。