【问题标题】:Can I get a list of available locale translations from my Chrome extension?我可以从我的 Chrome 扩展程序中获取可用的语言环境翻译列表吗?
【发布时间】:2014-10-09 08:10:33
【问题描述】:

有没有办法从我的 Google Chrome 扩展程序中检索所有可用翻译的列表?

例如,我的应用可能包含以下文件夹:

_locales\en\messages.json
_locales\fr\messages.json
_locales\es\messages.json

有没有办法从扩展本身中知道它是enfres

第二个问题,有没有办法将特定的messages.json 文件解析为 JSON 数据?我的意思是比chrome.i18n.getMessage() 提供的功能多一点。

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension internationalization


    【解决方案1】:

    两个问题都是肯定的,这要归功于能够读取扩展程序自己的文件夹:

    chrome.runtime.getPackageDirectoryEntry(function callback)

    为包目录返回一个DirectoryEntry

    例如,您可以以这种方式列出语言环境(没有弹性,添加您自己的错误检查):

    function getLocales(callback) {
      chrome.runtime.getPackageDirectoryEntry(function(root) {
        root.getDirectory("_locales", {create: false}, function(localesdir) {
          var reader = localesdir.createReader();
          // Assumes that there are fewer than 100 locales; otherwise see DirectoryReader docs
          reader.readEntries(function(results) {
            callback(results.map(function(de){return de.name;}).sort());
          });
        });
      });
    }
    
    getLocales(function(data){console.log(data);});
    

    同样,您可以使用它来获取 messages.json 文件的 FileEntry 并对其进行解析。
    编辑:或者,一旦您知道文件夹名称,您就可以按照Marco's answer 中的说明使用 XHR。

    【讨论】:

    • 谢谢。说到错误检查,我似乎找不到任何好的文档。说root.getDirectory()errorCallback(或您跳过的最后一个参数)在发生错误时调用了哪些参数?
    • 回答我自己的问题,errorCallback,或root.getDirectory() 的最后一个参数,有两个方便的属性messagename,其中包含有关错误的一些信息。
    • 也只是一个更新,我不能将此标记为答案,因为@Xan 的代码示例不完整。如果有人感兴趣,这里有一个工作示例:developer.mozilla.org/en-US/docs/Web/API/…
    【解决方案2】:

    要了解用户当前使用的语言环境,您可以这样做:

    currentLocale = chrome.i18n.getMessage("@@ui_locale");
    

    现在currentLocale 将类似于"en""fr" 或者无论是用户使用的语言环境。所以现在您可以使用它来构建特定于语言环境的 URL。

    要将您的 messages.json 用作 Javascript 对象,您可以:

    1. 获取当前语言环境
    2. 使用XMLHttpRequest 请求messages.json 文件
    3. 使用JSON.parse() 方法将内容解析为对象。

    假设您有一个像这样的messages.json 文件:

    {
        "hello": {
             "message": "Hello world!",
             "description": "Sample text used for testing."
        }
    }
    

    您现在将执行 XHR 来获取文件,如下所示:

    var currentLocale = chrome.i18n.getMessage("@@ui_locale"),
        xhr = new XMLHttpRequest(),
        messages;
    
    xhr.open("GET", "/_locales/"+currentLocale+"messages.json", false);
    xhr.send();
    
    messages = JSON.parse(xhr.responseText);
    
    // now you can access the messages like this:
    alert(messages["hello"].message);
    

    你会看到你的消息提醒。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2012-03-25
      • 2012-05-10
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      相关资源
      最近更新 更多