ロケール
XULではロケールに応じたメッセージ表示などが可能であるので,その方法を調査してみた.
サンプルとして,電卓XULアプリケーションを作成してみた.これ.サンプルのためのinstalled-chrome.txt
の記述は以下.
このように言語に応じた表示の変更を,XULではメッセージリソースファイルを外出しして実装することができる.
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で起動すると以下のようなウィンドウが開いた.
サンプルパッケージは,content,localeの二つのディレクトリに大きくわかれる.
このように実体宣言の羅列である.XULファイルではこれを参照するように記述していく.
このXULファイルでは,冒頭で外部実体参照を指定している.
$> 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を示す.
<!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でそのロケールを使用するパッケージを記述する.

