【问题标题】:Dojo Build with NLS - requireLocalization(..) fail?使用 NLS 构建 Dojo - requireLocalization(..) 失败?
【发布时间】:2010-09-20 18:01:58
【问题描述】:

我的问题,虽然起初有点类似于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>

但不幸的是,Firebug 向我吐了这个:

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

我认为正在发生的事情

我已经跟踪了导致上述错误的一些代码,似乎文件末尾的dojo.i18n._preloadLocalizations() 调用实际上并未从./release/nls 加载到正确的nls 文件中。

知道如何在不使用&lt;script&gt; 标签手动包含nls 文件的情况下解决此问题吗?

【问题讨论】:

  • 我也遇到过类似的问题。我不清楚构建系统或加载程序是否存在问题。我确实确定如果我将我的图层文件命名为与 dojo.js 相同的目录(即,将其设为“名称:'myProject.js'”)并调整脚本标签以使用此路径(./release/ myProject/dojo/myProject.js.uncompressed.js),然后加载器拉入正确的 nls 文件。
  • 我猜这与 djConfig 对象中的模块路径有关。如果您查看 firebug 或类似内容,该应用程序试图从哪个 URL 加载 nls 与它应该从哪里加载它?

标签: internationalization build dojo nls


【解决方案1】:

这是一个dojo的错误,你不应该在你的图层名称中使用'..',以防它会生成一个NLS包。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多