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 中保留默认语言的主要内容,如果未能解决你的问题,请参考以下文章

React 组件道具未在 Next.js 页面中呈现

如何在 next.js 中管理 i18n 路由以使用斜杠而不是破折号

使用带有 TypeScript 的 next/image 时获取主机未配置错误

如何调试未在任何 IOS 设备上加载的网站?

带有 Chakra UI 的 React-hook-form 未在 NextJS 中显示验证错误消息

next.js的框架