Javascript 支持HTML页面中的本地化(弹出/内容/选项)

Javascript 支持HTML页面中的本地化(弹出/内容/选项),javascript,google-chrome-extension,firefox-addon,firefox-addon-webextensions,thunderbird-webextensions,Javascript,Google Chrome Extension,Firefox Addon,Firefox Addon Webextensions,Thunderbird Webextensions,有没有一种简单的方法制作弹出/内容/选项页面 文档给我的印象是,唯一的方法是使用JS将本地化字符串添加到html中。 这将使事情变得非常麻烦和复杂(每个节点都需要一个ID或类等) 我曾尝试在HTML中使用${标记},但它只是显示标记本身(似乎只有css支持标记)。 现在,我已经编写了这个小片段,它检查页面的每个元素,并用chrome.i18n.getMessage(中的字符串替换所有})中的字符串: !函数() { 让i18nRegExp=/\$\{([^}]+)\}/g, 缓存={}, i18

有没有一种简单的方法制作弹出/内容/选项页面

文档给我的印象是,唯一的方法是使用JS将本地化字符串添加到html中。 这将使事情变得非常麻烦和复杂(每个节点都需要一个ID或类等)
我曾尝试在HTML中使用
${
标记
}
,但它只是显示标记本身(似乎只有css支持标记)。
现在,我已经编写了这个小片段,它检查页面的每个元素,并用chrome.i18n.getMessage(
中的字符串替换所有
}
)中的字符串:

!函数()
{
让i18nRegExp=/\$\{([^}]+)\}/g,
缓存={},
i18n=功能(a,b)
{
返回cache[b]| |(cache[b]=chrome.i18n.getMessage(b)| | a);
};
!函数循环(节点)
{
if(node.attributes)
for(设i=0;i

有更好的方法吗?treestyletab扩展的开发人员创建了一个简单的库,用于本地化HTML,名为。

treestyletab扩展的开发人员创建了一个简单的库,用于本地化HTML,名为。

我创建了一个简单的库(只有4行),我在所有附加组件中都使用了它(其他一些附加组件)多年来

它使用的DOM方法比普通RegEx(涉及DOM到文本和返回DOM的转换)或xpath(涉及搜索文本节点,然后使用RegEx替换)更快&使用的资源更少

根据评论进行更新

请注意,HTML本地化主要用于静态值。动态值由脚本设置。
title
也不是
元素的有效属性。
虽然这不是一个普通的案例,但这里有一个我会做的例子,尽管如此

//给出了一个示例
//  
//HTML
//手稿
document.querySelectorAll('input').forEach(项=>{
item.placeholder=chrome.i18n.getMessage(item.placeholder);
item.value=chrome.i18n.getMessage(item.value);
}):
我创建了一个简单的(只有4行)插件,多年来我一直在我的所有插件(一些其他插件)中使用它

它使用的DOM方法比普通RegEx(涉及DOM到文本和返回DOM的转换)或xpath(涉及搜索文本节点,然后使用RegEx替换)更快&使用的资源更少

根据评论进行更新

请注意,HTML本地化主要用于静态值。动态值由脚本设置。
title
也不是
元素的有效属性。
虽然这不是一个普通的案例,但这里有一个我会做的例子,尽管如此

//给出了一个示例
//  
//HTML
//手稿
document.querySelectorAll('input').forEach(项=>{
item.placeholder=chrome.i18n.getMessage(item.placeholder);
item.value=chrome.i18n.getMessage(item.value);
}):

这基本上是唯一的方法,但您可以利用其他DOM功能,如属性。应该有专门用于这种扩展的库。这基本上是唯一的方法,但您可以利用其他DOM特性。应该有专门用于这种扩展的库。谢谢。与我的循环方法相比,使用3k行的html的xpath速度似乎快了3倍。而且缓存在10k线路上的性能绝对没有任何差别。与我的循环方法相比,使用3k行的html的xpath速度似乎快了3倍。缓存在10k线路上的性能绝对没有差别。这是一种非常有趣的方法。但是,当每个节点需要多个属性时,它将如何处理?@vanowm必须牢记这一点,例如简化HTML并在需要时使用
和类似的内容。如果你给我举个例子,我会告诉你怎么做。例如:
@vanowm我会在上面的回复中添加你的例子。这是非常有趣的方法。但是,当每个节点需要多个属性时,它将如何处理?@vanowm必须牢记这一点,例如简化HTML并在需要时使用
和类似的内容。如果你给我举个例子,我会告诉你怎么做。例如:
@vanowm我会把你的例子添加到上面的回复中。