mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-13 23:16:47 +00:00
fix: language switching now strictly follows URL path
- Remove localStorage dependency for language persistence - Add route change listener for language updates - Simplify language switching logic - Fix language reset issue when refreshing /en pages
This commit is contained in:
@@ -87,9 +87,35 @@ export function GlobalContextProvider(props) {
|
||||
}
|
||||
}
|
||||
|
||||
// 添加路由变化时的语言处理
|
||||
useEffect(() => {
|
||||
const handleRouteChange = (url) => {
|
||||
// 从路径中提取语言前缀
|
||||
const pathSegments = url.split('/')
|
||||
const pathLang = pathSegments[1]
|
||||
|
||||
// 检查是否是有效的语言路径
|
||||
if (pathLang === 'en' || pathLang === 'zh') {
|
||||
const targetLang = pathLang === 'en' ? 'en-US' : 'zh-CN'
|
||||
|
||||
// 直接更新语言,不使用 localStorage
|
||||
updateLang(targetLang)
|
||||
updateLocale(generateLocaleDict(targetLang))
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化时处理当前路径
|
||||
handleRouteChange(router.asPath)
|
||||
|
||||
// 监听路由变化
|
||||
router.events.on('routeChangeComplete', handleRouteChange)
|
||||
return () => {
|
||||
router.events.off('routeChangeComplete', handleRouteChange)
|
||||
}
|
||||
}, [router])
|
||||
|
||||
useEffect(() => {
|
||||
initDarkMode(updateDarkMode, defaultDarkMode)
|
||||
initLocale(lang, locale, updateLang, updateLocale)
|
||||
if (
|
||||
NOTION_CONFIG?.REDIRECT_LANG &&
|
||||
JSON.parse(NOTION_CONFIG?.REDIRECT_LANG)
|
||||
|
||||
31
lib/lang.js
31
lib/lang.js
@@ -70,34 +70,21 @@ export function generateLocaleDict(langString) {
|
||||
*/
|
||||
export function initLocale(lang, locale, changeLang, changeLocale) {
|
||||
if (isBrowser) {
|
||||
// 用户请求的语言
|
||||
let queryLang =
|
||||
getQueryVariable('locale') ||
|
||||
getQueryVariable('lang') ||
|
||||
loadLangFromLocalStorage()
|
||||
// 只使用 URL 参数,忽略 localStorage
|
||||
const queryLang = getQueryVariable('locale') || getQueryVariable('lang')
|
||||
|
||||
if (queryLang) {
|
||||
// 用正则表达式匹配有效的语言标识符例如zh-CN(可选的 -CN 部分)
|
||||
queryLang = queryLang.match(/[a-zA-Z]{2}(?:-[a-zA-Z]{2})?/)
|
||||
if (queryLang) {
|
||||
queryLang = queryLang[0]
|
||||
const match = queryLang.match(/[a-zA-Z]{2}(?:-[a-zA-Z]{2})?/)
|
||||
if (match) {
|
||||
const targetLang = match[0]
|
||||
changeLang(targetLang)
|
||||
const targetLocale = generateLocaleDict(targetLang)
|
||||
changeLocale(targetLocale)
|
||||
}
|
||||
}
|
||||
|
||||
let currentLang = lang
|
||||
if (queryLang && queryLang !== lang) {
|
||||
currentLang = queryLang
|
||||
}
|
||||
|
||||
changeLang(currentLang)
|
||||
saveLangToLocalStorage(currentLang)
|
||||
|
||||
const targetLocale = generateLocaleDict(currentLang)
|
||||
if (JSON.stringify(locale) !== JSON.stringify(currentLang)) {
|
||||
changeLocale(targetLocale)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取语言
|
||||
* @returns {*}
|
||||
|
||||
Reference in New Issue
Block a user