Skip to main content
ChatCLI was designed to be global. The user interface, including menus, hints, and status messages, is fully internationalized.

Supported Languages

LanguageCodeStatus
Portuguese (Brazil)pt-BRComplete
EnglishenComplete (default fallback)

Automatic Detection

The language is automatically detected from system environment variables, in the following priority order:
PriorityVariableExample
1 (highest)CHATCLI_LANGpt-BR
2LANGpt_BR.UTF-8
3LC_ALLpt_BR.UTF-8
If no variable is set or the language is not supported, the interface will be displayed in English by default.

Force a Language

To force a specific language, set CHATCLI_LANG in the .env file or in the environment:
# No .env
CHATCLI_LANG=pt-BR

# Ou via export
export CHATCLI_LANG=en

Coverage

The i18n system holds 1925 translation keys covering all user-facing strings (parity across en.json, en-US.json, and pt-BR.json). Every new user-facing string introduced in code goes through i18n.T() wrapping — a mandatory rule for any command handler, prompt.Suggest autocomplete entry, or user-visible error message.
As of the April 2026 i18n sweep, every slash command (/hooks, /mcp, /worktree, /cost, /channel, /websearch, /config + subsections, /skill, /agent, /memory, /session, /switch, /context, /auth, /plugin) and the CLI autocomplete are 100% routed through i18n.T. Hardcoded PT/EN strings inside fmt.Println or colorize(...) count as a conformance bug.

What Is Translated

  • Interactive menus and prompts
  • Status and progress messages (including history-compactor pipeline phases: trim, summarize, emergency)
  • Command help (/help)
  • Error messages and warnings
  • Agent mode UI (execution plan, actions)
  • Coder mode feedback
  • Pre-flight and payload-recovery messages (413/WAF/EOF) with specific labels per failure type
  • Server and remote connection messages
  • Session, context, and plugin commands
  • K8s Watcher and Operator notifications

Main namespaces

Key prefixScope
welcome.*, help.*Onboarding, welcome, help
agent.*Agent mode, turns, action plan
agent.microcompact.*Progressive compaction of old tool results (no LLM)
agent.preflight.*Proactive history-size vs proxy-cap warnings
agent.recovery.*Context overflow + proxy 413/WAF/EOF recovery
coder.*Coder mode, cards, policy decisions
compact.*/compact command (manual and guided)
compact.status.*Live feedback during each compaction pipeline phase
context.*/context attach, /context show, etc.
cmd.*Legacy CLI command keys (/auth, /connect, /switch, …)
cmd.core.*/session fork and similar under the core command_handler
cfg.*Hierarchical /config — section titles, kv labels, placeholders (cfg.val.*, cfg.kv.*, cfg.sub.*, cfg.panorama.*, cfg.section.*, cfg.msg.*)
hooks.cmd.* / mcp.cmd.* / wt.cmd.* / cost.cmd.* / chan.cmd.*One namespace per manager slash-command (/hooks, /mcp, /worktree, /cost, /channel)
skill.cmd.* / persona.cmd.* / mem.cmd.*skill_handler, persona_handler, memory_command handlers
sw.cmd.* / sess.cmd.* / ctx.cmd.*Fills in cli_llm (handleSwitchCommand), cli_session, context_handler
ws.cmd.*/websearch command (status, list, provider, reset)
complete.*Autocomplete descriptions — complete.root.* for top-level slash commands, complete.{connect,watch,context,session,plugin,agent,skill,switch,auth,generic}.* for sub/flags
llm.*Streaming, provider errors
server.*Server mode and authentication

Special pattern for AI instructions

The ai.response_language key is a meta-instruction written in English across all locales (including pt-BR), which tells the AI to respond in the user’s language. Intentional: LLMs follow English instructions with much higher fidelity, so the prompt that asks for “respond in pt-BR” is itself in English. The response content, of course, comes out in pt-BR. This instruction is appended to the system prompt across all three modes (chat, agent, coder), together with a [ACTIVE MODE: ...] block that tells the AI which mode it’s operating in. See cli/prompts.go and cli/cli_llm.go.
AI responses are in the language you use in the conversation — i18n controls both the ChatCLI interface and the meta-prompt that instructs the AI. The actual content the LLM generates depends on the model following the instruction (which 4.x models do very well).