如何以简单的方式使用Dojo i18n

时间:2012-12-03 11:44:01

标签: internationalization dojo

我是Dojo和i18n的新手。我希望在我的应用程序中将一些作品转换为不同的语言。我已经阅读了一些文章并且说实话,我觉得很多信息都被我消化了,我正在努力解决它。有人能够为我提供最简单的方法吗?假设我想改变'你好'这个词。在我的脑海里,它会是这样的:

  • Dojo库已准备就绪
  • 我在我的javascript文件中定义了String'hello'。它的占位符文本为“hello”
  • 我在HTML中指定我希望我的页面是

    “此处指定的字符串以不同的语言显示问候语”

因此,我可以从我有限的知识中吸收同样多的东西。我如何实现这种设置?我假设我需要在我的页面上要求i18n,但具体如何执行此操作还有待确定。

任何帮助都是超级的。请记住,如果可能的话,我对你的答案知之甚少,谢谢!

1 个答案:

答案 0 :(得分:6)

nls文件夹通常用于存储翻译字符串,通常是使用它的小部件旁边的子目录。

即。如果您的小部件存储在名为 app 的文件夹中的 myWidget.js 中,那么 myWidget.js 的翻译字符串将存储在一个文件中目录 app / nls 中的相同名称( myWidget.js )。

这只是惯例,但可能值得关注,因为它使您的目录结构合乎逻辑。

以下是 myWidget.js 小部件的示例:

define([
    "dojo/_base/declare",
    "dijit/_WidgetBase",
    "dijit/_TemplatedMixin",
    "dojo/i18n!./nls/myWidget"
], function(
    declare,  _widget, _templated,  strings, domAttr
){
    "use strict";

    var construct = declare([_widget,  _templated], {
        "i18n": strings,
        "templateString": "<div>${i18n.hello}</div>"
    });

    return construct;
});

这是一个非常简单的小部件,可以在屏幕上创建&lt; div&gt; (请参阅 templateString 属性)。 &lt; div&gt; 应包含从翻译文件加载并分配给 hello 属性的文本。

小部件需要在与 myWidget.js 相同的目录中创建 nls 目录。在 nls 目录中,您将创建另一个名为 myWidget.js 的javascript文件(即与父级相同的名称)。这个文件是你的根翻译文件,如下所示:

define({
    root: ({
        "hello": "Hello"
    })
});

您已在此处为属性 hello 分配了字符串“Hello”。这不是很有用,因为没有提供任何翻译。如果您想要挪威语翻译,那么您可以像这样修改它:

define({
    root: ({
        "hello": "Hello"
    }) ,
    "no": true
});

在这里,您要说的是根翻译字符串以及挪威语翻译。然后,您需要创建挪威语翻译文件并将其放在 nls 的子目录中,名为 no 。因此,您创建另一个名为 myWidget.js 的文件并将其放在nls / no中:

define({
    "hello": "Hei"
});

转换文件的格式与根文件略有不同。使用默认字符串,除非在当前浏览器语言中为给定字符串提供翻译(即,您不需要翻译每个字符串,只需要翻译要翻译的字符串)。

在窗口小部件之外加载翻译字符串:

以上示例显示了如何按照常规约定加载窗口小部件的翻译文本。您可以在任何窗口小部件或任何require语句中加载所需的任何字符串集。 dojo / i18n类可以加载您指定的任何字符串集。

eg:

require([
    "dojo/i18n!<PATH TO TRANSLATION ROOT FILE YOU WANT TO LOAD>"
], function(string) {
    // translation-string are stored in the 'strings' variable for the
    //    current browser language
});