Javascript翻译模板

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>

我目前正致力于重新实现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>

文本放在这里,你可以有这样的{a-token}。
参数
您向他们传递一个字符串,如下所示:
文本放在这里,您可以像这样使用{a-token}。

你会得到这样一个翻译字符串:
eltextovaaqíy usted puedetener{a-token}comoésta.

这样,即使可以输入动态数据,也只能转换字符串一次。最酷的部分(也是问题所在)是可以嵌套这些字符串。因此,令牌中可能有另一个嵌套的
fb:intl
标记,而不是“parameters”的纯文本(这反过来可能有另一个内部标记,等等)

我试图做的是在不丢失子节点上下文的情况下进行替换。因此,我只想获取
标记并将其移动以替换表示其在字符串中位置的
{token}


关于如何有效地做到这一点,有什么想法吗?

经过一段时间的黑客攻击,我终于想出了一个解决方案

psuedocode如下所示:

  • 使用jQuery的
    .Clone(true)
    克隆原始元素(以维护所有原始数据等)
  • 使用
    .Empty()
    清空克隆的元素
  • .html()
    设置为将标记替换为html元素的正则表达式,以便可以通过jQuery轻松操作它们:
    .replace(/{([a-zA-Z\-]+)}/,“”)
  • 循环遍历原始元素的
    fb:intl token
    子元素,并对每个子元素执行
    $(this).insertBefore(占位符)(其中占位符是步骤3中被替换的令牌——这就是其id基于令牌名称的原因)
  • 从克隆的元素中删除占位符
  • 用克隆替换原始元素
  • 到目前为止,这似乎效果不错