Chrome扩展程序如何更改语言?

时间:2015-10-28 11:38:41

标签: javascript google-chrome-extension

例如在我的manifest.json中有一个参数:

  "default_locale": "en"

问题是如何动态更改javascript代码中的语言?

无法找到有关特定方法的文档的任何示例......

我的数据也是这样绑定的:

<div data-l10n-id="key_download"></div>

它是在html中动态解析的,但我怎样才能更改它选择的语言?

2 个答案:

答案 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 文件的不同语言
如果开发人员实现了对特定语言的语言支持(将messages.json添加到locales文件夹中)并且该语言被Chrome(浏览器语言)识别,则Chrome将使用该文件。
该文件采用键值形式 这意味着,对于每个键,都有一个值将根据浏览器语言使用 您想要使用的字符串,您可以使用键进行简单描述(例如,在您的示例中,但对于Chrome data-i18n

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