【发布时间】:2020-11-30 13:21:01
【问题描述】:
有没有一种简单的方法来制作弹出/内容/选项页面multilingual?
文档给我的印象是,唯一的办法就是使用JS将本地化的字符串添加到html中。
这会使事情变得非常麻烦和复杂(每个节点都需要一个 ID 或类等)
我试过在 HTML 中使用${tag},但它只是显示标签本身(似乎只有 css 支持标签)。
所以现在我写了这个小sn-p,它检查页面的每个元素并将所有${tag}替换为来自chrome.i18n.getMessage(tag的字符串):
!function()
{
let i18nRegExp = /\$\{([^}]+)\}/g,
cache = {},
i18n = function(a,b)
{
return cache[b] || (cache[b] = chrome.i18n.getMessage(b) || a);
};
!function loop(node)
{
if (node.attributes)
for(let i = 0; i < node.attributes.length; i++)
node.attributes[i].value = node.attributes[i].value.replace(i18nRegExp, i18n);
if (!node.childNodes.length)
node.textContent = node.textContent.replace(i18nRegExp, i18n);
else
for(let i = 0; i < node.childNodes.length; i++)
loop(node.childNodes[i]);
}(document.body.parentNode);
}();
有更好的方法吗?
【问题讨论】:
-
这基本上是唯一的方法,但您可以利用其他 DOM 东西,如属性。应该有专门用于此类扩展的库。
标签: javascript google-chrome-extension firefox-addon firefox-addon-webextensions thunderbird-webextensions