ember-i18n使用Handlebars Runtime进行预编译

时间:2014-05-30 09:33:27

标签: ember.js ember-i18n

ember-i18n readme file说:

  

如果您还没有预编译您的翻译,则需要包含   完整的Handlebars,而不仅仅是你手中的把手 - runtime.js   应用

问题是即使使用预编译模板,一旦我们使用函数 Em.I18n.t ,如下所示,它仍然会调用Handlebars编译功能,需要完整的Handlebars。

任何人都知道解决方案吗?即使是函数调用,也许有预编译的最佳实践?

2 个答案:

答案 0 :(得分: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%确信它涵盖了所有可能的情况。

答案 1 :(得分:0)

最新版本的ember-i18n(编写本文时为2.2.1)在运行时有此控制台消息:

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

所以看起来你现在可以选择不使用Handlebars编译,这将是未来版本中的默认设置。这对你的需求来说可能为时已晚,但也许其他有同样问题的人会发现它很有用。