Localization Dojo本地化-不';不翻译和/或不';t载荷

Localization Dojo本地化-不';不翻译和/或不';t载荷,localization,dojo,Localization,Dojo,我正在尝试使用dojo设置本地化,但无法使其工作 我的文件夹结构如下: Folder: locale - about.html - Folder: nls - about.js - Folder fr - about.js define({ root: ({ //Whatever object you want }), "en": false, "en-gb": false,

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

我的文件夹结构如下:

Folder: locale
    - about.html
    - Folder: nls
        - about.js
        - Folder fr
            - about.js
define({
    root: ({
    //Whatever object you want
    }),

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

});
这是应该本地化的文件

<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>
致:

我得到这个输出:

不太清楚这里发生了什么

为什么第一个例子找不到法语本地化?正在加载该文件,并正在设置本地文件

第二个示例与我看到的大多数dojo示例更为一致。这是怎么回事

任何帮助都将不胜感激。谢谢


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

define({
    root: {
    hello: "English Hello"
    },
    "fr":true
});
define({
    root: {
    hello: "French Hello"
    }
});
和nls/fr/about.js:

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

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

因此,您所做的基本上是正确的,但是调用
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\u localization\u object
变量中获得一个对象,但不使用法语区域设置,因此您可以使用该对象填充任何您想要的内容

而您about.js应该是这样的:

Folder: locale
    - about.html
    - Folder: nls
        - about.js
        - Folder fr
            - about.js
define({
    root: ({
    //Whatever object you want
    }),

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

});

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

因此,特定于区域设置的文件应如下所示:

define({
    hello: "French Hello"
});
关于第二个问题:当您引用文件“about.js”时,您使用了一个有效的文件路径。当您引用“nls/about”时,您引用的是AMD模块,因此根据您的包定义使用有效的模块路径。这两种语法都可以,但如果要使用包路径,请尝试在dojoConfig中添加包定义,如下所示:

packages: [{
    name: "nls",
    location: "/nls"
}]

没错!删除根元素有效。还感谢您对模块路径和文件路径之间的说明。