openclaw - 💡(How to fix) Fix [Feature]: Control UI chat panel strings are hardcoded English — welcome, tooltips, placeholder need i18n [1 pull requests]

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 Control UI chat panel has hardcoded English strings for the welcome message, run control tooltips, and message placeholder, while the locale files (en.ts, zh-CN.ts) lack the corresponding chat.welcome.* translation keys.

Root Cause

The Control UI chat panel has hardcoded English strings for the welcome message, run control tooltips, and message placeholder, while the locale files (en.ts, zh-CN.ts) lack the corresponding chat.welcome.* translation keys.

Fix Action

Fixed

Code Example

// Current:
html`<span class="agent-chat__badge">Ready to chat</span>`
html`<p>Type a message below · <kbd>/</kbd> for commands</p>`

// Should be:
html`<span class="agent-chat__badge">${t("chat.welcome.ready")}</span>`
html`<p>${t("chat.welcome.hint")}</p>`

---

// Current:
title="New session"     aria-label="New session"
title="Export"          aria-label="Export chat"
title="Queue"           aria-label="Queue message"
title="Stop"            aria-label="Stop generating"
title="Attach file"     aria-label="Attach file"
title="Start Talk"      aria-label="Start Talk"
title="Stop Talk"       aria-label="Stop Talk"

// Should be:
title=${t("chat.welcome.newSession")}    aria-label=${t("chat.welcome.newSession")}
title=${t("chat.welcome.exportChat")}    aria-label=${t("chat.welcome.exportChat")}
...etc

---

// Current:
placeholder = `Message ${props.assistantName || "agent"} (Enter to send)`
title="Attach file"           aria-label="Attach file"
title="Start Talk"            aria-label="Start Talk"
title="Stop Talk"             aria-label="Stop Talk"

// Should be:
placeholder = t("chat.welcome.messagePlaceholder", { name: props.assistantName || "agent" })
title=${t("chat.welcome.attachFile")}    aria-label=${t("chat.welcome.attachFile")}
...etc

---

ready, hint, attachFile, startTalk, newSession, exportChat,
sendMessage, queueMessage, stopGenerating, stopTalk,
messagePlaceholder, chatSession, chatModel, thinkingLevel
RAW_BUFFERClick to expand / collapse

Summary

The Control UI chat panel has hardcoded English strings for the welcome message, run control tooltips, and message placeholder, while the locale files (en.ts, zh-CN.ts) lack the corresponding chat.welcome.* translation keys.

Problem to solve

Problem 1: Welcome screen (ui/src/ui/chat/chat-welcome.ts)

The welcome text is hardcoded:

// Current:
html`<span class="agent-chat__badge">Ready to chat</span>`
html`<p>Type a message below · <kbd>/</kbd> for commands</p>`

// Should be:
html`<span class="agent-chat__badge">${t("chat.welcome.ready")}</span>`
html`<p>${t("chat.welcome.hint")}</p>`

Problem 2: Run controls (ui/src/ui/chat/run-controls.ts)

Button tooltips are hardcoded English:

// Current:
title="New session"     aria-label="New session"
title="Export"          aria-label="Export chat"
title="Queue"           aria-label="Queue message"
title="Stop"            aria-label="Stop generating"
title="Attach file"     aria-label="Attach file"
title="Start Talk"      aria-label="Start Talk"
title="Stop Talk"       aria-label="Stop Talk"

// Should be:
title=${t("chat.welcome.newSession")}    aria-label=${t("chat.welcome.newSession")}
title=${t("chat.welcome.exportChat")}    aria-label=${t("chat.welcome.exportChat")}
...etc

Problem 3: Message placeholder and talk buttons (ui/src/ui/views/chat.ts)

// Current:
placeholder = `Message ${props.assistantName || "agent"} (Enter to send)`
title="Attach file"           aria-label="Attach file"
title="Start Talk"            aria-label="Start Talk"
title="Stop Talk"             aria-label="Stop Talk"

// Should be:
placeholder = t("chat.welcome.messagePlaceholder", { name: props.assistantName || "agent" })
title=${t("chat.welcome.attachFile")}    aria-label=${t("chat.welcome.attachFile")}
...etc

Note: views/chat.ts already has import { t } — only the strings need wrapping.

Problem 4: Locale files are missing the keys

Both ui/src/i18n/locales/en.ts and ui/src/i18n/locales/zh-CN.ts need a chat.welcome section added with these keys:

ready, hint, attachFile, startTalk, newSession, exportChat,
sendMessage, queueMessage, stopGenerating, stopTalk,
messagePlaceholder, chatSession, chatModel, thinkingLevel

Additionally, zh-CN.ts has 6 places where skills: "Skills" is still English — should be skills: "技能".

Proposed solution

  1. Add chat.welcome.* keys to ui/src/i18n/locales/en.ts (English source strings)
  2. Add chat.welcome.* keys to ui/src/i18n/locales/zh-CN.ts (Chinese translations)
  3. Fix skills: "Skills"skills: "技能" in 6 places in zh-CN.ts
  4. Add import { t } and wrap strings in chat-welcome.ts
  5. Add import { t } and wrap strings in run-controls.ts
  6. Wrap strings (no import needed) in views/chat.ts

Alternatives considered

Hardcoding translations directly in the components would work but goes against the established i18n pattern used elsewhere in the Control UI.

Impact

  • Affected: Chinese-speaking Control UI users
  • Severity: Low — cosmetic, buttons still work
  • Frequency: Every time a user opens the chat panel
  • Consequence: Chat panel UI is English-only even when the rest of the Control UI is in Chinese

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

openclaw - 💡(How to fix) Fix [Feature]: Control UI chat panel strings are hardcoded English — welcome, tooltips, placeholder need i18n [1 pull requests]