# Texte und Übersetzungsschlüssel `pnpm run verify:i18n` ist in HiveGrid ein Gate: keine hartkodierten Strings. Dieser Prototyp ist zu 100 % hartkodiertes Deutsch, weil er allein lauffähig sein muss. Damit ist die Übersetzung der größte mechanische Posten am Einbau. Diese drei Dateien nehmen ihn ab. | Datei | Wofür | |---|---| | `i18n-inventar.json` | 185 Einträge: Schlüssel, deutscher Text, Fundstelle im Prototyp | | `i18n-de.json` | dieselben Texte als Baum, nach `apps/web/public/locales/de/translations.json` einfügbar | | diese Datei | Namensschema, Grenzen, und was in HiveGrid schon existiert | --- ## 1. Zuerst prüfen: vieles gibt es schon `app.dashboard.widgets.*` in HiveGrid enthält bereits 17 Widgets. Fünf davon sind genau die Kacheln, die dieser Prototyp gestaltet, drei weitere genau die, die er als „kommt noch" markiert: | Schlüssel in HiveGrid | Deutscher Text dort | Entspricht im Prototyp | |---|---|---| | `receivables` | Offene Posten | Kennzahl „Offene Forderungen", Finanzen-Diagramm | | `orderIntake` | Auftragseingang | Aufträge-Seite, Säulendiagramm | | `daysToPayment` | Zahlungsdauer | Kennzahl in der Statistikzeile | | `winRate` | Auftragsquote | Trichter-Übergangsquote | | `stageDistribution` | Offene Projekte nach Phase | Vertriebstrichter | | `myTasks` | Meine Aufgaben | reservierte Kachel | | `scheduleToday` | Heute | reservierte Kachel „Termine heute" | | `hrRequests` | HR-Anträge | reservierte Kachel | **Für diese acht keine neuen Schlüssel anlegen.** Die Vorschläge im Inventar sind dann zu verwerfen und durch den bestehenden Schlüssel zu ersetzen. Die Anrede passt bereits zusammen: HiveGrid duzt („Termine und Buchungen für deinen Tag"), dieser Prototyp seit dem 31.08. auch. --- ## 2. Namensschema der Vorschläge ``` app... app.analytics.finanzen.umsatzNachGewerk app.dashboard.page.handlungsbedarf app.shared.chart.keineDatenGewaehlten ``` `` ist `analytics`, `dashboard` oder `shared`, `` die Seite oder der Baustein. Die Kurzform ist maschinell aus dem deutschen Text gebildet und **ausdrücklich ein Vorschlag**. Sie ist eindeutig und kollisionsfrei, aber kein Ersatz für einen Blick. Wo HiveGrid schon eine bessere Benennung hat, gilt die. Verteilung: | `app.dashboard.page.*` | 28 | | `app.analytics.auftraege.*` | 26 | | `app.analytics.kunden.*` | 26 | | `app.analytics.finanzen.*` | 24 | | `app.analytics.team.*` | 22 | | `app.analytics.alerts.*` | 13 | | `app.analytics.nav.*` | 12 | | `app.analytics.uebersicht.*` | 8 | | `app.shared.chart.*` | 6 | | `app.analytics.filter.*` | 5 | | `app.analytics.actions.*` | 5 | | `app.analytics.shell.*` | 4 | | `app.shared.table.*` | 3 | | `app.shared.alerts.*` | 1 | | `app.shared.kpi.*` | 1 | | `app.dashboard.widget.*` | 1 | | `app.shared.state.*` | 1 | --- ## 3. Was das Inventar nicht abdeckt **Texte mit Zahlen darin.** Sätze wie „25 überfällige Rechnungen" oder „Ältester seit 99 Tagen fällig" entstehen im Prototyp durch String-Interpolation in `data/calculations.ts`. Sie brauchen in HiveGrid i18next-Platzhalter und teils Pluralformen: ```json "ueberfaelligeRechnungen": "{{count}} überfällige Rechnung", "ueberfaelligeRechnungen_other": "{{count}} überfällige Rechnungen" ``` Im Inventar stehen sie mit der Musterzeichenkette, nicht mit Platzhaltern. Betroffen ist vor allem `app.analytics.alerts.*` (13 Einträge). **Die Bausteingalerie.** `pages/KomponentenSeite.tsx` ist bewusst ausgenommen, sie wird nicht portiert. **Zahlen- und Datumsformate.** Die stecken in `utils/formatters.ts` und sind keine Übersetzung, sondern Formatierung. HiveGrid hat dafür eigene Helfer unter `apps/web/app/locale/format.ts`; die des Prototyps sind zu vergleichen, nicht zu übernehmen. --- ## 4. Wie das Inventar entstanden ist Maschinell, mit `npm run i18n:inventar` (`scripts/i18n-inventar.py`): alle Zeichenketten in den Text tragenden Props (`titel`, `untertitel`, `beschreibung`, `label`, `hinweis`, `zusatz`, `aktion`, …) und alle Textknoten in JSX. Kommentare, die Bausteingalerie und die Daten-Attrappen sind ausgenommen. Der Befehl ist wiederholbar: Ändert sich am Prototyp noch etwas, erzeugt er beide Dateien neu, statt dass sie auseinanderlaufen. Das heißt auch: **Vollständigkeit ist wahrscheinlich, aber nicht bewiesen.** Der verlässliche Nachweis ist `pnpm run verify:i18n` in HiveGrid. Was das Inventar übersieht, findet dieses Gate.