Dojo本地化 - 不翻译和/或不加载

时间:2013-09-19 15:22:40

标签: localization dojo

我正在尝试使用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>

这是文件的输出:

enter image description here

我希望输出包含French Hello,而不是English Hello

如果我更改了要求:

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

要:

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

我得到了这个输出:

enter image description here

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

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

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

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


为了完整,nls / about.js:

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

和nls / fr / about.js:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分: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,

});