From 2e88ffb975655354d4d008042decfaab4820de8b Mon Sep 17 00:00:00 2001 From: Hyu Date: Wed, 2 Sep 2026 23:34:14 +0800 Subject: [PATCH] docs: localize header navigation (#116) Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com> --- docs.json | 110 +++++++++++++++++++++++++++++++++++++++++---- tests/seo.test.mjs | 36 +++++++++++++++ 2 files changed, 137 insertions(+), 9 deletions(-) diff --git a/docs.json b/docs.json index 972ce725b..500bb1a8d 100644 --- a/docs.json +++ b/docs.json @@ -27,15 +27,15 @@ "links": [ { "label": "Home", - "href": "https://langbot.app" + "href": "https://langbot.app/en" }, { "label": "Cloud", - "href": "https://space.langbot.app/cloud" + "href": "https://space.langbot.app/cloud?language=en" }, { - "label": "Market", - "href": "https://space.langbot.app" + "label": "Extensions", + "href": "https://space.langbot.app/market?language=en" }, { "label": "Blog", @@ -43,9 +43,14 @@ }, { "label": "Roadmap", - "href": "https://langbot.featurebase.app/roadmap" + "href": "https://langbot.app/en/roadmap" } - ] + ], + "primary": { + "type": "button", + "label": "GitHub", + "href": "https://github.com/langbot-app/LangBot" + } }, "footer": { "socials": { @@ -772,7 +777,36 @@ } ] } - ] + ], + "navbar": { + "links": [ + { + "label": "Home", + "href": "https://langbot.app/en" + }, + { + "label": "Cloud", + "href": "https://space.langbot.app/cloud?language=en" + }, + { + "label": "Extensions", + "href": "https://space.langbot.app/market?language=en" + }, + { + "label": "Blog", + "href": "https://langbot.app/en/blog" + }, + { + "label": "Roadmap", + "href": "https://langbot.app/en/roadmap" + } + ], + "primary": { + "type": "button", + "label": "GitHub", + "href": "https://github.com/langbot-app/LangBot" + } + } }, { "language": "cn", @@ -1054,7 +1088,36 @@ } ] } - ] + ], + "navbar": { + "links": [ + { + "label": "首页", + "href": "https://langbot.app/zh" + }, + { + "label": "云服务", + "href": "https://space.langbot.app/cloud?language=zh" + }, + { + "label": "扩展", + "href": "https://space.langbot.app/market?language=zh" + }, + { + "label": "博客", + "href": "https://langbot.app/zh/blog" + }, + { + "label": "路线图", + "href": "https://langbot.app/zh/roadmap" + } + ], + "primary": { + "type": "button", + "label": "GitHub", + "href": "https://github.com/langbot-app/LangBot" + } + } }, { "language": "jp", @@ -1311,7 +1374,36 @@ } ] } - ] + ], + "navbar": { + "links": [ + { + "label": "ホーム", + "href": "https://langbot.app/ja" + }, + { + "label": "クラウド", + "href": "https://space.langbot.app/cloud?language=ja" + }, + { + "label": "拡張機能", + "href": "https://space.langbot.app/market?language=ja" + }, + { + "label": "ブログ", + "href": "https://langbot.app/ja/blog" + }, + { + "label": "ロードマップ", + "href": "https://langbot.app/ja/roadmap" + } + ], + "primary": { + "type": "button", + "label": "GitHub", + "href": "https://github.com/langbot-app/LangBot" + } + } } ] }, diff --git a/tests/seo.test.mjs b/tests/seo.test.mjs index afba2dbb2..3320c2a99 100644 --- a/tests/seo.test.mjs +++ b/tests/seo.test.mjs @@ -32,6 +32,42 @@ test("the historical README_EN URL keeps its permanent canonical redirect", asyn assert.notEqual(redirects[0].permanent, false); }); +test("navbar is localized and links to locale-aware product pages", async () => { + const docs = JSON.parse(await readFile(new URL("docs.json", repoRoot), "utf8")); + const languages = Object.fromEntries( + docs.navigation.languages.map((item) => [item.language, item.navbar]), + ); + const expected = { + en: { + labels: ["Home", "Cloud", "Extensions", "Blog", "Roadmap"], + roadmap: "https://langbot.app/en/roadmap", + }, + cn: { + labels: ["首页", "云服务", "扩展", "博客", "路线图"], + roadmap: "https://langbot.app/zh/roadmap", + }, + jp: { + labels: ["ホーム", "クラウド", "拡張機能", "ブログ", "ロードマップ"], + roadmap: "https://langbot.app/ja/roadmap", + }, + }; + + for (const [language, navbar] of Object.entries(languages)) { + assert.ok(expected[language], `unexpected language: ${language}`); + assert.deepEqual( + navbar.links.map((link) => link.label), + expected[language].labels, + ); + assert.equal(navbar.links.at(-1).href, expected[language].roadmap); + assert.equal(navbar.primary.type, "button"); + assert.equal(navbar.primary.label, "GitHub"); + assert.equal( + navbar.primary.href, + "https://github.com/langbot-app/LangBot", + ); + } +}); + test("custom robots policy is served from the Mintlify project root", async () => { const robots = await readFile(new URL("robots.txt", repoRoot), "utf8"); assert.match(robots, /^User-agent: \*$/m);