在脚本中,不能使用实体,用属性文件代替。
属性
当你在XUL文件中使用DTD文件是恰当的。然而,脚本不解析实体。也就是说,如果你希望在脚本中显示信息而且你不知道到底要显示什么,请使用属性文件
一个属性文件包含一系列字符串。你可以在DTD文件旁边找到属性文件(.properties后缀)。属性按照以下语法定义 name=value。实例如下。
notFoundAlert=No files were found matching the criteria. deleteAlert=Click OK to have all your files deleted. resultMessage=%2$S files found in the %1$S directory.
上例中,属性文件包含桑属性,可以由脚本读取显示给用户。
Stringbundles
你可以写一段代码手动来读取属性,而在XUL中有一个 stringbundle
元素来帮你做。这个元素有一系列函数有属性文件中获取属性并得到本地化信息。这个元素有属性文件读取内容并为你建立一个属性列表。你可以通过名字来查找属性。
<stringbundleset id="strbundles"> <stringbundle id="strings" src="strings.properties"/> </stringbundleset>
这个元素会从与该XUL文件系统的目录中读取名为 'strings.properties'的文件。像其他非显示元素一样你可以使用一个 stringbundleset 来包含所以的
stringbundle
。
由 stringbundle获取字符串
stringbundle
元素有一系列方法。首先是 getString
用于脚本读取字符串。
var strbundle = document.getElementById("strings"); var nofilesfound=strbundle.getString("notFoundAlert"); alert(nofilesfound);
- 本例首先使用
id 获得字符串束的一个引用
- 然后在属性文件中查找 'notFoundAlert' 字符串
getString()
函数返回字符串的值或 null (字符串不存在)。 - 最后把职工文本显示在提示框里。
文本格式
getFormattedString()
方法也根据名字从文本束中查找字符串,此外会按照格式控制代码 (如 %S
) 将其后给出的数组内容替换入字符串。
var dir = "/usr/local/document"; var count = 10; var strbundle = document.getElementById("strings"); var result = strbundle.getFormattedString("resultMessage", [ dir, count ]); alert(result);
本例显示如下。
10 files found in the /usr/local/document directory.
你会注意到格式化代码 %1$S
及 %2$S
被使用,替换顺序也和在数组中的不同。格式化代码 %n$S 直接描述替换参数的位置。尽管在不同语言中词序可能不同通过 getFormattedString()
描述的顺序可以被写入属性文件。
非ASCII码的换码符
(这可能不再正确:在 Localizing extension descriptions中说 “使用 UTF-8 编码(而非 BOM) 保证外文正确显示。” UTF-8 编码文本有效, 换码符同样有用。一些新想法的引入会更有用。)
尽管大多数语言使用非ASCII字符集。属性文件只能使用ASCII字符集编制。然而,属性文件支持其他字符的换码形式: \uXXXX
这里的 XXXX 是字符码,因此,你的属性文件可以包含非ASCII字符,不过你需要把他们转换为换码形式。你可以使用 Sun's Java Development Kit (JDK)的 native2ascii 命令来完成它。
Gecko 1.8.x (or later) 支持属性文件以 UTF-8编码。你可以直接写入非ASCII字符。
下一章,我们将讨论 XBL,它用于定义元素的行为( behavior of an element.)
Languages