defaultLocale 未在 Next.js i18n 中保留默认语言
Posted
技术标签:
【中文标题】defaultLocale 未在 Next.js i18n 中保留默认语言【英文标题】:defaultLocale is not keeping default lang in Next.js i18n 【发布时间】:2021-06-18 05:00:06 【问题描述】:我正在尝试在 Next.js i18n 中设置我的默认语言,但总是将“En”作为默认语言,称为后备语言。
我也收到此错误:
错误:[@formatjs/intl Error MISSING_DATA] 缺少语言环境数据:Intl.NumberFormat 中的“sq”。使用默认语言环境:“en”作为后备
module.exports =
i18n:
locales: ['sq', 'en'],
defaultLocale: "sq",
【问题讨论】:
你们提供sq语言json吗? 【参考方案1】:Next.js 将根据页面请求中发送的Accept-Language
标头automatically detect 用户喜欢哪个区域设置。
在您的情况下,虽然您的默认语言环境是 sq
,但在 Accept-Language
标头中检测到 en
语言环境,因此您会被重定向到以语言环境为前缀的路径。
可以通过在 i18n 选项中将 localeDetection
设置为 false
来禁用此行为。
// next.config.js
module.exports =
i18n:
locales: ['sq', 'en'],
defaultLocale: 'sq',
localeDetection: false
关于@formatjs/intl
错误,它表明您使用的环境/浏览器不支持sq
语言环境。您可能需要查看 @formatjs/intl-numberformat
来填充该语言环境数据。
【讨论】:
对于 formatjs/intl,我找到了这段代码,但没有用: import '@formatjs/intl-datetimeformat/polyfill-force' // 强制使用我们的 polyfill import '@formatjs/intl -datetimeformat/locale-data/kk' // 添加你想要的语言环境 import '@formatjs/intl-datetimeformat/locale-data/ru' // 添加你想要的语言环境 import '@formatjs/intl-datetimeformat/add-all-tz ' // 添加所有 tz 数据 你真的抄袭了吗?您需要添加所需的语言环境:sq
。
是的,我添加了 /sq 但结果还是一样,我应该把这段代码放在文件中:_app.js 还是?
我的代码: import '@formatjs/intl-datetimeformat/polyfill-force' // 强制使用我们的polyfill import '@formatjs/intl-datetimeformat/locale-data/sq' // 添加你想要的语言环境 import '@formatjs/intl-datetimeformat/add-all-tz' // 添加所有 tz 数据
我刚刚意识到我可能链接了错误的 polyfill。尝试@formatjs/intl-numberformat
,因为Intl.NumberFormat
出现错误。更新了我的答案。以上是关于defaultLocale 未在 Next.js i18n 中保留默认语言的主要内容,如果未能解决你的问题,请参考以下文章
如何在 next.js 中管理 i18n 路由以使用斜杠而不是破折号
使用带有 TypeScript 的 next/image 时获取主机未配置错误