openclaw - 💡(How to fix) Fix [Feature]: CLI setup wizard has no i18n — all prompts hardcoded English across 11 files

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

The CLI setup wizard (src/wizard/, src/commands/, src/flows/) has no localization support — all user-facing strings are hardcoded in English.

Root Cause

The CLI setup wizard (src/wizard/, src/commands/, src/flows/) has no localization support — all user-facing strings are hardcoded in English.

Code Example

const toEnable = await prompter.multiselect({
  message: "Enable hooks?",
  options: [
    { value: "__skip__", label: "Skip for now" },
    ...
  ],
});

---

message: "Gateway port",
message: "Gateway auth",
message: "Gateway token (blank to generate)",

---

message: "API Base URL",
placeholder: "https://api.example.com/v1",

---

import { t } from "../wizard/i18n/index.js";

const toEnable = await prompter.multiselect({
  message: t("Enable hooks?"),
  options: [
    { value: "__skip__", label: t("Skip for now") },
    ...
  ],
});
RAW_BUFFERClick to expand / collapse

Summary

The CLI setup wizard (src/wizard/, src/commands/, src/flows/) has no localization support — all user-facing strings are hardcoded in English.

Problem to solve

Every prompt in the setup/onboarding wizard is hardcoded English. For example, in src/wizard/setup.finalize.ts:

const toEnable = await prompter.multiselect({
  message: "Enable hooks?",
  options: [
    { value: "__skip__", label: "Skip for now" },
    ...
  ],
});

And in src/wizard/setup.gateway-config.ts:

message: "Gateway port",
message: "Gateway auth",
message: "Gateway token (blank to generate)",

And in src/commands/onboard-custom.ts:

message: "API Base URL",
placeholder: "https://api.example.com/v1",

None of these strings go through any translation function. There is no t() helper, no locale map, no i18n module for the wizard at all.

Proposed solution

Step 1: Create the i18n module

Add src/wizard/i18n/ with:

  • types.ts — type definition for the locale map
  • index.ts — a t(key: string) lookup function
  • locales/zh-CN.ts — Simplified Chinese translations (~138 wizard strings)
  • locales/zh-TW.ts — Traditional Chinese translations (~135 wizard strings)

Step 2: Wrap strings in 11 files

Each file needs:

  1. Add import { t } from "../wizard/i18n/index.js";
  2. Wrap hardcoded strings with t()

After the change, the code above should look like:

import { t } from "../wizard/i18n/index.js";

const toEnable = await prompter.multiselect({
  message: t("Enable hooks?"),
  options: [
    { value: "__skip__", label: t("Skip for now") },
    ...
  ],
});

Files that need changes:

FileStrings to wrap
src/commands/onboard-custom.ts~10 (API Base URL, Model ID, Endpoint ID, etc.)
src/commands/onboard-hooks.ts~2 (Enable hooks?, Skip for now)
src/commands/onboard-remote.ts~12 (Discover gateway, Select gateway, Connection method, Gateway auth, Gateway token, etc.)
src/commands/onboard-skills.ts~5 (Configure skills now?, Install missing skill dependencies, etc.)
src/flows/channel-setup.ts~6 (Configure chat channels now?, Select channel, Finished, etc.)
src/wizard/setup.finalize.ts~5 (Install Gateway service, Hatch options, etc.)
src/wizard/setup.gateway-config.ts~13 (Gateway port, Gateway bind, Gateway auth, Token/Password prompts, etc.)
src/wizard/setup.migration-import.ts~6 (Migration source, Source agent home, etc.)
src/wizard/setup.official-plugins.ts~2 (Install optional plugins, Skip for now)
src/wizard/setup.plugin-config.ts~4 (Configure plugins, Select plugin to configure, etc.)
src/wizard/setup.ts~8 (Setup mode, Config handling, Reset scope, What do you want to set up?, etc.)

Alternatives considered

Adding locale keys to the existing Control UI locale files (ui/src/i18n/locales/) was considered, but the wizard code lives outside the UI package and has its own import paths — a standalone i18n module is cleaner and avoids cross-package dependencies.

Impact

  • Affected: Non-English-speaking users running openclaw setup or openclaw onboard
  • Severity: Medium — does not block setup but forces non-English users to read English prompts throughout a potentially long wizard flow
  • Frequency: Every CLI setup/onboarding session
  • Consequence: Non-English users get an English-only experience during the entire setup process

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING