Skip to content

Commit 0efd2d6

Browse files
committed
fix(i18n): sync tutorial help translations
1 parent a6ae0e6 commit 0efd2d6

3 files changed

Lines changed: 73 additions & 10 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { describe, expect, it } from "vitest";
2+
import { type Locale, SUPPORTED_LOCALES } from "@/i18n/config";
3+
import enDialogs from "@/i18n/locales/en/dialogs.json";
4+
import esDialogs from "@/i18n/locales/es/dialogs.json";
5+
import frDialogs from "@/i18n/locales/fr/dialogs.json";
6+
import koKRDialogs from "@/i18n/locales/ko-KR/dialogs.json";
7+
import trDialogs from "@/i18n/locales/tr/dialogs.json";
8+
import zhCNDialogs from "@/i18n/locales/zh-CN/dialogs.json";
9+
10+
const tutorialHelpKeys = [
11+
"triggerLabel",
12+
"title",
13+
"description",
14+
"explanationBefore",
15+
"remove",
16+
"explanationMiddle",
17+
"covered",
18+
"explanationAfter",
19+
"visualExample",
20+
"removed",
21+
"kept",
22+
"part1",
23+
"part2",
24+
"part3",
25+
"finalVideo",
26+
"step1Title",
27+
"step1DescriptionBefore",
28+
"step1DescriptionAfter",
29+
"step2Title",
30+
"step2Description",
31+
] as const;
32+
33+
const keysThatMayBeEmpty = new Set<(typeof tutorialHelpKeys)[number]>(["step1DescriptionBefore"]);
34+
35+
const dialogsByLocale = {
36+
en: enDialogs,
37+
"zh-CN": zhCNDialogs,
38+
es: esDialogs,
39+
fr: frDialogs,
40+
tr: trDialogs,
41+
"ko-KR": koKRDialogs,
42+
} satisfies Record<Locale, { tutorial: Record<string, unknown> }>;
43+
44+
describe("TutorialHelp translations", () => {
45+
it("defines every tutorial help key for each supported locale", () => {
46+
for (const locale of SUPPORTED_LOCALES) {
47+
const tutorial = dialogsByLocale[locale].tutorial;
48+
49+
for (const key of tutorialHelpKeys) {
50+
const message = tutorial[key];
51+
const label = `${locale} dialogs.tutorial.${key}`;
52+
expect(message, label).toEqual(expect.any(String));
53+
if (!keysThatMayBeEmpty.has(key)) {
54+
expect((message as string).trim().length, label).toBeGreaterThan(0);
55+
}
56+
}
57+
}
58+
});
59+
});

src/i18n/locales/fr/dialogs.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@
2727
"triggerLabel": "Comment fonctionne la coupe",
2828
"title": "Comment fonctionne la coupe",
2929
"description": "Comprendre comment supprimer les parties indésirables de votre vidéo.",
30-
"explanation": "L'outil Coupe fonctionne en définissant les segments que vous souhaitez",
31-
"explanationRemove": "supprimer",
32-
"explanationCovered": "couvert",
33-
"explanationEnd": "par un segment de coupe rouge sera coupé lors de l'export.",
30+
"explanationBefore": "L'outil Coupe fonctionne en définissant les segments que vous souhaitez",
31+
"remove": "supprimer",
32+
"explanationMiddle": " — tout élément",
33+
"covered": "couvert",
34+
"explanationAfter": "par un segment de coupe rouge sera coupé lors de l'export.",
3435
"visualExample": "Exemple visuel",
3536
"removed": "SUPPRIMÉ",
3637
"kept": "Conservé",
@@ -39,7 +40,8 @@
3940
"part3": "Partie 3",
4041
"finalVideo": "Vidéo finale",
4142
"step1Title": "1. Ajouter une coupe",
42-
"step1Description": "Appuyez sur T ou cliquez sur l'icône ciseaux pour marquer une section à supprimer.",
43+
"step1DescriptionBefore": "Appuyez sur ",
44+
"step1DescriptionAfter": " ou cliquez sur l'icône ciseaux pour marquer une section à supprimer.",
4345
"step2Title": "2. Ajuster",
4446
"step2Description": "Faites glisser les bords de la région rouge pour couvrir exactement ce que vous souhaitez couper."
4547
},

src/i18n/locales/tr/dialogs.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@
2727
"triggerLabel": "Kırpma nasıl çalışır",
2828
"title": "Kırpma Nasıl Çalışır",
2929
"description": "Videonuzun istenmeyen bölümlerini nasıl keseceğinizi anlayın.",
30-
"explanation": "Kırpma aracı, kaldırmak istediğiniz bölümleri tanımlayarak çalışır.",
31-
"explanationRemove": "kaldırmak",
32-
"explanationCovered": "kaplanan",
33-
"explanationEnd": "kırmızı kırpma bölgesi ile işaretlenen kısımlar dışa aktarımda kesilecektir.",
30+
"explanationBefore": "Kırpma aracı, istediğiniz bölümleri",
31+
"remove": "kaldırmak",
32+
"explanationMiddle": " için kullanılır; kırmızı kırpma bölgesiyle",
33+
"covered": "kaplanan",
34+
"explanationAfter": "her şey dışa aktarımda kesilecektir.",
3435
"visualExample": "Görsel Örnek",
3536
"removed": "KALDIRILDI",
3637
"kept": "Korundu",
@@ -39,7 +40,8 @@
3940
"part3": "Bölüm 3",
4041
"finalVideo": "Son Video",
4142
"step1Title": "1. Kırpma Ekle",
42-
"step1Description": "Kaldırılacak bölümü işaretlemek için T tuşuna basın veya makas simgesine tıklayın.",
43+
"step1DescriptionBefore": "Kaldırılacak bölümü işaretlemek için ",
44+
"step1DescriptionAfter": " tuşuna basın veya makas simgesine tıklayın.",
4345
"step2Title": "2. Ayarla",
4446
"step2Description": "Kesmek istediğiniz kısmı tam olarak kaplamak için kırmızı bölgenin kenarlarını sürükleyin."
4547
},

0 commit comments

Comments
 (0)