例如在我的manifest.json中有一个参数:
"default_locale": "en"
问题是如何动态更改javascript代码中的语言?
无法找到有关特定方法的文档的任何示例......
我的数据也是这样绑定的:
<div data-l10n-id="key_download"></div>
它是在html中动态解析的,但我怎样才能更改它选择的语言?
答案 0 :(得分:3)
内置chrome.i18n API的重点是使扩展程序与浏览器的UI语言相匹配,因此没有chrome API方式以编程方式更改它,您必须自己实现它或使用其中一个existing js libraries。
阅读官方chrome.i18n documentation,了解有关如何使用浏览器的不同UI语言测试扩展程序的更多详细信息和示例。
答案 1 :(得分:0)
您将问题标记为Google Chrome扩展程序,但您使用的API来自mozilla docs
chrome.i18n API 背后的系统是它依赖于 messages.json 文件的不同语言<div data-i18n="key_download"></div>
并在 messages.json 文件中,为该键添加值 默认为英语,这是您在清单中定义的内容
"default_locale": "en"
因此,如果使用过的消息中没有密钥,if将回退到locales文件夹的 en 子文件夹中定义的messages.json(如果该文件也缺少该密钥...没有,没有将添加字符串)
所以,回到那个key_downlaod
在 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_open 是您的消息文件中的密钥。无需添加前缀键_ ,我只需添加它以便更好地理解,您可以随心所欲地调用这些键,但这是唯一的。
另一个用例是当您需要更改不同语言的某些元素(例如宽度)时 获得UI语言,然后完成工作
var getLang = chrome.i18n.getUILanguage();
if (getLang === 'ru') {
//whatever
} else if (getLang === 'de') {
//whatever
}