Javascript翻译模板
我目前正致力于重新实现Facebook的国际化XFBML标签的前端,该标签已经被打破了一段时间。我几乎完成了,但有一个问题:在不丢失子节点信息的情况下替换标记化的翻译 对于背景,翻译标记如下所示:Javascript翻译模板,javascript,jquery,facebook,jquery-templates,xfbml,Javascript,Jquery,Facebook,Jquery Templates,Xfbml,我目前正致力于重新实现Facebook的国际化XFBML标签的前端,该标签已经被打破了一段时间。我几乎完成了,但有一个问题:在不丢失子节点信息的情况下替换标记化的翻译 对于背景,翻译标记如下所示: <fb:intl> Text goes here and you can have {a-token} like this. <fb:intl-token name="a-token">parameters</fb:intl> </fb:intl>
<fb:intl>
Text goes here and you can have {a-token} like this.
<fb:intl-token name="a-token">parameters</fb:intl>
</fb:intl>
文本放在这里,你可以有这样的{a-token}。
参数
您向他们传递一个字符串,如下所示:
文本放在这里,您可以像这样使用{a-token}。
你会得到这样一个翻译字符串:eltextovaaqíy usted puedetener{a-token}comoésta.
这样,即使可以输入动态数据,也只能转换字符串一次。最酷的部分(也是问题所在)是可以嵌套这些字符串。因此,令牌中可能有另一个嵌套的fb:intl
标记,而不是“parameters”的纯文本(这反过来可能有另一个内部标记,等等)
我试图做的是在不丢失子节点上下文的情况下进行替换。因此,我只想获取
标记并将其移动以替换表示其在字符串中位置的{token}
关于如何有效地做到这一点,有什么想法吗?经过一段时间的黑客攻击,我终于想出了一个解决方案 psuedocode如下所示:
.Clone(true)
克隆原始元素(以维护所有原始数据等).Empty()
清空克隆的元素.html()
设置为将标记替换为html元素的正则表达式,以便可以通过jQuery轻松操作它们:.replace(/{([a-zA-Z\-]+)}/,“”)
fb:intl token
子元素,并对每个子元素执行$(this).insertBefore(占位符)代码>(其中占位符是步骤3中被替换的令牌——这就是其id基于令牌名称的原因)