0

我正在尝试使用 dojo 设置本地化,但无法正常工作。

我有一个这样的文件夹结构:

Folder: locale
    - about.html
    - Folder: nls
        - about.js
        - Folder fr
            - about.js

这是应该本地化的文件。

<html>
<head>
<script type="text/javascript">
    var dojoConfig = {
        locale: 'fr'
    };
</script>
<script src="//servicesbeta.esri.com/jsapi/arcgis/3.4/js/dojo/dojo/dojo.js"></script>
<script>
    require([
        "dojo/i18n",
        "dojo/i18n!./nls/about"
    ],function(
        i18n,
        nls
    ){
        console.log("Good Morning");
        console.log(dojoConfig);
        console.log(nls['hello']);
    });
</script> 
</head>
<body></body>
</html>

这是文件的输出:

在此处输入图像描述

我期望输出包括French Hello,而不是English Hello

如果我将要求更改为:

require([
    "dojo/i18n",
    "dojo/i18n!./nls/about.js"
],function(

到:

require([
    "dojo/i18n",
    "dojo/i18n!./nls/about"
],function(

我得到这个输出:

在此处输入图像描述

不完全确定这里发生了什么。

为什么第一个示例找不到法语本地化?它正在加载并正在设置本地。

第二个示例与我看到的大多数 dojo 示例更加一致。这怎么了?

任何帮助,将不胜感激。谢谢!


为了完整起见,nls/about.js:

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

和 nls/fr/about.js:

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

2 回答 2

1

从您的 nls/fr/about.js 中删除根对象。它仅在根文件中需要,因为如果找不到特定于语言环境的文件,这些字符串将被使用。

因此,您的语言环境特定文件应如下所示:

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

对于第二个问题:当您引用文件“about.js”时,您使用的是有效的文件路径。当您引用“nls/about”时,您引用的是 AMD 模块,因此您可以根据包定义使用有效的模块路径。两种语法都可以,但是如果您想使用包路径,请尝试在 dojoConfig 中添加包定义,如下所示:

packages: [{
    name: "nls",
    location: "/nls"
}]
于 2013-09-19T16:22:41.163 回答
0

根据我在本地化方面的经验,我一直在这样做。

所以你所做的基本上是正确的,但调用"dojo/i18n!./nls/about"文件对我来说是一个不熟悉的赌注,所以这是另一种方法。

var my_localization_object = i18n.getLocalization("locale", "about");

并且您需要将包添加到 dojoconfig:

var dojoConfig = {
        locale: 'fr',
packages: [
     //location should be a full qualified location.
  { name: "locale", location: "/JS/locale" }
],
  };

这样,您将在my_localization_object变量中返回一个对象,但使用法语语言环境,因此您可以使用该对象来填充您想要的任何内容。

你的 about.js 应该看起来像这样:

define({
    root: ({
    //Whatever object you want
    }),

    "en": false,
    "en-gb": false,
    "en-us": true,
    "fr": false,

});
于 2013-09-19T16:20:37.107 回答