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

Firefox字符串资源:如何获得本地化的友好语言名称?,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,我正在开发一个Firefox扩展,它包含各种语言和方言的词典。我想向用户显示一个对话框,以选择可用语言的拼写检查词典。 对于用户来说,从诸如en-US、ar-EG、en-GB等值中进行选择会很繁琐,因此,我想显示本地化的语言名称,就像Firefox在这个屏幕截图中所做的那样 这是我的阿拉伯文Firefox上的字典选择菜单,显示两种语言的名称en-US和ar 如何做这样的事情?这是很容易做到的。我这里有一些非常基本的本地化模板: 属性文件用于私有js文件本地化。dtd用于xul/xhtml/

我正在开发一个Firefox扩展,它包含各种语言和方言的词典。我想向用户显示一个对话框,以选择可用语言的拼写检查词典。 对于用户来说,从诸如en-US、ar-EG、en-GB等值中进行选择会很繁琐,因此,我想显示本地化的语言名称,就像Firefox在这个屏幕截图中所做的那样

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


如何做这样的事情?

这是很容易做到的。我这里有一些非常基本的本地化模板:


属性文件用于私有js文件本地化。dtd用于xul/xhtml/和内联javascript。

以下是我查找和使用这些字符串的步骤:

1-我下载并解压缩了

2-我在源文件中搜索名称“新西兰”。这个唯一的国家名称应该只存在于我要查找的文件中。而不是使用一般术语,如英语、美国、阿拉伯语等

3-搜索让我找到了两个有趣的文件:regionNames.properties和languageNames.properties。第一个有所有国家的名称,另一个有所有语言的名称。Firefox应该使用这两组字符串来显示字典名称

4-我发现这两个文件可以从URL获取chrome://global/locale/languageNames.properties 及chrome://global/locale/regionNames.properties,因此,我使用和对象来加载和使用资源

下面是一个代码示例:

  • 在我的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
    
这就是我想要的。现在,我可以根据语言和国家名称编写词典名称。
发布最终结果后,我将更新答案以添加项目存储库的路径。

您好,谢谢您的回答。在MDN上发布的示例之前,我已经看过了。这些是本地化插件的示例。如果我遵循这种方法,我将不得不编写自己的.properties文件,其中包含所有可能的语言和方言的名称,并且我必须为插件目标的主要语言执行此操作,这不是我想要的。我想利用Firefox中已经存在的功能。Firefox已经将名称(英语(美国)、阿拉伯语、英语(新西兰)等)本地化为浏览器的当前语言,我想获取它们。哦,这真是个好主意,你应该能够调出它们的本地化文件,我来看看。你能告诉我如何在Firefox中打开语言菜单吗?我可以用chrome://global/locale/languageNames.properties 及chrome://global/locale/regionNames.properties 如何将它们加载到应用程序中?我知道如何使用字符串捆绑包。谢谢你的帮助。我很快会公布答案,并对你的答案进行投票。我补充了我的答案。感谢您的帮助和您在MDN上所做的出色工作。无需下载整个firefox代码,这里有dxr.mozilla.org,这是夜间版本源代码:)出色的工作和出色的解决方案:)@Noitidart感谢您指导我做到这一点。下次会有用的