代码之家  ›  专栏  ›  技术社区  ›  sixtyfootersdude

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

  •  0
  • sixtyfootersdude  · 技术社区  · 11 年前

    我正在尝试使用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 回复  |  直到 11 年前
        1
  •  1
  •   Kryptic    11 年前

    从nls/fr/about.js中删除根对象。它只在根文件中需要,因为如果找不到特定于区域设置的文件,就会使用这些字符串。

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

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

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

    packages: [{
        name: "nls",
        location: "/nls"
    }]
    
        2
  •  0
  •   dori naji    11 年前

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

    所以你所做的基本上是正确的,但 "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,
    
    });