如何在我的Ember应用程序中包含CLDR.js库?

时间:2012-07-11 14:35:06

标签: javascript ember.js internationalization cldr

我正在构建一个Ember应用程序,它开始使用ember-skeleton(这意味着我使用Rake Pipeline作为我的构建工具链)。我正在使用ember-i18n,并且不断发出有关没有CLDR.pluralForm函数的警告。

我已将ember-i18n使用的CLDR plural functions添加到app/vendor/目录,并将该文件添加到Assetfile。我已经验证了代码是在ember-i18n代码之前的app.js中包含的。我还在main.js中添加了相应的require行:

require('plurals');
require('ember-i18n');

仍然,ember-i18n正在发出警告。这是它正在发生的代码:

if (typeof CLDR !== "undefined" && CLDR !== null) {
  pluralForm = CLDR.pluralForm;
}

if (pluralForm == null) {
  Ember.Logger.warn("CLDR.pluralForm not found. Em.I18n will not support count-based inflection.");
}

如何确保在我的应用中定义了CLDR?

1 个答案:

答案 0 :(得分:3)

因为没有其他人,如果我自己调试问题,我会建议我看一些事情。

如果您在站点中看到的消息与fiddler中的消息相同,则是由于文件只是无序加载。几乎“复数”必须在“i18n”插件之前加载。如果你翻转linked files的顺序它将起作用(我分叉了错误的例子)。

我会尝试通过向每个文件中添加一些debugger;语句来验证我的错误,以查看哪些文件实际上首先在浏览器中加载。

由于你的require('plurals')我将假设你正在使用requirejs(github is down for maintenance所以我现在无法实际检查ember-skeleton ...所以这可能会在未来)。如果这个断言是真的,你需要声明'复数'是'i18n'的依赖。

  

“如果你不表达依赖关系,你很可能会遇到加载错误,因为RequireJS异步加载脚本并且速度不正常。” - RequireJS API

这意味着您可能最终将两个调用包装成一个,添加define或制作“垫片”;这些(和更多)示例可以在RequireJS站点上找到。

很抱歉,如果这对您没有帮助,但没有看到它真的坏了;我很难调试这个问题。

编辑:看看余烬骨架,我看不到requireJS。我从来没有使用rake(我们最终在nodeJS中编写了我们的管道)所以我不太确定你是否真的试图用rake中的require "blaw"连接文件,或者你真的试图同时使用它们....所以现在我认为这个答案可能不是很有帮助。