Internationalization 通过小部件外部的标记实现Dojo国际化

Internationalization 通过小部件外部的标记实现Dojo国际化,internationalization,dojo,Internationalization,Dojo,Dojo自定义小部件可以通过\u模板化的mixin按照概述的步骤进行国际化。然后,小部件模板中的占位符如下:${i18n.username}将自动替换为适当的语言翻译 在小部件之外进行类似nls语言替换的最简单方法是什么?理想情况下,我想向标记添加一个属性,以替换其中的所有占位符,包括嵌套标记。是否有某种类型的容器小部件已经做到了这一点 或者Dojo开发是否假定所有内容都在(自定义)小部件中?我需要本地化不使用小部件的现有代码 到目前为止,我找到的最佳解决方案是: 使用,它是“dojo.i18

Dojo自定义小部件可以通过
\u模板化的
mixin按照概述的步骤进行国际化。然后,小部件模板中的占位符如下:
${i18n.username}
将自动替换为适当的语言翻译

在小部件之外进行类似nls语言替换的最简单方法是什么?理想情况下,我想向标记添加一个属性,以替换其中的所有占位符,包括嵌套标记。是否有某种类型的容器小部件已经做到了这一点

或者Dojo开发是否假定所有内容都在(自定义)小部件中?我需要本地化不使用小部件的现有代码

到目前为止,我找到的最佳解决方案是:

  • 使用,它是“dojo.i18n的一个薄包装,能够替换dojo标记中的字符串,例如CDATA或属性值。”但是,我担心这仅限于移动标记/小部件的某个子集

我假设外部html中的符号是
${i18n.username}
。这将查找具有
class=“i18nReplace”
的任何节点,并替换该节点的内部html。我没有测试过这些,但我希望你能把它作为一个起点

dojo.require("dojo.i18n");
dojo.require("dojo.query");
dojo.requireLocalization("myI18n", "myI18N"); // This will need to be modified to get your i18n files

dojo.addOnLoad(function() {
  var i18n = dojo.i18n.getLocalization("myI18n", "myI18N");
  dojo.query(".i18nReplace").forEach(function(node, index, arr){

      node.innerHTML = dojo.replace(node.innerHTML, { i18n: i18n } );

      // blindly doing this, does not support nested tags.
      // you could add conditional logic to check for children 
      // and if they exist separately process them, otherwise 
      // replace the html.
  });
});