#9490: Add Internationalization (i18n) Support
app: web-ui
stale
Cluster:
Multilingual Support Enhancements
Summary
This PR adds comprehensive internationalization support to the OpenClaw Web UI and command system, enabling users to switch between English and Simplified
Chinese.
Changes
Web UI Internationalization
- Add ui/src/i18n/i18n.ts - Core i18n manager with type-safe translation keys
- Add ui/src/i18n/LocaleSelector.ts - Language switcher component
- Implement t() helper function for easy translation access
- Support 490+ translation keys covering all UI surfaces:
- Navigation and page titles
- Channel cards (WhatsApp, Telegram, Discord, Signal, Slack, iMessage, Nostr, Google Chat)
- Sessions, Cron, Skills, Nodes, Config, Debug, Logs pages
- Common UI elements (buttons, status labels, form fields)
Command System Internationalization
- Add src/i18n/commands.ts - Command description translations
- Integrate locale-aware command registry with getChatCommands(locale)
- Support localized command descriptions, argument labels, and menu text
Configuration
- Add ui.locale config option ("en" | "zh-CN")
- Support locale detection via:
- URL parameter (?lang=zh-CN)
- Browser language preference
- Config setting
Supported Languages
- English (en) - Default
- Simplified Chinese (zh-CN)
Test Plan
- Verify Web UI displays correctly in English (default)
- Verify Web UI displays correctly in Chinese (?lang=zh-CN)
- Test locale persistence across page reloads
- Verify command descriptions show in correct language
- Check all channel cards render translated strings
- Validate form labels and button text are translated
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR introduces internationalization across the Web UI and the slash-command registry, adding a typed UI i18n module (`ui/src/i18n/i18n.ts`), a locale selector component, and command translation tables (`src/i18n/commands.ts`). It also wires a new `ui.locale` config value through the config schema and uses it to localize command descriptions and various UI strings (navigation, page titles/subtitles, views, etc.).
<h3>Confidence Score: 3/5</h3>
- Not safe to merge until the command registry compile errors are fixed.
- Review found definite TypeScript compilation issues in `src/auto-reply/commands-registry.ts` (duplicate imports and an unknown `MoltbotConfig` type). The rest of the changes are largely additive i18n plumbing, but these errors will block builds/tests.
- src/auto-reply/commands-registry.ts
<!-- greptile_other_comments_section -->
<sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub>
**Context used:**
- Context from `dashboard` - CLAUDE.md ([source](https://app.greptile.com/review/custom-context?memory=fd949e91-5c3a-4ab5-90a1-cbe184fd6ce8))
- Context from `dashboard` - AGENTS.md ([source](https://app.greptile.com/review/custom-context?memory=0d0c8278-ef8e-4d6c-ab21-f5527e322f13))
<!-- /greptile_comment -->
Most Similar PRs
#10586: feat: Add Chinese (zh-CN) localization support
by Maxsong-0 · 2026-02-06
88.1%
#10657: feat(ui): add i18n support with English, Chinese, and Portuguese
by SalimBinYousuf1 · 2026-02-06
86.2%
#10275: feat: add multiligual support for UI
by fmyuan2000 · 2026-02-06
85.5%
#13622: feat(i18n): add complete multi-language support (EN, TR, FR, DE)
by vaur94 · 2026-02-10
84.0%
#22332: i18n: add Korean (ko-KR) locale support
by arusia88 · 2026-02-21
80.9%
#22165: feat(i18n): translate hardcoded button labels to all 4 locales
by NikolaVujovic1988 · 2026-02-20
80.4%
#8203: fix clawdbot references
by anton-roos · 2026-02-03
77.4%
#20905: i18n: add bulgarian to openclaw
by Lutherwaves · 2026-02-19
77.3%
#7528: feat: Adds slash command suggestions to chat
by JohnnyD1776 · 2026-02-02
77.2%
#6918: docs: add Chinese README
by htazq · 2026-02-02
77.1%