Files
OpenMAIC/lib/i18n
Nguyễn Lê TrườngandClaude Opus 5 8db8785506 feat(i18n): add Vietnamese (vi-VN) locale (#1025)
Translate all 1,619 leaf keys with exact parity against en-US.json and
register the locale in supportedLocales.

Rebased onto current main (4ac70cce). Upstream drift resolved here:

- #1023 added 14 edit.agent.* / edit.roster.* keys and #995 added three
  export.video*Cta* keys; all are translated.
- #1060 retired the pbl.* v1 UI, so its 38 keys are dropped from vi-VN.json
  as well. check:i18n-keys compares both directions, so leaving them would
  fail on extras.
- #1068 (fr-FR) registered a locale in the same spot in locales.ts; both
  entries are kept.
- 120 keys landed since the last rebase and are translated in this pass:
  the canvas editor toolbars (edit.line.*, edit.insert.linePresets.*,
  edit.asset.*, edit.latex.*, edit.video.*, edit.audio.*, edit.image.*,
  edit.table.*, edit.contextMenu.*) and classroom folder management
  (classroom.folder*, classroom.deleteFolder*, classroom.moveTo*).
  Vietnamese has no plural inflection, so deleteFolderAndCourses and its
  _other form carry the same text; both keys are present because
  check:i18n-keys requires them.

Two extra files are required and could not be split out: LOCALE_RESOURCES
in lib/video-export-app/cover-config.ts and the expected-labels map in its
test are both typed Record<Locale, ...>. Without these entries tsc --noEmit
fails with TS2741 on '"vi-VN"', exactly as it did for fr-FR in #1068.
Seven added lines outside lib/i18n, no logic change.

Also translates the strings flagged in review that were still English:
the OpenAI/GLM/Qwen voice descriptions, browser-native TTS and ASR labels,
providerUnpdf, voiceNamePlaceholder, lang_auto, the VoxCPM voice-pool
labels, and the protocol/provider names. "(Local)" renders as "(Cục bộ)"
throughout. Left verbatim on purpose: settings.lang_* stay in their native
scripts (matching every existing locale), "Video" is the ordinary
Vietnamese word, and AccessKey ID / AccessKey Secret are the literal field
names in the Alibaba Cloud console.

README language counts updated to 11 and now include French, which #1068
had not backfilled.

pnpm run check:i18n-keys passes across all 11 locale files; prettier
reports the touched files clean; the i18n suite (39 tests) and the
video-export cover-config suite (92 tests) pass; tsc --noEmit reports no
error in any touched file.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 14:24:25 +08:00
..