Troubleshooting: Traducoes mostrando chave bruta

Sintoma

A UI mostra atendimentoChatExtra.callWaba em vez de “Ligar via WABA”

Diagnostico rapido (Python)

import json
with open('/home/deployzdg/zpro.io/frontend/src/i18n/locales/pt.json') as f:
    d = json.load(f)
 
# Testar qualquer key:
ns = 'atendimentoChatExtra'  # mudar aqui
key = 'callWaba'             # mudar aqui
result = d.get(ns, {}).get(key)
print(f"{'OK: ' + result if result else 'FALTANDO em ' + ns}")
 
# Onde essa key existe?
for namespace, content in d.items():
    if isinstance(content, dict) and key in content:
        print(f"Encontrada em: {namespace}.{key} = {content[key]}")

Causa

A key existe em outro namespace (ex: ticketDetail) mas o componente usa um namespace diferente. O componente ChatHeader usa tE = useTranslations("atendimentoChatExtra"). Se a key so esta em ticketDetail, o ChatHeader nao encontra → mostra o nome completo.

Fix

Adicionar a key ANTES do } de fechamento do namespace correto em pt.json e en.json.

Localizar o namespace:

grep -n '"atendimentoChatExtra"' /home/deployzdg/zpro.io/frontend/src/i18n/locales/pt.json

Ir ate perto do fim do namespace e adicionar a key antes do }.

Verificacao completa

import json
REQUIRED = {
  'atendimentoChatExtra': ['callWaba','wabaCallPermissionRequest','wabaCallPermissionSent',
    'callContact','hangupCall','channelDataUnavailable','addTag','tagUpdateError',
    'newOpportunityDialogTitle','newOpportunityDialogDesc','newOpportunityNameLabel',
    'newOpportunityValueLabel','newOpportunityPipelineLabel','newOpportunitySelectPipeline',
    'newOpportunityStageLabel','newOpportunitySelectStage','newOpportunityCreateBtn',
    'defaultOpportunityName'],
  'layoutSidebar.item': ['principal','kanbanNovo','templatesWaba'],
  'layoutSidebar.cat': ['gestaoCrm','gestaoEquipe','redesSociais'],
  'massaLayout': ['tabCriarTemplate','tabTemplate','tabTemplateVariavel','tabTexto','tabTextoVariavel'],
}
 
with open('/home/deployzdg/zpro.io/frontend/src/i18n/locales/pt.json') as f: d = json.load(f)
for path, keys in REQUIRED.items():
    parts = path.split('.')
    obj = d
    for p in parts: obj = obj.get(p, {}) if isinstance(obj, dict) else {}
    for k in keys:
        status = 'OK' if k in obj else 'FALTA'
        print(f"[{status}] {path}.{k}")