vue-i18n:日期格式错误,例如挪威



我在我的应用程序中使用vue-i18n(版本8.24.2),除了使用locale = nb-NO(挪威语)呈现日期外,一切都按预期工作。期望格式:dd.MM.yyyy。实际格式:MM/dd/yyyy。当将语言环境切换为德语时,使用与挪威语相同的日期格式,将应用正确的日期格式。

这个开放的问题可能会解决我的问题:https://github.com/kazupon/vue-i18n/issues/625

我花了几个小时调查这个问题,但我目前卡住了,因此任何帮助都将非常感谢。

我的<<p> strong> i18n.ts (我省略了与此问题无关的语言配置)
import Vue from "vue";
import VueI18n from "vue-i18n";
enum Locales {
NO = "nb-NO"
}
const LOCALES = [
{ value: Locales.NO, caption: "Norsk" }
];
import nb_NO from "./locales/nb-NO.json";
export const messages = {
[Locales.NO]: nb_NO
};
const defaultLocale = Locales.NO;
const dateTimeFormats = {
"nb-NO": {
short: {
year: "numeric",
month: "2-digit",
day: "2-digit",
},
long: {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
hour12: false,
},
},
} as VueI18n.DateTimeFormats;
Vue.use(VueI18n);
// Create VueI18n instance with options
const i18n = new VueI18n({
locale: navigator.language.split('-')[0] || process.env.VUE_APP_I18N_LOCALE || defaultLocale,
fallbackLocale: defaultLocale,
messages,
dateTimeFormats: dateTimeFormats,
silentTranslationWarn: true,
});
const translate = (key: string): string => {
if (!key) {
return "";
}
return i18n.t(key) as string;
};
export { i18n, translate }; //export above method

vue-i18n直接将日期本地化转发给Intl.DateTimeFormat(locale).format(date)

似乎结果只是不正确的Chrome作为v92 (Issue 1233509)。这个错误在Chrome金丝雀v94修复。

作为一种解决方案,您可以修改vue-i18n实例的_dateTimeFormatters,以使用丹麦(da)区域设置的nb-NO格式化程序:

const i18n = new VueI18n({/*...*/});
i18n._dateTimeFormatters[Locales.NO + '__short'] =
new Intl.DateTimeFormat('da', dateTimeFormats[Locales.NO].short);
i18n._dateTimeFormatters[Locales.NO + '__long'] =
new Intl.DateTimeFormat('da', dateTimeFormats[Locales.NO].long);

演示

最新更新