我坚持使用浏览器区域设置使用ember-moment插件来格式化日期/时间。我在environment.js
中定义了包含的语言环境,如其自述文件中所述:
moment: {
includeLocales: true
}
然后在handlbars模板中,我尝试显示日期:
{{moment-format urrentShop.shop.openingDate 'L'}}
但日期仍以美国格式显示:
03/27/2018
而不是法国人。关于如何解决这个问题的任何想法?
答案 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));
}
}
});