Skip to content

Commit 689baa5

Browse files
committed
feat(i18n): add Hindi and Russian docs and Control UI locales
1 parent 4c4396c commit 689baa5

72 files changed

Lines changed: 6801 additions & 113 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/.i18n/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Generated locale trees and live translation memory now live in the publish repo:
1111

1212
- English docs are authored in `openclaw/openclaw`.
1313
- The source docs tree lives under `docs/`.
14-
- The source repo no longer keeps committed generated locale trees such as `docs/zh-CN/**`, `docs/zh-TW/**`, `docs/ja-JP/**`, `docs/es/**`, `docs/pt-BR/**`, `docs/ko/**`, `docs/de/**`, `docs/fr/**`, `docs/ar/**`, `docs/it/**`, `docs/vi/**`, `docs/nl/**`, `docs/fa/**`, `docs/tr/**`, `docs/uk/**`, `docs/id/**`, `docs/pl/**`, or `docs/th/**`.
14+
- The source repo no longer keeps committed generated locale trees such as `docs/zh-CN/**`, `docs/zh-TW/**`, `docs/ja-JP/**`, `docs/es/**`, `docs/pt-BR/**`, `docs/ko/**`, `docs/de/**`, `docs/fr/**`, `docs/hi/**`, `docs/ar/**`, `docs/it/**`, `docs/vi/**`, `docs/nl/**`, `docs/fa/**`, `docs/ru/**`, `docs/tr/**`, `docs/uk/**`, `docs/id/**`, `docs/pl/**`, or `docs/th/**`.
1515

1616
## End-to-end flow
1717

@@ -32,10 +32,10 @@ Generated locale trees and live translation memory now live in the publish repo:
3232

3333
## Locale visibility
3434

35-
- Control UI supports `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `ar`, `it`, `tr`, `uk`, `id`, `pl`, `th`, `vi`, `nl`, and `fa`.
35+
- Control UI supports `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `hi`, `ar`, `it`, `vi`, `nl`, `fa`, `ru`, `tr`, `uk`, `id`, `pl`, and `th`.
3636
- Docs translation workflows generate the same non-English locale set in `openclaw/docs`.
37-
- The Mintlify docs language picker can expose only the locales accepted by Mintlify `navigation.languages`; today that includes Vietnamese (`vi`) and Dutch (`nl`), but not Thai (`th`) or Persian (`fa`).
38-
- Do not treat missing `th` or `fa` entries in generated `docs/docs.json` as a pipeline failure. Verify their generated folders in `openclaw/docs` instead.
37+
- The Mintlify docs language picker can expose only the locales accepted by Mintlify `navigation.languages`; Russian (`ru`) and Hindi (`hi`) are now included in the publish configuration.
38+
- Do not treat locale visibility in generated `docs/docs.json` as proof that translation artifacts exist. Verify each generated locale folder and its translation memory in `openclaw/docs`.
3939

4040
## Files in this folder
4141

docs/.i18n/glossary.hi.json

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
[
2+
{
3+
"source": "ACP",
4+
"target": "ACP"
5+
},
6+
{
7+
"source": "Active Memory",
8+
"target": "Active Memory"
9+
},
10+
{
11+
"source": "ClawHub",
12+
"target": "ClawHub"
13+
},
14+
{
15+
"source": "CLI",
16+
"target": "CLI"
17+
},
18+
{
19+
"source": "Compaction",
20+
"target": "Compaction"
21+
},
22+
{
23+
"source": "Cron",
24+
"target": "Cron"
25+
},
26+
{
27+
"source": "Dreaming",
28+
"target": "Dreaming"
29+
},
30+
{
31+
"source": "Gateway",
32+
"target": "Gateway"
33+
},
34+
{
35+
"source": "Heartbeat",
36+
"target": "Heartbeat"
37+
},
38+
{
39+
"source": "LINE",
40+
"target": "LINE"
41+
},
42+
{
43+
"source": "Mintlify",
44+
"target": "Mintlify"
45+
},
46+
{
47+
"source": "Node",
48+
"target": "Node"
49+
},
50+
{
51+
"source": "OpenClaw",
52+
"target": "OpenClaw"
53+
},
54+
{
55+
"source": "Pi",
56+
"target": "Pi"
57+
},
58+
{
59+
"source": "Plugin",
60+
"target": "Plugin"
61+
},
62+
{
63+
"source": "Skills",
64+
"target": "Skills"
65+
},
66+
{
67+
"source": "Tailscale",
68+
"target": "Tailscale"
69+
},
70+
{
71+
"source": "TaskFlow",
72+
"target": "TaskFlow"
73+
},
74+
{
75+
"source": "TUI",
76+
"target": "TUI"
77+
},
78+
{
79+
"source": "Webhook",
80+
"target": "Webhook"
81+
}
82+
]

