4

ember-i18n 自述文件说:

如果您还没有预编译翻译,则需要在应用程序中包含完整的 Handlebars,而不仅仅是 handlebars-runtime.js。

问题是即使使用预编译的模板,一旦我们像下面这样使用函数Em.I18n.t,它仍然调用 Handlebars 编译函数,需要完整的 Handlebars。

有人知道解决方案吗?即使对于函数调用,也可能有预编译翻译的最佳实践?

4

2 回答 2

1

好吧,由于我对这个案子有紧迫感,这就是我修复它的方式:

/* Customized version of translation compiler */
Em.I18n.compile = function(template) {
    // Full Handlebars completely disabled
    //if (typeof window.Handlebars.compile === 'function')
    //    return window.Handlebars.compile(template);

    return function(context, options){
        var ret = template;
        if (context !== undefined) {
            $.each(context, function(key, value){
                ret = ret.replace("{{"+key+"}}", value);
            });
        }
        return ret;
    }
}

这工作得很好,但我不是 100% 相信它涵盖了所有可能的情况。

于 2014-05-30T10:06:44.973 回答
0

最新版本的 ember-i18n(撰写本文时为 2.2.1)在运行时显示以下控制台消息:

Ember.I18n 以后将不再默认包含 Handlebars 编译;相反,它将提供自己的默认编译器。将 Ember.ENV.I18N_COMPILE_WITHOUT_HANDLEBARS 设置为 true 以立即选择加入。

因此,到目前为止,您似乎可以选择不使用 Handlebars 编译,这将是未来版本中的默认设置。这对于您的需求可能为时已晚,但也许其他有相同问题的人会发现它很有用。

于 2014-08-28T15:57:14.937 回答