diff --git a/lib/global.js b/lib/global.js index f526e165..8f8850f3 100644 --- a/lib/global.js +++ b/lib/global.js @@ -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) diff --git a/lib/lang.js b/lib/lang.js index 0436b80f..ac2f0682 100644 --- a/lib/lang.js +++ b/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 {*}