我正在开发一个涉及各种语言和方言字典的Firefox扩展。我想向用户显示一个对话框,以选择可用语言的拼写检查词典。 用户从en-US,ar-EG,en-GB等值中进行选择将非常繁琐,因此,我希望显示本地化的语言名称,就像Firefox在此屏幕截图中所做的那样
这是我的阿拉伯语Firefox上的字典选择菜单,显示en-US和ar两种语言的名称。
怎么做这样的事情?
答案 0 :(得分:2)
以下是我查找并使用这些字符串的方法:
1-我下载了whole Firefox source code并将其解压缩。
2-我在源文件中搜索了“新西兰”这个名字。此唯一的国家/地区名称应仅存在于我正在查找的文件中。而不是使用英语,美国,阿拉伯语等一般术语
3-搜索引发了两个有趣的文件:regionNames.properties和languageNames.properties。第一个具有所有国家的名称,另一个具有所有语言的名称。 Firefox应该使用两组字符串来显示字典名称。
4-我发现这两个文件可以从URL chrome://global/locale/languageNames.properties和chrome://global/locale/regionNames.properties中获取,因此,我使用了{{3}和string bundle service对象加载和使用资源。
以下是代码示例:
在我的main.js文件的顶部:
const {Cc, Ci, Cu} = require("chrome"),
stringBundles = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
然后我用另一种方法获得这段代码:
let languagesNamesBundle = stringBundles.createBundle("chrome://global/locale/languageNames.properties"),
countriesNames = stringBundles.createBundle("chrome://global/locale/regionNames.properties");
console.log(languagesNamesBundle.GetStringFromName("ar")); // العربية Arabic
console.log(languagesNamesBundle.GetStringFromName("af")); // الأفريكانية Afrikaans
console.log(countriesNames.GetStringFromName("fj")); // فيجي Fiji
console.log(countriesNames.GetStringFromName("cr")); // كوستا ريكا Costa Rica
这就是我想要的。现在我可以用语言和国家名称撰写字典名称。 在发布最终结果后,我将更新答案以添加项目存储库的路径。
答案 1 :(得分:1)
这很容易实现。我在这里有一些非常基本的本地化模板:
https://github.com/Noitidart/l10n/tree/xhtml-xul
https://github.com/Noitidart/l10n/tree/properties
属性文件用于privelaged js文件localiztion。和.dtd用于xul / xhtml /和内联javascript。