serverSideTranslations 在动态路由下无法正常工作问题求助
问题排查与解决建议
针对你/user/[id]/index.js动态路由国际化构建后失效的问题,结合提供的代码,核心问题及修复建议如下:
1. 修正getStaticPaths参数不匹配问题
你的路由仅包含id一个动态参数,但paths数组的params中额外添加了slug字段,这会导致Next.js无法正确匹配路由,进而导致预生成的国际化页面无法正常访问。
修复后代码:
export const getStaticPaths = ({ locale }) => { return { paths: [ { params: { id: `1` }, locale: "en" }, { params: { id: `1` }, locale: "hu" }, { params: { id: `1` }, locale: "de" }, { params: { id: `1` }, locale: "lt" }, { params: { id: `1` }, locale: "cz" }, { params: { id: `1` }, locale: "pl" }, { params: { id: `1` }, locale: "ru" }, ], fallback: true, } }
2. 确认getStaticProps的翻译加载逻辑
- 确保已正确导入
serverSideTranslations(通常来自next-i18next/serverSideTranslations) - 若页面需使用
id参数数据,需在getStaticProps中接收并传递给组件(非国际化失效核心问题,但需保证参数完整):
export async function getStaticProps({ locale, params }) { return { props: { ...(await serverSideTranslations(locale, ["shop", "account", "navbar", "footer"])), id: params.id, // 页面用到id时需传递 }, }; }
3. 验证国际化配置与文件结构
- 确认
localePath: "./lang"指向的文件夹存在,且文件夹下包含所有配置locale对应的翻译文件(如lang/en.json、lang/ru.json等) - 每个翻译文件必须包含
shop、account、navbar、footer命名空间的键值对,示例en.json:
{ "shop": { "title": "Shop" }, "account": { "profile": "Profile" } }
4. 检查fallback模式的影响
你设置了fallback: true,未在paths中预生成的id页面会在首次请求时动态生成。若需特定id的所有locale页面在构建时生成,保持当前配置即可;若有更多id需预生成,补充到paths数组中即可。
内容的提问来源于stack exchange,提问作者Jaydendev
相关产品推荐
相关产品推荐

