我有一堆控制器,其中一些属性是由翻译库生成的:
App.CallsStatusTotalsPerHourChartController = Ember.ArrayController.extend({
title: Ember.I18n.t('dashboard.calls-per-hour.title'),
subTitle: Ember.I18n.t('dashboard.calls-per-hour.subtitle'),
noDataText: Ember.I18n.t('dashboard.calls-per-hour.no-data'),
content: []
});
问题是语言文件还没有加载(这需要一些时间),所以在定义时,Ember.I18n.t
没有数据,所有的翻译都失败了。有几种解决方案,但对我来说似乎更简单的一个是:
我不会直接调用,而是调用Ember.I18n.t
a delayedT
,它基于一个属性:
function delayedT(key) {
return property depending on App.languageLoaded, to do Ember.I18n.t(key)
}
只要设置了应用程序标志,就会计算此属性:App.languageLoaded。每当语言文件完成加载时,我都会这样做App.set('languageLoaded', true)
,这会触发所有翻译。这样,翻译只会在正确的时间(当语言数据到达时)为应用程序执行一次。
这有意义吗?我将如何实现延迟T?