我通过将onClick
绑定到两个<div>
元素来更改locale:
import { useRouter } from 'next/router'
// other codes
const router = useRouter()
const changeLocale = (locale) => {
router.push({
router: router.pathname,
query: router.query
}, router.asPath, { locale })
}
return <div>
<div onClick={() => changeLocale('en')}>EN</div>
<div onClick={() => changeLocale('ru')}>RU</div>
</div>
问题是它不会改变URL。当我转到/en/about
并单击此RU
时,URL不会变为/ru/about
。
为什么router.push
不能正常工作?
2条答案
按热度按时间iibxawm41#
注意
router.push({})
没有router
属性!要处理路由,请提供一个区域设置列表和默认区域设置,Next.js将自动处理路由。
假设您使用的是next 12,要为默认语言环境添加前缀,请更新您的下一个配置:
接下来,要添加自定义路由规则,请在页面中创建一个新文件
middleware.js
:请访问nextjs文档以了解更多关于语言环境策略的信息
6qqygrtg2#
对我来说,问题是我有一个子菜单,所以默认区域设置的
router.push
被第二次调用,导致路由没有改变,因为没有区域设置改变。您可以在changeLocale
方法中添加一个检查,以便在没有提供区域设置时返回。希望有帮助!