docs/.i18n/glossary.ru.json

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
[
2+
{
3+
"source": "ACP",
4+
"target": "ACP"
5+
},
6+
{
7+
"source": "Active Memory",
8+
"target": "Active Memory"
9+
},
10+
{
11+
"source": "ClawHub",
12+
"target": "ClawHub"
13+
},
14+
{
15+
"source": "CLI",
16+
"target": "CLI"
17+
},
18+
{
19+
"source": "Compaction",
20+
"target": "Compaction"
21+
},
22+
{
23+
"source": "Cron",
24+
"target": "Cron"
25+
},
26+
{
27+
"source": "Dreaming",
28+
"target": "Dreaming"
29+
},
30+
{
31+
"source": "Gateway",
32+
"target": "Gateway"
33+
},
34+
{
35+
"source": "Heartbeat",
36+
"target": "Heartbeat"
37+
},
38+
{
39+
"source": "LINE",
40+
"target": "LINE"
41+
},
42+
{
43+
"source": "Mintlify",
44+
"target": "Mintlify"
45+
},
46+
{
47+
"source": "Node",
48+
"target": "Node"
49+
},
50+
{
51+
"source": "OpenClaw",
52+
"target": "OpenClaw"
53+
},
54+
{
55+
"source": "Pi",
56+
"target": "Pi"
57+
},
58+
{
59+
"source": "Plugin",
60+
"target": "Plugin"
61+
},
62+
{
63+
"source": "Skills",
64+
"target": "Skills"
65+
},
66+
{
67+
"source": "Tailscale",
68+
"target": "Tailscale"
69+
},
70+
{
71+
"source": "TaskFlow",
72+
"target": "TaskFlow"
73+
},
74+
{
75+
"source": "TUI",
76+
"target": "TUI"
77+
},
78+
{
79+
"source": "Webhook",
80+
"target": "Webhook"
81+
}
82+
]

scripts/control-ui-i18n-report.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const LOCALE_LABELS: Record<string, string> = {
1818
it: "Italian",
1919
"ja-JP": "Japanese",
2020
ko: "Korean",
21+
hi: "Hindi",
2122
nl: "Dutch",
2223
pl: "Polish",
2324
"pt-BR": "Brazilian Portuguese",
@@ -27,6 +28,7 @@ const LOCALE_LABELS: Record<string, string> = {
2728
vi: "Vietnamese",
2829
"zh-CN": "Simplified Chinese",
2930
"zh-TW": "Traditional Chinese",
31+
ru: "Russian",
3032
};
3133
const REPORT_LOCALES = new Set(Object.keys(LOCALE_LABELS));
3234
const PATH_LABELS: Record<string, string> = {

scripts/control-ui-i18n.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ const LOCALE_ENTRIES: readonly LocaleEntry[] = [
151151
{ locale: "ja-JP", fileName: "ja-JP.ts", exportName: "ja_JP", languageKey: "jaJP" },
152152
{ locale: "ko", fileName: "ko.ts", exportName: "ko", languageKey: "ko" },
153153
{ locale: "fr", fileName: "fr.ts", exportName: "fr", languageKey: "fr" },
154+
{ locale: "hi", fileName: "hi.ts", exportName: "hi", languageKey: "hi" },
154155
{ locale: "ar", fileName: "ar.ts", exportName: "ar", languageKey: "ar" },
155156
{ locale: "it", fileName: "it.ts", exportName: "it", languageKey: "it" },
156157
{ locale: "tr", fileName: "tr.ts", exportName: "tr", languageKey: "tr" },
@@ -161,6 +162,7 @@ const LOCALE_ENTRIES: readonly LocaleEntry[] = [
161162
{ locale: "vi", fileName: "vi.ts", exportName: "vi", languageKey: "vi" },
162163
{ locale: "nl", fileName: "nl.ts", exportName: "nl", languageKey: "nl" },
163164
{ locale: "fa", fileName: "fa.ts", exportName: "fa", languageKey: "fa" },
165+
{ locale: "ru", fileName: "ru.ts", exportName: "ru", languageKey: "ru" },
164166
];
165167

166168
const DEFAULT_GLOSSARY: readonly GlossaryEntry[] = [
@@ -243,6 +245,8 @@ function prettyLanguageLabel(locale: string): string {
243245
return "Korean";
244246
case "fr":
245247
return "French";
248+
case "hi":
249+
return "Hindi";
246250
case "ar":
247251
return "Arabic";
248252
case "it":
@@ -263,6 +267,8 @@ function prettyLanguageLabel(locale: string): string {
263267
return "Dutch";
264268
case "fa":
265269
return "Persian";
270+
case "ru":
271+
return "Russian";
266272
case "de":
267273
return "German";
268274
case "es":

scripts/docs-sync-publish.mjs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ const GENERATED_LOCALES = [
9090
tmFile: "fr.tm.jsonl",
9191
navMode: "clone-en",
9292
},
93+
{
94+
language: "hi",
95+
dir: "hi",
96+
navFile: "hi-navigation.json",
97+
tmFile: "hi.tm.jsonl",
98+
navMode: "clone-en",
99+
},
93100
{
94101
language: "ar",
95102
dir: "ar",
@@ -168,6 +175,13 @@ const GENERATED_LOCALES = [
168175
// once the docs host accepts it.
169176
navigation: false,
170177
},
178+
{
179+
language: "ru",
180+
dir: "ru",
181+
navFile: "ru-navigation.json",
182+
tmFile: "ru.tm.jsonl",
183+
navMode: "clone-en",
184+
},
171185
];
172186

173187
function readOptionValue(argv, index, optionName) {

ui/src/i18n/.i18n/ar.meta.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui/src/i18n/.i18n/ar.tm.jsonl

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui/src/i18n/.i18n/de.meta.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui/src/i18n/.i18n/de.tm.jsonl

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)