关于 locale 的输入错误是正确的,因为在未设置 i18n 时它可以为空。请参阅此处的讨论:https ://github.com/isaachinman/next-i18next/issues/1307
有多种方法可以处理这个问题
- 将语言环境转换为字符串
export const getServerSideProps: GetServerSideProps = async ({ locale }) => ({
props: {
...await serverSideTranslations(locale as string, ['common', 'header']),
},
})
- 在不是可选的地方定义您自己的
GetServerSideProps
类型并使用该类型。locale
type CustomGetServerSideProps<
P extends { [key: string]: any } = { [key: string]: any },
Q extends ParsedUrlQuery = ParsedUrlQuery
> = (context: GetServerSidePropsContext<Q>) => Promise<GetServerSidePropsResult<P>>
type GetServerSidePropsContext<Q extends ParsedUrlQuery = ParsedUrlQuery> = {
req: IncomingMessage & {
cookies: NextApiRequestCookies
}
res: ServerResponse
params?: Q
query: ParsedUrlQuery
preview?: boolean
previewData?: PreviewData
resolvedUrl: string
locale: string // This is where the magic happens.
locales?: string[]
defaultLocale?: string
}
export const getServerSideProps: CustomGetServerSideProps = async ({ locale }) => ({
props: {
...await serverSideTranslations(locale, ['common', 'header']),
},
})
我自己使用第二个选项,因为这样我就不必一直转换同一个变量,这也已经是一个字符串。