...

クライアントサイド Javascript で 成される 字列の国際化

by user

on
Category: Documents
16

views

Report

Comments

Transcript

クライアントサイド Javascript で 成される 字列の国際化
テクてく Lotus 技術者夜会
テクてく Lotus 技術者夜会 – ザ・デベロッパー編
ハンズオン・セッション:
XPages アプリケーションの国際化
2012/11/16
Lotus Technology Development
Tokyo Software Development Lab
1
© 2010 IBM
Corporation
特記事項
‹
‹
‹
‹
‹
本資料の記載内容は、できる限り正確を期すよう努めてはおりますが、
いかなる明⽰または暗黙の保証も責任も負いかねます。
本資料の情報は、使⽤先の責任において使⽤されるべきものであることを、
あらかじめご了承ください。
掲載情報は不定期に変更されることもあります。他のメディア等に無断で
転載する事はご遠慮ください。
当資料をコピー等で複製することは、執筆者の承諾なしではできません。
また、当資料に記載された製品名または会社名はそれぞれの各社の商標
または登録商標です。
IBM、IBMロゴ、DB2、Lotus、Lotus Notes、Lotus Domino、Quickr、Sametime、Workplace、WebSphereは、International Business Machines Corporationの⽶国およびその他の国における商標。
JavaおよびすべてのJava関連の商標およびロゴは Sun Microsystems, Inc.の⽶国およびその他の国における商標。
Microsoft, Windowsは Microsoft Corporationの⽶国およびその他の国における商標。
Linuxは、Linus Torvaldsの⽶国およびその他の国における商標。
他の会社名、製品名およびサービス名等は、それぞれ各社の商標。
2
© 2012 IBM Corporation
今⽇の内容
‹
ハンズオンの概要
‹
XPages アプリケーションの国際化の⼿順
‹
Web ブラウザの⾔語設定の確認と変更
‹
XPages アプリケーションの国際化オプションの設定
‹
静的⽂字列の翻訳
‹
リソースバンドルを使⽤しての動的⽂字列の国際化
‹
Javascript で⽣成される⽂字列の国際化
‹
‹
サーバーサイド Javascript
クライアントサイド Javascript
3
© 2012 IBM Corporation
ハンズオンの概要
‹
‹
英語のユーザーインターフェースで開発された⼩遣い帳アプリケーション
を国際化し、⽇本語のインターフェースを追加する。
ブラウザの⾔語設定に応じて、⽇本語と英語の両⽅のユーザーインターフ
ェースが表⽰されるようにする。
4
© 2012 IBM Corporation
XPages アプリケーションの国際化と地域化の⼿順
‹
XPages のコントロールが⾃動⽣成する UI は、Lotus Domino によって
すでに国際化と地域化がされている。
‹
XPagesアプリケーションの国際化オプションの設定を有効にする。
‹
静的⽂字列の地域化(翻訳)
‹
‹
動的⽂字列の国際化と地域化
‹
‹
‹
国際化の設定によって⽣成されたプロパティファイルを翻訳する。
動的⽂字列を⽣成しているロジックを国際化する
ロジックが参照しているプロパティファイルを翻訳する。
その他の設計要素の国際化 ・・・ 今回は範囲外
‹
‹
スタイルシートとテーマ
画像
‹
などなど・・・
5
© 2012 IBM Corporation
Web ブラウザの⾔語設定の確認 – Internet Explorer
‹
メニューから「ツール」→「インターネットオプション」を選択し、
「全般タブ」で「⾔語」ボタンをクリックする。
‹
「⾔語の優先順位」ダイアログボック
スで「⾔語」の⼀番上が「⽇本語」と
なっていることを確認する。
6
© 2012 IBM Corporation
Web ブラウザの⾔語設定の確認 – Firefox
‹
メニューから「ツール」→「オプション」を選択し、「コンテンツ」で
「⾔語設定」ボタンをクリックする。
‹
「Web ページ⾔語」ダイアログボッ
クスで「⾔語の優先順位」の⼀番上が
「⽇本語」となっていることを確認す
る。
7
© 2012 IBM Corporation
アプリケーションを開く
‹
‹
Domino Designer を起動し、メニューから「ファイル」→「アプリケー
ション」→「開く」を選択。
以下のアプリケーションを
選択して開く
‹
‹
‹
サーバー:
ローカル
タイトル:
journal i18n
ファイル名: journal_i18n.nsf
‹
‹
※英語の UI で作成された
「お⼩遣い帳」アプリ。
このアプリケーションは以下の
設計で構成されている。
‹
‹
‹
「table」XPage
「header」カスタムコントロール
「StringsUtil」スクリプトライブラリ
この教材のベースは以下のチュートリアルにある。
XPages による Web アプリケーション開発: 前編
http://www.ibm.com/developerworks/jp/ysl/library/lotus/y-lot-xpages1/
8
© 2012 IBM Corporation
アプリケーションの動作を確認する
‹
アプリケーションナビゲーターで「XPages」→「table」でページを
開き、メニューから「Web ブラウザでプレビュー」を選択して適当な
ブラウザで XPages アプリケーションを開く。
9
© 2012 IBM Corporation
アプリケーションの動作を確認する
‹
‹
‹
ひとつの XPage とひとつのカスタムコント
ロールからなるアプリケーション。
ユーザーインターフェースはすべて英語。
ただしビューコントロールが⾃動⽣成する
「ページめくり」のみ⽇本語になっている。
10
© 2012 IBM Corporation
国際化オプションの設定
1. アプリケーションナビゲーターで「アプリケーションプロパティ」を
クリックする。
2. アプリケーションプロパティで「XPages」タブを開く。
3. 「ローカリゼーションのオプション」で「ローカリゼーションを有効にす
る」を選択。
4. 「追加ボタン」を押して表⽰されるダイアログで以下の「⽇本語 [ja]」
と「英語 [en]」を追加。
5. 「ソース⾔語」に「英語 [en]」を選択。
6. 「アプリケーションプロパティ」を保存する。
‹
メニューから「プロジェクト」を選択し、「⾃動的にビルド」が選択されて
いることを確認する。これが選択されていないと、プロパティファイルの⽣
成が⾏われない。
7. 保存後、XPages をプレビューし、⾃動的に翻訳されていることを
確認する。
11
© 2012 IBM Corporation
国際化オプションの設定
1
2
4
3
日本語と英語を選択する。
12
© 2012 IBM Corporation
国際化されたことの確認
‹
UI に表⽰される⽂字列が [ja | Expense
List] のようにロケールコード付きで表⽰さ
れることを確認する。
13
© 2012 IBM Corporation
⾃動⽣成されたプロパティファイルの確認
‹
‹
⽣成されたプロパティファイルは、Domino Designer の通常のアプリケ
ーションナビゲーターからは⾒えない。
メニューより「ウィンドウ」→「Eclipse ビューの表⽰」→「パッケージ
エクスプローラー」を選択してパッケージエクスプローラーを表⽰する
14
© 2012 IBM Corporation
プロパティファイルの編集
‹
‹
プロパティファイルには半⾓英数字と記号しか⼊⼒できない。⽇本語など
は⽂字コードの数値でエンコードして記載する必要がある。
Domino Designer のテキストエディターなどでプロパティファイルを開
くと、⽇本語の編集ができない。
‹
‹
いったんファイルをエキスポートして編集し、native2ascii ツールによる変換
が必要。
この実習環境の Domino Designer には、プロパティファイルを編集する
ための以下のプラグインが導⼊されており、普通のテキストファイルのよ
うにプロパティが編集できる。
‹
プロパティエディタ
‹
http://propedit.sourceforge.jp/
15
© 2012 IBM Corporation
プロパティファイルの翻訳
1. ⾃動⽣成された table_ja.properties を開いて確認する。
2. この内容を削除し、以下のファイルの内容で置き換える。
‹
C:¥LabFiles¥XPages_I18n¥properties¥table_ja.properties.txt
3. 編集した table_ja.properties を上書き保存する。
4. XPages をプレビューし、翻訳された⽂字列の表⽰を確認する。
16
© 2012 IBM Corporation
翻訳された画⾯の確認
‹
おおよその部分は翻訳されたが、まだ翻訳さ
れていないところがある。
‹
‹
‹
⼀覧の勘定科⽬の値
追加や更新をしたときに表⽰されるメッセージ
「このアプリケーションについて」リンクで表⽰す
るダイアログ
17
© 2012 IBM Corporation
カスタムコントロールの国際化
‹
‹
‹
このサンプルでは「header」カスタムコントロールの表⽰内容は、カスタムプロ
パティとして定義しており、「table」XPage 側で定義している。
カスタムプロパティの定義で
「ローカライズ可能⽂字列」
とすることで、呼び出しもと
の XPage で翻訳対象⽂字列
として認識され、プロパティ
ファイルに抽出されている。
カスタムコントロールで独⾃
の⽂字列を含んでいるときに
は、そのカスタムコントロー
ルのプロパティファイル
(header_ja.properties)の
翻訳が必要。
18
© 2012 IBM Corporation
リソースバンドルを使⽤しての動的⽂字列の翻訳
‹
‹
「table」XPage を開き、左側の表の
「account」の表⽰部分を選択し、
プロパティビューの「データ」タブを
選択する。
以下のような式で列の値を表⽰してい
ることを確認する。
var account = viewEntry.getCollumnValue("account");
return account;
‹
勘定科⽬(account)には、以下の
ように、英語表記でデータが設定さ
れている。
‹
交通費(traffic)、通信費(communication)、
⾷費(foods)、⽔道光熱費(utilities)、
消耗品代(supplies)、
新聞図書費(publications)、雑費(others)
19
© 2012 IBM Corporation
サーバーサイド Javascript のためのプロパティの追加
‹
‹
アプリケーションナビゲーターで「リソース」→「ファイル」を
選択する。
ファイル⼀覧で「ファイルリソースのインポート」をクリックして、以下
の2つのファイルをインポートする。
‹
‹
フォルダ:
ファイル:
C:¥LabFiles¥XPages_I18n¥properties
strings.properties と string_ja.properties
2つのプロパティファイルがインポートされた画⾯
20
© 2012 IBM Corporation
サーバーサイド Javascript のためのプロパティの追加
‹
‹
「table」XPage の背景を選択し、プロパティビューで「リソース」
タブを開く。
「追加」ボタンで「リソースバンドル」を選択し、以下のように設定
する。
‹
‹
リソースバンドル名:
プロパティファイル名:
strings
strings.properties
※ 英語のプロパティファイル名を選択する。⽇本語のプロパティファイルは
ロケールに応じて⾃動的にロードされる。
21
© 2012 IBM Corporation
サーバーサイド Javascript の実装の国際化
‹
‹
「table」XPage を開き、左側の表の「account」の表⽰部分を選択し、
プロパティビューの「データ」タブを選択する。
Javascript コードの内容を以下のように変更する。
‹
XPage で定義された「strings」リソースバンドルから、勘定科⽬の
英単語をキーに翻訳⽂字列を取得するコードを実装。
var account = viewEntry.getCollumnValue("account");
return strings[account];
‹
保存後、XPage をプレビューし、「勘定科⽬」列の内容が⽇本語で表⽰
されることを確認する。
22
© 2012 IBM Corporation
「勘定科⽬」列の内容が翻訳された画⾯
‹
追加や更新をしたときに表⽰されるメッセージは
まだ英語が表⽰されている。
23
© 2012 IBM Corporation
スクリプトライブラリで⽣成される⽂字列の国際化
‹
‹
アプリケーションナビゲーターで「コード」→「スクリプトライブラリ」
を開き、「StringsUtil」スクリプトライブラリを開く。
メッセージの⽂字列はここで⽣成されているが、以下の問題がある。
‹
‹
⽂字列の断⽚がハードコードされている。
メッセージに表⽰されるデータは、⾔語によって並びが変わるかもしれない。
24
© 2012 IBM Corporation
スクリプトライブラリで⽣成される⽂字列の国際化
‹
このスクリプトライブラリの内容を削除し、以下のファイルの内容と置き
換える。
‹
‹
C:¥LabFiles¥XPages_I18n¥jss¥StringsUtil.jss.txt
リソースバンドルの取得
‹
getString() 関数では以下のような処理で「strings.properties」をリソース
バンドルとして取得する。
function getStrings() {
・・・中略・・・
var resource = new com.ibm.xsp.resource.BundleResource();
resource.src = "/strings.properties";
resource.component = view;
var strings = resource.contents;
・・・中略・・・
return strings;
}
25
© 2012 IBM Corporation
スクリプトライブラリで⽣成される⽂字列の国際化
‹
リソースバンドルの取得の効率化(つづき)
‹
必要なたびにリソースバンドルの取得を⾏うオーバーヘッドが軽減するため、
取得したリソースバンドルを配列に保存して再利⽤する。
function getStrings() {
var locale = view.getLocale();
if(applicationScope.stringsPerLocale ){
var existingStrings = applicationScope.stringsPerLocale[locale];
if( existingStrings ){
return existingStrings;
}
}
・・・中略・・・ ここで リソースバンドルを strings 変数にセット
synchronized(applicationScope) {
if( ! applicationScope.stringsPerLocale ) {
applicationScope.stringsPerLocale = new java.util.HashMap();
}
applicationScope.stringsPerLocale[locale] = strings;
}
return strings;
}
26
© 2012 IBM Corporation
スクリプトライブラリで⽣成される⽂字列の国際化
‹
エントリ追加時のメッセージを⽣成する getMessage4Add() を
I18n ライブラリを⽤いて実装する。
function getMessage4Add(date, account, memo, amount) {
var message = getStrings()["messageAddExpense"];
return I18n.format(message, memo, amount, date);
}
‹
ここで「messageAddExpense」の値は
‹
‹
‹
英語: 「Expense for {0} with {1} yen on {2} was added.」
⽇本語: 「{2}の{0}に対する{1}円の⽀出を追加しました。」
I18n.format()関数は、フォーマット⽂字列内の「{x} 」で表現される数
字の部分に引数の値を当てはめる。
memo="交通費"、amount=200、date="2012/11/3" のとき、
‹
‹
英語: 「Expense for 交通費 with 200 yen on 2012/11/3 was added.」
⽇本語: 「2012/11/3の交通費に対する200円の⽀出を追加しました。」
27
© 2012 IBM Corporation
スクリプトライブラリで⽣成される⽂字列の国際化
‹
‹
⽇付と数値の表現も、プロパティファイルのフォーマット⽂字列で変更する。
⽇付
function formatDate(dateObj) {
var format = getStrings()["dateFormat"];
return I18n.toString(dateObj, format, view.getLocale());
}
‹
dateFormat プロパティの値
‹
‹
‹
‹
英語:
⽇本語:
数値
「MMMM dd yyyy」
「yyyy年M⽉d⽇」
function formatCurrency(amount) {
var format = getStrings()["amountFormat"];
return I18n.toString(amount, format, context.getLocale());
}
amountFormatプロパティの値
‹
英語/⽇本語: 「###,###」
28
© 2012 IBM Corporation
Javascript で⽣成されるメッセージの翻訳の確認
‹
追加や更新をしたときに表⽰されるメッセージは
⽇本語化された。
29
© 2012 IBM Corporation
クライアントサイド Javascript で⽣成される⽂字列の国際化
30
© 2012 IBM Corporation
クライアントサイド Javascript で⽣成される⽂字列の国際化
‹
「About this application」リンクには以下のようなクライアントサイド
Javascript が実装されている。
var message = "This Application is developed to show I18n/L10n of XPages application.";
alert(message);
‹
このコードを以下のように書き換える。
‹
このページが⽣成される際に、#{javascript: ... }内のコードが
サーバーサイド Javascript で処理され、プロパティファイルから
⾔語に対応したメッセージが設定される。
var message = "#{javascript: strings['aboutThisApp']}";
alert(message);
31
© 2012 IBM Corporation
クライアントサイド Javascript で⽣成される⽂字列の国際化
‹
「table」XPage を保存後にプレビューし、翻訳された⽂字列が表⽰され
ることを確認する。
32
© 2012 IBM Corporation
CSJS で⽣成されるメッセージの翻訳の確認
33
© 2012 IBM Corporation
5. まとめ
‹
‹
‹
‹
XPages では国際化アプリケーションを開発するための
仕組みがあらかじめ⽤意されている。
国際化オプションを設定し、⽣成されるプロパティ
ファイルに含まれる静的⽂字列を翻訳することで
ある程度の地域化は実現できる。
それ以外の動的⽂字列の国際化と地域化もプロパティ
ファイルを使って実現可能。
ただし、Javascript ロジックなどで⽣成される⽂字列に
ついては、国際化を考慮した実装をあらかじめ⾏う
必要がある。
34
© 2012 IBM Corporation
参考⽂献
‹
Lotus Notes/Domino Application Development Wiki
‹
XPages でのロケールの使⽤⽅法
‹
‹
XPages アプリケーションで「ローカライゼーションのオプション」の
使⽤⽅法
‹
‹
http://www10.lotus.com/ldd/ddwiki.nsf/dx/Japanese_Locale_use_in_XPages
http://www10.lotus.com/ldd/ddwiki.nsf/dx/Japanese_XPages_How_to_use_the_localiza
tion_options
XPages アプリケーション開発での Javascript の国際化
‹
http://www10.lotus.com/ldd/ddwiki.nsf/dx/Japanese_XPages_JavaScript_Internationali
zation
35
© 2012 IBM Corporation
36
© 2012 IBM Corporation
Fly UP