1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
/*
* This file is provided by the webext-support repository at
* https://github.com/thunderbird/webext-support
*
* For usage descriptions, please check:
* https://github.com/thunderbird/webext-support/tree/master/scripts/i18n
*
* Version 1.1
*
* Derived from:
* http://github.com/piroor/webextensions-lib-l10n
*
* Original license:
* The MIT License, Copyright (c) 2016-2019 YUKI "Piro" Hiroshi
*
*/
var i18n = {
updateString(string) {
let re = new RegExp(this.keyPrefix + "(.+?)__", "g");
return string.replace(re, (matched) => {
const key = matched.slice(this.keyPrefix.length, -2);
let rv = this.extension
? this.extension.localeData.localizeMessage(key)
: messenger.i18n.getMessage(key);
return rv || matched;
});
},
updateSubtree(node) {
const texts = document.evaluate(
'descendant::text()[contains(self::text(), "' + this.keyPrefix + '")]',
node,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0, maxi = texts.snapshotLength; i < maxi; i++) {
const text = texts.snapshotItem(i);
if (text.nodeValue.includes(this.keyPrefix))
text.nodeValue = this.updateString(text.nodeValue);
}
const attributes = document.evaluate(
'descendant::*/attribute::*[contains(., "' + this.keyPrefix + '")]',
node,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0, maxi = attributes.snapshotLength; i < maxi; i++) {
const attribute = attributes.snapshotItem(i);
if (attribute.value.includes(this.keyPrefix))
attribute.value = this.updateString(attribute.value);
}
},
updateDocument(options = {}) {
this.extension = null;
this.keyPrefix = "__MSG_";
if (options) {
if (options.extension) this.extension = options.extension;
if (options.keyPrefix) this.keyPrefix = options.keyPrefix;
}
this.updateSubtree(document);
},
};
|