简单的Dojo i18n实现

时间:2012-06-07 18:10:47

标签: javascript dojo

我刚刚开始学习道场用于个人用途和体验。到目前为止,我一直在做各种dojo的教程(在他们的网站和网络上),我一直在“努力”实现更复杂的应用程序(或良好实践)的具体基础设施。我找到了一个有趣的项目(https://github.com/csnover/dojo-boilerplate)和文章(http://www.sitepen.com/blog/2011/05/04/what-is-the-best-way-to-start-a-dojo-project/)。有了这个,我认为我的第一个问题已经解决了。如果我错了,请纠正我。

我觉得i18n上的教程缺少具体的实现。例如,我想在样板项目的对话框中添加i18n。

define([ 'dojo/_base/declare', 'dijit/Dialog' ], function (declare, Dialog) {
    return declare(Dialog, {
        title: 'Hello World',
        content: 'Loaded successfully!'
    });
});

在这里,我的项目层次结构是:

enter image description here

如您所见,我为我的应用程序创建了自己的nls文件夹,并为不同的(lang-locale)我的“字符串”存储。现在,如何在上面的对话框代码中为标题或内容指定区域设置内容。我最近在ruby on rails上做了i18n(使用MVC的概念)并且根据我的观点,我必须为这个特定视图创建一个用于本地化的文件(.yml)。我知道RoR和Dojo真的不是同一个东西,但做了一个小部件(可以与我的视图进行比较),所以每个小部件都需要有自己的本地化...我已经来过两个教程,firstsecond。也许,我读错了。

我现在有类似的东西,但它不起作用..我错过了什么?

dojo.requireLocalization("app", "dialog");

define([ 'dojo/_base/declare', 'dijit/i18n' 'dijit/Dialog' ], function (declare, Dialog) {
    i18n: dojo.i18n.getLocalization("app", "dialog"),
    return declare(Dialog, {
        title: i18n.title,
        content: i18n.content
    });
});

谢谢。

修改

define([ 'dojo/_base/declare', 'dojo/i18n!app/nls/labels', 'dijit/Dialog' ], function (declare, labels, Dialog) {
    return declare(Dialog, {
        title: labels.title,
        content: labels.content
    });
});

我现在没有错误,但我的labels.title是空的??

编辑(1):我忘了在默认的nls文件夹中添加root。

1 个答案:

答案 0 :(得分:4)

以下是我如何使用本地化构建一些对话框的示例。

目录结构

myApp\
  dialog\
    myDialog.js
    nls\
      dialog.js
      fr-ca\
        dialog.js

myDialog.js

define("myApp/dialog/myDialog", [
  "dojo", "dijit/Dialog", "dojo/i18n", 
  "dojo/i18n!./nls/dialog" // this is a relative path to the 
                           // dialog.js from myDialog.js
], function(dojo, Dialog) {

  var i18n = dojo.i18n.getLocalization(
    "myApp.dialog",  // this is the directory path to the nls folder
    "dialog"         // this is the file
  );       

  return declare(Dialog, {
    title:    i18n.title,
    content:  i18n.content
  });
});