export const adminText = { heading: 'Admin', intro: 'Rollen, Vorlagen, Regeln und das Protokoll der Abteilung.', sections: { roles: 'Rollen', templates: 'Vorlagen', policy: 'Änderungsrichtlinie', log: 'Protokoll', system: 'System', } as Record, descriptions: { roles: 'Welche Discord-Rolle welche Freigabestufe und welche Rechte trägt.', templates: 'Aufbau der Fallakten und Dokumente, Bausteine und Fassungen.', policy: 'Ob und wie lange Verlaufseinträge nachträglich geändert werden dürfen.', log: 'Wer was wo getan hat. Vollständig und nicht änderbar.', system: 'Zustand der Dienste, Ladewerte, Nummernkreise.', } as Record, empty: 'Für die Verwaltung fehlen dir die Rechte. Die Abteilungsleitung vergibt sie.', } as const /** * Der Adminbereich: Rollen, Vorlagen, Einstellungen. * * Nach Bereichen getrennt, weil eine **Client-Komponente die ganze Datei ins * Bündel zieht**, in der ihr Text steht. Lägen alle Texte in einer, trüge jede * Ansicht die der ganzen Anwendung mit sich herum — das Budget aus * docs/09-performance-und-ux.md wäre nach wenigen Phasen aufgebraucht. * * Serverkomponenten nehmen weiter `de` aus `lib/i18n/de.ts`: was dorthin * gezogen wird, verlässt den Server nicht. */ export const roleAdminText = { heading: 'Rollenverwaltung', intro: 'Jede Rolle des Discord-Servers steht hier. Zugangsrollen bestimmen die Freigabestufe, Rangrollen die Rechte, und eine Zugehörigkeitsrolle entscheidet, wer sich überhaupt anmelden darf.', empty: 'Noch keine Rollen eingelesen. Der Worker spiegelt sie, sobald er am Discord-Gateway hängt.', role: 'Rolle', category: 'Sorte', clearance: 'Freigabestufe', grantsMembership: 'Darf sich anmelden', permissions: 'Rechte', missingFromGuild: 'Auf dem Server nicht mehr vorhanden', save: 'Zuordnung speichern', invalidInput: 'Eingabe nicht gültig', roleGone: 'Rolle nicht gefunden, sie wurde zwischenzeitlich gelöscht', saving: 'Wird gespeichert', saved: 'Zuordnung gespeichert', confirm: 'Rollen-Mapping ändern? Das wirkt sofort für alle angemeldeten Personen.', categories: { MEMBERSHIP: 'Zugehörigkeit', RANK: 'Rang', CLEARANCE: 'Zugang', UNSORTED: 'Nicht eingeordnet', } as Record, optIn: 'Dieses Recht ist im Auslieferungszustand keiner Rolle zugeordnet. Vergib es bewusst.', preview: { heading: 'Vorschau', intro: 'Was jemand mit dieser Stufe sieht, wenn er keine weiteren Rollen hat.', level: 'Stufe', sees: 'Sieht Akten bis einschliesslich', hidden: 'Höhere Akten sind unsichtbar', lockedOnly: 'Höhere Akten sind sichtbar, aber gesperrt', nobody: 'Keine Rolle führt zu dieser Stufe', viaRoles: 'Erreichbar über', }, } as const export const templateAdminText = { heading: 'Vorlagen', intro: 'Eine Vorlage bestimmt, aus welchen Bausteinen eine Fallart besteht. Speichern legt eine neue Version an; bestehende Akten behalten die Version, mit der sie angelegt wurden.', empty: 'Noch keine Vorlage.', version: (v: number) => `Version ${v}`, fieldsLabel: 'Bausteine als JSON', fieldsHelp: 'Liste von Bausteinen. Eingabefelder: shorttext, longtext, select, multiselect, date, person, number, checklist, table. Feste Bausteine: heading, paragraph, signature, pagebreak.', numberPrefix: 'Präfix des Aktenzeichens', numberPadding: 'Stellen der laufenden Nummer', save: 'Als neue Version speichern', saved: (v: number) => `Gespeichert als Version ${v}`, preview: 'Vorschau', previewIntro: 'So sieht eine neue Akte mit dieser Vorlage aus.', invalid: 'Die Bausteine sind kein gültiges JSON.', fieldsInvalid: 'Die Bausteine sind nicht gültig.', inputField: 'Eingabe', staticBlock: 'Fester Baustein', } as const export const settingsText = { heading: 'Änderungsrichtlinie', intro: 'Regelt, ob und wie lange Verlaufseinträge nachträglich geändert werden dürfen. Gilt für die ganze Abteilung.', policy: 'Richtlinie', graceMinutes: 'Karenzzeit in Minuten', markGrace: 'Auch Änderungen in der Karenzzeit sichtbar markieren', save: 'Richtlinie speichern', saved: 'Richtlinie gespeichert', confirm: 'Änderungsrichtlinie ändern? Das gilt sofort für alle Akten.', policies: { APPEND_ONLY: 'Keine Änderung möglich, nur Korrektureinträge', GRACE_WINDOW: 'Eigene Einträge in der Karenzzeit frei änderbar, danach nur mit Recht', OPEN: 'Jederzeit änderbar, sofern das Recht vorliegt', } as Record, } as const export const vitalsText = { heading: 'Ladewerte', intro: 'Gemessen in den Browsern der Nutzer, letzte sieben Tage. Nur Zahlen und das Routenmuster — wer wann welche Akte geöffnet hat, steht im Zugriffsprotokoll.', empty: 'Noch nichts gemessen.', metric: 'Wert', median: 'Median', p75: '75. Perzentil', count: 'Messungen', target: 'Ziel', worstRoutes: 'Langsamste Routen', route: 'Route', targets: { LCP: 'unter 1,5 s', INP: 'unter 200 ms', CLS: 'unter 0,05', TTFB: 'unter 500 ms', FCP: 'unter 1,0 s', } as Record, } as const