Skip to content

Add German (de) locale + broadcast-not-translated tooltip#59

Merged
AdaInTheLab merged 1 commit intomainfrom
feature/i18n-german
May 9, 2026
Merged

Add German (de) locale + broadcast-not-translated tooltip#59
AdaInTheLab merged 1 commit intomainfrom
feature/i18n-german

Conversation

@AdaInTheLab
Copy link
Copy Markdown
Collaborator

Summary

First of three planned language additions (de, fr, es) — German, polite Sie form throughout. Plus the small UX tooltip that flags the i18n caveat about server-side broadcast strings.

What's in the locale

  • Full mirror of `en.ts` (~250 keys across 30 namespaces) translated to German
  • Polite form (`Sie`) — appropriate register for an admin tool. Action buttons in standard German UI infinitive (Speichern, Bearbeiten, Löschen, ...)
  • Technical proper nouns kept in English: Steam, EAC, telnet, Cloudflare, Discord, IANA, BBGGRR, etc.
  • Game-specific terms use the conventional 7D2D-DE renderings: "Blutmond", "Z-Kills", etc.
  • Browser auto-detect extended — visitors with `de-*` locale land on German automatically

Quality note

This is a competent first pass, not a professional localization. Common UX strings should read naturally; the deeper config-editor field labels are direct translations and would benefit from a domain-fluent native-speaker polish. PRs welcome.

The tooltip

New `layout.broadcastsHint` key, surfaced as a `:title` tooltip on the language switcher (both expanded and collapsed sidebar modes):

"Note: in-game broadcast messages (vote thanks, restart warnings, etc.) are stored as-is and don't auto-translate when the panel language changes."

Catches the most likely "wait, why is the chat warning still in English?" moment for non-English admins. `de.ts` has the German version. The other locales (`ja`, `ko`, `zh-CN`, `zh-TW`) get English placeholders to keep vue-tsc's structural typecheck happy — those will be filled in as part of this round's other locale PRs.

Files

File What
`frontend/src/i18n/locales/de.ts` New
`frontend/src/i18n/index.ts` Register `de`, add to `SUPPORTED_LOCALES`, extend browser-language detect
`frontend/src/i18n/locales/{en,de,ja,ko,zh-CN,zh-TW}.ts` New `layout.broadcastsHint` key
`frontend/src/components/layout/AppLayout.vue` `:title` tooltip on the language switcher

Test plan

  • Pull, build, deploy
  • Hard-refresh panel → language dropdown shows "Deutsch" between English and 简体中文
  • Switch to Deutsch — sidebar nav, dashboard, settings, etc. render in German
  • Hover the language switcher → tooltip shows the broadcasts-not-translated note
  • Set browser language to `de-DE`, clear localStorage, reload → defaults to Deutsch
  • Set browser language to something not in the list → defaults to English

Next up

  • French (fr.ts) — separate PR
  • Spanish (es.ts) — separate PR

🤖 Generated with Claude Code

Adds a full first-pass German translation of the panel UI alongside the
existing English/Chinese/Japanese/Korean locales. Notes:

- Polite Sie form throughout. Action buttons stay in standard German UI
  infinitive form (Speichern, Bearbeiten, Löschen, ...).
- Technical proper nouns kept in English: Steam, EAC, telnet, Cloudflare,
  Discord, IANA, BBGGRR, etc. Game-specific terms use the conventional
  7D2D-DE renderings (Blutmond, Z-Kills, etc.).
- Browser-language detection extended so visitors with de-* locales land
  on German automatically; otherwise they keep getting English.
- Native-speaker review welcome — this is a competent first pass, not a
  professional localization. Common UX strings should read naturally;
  the deeper config-editor field labels are direct translations and may
  benefit from a domain-fluent polish.

Plus a small layout-level tooltip:

- New layout.broadcastsHint key, surfaced as a :title tooltip on the
  language switcher in both expanded and collapsed sidebar modes.
  Explains that in-game broadcast messages (vote thanks, restart
  warnings, etc.) are stored as-is and don't auto-translate when the
  panel language changes — flagged earlier as a likely-confusing UX
  edge for non-English admins.

en.ts gets the canonical English text. de.ts gets the German.
ja/ko/zh-CN/zh-TW get English placeholders so vue-tsc's structural
typecheck passes; native translations are a future polish.

Next up: French and Spanish, same pattern, separate PRs each.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@AdaInTheLab AdaInTheLab merged commit 13c50b0 into main May 9, 2026
2 checks passed
@AdaInTheLab AdaInTheLab deleted the feature/i18n-german branch May 9, 2026 11:38
AdaInTheLab added a commit that referenced this pull request May 9, 2026
Second of three planned language additions (de done in #59, es next).
Same shape as the German PR — full mirror of en.ts translated, polite
vous register, technical proper nouns kept in English, browser-language
detection extended for fr-* visitors.

Game-specific terms use conventional 7D2D-FR renderings (« Lune de
sang », etc.). Action buttons in standard French UI infinitive form
(Enregistrer, Modifier, Supprimer, ...).

Quality-wise this is a competent first pass — common UX surfaces should
read naturally; the deeper config-editor field labels are direct
translations and would benefit from a domain-fluent native-speaker
polish. PRs welcome.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AdaInTheLab added a commit that referenced this pull request May 9, 2026
Third and final language addition in this round (German #59, French
#61 already shipped). Same shape: full mirror of en.ts, polite usted
register, technical proper nouns kept in English, browser-language
detection extended for es-* visitors (es-ES, es-MX, es-AR, etc.).

Game-specific terms use the conventional 7D2D-ES renderings («Luna
de sangre», etc.). Action buttons in standard Spanish UI infinitive
form (Guardar, Editar, Eliminar, ...).

Quality-wise this is a competent first pass — common UX surfaces
should read naturally; the deeper config-editor field labels are
direct translations and would benefit from a domain-fluent native-
speaker polish. PRs welcome.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@AdaInTheLab AdaInTheLab mentioned this pull request May 9, 2026
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant