Javascript Chrome扩展如何改变语言?
例如,在my manifest.json中有一个参数:Javascript Chrome扩展如何改变语言?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,例如,在my manifest.json中有一个参数: "default_locale": "en" 问题是如何在javascript代码中动态更改语言 在文档中找不到任何关于特定方法的示例 我的数据也是这样绑定的: <div data-l10n-id="key_download"></div> 它是在html中动态解析的,但如何更改它选择的语言?内置的chrome.i18n API的目的是使扩展与浏览器的UI语言相匹配,因此没有chrome API方法以编程
"default_locale": "en"
问题是如何在javascript代码中动态更改语言
在文档中找不到任何关于特定方法的示例
我的数据也是这样绑定的:
<div data-l10n-id="key_download"></div>
它是在html中动态解析的,但如何更改它选择的语言?内置的chrome.i18n API的目的是使扩展与浏览器的UI语言相匹配,因此没有chrome API方法以编程方式更改它,您必须自己实现它或使用其中一种
阅读官方网站,了解更多关于如何使用浏览器的不同UI语言测试扩展的详细信息和示例。您将问题标记为google chrome扩展,但您使用的API来自mozilla docs chrome.i18napi背后的系统是它依赖于不同语言的messages.json文件
如果开发人员实现了对特定语言的语言支持(将messages.json添加到locales文件夹中),并且该语言被Chrome(浏览器语言)识别,Chrome将使用该文件。
该文件的格式为键值。
这意味着,每个键都有一个值,该值将根据浏览器语言使用。
要使用的字符串,可以使用键进行简单描述(如示例中所示,但对于Chrome是data-i18n) 因此,如果在已用消息中没有键,if将返回到locales文件夹的en子文件夹中定义的messages.json(如果该文件也缺少该键,则不会添加任何字符串) 那么,回到那个关键点上 在en子文件夹中的messages.json中,您将拥有:
{
"key_downlaod ": {
"message": "download"
},
............
}
在你的hr子文件夹中(例如克罗地亚语),在messages.json中,它将是:
{
"key_downlaod ": {
"message": "preuzmi"
},
............
}
当您可以将这些键添加到HTML中时,这很容易,但是如果您需要从javascript动态地添加这些键,则可以收集具有data-i18n属性的所有元素,并根据它们的键向它们添加文本字符串
var i18n_elem = document.querySelectorAll('[data-i18n]');
for (var j=i18n_elem.length-1; j>=0; j--)
i18n_elem[j].textContent = chrome.i18n.getMessage(i18n_elem[j].getAttribute('data-i18n'));
或者,您可以直接将文本字符串添加到元素中(可能在创建时)。按钮标题示例:
someElement.title = chrome.i18n.getMessage('key_open');
key\u open是消息文件中的密钥。无需添加前缀键,我只是为了更好地理解而添加它,您可以随意调用这些键,但它们是唯一的
另一个用例是当您需要更改不同语言的某些元素(例如宽度)时获取UI语言,然后完成您的工作
var getLang = chrome.i18n.getUILanguage();
if (getLang === 'ru') {
//whatever
} else if (getLang === 'de') {
//whatever
}
但是我如何测试这些语言呢?我应该更改我的系统语言吗?这在中有介绍。太难了。到底什么是难的?官方文档列出了几个精确而简单的说明,说明如何通过命令行和UI设置更改浏览器的UI语言。如果你想要比几行文字更简单的形式,那么可以找一些视频教程。我想知道是否有办法连接到chrome i18n API,并
强制它为特定的语言环境获取字符串,与浏览器无关
someElement.title = chrome.i18n.getMessage('key_open');
var getLang = chrome.i18n.getUILanguage();
if (getLang === 'ru') {
//whatever
} else if (getLang === 'de') {
//whatever
}