我可以从Chrome扩展程序中获取可用的区域设置翻译列表吗?

时间:2014-10-09 08:10:33

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

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

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

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

有没有办法从扩展程序中知道它的enfres

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

2 个答案:

答案 0 :(得分:4)

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

  

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。

答案 1 :(得分:1)

要了解用户当前使用的区域设置,您可以执行以下操作:

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

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

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

  1. 获取当前区域设置
  2. 使用messages.json
  3. 申请XMLHttpRequest个文件
  4. 使用JSON.parse()方法将内容解析为对象。
  5. 让我们说你有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);
    

    并且您会看到您的消息提醒。