有没有办法从我的Google Chrome扩展程序中检索所有可用翻译的列表?
例如,我的应用可能包含以下文件夹:
_locales\en\messages.json
_locales\fr\messages.json
_locales\es\messages.json
有没有办法从扩展程序中知道它的en
,fr
和es
?
还有第二个问题,有没有办法解析特定的messages.json
文件作为JSON数据?我的意思是比chrome.i18n.getMessage()
提供的功能更多。
答案 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对象,您可以:
messages.json
XMLHttpRequest
个文件
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);
并且您会看到您的消息提醒。