ファイヤープロジェクト
ロケール
2005-02-22T23:00+09:00   matsu
XULではロケールに応じたメッセージ表示などが可能であるので,その方法を調査してみた.
サンプルとして,電卓XULアプリケーションを作成してみた.これ.サンプルのためのinstalled-chrome.txt の記述は以下.
content,install,url,jar:resource:/chrome/mycalculator.jar!/content/mycalculator/
locale,install,url,jar:resource:/chrome/mycalculator.jar!/locale/en-US/mycalculator/
locale,install,url,jar:resource:/chrome/mycalculator.jar!/locale/ja-JP/mycalculator/
上記から予想できるように,サンプルプログラムは二つのロケールen-USとja-JPに対応する.ロケールはfirefox起動時オプションUILocaleで指定できる.指定しない場合はシステム環境のロケールが使用される.
firefox -chrome chrome://mycalculator/content/ 
で起動すると私の環境では以下のようなウィンドウが開いた.
firefox -chrome chrome://mycalculator/content/ -UILocale en-US
で起動すると以下のようなウィンドウが開いた.
このように言語に応じた表示の変更を,XULではメッセージリソースファイルを外出しして実装することができる.
サンプルパッケージは,content,localeの二つのディレクトリに大きくわかれる.
$> jar tvf mycalculator.jar 
     0 Tue Feb 22 15:18:46 JST 2005 content/
     0 Tue Feb 22 20:54:36 JST 2005 content/mycalculator/
   465 Tue Feb 22 15:17:58 JST 2005 content/mycalculator/contents.rdf
  1612 Tue Feb 22 20:48:30 JST 2005 content/mycalculator/mycalculator.xul
  1196 Tue Feb 22 20:48:24 JST 2005 content/mycalculator/mycalculator.js
     0 Tue Feb 22 18:12:42 JST 2005 locale/
     0 Tue Feb 22 17:52:10 JST 2005 locale/en-US/
     0 Tue Feb 22 20:54:22 JST 2005 locale/en-US/mycalculator/
   644 Tue Feb 22 19:52:46 JST 2005 locale/en-US/mycalculator/mycalculator.dtd
   530 Tue Feb 22 18:18:08 JST 2005 locale/en-US/mycalculator/contents.rdf
     0 Tue Feb 22 18:12:42 JST 2005 locale/ja-JP/
     0 Tue Feb 22 20:54:22 JST 2005 locale/ja-JP/mycalculator/
   530 Tue Feb 22 18:18:12 JST 2005 locale/ja-JP/mycalculator/contents.rdf
   682 Tue Feb 22 19:49:24 JST 2005 locale/ja-JP/mycalculator/mycalculator.dtd
   767 Tue Feb 22 19:48:32 JST 2005 locale/ja-JP/mycalculator/mycalculator.native.dtd
contentの下については今まで見てきた.そしてlocaleの下にロケールに応じたいわばリソースファイルがある.ディレクトリlocaleの下にはen-US,ja-JPがある.他のロケールにも対応するなら同様にlocaleの直下にロケール単位で増やして行く.localeの下のディレクトリ構成は以下となる.
locale/ロケール名/パッケージ名/
パッケージ名.dtd(サンプルではmycalculator.dtd)がリソースファイル名である.これがロケール毎のディレクトリの再深部にある.
locale/en-US/mycalculator/mycalculator.dtd
locale/ja-JP/mycalculator/mycalculator.dtd
ファイル名の通りDTDである.マルチバイト文字はユニコードにしておく必要がある.以下にlocalse/en-US配下のmycalculator.dtdを示す.
このように実体宣言の羅列である.XULファイルではこれを参照するように記述していく.
このXULファイルでは,冒頭で外部実体参照を指定している.
<!DOCTYPE window [
<!ENTITY % mycalculatorDTD SYSTEM "chrome://mycalculator/locale/mycalculator.dtd">
%mycalculatorDTD;
]>
あとは,参照したい場所で実体参照する.
<window
    id="mainwindow"
    title="&window.title;"
上の属性titleの値のように&と;で実体識別子を囲む.
サンプルjarファイルの中身から分かるように,ロケールファイルと同じディレクトリにそれぞれcontents.rdfがある.これはcontent配下のものとは若干子となる.以下にlocale/en-US配下のcontents.rdfを示す.
contentの場合は冒頭のRDF:Seqにパッケージがあり,次のRDF:Descriptionにそれに対応するパッケージがあった.ロケールの場合は,冒頭のRDF:Seqにロケールがあり,次のRDF:Descriptionにそれに対応するロケールがある.ロケールの中にはさらにchrome:packagesがあり,その中にRDF:SeqとRDF:liでそのロケールを使用するパッケージを記述する.
matsu(C)
Since 2002
Mail to matsu