diff --git a/docs/glossary.md b/docs/glossary.md
index 8f98927258..5710a2dad5 100644
--- a/docs/glossary.md
+++ b/docs/glossary.md
@@ -5,10 +5,6 @@ description: |
# 用語集
-
-
このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-
-
以下は翻訳時に使用される英日対照の用語集です。
| 英語 | 日本語 | 備考 |
diff --git a/docs/japanese/articles.md b/docs/japanese/articles.md
index c33431232d..c776b933ce 100644
--- a/docs/japanese/articles.md
+++ b/docs/japanese/articles.md
@@ -5,10 +5,6 @@ description: |
# 日本語記事
-
-
このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-
-
Typstに関する日本語の記事は[Zenn](https://zenn.dev/)や[Qiita](https://qiita.com/)に沢山掲載されています。以下のリンクからその一覧が見られます。
- [Typstの記事一覧 | Zenn](https://zenn.dev/topics/typst) - ZennのTypstトピック
diff --git a/docs/japanese/packages.md b/docs/japanese/packages.md
index d888f9ee82..796f6d9f78 100644
--- a/docs/japanese/packages.md
+++ b/docs/japanese/packages.md
@@ -5,9 +5,5 @@ description: |
# 日本語向けパッケージ
-
-
このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-
-
- [rubby](https://typst.app/universe/package/rubby) - ふりがなを振る
- [roremu](https://typst.app/universe/package/roremu) - 日本語のダミーテキストを生成する
diff --git a/docs/japanese/templates.md b/docs/japanese/templates.md
index 48931c4ae7..9623cb7d75 100644
--- a/docs/japanese/templates.md
+++ b/docs/japanese/templates.md
@@ -5,10 +5,6 @@ description: |
# 日本語テンプレート
-
-
このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-
-
## 一般
- [typst-jp-template](https://github.com/satshi/typst-jp-template) - pLaTeXでのjarticle風のとりあえず日本語で書き始めるためのテンプレート
diff --git a/docs/japanese/welcome.md b/docs/japanese/welcome.md
index c7c5cb869c..2915236151 100644
--- a/docs/japanese/welcome.md
+++ b/docs/japanese/welcome.md
@@ -4,10 +4,6 @@ description: Typstの日本語組版のための情報を提供します。
# 日本語組版情報
-
-
このページの内容は公式ドキュメントには含まれておらず、日本語コミュニティによって独自に追加されたものです。
-
-
このページでは、Typstで日本語組版を行うユーザー向けの情報を提供します。有益な情報をお持ちの方は、ぜひIssueやPull Requestを通じて貢献してください。
ここでは日本語に特化した情報を提供します。日本語だけに限らず、多言語を対象とする情報については、[Awesome Typst](https://github.com/qjcg/awesome-typst)などを参照してください。
diff --git a/website/src/components/ui/common/TranslationStatusAlert.tsx b/website/src/components/ui/common/TranslationStatusAlert.tsx
index d0552002b2..3cfca066ed 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 "community":
+ 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..4d6b92a2da 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/": "community", // 除外
+ "/docs/original2/": "community", // 除外
+ "/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/": "community",
+ "/docs/original2/": "community",
+ };
+
+ 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..f7ac4e567f 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"
+ | "community";
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] !== "community",
+ );
- 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 e926a714c2..0eae7682d5 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/": "community",
+ "/docs/japanese/templates/": "community",
+ "/docs/japanese/packages/": "community",
+ "/docs/japanese/articles/": "community",
+ "/docs/glossary/": "community"
}
diff --git a/website/translation-status.schema.json b/website/translation-status.schema.json
index 2bbdb95ee2..d97147349a 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", "community"],
"description": "ページの翻訳状態"
}
}