如果您还没有预编译翻译,则需要在应用程序中包含完整的 Handlebars,而不仅仅是 handlebars-runtime.js。
问题是即使使用预编译的模板,一旦我们像下面这样使用函数Em.I18n.t,它仍然调用 Handlebars 编译函数,需要完整的 Handlebars。
有人知道解决方案吗?即使对于函数调用,也可能有预编译翻译的最佳实践?
如果您还没有预编译翻译,则需要在应用程序中包含完整的 Handlebars,而不仅仅是 handlebars-runtime.js。
问题是即使使用预编译的模板,一旦我们像下面这样使用函数Em.I18n.t,它仍然调用 Handlebars 编译函数,需要完整的 Handlebars。
有人知道解决方案吗?即使对于函数调用,也可能有预编译翻译的最佳实践?
好吧,由于我对这个案子有紧迫感,这就是我修复它的方式:
/* 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% 相信它涵盖了所有可能的情况。
最新版本的 ember-i18n(撰写本文时为 2.2.1)在运行时显示以下控制台消息:
Ember.I18n 以后将不再默认包含 Handlebars 编译;相反,它将提供自己的默认编译器。将 Ember.ENV.I18N_COMPILE_WITHOUT_HANDLEBARS 设置为 true 以立即选择加入。
因此,到目前为止,您似乎可以选择不使用 Handlebars 编译,这将是未来版本中的默认设置。这对于您的需求可能为时已晚,但也许其他有相同问题的人会发现它很有用。