O ChatCLI foi projetado para ser global. A interface do usuário, incluindo menus, dicas e mensagens de status, é totalmente internacionalizada.
Idiomas suportados
| Idioma | Código | Status |
|---|
| Português (Brasil) | pt-BR | Completo |
| Inglês | en | Completo (fallback padrão) |
Detecção automática
O idioma é detectado automaticamente a partir das variáveis de ambiente do sistema, na seguinte ordem de prioridade:
| Prioridade | Variável | Exemplo |
|---|
| 1 (maior) | CHATCLI_LANG | pt-BR |
| 2 | LANG | pt_BR.UTF-8 |
| 3 | LC_ALL | pt_BR.UTF-8 |
Se nenhuma variável estiver definida ou o idioma não for suportado, a interface será exibida em inglês por padrão.
Forçar um idioma
Para forçar um idioma específico, defina CHATCLI_LANG no .env ou no ambiente:
# No .env
CHATCLI_LANG=pt-BR
# Ou via export
export CHATCLI_LANG=en
Cobertura
O sistema de i18n conta com 1925 chaves de tradução cobrindo todas as strings voltadas ao usuário (paridade entre en.json, en-US.json e pt-BR.json). Cada novo user-facing string introduzido no código passa pelo wrapping i18n.T() — regra obrigatória para qualquer handler de comando, autocomplete prompt.Suggest ou mensagem de erro visível ao usuário.
A partir do sweep de i18n de abr/2026, todos os slash commands (/hooks, /mcp, /worktree, /cost, /channel, /websearch, /config + subseções, /skill, /agent, /memory, /session, /switch, /context, /auth, /plugin) e o autocomplete da CLI passam 100% por i18n.T. Strings hardcoded em PT/EN dentro de fmt.Println ou colorize(...) são bug de conformidade.
O que é traduzido
- Menus e prompts interativos
- Mensagens de status e progresso (inclusive as fases do compactor de histórico: trim, summarize, emergency)
- Ajuda dos comandos (
/help)
- Mensagens de erro e avisos
- UI do modo agente (plano de execução, ações)
- Feedback do modo coder
- Mensagens de pre-flight e recuperação de payload (413/WAF/EOF) com rotulagem específica por tipo de falha
- Mensagens do servidor e conexão remota
- Comandos de sessão, contexto e plugins
- Notificações do K8s Watcher e Operator
Namespaces principais
| Prefixo da chave | Escopo |
|---|
welcome.*, help.* | Boas-vindas, ajuda e onboarding |
agent.* | Modo agente, turnos, plano de ação |
agent.microcompact.* | Compactação progressiva de tool results antigos (sem LLM) |
agent.preflight.* | Avisos proativos de tamanho de histórico vs cap de proxy |
agent.recovery.* | Recuperação de context overflow + proxy 413/WAF/EOF |
coder.* | Modo coder, cards e decisões de policy |
compact.* | Comando /compact (manual e guiado) |
compact.status.* | Feedback ao vivo durante cada fase do pipeline de compactação |
context.* | Comandos /context attach, /context show, etc |
cmd.* | Comandos CLI legados (/auth, /connect, /switch, …) |
cmd.core.* | /session fork e afins no command_handler core |
cfg.* | /config hierárquico — títulos de seção, labels kv, placeholders (cfg.val.*, cfg.kv.*, cfg.sub.*, cfg.panorama.*, cfg.section.*, cfg.msg.*) |
hooks.cmd.* / mcp.cmd.* / wt.cmd.* / cost.cmd.* / chan.cmd.* | Um namespace por slash-command gerenciador (/hooks, /mcp, /worktree, /cost, /channel) |
skill.cmd.* / persona.cmd.* / mem.cmd.* | Handlers skill_handler, persona_handler, memory_command |
sw.cmd.* / sess.cmd.* / ctx.cmd.* | Fills de cli_llm (handleSwitchCommand), cli_session, context_handler |
ws.cmd.* | Comando /websearch (status, list, provider, reset) |
complete.* | Descrições de autocomplete — complete.root.* para slash commands top-level, complete.{connect,watch,context,session,plugin,agent,skill,switch,auth,generic}.* para sub/flags |
llm.* | Streaming, erros de provider |
server.* | Modo servidor e autenticação |
Padrão especial para instruções à IA
A chave ai.response_language é um meta-comando escrito em inglês em todos os locales (incluindo pt-BR), que instrui a IA a responder no idioma do usuário. Isso é intencional: modelos LLM seguem instruções em inglês com muito mais fidelidade, então o prompt que pede “responda em pt-BR” é escrito em inglês. O conteúdo da resposta, claro, sai em pt-BR.
Essa instrução é anexada ao system prompt nos três modos (chat, agent, coder), junto com um [ACTIVE MODE: ...] que deixa claro para a IA em qual modo ela está operando. Veja cli/prompts.go e cli/cli_llm.go.
As respostas da IA são no idioma que você usar na conversa — a i18n controla tanto a interface do ChatCLI quanto o meta-prompt que instrui a IA. Mas o conteúdo que o LLM gera depende dele seguir a instrução (o que modelos 4.x fazem muito bem).