我正在构建一个FF扩展,我为自己处理一些xhtml以支持子表单加载,所以我必须识别定义了l10n属性的元素并将它们添加到字符串值中。因为l10n不能从主代码共享到内容脚本(因为不是简单的JSON对象),所以我通过获取加载的键值并定义了一个"本地化的数组包来管理这种情况&#34 ;,像这样:
lStrings = ["step_title", ........ ];
for (var i = 0; i < lStrings.length; i++) {
bundle[lStrings[i]] = this.locale(lStrings[i]);
}
问题是,我必须在这里写.properties文件中的每个条目......那么,你知道如何访问这个键值吗?我已经尝试使用.toString .toLocalString并检查对象,但无法找到对象能够返回所有密钥集合的方式。
你有更好的改进想法吗?
答案 0 :(得分:1)
var yourStringBundle = Services.strings.createBundle('chrome://blah@jetpack/content/bootstrap.properties?' + Math.random()); /* Randomize URI to work around bug 719376 */
var props = yourStringBundle.getSimpleEnumeration();
// MDN says getSimpleEnumeration returns nsIPropertyElement // https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIStringBundle#getSimpleEnumeration%28%29
while (props.hasMoreElements()) {
var prop = props.getNext();
// doing console.log(prop) says its an XPCWrappedObject but we see QueryInterface (QI), so let's try QI'ing to nsiPropertyElement
var propEl = prop.QueryInterface(Ci.nsIPropertyElement);
// doing console.log(propEl) shows the object has some fields that interest us
var key = propEl.key;
var str = propEl.value;
console.info(key, str); // there you go
}
查看有关学习的评论。不错的问题。我从回复中学到了更多关于QI的知识。