From f2e97c329e83c81aa3815c4cceb98df5af3100b1 Mon Sep 17 00:00:00 2001 From: TerryM Date: Tue, 26 May 2026 08:09:20 +0800 Subject: [PATCH] fix: map chinese language requests to zh-CN --- src/components/messageStream/hooks/usePostStream.ts | 5 +++-- src/i18n.tsx | 2 +- src/pages/CategoryPage.tsx | 6 ++++-- src/pages/Home.tsx | 4 ++-- src/pages/SearchPage.tsx | 4 ++-- src/pages/admin/AdminResourceForm.tsx | 2 +- src/pages/admin/AdminResources.tsx | 2 +- 7 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/components/messageStream/hooks/usePostStream.ts b/src/components/messageStream/hooks/usePostStream.ts index c25dddb..11e5f15 100644 --- a/src/components/messageStream/hooks/usePostStream.ts +++ b/src/components/messageStream/hooks/usePostStream.ts @@ -1,5 +1,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { getJSON } from "../../../api"; +import { langQuery, type Lang } from "../../../i18n"; import { MOCK_POSTS } from "../../../mocks/mockPosts"; import type { Post, PostListResponse, PostScope } from "../../../types/post"; @@ -12,7 +13,7 @@ export type PostStreamParams = { scope: PostScope; type?: string; language?: string; - lang: string; + lang: Lang; }; export type PostStreamResult = { @@ -65,7 +66,7 @@ function filterMock(params: PostStreamParams): Post[] { function buildRealUrl(params: PostStreamParams, cursor?: string): string { const sp = new URLSearchParams(); - sp.set("lang", params.lang); + sp.set("lang", langQuery(params.lang)); sp.set("limit", String(PAGE_SIZE)); if (params.scope.kind === "category") sp.set("category", params.scope.slug); if (params.type && params.type !== "all") sp.set("type", params.type); diff --git a/src/i18n.tsx b/src/i18n.tsx index 31a70d9..9fb7869 100644 --- a/src/i18n.tsx +++ b/src/i18n.tsx @@ -383,5 +383,5 @@ export function useI18n() { } export function langQuery(lang: Lang) { - return lang; + return lang === "zh" ? "zh-CN" : lang; } diff --git a/src/pages/CategoryPage.tsx b/src/pages/CategoryPage.tsx index 0045c9f..2fc87ab 100644 --- a/src/pages/CategoryPage.tsx +++ b/src/pages/CategoryPage.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from "react"; import { useParams } from "react-router-dom"; import { getJSON, itemsOrEmpty, type Category } from "../api"; import { MessageStream } from "../components/messageStream/MessageStream"; -import { useI18n } from "../i18n"; +import { langQuery, useI18n } from "../i18n"; export function CategoryPage() { const { slug = "" } = useParams(); @@ -11,7 +11,9 @@ export function CategoryPage() { useEffect(() => { if (!slug) return; - getJSON(`/api/categories?lang=${encodeURIComponent(lang)}`) + getJSON( + `/api/categories?lang=${encodeURIComponent(langQuery(lang))}`, + ) .then((cats) => setTitle(itemsOrEmpty(cats).find((x) => x.slug === slug)?.name ?? slug), ) diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 2b3dbfb..5db93c5 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -10,7 +10,7 @@ import { } from "../components/LatestUpdateRow"; import { RecommendedCard } from "../components/RecommendedCard"; import { SectionHeader } from "../components/SectionHeader"; -import { useI18n } from "../i18n"; +import { langQuery, useI18n } from "../i18n"; import { categoryCardLines } from "../utils/categoryDisplay"; export function Home() { @@ -23,7 +23,7 @@ export function Home() { const [canScrollRec, setCanScrollRec] = useState(false); useEffect(() => { - const q = `?lang=${encodeURIComponent(lang)}`; + const q = `?lang=${encodeURIComponent(langQuery(lang))}`; Promise.all([ getJSON(`/api/categories${q}`), getJSON<{ items: Resource[] }>(`/api/resources/recommended${q}&limit=12`), diff --git a/src/pages/SearchPage.tsx b/src/pages/SearchPage.tsx index a462dbe..9e065e3 100644 --- a/src/pages/SearchPage.tsx +++ b/src/pages/SearchPage.tsx @@ -7,7 +7,7 @@ import { postJSON, type Resource, } from "../api"; -import { useI18n } from "../i18n"; +import { langQuery, useI18n } from "../i18n"; import { LANG_OPTIONS, languageLabel } from "../i18nLanguages"; import { typeFilterLabel } from "../resourceTypeLabels"; @@ -80,7 +80,7 @@ export function SearchPage() { const query = useMemo(() => { const p = new URLSearchParams(); - p.set("lang", lang); + p.set("lang", langQuery(lang)); p.set("limit", "50"); if (q) p.set("q", q); if (type && type !== "all") p.set("type", type); diff --git a/src/pages/admin/AdminResourceForm.tsx b/src/pages/admin/AdminResourceForm.tsx index c23bd3c..2993a12 100644 --- a/src/pages/admin/AdminResourceForm.tsx +++ b/src/pages/admin/AdminResourceForm.tsx @@ -54,7 +54,7 @@ export function AdminResourceForm() { const [err, setErr] = useState(null); useEffect(() => { - getJSON("/api/categories?lang=zh") + getJSON("/api/categories?lang=zh-CN") .then(setCats) .catch(() => setCats([])); }, []); diff --git a/src/pages/admin/AdminResources.tsx b/src/pages/admin/AdminResources.tsx index 39ac255..3bc4256 100644 --- a/src/pages/admin/AdminResources.tsx +++ b/src/pages/admin/AdminResources.tsx @@ -32,7 +32,7 @@ export function AdminResources() { const [total, setTotal] = useState(0); useEffect(() => { - getJSON("/api/categories?lang=zh") + getJSON("/api/categories?lang=zh-CN") .then((cats) => { const m: Record = {}; for (const c of cats) m[c.id] = c.name;