如何切换回 Next.js 中的默认语言环境?
How to switch back to the default locale in Next.js?
在 Next.js 应用程序中,我使用 next-i18next 多语言模块,工作正常。有两种语言,一种是英语,一种是阿拉伯语。默认为英语。
为了切换,我在NavBar
中使用了以下代码。
import { useRouter} from "next/router"
import { useTranslation } from 'next-i18next'
import { useState } from 'react'
const NavBar = ({...props}) => {
const router = useRouter()
const { t } = useTranslation('navbar');
const [language, setLanguage] = useState(router.locale)
const onChangeLanguage = (lang) => (e)=> {
e.preventDefault()
if(lang === 'ar') {
router.push('ar')
} else {
router.push('/')
}
}
return (
<>
.....
.....
<div className="form-check form-check-inline">
<input type="checkbox" className="form-check-input" id="en" onClick={onChangeLanguage('en')} value="en" defaultChecked = {language === 'en'} />
<label className="form-check-label" htmlFor="inlineCheckbox1">English</label>
</div>
<div className="form-check form-check-inline">
<input type="checkbox" className="form-check-input" id="ar" onClick={onChangeLanguage('ar')} value="ar" defaultChecked = {language === 'ar'} />
<label className="form-check-label" htmlFor="inlineCheckbox2">Arabic</label>
</div>
</>
)
}
export default NavBar;
所以在主页上,即 http://localhost:3000
,当我检查阿拉伯语时,它会在 URL 之后附加 /ar
并且工作正常,但它会在内部页面中产生问题。
我有这样的页面结构
pages
index.js
settings
locations
index.js
add.js
edit
[...id].js
products
index.js
add.js
edit
[...id].js
如果我尝试在内部页面上将语言环境从 en
更改为 ar
,例如http://localhost:3000/settings/products
然后它重定向到 http://localhost:3000/settings/ar
URL 那里它没有找到任何路由所以 404 出现。
如果我从主页 [http://localhost:3000/ar
] 设置了 ar
语言环境,那么如果我在任何内部页面上将语言环境从 ar
更改为 en
,例如http:localhost:3000/ar/settings/localtion/edit/<UUID>
那么它不会将语言设置为 en
。
要保留当前路线但更改区域设置,您可以使用 router.asPath
作为 url
然后在 [=15 的选项对象(第三个参数)中传递 locale
=].
const onChangeLanguage = (lang) => (e) => {
e.preventDefault()
router.push(router.asPath, undefined, { locale: lang })
}
在 Next.js 应用程序中,我使用 next-i18next 多语言模块,工作正常。有两种语言,一种是英语,一种是阿拉伯语。默认为英语。
为了切换,我在NavBar
中使用了以下代码。
import { useRouter} from "next/router"
import { useTranslation } from 'next-i18next'
import { useState } from 'react'
const NavBar = ({...props}) => {
const router = useRouter()
const { t } = useTranslation('navbar');
const [language, setLanguage] = useState(router.locale)
const onChangeLanguage = (lang) => (e)=> {
e.preventDefault()
if(lang === 'ar') {
router.push('ar')
} else {
router.push('/')
}
}
return (
<>
.....
.....
<div className="form-check form-check-inline">
<input type="checkbox" className="form-check-input" id="en" onClick={onChangeLanguage('en')} value="en" defaultChecked = {language === 'en'} />
<label className="form-check-label" htmlFor="inlineCheckbox1">English</label>
</div>
<div className="form-check form-check-inline">
<input type="checkbox" className="form-check-input" id="ar" onClick={onChangeLanguage('ar')} value="ar" defaultChecked = {language === 'ar'} />
<label className="form-check-label" htmlFor="inlineCheckbox2">Arabic</label>
</div>
</>
)
}
export default NavBar;
所以在主页上,即 http://localhost:3000
,当我检查阿拉伯语时,它会在 URL 之后附加 /ar
并且工作正常,但它会在内部页面中产生问题。
我有这样的页面结构
pages
index.js
settings
locations
index.js
add.js
edit
[...id].js
products
index.js
add.js
edit
[...id].js
如果我尝试在内部页面上将语言环境从 en
更改为 ar
,例如http://localhost:3000/settings/products
然后它重定向到 http://localhost:3000/settings/ar
URL 那里它没有找到任何路由所以 404 出现。
如果我从主页 [http://localhost:3000/ar
] 设置了 ar
语言环境,那么如果我在任何内部页面上将语言环境从 ar
更改为 en
,例如http:localhost:3000/ar/settings/localtion/edit/<UUID>
那么它不会将语言设置为 en
。
要保留当前路线但更改区域设置,您可以使用 router.asPath
作为 url
然后在 [=15 的选项对象(第三个参数)中传递 locale
=].
const onChangeLanguage = (lang) => (e) => {
e.preventDefault()
router.push(router.asPath, undefined, { locale: lang })
}