Next.js 国际化路由跳转后语言没更新怎么办?
我在用 Next.js 的 App Router 做多语言网站,按照官方文档配置了 i18n,切换语言时用 router.push('/en/about') 跳转,页面 URL 变了但内容还是原来语言的,刷新才生效。是不是哪里漏了?
我的 next.config.js 是这样配的:
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
appDir: true,
},
i18n: {
locales: ['zh', 'en'],
defaultLocale: 'zh',
},
};
module.exports = nextConfig;
首先,检查一下你是否在组件内部使用了
useRouter或usePathname来获取当前路径和语言信息。这些钩子会在路径变化时触发重新渲染。其次,确保你的组件依赖于语言变化重新加载数据或内容。可以尝试使用
useEffect来监听路径变化,并在这个钩子中执行相应的操作。这里有一个简单的例子:
注意这里的关键在于
useEffect的依赖数组里包含了router.locale,这样当语言变化时,useEffect会重新执行,从而加载对应语言的内容。如果问题依然存在,检查一下是否有地方缓存了旧的数据没有及时更新。有时候手动管理的状态或者第三方库的状态需要额外注意。