「ローカライズ」の編集履歴(バックアップ)一覧に戻る

ローカライズ - (2011/03/31 (木) 09:51:55) の編集履歴(バックアップ)


XULのローカライズ

localeフォルダにsample.dtdファイルを作成し、実体宣言を行う。
<!ENTITY sample.label "サンプル">
<!ENTITY sample.key   "S">
contentフォルダのsample.xulに、dtdファイルの読み込み宣言と実体参照を記述する。
<!DOCTYPE window SYSTEM "chrome://sample/locale/sample.dtd">
<menuitem label="&sample.label;" accesskey="&sample.key;"/>

JavaScriptのローカライズ


まず、localeフォルダにsample.propertiesファイルを用意する。
SAMPLE = サンプル
SAMPLE_REPLACE_1 = 数字%Sと数字%S
SAMPLE_REPLACE_2 = 数字%2$Sと数字%1$S
で、この後だが、XUL、JSM、XPCOM の3つの方法がある。

XULを仲介する

XULに以下のように記述。
<stringbundleset id="stringbundleset">
  <stringbundle id="strings_sample" src="chrome://sample/locale/sample.properties"/>
</stringbundleset>
あとはJavaScript内で以下のように使える。
  1. var strings = document.getElementById("strings_sample");
  2. var text1 = strings.getString("SAMPLE"); // → サンプル
  3. var num1 = 5;
  4. var num2 = 10;
  5. var text2 = strings.getFormattedString("SAMPLE_REPLACE_1", [num1, num2]); // → 数字5と数字10
  6. var text3 = strings.getFormattedString("SAMPLE_REPLACE_2", [num1, num2]); // → 数字10と数字5
ローカライズ文字列を取得できないと例外エラーを吐くので注意

JavaScriptコードモジュールを使用

sample.propertiesを用意した後は以下のように使う。
  1. Components.utils.import("resource://gre/modules/services-sync/ext/StringBundle.js");
  2. var strings = new StringBundle("chrome://sample/locale/sample.properties");
  3. var text1 = strings.get("SAMPLE"); // → サンプル
  4. var num1 = 5;
  5. var num2 = 10;
  6. var text2 = strings.get("SAMPLE_REPLACE_1", [num1, num2]); // → 数字5と数字10
  7. var text3 = strings.get("SAMPLE_REPLACE_2", [num1, num2]); // → 数字10と数字5
XULを仲介するより楽な気がする…
getStringやgetFormattedStringも使える。

XPCOMを直接使う

  1. var Cc = Components.classes;
  2. var Ci = Components.interfaces;
  3. var gBundle = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
  4. var strings = gBundle.createBundle("chrome://sample/locale/sample.properties");
  5. var text1 = strings.GetStringFromName("SAMPLE"); // → サンプル
XULで仲介する方法が出来るまでよく使われてたが、今ではめったに見ない。上に書いたJavaScriptコードモジュールも便利だし。