# German (de) Translation Glossary — ModuleDesk

Status: 1915/1915 strings translated (100%), compiled and visually verified
(desktop + 390px mobile) on 2026-09-04.

## Register

**Sie-form throughout.** ModuleDesk is a paid B2B tool for professional
PrestaShop module sellers and their agents — `du` would read as consumer
software and was never used. Imperatives use the polite/infinitive form
common in German UI copy (e.g. "Speichern", "Öffnen", not "Speichere").

## Kept in English (do not translate)

ModuleDesk, PrestaShop, Addons, Stripe, OpenAI, VirusTotal, BYOK, Docusaurus,
plan names (Free, Premium, MAX), and PrestaShop back-office terms German
merchants already see in English in their own admin (Back Office, BO).
Also: raw provider/API data values like `declined` / `confirm` (module
approval states from the Addons API) and weekday names on the schedules
page — these are hardcoded in templates/JS, not part of the .po catalog,
so they are out of scope in every locale, not just German.

## Term table

| English | German | Notes |
|---|---|---|
| Inbox | Posteingang | |
| Ticket | Ticket | kept, universally understood |
| Reply / Answer | Antwort / antworten | "Antwort schreiben" for the button |
| Draft | Entwurf | |
| Settings | Einstellungen | |
| Team | Team | kept |
| Billing | Abrechnung | "Abrechnung & Plan" on the billing page |
| Guides | Anleitungen | |
| Ratings | Bewertungen | |
| Customers | Kunden | |
| Orders | Bestellungen | |
| Products | Produkte | |
| Dashboard | Dashboard | kept |
| Credentials | Zugangsdaten | uncountable in German — used for both singular and plural (see below) |
| Quick Reply | Schnellantwort | |
| Presale | Presale | kept as one word (matches nav chip usage), not "Vorverkauf" |
| Support (status) | Support | kept — "Support aktiv/abgelaufen" |
| Website check | Website-Prüfung / -Gesundheitscheck | |
| Auto-response | Auto-Antwort | |
| Auto-close | Auto-Schließen | |
| Guide candidate | Anleitungskandidat | |
| Review request | Bewertungsanfrage | |
| Credential vault | Zugangsdaten-Tresor | |
| Smart Priority | Intelligente Priorität | |
| BYOK | BYOK | kept |
| VAT / VAT ID | USt. / USt-IdNr. | |

### "Zugangsdaten" — singular/plural gotcha

German has no natural singular for "a credential" the way English does.
Every msgid that was logically singular ("Credential updated", "credential
added") was still translated as **"Zugangsdaten"** (the uncountable/plural
form), never as an invented singular like "Zugangsdatum" (which means
"access date" and was a mistranslation caught and fixed mid-pass — grep
the catalog for `Zugangsdatum` if this ever regresses).

## Length discipline (the actual job)

German runs 30–40% longer than English. Places worth remembering for future
translators, because they broke on first pass and required a second,
shorter translation:

- **"Best value" pricing badge** → do not use a literal "Bestes
  Preis-Leistungs-Verhältnis" (too long, wraps and overlaps the price
  number in the credit top-up cards on both desktop and mobile). Use
  **"Top-Wert"**.
- **Ticket toolbar buttons** ("Refresh", "Postpone") sit in a tight
  `flex-shrink-0` row next to icon buttons and can push the last button
  (Export) off-screen if translated at full length. Use **"Neu laden"**
  (not "Aktualisieren") for "Refresh", and **"Vertagen"** (not
  "Verschieben") for "Postpone".
- General rule applied throughout: prefer the shortest natural German for
  buttons, pills, tabs, nav items, table headers and badges —
  "Speichern" not "Änderungen speichern" (except where the source string
  itself is literally "Save changes", which is `msgid "Save changes"` and
  was kept as "Änderungen speichern" since it's a distinct string from
  plain "Save").

## Known pre-existing issue (not a translation bug)

`/settings/team` — the member row (email + "Last login" + role badge) can
visually overlap on mobile when a member has role-change controls (select
+ remove button) visible, i.e. for every member except yourself. This
reproduces identically in the already-100%-complete Italian catalog with
short strings ("Ultimo accesso"), so it is a pre-existing flex-layout
issue in `templates/settings/team.html`, not something caused or fixable
by shortening the German strings. Left as-is per the "touch only
translations/de/" rule; flagged for whoever owns app templates.

## Verification performed

- `po-status.py`: de 1915/1915 (100%), fuzzy=0, missing=0
- `i18n-verify.py de`: every page 200/200, `lang=de`, `js=OK`;
  remaining `eng-frags` are genuine customer ticket/rating content, not
  UI strings
- `i18n-shots.py de` and `i18n-shots.py de --mobile`: full visual sweep,
  two rounds (initial pass + fix pass after the two overflow bugs above)
