From 1ff6d61f420933afaf1f0f90a13646f1dedd4c79 Mon Sep 17 00:00:00 2001 From: 3w36zj6 <52315048+3w36zj6@users.noreply.github.com> Date: Tue, 10 Jun 2025 19:04:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E7=BF=BB=E8=A8=B3=E7=8A=B6?= =?UTF-8?q?=E6=85=8B=E3=81=AB=E3=82=AA=E3=83=AA=E3=82=B8=E3=83=8A=E3=83=AB?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=86=E3=83=B3=E3=83=84=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/common/TranslationStatusAlert.tsx | 10 +++++ website/src/utils/translationStatus.test.ts | 40 +++++++++++++++++++ website/src/utils/translationStatus.ts | 13 ++++-- website/translation-status.json | 10 ++--- website/translation-status.schema.json | 2 +- 5 files changed, 65 insertions(+), 10 deletions(-) diff --git a/website/src/components/ui/common/TranslationStatusAlert.tsx b/website/src/components/ui/common/TranslationStatusAlert.tsx index d0552002b2..357b81127c 100644 --- a/website/src/components/ui/common/TranslationStatusAlert.tsx +++ b/website/src/components/ui/common/TranslationStatusAlert.tsx @@ -43,6 +43,16 @@ const getStatusConfig = (status: TranslationStatus): StatusConfig => { message: "このページはまだ翻訳されていません。原文の内容が表示されています。", }; + case "original": + return { + bgColor: "bg-cyan-50", + borderColor: "border-cyan-200", + textColor: "text-cyan-800", + iconColor: "text-cyan-600", + label: "日本語版オリジナル", + message: + "このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティが独自に追加したものです。", + }; } }; diff --git a/website/src/utils/translationStatus.test.ts b/website/src/utils/translationStatus.test.ts index f1a2207d77..f8fc9fefe4 100644 --- a/website/src/utils/translationStatus.test.ts +++ b/website/src/utils/translationStatus.test.ts @@ -151,6 +151,46 @@ describe("translationStatus", () => { expect(result).toBe(0.625); }); + it("originalページは計算から除外される", async () => { + const { calculateTranslationProgressRate } = await import( + "./translationStatus" + ); + + const status = { + $schema: "./translation-status.schema.json", + "/docs/page1/": "translated", // 1.0 + "/docs/page2/": "partially_translated", // 0.5 + "/docs/original1/": "original", // 除外 + "/docs/original2/": "original", // 除外 + "/docs/page3/": "untranslated", // 0.0 + }; + + mockFs.readFileSync.mockReturnValue(JSON.stringify(status)); + + const result = calculateTranslationProgressRate(); + + // (1.0 + 0.5 + 0.0) / 3 = 0.5 + expect(result).toBe(0.5); + }); + + it("全てoriginalページの場合は0を返す", async () => { + const { calculateTranslationProgressRate } = await import( + "./translationStatus" + ); + + const status = { + $schema: "./translation-status.schema.json", + "/docs/original1/": "original", + "/docs/original2/": "original", + }; + + mockFs.readFileSync.mockReturnValue(JSON.stringify(status)); + + const result = calculateTranslationProgressRate(); + + expect(result).toBe(0); + }); + it("ページが存在しない場合は0を返す", async () => { const { calculateTranslationProgressRate } = await import( "./translationStatus" diff --git a/website/src/utils/translationStatus.ts b/website/src/utils/translationStatus.ts index 4671f394c1..b83f298f23 100644 --- a/website/src/utils/translationStatus.ts +++ b/website/src/utils/translationStatus.ts @@ -4,7 +4,8 @@ import path from "node:path"; export type TranslationStatus = | "translated" | "partially_translated" - | "untranslated"; + | "untranslated" + | "original"; export type TranslationStatusMap = { [route: string]: TranslationStatus; @@ -67,19 +68,23 @@ export const registerRoutes = (routes: string[]): void => { /** * 翻訳の進捗率を計算する。 * `translated`は1.0、`partially_translated`は0.5の重みを持つ。 + * `original`は翻訳対象外のため計算から除外される。 * @returns [0.0, 1.0]の範囲で表される翻訳率 */ export const calculateTranslationProgressRate = (): number => { const status = loadTranslationStatus(); const routes = Object.keys(status).filter((key) => key !== "$schema"); + const translationTargetRoutes = routes.filter( + (route) => status[route] !== "original", + ); - if (routes.length === 0) { + if (translationTargetRoutes.length === 0) { return 0; } let translationScore = 0; - for (const route of routes) { + for (const route of translationTargetRoutes) { const currentStatus = status[route]; if (currentStatus === "translated") { translationScore += 1; @@ -88,7 +93,7 @@ export const calculateTranslationProgressRate = (): number => { } } - return translationScore / routes.length; + return translationScore / translationTargetRoutes.length; }; let translationStatusCache: TranslationStatusMap | null = null; diff --git a/website/translation-status.json b/website/translation-status.json index b7e727bc61..e8319b4504 100644 --- a/website/translation-status.json +++ b/website/translation-status.json @@ -187,9 +187,9 @@ "/docs/changelog/0.2.0/": "untranslated", "/docs/changelog/0.1.0/": "untranslated", "/docs/changelog/earlier/": "untranslated", - "/docs/japanese/": "translated", - "/docs/japanese/templates/": "translated", - "/docs/japanese/packages/": "translated", - "/docs/japanese/articles/": "translated", - "/docs/glossary/": "translated" + "/docs/japanese/": "original", + "/docs/japanese/templates/": "original", + "/docs/japanese/packages/": "original", + "/docs/japanese/articles/": "original", + "/docs/glossary/": "original" } diff --git a/website/translation-status.schema.json b/website/translation-status.schema.json index 2bbdb95ee2..ed6e066b75 100644 --- a/website/translation-status.schema.json +++ b/website/translation-status.schema.json @@ -11,7 +11,7 @@ }, "additionalProperties": { "type": "string", - "enum": ["translated", "partially_translated", "untranslated"], + "enum": ["translated", "partially_translated", "untranslated", "original"], "description": "ページの翻訳状態" } } From d8ceb5315025cd1763cd97ec7017f435a021efc3 Mon Sep 17 00:00:00 2001 From: 3w36zj6 <52315048+3w36zj6@users.noreply.github.com> Date: Tue, 10 Jun 2025 19:11:28 +0900 Subject: [PATCH 2/3] =?UTF-8?q?docs:=20=E4=B8=8D=E8=A6=81=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E6=B3=A8=E6=84=8F=E6=9B=B8=E3=81=8D?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/glossary.md | 4 ---- docs/japanese/articles.md | 4 ---- docs/japanese/packages.md | 4 ---- docs/japanese/templates.md | 4 ---- docs/japanese/welcome.md | 4 ---- 5 files changed, 20 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index a4a48f8ed7..b82212e5d5 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -5,10 +5,6 @@ description: | # 用語集 -
このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-