Javascript Chrome扩展如何改变语言?

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方法以编程

例如,在my manifest.json中有一个参数:

  "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
}