defaultLocale 未在 Next.js i18n 中保留默认语言

问题描述 投票:0回答:2

我试图在 Next.js i18n 中设置我的默认语言,但总是将“En”作为默认语言,称为后备。

我也收到此错误:

错误:[@formatjs/intl 错误 MISSING_DATA] 缺少区域设置的区域设置数据:Intl.NumberFormat 中的“sq”。使用默认区域设置:“en”作为后备

module.exports = {
    i18n: {
        locales: ['sq', 'en'],
        defaultLocale: "sq",
    }
}
javascript next.js internationalization react-intl
2个回答
44
投票

Next.js 将根据页面请求中发送的 Accept-Language 标头,

自动检测
用户喜欢哪种语言环境。

在您的情况下,虽然您的默认区域设置是

sq
,但在
en
标头中检测到
Accept-Language
区域设置,因此您会被重定向到区域设置前缀路径。

可以通过在 i18n 选项中将

localeDetection
设置为
false
来禁用此行为。

// next.config.js

module.exports = {
    i18n: {
        locales: ['sq', 'en'],
        defaultLocale: 'sq',
        localeDetection: false
    }
}

来自禁用自动区域设置文档:

localeDetection
设置为
false
Next.js 将不再 根据用户的首选区域设置自动重定向,并将 仅提供从基于语言环境的语言环境检测到的语言环境信息 如上所述的域或区域设置路径。


顺便说一句,关于

@formatjs/intl
错误,它表明您使用的环境/浏览器不支持
sq
区域设置。您可能需要研究
@formatjs/intl-numberformat
来填充该区域设置数据。


0
投票

如果您将使用相同的方式使用

i18n
(在 next.js v13+ 上)将
App Router
实现到 next.js 应用程序,很高兴知道:

locale、locales、defaultLocales、domainLocales 值已 删除是因为不再需要内置 i18n Next.js 功能 在应用程序目录中。

取自迁移路由挂钩文档。

使用

App Router
实现 i18n 的有用链接:

© www.soinside.com 2019 - 2024. All rights reserved.