首先,看看在 locale/ 下的 *.properties 檔,以 .properties 的命名規則是extension 樣版精靈產生的,裡頭就是放一堆訊息定義字串,其範例為:
helloMessage=Hello World!
helloMessageTitle=Hello
prefMessage=Int Pref Value: %d
extensions.svgeditor.description=svg editor to create 3D model for virtual reality
注意到最後一條,依 Javascript 的語法來看,似乎是 extensions 物件下 svgeditor.description 屬性,事實上這一點在 defaults/preferences/svgeditor.js 中可以看到最後一行:
pref("extensions.svgeditor@wade.cc.chen.description", "chrome://svgeditor/locale/svgeditor.properties");
不過這用法似乎不怎麼方便,我們來看看其他地方怎麼引用這 properties 檔所定義的 helloMessageTitle 就可以知道些實作技巧:
請參考 overlay.js 有底下二行:
.this.strings = document.getElementById("svgeditor-strings");
.this.strings.getString("helloMessageTitle")
其中 svgeditor-strings 定義在 firefoxOverlay.xul:
<stringbundleset id="stringbundleset">
<stringbundle id="svgeditor-strings" src="chrome://svgeditor/locale/svgeditor.properties"/>
</stringbundleset>
也就是,透過
不過呢,每次都像上面那樣用也頂麻煩的,可以增加一個函數如下,用起來會方便許多:
function getStr(id, args)
{
if (args && (args instanceof Array) && args.length > 0)
return document.getElementById("locale-strings").getFormattedString(id, args);
return document.getElementById("locale-strings").getString(id);
}
例如直接用 getStr("extensions.svgeditor.description") 即可,不必再宣告半天
細心的您也許有發現到 getFormattedString(),這個在 properties 檔中,等號右方的值若出現 %S(大寫的 S)的話,會被後面的 args 陣列取代,也就是第一個 %S 由 args 陣列第一個元素取代,第二個 %S 由 args 陣列第二個元素取代,依此類推。
0 意見:
張貼留言