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

我在我的应用程序中使用vue-i18n(版本 8.24.2),一切都按预期工作,除非使用 locale = nb-NO(挪威语)渲染日期。预期格式:dd.MM.yyyy。实际格式:MM/dd/yyyy。将区域设置切换为德语(使用与挪威语相同的日期格式)时,将应用正确的日期格式。

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

我已经花了几个小时调查这个问题,但我目前被困住了,因此任何帮助将不胜感激。

我的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).

从 v92 开始,结果似乎只在 Chrome 中不正确(问题1233509)。此错误已在 Chrome Canary 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);

演示


以上是vue-i18n:例如挪威语的错误日期格式的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>