Mozilla Thunderbird アドオンとして、ひとまず動作するものが作れるようになりましたが、公式サイトで世界中に公開することを視野に入れると、特にユーザ数が多い英語だけでも他言語化対応しておいた方が良いでしょう。
前回までは、ボタンのラベルや表示されるメッセージを、XUL や JavaScript のコード内に直接記述していました。多言語化を考える場合、言語によって表示が異なるようなものはリソースとして別に持っておき、コードからはこのリソースを参照するようにします。そこで、言語ごとにリソースを持てるよう、chrome.manifest に locale の指定を追加します。
content hoge chrome/content/ overlay chrome://messenger/content/folderProps.xul chrome://hoge/content/my.xul locale hogera ja locale/ja/ locale hogera en locale/en/
\{DEV_DIR}
+- index.rdf
+- chrome.manifest
+- \chrome
+- \content
+- my.xul
+- my.js
+- \locale
+- \ja
+- foo.dtd
+- bar.properties
+- \en
+- foo.dtd
+- bar.properties
ユーザ インタフェースを定義する XUL ファイル内で、言語依存の文字列を直接記述している部分を、リソースを参照するように書き換えます。
<!DOCTYPE overlay SYSTEM "chrome://hogera/locale/foo.dtd">
<overlay id="sample"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript" src="my.js"></script>
<statusbar id="status-bar">
<button label="&hoge.press_me;" oncommand="MyCommand(this)" />
</statusbar>
</overlay>
そして、リソース文字列とリソースの実体を言語ごとに定義した foo.dtd を作成します。*1
<!-- コメント行なのです! --> <!ENTITY hoge.press_me "押すべし">
<!-- I'm a comment line. --> <!ENTITY hoge.press_me "Press Me">
JavaScript からリソースを読み込むには少し手間です。先ず XUL ファイル内で、ローカライズされたリソースを、プロパティ ファイルから読み込むために stringbundle 要素を作成します。
<!DOCTYPE overlay SYSTEM "chrome://hogera/locale/foo.dtd">
<overlay id="sample"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<stringbundleset>
<stringbundle id="sbLabels" src="chrome://hogera/locale/bar.properties" />
</stringbundleset>
<script type="text/javascript" src="my.js"></script>
<statusbar id="status-bar">
<button label="&hoge.press_me;" oncommand="MyCommand(this)" />
</statusbar>
</overlay>
次に JavaScript では、getElementById で先の stringbundle 要素を取得し、getFormattedString メソッド または getString メソッドを呼び出し、キー名から目的の文字列を得るという手順を踏みます。
function MyCommand( me ) {
var sb = document.getElementById( 'sbLabels' );
me.label = sb.getString( 'TestTest' );
}
キー名と文字列を言語ごとに定義した bar.properties を作成します。
# この行はコメントなの TestTest=こんにちは!雷鳥です!
# I'm a comment line. TestTest=Hello, Thunderbird addon.
雷鳥の動作する言語ロケールは、設定エディタの general.useragent.local からでも変更できますが、多言語化の作業中は、言語ロケールを明示*2して雷鳥を起動するショートカットを、言語ロケールごとに作っておくと便利です。
thunderbird.exe -UILocale en-US -console -jsconsole -no-remote -P 開発用