This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 819add3ae97a [fix](website) Unify language switching and community 
documentation layout (#4529)
819add3ae97a is described below

commit 819add3ae97a4996554421080fd612755b2c2129
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Tue Oct 27 03:53:23 2026 +0000

    [fix](website) Unify language switching and community documentation layout 
(#4529)
    
    Documentation pages displayed a second language selector below the
    global navbar, and community docs used a separate search/sidebar layout.
    Keep language selection in the global navbar and reuse the Dev/4.x
    documentation layout for community docs, including horizontal sections,
    search, scoped sidebars, and the mobile drawer.
    
    Community navigation now has two sections:
    
    - **Community:** About the Community, How to Contribute, and **How to
    Release** (renamed from Release).
    - **For Contributor:** Development & Debugging, Design Documents, and
    the existing Improvement Proposals link.
    
    All 52 community document destinations and the external Improvement
    Proposals destination are preserved. Update Chinese, Japanese, Korean,
    and Russian navigation labels, and extend the static navigation verifier
    to require community section navigation.
    
    ## Versions
    
    - [x] dev
    - [x] 4.x
    - [x] 3.x
    - [x] 2.1 or older (not covered by version/language sync gate)
    
    Language-selector cleanup applies to the shared documentation UI across
    versions. Community docs reuse the existing Dev/4.x layout. Document
    bodies and URLs are unchanged.
    
    ## Languages
    
    - [x] Chinese
    - [x] English
    - [x] Japanese
    - [x] Korean
    - [x] Russian
    
    ## Docs Checklist
    
    - [x] Checked by AI
    - [x] Test Cases Built
    - [x] Updated required version and language counterparts, or explained
    why not
    - [x] If only one language changed, confirmed whether source/translation
    counterparts need sync
    
    ## Validation
    
    - 20 navigation/routing tests passed, including community section
    verification and its missing-navigation regression case.
    - Browser checks passed on all 52 community documents, including active
    section/leaf selection and scoped sidebar contents.
    - Section switching, mobile drawers, Escape behavior, and sticky offsets
    passed at 1440, 996, 768, 390, and 320px.
    - 10 ordinary/community documentation browser cases passed for the
    single global language menu, query/hash preservation, search placement,
    and horizontal overflow.
    - All eight color themes checked at desktop and mobile widths; four
    localized community category dictionaries are complete.
    - English Dev/community dev server compiled successfully and was
    provided for user review. No full production build was run locally.
    
    Co-authored-by: morningman <[email protected]>
---
 .../current.json                                   |  14 +-
 .../current.json                                   |  14 +-
 .../current.json                                   |  14 +-
 .../current.json                                   |  14 +-
 scripts/i18n/__tests__/doc-navigation.test.cjs     |   8 +-
 scripts/i18n/verify-doc-navigation.cjs             |   5 +-
 sidebarsCommunity.json                             | 238 +++++++++++----------
 .../docs-domain-nav/DocsDomainNav.module.scss      |  73 +------
 src/components/docs-domain-nav/DocsDomainNav.tsx   |   4 -
 .../DocItem/Layout/MobileSidebarDrawer.module.css  |  46 ----
 src/theme/DocItem/Layout/MobileSidebarDrawer.tsx   |  85 +-------
 src/theme/DocItem/Layout/styles.module.css         |   6 +-
 src/theme/DocRoot/Layout/styles.module.css         |   2 +-
 src/theme/DocSidebar/Desktop/index.tsx             |   4 -
 src/theme/DocSidebar/Desktop/styles.module.css     |  27 ---
 src/theme/DocSidebarItem/Category/index.tsx        |   2 +-
 src/utils/docs-sidebar-scope.ts                    |   3 +-
 17 files changed, 196 insertions(+), 363 deletions(-)

diff --git a/i18n/ja/docusaurus-plugin-content-docs-community/current.json 
b/i18n/ja/docusaurus-plugin-content-docs-community/current.json
index a3bbfb9e7432..4c693b971499 100644
--- a/i18n/ja/docusaurus-plugin-content-docs-community/current.json
+++ b/i18n/ja/docusaurus-plugin-content-docs-community/current.json
@@ -3,6 +3,14 @@
     "message": "コミュニティ",
     "description": "The label for version current"
   },
+  "sidebar.community.category.Community": {
+    "message": "コミュニティ",
+    "description": "The label for category Community in sidebar community"
+  },
+  "sidebar.community.category.For Contributor": {
+    "message": "貢献者向け",
+    "description": "The label for category For Contributor in sidebar 
community"
+  },
   "sidebar.community.category.About the Community": {
     "message": "コミュニティについて",
     "description": "The label for category About the Community in sidebar 
community"
@@ -51,9 +59,9 @@
     "message": "データ形式リファレンス",
     "description": "The label for category Data Format Reference in sidebar 
community"
   },
-  "sidebar.community.category.Release": {
-    "message": "リリース",
-    "description": "The label for category Release in sidebar community"
+  "sidebar.community.category.How to Release": {
+    "message": "リリース方法",
+    "description": "The label for category How to Release in sidebar community"
   },
   "sidebar.community.category.Design Documents": {
     "message": "設計ドキュメント",
diff --git a/i18n/ko/docusaurus-plugin-content-docs-community/current.json 
b/i18n/ko/docusaurus-plugin-content-docs-community/current.json
index fbfb48331bdb..d46d0cb71085 100644
--- a/i18n/ko/docusaurus-plugin-content-docs-community/current.json
+++ b/i18n/ko/docusaurus-plugin-content-docs-community/current.json
@@ -3,6 +3,14 @@
     "message": "커뮤니티",
     "description": "The label for version current"
   },
+  "sidebar.community.category.Community": {
+    "message": "커뮤니티",
+    "description": "The label for category Community in sidebar community"
+  },
+  "sidebar.community.category.For Contributor": {
+    "message": "기여자 가이드",
+    "description": "The label for category For Contributor in sidebar 
community"
+  },
   "sidebar.community.category.About the Community": {
     "message": "커뮤니티 소개",
     "description": "The label for category About the Community in sidebar 
community"
@@ -51,9 +59,9 @@
     "message": "데이터 형식 참조",
     "description": "The label for category Data Format Reference in sidebar 
community"
   },
-  "sidebar.community.category.Release": {
-    "message": "릴리스",
-    "description": "The label for category Release in sidebar community"
+  "sidebar.community.category.How to Release": {
+    "message": "릴리스 방법",
+    "description": "The label for category How to Release in sidebar community"
   },
   "sidebar.community.category.Design Documents": {
     "message": "설계 문서",
diff --git a/i18n/ru/docusaurus-plugin-content-docs-community/current.json 
b/i18n/ru/docusaurus-plugin-content-docs-community/current.json
index 040f319dfa12..6cf63e2a6765 100644
--- a/i18n/ru/docusaurus-plugin-content-docs-community/current.json
+++ b/i18n/ru/docusaurus-plugin-content-docs-community/current.json
@@ -3,6 +3,14 @@
     "message": "Сообщество",
     "description": "The label for version current"
   },
+  "sidebar.community.category.Community": {
+    "message": "Сообщество",
+    "description": "The label for category Community in sidebar community"
+  },
+  "sidebar.community.category.For Contributor": {
+    "message": "Для участников",
+    "description": "The label for category For Contributor in sidebar 
community"
+  },
   "sidebar.community.category.About the Community": {
     "message": "О сообществе",
     "description": "The label for category About the Community in sidebar 
community"
@@ -51,9 +59,9 @@
     "message": "Справочник форматов данных",
     "description": "The label for category Data Format Reference in sidebar 
community"
   },
-  "sidebar.community.category.Release": {
-    "message": "Выпуск версий",
-    "description": "The label for category Release in sidebar community"
+  "sidebar.community.category.How to Release": {
+    "message": "Как выпустить релиз",
+    "description": "The label for category How to Release in sidebar community"
   },
   "sidebar.community.category.Design Documents": {
     "message": "Проектные документы",
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs-community/current.json 
b/i18n/zh-CN/docusaurus-plugin-content-docs-community/current.json
index d18af0870555..eabdcdfee781 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs-community/current.json
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs-community/current.json
@@ -3,6 +3,14 @@
     "message": "current",
     "description": "The label for version current"
   },
+  "sidebar.community.category.Community": {
+    "message": "社区",
+    "description": "The label for category Community in sidebar community"
+  },
+  "sidebar.community.category.For Contributor": {
+    "message": "贡献者指南",
+    "description": "The label for category For Contributor in sidebar 
community"
+  },
   "sidebar.community.category.About the Community": {
     "message": "关于社区",
     "description": "The label for category About the Community in sidebar 
community"
@@ -51,9 +59,9 @@
     "message": "数据格式参考",
     "description": "The label for category Data Format Reference in sidebar 
community"
   },
-  "sidebar.community.category.Release": {
-    "message": "版本与发布",
-    "description": "The label for category Release in sidebar community"
+  "sidebar.community.category.How to Release": {
+    "message": "发布流程",
+    "description": "The label for category How to Release in sidebar community"
   },
   "sidebar.community.category.Design Documents": {
     "message": "设计文档",
diff --git a/scripts/i18n/__tests__/doc-navigation.test.cjs 
b/scripts/i18n/__tests__/doc-navigation.test.cjs
index 1e7404b4a1f8..ea8611ddc4fb 100644
--- a/scripts/i18n/__tests__/doc-navigation.test.cjs
+++ b/scripts/i18n/__tests__/doc-navigation.test.cjs
@@ -34,7 +34,7 @@ test('navigation samples a native sidebar member when a 
current standalone doc s
     write('manifest.json', JSON.stringify({locale:'ru',pages}));
     for (const doc of pages) {
         const navigation=doc.docId === 'standalone' ? '' : `<aside 
class="theme-doc-sidebar-container"><a 
href="${doc.permalink}">Документ</a></aside>`
-            + (doc.pluginId === 'default' ? `<nav aria-label="Разделы 
документации"><details><a href="${doc.permalink}">Раздел</a></details></nav>` : 
'');
+            + `<nav aria-label="Разделы документации"><details><a 
href="${doc.permalink}">Раздел</a></details></nav>`;
         write(`site${doc.permalink}index.html`, `<article 
class="theme-doc-markdown" lang="ru">Документ</article>${navigation}`);
     }
     write('site/ru/docs/index.html', 
createRedirect({toUrl:pages[2].permalink}));
@@ -44,7 +44,13 @@ test('navigation samples a native sidebar member when a 
current standalone doc s
     const 
result=verify({site:path.join(root,'site'),locale:'ru',snapshot:path.join(root,'snapshot'),manifest:path.join(root,'manifest.json'),scope});
     assert.equal(result.routes,4);
     assert.equal(result.checks.find(check=>check.group === 
'DEV').sample,pages[1].permalink);
+    assert.deepEqual(result.checks.find(check=>check.group === 
'COMMUNITY').domains, ['Раздел']);
     const 
options={site:path.join(root,'site'),locale:'ru',snapshot:path.join(root,'snapshot'),manifest:path.join(root,'manifest.json'),devOnly:true,scope};
+    const communityFile = `site${pages[3].permalink}index.html`;
+    const communityHtml = fs.readFileSync(path.join(root, communityFile), 
'utf8');
+    write(communityFile, communityHtml.replace(/<nav[\s\S]*?<\/nav>/, ''));
+    assert.throws(() => verify(options), /Missing document domain navigation/);
+    write(communityFile, communityHtml);
     fs.unlinkSync(path.join(root,'site/ru/community/index.html'));
     assert.throws(()=>verify(options), /Missing compacted entry: 
\/ru\/community\//);
     write('site/.publish/redirects.json', 
JSON.stringify({redirects:[['/ru/community/',pages[3].permalink,true,301]]}));
diff --git a/scripts/i18n/verify-doc-navigation.cjs 
b/scripts/i18n/verify-doc-navigation.cjs
index b71c07ee72a0..dfb11ad8e9e8 100644
--- a/scripts/i18n/verify-doc-navigation.cjs
+++ b/scripts/i18n/verify-doc-navigation.cjs
@@ -55,13 +55,14 @@ function verify({site, locale = 'ja', snapshot = 
inventoryBaseline(root, locale)
         const links = sidebar.find('a[href]').map((_, node) => 
$(node).attr('href')).get();
         for (const link of links.filter(link => 
link.startsWith(`/${locale}/`))) read(new URL(link, 
'https://doris.apache.org').pathname);
         const domains = [];
-        if (group.pluginId === 'default') {
+        if (group.pluginId === 'default' || group.pluginId === 'community') {
             const label = dictionary['docs.navigation.sections']?.message ?? 
'Documentation sections';
             const nav = $('nav').filter((_, node) => 
$(node).attr('aria-label') === label);
             assert(nav.length, `Missing document domain navigation: 
${representative.permalink}`);
             for (const node of nav.find('details a[href]').toArray()) {
                 const link = $(node).attr('href');
-                assert(link.startsWith(`/${locale}/docs/`), `Wrong domain 
locale: ${link}`);
+                const routeBase = group.pluginId === 'community' ? 'community' 
: 'docs';
+                assert(link.startsWith(`/${locale}/${routeBase}/`), `Wrong 
domain locale or plugin: ${link}`);
                 read(new URL(link, 'https://doris.apache.org').pathname);
                 domains.push($(node).text());
             }
diff --git a/sidebarsCommunity.json b/sidebarsCommunity.json
index e62bbc73c34f..22205e16253e 100644
--- a/sidebarsCommunity.json
+++ b/sidebarsCommunity.json
@@ -2,146 +2,160 @@
     "community": [
         {
             "type": "category",
-            "label": "About the Community",
-            "collapsed": false,
+            "label": "Community",
+            "collapsible": false,
             "items": [
-                "join-community",
-                "subscribe-mail-list",
-                "feedback",
-                "security",
-                "team",
-                "thanks"
-            ]
-        },
-        {
-            "type": "category",
-            "label": "How to Contribute",
-            "items": [
-                "how-to-contribute/contribute-to-doris",
-                "how-to-contribute/community-badges",
-                "how-to-contribute/pull-request",
-                "how-to-contribute/review-and-ci",
-                {
-                    "type": "category",
-                    "label": "Documentation Contribution",
-                    "items": [
-                        "how-to-contribute/contribute-doc",
-                        "how-to-contribute/docs-format-specification"
-                    ]
-                },
-                "how-to-contribute/how-to-share-blogs"
-            ]
-        },
-        {
-            "type": "category",
-            "label": "Development & Debugging",
-            "items": [
-                {
-                    "type": "category",
-                    "label": "Source Code Compilation",
-                    "items": [
-                        "source-install/compilation-with-docker",
-                        "source-install/compilation-with-ldb-toolchain",
-                        "source-install/compilation-linux",
-                        "source-install/compilation-arm",
-                        "source-install/compilation-mac",
-                        "source-install/compilation-win"
-                    ]
-                },
                 {
                     "type": "category",
-                    "label": "IDE Setup",
+                    "label": "About the Community",
+                    "collapsed": false,
                     "items": [
-                        "developer-guide/fe-idea-dev",
-                        "developer-guide/fe-vscode-dev",
-                        "developer-guide/be-clion-dev",
-                        "developer-guide/be-vscode-dev",
-                        "developer-guide/be-multi-directory",
-                        "developer-guide/docker-dev"
+                        "join-community",
+                        "subscribe-mail-list",
+                        "feedback",
+                        "security",
+                        "team",
+                        "thanks"
                     ]
                 },
                 {
                     "type": "category",
-                    "label": "Code Style",
+                    "label": "How to Contribute",
                     "items": [
-                        "developer-guide/java-format-code",
-                        "developer-guide/cpp-format-code",
-                        "developer-guide/cpp-diagnostic-code"
+                        "how-to-contribute/contribute-to-doris",
+                        "how-to-contribute/community-badges",
+                        "how-to-contribute/pull-request",
+                        "how-to-contribute/review-and-ci",
+                        {
+                            "type": "category",
+                            "label": "Documentation Contribution",
+                            "items": [
+                                "how-to-contribute/contribute-doc",
+                                "how-to-contribute/docs-format-specification"
+                            ]
+                        },
+                        "how-to-contribute/how-to-share-blogs"
                     ]
                 },
                 {
                     "type": "category",
-                    "label": "Debugging & Profiling",
+                    "label": "How to Release",
                     "items": [
-                        "developer-guide/debug-tool",
-                        "developer-guide/be-stack-trace",
-                        "developer-guide/arthas",
-                        "developer-guide/fe-profiler",
-                        "developer-guide/pipeline-tracing",
-                        "developer-guide/benchmark-tool"
+                        "release-and-verify/release-versioning",
+                        "release-and-verify/release-prepare",
+                        "release-and-verify/release-doris-core-with-ai-agent",
+                        "release-and-verify/release-doris-core",
+                        "release-and-verify/release-doris-connectors",
+                        "release-and-verify/release-doris-shade",
+                        "release-and-verify/release-doris-sdk",
+                        "release-and-verify/release-doris-manager",
+                        "release-and-verify/release-complete",
+                        "release-and-verify/release-verify"
                     ]
-                },
-                {
-                    "type": "category",
-                    "label": "Testing",
-                    "items": [
-                        "developer-guide/regression-testing",
-                        "developer-guide/all-in-one-image"
-                    ]
-                },
+                }
+            ]
+        },
+        {
+            "type": "category",
+            "label": "For Contributor",
+            "collapsible": false,
+            "items": [
                 {
                     "type": "category",
-                    "label": "Data Source Extension",
+                    "label": "Development & Debugging",
                     "items": [
-                        
"developer-guide/data-source-extension/jdbc-catalog-developer-guide",
-                        
"developer-guide/data-source-extension/trino-connector-developer-guide"
+                        {
+                            "type": "category",
+                            "label": "Source Code Compilation",
+                            "items": [
+                                "source-install/compilation-with-docker",
+                                
"source-install/compilation-with-ldb-toolchain",
+                                "source-install/compilation-linux",
+                                "source-install/compilation-arm",
+                                "source-install/compilation-mac",
+                                "source-install/compilation-win"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "IDE Setup",
+                            "items": [
+                                "developer-guide/fe-idea-dev",
+                                "developer-guide/fe-vscode-dev",
+                                "developer-guide/be-clion-dev",
+                                "developer-guide/be-vscode-dev",
+                                "developer-guide/be-multi-directory",
+                                "developer-guide/docker-dev"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "Code Style",
+                            "items": [
+                                "developer-guide/java-format-code",
+                                "developer-guide/cpp-format-code",
+                                "developer-guide/cpp-diagnostic-code"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "Debugging & Profiling",
+                            "items": [
+                                "developer-guide/debug-tool",
+                                "developer-guide/be-stack-trace",
+                                "developer-guide/arthas",
+                                "developer-guide/fe-profiler",
+                                "developer-guide/pipeline-tracing",
+                                "developer-guide/benchmark-tool"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "Testing",
+                            "items": [
+                                "developer-guide/regression-testing",
+                                "developer-guide/all-in-one-image"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "Data Source Extension",
+                            "items": [
+                                
"developer-guide/data-source-extension/jdbc-catalog-developer-guide",
+                                
"developer-guide/data-source-extension/trino-connector-developer-guide"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "Plugin Development",
+                            "items": [
+                                
"developer-guide/data-lineage-plugin-development"
+                            ]
+                        },
+                        {
+                            "type": "category",
+                            "label": "Data Format Reference",
+                            "items": [
+                                "developer-guide/bitmap-hll-file-format"
+                            ]
+                        }
                     ]
                 },
                 {
                     "type": "category",
-                    "label": "Plugin Development",
+                    "label": "Design Documents",
+                    "collapsed": true,
                     "items": [
-                        "developer-guide/data-lineage-plugin-development"
+                        "design/grouping_sets_design",
+                        "design/metadata-design"
                     ]
                 },
                 {
-                    "type": "category",
-                    "label": "Data Format Reference",
-                    "items": [
-                        "developer-guide/bitmap-hll-file-format"
-                    ]
+                    "type": "link",
+                    "href": 
"https://cwiki.apache.org/confluence/display/DORIS/Doris+Improvement+Proposals";,
+                    "label": "Improvement Proposals"
                 }
             ]
-        },
-        {
-            "type": "category",
-            "label": "Release",
-            "items": [
-                "release-and-verify/release-versioning",
-                "release-and-verify/release-prepare",
-                "release-and-verify/release-doris-core-with-ai-agent",
-                "release-and-verify/release-doris-core",
-                "release-and-verify/release-doris-connectors",
-                "release-and-verify/release-doris-shade",
-                "release-and-verify/release-doris-sdk",
-                "release-and-verify/release-doris-manager",
-                "release-and-verify/release-complete",
-                "release-and-verify/release-verify"
-            ]
-        },
-        {
-            "type": "category",
-            "label": "Design Documents",
-            "collapsed": true,
-            "items": [
-                "design/grouping_sets_design",
-                "design/metadata-design"
-            ]
-        },
-        {
-            "type": "link",
-            "href": 
"https://cwiki.apache.org/confluence/display/DORIS/Doris+Improvement+Proposals";,
-            "label": "Improvement Proposals"
         }
     ]
 }
diff --git a/src/components/docs-domain-nav/DocsDomainNav.module.scss 
b/src/components/docs-domain-nav/DocsDomainNav.module.scss
index 4da74fa4c2ad..6b8052c94b7e 100644
--- a/src/components/docs-domain-nav/DocsDomainNav.module.scss
+++ b/src/components/docs-domain-nav/DocsDomainNav.module.scss
@@ -78,7 +78,6 @@
 
 .search {
     width: clamp(210px, 20vw, 300px);
-    margin-right: 8px;
 }
 
 .search :global(.navbar__search) {
@@ -118,47 +117,6 @@
     background: var(--global-colors-white);
 }
 
-.locale {
-    display: flex;
-    align-items: center;
-}
-
-.locale :global(.navbar__item) {
-    display: flex !important;
-    padding: 0;
-}
-
-.locale :global(.navbar__link) {
-    box-sizing: border-box;
-    min-height: 38px;
-    margin: 0;
-    padding: 0 10px;
-    gap: 6px;
-    border: 0;
-    border-radius: 4px;
-    background: transparent;
-    color: var(--brand-ink-soft) !important;
-    font-family: var(--font-mono);
-    font-size: 12px;
-    font-weight: 550 !important;
-    text-decoration: none;
-}
-
-.locale :global(.navbar__link):hover {
-    background: var(--brand-surface-soft);
-    color: var(--brand-primary-deep) !important;
-}
-
-.locale :global(.navbar__link)::after {
-    opacity: 0.55;
-}
-
-.locale :global(.dropdown__menu) {
-    right: 0;
-    left: auto;
-    min-width: 9rem;
-}
-
 .mobileDomainPicker {
     display: none;
 }
@@ -186,10 +144,6 @@
     .search {
         width: 180px;
     }
-
-    .locale :global(.locale-current-label) {
-        display: none;
-    }
 }
 
 @media (max-width: 996px) {
@@ -302,21 +256,9 @@
     .search :global([class*='searchHintContainer']) {
         display: none !important;
     }
-
-    .locale :global(.locale-current-label) {
-        display: none;
-    }
-
-    .locale :global(.navbar__link) {
-        display: inline-flex !important;
-        min-width: 38px;
-        min-height: 38px;
-        justify-content: center;
-        padding-inline: 9px;
-    }
 }
 
-// Phones: two rows — [Solutions ▾ … 🌐 ▾] on top, then a full-width search
+// Phones: two rows, with the section picker above a full-width search
 // box. `--docs-domain-nav-height` in DocRoot/Layout/styles.module.css mirrors
 // the resulting 103px (8 + 38 + 6 + 42 + 8 padding/rows + 1px border; the
 // search box is 42px because SearchBar.module.css forces its input to 2.5rem)
@@ -339,8 +281,7 @@
         order: 1;
         flex: 0 1 auto;
         min-width: 0;
-        // Always leave room for the locale button on the same row.
-        max-width: calc(100% - 56px);
+        max-width: 100%;
     }
 
     .mobileDomainPicker summary {
@@ -352,19 +293,13 @@
         text-overflow: ellipsis;
     }
 
-    // Lift search and locale out of their wrapper so they can take different
-    // rows: locale stays on the first row, search gets the second.
+    // Let search take the full second row after the section picker.
     .utilities {
         display: contents;
     }
 
-    .locale {
-        order: 2;
-        margin-left: auto;
-    }
-
     .search {
-        order: 3;
+        order: 2;
         flex: 0 0 100%;
         width: 100%;
         margin-right: 0;
diff --git a/src/components/docs-domain-nav/DocsDomainNav.tsx 
b/src/components/docs-domain-nav/DocsDomainNav.tsx
index dc81fed49696..cdb7e0bcc202 100644
--- a/src/components/docs-domain-nav/DocsDomainNav.tsx
+++ b/src/components/docs-domain-nav/DocsDomainNav.tsx
@@ -1,7 +1,6 @@
 import React, { type JSX } from 'react';
 import Link from '@docusaurus/Link';
 import SearchBar from '@theme/SearchBar';
-import LocaleDropdownNavbarItem from 
'@theme/NavbarItem/LocaleDropdownNavbarItem';
 import { translate } from '@docusaurus/Translate';
 import type { DocsDomain } from '@site/src/utils/docs-sidebar-scope';
 
@@ -62,9 +61,6 @@ export default function DocsDomainNav({ domains }: 
DocsDomainNavProps): JSX.Elem
                     <div className={styles.search}>
                         <SearchBar />
                     </div>
-                    <div className={styles.locale}>
-                        <LocaleDropdownNavbarItem mobile={false} {...({} as 
any)} />
-                    </div>
                 </div>
             </div>
         </nav>
diff --git a/src/theme/DocItem/Layout/MobileSidebarDrawer.module.css 
b/src/theme/DocItem/Layout/MobileSidebarDrawer.module.css
index a4ad84af1d56..68854f7229ed 100644
--- a/src/theme/DocItem/Layout/MobileSidebarDrawer.module.css
+++ b/src/theme/DocItem/Layout/MobileSidebarDrawer.module.css
@@ -64,52 +64,6 @@
     flex: none;
 }
 
-.toolbarLocale {
-    position: relative;
-    flex: none;
-}
-
-.localeMenu {
-    position: absolute;
-    top: calc(100% + 4px);
-    right: 0;
-    min-width: 7rem;
-    margin: 0;
-    padding: 0.375rem 0;
-    list-style: none;
-    background: #fff;
-    border: 1px solid #edf2fa;
-    border-radius: 6px;
-    box-shadow: 0 6px 20px rgb(var(--brand-primary-dark-rgb) / 12%);
-    display: none;
-    z-index: 100;
-}
-
-.toolbarLocaleOpen .localeMenu {
-    display: block;
-}
-
-.localeMenuItem {
-    display: block;
-    padding: 0.5rem 0.875rem;
-    color: #1d1d1d;
-    font-size: 0.875rem;
-    line-height: 1.4;
-    text-decoration: none;
-    white-space: nowrap;
-}
-
-.localeMenuItem:hover {
-    background-color: #f7fafc;
-    color: #1d1d1d;
-    text-decoration: none;
-}
-
-.localeMenuItemActive,
-.localeMenuItemActive:hover {
-    color: var(--ifm-color-primary);
-}
-
 .backdrop {
     position: fixed;
     inset: 0;
diff --git a/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx 
b/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx
index 20b9e6c2fd43..493811cfe8d7 100644
--- a/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx
+++ b/src/theme/DocItem/Layout/MobileSidebarDrawer.tsx
@@ -1,5 +1,4 @@
-import {useLanguageItems} from '@site/src/utils/useLanguageItems';
-import React, { type JSX, useEffect, useRef, useState, useCallback } from 
'react';
+import React, { type JSX, useEffect, useState, useCallback } from 'react';
 import { createPortal } from 'react-dom';
 import clsx from 'clsx';
 import { translate } from '@docusaurus/Translate';
@@ -9,7 +8,6 @@ import { useActivePlugin, useActiveVersion, useDocsSidebar } 
from '@docusaurus/p
 import { ThemeClassNames } from '@docusaurus/theme-common';
 import DocSidebarItems from '@theme/DocSidebarItems';
 import SearchBar from '@theme/SearchBar';
-import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
 import { getDocsSidebarScope, supportsDocsDomainNavigation } from 
'@site/src/utils/docs-sidebar-scope';
 
 import styles from './MobileSidebarDrawer.module.css';
@@ -19,15 +17,9 @@ export default function MobileSidebarDrawer(): JSX.Element | 
null {
     const sidebar = useDocsSidebar();
     const activePlugin = useActivePlugin();
     const activeVersion = useActiveVersion(activePlugin?.pluginId);
-    const { pathname, search, hash } = useLocation();
-    const {
-        i18n: { currentLocale, locales, localeConfigs },
-    } = useDocusaurusContext();
-    const languageItems = useLanguageItems();
+    const { pathname } = useLocation();
     const usesDomainNavigation = 
supportsDocsDomainNavigation(activePlugin?.pluginId, activeVersion?.name);
     const [open, setOpen] = useState(false);
-    const [localeOpen, setLocaleOpen] = useState(false);
-    const localeContainerRef = useRef<HTMLDivElement>(null);
 
     const close = useCallback(() => setOpen(false), []);
 
@@ -48,21 +40,8 @@ export default function MobileSidebarDrawer(): JSX.Element | 
null {
 
     useEffect(() => {
         setOpen(false);
-        setLocaleOpen(false);
     }, [pathname]);
 
-    useEffect(() => {
-        if (!localeOpen) return undefined;
-        const onDocClick = (e: MouseEvent) => {
-            const container = localeContainerRef.current;
-            if (container && !container.contains(e.target as Node)) {
-                setLocaleOpen(false);
-            }
-        };
-        document.addEventListener('mousedown', onDocClick);
-        return () => document.removeEventListener('mousedown', onDocClick);
-    }, [localeOpen]);
-
     if (!sidebar) return null;
 
     const sidebarScope = getDocsSidebarScope(sidebar.items, pathname);
@@ -128,63 +107,9 @@ export default function MobileSidebarDrawer(): JSX.Element 
| null {
         <>
             <div className={styles.toolbar}>
                 {!usesDomainNavigation && (
-                    <>
-                        <div className={styles.toolbarSearch}>
-                            <SearchBar />
-                        </div>
-                        <div
-                            ref={localeContainerRef}
-                            className={clsx(styles.toolbarLocale, localeOpen 
&& styles.toolbarLocaleOpen)}
-                        >
-                            <button
-                                type="button"
-                                className={styles.toolbarIconBtn}
-                                onClick={() => setLocaleOpen(o => !o)}
-                                aria-label={translate({id: 
'docs.navigation.switchLanguage', message: 'Switch language'})}
-                                aria-haspopup="true"
-                                aria-expanded={localeOpen}
-                            >
-                                <svg
-                                    className={styles.toolbarIcon}
-                                    xmlns="http://www.w3.org/2000/svg";
-                                    width="16"
-                                    height="16"
-                                    viewBox="0 0 16 16"
-                                    fill="none"
-                                    aria-hidden="true"
-                                >
-                                    <circle cx="8" cy="8" r="6.5" 
stroke="currentColor" strokeWidth="1.25" />
-                                    <path
-                                        d="M1.5 8h13M8 1.5c1.75 1.78 2.7 4.03 
2.7 6.5s-.95 4.72-2.7 6.5C6.25 12.72 5.3 10.47 5.3 8S6.25 3.28 8 1.5Z"
-                                        stroke="currentColor"
-                                        strokeWidth="1.25"
-                                    />
-                                </svg>
-                            </button>
-                            <ul className={styles.localeMenu}>
-                                {languageItems.map(item => {
-                                    const locale = item.locale;
-                                    const to = item.href;
-                                    return (
-                                        <li key={locale}>
-                                            <a
-                                                href={to}
-                                                onClick={item.onClick}
-                                                aria-current={item.current ? 
'page' : undefined}
-                                                
lang={localeConfigs[locale]?.htmlLang}
-                                                className={clsx(
-                                                    styles.localeMenuItem,
-                                                    locale === currentLocale 
&& styles.localeMenuItemActive,
-                                                )}
-                                            >
-                                                {localeConfigs[locale]?.label 
?? locale}
-                                            </a>
-                                        </li>
-                                    );
-                                })}
-                            </ul>
-                        </div>
-                    </>
+                    <div className={styles.toolbarSearch}>
+                        <SearchBar />
+                    </div>
                 )}
                 <button
                     type="button"
diff --git a/src/theme/DocItem/Layout/styles.module.css 
b/src/theme/DocItem/Layout/styles.module.css
index aecc1ecf9b1e..f632e0f03367 100644
--- a/src/theme/DocItem/Layout/styles.module.css
+++ b/src/theme/DocItem/Layout/styles.module.css
@@ -29,10 +29,10 @@
   border: 1px solid var(--ifm-color-primary);
 }
 
-/* Freeze the search/locale/menu toolbar + breadcrumb at the top on mobile
+/* Freeze the search/menu toolbar + breadcrumb at the top on mobile
    so they remain reachable while scrolling. Sits just below the sticky
-   green NavbarNext (64px tall; 56px on phones at ≤768px) and, on Dev/4.x
-   docs, the two-row domain strip. z-index stays under the navbar (300) but
+   NavbarNext (64px tall; 56px on phones at ≤768px) and, on Dev/4.x and
+   community docs, the two-row domain strip. z-index stays under the navbar 
(300) but
    above content. */
 @media (max-width: 996px) {
   .mobileStickyHeader {
diff --git a/src/theme/DocRoot/Layout/styles.module.css 
b/src/theme/DocRoot/Layout/styles.module.css
index 20643640df5e..57480d4f2406 100644
--- a/src/theme/DocRoot/Layout/styles.module.css
+++ b/src/theme/DocRoot/Layout/styles.module.css
@@ -47,7 +47,7 @@
     }
 }
 
-/* Phones stack the domain strip into two rows (section picker + locale, then
+/* Phones stack the domain strip into two rows (section picker, then
    a full-width search box): 8px padding + 38px row + 6px gap + 42px search
    box + 8px padding + 1px border. Keep in step with 
DocsDomainNav.module.scss. */
 @media (max-width: 768px) {
diff --git a/src/theme/DocSidebar/Desktop/index.tsx 
b/src/theme/DocSidebar/Desktop/index.tsx
index e3c2a3f29230..47ab292fabf6 100644
--- a/src/theme/DocSidebar/Desktop/index.tsx
+++ b/src/theme/DocSidebar/Desktop/index.tsx
@@ -4,7 +4,6 @@ import {useThemeConfig} from '@docusaurus/theme-common';
 import {useActivePlugin, useActiveVersion} from 
'@docusaurus/plugin-content-docs/client';
 import Logo from '@theme/Logo';
 import SearchBar from '@theme/SearchBar';
-import LocaleDropdownNavbarItem from 
'@theme/NavbarItem/LocaleDropdownNavbarItem';
 import CollapseButton from '@theme/DocSidebar/Desktop/CollapseButton';
 import Content from '@theme/DocSidebar/Desktop/Content';
 import type {Props} from '@theme/DocSidebar/Desktop';
@@ -37,9 +36,6 @@ function DocSidebarDesktop({path, sidebar, onCollapse, 
isHidden}: Props) {
           <div className={styles.sidebarSearch}>
             <SearchBar />
           </div>
-          <div className={styles.sidebarLocale}>
-            <LocaleDropdownNavbarItem mobile={false} {...({} as any)} />
-          </div>
         </div>
       )}
       <Content path={path} sidebar={sidebar} />
diff --git a/src/theme/DocSidebar/Desktop/styles.module.css 
b/src/theme/DocSidebar/Desktop/styles.module.css
index 39a268248ef6..9e9dbaac1d6d 100644
--- a/src/theme/DocSidebar/Desktop/styles.module.css
+++ b/src/theme/DocSidebar/Desktop/styles.module.css
@@ -79,30 +79,3 @@
 :global(.theme-doc-sidebar-container) {
   clip-path: none !important;
 }
-
-.sidebarLocale {
-  flex: 0 0 auto;
-  display: flex;
-  align-items: center;
-}
-
-.sidebarLocale :global(.navbar__item.dropdown) {
-  padding: 0 !important;
-}
-
-.sidebarLocale :global(.navbar__link) {
-  display: inline-flex;
-  align-items: center;
-  padding: 0.4rem 0.55rem;
-  border: 1px solid #dfe5f0;
-  border-radius: 4px;
-  line-height: 1;
-}
-
-.sidebarLocale :global(.navbar__link):hover {
-  border-color: #8592a6;
-}
-
-.sidebarLocale :global(.navbar__link)::after {
-  display: none;
-}
diff --git a/src/theme/DocSidebarItem/Category/index.tsx 
b/src/theme/DocSidebarItem/Category/index.tsx
index 00008244b8e8..95b44a50f9b5 100644
--- a/src/theme/DocSidebarItem/Category/index.tsx
+++ b/src/theme/DocSidebarItem/Category/index.tsx
@@ -222,7 +222,7 @@ export default function DocSidebarItemCategory({
             <Collapsible
                 lazy
                 as="ul"
-                className={`menu__list ${level === 1 ? 'menu__list_level_2' : 
''} ${level === 1 && !isMainDocs ? 'community_level_2' : ''} `}
+                className={`menu__list ${level === 1 ? 'menu__list_level_2' : 
''} ${level === 1 && !isMainDocs && !usesDomainNavigation ? 'community_level_2' 
: ''} `}
                 collapsed={collapsed}
             >
                 <DocSidebarItems
diff --git a/src/utils/docs-sidebar-scope.ts b/src/utils/docs-sidebar-scope.ts
index a9e1054d4a36..17bc7c53870e 100644
--- a/src/utils/docs-sidebar-scope.ts
+++ b/src/utils/docs-sidebar-scope.ts
@@ -21,7 +21,8 @@ export function supportsDocsDomainNavigation(
     pluginId: string | undefined,
     versionName: string | undefined,
 ): boolean {
-    return pluginId === 'default' && (versionName === 'current' || versionName 
=== '4.x');
+    return (pluginId === 'default' && (versionName === 'current' || 
versionName === '4.x'))
+        || (pluginId === 'community' && versionName === 'current');
 }
 
 function getNavigationLabel(item: PropSidebarItem): string | undefined {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to