diff --git a/docusaurus.config.js b/docusaurus.config.js
index 89bfbad..c6316a4 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -15,6 +15,8 @@ const config = {
botId: process.env.BOT_ID,
patToken: process.env.TOKEN
},
+ // Add client module for language detection
+ clientModules: [require.resolve('./src/clientModules/lang-redirect.js')],
markdown: {
hooks: {
onBrokenMarkdownLinks: 'warn',
@@ -76,7 +78,18 @@ const config = {
],
i18n: {
defaultLocale: 'en',
- locales: ['en', 'zh-CN'],
+ locales: ['en', 'zh-cn'],
+ localeConfigs: {
+ en: {
+ label: 'English',
+ htmlLang: 'en',
+ },
+ 'zh-cn': {
+ label: '中文',
+ htmlLang: 'zh-CN',
+ path: 'zh-CN',
+ },
+ },
},
themeConfig:
({
@@ -136,7 +149,7 @@ const config = {
},
{
label: 'News',
- to: 'news',
+ to: '/news',
},
{
label: 'Customer Stories',
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/detail-pg18-contributors.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/detail-pg18-contributors.mdx
index a44ddfa..aab8468 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/detail-pg18-contributors.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/detail-pg18-contributors.mdx
@@ -74,7 +74,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepin-cert.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepin-cert.mdx
index f839180..c9d6ffd 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepin-cert.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepin-cert.mdx
@@ -73,7 +73,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepseek-assistant.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepseek-assistant.mdx
index 2dda784..dc015c5 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepseek-assistant.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-deepseek-assistant.mdx
@@ -76,7 +76,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-expert-advisory-committee.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-expert-advisory-committee.mdx
index f9612b6..8f9bd81 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-expert-advisory-committee.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-expert-advisory-committee.mdx
@@ -82,7 +82,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-kylin-cert.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-kylin-cert.mdx
index fb14f44..89fd827 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-kylin-cert.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-kylin-cert.mdx
@@ -72,7 +72,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-loongarch-cert.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-loongarch-cert.mdx
index 8f103d3..94656a7 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-loongarch-cert.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-loongarch-cert.mdx
@@ -74,7 +74,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-navicat.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-navicat.mdx
index be2fe5e..d8395fe 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-navicat.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-navicat.mdx
@@ -74,7 +74,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-2025.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-2025.mdx
index 9fad123..e5be2ba 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-2025.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-2025.mdx
@@ -76,7 +76,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
-
新闻动态 > 开源之夏 2025 结项
+
新闻动态 > 开源之夏 2025 结项
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-students.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-students.mdx
index 68925f9..d073768 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-students.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-ospp-students.mdx
@@ -76,7 +76,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-pku-course.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-pku-course.mdx
index f8b2105..5342e8d 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-pku-course.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-pku-course.mdx
@@ -75,7 +75,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-2-released.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-2-released.mdx
index 0925820..14a362a 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-2-released.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-2-released.mdx
@@ -75,7 +75,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-4-released.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-4-released.mdx
index 5b8a58a..9c4a67d 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-4-released.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-4-released.mdx
@@ -75,7 +75,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-5-released.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-5-released.mdx
index ef25320..fcae005 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-5-released.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-5-released.mdx
@@ -75,7 +75,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-6-released.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-6-released.mdx
index db639a9..e85f31b 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-6-released.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v4-6-released.mdx
@@ -75,7 +75,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
-
新闻动态 > IvorySQL 4.6 发布
+
新闻动态 > IvorySQL 4.6 发布
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-0-released.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-0-released.mdx
index b1b1bb5..11a0814 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-0-released.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-0-released.mdx
@@ -75,7 +75,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
-
新闻动态 > IvorySQL 5.0 发布
+
新闻动态 > IvorySQL 5.0 发布
diff --git a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-1-released.mdx b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-1-released.mdx
index ca58a4e..5d7060d 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-1-released.mdx
+++ b/i18n/zh-CN/docusaurus-plugin-content-pages/news/ivorysql-v5-1-released.mdx
@@ -74,7 +74,7 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
-
新闻动态 > IvorySQL 5.1 发布
+
新闻动态 > IvorySQL 5.1 发布
diff --git a/src/clientModules/lang-redirect.js b/src/clientModules/lang-redirect.js
new file mode 100644
index 0000000..8be62aa
--- /dev/null
+++ b/src/clientModules/lang-redirect.js
@@ -0,0 +1,41 @@
+/**
+ * Docusaurus Client Module for Language Detection
+ * This module runs on the client side and handles browser language detection
+ */
+export function onRouteDidUpdate({ location, previousLocation }) {
+ // Only run on root path
+ if (location.pathname !== '/' && location.pathname !== '/index.html') {
+ return;
+ }
+
+ // Check if user has an existing locale preference (manual language selection)
+ const savedLocale = localStorage.getItem('docusaurus.locale');
+ if (savedLocale === 'en') {
+ // User explicitly chose English, respect it and don't redirect
+ return;
+ }
+
+ if (savedLocale === 'zh-CN') {
+ // User chose Chinese, no need to redirect
+ return;
+ }
+
+ // Check if this is the first visit to the root path in this session
+ if (sessionStorage.getItem('clientLangDetectionDone')) {
+ return;
+ }
+
+ // Detect browser language
+ const browserLang = navigator.language || navigator.userLanguage || '';
+
+ // Redirect Chinese users to Chinese version
+ if (browserLang.toLowerCase().startsWith('zh')) {
+ // Mark as done before redirecting to prevent loops
+ sessionStorage.setItem('clientLangDetectionDone', '1');
+ // Redirect Chinese users to Chinese version
+ window.location.replace('/zh-CN/');
+ } else {
+ // Mark as done for non-Chinese users too
+ sessionStorage.setItem('clientLangDetectionDone', '1');
+ }
+}
diff --git a/static/_redirects b/static/_redirects
index c16dd16..6fc32d8 100644
--- a/static/_redirects
+++ b/static/_redirects
@@ -1,4 +1,6 @@
# Redirect users from China to chinese version at /zh-CN.
-/ /zh-cn 302! Country=cn
-# Also users with Chinese language should be redirected to /zh-cn
-# / /zh-cn 302! Language=zh
+# Disabled - relying on client-side browser language detection instead
+# The ! flag causes forced redirects that prevent manual language switching
+# / /zh-CN 302 Country=cn
+# Also users with Chinese language should be redirected to /zh-CN
+# / /zh-CN 302 Language=zh