Blog
Feature
14 de fevereiro de 20267 min

i18n: 1993 chaves, 6 idiomas, 9 passes de tradução automática

O TAMSIV nasceu em francês. Toda a interface, cada mensagem de erro — tudo codificado. Quando decidi suportar 6 idiomas (FR, EN, DE, ES, IT, PT), contei as strings a serem extraídas: 1993 chaves de tradução.

A extração

Primeiro passo: substituir cada string francesa por uma chamada t('key'). Em 35 arquivos. Manualmente. Estruturei as chaves por tela: feed.empty_state, agenda.filter.participating, profile.settings.language.

O script de tradução automática

Traduzir 1993 chaves manualmente em 5 idiomas? Impossível. Escrevi um script npm run translate que envia as chaves francesas para o OpenRouter (Gemini 2.5 Flash). O LLM entende o contexto do aplicativo — "Mémo vocal" se torna "Voice memo" e não "Vocal memo".

Os 9 passes

O primeiro passe traduziu a maior parte do corpus. Em seguida, cada nova funcionalidade adicionava chaves: gamificação (47 chaves), agenda (62), grupos (89). O script detecta as chaves ausentes e retraduz apenas o delta.

A detecção automática de idioma

No primeiro lançamento, o TAMSIV detecta o idioma do sistema. Se suportado, ele é usado. Caso contrário, retorna para o inglês. A escolha é salva no banco de dados.

Manter a sincronia

O mais difícil: a manutenção. Cada modificação em francês deve ser propagada. Se fr.json for modificado, o script é executado automaticamente via GitHub Actions. 6 idiomas mantidos em tempo quase real por alguns centavos por passe.