Português na interface que serve em inglês¶
Levantado em 2026-09-01, a pedido da pessoa mantenedora. Ainda não é spec — é a medição, com o achado que muda o que precisa ser feito.
O locale padrão da plataforma é en (config/config.exs). Mesmo assim há
português em três lugares diferentes, e só um deles é o que se costuma
procurar.
1. O menu principal — em toda tela, para todo mundo¶
lib/the_band_web/components/layouts.ex, linhas 120 a 141. Os títulos das seções
são literais em português, ao lado de itens em inglês:
| título (pt) | itens (en) |
|---|---|
Trabalho |
Work |
Vocabulário |
Roles |
Operação |
Syncs, Tools |
Contas |
Accounts, Access scopes |
É a tela mais vista da plataforma, e ela é bilíngue por linha. Quem entra em inglês lê metade.
2. Dezessete frases no catálogo cujo msgid é português e a tradução inglesa está vazia¶
Pior do que parece: quando a tradução falta, o gettext devolve o msgid.
Quem usa a plataforma em inglês recebe estas frases em português, e não há
erro em lugar nenhum — nem no log, nem na tela.
| domínio | quantas | exemplos |
|---|---|---|
sistema |
5 | "Senha definida.", "Escopo %{nivel} concedido.", "Escopo revogado." |
errors |
12 | "A senha precisa de pelo menos 12 caracteres.", "Conta não encontrada.", "Concessão recusada: %{motivo}." |
3. Literais soltos nas telas¶
| arquivo | texto |
|---|---|
live/work_item_live/index.ex:53 |
"Trabalho" |
components/work_charts.ex:284 |
"Trabalho acumulado e o que resta" |
live/people_live/index.ex:268 |
"Nenhuma pessoa" |
live/work_item_live/show.ex:506 |
"Nenhum encontrado" |
E dois híbridos — frase em inglês com palavra portuguesa dentro, que são os mais difíceis de achar por varredura:
"Configure it in AI provider, under Operação." — em
live/profile_run_live/index.exelive/people_live/show.ex
O achado que importa mais que a lista¶
mix mensagens.verificar passa com EXIT=0.
Ele existe desde a feature 047 exatamente para impedir frase de tela em literal —
e as 23 ocorrências acima passaram por ele. Isso quer dizer que a varredura tem
classes que ela não cobre: menu-title, título de página e estado vazio.
É a mesma forma da L81 — fechar o contraexemplo não fecha a classe. O verificador já foi ampliado duas vezes (classe assign na 047/T012, classe função-origem na 047/T015), e continua com classes de fora.
A correção verdadeira não é traduzir as 23 ocorrências. É ampliar o verificador para que a vigésima quarta não nasça. Traduzir sem isso resolve hoje e reabre no próximo PR — e a próxima descoberta será por acaso de novo.
Como isto deve ser feito, quando for puxado¶
Na ordem, e a ordem é o ponto:
- ampliar o verificador para as classes que escaparam, e vê-lo reprovar contra o código de hoje. Verificador novo nasce com teste que NÃO passa por ele (L77) — se ele nascer verde, não está vendo nada;
- traduzir as 17 do catálogo — é preencher
msgstremen, sem tocar em código; - migrar os literais para o catálogo, com o verificador já cobrindo.
Fazer 2 e 3 antes de 1 é o que garante a reincidência.
A decisão, tomada em 2026-09-01¶
O inglês é a língua-fonte do produto. O msgid passa a ser sempre inglês, e
o pt continua existindo como tradução.
"quero tudo em inglês no sistema" — pessoa mantenedora, 2026-09-01
O que isso resolve por construção¶
A ausência de tradução deixa de ser um defeito. Quando falta msgstr, o gettext
devolve o msgid — e com a chave em inglês, a falta cai no idioma padrão, em
vez de mostrar português a quem escolheu inglês. O caso 2 acima deixa de ser
possível, e não por vigilância: por forma.
O que ela custa¶
Dezessete msgid são reescritos, e reescrever chave não é traduzir: a chave
é o identificador. Trocar "Senha definida." por "Password set." quebra o
vínculo com a tradução pt existente, que precisa ser remapeada no mesmo
passo. Feito com mix gettext.extract sem cuidado, as traduções antigas viram
obsoletas e as novas nascem vazias — o defeito ao contrário.
O que ela NÃO decide¶
O pt fica. Ele está hoje inalcançável — não existe troca de idioma em
runtime — e 90% vazio: 18 traduções preenchidas de 173. Manter é decisão
consciente, e preserva a intenção do PR #637, que traduziu a tela de entrada
"para quando o locale pt for servido".
A consequência disso precisa estar dita: enquanto não houver troca em
runtime, o pt é um catálogo que ninguém lê, e catálogos que ninguém lê
apodrecem. Se a troca não vier, a decisão honesta no futuro é removê-lo — e não
mantê-lo por hábito.
O que muda no verificador¶
Com o inglês como fonte, o gate ganha uma regra a mais que ele não tinha: msgid
em português é erro, e não só literal fora do catálogo. É uma verificação
barata — a mesma varredura que hoje procura literais passa a olhar as chaves.