この章では、Oracle Application Serverに添付されているWorld-of-Booksについて説明します。このデモでは、Oracle Globalization Development Kit(GDK)を使用しています。
この章の項目は次のとおりです。
World-of-Books(WOB)デモは、多言語Webアプリケーションを記述して、Oracle Application ServerのJ2EEコンテナにデプロイする方法を例示します。このアプリケーションは、次のWebサイトで構成されます。
様々な言語で書籍を販売するオンライン・ストア
サプライヤAという中国語書籍のオンライン・サプライヤの管理サイト
サプライヤBという世界中の書籍のオンライン・サプライヤの管理サイト
オンライン書店は、顧客と対話する形式の多言語Webアプリケーションです。オンライン書店では、顧客が書籍を閲覧して価格を確認し注文を出すことができます。このアプリケーションは、HTTP接続によって注文をXML文書としてサプライヤに送信します。オンライン書籍サプライヤの管理サイトは、書籍サプライヤが書店から注文を受けて、注文状況レポートを書店に送り、新刊情報を書店に案内するために使用するWebアプリケーションです。
オンライン書店は60か国語をサポートします。これらのロケールの顧客は、自分の言語と文化的慣習に従ってオンライン書店を使用できます。オンライン書籍サプライヤの管理サイトは、英語専用です。
WOBデモでは、顧客が様々なロケールを設定できます。このデモは、Javaサーブレット、Java BeanおよびJavaServer Pages(JSP)を使用して、主にJavaで記述されています。このデモは、Oracle GDK、XML、JDBCおよびOracleデータベースで使用可能なUnicode機能を使用して、多言語データおよび多言語ユーザー・インタフェースをサポートします。
この項の項目は次のとおりです。
図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-1は、WOBアプリケーションの大部分のグローバリゼーション機能を持つJavaプログラムを示しています。このプログラムは、$WOB_HOME/src/oracle/demo/wob2/wob
ディレクトリ内にあります。
表7-1 World-of-Booksアプリケーションのグローバリゼーション機能を持つJavaプログラム
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文字列への変換など、ロケールに依存するすべての操作を実行します。
WOBデモのデータベース・スキーマは、次の表から構成されます。
customers
: 各WOBユーザーのユーザー・プロファイルを格納します。
books
: 各書籍に関する情報を格納します。
docs
: 顧客が書籍の内容を検索できるように各書籍の内容を格納します。
表7-2に、customers
表を示します。登録されたユーザーがログインすると、オンライン書店がLocalizationContext
Beanのcustomer
表のロケール・プリファレンスを使用します。
表7-2 customers表の説明
列 | データ型 | 説明 |
---|---|---|
|
|
デフォルトの主要通貨がユーザーに使用されるISOロケール |
|
|
デフォルトの二重通貨がユーザーに使用されるISOロケール |
|
|
ユーザー名(これが主キーです) |
|
|
ユーザーが設定したISOロケール形式でのロケール( |
|
|
ユーザーのタイムゾーン(Asia/Hong Kongなど) |
表7-3に、books
表を示します。NVARCHAR2
データ型は、書籍のタイトル、著者、概要説明および出版社のために使用します。この情報をNVARCHAR2
データ型のUnicodeとして保存することによって、WOBデモでは世界中の言語の書籍をサポートできます。nsort
列は、書籍に関する問合せに使用し、ロケールに対して適切な順序でリストが返されます。
表7-3 books表の説明
列 | データ型 | 説明 |
---|---|---|
|
|
著者 |
|
|
書籍の一意の識別子(これが主キーです) |
|
|
書籍の概要説明 |
|
|
書籍の言語 |
|
|
SQL関数の |
|
|
書籍の出版社名 |
|
|
書籍のタイトル |
表7-4に、docs
表を示します。この表は、書籍の内容を格納します。
表7-4 docs表の説明
列 | データ型 | 説明 |
---|---|---|
|
|
書籍の一意の識別子(これが主キーです) |
|
|
書籍の内容のキャラクタ・セット |
|
|
書籍の内容 |
|
|
書籍の内容の形式( |
|
|
書籍の言語 |
|
|
Oracleのグローバリゼーション・サポート言語ネーミング規則を使用した、書籍の内容の言語 |
|
|
書籍のMIMEタイプ |
これらの表には、索引が作成されています。次に示すSQLファイルを使用して、これらの表を作成し、対応する索引を作成します。これらのファイルは、$WOB_HOME/schema
ディレクトリ内にあります。
customers.sql
books.sql
docs.sql
Oracle Textでは、docs
表に完全テキスト検索索引を作成するために、docs
表のlanguage
、format
、cset
およびdoc
列が必要です。完全テキスト検索索引を設定するには、ctxidx.sql
およびctxsys.sql
スクリプトを使用します。これらのスクリプトは、$WOB_HOME/schema/ctx
内にあります。
関連項目: 完全テキスト検索索引の作成の詳細は、Oracle Databaseドキュメント・ライブラリ内の『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
World-of-Books(WOB)デモは、次のオラクル社のWebサイトからzipファイルでダウンロードできます。
http://www.oracle.com/technology/tech/java/oc4j/demos/index.html
globalization_wob_demo.zip
ファイルをダウンロードしたら、次の手順でファイルを解凍します。
$ORACLE_HOME/j2ee/home/demo
ディレクトリに移動するか、またはこのディレクトリが存在していない場合は作成します。
ファイルを$ORACLE_HOME/j2ee/home/demo
ディレクトリにコピーします。
ファイルを解凍します。
注意: $ORACLE_HOME などの環境変数の参照は、UNIX形式での表記です。Microsoft Windows環境では、%ORACLE_HOME% という表記を使用します。
|
ダウンロードしたファイルを解凍した後、$ORACLE_HOME/j2ee/home/demo
下のディレクトリglobalization
を表示してください。このディレクトリ($ORACLE_HOME/j2ee/home/demo/globalization
)が、WOBデモのルート・ディレクトリです。この章では、このルート・ディレクトリを$WOB_HOME
と呼びます。
WOBデモのソース・コードとビルド・ファイルは、$WOB_HOME
のWOBデモのホーム・ディレクトリ内にあります。表7-5に、$WOB_HOME
下のディレクトリ構造を示します。
注意: $ORACLE_HOME などの環境変数の参照は、UNIX形式での表記です。Microsoft Windows環境では、%ORACLE_HOME% という表記を使用します。
|
ディレクトリ/ファイル | 説明 |
---|---|
|
WOBデモをビルドします。 |
|
HTMLファイル、JSP、イメージなどのすべての静的ファイルを含みます。 |
|
中国語の書籍のサプライヤ管理アプリケーションの静的ファイルを含みます。 |
|
世界中の書籍のサプライヤ管理アプリケーションの静的ファイルを含みます。 |
|
オンライン書店のWebアプリケーションの静的ファイルを含みます。 |
|
WOBデモ・アプリケーションの構成ファイルを含みます。 |
|
WOBデモのJ2EEデプロイメント・ファイルを含みます。 |
|
WOBデモのビルドとデプロイのための有用な情報が記載されています。 |
|
WOBデモで使用するデータベース・スキーマを作成および移入するSQLファイルを含みます。 |
|
すべてのJavaプログラムを含みます。 |
|
2つのオンライン・サプライヤ・アプリケーションで共有されるJavaプログラムを含みます。 |
|
オンライン書店アプリケーションのJavaプログラムを含みます。 |
この項の項目は次のとおりです。
WOBデモをビルドする手順は次のとおりです。
$ORACLE_HOME/j2ee/home/demo/globalization
ディレクトリに移動します。
$WOB_HOME/etc
ディレクトリのsuppa.properties
、suppb.properties
およびwob.properties
ファイルを更新します。
OC4Jがインストールされた場所のフルパスで<J2EE_HOME>
を置き換えます。
マシンのホスト名で<HOSTNAME>
を置き換えます。
ユーザーのデフォルトWebサイトのポート番号で<PORT>
を置き換えます。
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
必ず$ORACLE_HOME/bin
および$ORACLE_HOME/jdk/bin
をディレクトリ・パスに追加します。たとえば、次のように設定します。
% setenv PATH $ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
必ず、Oracle10gデータベースをWOBデモのスキーマとデータのロードに使用できるように、データベースを示すTWO_TASK
環境変数を定義します。たとえば、接続文字列iasdb
を使用してSQL*Plusからデータベースにアクセスできる場合は、その接続文字列を示す適切な環境変数を定義できます。
UNIXでは、次のようにTWO_TASK
環境変数を設定します。
% setenv TWO_TASK iasdb
Microsoftでは、次のようにLOCAL
環境変数を設定します。
set LOCAL=iasdb
$WOB_HOME
ディレクトリでANT
コマンドを入力して、デモのスキーマをビルドします。
% ant setupschema
$J2EE_HOME/demo/globalization
ディレクトリで、次のant
コマンドを入力して、デモのEARファイルとWARファイルを作成します。
% ant
このビルドのプロセスによって、次の作業が実施されます。
すべてのJavaプログラムをコンパイルします。
WOBスキーマを作成してから、提供されたシード・データを移入します。
すべての静的ファイルとJavaクラスをパッケージ化して、デプロイメントに使用するEARファイルとWARファイルにします。
ユーザーのデータベース内でOracle Textを使用可能にしている場合は、次のコマンドを使用して完全テキスト検索索引を作成することによって、書籍の内容に対する完全テキスト検索を設定できます。
% ant setupctx
WOBデモをOracle Application Server J2EEにデプロイする手順は次のとおりです。
$WOB_HOME/j2ee_config/data-sources.xml
を更新します。このファイルは、データベース接続に使用します。
HOSTNAME
をOracleデータベース・サーバーのホスト名に置き換えます。
PORT
をOracleデータベース・サーバーのポート番号に置き換えます。
ORACLE_SID
をOracleデータベース・サーバーのシステム識別子に置き換えます。
data-sources.xml
ファイルのコンテンツを切り取り、$J2EE_HOME/config/data-sources.xml
ファイルに貼り付けます。
DCMを使用して、次のとおり構成ファイルを更新します。
dcmctl updateConfig
Oracle Enterprise Managerを使用して、アプリケーション$WOB_HOME/lib/glln.ear
をデプロイします。または、次のとおり、dcmctl
を使用してもアプリケーションをデプロイできます。
dcmctl deployApplication -file $WOB_HOME/lib/glln.ear -application glln -component home
オンライン書店には、次のいずれかのブラウザが必要です。
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の画像 | オンライン書店アプリケーション |
サプライヤAの画像 | 中国語書籍のサプライヤ管理アプリケーション |
サプライヤBの画像 | 世界中の書籍のサプライヤ管理アプリケーション |
登録された顧客または訪問者としてオンライン書店をナビゲートします。
サプライヤBの画像をクリックすると、次の画面が表示されます。
サプライヤBの管理サイトのリンクは、次のようになっています。
リンク | 説明 |
---|---|
Update Catalog | サプライヤは、オンライン書店に新刊情報を送信して書店カタログを更新できます。オンライン書店にXMLファイルを送信します。 |
Order Table | サプライヤは、オンライン書店からの顧客の注文を確認して、注文状況を更新できます。 |
Clean up | データを初期状態に戻します。以前の注文と新規に追加された書籍がすべて削除されます。 |
XML dir | オンライン書店との間で送受信されたXML文書を一覧表示します。 |
Home | WOBホーム・ページに戻ります。 |
World-of-Booksのオンライン書店は、ユーザーのロケールを完全に認識します。このアプリケーションでは、ユーザーのロケールを特定し、そのロケールを使用して動的HTMLページをユーザーの言語と文化的慣習に従うように書式設定します。
この項の項目は次のとおりです。
オンライン書店では、次の順序で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を使用して、日付および通貨の書式設定、タイムゾーンの表示、その他のローカライズされた表示名の取得およびその他のロケール固有の属性の取得を行います。
Localizer
がユーザーのロケールで初期化されると、LocalizationContext
のすべてのメソッドはロケールに依存します。表7-6に、LocalizationContext
で定義されたロケール依存メソッドの例を示します。
表7-6 Localizer Beanのロケール依存メソッドの例
メソッド | 使用例 |
---|---|
|
次のJSPでは、
|
|
|
|
|
|
|
|
大部分のJSPは、現行ロケールに対応する翻訳されたメッセージをリソース・バンドルから取得するために、このメソッドを使用します。 |
|
|
|
|
その他のロケールに依存する機能は、次の項で説明します。
問合せ結果の中で書籍を一覧表示する順序は、現行ユーザーのロケールによって異なります。次に、検索テンプレートを示します。
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
句によって、書籍の順序を並び替えます。
この文は、PL/SQL関数のlangord
が返す第1ソート・キーを使用して、書籍を言語によって分類します。langord
関数は、現行ユーザーのロケールに対応するOracleグローバリゼーション・サポート言語が書籍の言語に一致すると、最小キー値を返します。書籍がこのように分類されるため、最初のグループは、言語がユーザーのロケールに一致する書籍で構成されます。
各言語グループ内では、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()
があります。
オンライン書店では、ロケールに依存する方法で、ユーザーが書籍の内容を検索することができます。次に示す問合せは、書籍の内容を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.jsp
がALTER SESSION
文を発行して、ユーザーが内容検索の問合せを実行する前に指定した値にNLS_LANGUAGE
パラメータの値を変更します。ALTER SESSION
文は次のようになります。
ALTER SESSION SET NLS_LANGUAGE=language;
HTTPServletRequest
オブジェクトのgetParameter("v_language")
メソッドをコールすることによって、言語の値を取得します。このv_language
は、拡張検索画面のフォーム入力パラメータです。
オンライン書店では、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)に対するレスポンス・オブジェクトが自動的に設定されます。
オンライン書店は、HTMLフォーム入力として多言語テキストをサポートします。この入力は、ユーザーが書籍を検索するときの検索キーやログイン時のユーザー名の場合があります。ブラウザは、HTMLフォームと同一のエンコーディングでバイトのシーケンスとしてフォーム入力を送信します。ページ・エンコーディングは、UnicodeでエンコードされたJava文字列の入力の変換に必要です。ページ・エンコーディングは、入力が正しく変換されるように、実行時にGDKクラスによって自動的に認識および変換されます。
オンライン書店では、HTMLページに対して、次に示すロケールに依存するテキスト書式設定要素を使用します。
フォント・ファミリ
記述方向
テキスト位置合せ
複数のロケールを同時にサポートするには、オンライン書店で、これらの要素をJSPにハードコードするのではなく、ロケール固有のカスケーディング・スタイル・シート(CSS)ファイルに外部化します。CSSファイル構造は、WOBオンライン・ヘルプの静的HTMLファイル構造と同じです。CSSファイルは、次のとおりです。
$WOB_HOME/docroot/wob/css/style.css
(デフォルトCSS)
$WOB_HOME/docroot/wob/css/ar/style.css
$WOB_HOME/docroot/wob/css/he/style.css
$WOB_HOME/docroot/wob/css/iw/style.css
$WOB_HOME/docroot/wob/css/ja/style.css
$WOB_HOME/docroot/wob/css/zh/style.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で指定しない場合は、アプリケーションではブラウザのデフォルト・フォントが使用されます。
HTMLページに埋め込まれたURLはすべて、エンコードする必要があります。これらのURLでは、HTMLページと同一のエンコーディングを使用する必要があります。LocalizationContext
Beanは、encodeURL()
メソッドのカプセル化に最も適しています。このメソッドは、LocalizationContext
Beanのエンコーディング属性に従ってURLをエンコードします。
次のJSPは、encodeURL()
メソッドをコールします。
Item.jsp
OrderItem.jsp
Search.jsp
オンライン書店の埋込み型URLは、ASCIIでエンコードされているので、さらにエンコードする必要はありません。encodeURL()
メソッドは、URLのエンコードの概念を示すためにコールします。
WOBデモでは、Oracle JDBCドライバを使用して、Oracleデータベースに接続します。JDBCドライバは、データベース内に格納されたデータをJava文字列との間で透過的に変換します。ほとんどの場合、データベースに格納されたUnicodeデータにアクセスするために、特別な処理は必要ありません。
注意: SQL文のINSERT またはUPDATE のNVARCHAR データ型の列にバインドされているJava文字列には、特別な処理が必要です。OraclePreparedStatement クラスのsetFormOfUse() メソッドを使用して、ターゲット列のデータ型がNVARCHAR であることをJDBCに示します。
|
オンライン書店は、次に示す翻訳可能なコンテンツで構成されています。
静的HTMLとイメージ・ファイルによるオンライン・ヘルプ
HTMLページの構成に使用するために格納された文字列またはメッセージ
書名、著者などの動的な書籍情報
この項の項目は次のとおりです。
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
タグを構成します。
リスト・リソース・バンドルは、オンライン書店のユーザー・インタフェースを設定するすべての変換可能なメッセージを保存します。リソース・バンドルは、$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
からすべてのメッセージが取得されます。