按照here和here列出的步骤,可以通过_templated
mixin将Dojo自定义小部件国际化。然后,小部件模板中的占位符如下所示:${i18n.username}
将自动替换为相应的语言翻译。
在窗口小部件之外进行类似的nls语言替换的最简单方法是什么?理想情况下,我想在标记中添加一个属性,以替换所有占位符,包括嵌套标记。是否有某种类型的容器小部件已经这样做了?
或者Dojo开发是否假设一切都在(自定义)小部件中?我需要本地化现有的不使用小部件的代码。
到目前为止,我找到的最佳解决方案是:
答案 0 :(得分:2)
我假设外部html中的符号是${i18n.username}
。这将找到任何具有class="i18nReplace"
的节点并替换节点的innerHTML。我没有测试任何这个,但我希望你可以用它作为起点。
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.
});
});