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

使用NLS的Dojo构建-RequireLocalization(..)失败?

  •  5
  • JasonWyatt  · 技术社区  · 14 年前

    我的问题,虽然起初有点类似于 this one ,似乎是一个更基本的问题-并且可能在发出构建系统中的错误信号。我已经为我的Dojo应用程序创建了一个定制的构建。我现在只构建一个层,下面是配置文件脚本/对象的外观:

    dependencies = {
        stripConsole: "all",
        action: "release",
        optimize: "shrinksafe",
        releaseName: "myProject",
        // list of locales we want to expose
        localeList: "en-gb,en-us,de-de",
    
        layers: [
            {
                // Name: a relative path from the dojo.js in the desination directory.
                name: "../../myProject.js",
                dependencies: [
                    "myPackage.MyDataStore",
                    // MyWidget depends on a few other widgets, and has its own 
                    //   translation files.
                    "myPackage.MyWidget"
                ]
            }
        ],
    
        prefixes: [
            // These paths are relative to the location of dojo.js
            [ "dijit", "../dijit" ],
            [ "dojox", "../dojox" ],
            [ "myPackage", "../../../src/myPackage" ]
        ]
    }
    

    当我使用该描述运行一个构建时,它将输出以下目录结构中的文件:

    release/
    release/myProject/
    release/myProject/dijit/
                           ... dijit ...
    release/myProject/dojo/
                          ... dojo ...
    release/myProject/dojox/
                           ... dojox ...
    release/myProject/myPackage/
                               ... my custom package ...
    release/nls/
               myProject_en-us.js
               myProject_de.js
               etc..
    ../myproject.js
    ../myProject.js.uncompressed.js
    

    最后,在我的测试HTML页面中-我得到了以下内容:

    <script type="text/javascript">
        var djConfig = {
            debug: true,
            parseOnLoad: false,
            modulePaths: { // paths to directories in relation to dojo's location.... hurr.
                'myPackage': '../myPackage',
                'dojox':    '../dojox',
                'dijit':    '../dijit'
            }
        };
    </script>
    <script type="text/javascript" src="./release/myProject/dojo/dojo.js.uncompressed.js"></script>
    <script type="text/javascript" src="./release/myProject.js.uncompressed.js"></script>
    <script type="text/javascript">
    dojo.addOnLoad(function(){
        dojo.require('myPackage.MyDataStore');
        dojo.require('myPackage.MyWidget');
    
        var store = new myPackage.MyDataStore();
        var widget = new myPackage.MyWidget({
            store: store
        }, dojo.byId('testWidget'));
    
        widget.startup();
    });
    </script>
    

    但不幸的是,萤火虫向我吐了出来:

    Bundle not found: MyWidget in myPackage , locale=en-us
    

    我想发生了什么

    我已经跟踪了导致上述错误的一些代码,它看起来像 dojo.i18n._preloadLocalizations() 文件末尾的调用实际上没有从加载到正确的NLS文件中 ./release/nls .

    知道如何在不使用手动包括NLS文件的情况下修复此问题吗? <script> 标签?

    1 回复  |  直到 13 年前
        1
  •  4
  •   hbaaron    13 年前

    这是Dojo的一个bug,您不应该在层名称中使用“..”,以防它生成一个NLS包。

    请参照 http://bugs.dojotoolkit.org/ticket/5225