Firefox字符串资源:如何获得本地化的友好语言名称?

时间:2015-06-23 16:22:46

标签: firefox firefox-addon firefox-addon-sdk

我正在开发一个涉及各种语言和方言字典的Firefox扩展。我想向用户显示一个对话框,以选择可用语言的拼写检查词典。 用户从en-US,ar-EG,en-GB等值中进行选择将非常繁琐,因此,我希望显示本地化的语言名称,就像Firefox在此屏幕截图中所做的那样 Dictionaries

这是我的阿拉伯语Firefox上的字典选择菜单,显示en-US和ar两种语言的名称。

怎么做这样的事情?

2 个答案:

答案 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。