vue-i18n v8.24.2 挪威语(nb-NO)日期格式显示异常问题求助
问题根因
你的i18n实例初始化时的locale取值逻辑存在问题:
// 错误的写法 locale: navigator.language.split('-')[0] || process.env.VUE_APP_I18N_LOCALE || defaultLocale,
navigator.language.split('-')[0]会将完整的地区语言码nb-NO截断为短码nb,但你在dateTimeFormats、messages中配置的语言key均为nb-NO,不存在nb对应的日期格式配置,vue-i18n找不到匹配的格式规则时就会使用默认的英文日期格式MM/dd/yyyy,和你预期的格式不符。
修复方案
方案1(推荐):调整locale取值逻辑,不截断地区编码
直接使用完整的navigator.language值作为locale判断依据,修改初始化代码为:
locale: navigator.language || process.env.VUE_APP_I18N_LOCALE || defaultLocale,
修改后如果浏览器语言为nb-NO会直接匹配你已有的配置,日期格式就能正常渲染为dd.MM.yyyy。
方案2:兼容短码场景
如果你确实需要兼容nb这类不带地区后缀的短码,可直接给nb补充一份和nb-NO完全一致的配置即可:
const dateTimeFormats = { "nb-NO": { // 原有配置不变 }, "nb": { 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;
校验方法
修改后可在初始化完成后打印console.log(i18n.locale),确认实际生效的locale值和你配置的key一致,即可快速验证问题是否解决。
内容的提问来源于stack exchange,提问作者Roar S.
相关产品推荐
相关产品推荐

