Add interface translations in six languages #2

Merged
govtech42 merged 2 commits from feat/i18n into main 2026-08-27 14:10:19 +00:00
Owner

Internacionalização da interface, mantendo o arquivo único e sem build.

  • 6 idiomas: English, Português (BR), Español, Italiano, Deutsch, Français
  • seletor com bandeira no topo, antes do seletor de temas, reusando o mesmo dropdown
  • segue o idioma do navegador na primeira visita e lembra a escolha depois
  • datas, resumo do dia e Markdown exportado acompanham o idioma
  • um único objeto I18N (50 chaves × 6); nenhum arquivo de tradução, nenhuma extração

Correções encontradas durante a implementação:

  • paint() e edit() tinham variáveis locais t que sombreavam a função de tradução
  • plural por palavra inteira em vez de sufixo "+s" (evita "2 bloccs" em italiano)
  • resumo em alemão sem preposição, dispensando o dativo plural ("Fokus 1h10 · 2 Blöcke")
  • clockParts() aceita locale explícito, então o self-check não depende do idioma salvo

Verificado: self-check ok nos 6 idiomas, sem chave faltando; troca de idioma em tempo
real na UI, no modal, no relatório e nas datas; preferência persistida entre recargas.

Internacionalização da interface, mantendo o arquivo único e sem build. - 6 idiomas: English, Português (BR), Español, Italiano, Deutsch, Français - seletor com bandeira no topo, antes do seletor de temas, reusando o mesmo dropdown - segue o idioma do navegador na primeira visita e lembra a escolha depois - datas, resumo do dia e Markdown exportado acompanham o idioma - um único objeto I18N (50 chaves × 6); nenhum arquivo de tradução, nenhuma extração Correções encontradas durante a implementação: - `paint()` e `edit()` tinham variáveis locais `t` que sombreavam a função de tradução - plural por palavra inteira em vez de sufixo "+s" (evita "2 bloccs" em italiano) - resumo em alemão sem preposição, dispensando o dativo plural ("Fokus 1h10 · 2 Blöcke") - `clockParts()` aceita locale explícito, então o self-check não depende do idioma salvo Verificado: self-check ok nos 6 idiomas, sem chave faltando; troca de idioma em tempo real na UI, no modal, no relatório e nas datas; preferência persistida entre recargas.
A single I18N dictionary in index.html, no build step and no translation
files. Elements carry data-i18n / data-ph / data-title; strings built in
JavaScript go through t(). Dates and the daily report follow the chosen
language, which defaults to the browser's and is remembered afterwards.

The language picker sits before the theme picker in the top bar, reusing
the same dropdown component with flag icons.

Plural forms are whole words per language rather than an "+s" suffix, so
Italian reads "2 blocchi" instead of "2 bloccs". clockParts() now takes an
explicit locale so its self-check does not depend on the saved language,
and the self-check fails loudly when a key is missing from any language.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Six languages now. The German summary drops the preposition ("Fokus 1h10 ·
2 Blöcke") so the plural does not need a dative form, and French keeps the
space before colons in the report.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
govtech42/pomolog!2
No description provided.