Blog
Feature
14 febbraio 20267 min

i18n: 1993 chiavi, 6 lingue, 9 passaggi di traduzione automatica

TAMSIV è nato in francese. Tutta l'interfaccia, ogni messaggio di errore — tutto hardcoded. Quando ho deciso di supportare 6 lingue (FR, EN, DE, ES, IT, PT), ho contato le stringhe da estrarre: 1993 chiavi di traduzione.

L'estrazione

Primo passo: sostituire ogni stringa francese con una chiamata t('key'). In 35 file. Manualmente. Ho strutturato le chiavi per schermata: feed.empty_state, agenda.filter.participating, profile.settings.language.

Lo script di traduzione automatica

Tradurre 1993 chiavi manualmente in 5 lingue? Impossibile. Ho scritto uno script npm run translate che invia le chiavi francesi a OpenRouter (Gemini 2.5 Flash). Il LLM comprende il contesto applicativo — "Mémo vocal" diventa "Voice memo" e non "Vocal memo".

I 9 passaggi

Il primo passaggio ha tradotto la maggior parte del corpus. Successivamente, ogni nuova funzionalità aggiungeva chiavi: gamification (47 chiavi), agenda (62), gruppi (89). Lo script rileva le chiavi mancanti e ritraduce solo il delta.

Il rilevamento automatico della lingua

Al primo avvio, TAMSIV rileva la lingua del sistema. Se supportata, la utilizza. Altrimenti, ricade sull'inglese. La scelta viene salvata nel database.

Mantenere la sincronizzazione

La parte più difficile: la manutenzione. Ogni modifica in francese deve essere propagata. Se fr.json viene modificato, lo script viene eseguito automaticamente tramite GitHub Actions. 6 lingue mantenute quasi in tempo reale per pochi centesimi per passaggio.