ローカライズ可能な文字列を properties ファイルでなく DTD ファイルで定義するテクニック

一般的に、ローカライズ可能な文字列の定義は、以下のように2通りの使い分けが必要となる。

(1) XULファイル内で使用する文字列
DTD ファイル内に実体参照として定義し、XULファイル から DOCTYPE 宣言によって呼び出す。

(2) JavaScript内で使用する文字列
properties ファイル内に定義し、XULファイル から stringbundle 要素によって呼び出す。その例を以下に示す。

sample.xul

<stringbundle id="sampleString" src="../locale/sample.properties" />

sample.properties

sample.hello=こんにちは

sample.js

var sampleString = document.getElementById("sampleString");
alert(sampleString.getString("sample.hello"));

しかし、時にはわざわざ DTD ファイルとは別に properties ファイルを作るのが面倒なケースもある。そのような時、DTD ファイル内で文字列を定義し、XUL ファイル内に直接 JavaScript を書き込んでその中で実体参照を用いるというテクニックがある。この場合、JavaScript を CDATA セクション内に記述すると実体参照が行われないので注意する必要がある。

sample.xul

<!DOCTYPE window SYSTEM "../locale/sample.dtd">
...
<script type="application/x-javascript">
    var gSampleString = {
        hello : "&sample.hello;"
    };
</script>

sample.dtd

<!ENTITY sample.hello "こんにちは">

sample.js

alert(gSampleString.hello);

TOP

TOP