2012-04-10 40 views
3

遵循步驟herehere的步驟,可以通過_templated mixin將Dojo定製窗口小部件國際化。然後,像這樣的小部件模板中的佔位符:${i18n.username}會自動替換爲適當的語言翻譯。Dojo通過窗口小部件外部的標記進行國際化

在窗口小部件之外做類似nls語言替換的最簡單方法是什麼?理想情況下,我想向標籤添加一個屬性以取代所有佔位符,包括嵌套標籤。是否有某種類型的容器小部件已經這樣做?

Dojo開發假設一切都將在(自定義)小部件?我需要本地化已經存在的不使用小部件的代碼。

到目前爲止,我已經找到了最好的解決方案是:

回答

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. 
    }); 
});