Ember-moment如何根据区域设置格式化日期/时间

时间:2018-03-27 08:26:01

标签: ember.js momentjs

我坚持使用浏览器区域设置使用ember-moment插件来格式化日期/时间。我在environment.js中定义了包含的语言环境,如其自述文件中所述:

moment: {
  includeLocales: true
}

然后在handlbars模板中,我尝试显示日期:

{{moment-format urrentShop.shop.openingDate 'L'}}

但日期仍以美国格式显示:

03/27/2018

而不是法国人。关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:0)

我正在使用ember-i18n插件。我按照文档中的描述设置了区域设置检测:

#app/instance-intializers/i18n.js

export function initialize(applicationInstance) {
  let i18n = applicationInstance.lookup('service:i18n');
  let moment = applicationInstance.lookup('service:moment');
  let locale = calculateLocale(i18n.get('locales'));
  i18n.set('locale', locale);  
  moment.setLocale(locale);
}

function calculateLocale(locales) {
  // whatever you do to pick a locale for the user:
  const language = navigator.languages[0] || navigator.language || navigator.userLanguage;

  return  locales.includes(language.toLowerCase()) ? language : 'en-GB';
}

export default {
  name: 'i18n',
  initialize
};

如您所见,我必须添加:

let moment = applicationInstance.lookup('service:moment');
moment.setLocale(locale);

moment服务上设置区域设置。 我还添加了environment.js

moment: {
  includeLocales: true
}

希望这有帮助。

答案 1 :(得分:0)

ember-moment默认为区域设置en。您可以使用this.get('moment').setLocale('fr');在运行时更改它(请参阅ember-moment/readme):

// app/routes/applicaton.js
export default Ember.Route.extend({
  moment: Ember.inject.service(),
  beforeModel() {
    this.get('moment').setLocale('fr');
  }
});

使用浏览器区域设置:

// app/routes/applicaton.js
export default Ember.Route.extend({
  moment: Ember.inject.service(),
  beforeModel() {
    let locale = window.navigator.userLanguage || window.navigator.language; // e.g. fr-FR
    if (locale) {
      this.get('moment').setLocale(locale.substr(0,2));
    }
  }
});