Files
paliad/frontend/src/client/i18n.ts
m 4a5d56d9e6 feat(t-paliad-171): SmartTimeline render shape — shape-timeline.ts + CSS + i18n keys
The vertical-timeline render component for the SmartTimeline (Verlauf
tab redesign). Two-column layout (date / event card), past
chronological → "Heute →" rule → future chronological, status icon +
kind chip per row.

Deep-link is wired via a row-level click handler that skips clicks on
inner <a>/<button>, NOT a ::before overlay — matches the project's
.entity-event whole-card click contract (project CLAUDE.md), keeps
text selection working, and avoids the t-102 overlay regression that
swallowed pointer events on the title text.

i18n: 28 new keys under projects.detail.smarttimeline.* (DE primary,
EN secondary). i18n-keys.ts is regenerated by build.ts on every build,
so the diff there is mechanical.

CSS: ~250 LoC under .smart-timeline-* — vertical layout, status-icon
glyphs per status (✓/…/!/▢/░/⊕), kind-chip pastels, Heute → rule with
borders extending into the spacing.

Design ref: docs/design-smart-timeline-2026-05-08.md §3.1-3.3.
2026-05-08 23:40:49 +02:00

4716 lines
256 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// i18n — Client-side internationalization for paliad
// Supports DE (German) and EN (English)
import { FIRM } from "../branding";
import type { I18nKey } from "../i18n-keys";
export type { I18nKey };
export type Lang = "de" | "en";
const STORAGE_KEY = "paliad-lang";
const LEGACY_STORAGE_KEY = "patholo-lang";
let currentLang: Lang = "de";
const changeCallbacks: Array<() => void> = [];
const translations: Record<Lang, Record<string, string>> = {
de: {
// Navigation
"nav.home": "Home",
"nav.kostenrechner": "Kostenrechner",
"nav.fristenrechner": "Fristenrechner",
"nav.verfahrensablauf": "Verfahrensablauf",
"nav.downloads": "Downloads",
"nav.links": "Links",
"nav.glossar": "Glossar",
"nav.gebuehrentabellen": "Geb\u00fchrentabellen",
"nav.checklisten": "Checklisten",
"nav.gerichte": "Gerichte",
"nav.logout": "Abmelden",
"nav.akten": "Akten",
"nav.projekte": "Projekte",
"nav.fristen": "Fristen",
"nav.termine": "Termine",
"nav.dashboard": "Dashboard",
"nav.agenda": "Agenda",
"nav.inbox": "Genehmigungen",
"nav.paliadin": "Paliadin",
"nav.team": "Team",
"nav.group.uebersicht": "\u00dcbersicht",
"nav.group.ansichten": "Ansichten",
"nav.group.werkzeuge": "Werkzeuge",
"nav.neuigkeiten": "Neuigkeiten",
"nav.soon.tooltip": "Bald verf\u00fcgbar",
// Theme toggle (m/paliad#2). The button cycles auto \u2192 light \u2192 dark
// \u2192 auto. The "toggle.<pref>" keys show the *current* pref next to
// the icon; the "cycle.<pref>" keys describe WHAT the next click will
// do (read by aria-label / tooltip).
"theme.toggle.auto": "Auto",
"theme.toggle.light": "Hell",
"theme.toggle.dark": "Dunkel",
"theme.toggle.cycle.auto": "Auf Hell-Modus wechseln",
"theme.toggle.cycle.light": "Auf Dunkel-Modus wechseln",
"theme.toggle.cycle.dark": "Auf Auto wechseln (System)",
// BottomNav (mobile)
"bottomnav.add": "Anlegen",
"bottomnav.menu": "Menü",
"bottomnav.add.title": "Schnell anlegen",
"bottomnav.add.deadline": "Frist anlegen",
"bottomnav.add.deadline.sub": "Neue Frist mit Datum & Projekt",
"bottomnav.add.appointment": "Termin anlegen",
"bottomnav.add.appointment.sub": "Neuer Termin mit Uhrzeit & Ort",
"bottomnav.add.project": "Projekt anlegen",
"bottomnav.add.project.sub": "Neues Mandat / Verfahren / Patent",
"bottomnav.add.cancel": "Abbrechen",
"bottomnav.badge.deadlines": "{overdue} überfällig + {today} heute fällig",
// Changelog (What's New) — t-paliad-027
"changelog.title": "Neuigkeiten — Paliad",
"changelog.heading": "Neuigkeiten",
"changelog.subtitle": "Was sich in Paliad in letzter Zeit getan hat.",
"changelog.empty": "Noch keine Eintr\u00e4ge.",
"changelog.tag.feature": "Neu",
"changelog.tag.content": "Inhalt",
"changelog.tag.fix": "Fix",
// Footer
"footer.text": "\u00a9 2026 Paliad \u2014 ein Werkzeug von",
// Landing page
"index.title": `Paliad \u2014 Patent Litigation f\u00fcr ${FIRM}`,
"index.hero.accent": `f\u00fcr ${FIRM}`,
"index.hero.sub": `Administration, Knowledge und Tools f\u00fcr das ${FIRM} Patent-Team.`,
"index.guides.title": "Leitf\u00e4den",
"index.guides.desc": "Praxisleitf\u00e4den zu Verfahren vor dem EPA, BPatG und UPC. Schritt-f\u00fcr-Schritt-Anleitungen f\u00fcr typische Workflows.",
"index.templates.title": "Vorlagen",
"index.templates.desc": `Standardisierte Vorlagen f\u00fcr Schrifts\u00e4tze, Korrespondenz und interne Dokumente. ${FIRM} Patents Style Guide.`,
"index.documents.title": "Dokumente",
"index.documents.desc": "Referenzmaterialien, Checklisten und Arbeitshilfen f\u00fcr den Praxisalltag im Patentrecht.",
"index.tools": "Werkzeuge",
"index.cost.title": "Kostenrechner",
"index.cost.desc": "Sch\u00e4tzung der Verfahrenskosten f\u00fcr DE-Gerichte, UPC und EPA-Verfahren. Gerichts- und Anwaltskosten auf einen Blick.",
"index.deadline.title": "Fristenrechner",
"index.deadline.desc": "Berechnung von Verfahrensfristen f\u00fcr UPC-, deutsche und EPA-Verfahren mit Feiertags-Anpassung.",
"index.glossar.title": "Patentglossar",
"index.glossar.desc": "Zweisprachiges DE/EN-Glossar der wichtigsten Begriffe im Patentrecht. Durchsuchbar nach Kategorien.",
"index.downloads": "Downloads",
"index.style.title": `${FIRM} Patents Style`,
"index.style.desc": `Word-Vorlage im ${FIRM} Patents Style. Formatierung, Schriftarten und Makros f\u00fcr standardisierte Schrifts\u00e4tze.`,
"index.offices": "Standorte",
"index.office.munich": "M\u00fcnchen",
"index.office.duesseldorf": "D\u00fcsseldorf",
"index.office.hamburg": "Hamburg",
"index.office.amsterdam": "Amsterdam",
"index.office.london": "London",
"index.office.paris": "Paris",
"index.office.milan": "Mailand",
// Login
"login.title": "Anmelden \u2014 Paliad",
"login.tab.login": "Anmelden",
"login.tab.register": "Registrieren",
"login.email": "E-Mail",
"login.password": "Passwort",
"login.password.placeholder": "Passwort",
"login.submit": "Anmelden",
"login.confirm": "Passwort best\u00e4tigen",
"login.confirm.placeholder": "Passwort wiederholen",
"login.minchars": "Mind. 8 Zeichen",
"login.register.submit": "Registrieren",
"login.hint": `Nur f\u00fcr autorisierte ${FIRM}-E-Mail-Adressen.`,
"login.error.connection": "Verbindungsfehler. Bitte versuchen Sie es erneut.",
"login.error.mismatch": "Passw\u00f6rter stimmen nicht \u00fcberein.",
"login.error.minlength": "Passwort muss mindestens 8 Zeichen lang sein.",
"login.success.created": "Account erstellt. Bitte melden Sie sich an.",
// Kostenrechner
"kosten.title": "Prozesskostenrechner \u2014 Paliad",
"kosten.heading": "Prozesskostenrechner",
"kosten.subtitle": "Sch\u00e4tzung der Verfahrenskosten f\u00fcr Patentverletzungs-, Nichtigkeits- und EPA-Verfahren.",
"kosten.streitwert": "Streitwert",
"kosten.vat": "MwSt",
"kosten.vat.foreign": "0% (Ausland)",
"kosten.de.infringement": "DE Verletzungsverfahren",
"kosten.de.nullity": "DE Nichtigkeitsverfahren",
"kosten.upc": "UPC",
"kosten.epa": "EPA",
"kosten.inst.lg": "LG (Verletzung 1. Instanz)",
"kosten.inst.olg": "OLG (Berufung)",
"kosten.inst.bgh_nzb": "BGH (Nichtzulassungsbeschwerde)",
"kosten.inst.bgh_rev": "BGH (Revision)",
"kosten.inst.bpatg": "BPatG (Nichtigkeitsverfahren)",
"kosten.inst.bgh_nullity": "BGH (Nichtigkeitsberufung)",
"kosten.inst.upc_first": "UPC (1. Instanz)",
"kosten.inst.upc_appeal": "UPC (Berufung)",
"kosten.inst.epa_opposition": "Einspruch",
"kosten.inst.epa_appeal": "Einspruchsbeschwerde",
"kosten.fee.version": "Geb\u00fchrenversion:",
"kosten.fee.schedule": "Geb\u00fchrenordnung:",
"kosten.fee.from2026": "Ab 2026",
"kosten.fee.pre2026": "Vor 2026",
"kosten.fee.current": "Aktuell (2025)",
"kosten.attorneys": "Rechtsanw\u00e4lte:",
"kosten.patent.attorneys": "Patentanw\u00e4lte:",
"kosten.clients": "Mandanten:",
"kosten.oral.hearing": "M\u00fcndl. Verhandlung",
"kosten.revocation": "Widerklage auf Nichtigkeit",
"kosten.total": "Gesamtkosten",
"kosten.empty": "W\u00e4hlen Sie mindestens eine Instanz.",
"kosten.print": "Drucken",
"kosten.court.fees": "Gerichtskosten",
"kosten.attorney.fees": "Anwaltskosten (RA)",
"kosten.patent.attorney.fees": "Patentanwaltskosten (PA)",
"kosten.epa.fees": "EPA-Geb\u00fchren",
"kosten.attorney.label": "Rechtsanwalt",
"kosten.patent.attorney.label": "Patentanwalt",
"kosten.detail.procedure": "Verfahrensgeb.",
"kosten.detail.increase": "Erh\u00f6hung",
"kosten.detail.hearing": "Terminsgeb.",
"kosten.detail.lump": "Pauschale",
"kosten.detail.vat": "MwSt",
"kosten.detail.total": "Gesamt",
"kosten.upc.fixed": "Festgeb\u00fchr",
"kosten.upc.value": "Streitwertabh. Geb\u00fchr",
"kosten.upc.court.total": "Gerichtskosten gesamt",
"kosten.upc.sme": "KMU-Reduzierung",
"kosten.upc.recoverable": "Erstattungsf\u00e4hige Kosten (Obergrenze)",
"kosten.epa.official": "Amtsgeb\u00fchr",
"kosten.epa.note": "Anwaltskosten nach Zeitaufwand (nicht RVG-basiert).",
"kosten.share": "Link kopieren",
"kosten.share.copied": "Link kopiert!",
"kosten.compare": "Vergleichen",
"kosten.compare.exit": "Vergleich beenden",
"kosten.scenario.a": "Szenario A",
"kosten.scenario.b": "Szenario B",
"kosten.scenario.diff": "Differenz",
"kosten.print.title": "Kostenberechnung",
"kosten.print.date": "Datum",
"kosten.print.streitwert": "Streitwert",
"kosten.print.vat": "MwSt-Satz",
"kosten.print.instances": "Instanzen",
"kosten.print.disclaimer": "Dieses Dokument dient ausschlie\u00dflich der internen Verwendung und stellt keine Rechtsberatung dar. Alle Angaben ohne Gew\u00e4hr.",
// Fristenrechner
"deadlines.title": "Fristenrechner \u2014 Paliad",
"deadlines.heading": "Fristenrechner",
"deadlines.subtitle": "Berechnung von Verfahrensfristen f\u00fcr UPC-, deutsche und EPA-Verfahren.",
"deadlines.step1": "Verfahrensart w\u00e4hlen",
"deadlines.step2": "Ausgangsdatum eingeben",
"deadlines.step3": "Ergebnis",
"deadlines.upc": "UPC",
"deadlines.de": "Deutsche Gerichte",
"deadlines.epa": "EPA",
"deadlines.dpma": "DPMA",
"deadlines.dpma_opp": "Einspruch DPMA",
"deadlines.dpma_bpatg_beschwerde": "Beschwerde BPatG (DPMA)",
"deadlines.dpma_bgh_rb": "Rechtsbeschwerde BGH",
"deadlines.trigger.event": "Ausl\u00f6sendes Ereignis:",
"deadlines.trigger.date": "Datum:",
"deadlines.trigger.label": "Ausgangsdatum",
"deadlines.priority.date": "Priorit\u00e4tstag (optional):",
"deadlines.court.label": "Gericht:",
"deadlines.flag.ccr": "Mit Widerklage auf Nichtigkeit",
"deadlines.flag.inf_amend": "Mit Antrag auf Patentänderung (R.30)",
"deadlines.flag.rev_amend": "Mit Antrag auf Patentänderung (R.49.2.a)",
"deadlines.flag.rev_cci": "Mit Verletzungswiderklage (R.49.2.b)",
"deadlines.calculate": "Fristen berechnen",
"deadlines.print": "Drucken",
"deadlines.reset": "\u2190 Neu berechnen",
"deadlines.upc_inf": "Verletzungsverfahren",
"deadlines.upc_rev": "Nichtigkeitsklage",
"deadlines.upc_pi": "Einstw. Ma\u00dfnahmen",
"deadlines.upc_app": "Berufung",
"deadlines.upc_damages": "Schadensbemessung",
"deadlines.upc_discovery": "Bucheinsicht",
"deadlines.upc_cost_appeal": "Berufung Kosten",
"deadlines.upc_app_orders": "Berufung Anordnungen",
"deadlines.de_inf": "Verletzungsklage (LG)",
"deadlines.de_inf_olg": "Berufung OLG",
"deadlines.de_inf_bgh": "Revision/NZB BGH",
"deadlines.de_null": "Nichtigkeitsverfahren",
"deadlines.de_null_bgh": "Berufung BGH (Nichtigk.)",
"deadlines.epa_opp": "Einspruchsverfahren",
"deadlines.epa_app": "Beschwerdeverfahren",
"deadlines.ep_grant": "EP-Erteilungsverfahren",
"deadlines.party.claimant": "Kl\u00e4ger",
"deadlines.party.defendant": "Beklagter",
"deadlines.party.court": "Gericht",
"deadlines.party.both": "Beide",
"deadlines.party.both.label": "beide Seiten",
"deadlines.court.set": "vom Gericht bestimmt",
"deadlines.court.indirect": "unbestimmt",
"deadlines.optional.badge": "auf Antrag",
"deadlines.proceeding.selected": "Verfahren:",
"deadlines.proceeding.reselect": "Anderes Verfahren wählen",
"deadlines.step1.heading": "Schritt 1 — Welche Akte?",
"deadlines.step1.search.placeholder": "Akte suchen…",
"deadlines.step1.search.empty": "Keine passende Akte gefunden.",
"deadlines.step1.divider.new": "oder eine neue Akte",
"deadlines.step1.divider.adhoc": "oder ad-hoc, ohne Akte",
"deadlines.step1.new.cta": "+ Neue Akte anlegen",
"deadlines.step1.adhoc.upc": "Custom UPC-Verfahren",
"deadlines.step1.adhoc.de": "Custom DE-Verfahren",
"deadlines.step1.adhoc.epa": "Custom EPA-Verfahren",
"deadlines.step1.adhoc.dpma": "Custom DPMA-Verfahren",
"deadlines.step1.selected": "Akte:",
"deadlines.step1.reselect": "Andere Akte",
"deadlines.step1.summary.adhoc.suffix": "ohne Akte (Erkundung)",
"deadlines.step2.heading": "Schritt 2 — Was möchten Sie tun?",
"deadlines.step2.file.title": "Etwas einreichen",
"deadlines.step2.file.desc": "Outgoing — eine Frist tritt aus eigener Handlung ein.",
"deadlines.step2.happened.title": "Etwas ist passiert",
"deadlines.step2.happened.desc": "Incoming — ein Ereignis hat eine Frist ausgelöst.",
"deadlines.step2.browse.title": "Verfahrensablauf einsehen",
"deadlines.step2.browse.desc": "Browse / Learn — sehen, was wann passiert. Keine Frist eintragen.",
"deadlines.save.cta.adhoc.hint": "Ad-hoc — kein Projekt, kein Speichern",
"deadlines.step3a.heading": "Was möchten Sie einreichen?",
"deadlines.step3a.back": "zurück zur Auswahl",
"deadlines.step3a.file.title": "Schriftsatz einreichen",
"deadlines.step3a.file.desc": "Verfahrensablauf laden — Frist berechnen und zur Akte hinzufügen.",
"deadlines.step3a.draft.title": "Schriftsatz entwerfen",
"deadlines.step3a.draft.desc": "Vorbereitung — später mit Drafting-Surface verknüpft.",
"deadlines.step3a.enter.title": "Frist manuell erfassen",
"deadlines.step3a.enter.desc": "Direkt eintragen — bereits bekanntes Datum / bekannter Typ.",
"deadlines.step3a.soon": "kommt bald",
"deadlines.date.edit.hint": "Datum bearbeiten — Folgefristen werden neu berechnet",
"deadlines.view.label": "Ansicht:",
"deadlines.view.timeline": "Zeitstrahl",
"deadlines.view.columns": "Spalten",
"deadlines.col.proactive": "Proaktiv",
"deadlines.col.court": "Gericht",
"deadlines.col.reactive": "Reaktiv",
"deadlines.col.both": "Beide Parteien",
// Trigger-event mode (PR-2 \u2014 youpc-parity)
"deadlines.mode.procedure": "Verfahrensablauf",
"deadlines.mode.event": "Was kommt nach\u2026",
"deadlines.event.step1": "Trigger-Ereignis w\u00e4hlen",
"deadlines.event.step1.hint": "Welches Ereignis ist eingetreten? (z.B. Klageerhebung, Entscheidung des EPA, Zustellung einer Verf\u00fcgung)",
"deadlines.event.step2": "Datum des Ereignisses",
"deadlines.event.step3": "Folgefristen",
"deadlines.event.search.label": "Trigger-Ereignis suchen",
"deadlines.event.search.placeholder": "Tippe, um zu suchen\u2026",
"deadlines.event.empty": "Keine passenden Ereignisse",
"deadlines.event.loading": "L\u00e4dt\u2026",
"deadlines.event.error": "Konnte Ereignisse nicht laden",
"deadlines.event.selected": "Gew\u00e4hltes Ereignis:",
"deadlines.event.date": "Eintrittsdatum:",
"deadlines.event.calculate": "Folgefristen berechnen",
"deadlines.event.noresults": "Keine Folgefristen f\u00fcr dieses Ereignis hinterlegt.",
"deadlines.event.results.trigger": "Trigger:",
"deadlines.event.results.date": "Datum:",
"deadlines.event.adjusted": "Verschoben von",
"deadlines.search.label": "Frist suchen",
"deadlines.search.placeholder": "Klageerwiderung, RoP 23, § 82, Wiedereinsetzung…",
"deadlines.search.chips.label": "Schnellzugriff:",
"deadlines.search.empty": "Tippe einen Begriff oder wähle einen Schnellzugriff.",
"deadlines.search.loading": "Sucht…",
"deadlines.search.no_hits": "Keine passenden Fristen gefunden.",
"deadlines.search.aliases": "Auch bekannt als:",
"deadlines.search.pills.heading": "In folgenden Verfahren:",
"deadlines.search.pills.cross_cutting": "Verfahrensübergreifend:",
"deadlines.search.pill.duration": "Dauer:",
"deadlines.search.party.claimant": "Kläger",
"deadlines.search.party.defendant": "Beklagte",
"deadlines.search.party.both": "beide Seiten",
"deadlines.search.party.court": "Gericht",
"deadlines.search.results.count": "{n} Treffer",
"deadlines.search.results.count_one": "1 Treffer",
"deadlines.search.clear": "Suche leeren",
// Fristenrechner — card-click → calc panel → add-to-project (t-paliad-136 Phase B)
"deadlines.card.calc.expand_hint": "Frist berechnen oder zu Akte hinzufügen",
"deadlines.card.calc.close": "schließen",
"deadlines.card.calc.pill_picker.label": "Welcher Kontext?",
"deadlines.card.calc.trigger.label": "Datum des auslösenden Ereignisses",
"deadlines.card.calc.flags.label": "Bedingungen:",
"deadlines.card.calc.flag.with_ccr": "Mit Nichtigkeitswiderklage",
"deadlines.card.calc.flag.with_amend": "Mit Antrag auf Patentänderung",
"deadlines.card.calc.flag.with_cci": "Mit Verletzungswiderklage",
"deadlines.card.calc.result.due": "Frist:",
"deadlines.card.calc.result.original_from": "ab",
"deadlines.card.calc.result.from_trigger": "ab",
"deadlines.card.calc.result.shifted_from": "Verschoben vom",
"deadlines.card.calc.result.shifted_because": "wegen",
"deadlines.card.calc.result.court_set": "Gericht-bestimmt — kein berechenbares Datum.",
"deadlines.card.calc.result.calculating": "Berechne…",
"deadlines.card.calc.result.error": "Berechnung fehlgeschlagen.",
"deadlines.card.calc.add_to_project": "Zu Akte hinzufügen",
"deadlines.card.calc.add_to_project.disabled": "Gerichtsbestimmt — manuell anlegen",
"deadlines.pathway.fork.heading": "Was möchten Sie tun?",
"deadlines.pathway.a.title": "Verfahrensablauf",
"deadlines.pathway.a.desc": "Verfahrenstyp wählen und alle dazugehörigen Fristen auf einer Zeitleiste sehen.",
"deadlines.pathway.b.title": "Frist eintragen aufgrund Ereignis",
"deadlines.pathway.b.desc": "Ein Ereignis ist eingetreten — ich brauche die richtige Frist für meine Akte.",
"deadlines.pathway.shortcut.label": "oder direkt zu einer Frist springen:",
"deadlines.pathway.back": "zurück zur Auswahl",
"deadlines.pathway.b.mode.tree": "Schritt-für-Schritt (Entscheidungsbaum)",
"deadlines.pathway.b.mode.filter": "Filter / Suche",
"deadlines.pathway.b.tree.coming_soon": "Der Entscheidungsbaum ist in Vorbereitung. Wechseln Sie zu „Filter / Suche\" oder kehren Sie zur Auswahl zurück.",
"deadlines.pathway.b.tree.step.back": "Schritt zurück",
"deadlines.pathway.b.tree.empty": "Keine Treffer für diesen Pfad.",
"deadlines.pathway.b.tree.reset": "Neu starten",
"deadlines.pathway.b.tree.start_question": "Was ist passiert?",
"deadlines.inbox.label": "Wo kam es an?",
"deadlines.inbox.cms.title": "UPC — über CMS",
"deadlines.inbox.bea.title": "Nationale Verfahren — über beA",
"deadlines.inbox.posteingang.title": "Nationale Verfahren — Postzustellung",
"deadlines.inbox.posteingang": "Posteingang",
"deadlines.inbox.all": "Alle",
"deadlines.filter.forum.label": "Gericht / System:",
"deadlines.filter.forum.upc_cfi": "UPC CFI",
"deadlines.filter.forum.upc_coa": "UPC CoA",
"deadlines.filter.forum.de_lg": "DE LG",
"deadlines.filter.forum.de_olg": "DE OLG",
"deadlines.filter.forum.de_bgh": "DE BGH",
"deadlines.filter.forum.de_bpatg": "DE BPatG",
"deadlines.filter.forum.epa_grant": "EPA Erteilung",
"deadlines.filter.forum.epa_opp": "EPA Einspruchsabt.",
"deadlines.filter.forum.epa_appeal": "EPA Beschwerdek.",
"deadlines.filter.forum.dpma": "DPMA",
"deadlines.perspective.label": "Ich vertrete:",
"deadlines.perspective.claimant": "Klägerseite (Proactive)",
"deadlines.perspective.defendant": "Beklagtenseite (Reactive)",
"deadlines.perspective.claimant.short": "Kläger",
"deadlines.perspective.defendant.short": "Beklagter",
"deadlines.perspective.both.short": "Beide",
"deadlines.perspective.claimant.title": "Klägerseite — versteckt typische Beklagten-Schriftsätze",
"deadlines.perspective.defendant.title": "Beklagtenseite — versteckt typische Kläger-Schriftsätze",
"deadlines.perspective.appeal_filed_by.label": "Berufung eingelegt durch:",
"deadlines.perspective.predefined_hint": "vorgegeben durch Akte",
"deadlines.event.composite.label": "Zusammengesetzt:",
"deadlines.event.unit.days.one": "Tag",
"deadlines.event.unit.days.many": "Tage",
"deadlines.event.unit.weeks.one": "Woche",
"deadlines.event.unit.weeks.many": "Wochen",
"deadlines.event.unit.months.one": "Monat",
"deadlines.event.unit.months.many": "Monate",
"deadlines.event.unit.working_days.one": "Arbeitstag",
"deadlines.event.unit.working_days.many": "Arbeitstage",
"deadlines.event.timing.before": "vor",
"deadlines.event.timing.after": "nach",
"deadlines.adjusted": "Verschoben",
"deadlines.adjusted.reason": "Wochenende/Feiertag",
"deadlines.adjusted.weekend": "Wochenende",
"deadlines.adjusted.weekend.saturday": "Samstag",
"deadlines.adjusted.weekend.sunday": "Sonntag",
"deadlines.adjusted.holiday": "Feiertag ({name})",
"deadlines.adjusted.vacation": "{name} ({span})",
// Downloads
"downloads.title": "Downloads \u2014 Paliad",
"downloads.heading": "Downloads",
"downloads.subtitle": `Dateien und Vorlagen f\u00fcr das ${FIRM} Patent-Team.`,
"downloads.style.title": `${FIRM} Patents Style`,
"downloads.style.desc": `Word-Vorlage im ${FIRM} Patents Style. Formatierung, Schriftarten und Makros f\u00fcr standardisierte Schrifts\u00e4tze.`,
"downloads.btn": "Herunterladen",
// Links
"links.title": "Links \u2014 Paliad",
"links.heading": "Links",
"links.subtitle": "N\u00fctzliche externe Links f\u00fcr die t\u00e4gliche Patentpraxis.",
"links.filter.all": "Alle",
"links.search.placeholder": "Suchen nach Titel, Beschreibung...",
"links.empty": "Keine Links in dieser Kategorie.",
"links.suggest.btn": "Link vorschlagen",
"links.suggest.title": "Link vorschlagen",
"links.suggest.name": "Titel",
"links.suggest.category": "Kategorie",
"links.suggest.desc": "Beschreibung",
"links.suggest.submit": "Absenden",
"links.suggest.cancel": "Abbrechen",
"links.suggest.success": "Danke! Ihr Vorschlag wird gepr\u00fcft.",
"links.suggest.error": "Fehler beim Speichern. Bitte versuchen Sie es erneut.",
"links.pending": "Vorschl\u00e4ge zur Pr\u00fcfung",
"links.feedback.title": "Feedback",
"links.feedback.type": "Art",
"links.feedback.broken": "Link defekt",
"links.feedback.outdated": "Veraltet",
"links.feedback.update": "Aktualisierung n\u00f6tig",
"links.feedback.other": "Sonstiges",
"links.feedback.message": "Nachricht",
"links.feedback.placeholder": "Was stimmt nicht? (z.B. Link defekt, veraltet...)",
"links.feedback.submit": "Absenden",
"links.feedback.success": "Danke f\u00fcr Ihr Feedback!",
// Glossar
"glossar.title": "Patentglossar \u2014 Paliad",
"glossar.heading": "Patentglossar",
"glossar.subtitle": "Zweisprachiges Glossar der wichtigsten Begriffe im Patentrecht.",
"glossar.search.placeholder": "Suchen...",
"glossar.filter.all": "Alle",
"glossar.filter.litigation": "Streitsachen",
"glossar.filter.prosecution": "Erteilungsverfahren",
"glossar.filter.general": "Allgemein",
"glossar.col.de": "Deutsch",
"glossar.col.en": "English",
"glossar.col.definition": "Definition",
"glossar.empty": "Keine Treffer.",
"glossar.suggest": "Begriff vorschlagen",
"glossar.suggest.title": "Neuen Begriff vorschlagen",
"glossar.suggest.de": "Deutscher Begriff",
"glossar.suggest.en": "Englischer Begriff",
"glossar.suggest.definition": "Definition (optional)",
"glossar.suggest.category": "Kategorie",
"glossar.suggest.cancel": "Abbrechen",
"glossar.suggest.submit": "Absenden",
"glossar.suggest.success": "Vorschlag eingereicht. Vielen Dank!",
"glossar.suggest.error.required": "Bitte DE und EN Begriff eingeben.",
"glossar.suggest.error.generic": "Fehler beim Senden. Bitte versuchen Sie es erneut.",
"glossar.feedback.title": "Korrektur vorschlagen",
"glossar.feedback.tooltip": "Korrektur vorschlagen",
// Geb\u00fchrentabellen
"gebuehren.title": "Geb\u00fchrentabellen \u2014 Paliad",
"gebuehren.heading": "Geb\u00fchrentabellen",
"gebuehren.subtitle": "Interaktive Geb\u00fchrentabellen f\u00fcr GKG, RVG, UPC, EPA und PatKostG.",
"gebuehren.streitwert": "Streitwert (EUR)",
"gebuehren.streitwert.placeholder": "z.B. 1.000.000",
"gebuehren.lookup": "Nachschlagen",
"gebuehren.current": "Aktuell",
"gebuehren.col.streitwert": "Streitwert (EUR)",
"gebuehren.col.fee": "1,0 Geb\u00fchr (EUR)",
"gebuehren.col.maxvalue": "bis Streitwert (EUR)",
"gebuehren.col.courtfee": "Gerichtsgeb\u00fchr (EUR)",
"gebuehren.upc.valuebased": "Streitwertabh\u00e4ngige Geb\u00fchren",
"gebuehren.upc.recoverable": "Erstattungsf\u00e4hige Kosten (Obergrenze)",
"gebuehren.upc.ceiling": "Obergrenze (EUR)",
"gebuehren.epa.proceeding": "Verfahren",
"gebuehren.epa.fee": "Geb\u00fchr (EUR)",
"gebuehren.epa.smefee": "KMU-Geb\u00fchr (EUR)",
"gebuehren.multipliers.title": "Geb\u00fchren-Multiplikatoren",
"gebuehren.multipliers.desc": "Faktoren f\u00fcr die Berechnung von Gerichts- und Anwaltskosten je Instanz.",
"gebuehren.multipliers.instance": "Instanz",
"gebuehren.multipliers.courtfee": "Gericht",
"gebuehren.multipliers.factor": "Faktor",
"gebuehren.multipliers.basis": "Grundlage",
"gebuehren.patkostg.court": "Gerichtskosten (BPatG / BGH)",
"gebuehren.patkostg.dpma": "DPMA-Geb\u00fchren",
"gebuehren.patkostg.annual": "Jahresgeb\u00fchren (Patent)",
"gebuehren.patkostg.year": "Patentjahr",
"gebuehren.patkostg.note": "Hinweis",
"gebuehren.patkostg.item": "Geb\u00fchrentatbestand",
"gebuehren.feedback.btn": "Feedback",
"gebuehren.feedback.title": "Feedback zur Geb\u00fchrentabelle",
"gebuehren.feedback.type": "Art",
"gebuehren.feedback.error": "Fehler gefunden",
"gebuehren.feedback.missing": "Fehlende Daten",
"gebuehren.feedback.suggestion": "Verbesserungsvorschlag",
"gebuehren.feedback.other": "Sonstiges",
"gebuehren.feedback.schedule": "Betrifft",
"gebuehren.feedback.general": "Allgemein",
"gebuehren.feedback.message": "Nachricht",
"gebuehren.feedback.submit": "Absenden",
"gebuehren.feedback.cancel": "Abbrechen",
"gebuehren.feedback.success": "Danke f\u00fcr Ihr Feedback!",
"gebuehren.feedback.error.required": "Bitte geben Sie eine Nachricht ein.",
"gebuehren.feedback.error.generic": "Fehler beim Senden. Bitte versuchen Sie es erneut.",
// Index — Geb\u00fchrentabellen card
"index.gebuehren.title": "Geb\u00fchrentabellen",
"index.gebuehren.desc": "Interaktive Geb\u00fchrentabellen f\u00fcr GKG, RVG, UPC, EPA und PatKostG. Streitwert eingeben, Geb\u00fchr ablesen.",
// Checklisten
"index.checklisten.title": "Checklisten",
"index.checklisten.desc": "Interaktive Checklisten f\u00fcr UPC-, DE- und EPA-Verfahren. Pro Mandat beliebig viele Instanzen.",
"checklisten.title": "Checklisten \u2014 Paliad",
"checklisten.heading": "Checklisten",
"checklisten.subtitle": "Interaktive Checklisten f\u00fcr typische Verfahrensschritte vor UPC, BPatG und EPA. Abhaken, ausdrucken, kein Punkt vergessen.",
"checklisten.tab.templates": "Vorlagen",
"checklisten.tab.instances": "Vorhandene Instanzen",
"checklisten.instances.all.loading": "L\u00e4dt\u2026",
"checklisten.instances.all.empty": "Noch keine Checklisten-Instanzen erfasst. Legen Sie eine \u00fcber den Vorlagen-Tab an.",
"checklisten.instances.all.col.template": "Vorlage",
"checklisten.instances.all.col.name": "Name",
"checklisten.instances.all.col.project": "Projekt",
"checklisten.instances.all.col.progress": "Fortschritt",
"checklisten.instances.all.col.created": "Angelegt",
"checklisten.instances.all.personal": "Pers\u00f6nlich",
"checklisten.filter.all": "Alle",
"checklisten.filter.de": "DE",
"checklisten.empty": "Keine Checklisten in dieser Kategorie.",
"checklisten.back": "Zur\u00fcck zur \u00dcbersicht",
"checklisten.print": "Drucken",
"checklisten.reset": "Zur\u00fccksetzen",
"checklisten.reset.confirm": "Alle H\u00e4kchen dieser Instanz wirklich zur\u00fccksetzen?",
"checklisten.reset.error": "Zur\u00fccksetzen fehlgeschlagen. Bitte erneut versuchen.",
"checklisten.notfound": "Checkliste nicht gefunden.",
"checklisten.newInstance": "Neue Instanz",
"checklisten.newInstance.title": "Neue Checklisten-Instanz",
"checklisten.newInstance.name": "Name",
"checklisten.newInstance.name.hint": "z.B. \u201EM\u00fcller v. Schmidt \u2014 SoC\u201C.",
"checklisten.newInstance.akte": "Akte (optional)",
"checklisten.newInstance.akte.none": "\u2014 keine Akte \u2014",
"checklisten.newInstance.akte.hint": "Wenn verkn\u00fcpft, sehen B\u00fcrokollegen die Instanz.",
"checklisten.newInstance.cancel": "Abbrechen",
"checklisten.newInstance.submit": "Anlegen",
"checklisten.newInstance.error.name": "Bitte geben Sie einen Namen ein.",
"checklisten.newInstance.error.generic": "Fehler beim Anlegen. Bitte erneut versuchen.",
"checklisten.instances.heading": "Instanzen",
"checklisten.instances.sub": "Jede Instanz hat ihren eigenen Fortschritt und kann optional an eine Akte geh\u00e4ngt werden.",
"checklisten.instances.loading": "L\u00e4dt\u2026",
"checklisten.instances.empty": "Noch keine Instanzen. Klicken Sie auf \u201eNeue Instanz\u201c, um zu beginnen.",
"checklisten.instances.col.name": "Name",
"checklisten.instances.col.progress": "Fortschritt",
"checklisten.instances.col.akte": "Akte",
"checklisten.instances.col.created": "Angelegt",
"checklisten.instances.delete.confirm": "Instanz \u201E{name}\u201C wirklich l\u00f6schen?",
"checklisten.instances.delete.error": "L\u00f6schen fehlgeschlagen.",
"checklisten.instance.title": "Checklisten-Instanz \u2014 Paliad",
"checklisten.instance.back": "Zur\u00fcck zur Vorlage",
"checklisten.instance.loading": "L\u00e4dt\u2026",
"checklisten.instance.notfound": "Instanz nicht gefunden oder keine Berechtigung.",
"checklisten.instance.rename": "Umbenennen",
"checklisten.instance.rename.save": "Speichern",
"checklisten.instance.rename.error": "Umbenennen fehlgeschlagen.",
"checklisten.instance.akte.open": "\u00d6ffnen",
"checklisten.disclaimer": "Hinweis: Diese Checklisten dienen als Ged\u00e4chtnisst\u00fctze und ersetzen keine Pr\u00fcfung im Einzelfall. Ma\u00dfgeblich sind die jeweils geltenden Verfahrensregeln.",
"checklisten.feedback.btn": "Feedback",
"checklisten.feedback.title": "Feedback zur Checkliste",
"checklisten.feedback.type": "Art",
"checklisten.feedback.error": "Fehler gefunden",
"checklisten.feedback.missing": "Fehlender Punkt",
"checklisten.feedback.suggestion": "Verbesserungsvorschlag",
"checklisten.feedback.other": "Sonstiges",
"checklisten.feedback.message": "Nachricht",
"checklisten.feedback.submit": "Absenden",
"checklisten.feedback.cancel": "Abbrechen",
"checklisten.feedback.success": "Danke f\u00fcr Ihr Feedback!",
"checklisten.feedback.error.required": "Bitte geben Sie eine Nachricht ein.",
"checklisten.feedback.error.generic": "Fehler beim Senden. Bitte versuchen Sie es erneut.",
// Gerichte
"gerichte.title": "Gerichtsverzeichnis \u2014 Paliad",
"gerichte.heading": "Gerichtsverzeichnis",
"gerichte.subtitle": "Kontaktdaten, Adressen und Einreichungshinweise f\u00fcr Gerichte, Kammern und \u00c4mter im Patentbereich.",
"gerichte.search.placeholder": "Suchen nach Name, Stadt, Typ...",
"gerichte.filter.type": "Typ:",
"gerichte.filter.country": "Land:",
"gerichte.filter.all": "Alle",
"gerichte.filter.de": "Deutschland",
"gerichte.filter.epa": "EPA",
"gerichte.filter.national": "National",
"gerichte.empty": "Keine Treffer.",
"gerichte.field.address": "Adresse",
"gerichte.field.contact": "Kontakt",
"gerichte.field.fax": "Fax",
"gerichte.field.filing": "Einreichung",
"gerichte.field.notes": "Praktische Hinweise",
"gerichte.field.hlContact": `${FIRM}-Ansprechpartner`,
"gerichte.feedback.btn": "Korrektur vorschlagen",
"gerichte.feedback.title": "Korrektur vorschlagen",
"gerichte.feedback.court": "Gericht",
"gerichte.feedback.type": "Art der Anmerkung",
"gerichte.feedback.type.address": "Adresse / Kontaktdaten",
"gerichte.feedback.type.filing": "Einreichungshinweise",
"gerichte.feedback.type.notes": "Praktische Hinweise",
"gerichte.feedback.type.missing": "Fehlendes Gericht",
"gerichte.feedback.type.other": "Sonstiges",
"gerichte.feedback.message": "Nachricht",
"gerichte.feedback.cancel": "Abbrechen",
"gerichte.feedback.submit": "Absenden",
"gerichte.feedback.success": "Vielen Dank \u2014 Ihre R\u00fcckmeldung wurde gespeichert.",
"gerichte.feedback.error.required": "Bitte geben Sie eine Nachricht ein.",
"gerichte.feedback.error.generic": "Fehler beim Senden. Bitte versuchen Sie es erneut.",
// Index \u2014 Gerichte card
"index.gerichte.title": "Gerichtsverzeichnis",
"index.gerichte.desc": "Gerichte, UPC-Kammern und Patent\u00e4mter auf einen Blick \u2014 mit Adressen, Einreichungshinweisen und Sprachen.",
// Akten (matters) \u2014 list
"projects.filter.office": "B\u00fcro",
"projects.filter.office.all": "Alle B\u00fcros",
"projects.filter.status.completed": "Abgeschlossen",
"projects.status.active": "Aktiv",
"projects.status.completed": "Abgeschlossen",
"projects.status.archived": "Archiviert",
"projects.col.ref": "Aktenzeichen",
"projects.col.office": "B\u00fcro",
"projects.onboarding.required": "Bitte schlie\u00dfen Sie das Onboarding ab, bevor Sie Akten anlegen.",
// Akten \u2014 create form
"projects.field.ref": "Aktenzeichen",
"projects.field.ref.placeholder": `z.\u202fB. ${FIRM}-2026-0042`,
"projects.field.office": "Federf\u00fchrendes B\u00fcro",
"projects.field.courtRef": "Gerichtsaktenzeichen (optional)",
"projects.field.akteType": "Verfahrensart (optional)",
"projects.field.firmWide": "Firmenweit sichtbar",
"projects.field.firmWide.hint": "Wenn aktiviert, sehen alle Lawyer diese Akte. Nur f\u00fcr Partner/Admin.",
"projects.field.collaborators": "Weitere Bearbeiter (optional)",
"projects.field.collaborators.placeholder": "Name oder E-Mail tippen\u2026",
"projects.field.collaborators.hint": "Personen, die auch Zugriff erhalten sollen (auch b\u00fcro\u00fcbergreifend).",
"projects.error.required": "Titel und Aktenzeichen sind Pflichtfelder.",
"projects.error.generic": "Fehler beim Anlegen. Bitte erneut versuchen.",
"projects.error.forbidden": "Nicht erlaubt. Pr\u00fcfen Sie Rolle und B\u00fcro.",
// Akten \u2014 detail
"projects.detail.firmwide.on": "Firmenweit sichtbar",
"projects.detail.firmwide.off": "B\u00fcro-intern",
"projects.detail.checklisten.hint": "Instanzen werden auf der Vorlagen-Seite unter \"Checklisten\" angelegt.",
"projects.detail.verlauf.loadingMore": "L\u00e4dt \u2026",
"projects.detail.parteien.remove": "Entfernen",
"projects.detail.parteien.remove.confirm": "Diese Partei wirklich entfernen?",
// Phase E — Fristen (persistent deadlines)
"deadlines.list.title": "Fristen \u2014 Paliad",
"deadlines.list.heading": "Fristen",
"deadlines.list.subtitle": "Persistente Fristen f\u00fcr Ihre Akten. \u00dcberf\u00e4llig, heute, diese Woche, n\u00e4chste Woche \u2014 auf einen Blick.",
"deadlines.list.new": "Neue Frist",
"deadlines.list.calendar": "Kalenderansicht",
"deadlines.summary.overdue": "\u00dcberf\u00e4llig",
"deadlines.summary.today": "Heute",
"deadlines.summary.thisweek": "Diese Woche",
"deadlines.summary.nextweek": "N\u00e4chste Woche",
"deadlines.summary.completed": "Erledigt",
"deadlines.summary.later": "Später",
"deadlines.filter.status": "Status",
"deadlines.filter.akte": "Projekt",
"deadlines.filter.all": "Alle (offen & erledigt)",
"deadlines.filter.pending": "Alle offenen",
"deadlines.filter.overdue": "\u00dcberf\u00e4llig",
"deadlines.filter.today": "Heute",
"deadlines.filter.thisweek": "Diese Woche",
"deadlines.filter.nextweek": "N\u00e4chste Woche",
"deadlines.filter.completed": "Erledigt",
"deadlines.filter.later": "Später",
"deadlines.filter.akte.all": "Alle Projekte",
"deadlines.col.due": "F\u00e4llig",
"deadlines.col.title": "Titel",
"deadlines.col.akte": "Projekt",
"deadlines.col.rule": "Regel",
"deadlines.col.status": "Status",
"deadlines.empty.title": "Keine Fristen vorhanden",
"deadlines.empty.hint": "Sobald Fristen angelegt oder aus dem Fristenrechner \u00fcbernommen werden, erscheinen sie hier.",
"deadlines.empty.filtered": "Keine Fristen mit diesen Filtern.",
"deadlines.unavailable": "Fristenverwaltung zurzeit nicht verf\u00fcgbar \u2014 bitte Administrator kontaktieren.",
"deadlines.status.pending": "Offen",
"deadlines.status.completed": "Erledigt",
"deadlines.status.cancelled": "Abgebrochen",
"deadlines.status.waived": "Verzichtet",
"deadlines.urgency.overdue": "\u00dcberf\u00e4llig",
"deadlines.urgency.today": "Heute",
"deadlines.urgency.soon": "In K\u00fcrze",
"deadlines.urgency.later": "Sp\u00e4ter",
"deadlines.complete.action": "Erledigen",
// t-paliad-139 \u2014 subtree aggregation toggle and attribution chip
"aggregation.toggle.subtree": "Inkl. Unterprojekte",
"aggregation.toggle.direct_only": "Nur direkt",
"aggregation.attribution.on": "auf",
// t-paliad-139 Phase 2 \u2014 Team-tab subsections + Partner Units management
"projects.team.section.from_descendants": "Aus Unterprojekten",
"projects.team.section.from_descendants.hint": "Personen, die direkt auf einem Unterprojekt eingetragen sind und nicht auf diesem oder einem \u00dcbergeordneten.",
"projects.team.section.derived": "Abgeleitet (Partner Unit)",
"projects.team.section.derived.hint": "Mitglieder, die \u00fcber eine zugeordnete Partner Unit auf diesem Projekt aktiv sind.",
"projects.team.section.units": "Partner Units",
"projects.team.section.units.hint": "Partner Units, die auf diesem Projekt eingebunden sind. Mitglieder mit passenden Unit-Rollen werden automatisch abgeleitet.",
"projects.team.derived.from": "\u00fcber",
"projects.team.derived.visibility": "Sicht",
"projects.team.derived.authority": "Sicht & 4-Augen",
"projects.team.derived.authority.hint": "Stimmrecht: Abgeleitete Mitglieder z\u00e4hlen als Approver.",
"projects.team.units.attach": "Partner Unit zuordnen",
"projects.team.units.detach": "Entfernen",
"projects.team.units.choose": "Bitte Unit w\u00e4hlen\u2026",
"projects.team.units.select": "Unit",
"projects.team.units.derive_roles": "Welche Unit-Rollen ableiten?",
"projects.team.units.grants_authority": "Stimmrecht abgeben (4-Augen)",
"projects.team.units.col.name": "Unit",
"projects.team.units.col.derive_roles": "Abgeleitete Rollen",
"projects.team.units.col.authority": "Authority",
"projects.team.units.members": "Mitglieder",
"projects.team.units.empty": "Keine Partner Units zugeordnet.",
"projects.team.units.confirm_detach": "Partner Unit entfernen?",
"unit_role.lead": "Lead",
"unit_role.attorney": "Attorney",
"unit_role.senior_pa": "Senior PA",
"unit_role.pa": "PA",
"unit_role.paralegal": "Paralegal",
"deadlines.neu.title": "Neue Frist \u2014 Paliad",
"deadlines.neu.heading": "Neue Frist anlegen",
"deadlines.neu.subtitle": "Eine persistente Frist an einer Akte. Sichtbar f\u00fcr alle Personen, die die Akte sehen k\u00f6nnen.",
"deadlines.neu.back": "\u2190 Zur\u00fcck zur \u00dcbersicht",
"deadlines.neu.cancel": "Abbrechen",
"deadlines.neu.submit": "Frist anlegen",
"deadlines.field.akte": "Akte",
"deadlines.field.akte.choose": "Bitte w\u00e4hlen\u2026",
"deadlines.field.akte.empty": "Sie haben noch keine Akte. Bitte zuerst eine Akte anlegen.",
"deadlines.field.akte.empty.link": "Akte anlegen",
"deadlines.field.title": "Titel",
"deadlines.field.title.placeholder": "z.\u202fB. Klageerwiderung einreichen",
"deadlines.field.due": "F\u00e4lligkeitsdatum",
"deadlines.field.rule": "Regel (optional)",
"deadlines.field.rule.none": "Keine Regel",
"deadlines.field.rule.autofill": "Typ vorgegeben durch Regel — entfernen, um zu überschreiben.",
"deadlines.field.rule.autofill_inline": " (vorgegeben durch Regel)",
"deadlines.field.rule.mismatch": "Hinweis: Typ widerspricht Regel — Sie haben den Typ überschrieben.",
"deadlines.field.rule.override": "Anderen Typ wählen",
"deadlines.field.notes": "Notizen (optional)",
"deadlines.field.notes.placeholder": "Hinweise, Verweise, n\u00e4chste Schritte\u2026",
"deadlines.error.required": "Akte, Titel und F\u00e4lligkeitsdatum sind Pflichtfelder.",
"deadlines.error.generic": "Fehler beim Anlegen. Bitte erneut versuchen.",
"deadlines.detail.title": "Frist \u2014 Paliad",
"deadlines.detail.back": "\u2190 Zur\u00fcck zur Fristen\u00fcbersicht",
"deadlines.detail.loading": "L\u00e4dt\u2026",
"deadlines.detail.notfound": "Frist nicht gefunden oder keine Berechtigung.",
"deadlines.detail.complete": "Als erledigt markieren",
"deadlines.detail.completed.already": "Bereits erledigt",
"deadlines.detail.reopen": "Wieder öffnen",
"deadlines.action.reopen": "Wieder öffnen",
"deadlines.detail.edit": "Bearbeiten",
"deadlines.detail.save": "Speichern",
"deadlines.detail.cancel": "Abbrechen",
"deadlines.detail.delete": "Frist l\u00f6schen",
"deadlines.detail.delete.confirm.title": "Frist wirklich l\u00f6schen?",
"deadlines.detail.delete.confirm.body": "Die Frist wird endg\u00fcltig entfernt. Der Eintrag im Verlauf der Akte bleibt erhalten.",
"deadlines.detail.delete.confirm.cancel": "Abbrechen",
"deadlines.detail.delete.confirm.ok": "L\u00f6schen",
"deadlines.detail.due": "F\u00e4lligkeitsdatum",
"deadlines.detail.rule": "Regel",
"deadlines.detail.source": "Quelle",
"deadlines.detail.notes": "Notizen",
"deadlines.detail.created": "Angelegt",
"deadlines.detail.completed": "Erledigt am",
"deadlines.source.manual": "Manuell",
"deadlines.source.fristenrechner": "Fristenrechner",
"deadlines.source.caldav": "CalDAV",
"deadlines.source.imported": "Import",
"deadlines.kalender.title": "Fristenkalender \u2014 Paliad",
"deadlines.kalender.heading": "Fristenkalender",
"deadlines.kalender.subtitle": "Monats\u00fcbersicht aller Fristen Ihrer Akten.",
"deadlines.kalender.list": "Listenansicht",
"deadlines.kalender.today": "Heute",
"deadlines.kalender.empty": "Keine Fristen im ausgew\u00e4hlten Zeitraum.",
"cal.day.mon": "Mo",
"cal.day.tue": "Di",
"cal.day.wed": "Mi",
"cal.day.thu": "Do",
"cal.day.fri": "Fr",
"cal.day.sat": "Sa",
"cal.day.sun": "So",
"cal.month.0": "Januar",
"cal.month.1": "Februar",
"cal.month.2": "M\u00e4rz",
"cal.month.3": "April",
"cal.month.4": "Mai",
"cal.month.5": "Juni",
"cal.month.6": "Juli",
"cal.month.7": "August",
"cal.month.8": "September",
"cal.month.9": "Oktober",
"cal.month.10": "November",
"cal.month.11": "Dezember",
// Akten detail — Fristen tab (Phase E)
// Fristenrechner — save to Akte (Phase E)
"deadlines.save.cta": "Als Frist(en) speichern",
"deadlines.save.modal.title": "Fristen \u00fcbernehmen",
"deadlines.save.modal.akte": "Akte",
"deadlines.save.modal.akte.choose": "Bitte w\u00e4hlen\u2026",
"deadlines.save.modal.choose": "Welche Fristen \u00fcbernommen werden sollen:",
"deadlines.save.modal.cancel": "Abbrechen",
"deadlines.save.modal.submit": "\u00dcbernehmen",
"deadlines.save.modal.no_akten": "Sie haben noch keine Akte. Bitte zuerst eine Akte anlegen.",
"deadlines.save.modal.no_akten.link": "Akte anlegen",
"deadlines.save.success": "Fristen \u00fcbernommen.",
"deadlines.save.success.link": "Zu den Fristen",
"deadlines.save.error": "\u00dcbernahme fehlgeschlagen.",
"deadlines.save.skip_court_set": "Gerichtsbestimmte Termine ohne Datum werden \u00fcbersprungen.",
// Office labels (shared)
"office.munich": "M\u00fcnchen",
"office.duesseldorf": "D\u00fcsseldorf",
"office.hamburg": "Hamburg",
"office.amsterdam": "Amsterdam",
"office.london": "London",
"office.paris": "Paris",
"office.milan": "Mailand",
// Dashboard (logged-in landing)
"dashboard.title": "Dashboard \u2014 Paliad",
"dashboard.greeting.prefix": "Guten Tag",
"dashboard.unavailable": "Dashboard ben\u00f6tigt die Datenbank \u2014 bitte Administrator kontaktieren.",
"dashboard.onboarding": "Bitte schlie\u00dfen Sie das Onboarding ab, damit Ihnen Fristen und Akten angezeigt werden k\u00f6nnen.",
"dashboard.summary.heading": "Fristen auf einen Blick",
"dashboard.summary.overdue": "\u00dcberf\u00e4llig",
"dashboard.summary.today": "Heute",
"dashboard.summary.this_week": "Diese Woche",
"dashboard.summary.next_week": "N\u00e4chste Woche",
"dashboard.summary.completed": "Erledigt",
"dashboard.summary.later": "Später",
"dashboard.appointment_summary.heading": "Termine auf einen Blick",
"dashboard.matters.heading": "Meine Akten",
"dashboard.matters.active": "Aktiv",
"dashboard.matters.archived": "Archiviert",
"dashboard.matters.total": "Gesamt",
"dashboard.deadlines.heading": "Kommende Fristen",
"dashboard.deadlines.empty": "Keine Fristen in den n\u00e4chsten 7 Tagen.",
"dashboard.appointments.heading": "Kommende Termine",
"dashboard.appointments.empty": "Keine Termine in den n\u00e4chsten 7 Tagen.",
"dashboard.activity.heading": "Letzte Aktivit\u00e4t",
"dashboard.activity.empty": "Noch keine Aktivit\u00e4t erfasst.",
"dashboard.activity.system": "System",
"dashboard.activity.event": "Ereignis",
// Inline Agenda section on the dashboard (t-paliad-162). The
// standalone /agenda page keeps its own copy under the agenda.* keys;
// these are dashboard-scoped so the headline reads as a section
// title rather than a page title.
"dashboard.agenda.heading": "Agenda",
"dashboard.agenda.empty": "Keine F\u00e4lligkeiten in den n\u00e4chsten 30 Tagen.",
"dashboard.agenda.full_link": "Vollst\u00e4ndige Agenda \u00f6ffnen \u2192",
// Collapsible-section toggle a11y labels (t-paliad-162). Both states
// are needed because the aria-label flips with the expanded state.
"dashboard.section.collapse": "Abschnitt einklappen",
"dashboard.section.expand": "Abschnitt ausklappen",
"dashboard.urgency.overdue": "\u00dcberf\u00e4llig",
"dashboard.urgency.today": "Heute",
"dashboard.urgency.urgent": "Dringend",
"dashboard.urgency.soon": "Bald",
"dashboard.when.today": "heute",
"dashboard.when.tomorrow": "morgen",
// Short verb phrases for the dashboard activity feed. Rendered as the
// bold summary line ("Matthias änderte Frist"); the full German
// sentence ("Deadline „ok“ geändert") lives on a second
// muted line via the project_events.description column.
"dashboard.action.short.project_created": "legte Projekt an",
"dashboard.action.short.project_archived": "archivierte Projekt",
"dashboard.action.short.project_reparented": "ordnete Projekt neu zu",
"dashboard.action.short.project_type_changed": "\u00e4nderte Projekt-Typ",
"dashboard.action.short.status_changed": "\u00e4nderte Status",
"dashboard.action.short.our_side_changed": "\u00e4nderte vertretene Seite",
"dashboard.action.short.visibility_changed": "\u00e4nderte Sichtbarkeit",
"dashboard.action.short.collaborators_updated": "aktualisierte Bearbeiter",
"dashboard.action.short.note_created": "f\u00fcgte Notiz hinzu",
"dashboard.action.short.deadline_created": "legte Frist an",
"dashboard.action.short.deadline_updated": "\u00e4nderte Frist",
"dashboard.action.short.deadline_completed": "erledigte Frist",
"dashboard.action.short.deadline_reopened": "öffnete Frist wieder",
"dashboard.action.short.deadline_deleted": "l\u00f6schte Frist",
"dashboard.action.short.deadline_project_changed": "verschob Frist",
"dashboard.action.short.deadlines_imported": "importierte Fristen",
"dashboard.action.short.appointment_created": "legte Termin an",
"dashboard.action.short.appointment_updated": "\u00e4nderte Termin",
"dashboard.action.short.appointment_deleted": "l\u00f6schte Termin",
"dashboard.action.short.appointment_project_changed": "verschob Termin",
// Localized event-row title for the project Verlauf tab \u2014 full noun
// phrase ("Frist ge\u00e4ndert") complementing the dashboard's verb form.
"event.title.project_created": "Projekt angelegt",
"event.title.project_archived": "Projekt archiviert",
"event.title.project_reparented": "Projekt umstrukturiert",
"event.title.project_type_changed": "Projekt-Typ ge\u00e4ndert",
"event.title.status_changed": "Status ge\u00e4ndert",
"event.title.our_side_changed": "Vertretene Seite ge\u00e4ndert",
"event.title.note_created": "Notiz hinzugef\u00fcgt",
"event.title.deadline_created": "Frist angelegt",
"event.title.deadline_updated": "Frist ge\u00e4ndert",
"event.title.deadline_completed": "Frist erledigt",
"event.title.deadline_reopened": "Frist wiederer\u00f6ffnet",
"event.title.deadline_deleted": "Frist gel\u00f6scht",
"event.title.deadline_project_changed": "Frist verschoben",
"event.title.deadlines_imported": "Fristen importiert",
"event.title.appointment_created": "Termin angelegt",
"event.title.appointment_updated": "Termin ge\u00e4ndert",
"event.title.appointment_deleted": "Termin gel\u00f6scht",
"event.title.appointment_project_changed": "Termin verschoben",
// 4-eye approval lifecycle (t-paliad-138). Verlauf renders these as
// a paired card with the original lifecycle event (e.g.
// "Frist angelegt" + "Genehmigung erteilt von Bert").
"event.title.deadline_approval_requested": "Genehmigung beantragt",
"event.title.deadline_approval_approved": "Genehmigung erteilt",
"event.title.deadline_approval_rejected": "Genehmigung abgelehnt",
"event.title.deadline_approval_revoked": "Anfrage zurückgezogen",
"event.title.appointment_approval_requested": "Genehmigung beantragt",
"event.title.appointment_approval_approved": "Genehmigung erteilt",
"event.title.appointment_approval_rejected": "Genehmigung abgelehnt",
"event.title.appointment_approval_revoked": "Anfrage zurückgezogen",
"event.description.deadline_approval_requested": "4-Augen-Genehmigung für Frist beantragt",
"event.description.deadline_approval_approved": "Genehmigung für Frist erteilt",
"event.description.deadline_approval_rejected": "Genehmigung für Frist abgelehnt",
"event.description.deadline_approval_revoked": "Genehmigungsanfrage für Frist zurückgezogen",
"event.description.appointment_approval_requested": "4-Augen-Genehmigung für Termin beantragt",
"event.description.appointment_approval_approved": "Genehmigung für Termin erteilt",
"event.description.appointment_approval_rejected": "Genehmigung für Termin abgelehnt",
"event.description.appointment_approval_revoked": "Genehmigungsanfrage für Termin zurückgezogen",
"dashboard.action.short.deadline_approval_requested": "beantragte Genehmigung",
"dashboard.action.short.deadline_approval_approved": "genehmigte Frist",
"dashboard.action.short.deadline_approval_rejected": "lehnte Frist ab",
"dashboard.action.short.deadline_approval_revoked": "zog Anfrage zurück",
"dashboard.action.short.appointment_approval_requested": "beantragte Genehmigung",
"dashboard.action.short.appointment_approval_approved": "genehmigte Termin",
"dashboard.action.short.appointment_approval_rejected": "lehnte Termin ab",
"dashboard.action.short.appointment_approval_revoked": "zog Anfrage zurück",
"event.title.checklist_created": "Checkliste angelegt",
"event.title.checklist_renamed": "Checkliste umbenannt",
"event.title.checklist_linked": "Checkliste verkn\u00fcpft",
"event.title.checklist_unlinked": "Checkliste getrennt",
"event.title.checklist_reset": "Checkliste zur\u00fcckgesetzt",
"event.title.checklist_deleted": "Checkliste gel\u00f6scht",
// Note-parent slugs for note_created descriptions
// ("Notiz zu Frist hinzugef\u00fcgt"). Used by translateEventDescription().
"event.note.parent.project": "Projekt",
"event.note.parent.deadline": "Frist",
"event.note.parent.appointment": "Termin",
"event.note.added_to": "Notiz zu {parent} hinzugef\u00fcgt",
// Localized full-sentence descriptions for the project Verlauf and the
// dashboard activity feed. Stored descriptions carry just the variable
// payload (title/count/slugs); the renderer interpolates here.
"event.description.deadline_created": "Frist \u201e{title}\u201c angelegt",
"event.description.deadline_updated": "Frist \u201e{title}\u201c ge\u00e4ndert",
"event.description.deadline_completed": "Frist \u201e{title}\u201c als erledigt markiert",
"event.description.deadline_reopened": "Frist \u201e{title}\u201c wieder ge\u00f6ffnet",
"event.description.deadline_deleted": "Frist \u201e{title}\u201c gel\u00f6scht",
"event.description.deadline_project_changed": "Frist \u201e{title}\u201c einer anderen Akte zugeordnet",
"event.description.deadlines_imported": "{count} Fristen aus Fristenrechner \u00fcbernommen",
"event.description.appointment_created": "Termin \u201e{title}\u201c angelegt",
"event.description.appointment_updated": "Termin \u201e{title}\u201c ge\u00e4ndert",
"event.description.appointment_deleted": "Termin \u201e{title}\u201c gel\u00f6scht",
"event.description.appointment_project_changed": "Termin \u201e{title}\u201c einer anderen Akte zugeordnet",
"dashboard.action.short.checklist_created": "legte Checkliste an",
"dashboard.action.short.checklist_renamed": "benannte Checkliste um",
"dashboard.action.short.checklist_unlinked": "trennte Checkliste",
"dashboard.action.short.checklist_linked": "verkn\u00fcpfte Checkliste",
"dashboard.action.short.checklist_reset": "setzte Checkliste zur\u00fcck",
"dashboard.action.short.checklist_deleted": "l\u00f6schte Checkliste",
"dashboard.action.short.partei_added": "f\u00fcgte Partei hinzu",
"dashboard.action.short.partei_removed": "entfernte Partei",
// Legacy event types kept so historical project_events rows render cleanly
// (writes switched to English in t-paliad-037).
"dashboard.action.short.akte_created": "legte Akte an",
"dashboard.action.short.akte_archived": "archivierte Akte",
"dashboard.action.short.projekt_created": "legte Akte an",
"dashboard.action.short.projekt_archived": "archivierte Akte",
"dashboard.action.short.projekt_reparented": "ordnete Akte neu zu",
"dashboard.action.short.notiz_created": "f\u00fcgte Notiz hinzu",
"dashboard.action.short.frist_created": "legte Frist an",
"dashboard.action.short.frist_updated": "\u00e4nderte Frist",
"dashboard.action.short.frist_completed": "erledigte Frist",
"dashboard.action.short.frist_deleted": "l\u00f6schte Frist",
"dashboard.action.short.fristen_imported": "importierte Fristen",
"dashboard.action.short.termin_created": "legte Termin an",
"dashboard.action.short.termin_updated": "\u00e4nderte Termin",
"dashboard.action.short.termin_deleted": "l\u00f6schte Termin",
"dashboard.action.short.checkliste_created": "legte Checkliste an",
"dashboard.action.short.checkliste_renamed": "benannte Checkliste um",
"dashboard.action.short.checkliste_unlinked": "trennte Checkliste",
"dashboard.action.short.checkliste_linked": "verkn\u00fcpfte Checkliste",
"dashboard.action.short.checkliste_reset": "setzte Checkliste zur\u00fcck",
"dashboard.action.short.checkliste_deleted": "l\u00f6schte Checkliste",
// Onboarding (first-login profile capture)
"onboarding.title": "Willkommen \u2014 Paliad",
"onboarding.heading": "Willkommen bei Paliad",
"onboarding.lede": "Bitte vervollst\u00e4ndigen Sie Ihr Profil, damit Ihnen Akten, Fristen und Termine angezeigt werden k\u00f6nnen.",
"onboarding.display_name": "Anzeigename",
"onboarding.display_name.placeholder": "Vor- und Nachname",
"onboarding.office": "B\u00fcro",
"onboarding.office.placeholder": "Bitte ausw\u00e4hlen",
"onboarding.job_title": "Berufsbezeichnung",
"onboarding.job_title.placeholder": "z.B. Associate, Partner, Patentanwalt",
"onboarding.profession": "Profession",
"onboarding.profession.hint": "Strukturiertes Tier — steuert die 4-Augen-Genehmigung. Distinkt von der Berufsbezeichnung.",
"onboarding.partner_unit": "Partner Unit",
"onboarding.partner_unit.unassigned": "(noch keine Zuordnung)",
"onboarding.optional": "(optional)",
"onboarding.submit": "Profil anlegen",
"onboarding.error.display_name": "Bitte Anzeigename eingeben.",
"onboarding.error.office": "Bitte B\u00fcro ausw\u00e4hlen.",
"onboarding.error.job_title": "Bitte Berufsbezeichnung eingeben.",
"onboarding.error.generic": "Profil konnte nicht angelegt werden.",
"onboarding.error.connection": "Verbindungsfehler. Bitte versuchen Sie es erneut.",
// Termine + CalDAV (Phase F)
"nav.group.einstellungen": "Einstellungen",
"nav.einstellungen": "Einstellungen",
"nav.caldav": "CalDAV",
// Global search (t-paliad-026)
"search.placeholder": "Suchen...",
"search.no_results": "Keine Ergebnisse",
"search.group.projects": "Projekte",
"search.group.deadlines": "Fristen",
"search.group.appointments": "Termine",
"search.group.glossary": "Glossar",
"search.group.courts": "Gerichte",
"search.group.checklists": "Checklisten",
"search.group.links": "Links",
"search.group.users": "Kolleg:innen",
// Command palette (t-paliad-044)
"palette.section.actions": "Aktionen",
"palette.action.nav.dashboard": "Gehe zu Dashboard",
"palette.action.nav.projects": "Gehe zu Projekte",
"palette.action.nav.deadlines": "Gehe zu Fristen",
"palette.action.nav.appointments": "Gehe zu Termine",
"palette.action.nav.agenda": "Gehe zu Agenda",
"palette.action.nav.team": "Gehe zu Team",
"palette.action.nav.glossary": "Gehe zu Glossar",
"palette.action.nav.courts": "Gehe zu Gerichte",
"palette.action.nav.links": "Gehe zu Links",
"palette.action.nav.checklists": "Gehe zu Checklisten",
"palette.action.nav.downloads": "Gehe zu Downloads",
"palette.action.nav.settings": "Gehe zu Einstellungen",
"palette.action.create.deadline": "Neue Frist anlegen",
"palette.action.create.appointment": "Neuer Termin anlegen",
"palette.action.create.project": "Neues Projekt anlegen",
"palette.action.toggle.lang": "Sprache umschalten",
"palette.action.toggle.pin": "Sidebar an-/abheften",
"palette.action.app.invite": "Kolleg:in einladen",
"palette.action.app.logout": "Abmelden",
"palette.footer.navigate": "Navigieren",
"palette.footer.open": "Öffnen",
"palette.footer.close": "Schließen",
"sidebar.resize.title": "Breite anpassen — ziehen, Doppelklick setzt zurück",
// Settings page (t-paliad-022)
"einstellungen.title": "Einstellungen \u2014 Paliad",
"einstellungen.heading": "Einstellungen",
"einstellungen.subtitle": "Profil, Benachrichtigungen und Kalendersynchronisation.",
"einstellungen.loading": "L\u00e4dt\u2026",
"einstellungen.optional": "(optional)",
"einstellungen.save": "Speichern",
"einstellungen.saved": "Gespeichert.",
"einstellungen.error.generic": "Speichern fehlgeschlagen. Bitte sp\u00e4ter erneut versuchen.",
"einstellungen.tab.profil": "Profil",
"einstellungen.tab.benachrichtigungen": "Benachrichtigungen",
"einstellungen.tab.caldav": "CalDAV",
"projects.title": "Projekte \u2014 Paliad",
"projects.heading": "Projekte",
"projects.subtitle": "Mandanten, Streitsachen, Patente und Verfahren \u2014 hierarchisch organisiert.",
"projects.new": "Neues Projekt",
"projects.search.placeholder": "Titel, Referenz oder ClientMatter...",
"projects.filter.type": "Typ",
"projects.filter.type.all": "Alle Typen",
"projects.filter.status": "Status",
"projects.filter.status.all": "Alle Status",
"projects.filter.status.active": "Aktiv",
"projects.filter.status.archived": "Archiviert",
"projects.filter.status.closed": "Abgeschlossen",
"projects.filter.view": "Ansicht",
"projects.view.flat": "Flache Liste",
"projects.view.roots": "Nur Wurzeln",
"projects.unavailable": "Projektverwaltung zurzeit nicht verf\u00fcgbar \u2014 bitte Administrator kontaktieren.",
"projects.col.title": "Titel",
"projects.col.type": "Typ",
"projects.col.reference": "Referenz",
"projects.col.clientmatter": "ClientMatter",
"projects.col.status": "Status",
"projects.col.updated": "Zuletzt ge\u00e4ndert",
"projects.empty.title": "Noch kein Projekt angelegt",
"projects.empty.hint": "Starten Sie \u00fcber \u201eNeues Projekt\u201c \u2014 legen Sie zuerst einen Mandanten an, darunter Streitsachen, Patente und Verfahren.",
"projects.empty.filtered": "Keine Treffer f\u00fcr diese Filter.",
"projects.cancel": "Abbrechen",
"projects.submit": "Projekt anlegen",
"projects.neu.title": "Neues Projekt \u2014 Paliad",
"projects.neu.heading": "Neues Projekt anlegen",
"projects.neu.subtitle": "Mandant, Streitsache, Patent, Verfahren oder generisches Projekt \u2014 hierarchisch einordnen. Sichtbarkeit folgt dem Team (Sie werden als \u201eLeitung\u201c automatisch hinzugef\u00fcgt).",
"projects.field.type": "Typ",
"projects.field.type.choose": "Bitte w\u00e4hlen\u2026",
"projects.field.parent": "\u00dcbergeordnetes Projekt",
"projects.field.parent.placeholder": "Titel eingeben, um ein \u00dcberprojekt zu suchen...",
"projects.field.parent.hint": "Leer lassen f\u00fcr ein Wurzel-Projekt (typisch: Mandant).",
"projects.field.title": "Titel",
"projects.field.title.placeholder": "z.B. Siemens AG | Siemens v. Huawei | EP 1 234 567",
"projects.field.reference": "Interne Referenz (optional)",
"projects.field.reference.placeholder": `z.B. ${FIRM}-2026-0042`,
"projects.field.client_number": "Client-Nr. (7 Ziffern)",
"projects.field.matter_number": "Matter-Nr. (7 Ziffern)",
"projects.field.clientmatter.hint": `${FIRM}-Billing-Nummern. Format CCCCCCC.MMMMMMM. Client-Nr. wird an Unterprojekte vererbt (\u00fcberschreibbar).`,
"projects.field.billing_reference": "Billing-Referenz (optional)",
"projects.field.netdocuments_url": "netDocuments-URL (optional)",
"projects.field.industry": "Branche",
"projects.field.country": "Land (ISO-2)",
"projects.field.description": "Notizen",
"projects.field.description.placeholder": "Kurznotizen zum Projekt (optional)...",
"projects.detail.description.heading": "Notizen",
"projects.field.patent_number": "Patentnummer",
"projects.field.filing_date": "Anmeldetag",
"projects.field.grant_date": "Erteilungstag",
"projects.field.court": "Gericht",
"projects.field.case_number": "Aktenzeichen (Gericht)",
"projects.field.proceeding_type_id": "Verfahrensart",
"projects.field.our_side": "Wir vertreten",
"projects.field.our_side.hint": "Bestimmt die Voreinstellung der Perspektive im Fristenrechner-Determinator. Lässt sich dort jederzeit überschreiben.",
"projects.field.our_side.unset": "Unbekannt / nicht gesetzt",
"projects.field.our_side.claimant": "Klägerseite",
"projects.field.our_side.defendant": "Beklagtenseite",
"projects.field.our_side.court": "Gericht / Tribunal",
"projects.field.our_side.both": "Beide Seiten",
"projects.field.our_side.none": "—",
"projects.field.status": "Status",
"projects.error.title_required": "Titel erforderlich",
"projects.detail.edit.type_change_warning.title": "Diese Felder werden geleert:",
"projects.detail.title": "Projekt \u2014 Paliad",
"projects.detail.back": "\u2190 Zur\u00fcck zur \u00dcbersicht",
"projects.detail.loading": "L\u00e4dt\u2026",
"projects.detail.notfound": "Projekt nicht gefunden oder keine Berechtigung.",
"projects.detail.edit": "Bearbeiten",
"projects.detail.edit.modal.title": "Projekt bearbeiten",
"projects.detail.save": "Speichern",
"projects.detail.tab.verlauf": "Verlauf",
"projects.detail.tab.team": "Team",
"projects.detail.tab.kinder": "Projektbaum",
"projects.detail.tab.parteien": "Parteien",
"projects.detail.tab.fristen": "Fristen",
"projects.detail.tab.termine": "Termine",
"projects.detail.tab.notizen": "Notizen",
"projects.detail.tab.checklisten": "Checklisten",
"projects.detail.verlauf.empty": "Noch keine Ereignisse aufgezeichnet.",
"projects.detail.verlauf.loadMore": "Mehr laden",
// SmartTimeline (t-paliad-171, Slice 1).
"projects.detail.smarttimeline.empty": "Noch keine Ereignisse erfasst.",
"projects.detail.smarttimeline.today": "Heute",
"projects.detail.smarttimeline.section.past": "Vergangenheit",
"projects.detail.smarttimeline.section.future": "Zukunft",
"projects.detail.smarttimeline.section.undated": "Ohne Datum",
"projects.detail.smarttimeline.kind.deadline": "Frist",
"projects.detail.smarttimeline.kind.appointment": "Termin",
"projects.detail.smarttimeline.kind.milestone": "Meilenstein",
"projects.detail.smarttimeline.kind.projected": "Vorhersage",
"projects.detail.smarttimeline.status.done": "Erledigt",
"projects.detail.smarttimeline.status.open": "Offen",
"projects.detail.smarttimeline.status.overdue": "Überfällig",
"projects.detail.smarttimeline.status.court_set": "Datum vom Gericht",
"projects.detail.smarttimeline.status.predicted": "Voraussichtlich",
"projects.detail.smarttimeline.status.off_script": "Eigener Eintrag",
"projects.detail.smarttimeline.audit.toggle.show": "Audit-Log anzeigen",
"projects.detail.smarttimeline.audit.toggle.hide": "Nur Timeline-Einträge",
"projects.detail.smarttimeline.add.cta": "+ Eintrag",
"projects.detail.smarttimeline.add.modal.title": "Neuer Eintrag im SmartTimeline",
"projects.detail.smarttimeline.add.choice.deadline": "Frist anlegen",
"projects.detail.smarttimeline.add.choice.appointment": "Termin anlegen",
"projects.detail.smarttimeline.add.choice.counterclaim": "Widerklage (CCR)",
"projects.detail.smarttimeline.add.choice.amend": "Antrag auf Änderung (R.30)",
"projects.detail.smarttimeline.add.choice.milestone": "Eigener Meilenstein",
"projects.detail.smarttimeline.add.choice.disabled": "Kommt mit Slice 3",
"projects.detail.smarttimeline.add.cancel": "Abbrechen",
"projects.detail.smarttimeline.add.submit": "Speichern",
"projects.detail.smarttimeline.milestone.title": "Titel",
"projects.detail.smarttimeline.milestone.date": "Datum (optional)",
"projects.detail.smarttimeline.milestone.description": "Beschreibung (optional)",
"projects.detail.smarttimeline.error.title_required": "Bitte einen Titel angeben.",
"projects.detail.smarttimeline.error.generic": "Konnte den Eintrag nicht speichern.",
"projects.detail.team.form.user": "Benutzer",
"projects.detail.team.form.role": "Rolle",
"projects.detail.team.form.responsibility": "Rolle im Projekt",
"projects.detail.team.form.profession.label": "Profession",
"projects.detail.team.form.profession.none": "Keine Profession gesetzt \u2014 kann keine 4-Augen-Genehmigungen erteilen.",
"projects.detail.team.form.cancel": "Abbrechen",
"projects.detail.team.form.submit": "Hinzuf\u00fcgen",
"projects.detail.team.col.name": "Name",
"projects.detail.team.col.role": "Rolle",
"projects.detail.team.col.profession": "Profession",
"projects.detail.team.col.responsibility": "Rolle im Projekt",
"projects.detail.team.col.source": "Herkunft",
"projects.detail.kinder.add": "Untervorhaben anlegen",
"projects.detail.kinder.empty": "Keine untergeordneten Projekte.",
"projects.detail.parteien.add": "Partei hinzuf\u00fcgen",
"projects.detail.parteien.form.name": "Name",
"projects.detail.parteien.form.role": "Rolle",
"projects.detail.parteien.form.rep": "Vertreter (optional)",
"projects.detail.parteien.form.cancel": "Abbrechen",
"projects.detail.parteien.form.submit": "Hinzuf\u00fcgen",
"projects.detail.parteien.role.claimant": "Kl\u00e4ger",
"projects.detail.parteien.role.defendant": "Beklagter",
"projects.detail.parteien.role.thirdparty": "Streitverk\u00fcndeter / Drittpartei",
"projects.detail.parteien.col.name": "Name",
"projects.detail.parteien.col.role": "Rolle",
"projects.detail.parteien.col.rep": "Vertreter",
"projects.detail.parteien.empty": "Noch keine Parteien eingetragen.",
"projects.detail.deadlines.add": "Frist hinzuf\u00fcgen",
"projects.detail.deadlines.empty": "F\u00fcr dieses Projekt sind noch keine Fristen erfasst.",
"projects.detail.appointments.add": "Termin hinzuf\u00fcgen",
"projects.detail.appointments.form.cancel": "Abbrechen",
"projects.detail.appointments.form.submit": "Hinzuf\u00fcgen",
"projects.detail.appointments.empty": "F\u00fcr dieses Projekt sind noch keine Termine erfasst.",
"projects.detail.checklisten.empty": "F\u00fcr dieses Projekt sind noch keine Checklisten-Instanzen erfasst.",
"projects.detail.checklisten.col.template": "Vorlage",
"projects.detail.checklisten.col.name": "Name",
"projects.detail.checklisten.col.progress": "Fortschritt",
"projects.detail.checklisten.col.created": "Angelegt",
"projects.detail.checklisten.hint.prefix": "Instanzen werden auf der Vorlagen-Seite unter ",
"projects.detail.checklisten.hint.link": "Checklisten",
"projects.detail.checklisten.hint.suffix": " angelegt.",
"projects.detail.delete": "Projekt archivieren",
"projects.detail.delete.confirm.title": "Projekt wirklich archivieren?",
"projects.detail.delete.confirm.body": "Das Projekt wird archiviert. Es kann nicht direkt wiederhergestellt werden.",
"projects.detail.delete.confirm.cancel": "Abbrechen",
"projects.detail.delete.confirm.ok": "Archivieren",
"projects.type.client": "Mandant",
"projects.type.litigation": "Streitsache",
"projects.type.patent": "Patent",
"projects.type.case": "Verfahren",
"projects.type.project": "Projekt",
"projects.team.role.lead": "Leitung",
"projects.team.role.associate": "Associate",
"projects.team.role.pa": "PA",
"projects.team.role.of_counsel": "Of Counsel",
"projects.team.role.local_counsel": "Local Counsel",
"projects.team.role.expert": "Experte",
"projects.team.role.observer": "Beobachter",
"projects.team.responsibility.lead": "Leitung",
"projects.team.responsibility.member": "Mitglied",
"projects.team.responsibility.observer": "Beobachter",
"projects.team.responsibility.external": "Extern",
"projects.team.profession.partner": "Partner",
"projects.team.profession.of_counsel": "Of Counsel",
"projects.team.profession.associate": "Associate",
"projects.team.profession.senior_pa": "Senior PA",
"projects.team.profession.pa": "PA",
"projects.team.profession.paralegal": "Paralegal",
"projects.team.profession.none": "(extern)",
"projects.team.profession.hint": "Profession \u2014 gesetzt im Firmenprofil",
"projects.team.profession.none.hint": "Keine Profession gesetzt \u2014 keine 4-Augen-Befugnis",
"projects.team.direct": "direkt",
"projects.team.inherited.hint": "Vererbt vom \u00dcberprojekt",
"projects.detail.team.add": "Mitglied hinzuf\u00fcgen",
"projects.detail.team.remove": "Entfernen",
"projects.detail.team.confirm_remove": "Mitglied entfernen?",
"projects.detail.team.empty": "Noch keine Teammitglieder.",
"projects.detail.team.error.user_required": "Benutzer ausw\u00e4hlen",
"projects.detail.team.invite.hint": "Benutzer nicht gefunden?",
"projects.detail.team.invite.hint_email": "Niemand mit dieser E-Mail.",
"projects.detail.team.invite.cta": "Einladen",
"projects.view.tree": "Baumansicht",
"projects.tree.toggle": "Aufklappen / Zuklappen",
"projects.tree.loading": "Baum wird geladen\u2026",
"projects.tree.error": "Baumansicht konnte nicht geladen werden.",
"projects.tree.deadlines.overdue": "\u00dcberf\u00e4llige Fristen",
"projects.tree.deadlines.open": "Offene Fristen",
"projects.tree.deadlines.subtree.tooltip": "Inkl. Unterprojekte",
"projects.tree.deadlines.direct.tooltip": "Nur direkt auf diesem Projekt",
"projects.tree.pin": "Anpinnen",
"projects.tree.unpin": "Pin entfernen",
"projects.tree.inherited.context": "Sichtbar wegen Unterprojekt",
"projects.toolbar.search.placeholder": "Suchen \u2014 Titel, Referenz, ClientMatter\u2026",
"projects.toolbar.view.tree": "Baum",
"projects.toolbar.view.cards": "Karten",
"projects.toolbar.view.flat": "Liste",
"projects.toolbar.subtree_counts": "Inkl. Unterprojekte z\u00e4hlen",
"projects.chip.all": "Alle",
"projects.chip.mine": "Nur meine",
"projects.chip.pinned": "Angepinnt",
"projects.chip.status": "Status",
"projects.chip.type": "Typ",
"projects.chip.has_open_deadlines": "Mit aktiven Fristen",
"projects.chip.status.active": "Aktiv",
"projects.chip.status.archived": "Archiviert",
"projects.chip.status.closed": "Abgeschlossen",
"projects.chip.type.client": "Mandant",
"projects.chip.type.litigation": "Streitsache",
"projects.chip.type.patent": "Patent",
"projects.chip.type.case": "Verfahren",
"projects.chip.type.project": "Projekt",
"projects.chip.multi.none": "Keine Auswahl",
"projects.chip.multi.count": "{n} ausgew\u00e4hlt",
"projects.empty.filtered.action": "Filter zur\u00fccksetzen",
"projects.search.match.self": "Treffer",
"projects.search.match.ancestor": "\u00dcber-Projekt eines Treffers",
"projects.search.match.descendant": "Unterprojekt eines Treffers",
"projects.cards.next_events": "N\u00e4chste Termine",
"projects.cards.recent_verlauf": "Zuletzt",
"projects.cards.no_next_events": "\u2014 keine bevorstehenden Termine",
"projects.cards.no_recent": "\u2014 noch nichts passiert",
"projects.cards.team": "Team",
"projects.cards.deadline_open": "offen",
"projects.cards.deadline_overdue": "\u00fcberf\u00e4llig",
"projects.cards.show_all_levels": "Alle Ebenen anzeigen",
"projects.cards.show_all_levels.hint": "Mandanten + Streitsachen als eigene Karten zeigen",
"projects.cards.layout.label": "Ansicht",
"projects.cards.layout.new": "Neue Ansicht",
"projects.cards.layout.edit": "Bearbeiten",
"projects.cards.layout.save": "Speichern",
"projects.cards.layout.discard": "Verwerfen",
"projects.cards.layout.set_default": "Als Standard festlegen",
"projects.cards.layout.delete": "L\u00f6schen",
"projects.cards.layout.rename": "Umbenennen",
"projects.cards.layout.is_default": "Standard",
"projects.cards.layout.new.prompt": "Name der neuen Ansicht",
"projects.cards.layout.delete.confirm": "Diese Ansicht wirklich l\u00f6schen?",
"projects.cards.layout.delete.default_blocked": "Die aktive Standardansicht kann nicht gel\u00f6scht werden \u2014 bitte zuerst eine andere Standardansicht w\u00e4hlen.",
"projects.cards.layout.fact.title-row": "Titelzeile",
"projects.cards.layout.fact.type-chip": "Typ-Badge",
"projects.cards.layout.fact.status-chip": "Status-Badge",
"projects.cards.layout.fact.client-matter": "ClientMatter",
"projects.cards.layout.fact.parent-path": "Pfad zum \u00dcberprojekt",
"projects.cards.layout.fact.deadline-counts": "Frist-Z\u00e4hler",
"projects.cards.layout.fact.next-events": "N\u00e4chste Termine",
"projects.cards.layout.fact.recent-verlauf": "Verlauf-Eintr\u00e4ge",
"projects.cards.layout.fact.team-chips": "Team-Chips",
"projects.cards.layout.fact.reference": "Referenz",
"projects.cards.layout.fact.last-activity-at": "Letzte Aktivit\u00e4t",
"projects.cards.layout.density": "Dichte",
"projects.cards.layout.density.compact": "Kompakt",
"projects.cards.layout.density.roomy": "Ger\u00e4umig",
"projects.cards.layout.grid": "Spalten",
"projects.cards.layout.grid.auto": "Auto",
"projects.cards.layout.grid.2": "2",
"projects.cards.layout.grid.3": "3",
"projects.cards.layout.grid.4": "4",
"projects.cards.layout.fact.toggle.hide": "Ausblenden",
"projects.cards.layout.fact.toggle.show": "Anzeigen",
"projects.cards.layout.fact.move_up": "Nach oben",
"projects.cards.layout.fact.move_down": "Nach unten",
"projects.cards.layout.fact.count": "Anzahl",
"projects.cards.event.kind.deadline": "Frist",
"projects.cards.event.kind.appointment": "Termin",
"projects.cards.event.kind.project_event": "Verlauf",
"projects.cards.empty": "Keine Projekte zum Anzeigen.",
"projects.detail.clientmatter.inherited": "Vom \u00dcberprojekt vererbt",
"einstellungen.profil.email": "E-Mail",
"einstellungen.profil.email.hint": "E-Mail kann nicht ge\u00e4ndert werden.",
"einstellungen.profil.display_name": "Anzeigename",
"einstellungen.profil.display_name.placeholder": "Vor- und Nachname",
"einstellungen.profil.office": "B\u00fcro",
"einstellungen.profil.job_title": "Berufsbezeichnung",
"einstellungen.profil.job_title.placeholder": "z.B. Associate, Partner, Patentanwalt",
"einstellungen.profil.lang": "Sprache",
"einstellungen.profil.lang.de": "Deutsch",
"einstellungen.profil.lang.en": "English",
"einstellungen.profil.lang.hint": "Wird f\u00fcr Oberfl\u00e4che und Benachrichtigungs-E-Mails verwendet.",
"einstellungen.profil.error.display_name": "Bitte Anzeigename eingeben.",
"einstellungen.profil.error.office": "Bitte B\u00fcro ausw\u00e4hlen.",
"einstellungen.profil.error.job_title": "Bitte Berufsbezeichnung eingeben.",
"einstellungen.prefs.reminders.heading": "Frist-Erinnerungen",
"einstellungen.prefs.reminders.hint": "Paliad sendet Erinnerungen an Ihre E-Mail, wenn Fristen f\u00e4llig werden.",
"einstellungen.prefs.reminders.master": "Frist-Erinnerungen aktiv",
"einstellungen.prefs.reminders.overdue": "\u00dcberf\u00e4llige Fristen",
"einstellungen.prefs.reminders.due_today": "Heute f\u00e4llig",
"einstellungen.prefs.reminders.due_warning": "Vorwarnung (X Tage vorher)",
"einstellungen.prefs.times.heading": "Zeitpunkte",
"einstellungen.prefs.times.hint": "Erinnerungen werden zur gew\u00e4hlten Uhrzeit in Ihrer Zeitzone versendet.",
"einstellungen.prefs.times.morning": "Morgen-Slot",
"einstellungen.prefs.times.morning.hint": "Sammel-E-Mail mit \u00fcberf\u00e4lligen, heute f\u00e4lligen und kommenden Fristen.",
"einstellungen.prefs.times.evening": "Abend-Slot (Eskalation)",
"einstellungen.prefs.times.evening.hint": "Dringende Erinnerung an heute noch offene Fristen.",
"einstellungen.prefs.times.timezone": "Zeitzone",
"einstellungen.prefs.times.timezone.hint": "IANA-Zeitzonen-Name (z.B. Europe/Berlin, Europe/London).",
"einstellungen.prefs.times.error.required": "Bitte beide Uhrzeiten ausw\u00e4hlen.",
"einstellungen.prefs.warning_offset.label": "Vorwarnung (Tage vorher)",
"einstellungen.prefs.warning_offset.hint": "Wir erinnern Sie diese viele Tage vor jeder Frist.",
"einstellungen.prefs.warning_offset.error": "Vorwarnung muss zwischen 1 und 30 Tagen liegen.",
"einstellungen.prefs.escalation.heading": "Eskalations-Kontakt",
"einstellungen.prefs.escalation.hint": "Wer soll bei DRINGEND-Eskalation am Abend zusätzlich benachrichtigt werden? Standard: globale Admins.",
"einstellungen.prefs.escalation.default_option": "— Standard (globale Admins) —",
// Invitation modal (sidebar)
"invite.button": "Kolleg:in einladen",
"invite.modal.title": "Kolleg:in zu Paliad einladen",
"invite.modal.body": `Senden Sie eine Einladung an eine ${FIRM}-E-Mail-Adresse. Die Empf\u00e4nger:in erh\u00e4lt einen Registrierungslink.`,
"invite.modal.email": "E-Mail-Adresse",
"invite.modal.message": "Pers\u00f6nliche Nachricht (optional)",
"invite.modal.message.placeholder": "Hi, ich nutze Paliad f\u00fcr die Aktenverwaltung \u2014 schau es dir mal an.",
"invite.modal.cancel": "Abbrechen",
"invite.modal.send": "Einladung senden",
"appointments.list.title": "Termine \u2014 Paliad",
"appointments.list.heading": "Termine",
"appointments.list.subtitle": "Verhandlungen, Besprechungen, Beratungen \u2014 pers\u00f6nlich oder aktenbezogen.",
"appointments.list.calendar": "Kalenderansicht",
"appointments.list.new": "Neuer Termin",
"appointments.summary.today": "Heute",
"appointments.summary.thisweek": "Diese Woche",
"appointments.summary.later": "Sp\u00e4ter",
"appointments.filter.type": "Typ",
"appointments.filter.type.all": "Alle Typen",
"appointments.filter.akte": "Projekt",
"appointments.filter.akte.all": "Alle Projekte & pers\u00f6nlich",
"appointments.filter.akte.personal": "Nur pers\u00f6nliche",
"appointments.filter.from": "Von",
"appointments.filter.to": "Bis",
"appointments.col.start": "Beginn",
"appointments.col.title": "Titel",
"appointments.col.akte": "Projekt",
"appointments.col.location": "Ort",
"appointments.col.type": "Typ",
"appointments.empty.title": "Keine Termine vorhanden",
"appointments.empty.hint": "Sobald Termine angelegt werden, erscheinen sie hier.",
"appointments.empty.filtered": "Keine Termine mit diesen Filtern.",
"appointments.unavailable": "Terminverwaltung zurzeit nicht verf\u00fcgbar \u2014 bitte Administrator kontaktieren.",
"appointments.personal": "Pers\u00f6nlich",
"appointments.type.hearing": "Verhandlung",
"appointments.type.meeting": "Besprechung",
"appointments.type.consultation": "Beratung",
"appointments.type.deadline_hearing": "Fristverhandlung",
"appointments.neu.title": "Neuer Termin \u2014 Paliad",
"appointments.neu.heading": "Neuer Termin",
"appointments.neu.subtitle": "Pers\u00f6nlich oder einer Akte zugeordnet. Bei aktiver CalDAV-Synchronisation erscheint der Termin auch im externen Kalender.",
"appointments.neu.back": "\u2190 Zur\u00fcck zur \u00dcbersicht",
"appointments.neu.cancel": "Abbrechen",
"appointments.neu.submit": "Termin anlegen",
"appointments.field.title": "Titel",
"appointments.field.title.placeholder": "z.B. M\u00fcndliche Verhandlung",
"appointments.field.start": "Beginn",
"appointments.field.end": "Ende (optional)",
"appointments.field.type": "Typ",
"appointments.field.type.none": "Kein Typ",
"appointments.field.akte": "Akte (optional)",
"appointments.field.akte.none": "Pers\u00f6nlicher Termin",
"appointments.field.location": "Ort (optional)",
"appointments.field.location.placeholder": "z.B. UPC LD M\u00fcnchen",
"appointments.field.description": "Beschreibung (optional)",
"appointments.field.description.placeholder": "Hinweise, Tagesordnung, n\u00e4chste Schritte\u2026",
"appointments.error.required": "Bitte Titel und Beginn ausf\u00fcllen.",
"appointments.error.generic": "Speichern fehlgeschlagen. Bitte sp\u00e4ter erneut versuchen.",
"appointments.detail.title": "Termin \u2014 Paliad",
"appointments.detail.back": "\u2190 Zur\u00fcck zur \u00dcbersicht",
"appointments.detail.loading": "L\u00e4dt\u2026",
"appointments.detail.notfound": "Termin nicht gefunden",
"appointments.detail.notfound.hint": "Der Termin existiert nicht oder Sie haben keine Berechtigung.",
"appointments.detail.akte": "Akte:",
"appointments.detail.save": "\u00c4nderungen speichern",
"appointments.detail.saved": "Gespeichert.",
"appointments.detail.delete": "Termin l\u00f6schen",
"appointments.detail.delete.confirm": "Diesen Termin wirklich l\u00f6schen?",
"appointments.kalender.title": "Terminkalender \u2014 Paliad",
"appointments.kalender.heading": "Terminkalender",
"appointments.kalender.subtitle": "Monats\u00fcbersicht aller Termine.",
"appointments.kalender.list": "Listenansicht",
"appointments.kalender.empty": "Keine Termine im ausgew\u00e4hlten Zeitraum.",
// t-paliad-110 \u2014 unified Events page (rendered on both /deadlines and
// /appointments). The user-facing "Fristen" / "Termine" branding stays;
// these keys cover the shared chrome (chip toggle, type chip per row,
// generic Datum column header, etc).
"events.toggle.deadline": "Fristen",
"events.toggle.appointment": "Termine",
"events.toggle.all": "Beides",
"events.filter.status.all": "Alle",
"events.summary.later": "Sp\u00e4ter",
"events.col.date": "Datum",
"events.col.location": "Ort",
"events.col.appointment_type": "Termin-Typ",
"events.row.type.deadline": "Frist",
"events.row.type.appointment": "Termin",
"events.empty.title": "Keine Eintr\u00e4ge vorhanden",
"events.empty.hint": "Sobald Fristen oder Termine angelegt werden, erscheinen sie hier.",
"events.empty.filtered": "Keine Eintr\u00e4ge mit diesen Filtern.",
"events.unavailable": "Termin- und Fristenverwaltung zurzeit nicht verf\u00fcgbar \u2014 bitte Administrator kontaktieren.",
"events.view.cards": "Karten",
"events.view.list": "Liste",
"events.view.calendar": "Kalender",
"events.calendar.empty": "Keine Eintr\u00e4ge im ausgew\u00e4hlten Zeitraum.",
"caldav.title": "CalDAV-Synchronisation \u2014 Paliad",
"caldav.heading": "CalDAV-Synchronisation",
"caldav.subtitle": "Synchronisieren Sie Ihre Paliad-Termine mit Ihrem externen Kalender (Nextcloud, iCloud, Outlook, mailcow\u2026). Das Passwort wird verschl\u00fcsselt gespeichert und nie zur\u00fcckgegeben.",
"caldav.disabled": "CalDAV-Synchronisation derzeit nicht verf\u00fcgbar \u2014 bitte Administrator kontaktieren.",
"caldav.never": "Noch nie",
"caldav.field.url": "CalDAV-Server-URL",
"caldav.field.url.placeholder": "https://cloud.example.com/remote.php/dav/calendars/user/personal/",
"caldav.field.url.hint": "Vollst\u00e4ndige URL zu Ihrem Kalender (inkl. Pfad).",
"caldav.field.username": "Benutzername",
"caldav.field.password": "Passwort / App-Token",
"caldav.field.password.hint": "Bei vorhandener Konfiguration leer lassen, um das gespeicherte Passwort zu behalten.",
"caldav.field.calendar_path": "Kalenderpfad (optional)",
"caldav.field.calendar_path.placeholder": "/calendars/user/personal/",
"caldav.field.calendar_path.hint": "Falls die URL nur den Server zeigt, ist hier der Pfad zum konkreten Kalender einzutragen.",
"caldav.field.enabled": "Synchronisation aktiv",
"caldav.test": "Verbindung testen",
"caldav.test.ok": "Verbindung erfolgreich.",
"caldav.test.fail": "Verbindung fehlgeschlagen",
"caldav.save": "Speichern",
"caldav.saved": "Konfiguration gespeichert.",
"caldav.delete": "Konfiguration l\u00f6schen",
"caldav.delete.confirm": "Wirklich l\u00f6schen? Das gespeicherte Passwort wird unwiderruflich entfernt.",
"caldav.delete.done": "Konfiguration gel\u00f6scht.",
"caldav.error.required": "URL und Benutzername sind erforderlich.",
"caldav.error.password_required": "Passwort ist beim ersten Speichern erforderlich.",
"caldav.error.generic": "Speichern fehlgeschlagen.",
"caldav.status.last_sync": "Letzte Synchronisation:",
"caldav.status.last_error": "Letzter Fehler:",
"caldav.log.heading": "Letzte Synchronisationen",
"caldav.log.col.time": "Zeitpunkt",
"caldav.log.col.pushed": "Gesendet",
"caldav.log.col.pulled": "Empfangen",
"caldav.log.col.duration": "Dauer",
"caldav.log.col.error": "Fehler",
"caldav.log.empty": "Noch keine Synchronisationen aufgezeichnet.",
// Notizen (polymorphic notes — Phase I)
"notes.section.title": "Notizen",
"notes.placeholder": "Notiz hinzuf\u00fcgen\u2026",
"notes.shortcut.hint": "Strg+Enter (oder \u2318+Enter) zum Speichern",
"notes.submit": "Hinzuf\u00fcgen",
"notes.save": "Speichern",
"notes.cancel": "Abbrechen",
"notes.edit": "Bearbeiten",
"notes.delete": "L\u00f6schen",
"notes.delete.confirm": "Diese Notiz wirklich l\u00f6schen?",
"notes.empty": "Noch keine Notizen.",
"notes.edited": "bearbeitet",
"notes.unknown_author": "Unbekannt",
"notes.time.just_now": "gerade eben",
"notes.error.empty": "Notiz darf nicht leer sein.",
"notes.error.generic": "Aktion fehlgeschlagen. Bitte erneut versuchen.",
// Agenda (t-paliad-030) — unified timeline across projects
"agenda.title": "Agenda — Paliad",
"agenda.heading": "Agenda",
"agenda.subtitle": "Kommende Fristen und Termine über alle sichtbaren Akten, nach Tag gruppiert.",
"agenda.unavailable": "Agenda zurzeit nicht verfügbar — bitte Administrator kontaktieren.",
"agenda.loading": "Lädt …",
"agenda.filter.type": "Ansicht",
"agenda.filter.both": "Beides",
"agenda.filter.deadlines": "Nur Fristen",
"agenda.filter.appointments": "Nur Termine",
"agenda.filter.range": "Zeitraum",
"agenda.range.7": "7 Tage",
"agenda.range.14": "14 Tage",
"agenda.range.30": "30 Tage",
"agenda.range.90": "90 Tage",
"agenda.empty.title": "Keine Einträge im Zeitraum",
"agenda.empty.hint": "Nichts Fälliges — erweitern Sie den Zeitraum oder legen Sie neue Fristen oder Termine an.",
"agenda.label.deadline": "Frist",
"agenda.label.appointment": "Termin",
"agenda.appointment_type.hearing": "Verhandlung",
"agenda.appointment_type.meeting": "Besprechung",
"agenda.appointment_type.consultation": "Mandantentermin",
"agenda.appointment_type.deadline_hearing": "Fristentermin",
"agenda.day.today": "Heute",
"agenda.day.tomorrow": "Morgen",
"agenda.urgency.overdue": "Überfällig",
"agenda.urgency.today": "Heute",
"agenda.urgency.tomorrow": "Morgen",
"agenda.urgency.this_week": "Diese Woche",
"agenda.urgency.later": "Später",
// Team directory (t-paliad-029)
"team.title": "Team — Paliad",
"team.heading": "Team",
"team.subtitle": "Alle Paliad-Kolleg:innen, gruppiert nach Standort oder Partner Unit.",
"team.search.placeholder": "Nach Name, Rolle, Büro suchen…",
"team.group.office": "Nach Standort",
"team.group.department": "Nach Partner Unit",
"team.group.other": "Sonstige",
"team.filter.all": "Alle",
"team.filter.role": "Rolle",
"team.role.partner": "Partner",
"team.role.counsel": "Counsel",
"team.role.counsel_knowledge_lawyer": "Counsel Knowledge Lawyer",
"team.role.senior_associate": "Senior Associate",
"team.role.associate": "Associate",
"team.role.junior_associate": "Junior Associate",
"team.role.trainee": "Trainee",
"team.role.pa": "PA",
"team.role.paralegal": "Paralegal",
"team.role.secretary": "Sekretär:in",
"team.empty": "Keine Treffer.",
"team.dept.lead": "Lead",
"team.dept.unassigned": "Ohne Partner Unit",
"team.partner_unit.unassigned": "Ohne Partner Unit",
// Project filter (t-paliad-147)
"team.filter.project": "Projekt",
"team.filter.project.all": "Alle Projekte",
"team.filter.project.selected": "ausgewählt",
"team.filter.project.clear": "Alle abwählen",
// Broadcast modal (t-paliad-147)
"team.broadcast.button": "E-Mail an Auswahl",
"team.broadcast.title": "E-Mail an Auswahl",
"team.broadcast.recipients": "Empfänger",
"team.broadcast.show_all": "Alle anzeigen",
"team.broadcast.mailto.label": "Im Mail-Client öffnen",
"team.broadcast.mailto.tooltip": "Öffnet den lokalen Mail-Client mit allen Empfängern in der To-Zeile",
"team.broadcast.template": "Vorlage",
"team.broadcast.template_optional": "optional",
"team.broadcast.template_freeform": "Freitext",
"team.broadcast.template.invitation": "Einladung",
"team.broadcast.template.deadline_digest": "Frist-Digest",
"team.broadcast.subject": "Betreff",
"team.broadcast.body": "Nachricht",
"team.broadcast.body_placeholder": "Hallo {{first_name}}, …",
"team.broadcast.placeholders_hint": "Platzhalter: {{name}}, {{first_name}}, {{role_on_project}}",
"team.broadcast.markdown_hint": "Markdown unterstützt: **fett**, *kursiv*, [Link](https://...), - Aufzählung.",
"team.broadcast.send": "Senden",
"team.broadcast.sending": "Sende…",
"team.broadcast.sent": "Versandt",
"team.broadcast.success": "{sent} von {total} Mails versandt ({failed} fehlgeschlagen).",
"team.broadcast.error.no_recipients": "Keine Empfänger ausgewählt.",
"team.broadcast.error.too_many": "Empfängerlimit ({cap}) überschritten.",
"team.broadcast.error.subject_required": "Betreff ist erforderlich.",
"team.broadcast.error.body_required": "Nachricht ist erforderlich.",
"common.close": "Schließen",
// Admin broadcasts viewer (t-paliad-147)
"admin.broadcasts.title": "Broadcasts — Paliad",
"admin.broadcasts.heading": "Broadcasts",
"admin.broadcasts.subtitle": "Versendete Massen-E-Mails an Teamauswahlen.",
"admin.broadcasts.col.sent_at": "Gesendet",
"admin.broadcasts.col.subject": "Betreff",
"admin.broadcasts.col.sender": "Absender:in",
"admin.broadcasts.col.count": "Empfänger",
"admin.broadcasts.loading": "Lade…",
"admin.broadcasts.empty": "Noch keine Broadcasts versandt.",
"admin.broadcasts.detail.sent_by": "Gesendet von",
"admin.broadcasts.detail.delivered": "versandt",
"admin.broadcasts.detail.failed": "fehlgeschlagen",
"admin.broadcasts.detail.recipients": "Empfänger",
// t-paliad-146: Paliadin in-app AI buddy (PoC)
"paliadin.title": "Paliadin — Paliad",
"paliadin.heading": "✨ Paliadin",
"paliadin.tagline": "Ich kenne deine Akten und Paliads Wissensbasis.",
"paliadin.empty": "Was kann ich für dich tun?",
"paliadin.starter.today": "Was steht heute an?",
"paliadin.starter.week": "Welche Fristen sind diese Woche fällig?",
"paliadin.starter.concept": "Erkläre mir Klageerwiderung.",
"paliadin.input.placeholder": "Frag den Paliadin…",
"paliadin.send": "Senden",
"paliadin.stop": "Stop",
"paliadin.reset": "Neue Unterhaltung",
"paliadin.error.local_only": "Paliadin läuft nur lokal. Diese Instanz hat kein tmux/claude installiert — lokal mit ./paliad starten.",
"paliadin.error.mriver_unreachable": "mRiver ist offline — Paliadin nicht erreichbar. Mach mRiver an, oder nutze Paliadin lokal mit ./paliad.",
"paliadin.error.shim_auth_failed": "Paliadin-Authentifizierung fehlgeschlagen. SSH-Schlüssel oder Berechtigung auf mRiver prüfen.",
"paliadin.error.shim_error": "Paliadin-Fehler auf mRiver. tmux/claude-Pane prüfen.",
"paliadin.error.timeout": "Paliadin antwortet nicht (Timeout 60s). Nochmal versuchen.",
"paliadin.error.connection_lost": "Verbindung verloren.",
"paliadin.error.upstream": "Fehler beim Senden.",
"paliadin.late.waiting": "Antwort wird nachgereicht, sobald sie eintrifft …",
"paliadin.late.marker": "verspätet",
"paliadin.widget.title": "Paliadin",
"paliadin.widget.trigger": "Paliadin (Cmd+J)",
"paliadin.widget.empty": "Was kann ich für dich tun?",
"paliadin.widget.input.placeholder": "Frage an Paliadin...",
"paliadin.widget.input.label": "Nachricht an Paliadin",
"paliadin.widget.send": "Senden",
"paliadin.widget.reset": "Konversation zurücksetzen",
"paliadin.widget.reset.confirm": "Konversation hier und auf dem Server zurücksetzen?",
"paliadin.widget.fullscreen": "Vollbild-Modus",
"paliadin.widget.close": "Schließen",
"paliadin.widget.context.on_page": "Auf dieser Seite",
"approvals.agent.label": "Paliadin hat das vorgeschlagen",
"approvals.agent.byline": "Paliadin",
"approvals.agent.suggestion_pending": "Vorschlag wartet auf deine Genehmigung",
"nav.admin.paliadin": "Paliadin Monitor",
"admin.paliadin.title": "Paliadin Monitor — Paliad",
"admin.paliadin.heading": "Paliadin Monitor",
"admin.paliadin.subtitle": "Wie wird Paliadin tatsächlich verwendet?",
"admin.paliadin.total": "Gesamt",
"admin.paliadin.last7": "Letzte 7 Tage",
"admin.paliadin.median_dur": "Median Dauer",
"admin.paliadin.tool_rate": "Tool-Use Rate",
"admin.paliadin.abandon_rate": "Abbruchrate",
"admin.paliadin.classifier_heading": "Anfragearten",
"admin.paliadin.daily_heading": "Tägliche Nutzung",
"admin.paliadin.top_heading": "Top Anfragen",
"admin.paliadin.recent_heading": "Letzte Anfragen",
"admin.paliadin.col.prompt": "Anfrage",
"admin.paliadin.col.count": "Anzahl",
"admin.paliadin.col.started": "Zeit",
"admin.paliadin.col.user": "Nutzer",
"admin.paliadin.col.classifier": "Art",
"admin.paliadin.col.response": "Antwort",
"admin.paliadin.col.tools": "Tools",
"admin.paliadin.col.origin": "Seite",
"admin.paliadin.col.duration": "Dauer",
"admin.paliadin.loading": "Lade…",
"common.forbidden": "Zugriff verweigert.",
"common.load_error": "Fehler beim Laden.",
"common.loading": "Lade…",
"partner_unit.heading": "Meine Partner Units",
"partner_unit.subtitle": "Partner Units sind strukturelle Einheiten — getrennt von Projektteams. Mitgliedschaft wird vom Admin verwaltet.",
"partner_unit.none": "Sie sind noch keiner Partner Unit zugeordnet.",
"partner_unit.members_label": "Mitglieder",
// Admin team management (t-paliad-050)
"nav.group.admin": "Admin",
"nav.admin.bereich": "Admin-Bereich",
"nav.admin.team": "Team-Verwaltung",
"admin.title": "Admin-Bereich — Paliad",
"admin.heading": "Admin-Bereich",
"admin.subtitle": "Werkzeuge zur Verwaltung von Paliad. Nur für Administrator:innen sichtbar.",
"admin.section.available": "Verfügbar",
"admin.section.planned": "Geplant",
"admin.coming_soon": "Kommt bald",
"admin.card.team.title": "Team-Verwaltung",
"admin.card.team.desc": "Benutzer:innen anlegen, bearbeiten, löschen.",
"admin.card.partner_units.title": "Partner Units",
"admin.card.partner_units.desc": "Strukturelle Partnereinheiten anlegen und Mitglieder zuordnen.",
"admin.card.audit.title": "Audit-Log",
"admin.card.audit.desc": "Wer hat wann was geändert? Nachvollziehbarkeit für sicherheitsrelevante Aktionen.",
"admin.card.email_templates.title": "Email-Templates",
"admin.card.email_templates.desc": "Vorlagen für Einladungen, Erinnerungen und Layout anpassen.",
"admin.card.feature_flags.title": "Feature-Flags",
"admin.card.feature_flags.desc": "Funktionen pro Standort, Partner Unit oder Rolle aktivieren.",
"admin.card.broadcasts.title": "Broadcasts",
"admin.card.broadcasts.desc": "Versendete Massen-E-Mails an Teamauswahlen einsehen.",
"admin.card.approval_policies.title": "Genehmigungspflichten",
"admin.card.approval_policies.desc": "4-Augen-Prüfung pro Projekt und Partner Unit konfigurieren.",
"admin.approval_policies.title": "Genehmigungspflichten — Paliad",
"admin.approval_policies.heading": "Genehmigungspflichten",
"admin.approval_policies.subtitle": "4-Augen-Prüfung pro Projekt und Partner Unit konfigurieren.",
"admin.approval_policies.loading": "Lädt …",
"admin.approval_policies.section.units": "Partner-Unit-Standards",
"admin.approval_policies.section.units.hint": "Standardregeln, die jedes Projekt erbt, das einer Partner Unit zugeordnet ist. Bei mehreren Partner Units gewinnt die strengste Regel.",
"admin.approval_policies.section.projects": "Projekt-spezifisch",
"admin.approval_policies.section.projects.hint": "Eigene Regeln für ein Projekt. Überschreiben Standards aus Partner Units und geerbte Projektregeln.",
"admin.approval_policies.units.empty": "Keine Partner Units vorhanden.",
"admin.approval_policies.picker.label": "Projekt wählen",
"admin.approval_policies.picker.placeholder": "Suchen…",
"admin.approval_policies.picker.no_results": "Keine Treffer.",
"admin.approval_policies.entity.deadline": "Fristen",
"admin.approval_policies.entity.appointment": "Termine",
"admin.approval_policies.lifecycle.create": "Erstellen",
"admin.approval_policies.lifecycle.update": "Ändern",
"admin.approval_policies.lifecycle.complete": "Erledigen",
"admin.approval_policies.lifecycle.delete": "Löschen",
"admin.approval_policies.role.partner": "Partner",
"admin.approval_policies.role.of_counsel": "Of Counsel",
"admin.approval_policies.role.associate": "Associate",
"admin.approval_policies.role.senior_pa": "Senior PA",
"admin.approval_policies.role.pa": "PA",
"admin.approval_policies.role.none": "Keine Genehmigung",
"admin.approval_policies.role.no_rule": "— keine Regel —",
"admin.approval_policies.source.project": "Projekt",
"admin.approval_policies.source.ancestor": "Geerbt",
"admin.approval_policies.source.unit_default": "Standard",
"admin.approval_policies.source.no_approval": "keine Genehmigung",
"admin.approval_policies.cell.requires": "Genehmigung erforderlich",
"admin.approval_policies.cell.clear": "—",
"admin.approval_policies.cell.clear.title": "Regel zurücksetzen (erben)",
"admin.approval_policies.cell.saved_msg": "Gespeichert.",
"admin.approval_policies.cell.error_msg": "Fehler",
"admin.approval_policies.bulk.cta": "Auf Unterprojekte anwenden",
"admin.approval_policies.bulk.no_descendants": "Keine Unterprojekte vorhanden.",
"admin.approval_policies.bulk.modal.title": "Auf Unterprojekte anwenden",
"admin.approval_policies.bulk.modal.body": "Die folgenden Unterprojekte erhalten die effektive Matrix dieses Projekts als projektspezifische Regeln. Bestehende projektspezifische Regeln werden überschrieben. Standards aus Partner Units bleiben unberührt.",
"admin.approval_policies.bulk.modal.cancel": "Abbrechen",
"admin.approval_policies.bulk.modal.confirm": "Übernehmen",
"admin.approval_policies.bulk.modal.applying": "Übernehme …",
"admin.approval_policies.bulk.modal.done": "Übernommen",
"admin.approval_policies.bulk.modal.writes_label": "Schreibvorgänge",
"admin.approval_policies.bulk.modal.targets_label": "Projekte",
"inbox.empty.admin_nudge.title": "Noch keine Genehmigungspflichten konfiguriert?",
"inbox.empty.admin_nudge.body": "Lege fest, welche Lifecycle-Events 4-Augen-Prüfung erfordern.",
"inbox.empty.admin_nudge.cta": "Genehmigungspflichten konfigurieren",
"deadlines.form.approval_hint": "4-Augen-Prüfung erforderlich",
"appointments.form.approval_hint": "4-Augen-Prüfung erforderlich",
"admin.email_templates.title": "Email-Templates — Paliad",
"admin.email_templates.heading": "Email-Templates",
"admin.email_templates.subtitle": "Vorlagen für Einladungen, Erinnerungen und das Layout-Wrapper anpassen.",
"admin.email_templates.loading": "Lade…",
"admin.email_templates.load_error": "Templates konnten nicht geladen werden.",
"admin.email_templates.back": "← Zurück zur Liste",
"admin.email_templates.lang.de": "Deutsch",
"admin.email_templates.lang.en": "Englisch",
"admin.email_templates.status.default": "Standard",
"admin.email_templates.status.last_modified": "Zuletzt geändert: {date}",
"admin.email_templates.card.invitation.title": "Einladung",
"admin.email_templates.card.invitation.desc": "E-Mail an neue Kolleg:innen, ausgelöst über die Sidebar.",
"admin.email_templates.card.deadline_digest.title": "Fristen-Sammelmail",
"admin.email_templates.card.deadline_digest.desc": "Tägliche Morgen- und Abend-Mail mit überfälligen, heute fälligen und kommenden Fristen.",
"admin.email_templates.card.base.title": "Layout-Wrapper",
"admin.email_templates.card.base.desc": "Geteilter HTML-Rahmen mit Header und Footer, der alle E-Mails umschliesst.",
"admin.email_templates.editor.title": "Email-Template bearbeiten — Paliad",
"admin.email_templates.editor.heading": "Email-Template bearbeiten",
"admin.email_templates.editor.heading_for": "{title} — {lang}",
"admin.email_templates.editor.is_default": "Aktuell wird der Standard verwendet.",
"admin.email_templates.editor.last_modified": "Zuletzt geändert: {date}",
"admin.email_templates.editor.subject": "Betreff",
"admin.email_templates.editor.body": "HTML-Body",
"admin.email_templates.editor.note_optional": "Notiz (optional)",
"admin.email_templates.editor.note_placeholder": "z.B. Korrektur nach Anwalts-Feedback",
"admin.email_templates.editor.variables": "Verfügbare Variablen",
"admin.email_templates.editor.preview": "Vorschau",
"admin.email_templates.editor.preview_refresh": "Vorschau aktualisieren",
"admin.email_templates.editor.preview_error": "Vorschau fehlgeschlagen.",
"admin.email_templates.editor.parse_error": "Template-Fehler:",
"admin.email_templates.editor.save": "Speichern",
"admin.email_templates.editor.save_ok": "Gespeichert.",
"admin.email_templates.editor.save_error": "Speichern fehlgeschlagen.",
"admin.email_templates.editor.reset": "Auf Standard zurücksetzen",
"admin.email_templates.editor.reset_confirm": "Wirklich auf den Standard zurücksetzen?",
"admin.email_templates.editor.reset_ok": "Auf Standard zurückgesetzt.",
"admin.email_templates.editor.reset_error": "Zurücksetzen fehlgeschlagen.",
"admin.email_templates.editor.versions": "Versionen",
"admin.email_templates.editor.versions_empty": "Keine Versionen.",
"admin.email_templates.editor.restore": "Wiederherstellen",
"admin.email_templates.editor.restore_confirm": "Diese Version wiederherstellen?",
"admin.email_templates.editor.restore_ok": "Version wiederhergestellt.",
"admin.email_templates.editor.restore_error": "Wiederherstellen fehlgeschlagen.",
"admin.email_templates.editor.dirty_warn": "Ungespeicherte Änderungen verwerfen?",
"admin.email_templates.editor.unknown_key": "Unbekannter Template-Schlüssel.",
"admin.email_templates.editor.slot.morning": "Morgen-Slot",
"admin.email_templates.editor.slot.evening": "Abend-Slot",
"admin.team.title": "Team-Verwaltung — Paliad",
"admin.team.heading": "Team-Verwaltung",
"admin.team.subtitle": "Alle Paliad-Konten anzeigen, bearbeiten oder hinzufügen.",
"admin.team.search.placeholder": "Nach Name oder E-Mail suchen…",
"admin.team.add.direct": "Bestehendes Konto onboarden",
"admin.team.add.invite": "Neue:n Kolleg:in einladen",
"admin.team.loading": "Lade…",
"admin.team.empty": "Keine Treffer.",
"admin.team.error.forbidden": "Zugriff nur für Admins.",
"admin.team.col.name": "Name",
"admin.team.col.email": "E-Mail",
"admin.team.col.office": "Standort",
"admin.team.col.job_title": "Berufsbezeichnung",
"admin.team.col.profession": "Profession",
"admin.team.col.profession.none": "(extern)",
"admin.team.col.profession.none.hint": "Keine Profession gesetzt — keine 4-Augen-Befugnis.",
"admin.team.col.permission": "Berechtigung",
"admin.team.col.additional": "Weitere Standorte",
"admin.team.col.lang": "Sprache",
"admin.team.col.created": "Angelegt",
"admin.team.col.actions": "Aktionen",
"admin.team.row.edit": "Bearbeiten",
"admin.team.row.delete": "Löschen",
"admin.team.row.save": "Speichern",
"admin.team.row.cancel": "Abbrechen",
"admin.team.confirm.delete": "{name} wirklich löschen? Diese Aktion ist endgültig.",
"admin.team.feedback.saved": "Gespeichert.",
"admin.team.feedback.deleted": "Gelöscht.",
"admin.team.feedback.added": "Konto onboardet.",
"admin.team.direct_add.title": "Bestehendes Konto onboarden",
"admin.team.direct_add.body": "Diese Auswahl zeigt Konten, die sich angemeldet haben, aber noch kein Profil ausgefüllt haben.",
"admin.team.direct_add.email": "E-Mail",
"admin.team.direct_add.email.placeholder": "Bitte auswählen…",
"admin.team.direct_add.empty": "Keine offenen Konten.",
"admin.team.direct_add.name": "Anzeigename",
"admin.team.direct_add.office": "Standort",
"admin.team.direct_add.job_title": "Berufsbezeichnung",
"admin.team.permission.standard": "Standard",
"admin.team.permission.global_admin": "Globaler Admin",
"admin.team.permission.last_admin": "Der letzte globale Admin kann nicht degradiert werden.",
"admin.team.direct_add.cancel": "Abbrechen",
"admin.team.direct_add.submit": "Anlegen",
// Admin audit log (t-paliad-071)
"nav.admin.audit": "Audit-Log",
"nav.admin.partner_units": "Partner Units",
"admin.audit.title": "Audit-Log — Paliad",
"admin.audit.heading": "Audit-Log",
"admin.audit.subtitle": "Globale Zeitleiste über Projekt-, CalDAV-, Reminder- und Partner-Unit-Ereignisse.",
"admin.audit.source.partner_unit_events": "Partner Units",
"admin.partner_units.title": "Partner Units — Paliad",
"admin.partner_units.heading": "Partner Units",
"admin.partner_units.subtitle": "Strukturelle Partnereinheiten verwalten und Mitglieder zuordnen.",
"admin.partner_units.loading": "Lade…",
"admin.partner_units.empty": "Noch keine Partner Units angelegt.",
"admin.partner_units.new": "Neue Partner Unit",
"admin.partner_units.new.heading": "Partner Unit anlegen",
"admin.partner_units.edit.heading": "Partner Unit bearbeiten",
"admin.partner_units.create": "Speichern",
"admin.partner_units.cancel": "Abbrechen",
"admin.partner_units.col.name": "Name",
"admin.partner_units.col.office": "Büro",
"admin.partner_units.col.lead": "Lead",
"admin.partner_units.col.members": "Mitglieder",
"admin.partner_units.col.actions": "Aktionen",
"admin.partner_units.action.members": "Mitglieder",
"admin.partner_units.action.edit": "Bearbeiten",
"admin.partner_units.action.delete": "Löschen",
"admin.partner_units.confirm_delete": "Partner Unit \"{name}\" wirklich löschen?",
"admin.partner_units.error.name_required": "Name erforderlich",
"admin.partner_units.error.user_required": "Benutzer auswählen",
"admin.partner_units.feedback.created": "Angelegt.",
"admin.partner_units.feedback.updated": "Aktualisiert.",
"admin.partner_units.feedback.deleted": "Gelöscht.",
"admin.partner_units.feedback.role_updated": "Rolle aktualisiert.",
"admin.partner_units.member.heading": "Mitglieder verwalten",
"admin.partner_units.member.empty": "Noch keine Mitglieder.",
"admin.partner_units.member.add": "Mitglied hinzufügen",
"admin.partner_units.member.add_btn": "Hinzufügen",
"admin.partner_units.member.remove": "Entfernen",
"admin.partner_units.member.confirm_remove": "Mitglied entfernen?",
"admin.partner_units.member.placeholder": "Name oder E-Mail",
"admin.partner_units.member.role": "Rolle",
"admin.audit.loading": "Lade…",
"admin.audit.empty": "Keine Ereignisse für die gewählten Filter.",
"admin.audit.loadmore": "Weitere laden",
"admin.audit.error.forbidden": "Zugriff nur für Admins.",
"admin.audit.error.unavailable": "Audit-Service nicht verfügbar.",
"admin.audit.search.placeholder": "Subjekt, Beschreibung, Ereignistyp …",
"admin.audit.filter.source": "Quelle",
"admin.audit.filter.range": "Zeitraum",
"admin.audit.filter.from": "Von",
"admin.audit.filter.to": "Bis",
"admin.audit.filter.search": "Suche",
"admin.audit.range.24h": "Letzte 24h",
"admin.audit.range.7d": "Letzte 7 Tage",
"admin.audit.range.30d": "Letzte 30 Tage",
"admin.audit.range.custom": "Benutzerdefiniert",
"admin.audit.range.all": "Alles",
"admin.audit.source.all": "Alle Quellen",
"admin.audit.source.project_events": "Projekt-Ereignisse",
"admin.audit.source.caldav_sync_log": "CalDAV-Sync",
"admin.audit.source.reminder_log": "Reminder",
"admin.audit.col.time": "Zeit",
"admin.audit.col.source": "Quelle",
"admin.audit.col.event": "Ereignis",
"admin.audit.col.actor": "Akteur",
"admin.audit.col.subject": "Subjekt",
"admin.audit.col.description": "Beschreibung",
"admin.audit.event.caldav_synced": "CalDAV-Sync erfolgreich",
"admin.audit.event.caldav_sync_error": "CalDAV-Sync-Fehler",
"admin.audit.event.morning_digest": "Morgen-Digest gesendet",
"admin.audit.event.evening_digest": "Abend-Digest gesendet",
"admin.audit.event.deadline_reminder": "Fristerinnerung gesendet",
"admin.audit.event.due_today": "Fälligkeits-Erinnerung gesendet",
"admin.audit.event.weekly": "Wochen-Digest gesendet",
// Not-found (404) page
"notfound.title": "Seite nicht gefunden — Paliad",
"notfound.heading": "Seite nicht gefunden",
"notfound.lede": "Diese Seite existiert nicht oder wurde verschoben.",
"notfound.cta": "Zurück zum Dashboard",
// t-paliad-088: Event Types — picker, multi-select filter, add modal.
"common.cancel": "Abbrechen",
"event_types.cat.submission": "Eingaben",
"event_types.cat.decision": "Entscheidungen",
"event_types.cat.order": "Anordnungen",
"event_types.cat.service": "Zustellungen",
"event_types.cat.fee": "Gebühren",
"event_types.cat.hearing": "Verhandlungen",
"event_types.cat.other": "Sonstiges",
"event_types.picker.search": "Suchen oder tippen…",
"event_types.picker.add": "+ Neuen Typ hinzufügen…",
"event_types.picker.remove": "Entfernen",
"event_types.picker.no_match": "Keine Treffer.",
"event_types.picker.browse_all": "Alle anzeigen",
"event_types.browse.title": "Event-Typen wählen",
"event_types.browse.search": "In allen Typen suchen…",
"event_types.browse.empty": "Keine Treffer.",
"event_types.browse.apply": "Übernehmen",
"event_types.browse.cancel": "Abbrechen",
"event_types.browse.selected_count": "{n} ausgewählt",
"event_types.browse.jurisdiction.none": "Allgemein",
"event_types.filter.all": "Alle Typen",
"event_types.filter.untyped": "— Ohne Typ —",
"event_types.filter.search": "Typ suchen…",
"event_types.filter.reset": "Zurücksetzen",
"event_types.filter.apply": "Anwenden",
"event_types.filter.n_selected": "{n} Typen",
"event_types.add.title": "Neuen Event-Typ anlegen",
"event_types.add.label_de": "Bezeichnung (DE) *",
"event_types.add.label_en": "Bezeichnung (EN, optional)",
"event_types.add.category": "Kategorie *",
"event_types.add.jurisdiction": "Jurisdiktion (optional)",
"event_types.add.jurisdiction.none": "—",
"event_types.add.jurisdiction.any": "Allgemein",
"event_types.add.firm_wide": "Firmenweit verfügbar machen",
"event_types.add.firm_wide.hint": "Firmenweite Typen sind für alle Kolleg:innen sichtbar. Admins können sie archivieren.",
"event_types.add.submit": "Anlegen",
"event_types.add.duplicate_warn": "Existiert vermutlich schon:",
"event_types.add.error.required": "Bezeichnung (DE) ist Pflichtfeld.",
"event_types.add.error.slug_taken": "Ein Typ mit diesem Namen existiert bereits.",
"event_types.add.error.generic": "Fehler beim Anlegen. Bitte erneut versuchen.",
"deadlines.field.event_type": "Typ (optional)",
"deadlines.col.event_type": "Typ",
"deadlines.filter.event_type": "Typ",
"agenda.filter.event_type": "Typ",
// t-paliad-089: Admin Event-Type moderation panel.
"nav.admin.event_types": "Event-Typen",
"admin.card.event_types.title": "Event-Typen",
"admin.card.event_types.desc": "Firmenweite Event-Typen moderieren: archivieren, zusammenführen, befördern.",
"admin.event_types.title": "Event-Typen — Paliad",
"admin.event_types.heading": "Event-Typen",
"admin.event_types.subtitle": "Firmenweite Event-Typen moderieren: archivieren, zusammenführen, private Typen befördern.",
"admin.event_types.section.firm_wide": "Firmenweite Typen",
"admin.event_types.section.private_pending": "Private Typen (zur Beförderung)",
"admin.event_types.section.private_pending.hint": "Private Typen anderer Kolleg:innen, sortiert nach Häufigkeit. Befördern macht den Typ firmenweit sichtbar.",
"admin.event_types.search.placeholder": "Bezeichnung, Slug oder Author suchen…",
"admin.event_types.show_archived": "Archivierte anzeigen",
"admin.event_types.loading": "Lade…",
"admin.event_types.empty": "Keine Treffer.",
"admin.event_types.private.empty": "Keine privaten Typen.",
"admin.event_types.col.label": "Bezeichnung",
"admin.event_types.col.category": "Kategorie",
"admin.event_types.col.jurisdiction": "Jurisdiktion",
"admin.event_types.col.author": "Author",
"admin.event_types.col.created": "Erstellt",
"admin.event_types.col.usage": "Verwendung",
"admin.event_types.col.actions": "Aktionen",
"admin.event_types.row.archived": "Archiviert",
"admin.event_types.author.system": "System",
"admin.event_types.author.unknown": "Unbekannt",
"admin.event_types.action.archive": "Archivieren",
"admin.event_types.action.archive_selected": "Ausgewählte archivieren",
"admin.event_types.action.merge_selected": "Zusammenführen…",
"admin.event_types.action.restore": "Wiederherstellen",
"admin.event_types.action.promote": "Befördern",
"admin.event_types.bulk.count": "{n} ausgewählt",
"admin.event_types.confirm.archive": "„{label}\" wirklich archivieren?",
"admin.event_types.confirm.bulk_archive": "{n} Typen wirklich archivieren?",
"admin.event_types.confirm.promote": "„{label}\" firmenweit verfügbar machen?",
"admin.event_types.confirm.merge": "„{winner}\" als Gewinner: {n} Verlierer-Typ(en) werden archiviert, {usage} Junction-Eintrag/-träge umgeleitet. Fortfahren?",
"admin.event_types.feedback.archived": "{n} archiviert.",
"admin.event_types.feedback.archive_error": "Archivierung fehlgeschlagen.",
"admin.event_types.feedback.restored": "Wiederhergestellt.",
"admin.event_types.feedback.restore_error": "Wiederherstellung fehlgeschlagen.",
"admin.event_types.feedback.promoted": "Befördert.",
"admin.event_types.feedback.promote_error": "Beförderung fehlgeschlagen.",
"admin.event_types.feedback.merged": "Zusammengeführt.",
"admin.event_types.feedback.merge_error": "Zusammenführung fehlgeschlagen.",
"admin.event_types.error.forbidden": "Zugriff nur für Admins.",
"admin.event_types.merge.title": "Typen zusammenführen",
"admin.event_types.merge.body": "Wählen Sie den Gewinner-Typ. Die Junction-Einträge der Verlierer werden auf den Gewinner umgeleitet, anschließend werden die Verlierer archiviert.",
"admin.event_types.merge.submit": "Zusammenführen",
// Approval workflow (t-paliad-138).
"approvals.title": "Genehmigungen",
"approvals.heading": "Genehmigungen",
"approvals.subtitle": "4-Augen-Prüfung für Fristen und Termine.",
"approvals.tab.pending_mine": "Zur Genehmigung",
"approvals.tab.mine": "Meine Anfragen",
"approvals.empty.pending_mine": "Aktuell nichts zu genehmigen.",
"approvals.empty.mine": "Sie haben keine offenen Anfragen.",
"approvals.lifecycle.create": "Erstellung",
"approvals.lifecycle.update": "Änderung",
"approvals.lifecycle.complete": "Erledigung",
"approvals.lifecycle.delete": "Löschung",
"approvals.entity.deadline": "Frist",
"approvals.entity.appointment": "Termin",
"approvals.required_role.lead": "Lead",
"approvals.required_role.of_counsel": "Of Counsel",
"approvals.required_role.associate": "Associate",
"approvals.required_role.senior_pa": "Senior PA",
"approvals.required_role.pa": "PA",
"approvals.status.pending": "Offen",
"approvals.status.approved": "Genehmigt",
"approvals.status.rejected": "Abgelehnt",
"approvals.status.revoked": "Zurückgezogen",
"approvals.status.superseded": "Ersetzt",
"approvals.action.approve": "Genehmigen",
"approvals.action.reject": "Ablehnen",
"approvals.action.revoke": "Zurückziehen",
"approvals.note.placeholder": "Optionale Begründung...",
"approvals.requested_by": "Eingereicht von",
"approvals.decided_by": "Entschieden von",
"approvals.decision_kind.peer": "Genehmigt durch Teammitglied",
"approvals.decision_kind.admin_override": "Admin-Sign-off",
"approvals.decision_kind.derived_peer": "Genehmigt durch abgeleitetes Mitglied (Partner Unit)",
"approvals.error.self_approval": "Eigengenehmigung nicht zulässig.",
"approvals.error.not_authorized": "Sie haben nicht die erforderliche Rolle.",
"approvals.error.no_qualified_approver": "Kein qualifizierter Approver verfügbar — bitte einen Approver ins Projekt-Team aufnehmen oder Admin kontaktieren.",
"approvals.error.concurrent_pending": "Es liegt bereits eine Genehmigungsanfrage auf diesem Eintrag vor.",
"approvals.error.awaiting_approval": "Diese Anforderung wartet auf Genehmigung.",
"approvals.error.request_not_pending": "Diese Anfrage ist nicht mehr offen.",
"approvals.pending.badge": "Wartet auf Genehmigung",
"approvals.withdraw.cta": "Genehmigungsanfrage zurückziehen",
"approvals.withdraw.confirm": "Genehmigungsanfrage wirklich zurückziehen?",
"approvals.withdraw.error": "Fehler beim Zurückziehen",
"approvals.pending_create.label": "Erstellung wartet auf Genehmigung",
"approvals.pending_update.label": "Änderung wartet auf Genehmigung",
"approvals.pending_complete.label": "Erledigung wartet auf Genehmigung",
"approvals.pending_delete.label": "Zur Löschung beantragt",
"approvals.diff.before": "Vorher",
"approvals.diff.after": "Nachher",
"approvals.policies.title": "Genehmigungsrichtlinien",
"approvals.policies.subtitle": "Welche Lebenszyklus-Schritte benötigen 4-Augen-Prüfung in diesem Projekt?",
"approvals.policies.column.event": "Ereignis",
"approvals.policies.column.deadline": "Frist",
"approvals.policies.column.appointment": "Termin",
"approvals.policies.no_approval": "Keine Genehmigung erforderlich",
"approvals.policies.copy_parent": "Aus Eltern-Projekt übernehmen",
"approvals.policies.set_all_associate": "Alle auf Associate setzen",
// t-paliad-144 — Custom Views
"nav.group.user_views": "Meine Ansichten",
"nav.user_views.new": "Neue Ansicht",
"views.title": "Ansichten — Paliad",
"views.heading": "Ansichten",
"views.subtitle": "Eigene Ansichten über Ihre Daten — Filter und Darstellung speicherbar.",
"views.loading": "Lädt …",
"views.shape.list": "Liste",
"views.shape.cards": "Karten",
"views.shape.calendar": "Kalender",
"views.save_as": "Als Ansicht speichern",
"views.action.edit": "Bearbeiten",
"views.empty.title": "Keine Einträge gefunden.",
"views.error.back": "Zurück zur Ansichten-Übersicht",
"views.error.not_found": "Ansicht nicht gefunden.",
"views.error.network": "Netzwerkfehler — bitte erneut versuchen.",
"views.toast.inaccessible_one": "1 Projekt in dieser Ansicht ist nicht mehr sichtbar.",
"views.toast.inaccessible_n": "{n} Projekte in dieser Ansicht sind nicht mehr sichtbar.",
"views.calendar.mobile_fallback": "Kalender-Ansicht ist auf grossen Bildschirmen am besten.",
"views.onboarding.title": "Eigene Ansichten — was ist das?",
"views.onboarding.body": "Eine Ansicht ist eine gespeicherte Filterkombination — z.B. „Fristen meiner Projekte in den nächsten 14 Tagen“. Ansichten erscheinen als eigene Buttons in der Sidebar.",
"views.onboarding.create": "Beispiel-Ansicht erstellen",
"views.source.deadline": "Fristen",
"views.source.appointment": "Termine",
"views.source.project_event": "Projekt-Verlauf",
"views.source.approval_request": "Genehmigungen",
"views.kind.deadline": "Frist",
"views.kind.appointment": "Termin",
"views.kind.project_event": "Verlauf",
"views.kind.approval_request": "Genehmigung",
"views.scope.all_visible": "Alle sichtbaren",
"views.scope.my_subtree": "Mein Teilbaum",
"views.scope.explicit": "Bestimmte Projekte",
"views.scope.personal_only": "Nur persönliche",
"views.horizon.next_7d": "Nächste 7 Tage",
"views.horizon.next_30d": "Nächste 30 Tage",
"views.horizon.next_90d": "Nächste 90 Tage",
"views.horizon.past_30d": "Letzte 30 Tage",
"views.horizon.past_90d": "Letzte 90 Tage",
"views.horizon.any": "Beliebig",
"views.horizon.all": "Komplett (alle Daten)",
"views.horizon.custom": "Benutzerdefiniert",
"views.density.comfortable": "Bequem",
"views.density.compact": "Kompakt",
"views.col.date": "Datum",
"views.col.time": "Wann",
"views.col.title": "Titel",
"views.col.project": "Projekt",
"views.col.actor": "Akteur",
"views.col.status": "Status",
"views.col.rule": "Regel",
"views.col.event_type": "Typ",
"views.col.location": "Ort",
"views.col.appointment_type": "Termin-Typ",
"views.col.approval_status": "Genehmigung",
"views.col.decided_by": "Entschieden von",
"views.col.kind": "Art",
"views.editor.title": "Ansicht bearbeiten — Paliad",
"views.editor.heading.new": "Neue Ansicht",
"views.editor.heading.edit": "Ansicht bearbeiten",
"views.editor.subtitle": "Wählen Sie Quellen, Filter und Darstellung. Änderungen speichern Sie unten.",
"views.editor.section.identity": "Bezeichnung",
"views.editor.section.sources": "Quellen",
"views.editor.section.scope": "Geltungsbereich",
"views.editor.section.time": "Zeitraum",
"views.editor.section.render": "Darstellung",
"views.editor.field.name": "Name",
"views.editor.field.slug": "Slug (URL)",
"views.editor.field.icon": "Icon",
"views.editor.field.show_count": "Treffer-Anzahl in der Sidebar anzeigen",
"views.editor.field.scope_mode": "Projekte",
"views.editor.field.personal_only": "Nur persönliche",
"views.editor.field.horizon": "Horizont",
"views.editor.field.shape": "Form",
"views.editor.field.density": "Dichte",
"views.editor.hint.slug": "Kleinbuchstaben, Ziffern und Bindestriche — nicht reservierte Wörter.",
"views.editor.hint.sources": "Welche Datenarten zeigt diese Ansicht?",
"views.editor.icon.default": "Standard (Ordner)",
"views.editor.icon.clock": "Uhr",
"views.editor.icon.calendar": "Kalender",
"views.editor.icon.bell": "Glocke",
"views.editor.icon.folder": "Ordner",
"views.editor.icon.users": "Personen",
"views.editor.icon.building": "Gebäude",
"views.editor.save": "Speichern",
"views.editor.cancel": "Abbrechen",
"views.editor.delete": "Löschen",
"views.editor.confirm_delete": "Diese Ansicht wirklich löschen?",
"views.editor.error.name_required": "Name ist erforderlich.",
"views.editor.error.slug_format": "Slug darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und muss mit einem Buchstaben oder einer Ziffer beginnen.",
"views.editor.error.sources_required": "Mindestens eine Quelle wählen.",
"views.editor.error.load_failed": "Ansicht konnte nicht geladen werden.",
"views.editor.error.delete_failed": "Ansicht konnte nicht gelöscht werden.",
// Universal FilterBar — t-paliad-163. Mounted on every list-shaped
// surface (starts with /inbox in Phase 1; /agenda + /events follow).
"views.bar.label.time": "Zeitraum",
"views.bar.label.personal": "Eigene",
"views.bar.label.approval_role": "Sicht",
"views.bar.label.approval_status": "Status",
"views.bar.label.approval_entity": "Art",
"views.bar.label.deadline_status": "Frist-Status",
"views.bar.label.appointment_type": "Termin-Typ",
"views.bar.label.project_event_kind": "Ereignis",
"views.bar.label.shape": "Darstellung",
"views.bar.label.density": "Dichte",
"views.bar.label.sort": "Sortierung",
"views.bar.common.all": "Alle",
"views.bar.time.next_7d": "7 Tage",
"views.bar.time.next_30d": "30 Tage",
"views.bar.time.next_90d": "90 Tage",
"views.bar.time.past_7d": "Letzte 7 T.",
"views.bar.time.past_30d": "Letzte 30 T.",
"views.bar.time.past_90d": "Letzte 90 T.",
"views.bar.time.any": "Beliebig",
"views.bar.time.all": "Alle Zeit",
"views.bar.time.custom": "Anpassen",
"views.bar.time.custom.coming_soon": "Benutzerdefinierter Zeitraum folgt in einer der nächsten Iterationen.",
"views.bar.personal.on": "Nur eigene",
"views.bar.approval_role.approver_eligible": "Zur Genehmigung",
"views.bar.approval_role.self_requested": "Eigene Anfragen",
"views.bar.approval_role.any_visible": "Alle sichtbaren",
"views.bar.approval_status.pending": "Wartend",
"views.bar.approval_status.approved": "Genehmigt",
"views.bar.approval_status.rejected": "Abgelehnt",
"views.bar.approval_status.revoked": "Zurückgezogen",
"views.bar.approval_entity.deadline": "Frist",
"views.bar.approval_entity.appointment": "Termin",
"views.bar.deadline_status.pending": "Offen",
"views.bar.deadline_status.completed": "Erledigt",
"views.bar.appointment_type.hearing": "Verhandlung",
"views.bar.appointment_type.meeting": "Besprechung",
"views.bar.appointment_type.consultation": "Beratung",
"views.bar.appointment_type.deadline_hearing": "Mündliche Verhandlung",
"views.bar.shape.list": "Liste",
"views.bar.shape.cards": "Karten",
"views.bar.shape.calendar": "Kalender",
"views.bar.density.comfortable": "Bequem",
"views.bar.density.compact": "Kompakt",
"views.bar.sort.date_asc": "Datum aufsteigend",
"views.bar.sort.date_desc": "Datum absteigend",
"views.bar.action.reset": "Zurücksetzen",
"views.bar.action.save_as_view": "Als Sicht speichern",
"views.bar.save.heading": "Sicht speichern",
"views.bar.save.field.name": "Name",
"views.bar.save.field.slug": "Slug",
"views.bar.save.field.slug_hint": "Wird Teil der URL: /views/<slug>",
"views.bar.save.field.show_count": "Anzahl in der Sidebar zeigen",
"views.bar.save.cancel": "Abbrechen",
"views.bar.save.confirm": "Speichern",
"views.bar.save.error.name_required": "Bitte Namen vergeben.",
"views.bar.save.error.slug_format": "Slug muss mit einem Buchstaben oder einer Ziffer beginnen und darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten.",
"views.bar.save.error.slug_taken": "Dieser Slug ist bereits vergeben.",
"views.bar.save.error.network": "Netzwerkfehler — bitte erneut versuchen.",
},
en: {
// Navigation
"nav.home": "Home",
"nav.kostenrechner": "Cost Calculator",
"nav.fristenrechner": "Deadline Calculator",
"nav.verfahrensablauf": "Procedure Roadmap",
"nav.downloads": "Downloads",
"nav.links": "Links",
"nav.glossar": "Glossary",
"nav.gebuehrentabellen": "Fee Schedules",
"nav.checklisten": "Checklists",
"nav.gerichte": "Courts",
"nav.logout": "Sign Out",
"nav.akten": "Matters",
"nav.projekte": "Projects",
"nav.fristen": "Deadlines",
"nav.termine": "Appointments",
"nav.dashboard": "Dashboard",
"nav.agenda": "Agenda",
"nav.inbox": "Approvals",
"nav.paliadin": "Paliadin",
"nav.team": "Team",
"nav.group.uebersicht": "Overview",
"nav.group.ansichten": "Views",
"nav.group.werkzeuge": "Tools",
"nav.neuigkeiten": "What's New",
"nav.soon.tooltip": "Coming soon",
// Theme toggle (m/paliad#2)
"theme.toggle.auto": "Auto",
"theme.toggle.light": "Light",
"theme.toggle.dark": "Dark",
"theme.toggle.cycle.auto": "Switch to light theme",
"theme.toggle.cycle.light": "Switch to dark theme",
"theme.toggle.cycle.dark": "Switch to auto (system)",
// BottomNav (mobile)
"bottomnav.add": "New",
"bottomnav.menu": "Menu",
"bottomnav.add.title": "Quick add",
"bottomnav.add.deadline": "New deadline",
"bottomnav.add.deadline.sub": "Deadline with date & project",
"bottomnav.add.appointment": "New appointment",
"bottomnav.add.appointment.sub": "Appointment with time & place",
"bottomnav.add.project": "New project",
"bottomnav.add.project.sub": "New matter / case / patent",
"bottomnav.add.cancel": "Cancel",
"bottomnav.badge.deadlines": "{overdue} overdue + {today} due today",
// Changelog (What's New) — t-paliad-027
"changelog.title": "What's New — Paliad",
"changelog.heading": "What's New",
"changelog.subtitle": "Recent changes and additions in Paliad.",
"changelog.empty": "Nothing here yet.",
"changelog.tag.feature": "New",
"changelog.tag.content": "Content",
"changelog.tag.fix": "Fix",
// Footer
"footer.text": "\u00a9 2026 Paliad \u2014 a tool by",
// Landing page
"index.title": `Paliad \u2014 Patent Litigation for ${FIRM}`,
"index.hero.accent": `for ${FIRM}`,
"index.hero.sub": `Administration, knowledge, and tools for the ${FIRM} patent team.`,
"index.guides.title": "Guides",
"index.guides.desc": "Practical guides for proceedings before the EPO, Federal Patent Court, and UPC. Step-by-step instructions for typical workflows.",
"index.templates.title": "Templates",
"index.templates.desc": `Standardised templates for briefs, correspondence, and internal documents. ${FIRM} Patents Style Guide.`,
"index.documents.title": "Documents",
"index.documents.desc": "Reference materials, checklists, and practical aids for day-to-day patent practice.",
"index.tools": "Tools",
"index.cost.title": "Cost Calculator",
"index.cost.desc": "Estimate litigation costs for DE courts, UPC, and EPA proceedings. Court and attorney fees at a glance.",
"index.deadline.title": "Deadline Calculator",
"index.deadline.desc": "Calculate procedural deadlines for UPC, German, and EPA proceedings with holiday adjustment.",
"index.glossar.title": "Patent Glossary",
"index.glossar.desc": "Bilingual DE/EN glossary of key patent law terminology. Searchable by category.",
"index.downloads": "Downloads",
"index.style.title": `${FIRM} Patents Style`,
"index.style.desc": `Word template in ${FIRM} Patents style. Formatting, fonts, and macros for standardised briefs.`,
"index.offices": "Offices",
"index.office.munich": "Munich",
"index.office.duesseldorf": "D\u00fcsseldorf",
"index.office.hamburg": "Hamburg",
"index.office.amsterdam": "Amsterdam",
"index.office.london": "London",
"index.office.paris": "Paris",
"index.office.milan": "Milan",
// Login
"login.title": "Sign In \u2014 Paliad",
"login.tab.login": "Sign In",
"login.tab.register": "Register",
"login.email": "Email",
"login.password": "Password",
"login.password.placeholder": "Password",
"login.submit": "Sign In",
"login.confirm": "Confirm Password",
"login.confirm.placeholder": "Repeat password",
"login.minchars": "Min. 8 characters",
"login.register.submit": "Register",
"login.hint": `Only for authorised ${FIRM} email addresses.`,
"login.error.connection": "Connection error. Please try again.",
"login.error.mismatch": "Passwords do not match.",
"login.error.minlength": "Password must be at least 8 characters.",
"login.success.created": "Account created. Please sign in.",
// Kostenrechner
"kosten.title": "Cost Calculator \u2014 Paliad",
"kosten.heading": "Patent Litigation Cost Calculator",
"kosten.subtitle": "Estimate litigation costs for patent infringement, nullity, and EPA proceedings.",
"kosten.streitwert": "Dispute Value",
"kosten.vat": "VAT",
"kosten.vat.foreign": "0% (Foreign)",
"kosten.de.infringement": "DE Infringement Proceedings",
"kosten.de.nullity": "DE Nullity Proceedings",
"kosten.upc": "UPC",
"kosten.epa": "EPO",
"kosten.inst.lg": "Regional Court (Infringement 1st Instance)",
"kosten.inst.olg": "Higher Regional Court (Appeal)",
"kosten.inst.bgh_nzb": "Federal Court (Leave to Appeal)",
"kosten.inst.bgh_rev": "Federal Court (Revision)",
"kosten.inst.bpatg": "Federal Patent Court (Nullity)",
"kosten.inst.bgh_nullity": "Federal Court (Nullity Appeal)",
"kosten.inst.upc_first": "UPC (First Instance)",
"kosten.inst.upc_appeal": "UPC (Appeal)",
"kosten.inst.epa_opposition": "Opposition",
"kosten.inst.epa_appeal": "Appeal from Opposition",
"kosten.fee.version": "Fee version:",
"kosten.fee.schedule": "Fee schedule:",
"kosten.fee.from2026": "From 2026",
"kosten.fee.pre2026": "Before 2026",
"kosten.fee.current": "Current (2025)",
"kosten.attorneys": "Attorneys:",
"kosten.patent.attorneys": "Patent Attorneys:",
"kosten.clients": "Clients:",
"kosten.oral.hearing": "Oral hearing",
"kosten.revocation": "Revocation counterclaim",
"kosten.total": "Total Cost",
"kosten.empty": "Select at least one instance.",
"kosten.print": "Print",
"kosten.court.fees": "Court Fees",
"kosten.attorney.fees": "Attorney Fees",
"kosten.patent.attorney.fees": "Patent Attorney Fees",
"kosten.epa.fees": "EPO Fees",
"kosten.attorney.label": "Attorney",
"kosten.patent.attorney.label": "Patent Attorney",
"kosten.detail.procedure": "Procedure fee",
"kosten.detail.increase": "Increase",
"kosten.detail.hearing": "Hearing fee",
"kosten.detail.lump": "Lump sum",
"kosten.detail.vat": "VAT",
"kosten.detail.total": "Total",
"kosten.upc.fixed": "Fixed fee",
"kosten.upc.value": "Value-based fee",
"kosten.upc.court.total": "Court fees total",
"kosten.upc.sme": "SME reduction",
"kosten.upc.recoverable": "Recoverable costs (ceiling)",
"kosten.epa.official": "Official fee",
"kosten.epa.note": "Attorney costs based on time spent (not RVG-based).",
"kosten.share": "Copy Link",
"kosten.share.copied": "Link copied!",
"kosten.compare": "Compare",
"kosten.compare.exit": "Exit Comparison",
"kosten.scenario.a": "Scenario A",
"kosten.scenario.b": "Scenario B",
"kosten.scenario.diff": "Difference",
"kosten.print.title": "Cost Calculation",
"kosten.print.date": "Date",
"kosten.print.streitwert": "Dispute Value",
"kosten.print.vat": "VAT Rate",
"kosten.print.instances": "Instances",
"kosten.print.disclaimer": "This document is for internal use only and does not constitute legal advice. All figures are estimates.",
// Fristenrechner
"deadlines.title": "Deadline Calculator \u2014 Paliad",
"deadlines.heading": "Patent Deadline Calculator",
"deadlines.subtitle": "Calculate procedural deadlines for UPC, German, and EPA proceedings.",
"deadlines.step1": "Select Proceeding Type",
"deadlines.step2": "Enter Trigger Date",
"deadlines.step3": "Result",
"deadlines.upc": "UPC",
"deadlines.de": "German Courts",
"deadlines.epa": "EPO",
"deadlines.dpma": "DPMA",
"deadlines.dpma_opp": "Opposition DPMA",
"deadlines.dpma_bpatg_beschwerde": "Appeal BPatG (DPMA)",
"deadlines.dpma_bgh_rb": "Legal Appeal BGH",
"deadlines.trigger.event": "Trigger event:",
"deadlines.trigger.date": "Date:",
"deadlines.trigger.label": "Trigger date",
"deadlines.priority.date": "Priority date (optional):",
"deadlines.court.label": "Court:",
"deadlines.flag.ccr": "Counterclaim for revocation filed",
"deadlines.flag.inf_amend": "Application to amend the patent filed (R.30)",
"deadlines.flag.rev_amend": "Application to amend the patent filed (R.49.2.a)",
"deadlines.flag.rev_cci": "Counterclaim for infringement filed (R.49.2.b)",
"deadlines.calculate": "Calculate Deadlines",
"deadlines.print": "Print",
"deadlines.reset": "\u2190 Start Over",
"deadlines.upc_inf": "Infringement",
"deadlines.upc_rev": "Revocation",
"deadlines.upc_pi": "Provisional Measures",
"deadlines.upc_app": "Appeal",
"deadlines.upc_damages": "Damages Determination",
"deadlines.upc_discovery": "Lay-open Books",
"deadlines.upc_cost_appeal": "Cost-Decision Appeal",
"deadlines.upc_app_orders": "Order Appeal (15-day)",
"deadlines.de_inf": "Infringement (Regional Court)",
"deadlines.de_inf_olg": "Appeal OLG",
"deadlines.de_inf_bgh": "Revision / NZB BGH",
"deadlines.de_null": "Nullity",
"deadlines.de_null_bgh": "Appeal BGH (Nullity)",
"deadlines.epa_opp": "Opposition",
"deadlines.epa_app": "Appeal",
"deadlines.ep_grant": "Grant Procedure",
"deadlines.party.claimant": "Claimant",
"deadlines.party.defendant": "Defendant",
"deadlines.party.court": "Court",
"deadlines.party.both": "Both",
"deadlines.party.both.label": "both parties",
"deadlines.court.set": "set by court",
"deadlines.court.indirect": "tbd",
"deadlines.optional.badge": "on request",
"deadlines.proceeding.selected": "Proceeding:",
"deadlines.proceeding.reselect": "Choose another proceeding",
"deadlines.step1.heading": "Step 1 — Which matter?",
"deadlines.step1.search.placeholder": "Search matters…",
"deadlines.step1.search.empty": "No matching matter.",
"deadlines.step1.divider.new": "or a new matter",
"deadlines.step1.divider.adhoc": "or ad-hoc, without a matter",
"deadlines.step1.new.cta": "+ Create new matter",
"deadlines.step1.adhoc.upc": "Custom UPC proceeding",
"deadlines.step1.adhoc.de": "Custom DE proceeding",
"deadlines.step1.adhoc.epa": "Custom EPA proceeding",
"deadlines.step1.adhoc.dpma": "Custom DPMA proceeding",
"deadlines.step1.selected": "Matter:",
"deadlines.step1.reselect": "Other matter",
"deadlines.step1.summary.adhoc.suffix": "no matter (exploration)",
"deadlines.step2.heading": "Step 2 — What do you want to do?",
"deadlines.step2.file.title": "File something",
"deadlines.step2.file.desc": "Outgoing — your action triggers a deadline.",
"deadlines.step2.happened.title": "Something happened",
"deadlines.step2.happened.desc": "Incoming — an event triggered a deadline.",
"deadlines.step2.browse.title": "Browse procedure roadmap",
"deadlines.step2.browse.desc": "Browse / Learn — see what happens when. No deadline entered.",
"deadlines.save.cta.adhoc.hint": "Ad-hoc — no matter, no save",
"deadlines.step3a.heading": "What do you want to file?",
"deadlines.step3a.back": "back to selection",
"deadlines.step3a.file.title": "File a submission",
"deadlines.step3a.file.desc": "Open the Verfahrensablauf — compute deadline and add to the matter.",
"deadlines.step3a.draft.title": "Draft a submission",
"deadlines.step3a.draft.desc": "Preparation — later linked to the drafting surface.",
"deadlines.step3a.enter.title": "Enter deadline manually",
"deadlines.step3a.enter.desc": "Direct entry — date and type already known.",
"deadlines.step3a.soon": "coming soon",
"deadlines.date.edit.hint": "Edit date — downstream deadlines will recalculate",
"deadlines.view.label": "View:",
"deadlines.view.timeline": "Timeline",
"deadlines.view.columns": "Columns",
"deadlines.col.proactive": "Proactive",
"deadlines.col.court": "Court",
"deadlines.col.reactive": "Reactive",
"deadlines.col.both": "Both parties",
"deadlines.adjusted": "Adjusted",
"deadlines.adjusted.reason": "weekend/holiday",
"deadlines.adjusted.weekend": "weekend",
"deadlines.adjusted.weekend.saturday": "Saturday",
"deadlines.adjusted.weekend.sunday": "Sunday",
"deadlines.adjusted.holiday": "{name} holiday",
"deadlines.adjusted.vacation": "{name} ({span})",
// Trigger-event mode (PR-2 — youpc-parity)
"deadlines.mode.procedure": "Course of proceedings",
"deadlines.mode.event": "What comes after…",
"deadlines.event.step1": "Select trigger event",
"deadlines.event.step1.hint": "Which event happened? (e.g. statement of claim, EPO decision, notification of an order)",
"deadlines.event.step2": "Event date",
"deadlines.event.step3": "Follow-up deadlines",
"deadlines.event.search.label": "Search trigger event",
"deadlines.event.search.placeholder": "Type to search…",
"deadlines.event.empty": "No matching events",
"deadlines.event.loading": "Loading…",
"deadlines.event.error": "Could not load events",
"deadlines.event.selected": "Selected event:",
"deadlines.event.date": "Event date:",
"deadlines.event.calculate": "Calculate follow-up deadlines",
"deadlines.event.noresults": "No follow-up deadlines configured for this event.",
"deadlines.event.results.trigger": "Trigger:",
"deadlines.event.results.date": "Date:",
"deadlines.event.adjusted": "Adjusted from",
"deadlines.search.label": "Search a deadline",
"deadlines.search.placeholder": "Statement of Defence, RoP 23, § 82, Re-establishment…",
"deadlines.search.chips.label": "Quick picks:",
"deadlines.search.empty": "Type a phrase or pick a chip below.",
"deadlines.search.loading": "Searching…",
"deadlines.search.no_hits": "No matching deadlines found.",
"deadlines.search.aliases": "Also known as:",
"deadlines.search.pills.heading": "In these proceedings:",
"deadlines.search.pills.cross_cutting": "Cross-cutting:",
"deadlines.search.pill.duration": "Duration:",
"deadlines.search.party.claimant": "Claimant",
"deadlines.search.party.defendant": "Defendant",
"deadlines.search.party.both": "both sides",
"deadlines.search.party.court": "Court",
"deadlines.search.results.count": "{n} hits",
"deadlines.search.results.count_one": "1 hit",
"deadlines.search.clear": "Clear search",
// Fristenrechner — card-click → calc panel → add-to-project (t-paliad-136 Phase B)
"deadlines.card.calc.expand_hint": "Calculate deadline or add to project",
"deadlines.card.calc.close": "close",
"deadlines.card.calc.pill_picker.label": "Which context?",
"deadlines.card.calc.trigger.label": "Date of triggering event",
"deadlines.card.calc.flags.label": "Conditions:",
"deadlines.card.calc.flag.with_ccr": "With counterclaim for revocation",
"deadlines.card.calc.flag.with_amend": "With application to amend",
"deadlines.card.calc.flag.with_cci": "With counterclaim for infringement",
"deadlines.card.calc.result.due": "Deadline:",
"deadlines.card.calc.result.original_from": "from",
"deadlines.card.calc.result.from_trigger": "from",
"deadlines.card.calc.result.shifted_from": "Shifted from",
"deadlines.card.calc.result.shifted_because": "due to",
"deadlines.card.calc.result.court_set": "Court-determined — no calculable date.",
"deadlines.card.calc.result.calculating": "Calculating…",
"deadlines.card.calc.result.error": "Calculation failed.",
"deadlines.card.calc.add_to_project": "Add to project",
"deadlines.card.calc.add_to_project.disabled": "Court-determined — add manually",
"deadlines.pathway.fork.heading": "What would you like to do?",
"deadlines.pathway.a.title": "Browse a proceeding",
"deadlines.pathway.a.desc": "Pick a proceeding type and see all its deadlines on a single timeline.",
"deadlines.pathway.b.title": "File a deadline based on an event",
"deadlines.pathway.b.desc": "Something happened — find the right deadline for the matter.",
"deadlines.pathway.shortcut.label": "or jump straight to a deadline:",
"deadlines.pathway.back": "back to selection",
"deadlines.pathway.b.mode.tree": "Step-by-step (decision tree)",
"deadlines.pathway.b.mode.filter": "Filter / Search",
"deadlines.pathway.b.tree.coming_soon": "The decision tree is coming soon. Switch to \"Filter / Search\" or return to selection.",
"deadlines.pathway.b.tree.step.back": "step back",
"deadlines.pathway.b.tree.empty": "No matches for this path.",
"deadlines.pathway.b.tree.reset": "Restart",
"deadlines.pathway.b.tree.start_question": "What happened?",
"deadlines.inbox.label": "Where did it arrive?",
"deadlines.inbox.cms.title": "UPC — via CMS",
"deadlines.inbox.bea.title": "National-DE — via beA",
"deadlines.inbox.posteingang.title": "National-DE — postal mail",
"deadlines.inbox.posteingang": "Postal",
"deadlines.inbox.all": "All",
"deadlines.filter.forum.label": "Forum / System:",
"deadlines.filter.forum.upc_cfi": "UPC CFI",
"deadlines.filter.forum.upc_coa": "UPC CoA",
"deadlines.filter.forum.de_lg": "DE LG",
"deadlines.filter.forum.de_olg": "DE OLG",
"deadlines.filter.forum.de_bgh": "DE BGH",
"deadlines.filter.forum.de_bpatg": "DE BPatG",
"deadlines.filter.forum.epa_grant": "EPO Examining",
"deadlines.filter.forum.epa_opp": "EPO Opposition",
"deadlines.filter.forum.epa_appeal": "EPO Board of Appeal",
"deadlines.filter.forum.dpma": "DPMA",
"deadlines.perspective.label": "I represent:",
"deadlines.perspective.claimant": "Claimant side (Proactive)",
"deadlines.perspective.defendant": "Defendant side (Reactive)",
"deadlines.perspective.claimant.short": "Claimant",
"deadlines.perspective.defendant.short": "Defendant",
"deadlines.perspective.both.short": "Both",
"deadlines.perspective.claimant.title": "Claimant side — hides typical defendant submissions",
"deadlines.perspective.defendant.title": "Defendant side — hides typical claimant submissions",
"deadlines.perspective.appeal_filed_by.label": "Appeal filed by:",
"deadlines.perspective.predefined_hint": "predefined from project",
"deadlines.event.composite.label": "Composite:",
"deadlines.event.unit.days.one": "day",
"deadlines.event.unit.days.many": "days",
"deadlines.event.unit.weeks.one": "week",
"deadlines.event.unit.weeks.many": "weeks",
"deadlines.event.unit.months.one": "month",
"deadlines.event.unit.months.many": "months",
"deadlines.event.unit.working_days.one": "working day",
"deadlines.event.unit.working_days.many": "working days",
"deadlines.event.timing.before": "before",
"deadlines.event.timing.after": "after",
// Downloads
"downloads.title": "Downloads \u2014 Paliad",
"downloads.heading": "Downloads",
"downloads.subtitle": `Files and templates for the ${FIRM} patent team.`,
"downloads.style.title": `${FIRM} Patents Style`,
"downloads.style.desc": `Word template in ${FIRM} Patents style. Formatting, fonts, and macros for standardised briefs.`,
"downloads.btn": "Download",
// Links
"links.title": "Links \u2014 Paliad",
"links.heading": "Links",
"links.subtitle": "Useful external links for daily patent practice.",
"links.filter.all": "All",
"links.search.placeholder": "Search by title, description...",
"links.empty": "No links in this category.",
"links.suggest.btn": "Suggest a Link",
"links.suggest.title": "Suggest a Link",
"links.suggest.name": "Title",
"links.suggest.category": "Category",
"links.suggest.desc": "Description",
"links.suggest.submit": "Submit",
"links.suggest.cancel": "Cancel",
"links.suggest.success": "Thank you! Your suggestion will be reviewed.",
"links.suggest.error": "Error saving. Please try again.",
"links.pending": "suggestions pending review",
"links.feedback.title": "Feedback",
"links.feedback.type": "Type",
"links.feedback.broken": "Link broken",
"links.feedback.outdated": "Outdated",
"links.feedback.update": "Needs updating",
"links.feedback.other": "Other",
"links.feedback.message": "Message",
"links.feedback.placeholder": "What's wrong? (e.g. link broken, outdated...)",
"links.feedback.submit": "Submit",
"links.feedback.success": "Thank you for your feedback!",
// Glossar
"glossar.title": "Patent Glossary \u2014 Paliad",
"glossar.heading": "Patent Glossary",
"glossar.subtitle": "Bilingual glossary of key patent law terminology.",
"glossar.search.placeholder": "Search...",
"glossar.filter.all": "All",
"glossar.filter.litigation": "Litigation",
"glossar.filter.prosecution": "Prosecution",
"glossar.filter.general": "General",
"glossar.col.de": "German",
"glossar.col.en": "English",
"glossar.col.definition": "Definition",
"glossar.empty": "No matches found.",
"glossar.suggest": "Suggest a term",
"glossar.suggest.title": "Suggest a new term",
"glossar.suggest.de": "German term",
"glossar.suggest.en": "English term",
"glossar.suggest.definition": "Definition (optional)",
"glossar.suggest.category": "Category",
"glossar.suggest.cancel": "Cancel",
"glossar.suggest.submit": "Submit",
"glossar.suggest.success": "Suggestion submitted. Thank you!",
"glossar.suggest.error.required": "Please enter both DE and EN terms.",
"glossar.suggest.error.generic": "Error submitting. Please try again.",
"glossar.feedback.title": "Suggest a correction",
"glossar.feedback.tooltip": "Suggest a correction",
// Geb\u00fchrentabellen
"gebuehren.title": "Fee Schedules \u2014 Paliad",
"gebuehren.heading": "Fee Schedules",
"gebuehren.subtitle": "Interactive fee schedules for GKG, RVG, UPC, EPO, and PatKostG.",
"gebuehren.streitwert": "Dispute Value (EUR)",
"gebuehren.streitwert.placeholder": "e.g. 1,000,000",
"gebuehren.lookup": "Look up",
"gebuehren.current": "Current",
"gebuehren.col.streitwert": "Dispute Value (EUR)",
"gebuehren.col.fee": "1.0 Fee (EUR)",
"gebuehren.col.maxvalue": "up to value (EUR)",
"gebuehren.col.courtfee": "Court Fee (EUR)",
"gebuehren.upc.valuebased": "Value-based Fees",
"gebuehren.upc.recoverable": "Recoverable Costs (Ceiling)",
"gebuehren.upc.ceiling": "Ceiling (EUR)",
"gebuehren.epa.proceeding": "Proceeding",
"gebuehren.epa.fee": "Fee (EUR)",
"gebuehren.epa.smefee": "SME Fee (EUR)",
"gebuehren.multipliers.title": "Fee Multipliers",
"gebuehren.multipliers.desc": "Factors for calculating court and attorney fees per instance.",
"gebuehren.multipliers.instance": "Instance",
"gebuehren.multipliers.courtfee": "Court",
"gebuehren.multipliers.factor": "Factor",
"gebuehren.multipliers.basis": "Basis",
"gebuehren.patkostg.court": "Court Fees (BPatG / BGH)",
"gebuehren.patkostg.dpma": "DPMA Fees",
"gebuehren.patkostg.annual": "Annual Renewal Fees (Patent)",
"gebuehren.patkostg.year": "Patent Year",
"gebuehren.patkostg.note": "Note",
"gebuehren.patkostg.item": "Fee Item",
"gebuehren.feedback.btn": "Feedback",
"gebuehren.feedback.title": "Fee Schedule Feedback",
"gebuehren.feedback.type": "Type",
"gebuehren.feedback.error": "Error found",
"gebuehren.feedback.missing": "Missing data",
"gebuehren.feedback.suggestion": "Improvement suggestion",
"gebuehren.feedback.other": "Other",
"gebuehren.feedback.schedule": "Regarding",
"gebuehren.feedback.general": "General",
"gebuehren.feedback.message": "Message",
"gebuehren.feedback.submit": "Submit",
"gebuehren.feedback.cancel": "Cancel",
"gebuehren.feedback.success": "Thank you for your feedback!",
"gebuehren.feedback.error.required": "Please enter a message.",
"gebuehren.feedback.error.generic": "Error submitting. Please try again.",
// Index \u2014 Geb\u00fchrentabellen card
"index.gebuehren.title": "Fee Schedules",
"index.gebuehren.desc": "Interactive fee schedules for GKG, RVG, UPC, EPO, and PatKostG. Enter a dispute value, read the fee.",
// Checklisten
"index.checklisten.title": "Checklists",
"index.checklisten.desc": "Interactive filing checklists for UPC, German, and EPO proceedings. Multiple instances per template, linkable to an Akte.",
"checklisten.title": "Checklists \u2014 Paliad",
"checklisten.heading": "Checklists",
"checklisten.subtitle": "Interactive checklists for typical procedural steps before the UPC, German Patent Court, and EPO. Tick off, print, miss nothing.",
"checklisten.tab.templates": "Templates",
"checklisten.tab.instances": "Existing instances",
"checklisten.instances.all.loading": "Loading…",
"checklisten.instances.all.empty": "No checklist instances yet. Create one from the Templates tab.",
"checklisten.instances.all.col.template": "Template",
"checklisten.instances.all.col.name": "Name",
"checklisten.instances.all.col.project": "Project",
"checklisten.instances.all.col.progress": "Progress",
"checklisten.instances.all.col.created": "Created",
"checklisten.instances.all.personal": "Personal",
"checklisten.filter.all": "All",
"checklisten.filter.de": "DE",
"checklisten.empty": "No checklists in this category.",
"checklisten.back": "Back to overview",
"checklisten.print": "Print",
"checklisten.reset": "Reset",
"checklisten.reset.confirm": "Really reset all checkboxes for this instance?",
"checklisten.reset.error": "Reset failed. Please try again.",
"checklisten.notfound": "Checklist not found.",
"checklisten.newInstance": "New instance",
"checklisten.newInstance.title": "New checklist instance",
"checklisten.newInstance.name": "Name",
"checklisten.newInstance.name.hint": "e.g. \u201CMueller v. Schmidt \u2014 SoC\u201D.",
"checklisten.newInstance.akte": "Akte (optional)",
"checklisten.newInstance.akte.none": "\u2014 no Akte \u2014",
"checklisten.newInstance.akte.hint": "When linked, office colleagues can see the instance.",
"checklisten.newInstance.cancel": "Cancel",
"checklisten.newInstance.submit": "Create",
"checklisten.newInstance.error.name": "Please enter a name.",
"checklisten.newInstance.error.generic": "Failed to create instance. Please try again.",
"checklisten.instances.heading": "Instances",
"checklisten.instances.sub": "Each instance tracks its own progress and can optionally be linked to an Akte.",
"checklisten.instances.loading": "Loading\u2026",
"checklisten.instances.empty": "No instances yet. Click \u201CNew instance\u201D to start.",
"checklisten.instances.col.name": "Name",
"checklisten.instances.col.progress": "Progress",
"checklisten.instances.col.akte": "Akte",
"checklisten.instances.col.created": "Created",
"checklisten.instances.delete.confirm": "Really delete instance \u201C{name}\u201D?",
"checklisten.instances.delete.error": "Failed to delete.",
"checklisten.instance.title": "Checklist instance \u2014 Paliad",
"checklisten.instance.back": "Back to template",
"checklisten.instance.loading": "Loading\u2026",
"checklisten.instance.notfound": "Instance not found or not authorised.",
"checklisten.instance.rename": "Rename",
"checklisten.instance.rename.save": "Save",
"checklisten.instance.rename.error": "Rename failed.",
"checklisten.instance.akte.open": "Open",
"checklisten.disclaimer": "Note: These checklists are aides-memoire only and do not replace case-by-case review. The applicable procedural rules are controlling.",
"checklisten.feedback.btn": "Feedback",
"checklisten.feedback.title": "Checklist feedback",
"checklisten.feedback.type": "Type",
"checklisten.feedback.error": "Error found",
"checklisten.feedback.missing": "Missing item",
"checklisten.feedback.suggestion": "Improvement suggestion",
"checklisten.feedback.other": "Other",
"checklisten.feedback.message": "Message",
"checklisten.feedback.submit": "Submit",
"checklisten.feedback.cancel": "Cancel",
"checklisten.feedback.success": "Thank you for your feedback!",
"checklisten.feedback.error.required": "Please enter a message.",
"checklisten.feedback.error.generic": "Error submitting. Please try again.",
// Gerichte
"gerichte.title": "Court Directory \u2014 Paliad",
"gerichte.heading": "Court Directory",
"gerichte.subtitle": "Contacts, addresses, and filing details for courts, divisions, and offices relevant to patent practice.",
"gerichte.search.placeholder": "Search by name, city, type...",
"gerichte.filter.type": "Type:",
"gerichte.filter.country": "Country:",
"gerichte.filter.all": "All",
"gerichte.filter.de": "Germany",
"gerichte.filter.epa": "EPO",
"gerichte.filter.national": "National",
"gerichte.empty": "No matches found.",
"gerichte.field.address": "Address",
"gerichte.field.contact": "Contact",
"gerichte.field.fax": "Fax",
"gerichte.field.filing": "Filing",
"gerichte.field.notes": "Practical notes",
"gerichte.field.hlContact": `${FIRM} contact`,
"gerichte.feedback.btn": "Suggest a correction",
"gerichte.feedback.title": "Suggest a correction",
"gerichte.feedback.court": "Court",
"gerichte.feedback.type": "Type of feedback",
"gerichte.feedback.type.address": "Address / contact details",
"gerichte.feedback.type.filing": "Filing details",
"gerichte.feedback.type.notes": "Practical notes",
"gerichte.feedback.type.missing": "Missing court",
"gerichte.feedback.type.other": "Other",
"gerichte.feedback.message": "Message",
"gerichte.feedback.cancel": "Cancel",
"gerichte.feedback.submit": "Submit",
"gerichte.feedback.success": "Thank you \u2014 your feedback has been recorded.",
"gerichte.feedback.error.required": "Please enter a message.",
"gerichte.feedback.error.generic": "Error submitting. Please try again.",
// Index \u2014 Gerichte card
"index.gerichte.title": "Court Directory",
"index.gerichte.desc": "Courts, UPC divisions and patent offices at a glance \u2014 addresses, filing details, and languages.",
// Akten (matters) \u2014 list
"projects.filter.office": "Office",
"projects.filter.office.all": "All offices",
"projects.filter.status.completed": "Completed",
"projects.status.active": "Active",
"projects.status.completed": "Completed",
"projects.status.archived": "Archived",
"projects.col.ref": "Reference",
"projects.col.office": "Office",
"projects.onboarding.required": "Please complete onboarding before creating matters.",
// Akten \u2014 create form
"projects.field.ref": "Reference number",
"projects.field.ref.placeholder": `e.g. ${FIRM}-2026-0042`,
"projects.field.office": "Owning office",
"projects.field.courtRef": "Court reference (optional)",
"projects.field.akteType": "Proceeding type (optional)",
"projects.field.firmWide": "Firm-wide visible",
"projects.field.firmWide.hint": "When enabled, all lawyers can see this matter. Partners/admins only.",
"projects.field.collaborators": "Additional collaborators (optional)",
"projects.field.collaborators.placeholder": "Type a name or email\u2026",
"projects.field.collaborators.hint": "Users who should also have access (including cross-office).",
"projects.error.required": "Title and reference are required.",
"projects.error.generic": "Error creating matter. Please try again.",
"projects.error.forbidden": "Not allowed. Check your role and office.",
// Akten \u2014 detail
"projects.detail.firmwide.on": "Firm-wide visible",
"projects.detail.firmwide.off": "Office-only",
"projects.detail.checklisten.hint": "Instances are created on the template page under \"Checklists\".",
"projects.detail.verlauf.loadingMore": "Loading \u2026",
"projects.detail.parteien.remove": "Remove",
"projects.detail.parteien.remove.confirm": "Really remove this party?",
// Phase E — Fristen (persistent deadlines)
"deadlines.list.title": "Deadlines \u2014 Paliad",
"deadlines.list.heading": "Deadlines",
"deadlines.list.subtitle": "Persistent deadlines for your matters. Overdue, today, this week, next week \u2014 at a glance.",
"deadlines.list.new": "New deadline",
"deadlines.list.calendar": "Calendar view",
"deadlines.summary.overdue": "Overdue",
"deadlines.summary.today": "Today",
"deadlines.summary.thisweek": "This week",
"deadlines.summary.nextweek": "Next week",
"deadlines.summary.completed": "Done",
"deadlines.summary.later": "Later",
"deadlines.filter.status": "Status",
"deadlines.filter.akte": "Matter",
"deadlines.filter.all": "All (open & completed)",
"deadlines.filter.pending": "All open",
"deadlines.filter.overdue": "Overdue",
"deadlines.filter.today": "Today",
"deadlines.filter.thisweek": "This week",
"deadlines.filter.nextweek": "Next week",
"deadlines.filter.completed": "Done",
"deadlines.filter.later": "Later",
"deadlines.filter.akte.all": "All matters",
"deadlines.col.due": "Due",
"deadlines.col.title": "Title",
"deadlines.col.akte": "Matter",
"deadlines.col.rule": "Rule",
"deadlines.col.status": "Status",
"deadlines.empty.title": "No deadlines yet",
"deadlines.empty.hint": "Once deadlines are added or imported from the calculator, they appear here.",
"deadlines.empty.filtered": "No deadlines match these filters.",
"deadlines.unavailable": "Deadline management currently unavailable \u2014 please contact your administrator.",
"deadlines.status.pending": "Open",
"deadlines.status.completed": "Completed",
"deadlines.status.cancelled": "Cancelled",
"deadlines.status.waived": "Waived",
"deadlines.urgency.overdue": "Overdue",
"deadlines.urgency.today": "Today",
"deadlines.urgency.soon": "Soon",
"deadlines.urgency.later": "Later",
"deadlines.complete.action": "Complete",
// t-paliad-139 \u2014 subtree aggregation toggle and attribution chip
"aggregation.toggle.subtree": "Incl. sub-projects",
"aggregation.toggle.direct_only": "Direct only",
"aggregation.attribution.on": "on",
// t-paliad-139 Phase 2 \u2014 Team-tab subsections + Partner Units management
"projects.team.section.from_descendants": "From sub-projects",
"projects.team.section.from_descendants.hint": "People directly staffed on a sub-project who are not on this project or an ancestor.",
"projects.team.section.derived": "Derived (Partner Unit)",
"projects.team.section.derived.hint": "Members active on this project via an attached partner unit.",
"projects.team.section.units": "Partner Units",
"projects.team.section.units.hint": "Partner units attached to this project. Members in the listed unit roles auto-derive.",
"projects.team.derived.from": "via",
"projects.team.derived.visibility": "View",
"projects.team.derived.authority": "View & 4-eye",
"projects.team.derived.authority.hint": "Authority: derived members count as approvers.",
"projects.team.units.attach": "Attach partner unit",
"projects.team.units.detach": "Remove",
"projects.team.units.choose": "Select a unit\u2026",
"projects.team.units.select": "Unit",
"projects.team.units.derive_roles": "Which unit roles should derive?",
"projects.team.units.grants_authority": "Grant authority (4-eye)",
"projects.team.units.col.name": "Unit",
"projects.team.units.col.derive_roles": "Derived roles",
"projects.team.units.col.authority": "Authority",
"projects.team.units.members": "members",
"projects.team.units.empty": "No partner units attached.",
"projects.team.units.confirm_detach": "Remove partner unit?",
"unit_role.lead": "Lead",
"unit_role.attorney": "Attorney",
"unit_role.senior_pa": "Senior PA",
"unit_role.pa": "PA",
"unit_role.paralegal": "Paralegal",
"deadlines.neu.title": "New deadline \u2014 Paliad",
"deadlines.neu.heading": "Create new deadline",
"deadlines.neu.subtitle": "A persistent deadline attached to a matter. Visible to anyone who can see that matter.",
"deadlines.neu.back": "\u2190 Back to list",
"deadlines.neu.cancel": "Cancel",
"deadlines.neu.submit": "Create deadline",
"deadlines.field.akte": "Matter",
"deadlines.field.akte.choose": "Please choose\u2026",
"deadlines.field.akte.empty": "You don't have any matters yet. Please create one first.",
"deadlines.field.akte.empty.link": "Create matter",
"deadlines.field.title": "Title",
"deadlines.field.title.placeholder": "e.g. File statement of defence",
"deadlines.field.due": "Due date",
"deadlines.field.rule": "Rule (optional)",
"deadlines.field.rule.none": "No rule",
"deadlines.field.rule.autofill": "Type set by rule — remove to override.",
"deadlines.field.rule.autofill_inline": " (set by rule)",
"deadlines.field.rule.mismatch": "Note: type contradicts rule — you have overridden the type.",
"deadlines.field.rule.override": "Choose another type",
"deadlines.field.notes": "Notes (optional)",
"deadlines.field.notes.placeholder": "References, hints, next steps\u2026",
"deadlines.error.required": "Matter, title and due date are required.",
"deadlines.error.generic": "Error creating deadline. Please try again.",
"deadlines.detail.title": "Deadline \u2014 Paliad",
"deadlines.detail.back": "\u2190 Back to deadlines",
"deadlines.detail.loading": "Loading\u2026",
"deadlines.detail.notfound": "Deadline not found or not accessible.",
"deadlines.detail.complete": "Mark as completed",
"deadlines.detail.completed.already": "Already completed",
"deadlines.detail.reopen": "Reopen",
"deadlines.action.reopen": "Reopen",
"deadlines.detail.edit": "Edit",
"deadlines.detail.save": "Save",
"deadlines.detail.cancel": "Cancel",
"deadlines.detail.delete": "Delete deadline",
"deadlines.detail.delete.confirm.title": "Really delete this deadline?",
"deadlines.detail.delete.confirm.body": "The deadline will be permanently removed. The entry in the matter activity log is preserved.",
"deadlines.detail.delete.confirm.cancel": "Cancel",
"deadlines.detail.delete.confirm.ok": "Delete",
"deadlines.detail.due": "Due date",
"deadlines.detail.rule": "Rule",
"deadlines.detail.source": "Source",
"deadlines.detail.notes": "Notes",
"deadlines.detail.created": "Created",
"deadlines.detail.completed": "Completed on",
"deadlines.source.manual": "Manual",
"deadlines.source.fristenrechner": "Calculator",
"deadlines.source.caldav": "CalDAV",
"deadlines.source.imported": "Import",
"deadlines.kalender.title": "Deadline calendar \u2014 Paliad",
"deadlines.kalender.heading": "Deadline calendar",
"deadlines.kalender.subtitle": "Monthly view of all deadlines on your matters.",
"deadlines.kalender.list": "List view",
"deadlines.kalender.today": "Today",
"deadlines.kalender.empty": "No deadlines in the selected period.",
"cal.day.mon": "Mon",
"cal.day.tue": "Tue",
"cal.day.wed": "Wed",
"cal.day.thu": "Thu",
"cal.day.fri": "Fri",
"cal.day.sat": "Sat",
"cal.day.sun": "Sun",
"cal.month.0": "January",
"cal.month.1": "February",
"cal.month.2": "March",
"cal.month.3": "April",
"cal.month.4": "May",
"cal.month.5": "June",
"cal.month.6": "July",
"cal.month.7": "August",
"cal.month.8": "September",
"cal.month.9": "October",
"cal.month.10": "November",
"cal.month.11": "December",
// Akten detail — Fristen tab (Phase E)
// Fristenrechner — save to Akte (Phase E)
"deadlines.save.cta": "Save as deadline(s)",
"deadlines.save.modal.title": "Import deadlines",
"deadlines.save.modal.akte": "Matter",
"deadlines.save.modal.akte.choose": "Please choose\u2026",
"deadlines.save.modal.choose": "Select which deadlines to import:",
"deadlines.save.modal.cancel": "Cancel",
"deadlines.save.modal.submit": "Import",
"deadlines.save.modal.no_akten": "You don't have any matters yet. Please create one first.",
"deadlines.save.modal.no_akten.link": "Create matter",
"deadlines.save.success": "Deadlines imported.",
"deadlines.save.success.link": "Open deadlines",
"deadlines.save.error": "Import failed.",
"deadlines.save.skip_court_set": "Court-set entries with no date will be skipped.",
// Office labels (shared)
"office.munich": "Munich",
"office.duesseldorf": "D\u00fcsseldorf",
"office.hamburg": "Hamburg",
"office.amsterdam": "Amsterdam",
"office.london": "London",
"office.paris": "Paris",
"office.milan": "Milan",
// Dashboard (logged-in landing)
"dashboard.title": "Dashboard \u2014 Paliad",
"dashboard.greeting.prefix": "Hello",
"dashboard.unavailable": "Dashboard requires the database \u2014 contact an administrator.",
"dashboard.onboarding": "Please complete onboarding before deadlines and matters are shown.",
"dashboard.summary.heading": "Deadlines at a glance",
"dashboard.summary.overdue": "Overdue",
"dashboard.summary.today": "Today",
"dashboard.summary.this_week": "This week",
"dashboard.summary.next_week": "Next week",
"dashboard.summary.completed": "Done",
"dashboard.summary.later": "Later",
"dashboard.appointment_summary.heading": "Appointments at a glance",
"dashboard.matters.heading": "My matters",
"dashboard.matters.active": "Active",
"dashboard.matters.archived": "Archived",
"dashboard.matters.total": "Total",
"dashboard.deadlines.heading": "Upcoming deadlines",
"dashboard.deadlines.empty": "No deadlines in the next 7 days.",
"dashboard.appointments.heading": "Upcoming appointments",
"dashboard.appointments.empty": "No appointments in the next 7 days.",
"dashboard.activity.heading": "Recent activity",
"dashboard.activity.empty": "No activity recorded yet.",
"dashboard.activity.system": "System",
"dashboard.activity.event": "event",
"dashboard.agenda.heading": "Agenda",
"dashboard.agenda.empty": "Nothing due in the next 30 days.",
"dashboard.agenda.full_link": "Open full agenda →",
"dashboard.section.collapse": "Collapse section",
"dashboard.section.expand": "Expand section",
"dashboard.urgency.overdue": "Overdue",
"dashboard.urgency.today": "Today",
"dashboard.urgency.urgent": "Urgent",
"dashboard.urgency.soon": "Soon",
"dashboard.when.today": "today",
"dashboard.when.tomorrow": "tomorrow",
"dashboard.action.short.project_created": "created project",
"dashboard.action.short.project_archived": "archived project",
"dashboard.action.short.project_reparented": "re-parented project",
"dashboard.action.short.project_type_changed": "changed project type",
"dashboard.action.short.status_changed": "changed status",
"dashboard.action.short.our_side_changed": "changed represented side",
"dashboard.action.short.visibility_changed": "changed visibility",
"dashboard.action.short.collaborators_updated": "updated collaborators",
"dashboard.action.short.note_created": "added note",
"dashboard.action.short.deadline_created": "added deadline",
"dashboard.action.short.deadline_updated": "updated deadline",
"dashboard.action.short.deadline_completed": "completed deadline",
"dashboard.action.short.deadline_reopened": "reopened deadline",
"dashboard.action.short.deadline_deleted": "deleted deadline",
"dashboard.action.short.deadline_project_changed": "moved deadline",
"dashboard.action.short.deadlines_imported": "imported deadlines",
"dashboard.action.short.appointment_created": "added appointment",
"dashboard.action.short.appointment_updated": "updated appointment",
"dashboard.action.short.appointment_deleted": "deleted appointment",
"dashboard.action.short.appointment_project_changed": "moved appointment",
// Localized event-row title for the project Verlauf tab — full noun
// phrase ("Deadline updated") complementing the dashboard's verb form.
"event.title.project_created": "Project created",
"event.title.project_archived": "Project archived",
"event.title.project_reparented": "Project re-parented",
"event.title.project_type_changed": "Project type changed",
"event.title.status_changed": "Status changed",
"event.title.our_side_changed": "Represented side changed",
"event.title.note_created": "Note added",
"event.title.deadline_created": "Deadline created",
"event.title.deadline_updated": "Deadline updated",
"event.title.deadline_completed": "Deadline completed",
"event.title.deadline_reopened": "Deadline reopened",
"event.title.deadline_deleted": "Deadline deleted",
"event.title.deadline_project_changed": "Deadline moved",
"event.title.deadlines_imported": "Deadlines imported",
"event.title.appointment_created": "Appointment created",
"event.title.appointment_updated": "Appointment updated",
"event.title.appointment_deleted": "Appointment deleted",
"event.title.appointment_project_changed": "Appointment moved",
// 4-eye approval lifecycle (t-paliad-138).
"event.title.deadline_approval_requested": "Approval requested",
"event.title.deadline_approval_approved": "Approval granted",
"event.title.deadline_approval_rejected": "Approval rejected",
"event.title.deadline_approval_revoked": "Request revoked",
"event.title.appointment_approval_requested": "Approval requested",
"event.title.appointment_approval_approved": "Approval granted",
"event.title.appointment_approval_rejected": "Approval rejected",
"event.title.appointment_approval_revoked": "Request revoked",
"event.description.deadline_approval_requested": "Four-eyes approval requested for deadline",
"event.description.deadline_approval_approved": "Deadline approval granted",
"event.description.deadline_approval_rejected": "Deadline approval rejected",
"event.description.deadline_approval_revoked": "Deadline approval request revoked",
"event.description.appointment_approval_requested": "Four-eyes approval requested for appointment",
"event.description.appointment_approval_approved": "Appointment approval granted",
"event.description.appointment_approval_rejected": "Appointment approval rejected",
"event.description.appointment_approval_revoked": "Appointment approval request revoked",
"dashboard.action.short.deadline_approval_requested": "requested approval",
"dashboard.action.short.deadline_approval_approved": "approved deadline",
"dashboard.action.short.deadline_approval_rejected": "rejected deadline",
"dashboard.action.short.deadline_approval_revoked": "revoked request",
"dashboard.action.short.appointment_approval_requested": "requested approval",
"dashboard.action.short.appointment_approval_approved": "approved appointment",
"dashboard.action.short.appointment_approval_rejected": "rejected appointment",
"dashboard.action.short.appointment_approval_revoked": "revoked request",
"event.title.checklist_created": "Checklist created",
"event.title.checklist_renamed": "Checklist renamed",
"event.title.checklist_linked": "Checklist linked",
"event.title.checklist_unlinked": "Checklist unlinked",
"event.title.checklist_reset": "Checklist reset",
"event.title.checklist_deleted": "Checklist deleted",
// Note-parent slugs for note_created descriptions
// ("Note added to deadline"). Used by translateEventDescription().
"event.note.parent.project": "project",
"event.note.parent.deadline": "deadline",
"event.note.parent.appointment": "appointment",
"event.note.added_to": "Note added to {parent}",
// Localized full-sentence descriptions for the project Verlauf and the
// dashboard activity feed. Stored descriptions carry just the variable
// payload (title/count/slugs); the renderer interpolates here.
"event.description.deadline_created": "Deadline “{title}” added",
"event.description.deadline_updated": "Deadline “{title}” updated",
"event.description.deadline_completed": "Deadline “{title}” completed",
"event.description.deadline_reopened": "Deadline “{title}” reopened",
"event.description.deadline_deleted": "Deadline “{title}” deleted",
"event.description.deadline_project_changed": "Deadline “{title}” moved to another matter",
"event.description.deadlines_imported": "{count} deadlines imported from Fristenrechner",
"event.description.appointment_created": "Appointment “{title}” added",
"event.description.appointment_updated": "Appointment “{title}” updated",
"event.description.appointment_deleted": "Appointment “{title}” deleted",
"event.description.appointment_project_changed": "Appointment “{title}” moved to another matter",
"dashboard.action.short.checklist_created": "added checklist",
"dashboard.action.short.checklist_renamed": "renamed checklist",
"dashboard.action.short.checklist_unlinked": "unlinked checklist",
"dashboard.action.short.checklist_linked": "linked checklist",
"dashboard.action.short.checklist_reset": "reset checklist",
"dashboard.action.short.checklist_deleted": "deleted checklist",
"dashboard.action.short.partei_added": "added party",
"dashboard.action.short.partei_removed": "removed party",
// Legacy event types kept so historical project_events rows render cleanly
// (writes switched to English in t-paliad-037).
"dashboard.action.short.akte_created": "created matter",
"dashboard.action.short.akte_archived": "archived matter",
"dashboard.action.short.projekt_created": "created matter",
"dashboard.action.short.projekt_archived": "archived matter",
"dashboard.action.short.projekt_reparented": "re-parented matter",
"dashboard.action.short.notiz_created": "added note",
"dashboard.action.short.frist_created": "added deadline",
"dashboard.action.short.frist_updated": "updated deadline",
"dashboard.action.short.frist_completed": "completed deadline",
"dashboard.action.short.frist_deleted": "deleted deadline",
"dashboard.action.short.fristen_imported": "imported deadlines",
"dashboard.action.short.termin_created": "added appointment",
"dashboard.action.short.termin_updated": "updated appointment",
"dashboard.action.short.termin_deleted": "deleted appointment",
"dashboard.action.short.checkliste_created": "added checklist",
"dashboard.action.short.checkliste_renamed": "renamed checklist",
"dashboard.action.short.checkliste_unlinked": "unlinked checklist",
"dashboard.action.short.checkliste_linked": "linked checklist",
"dashboard.action.short.checkliste_reset": "reset checklist",
"dashboard.action.short.checkliste_deleted": "deleted checklist",
// Onboarding (first-login profile capture)
"onboarding.title": "Welcome \u2014 Paliad",
"onboarding.heading": "Welcome to Paliad",
"onboarding.lede": "Please complete your profile so that matters, deadlines, and appointments can be shown.",
"onboarding.display_name": "Display name",
"onboarding.display_name.placeholder": "First and last name",
"onboarding.office": "Office",
"onboarding.office.placeholder": "Please select",
"onboarding.job_title": "Job title",
"onboarding.job_title.placeholder": "e.g. Associate, Partner, Patent Attorney",
"onboarding.profession": "Profession",
"onboarding.profession.hint": "Structured tier — drives the 4-eye approval ladder. Distinct from job title.",
"onboarding.partner_unit": "Partner Unit",
"onboarding.partner_unit.unassigned": "(not assigned yet)",
"onboarding.optional": "(optional)",
"onboarding.submit": "Create profile",
"onboarding.error.display_name": "Please enter a display name.",
"onboarding.error.office": "Please select an office.",
"onboarding.error.job_title": "Please enter a job title.",
"onboarding.error.generic": "Could not create profile.",
"onboarding.error.connection": "Connection error. Please try again.",
// Termine + CalDAV (Phase F)
"nav.group.einstellungen": "Settings",
"nav.einstellungen": "Settings",
"nav.caldav": "CalDAV",
// Global search (t-paliad-026)
"search.placeholder": "Search...",
"search.no_results": "No results",
"search.group.projects": "Projects",
"search.group.deadlines": "Deadlines",
"search.group.appointments": "Appointments",
"search.group.glossary": "Glossary",
"search.group.courts": "Courts",
"search.group.checklists": "Checklists",
"search.group.links": "Links",
"search.group.users": "Colleagues",
// Command palette (t-paliad-044)
"palette.section.actions": "Actions",
"palette.action.nav.dashboard": "Go to Dashboard",
"palette.action.nav.projects": "Go to Projects",
"palette.action.nav.deadlines": "Go to Deadlines",
"palette.action.nav.appointments": "Go to Appointments",
"palette.action.nav.agenda": "Go to Agenda",
"palette.action.nav.team": "Go to Team",
"palette.action.nav.glossary": "Go to Glossary",
"palette.action.nav.courts": "Go to Courts",
"palette.action.nav.links": "Go to Links",
"palette.action.nav.checklists": "Go to Checklists",
"palette.action.nav.downloads": "Go to Downloads",
"palette.action.nav.settings": "Go to Settings",
"palette.action.create.deadline": "New deadline",
"palette.action.create.appointment": "New appointment",
"palette.action.create.project": "New project",
"palette.action.toggle.lang": "Toggle language",
"palette.action.toggle.pin": "Pin / unpin sidebar",
"palette.action.app.invite": "Invite a colleague",
"palette.action.app.logout": "Logout",
"palette.footer.navigate": "Navigate",
"palette.footer.open": "Open",
"palette.footer.close": "Close",
"sidebar.resize.title": "Resize \u2014 drag, double-click to reset",
// Settings page (t-paliad-022)
"einstellungen.title": "Settings \u2014 Paliad",
"einstellungen.heading": "Settings",
"einstellungen.subtitle": "Profile, notifications, and calendar sync.",
"einstellungen.loading": "Loading\u2026",
"einstellungen.optional": "(optional)",
"einstellungen.save": "Save",
"einstellungen.saved": "Saved.",
"einstellungen.error.generic": "Save failed. Please try again.",
"einstellungen.tab.profil": "Profile",
"einstellungen.tab.benachrichtigungen": "Notifications",
"einstellungen.tab.caldav": "CalDAV",
"projects.title": "Projects \u2014 Paliad",
"projects.heading": "Projects",
"projects.subtitle": "Clients, litigations, patents and cases \u2014 organised hierarchically.",
"projects.new": "New project",
"projects.search.placeholder": "Title, reference or ClientMatter...",
"projects.filter.type": "Type",
"projects.filter.type.all": "All types",
"projects.filter.status": "Status",
"projects.filter.status.all": "All statuses",
"projects.filter.status.active": "Active",
"projects.filter.status.archived": "Archived",
"projects.filter.status.closed": "Closed",
"projects.filter.view": "View",
"projects.view.flat": "Flat list",
"projects.view.roots": "Roots only",
"projects.unavailable": "Project management is currently unavailable \u2014 please contact an administrator.",
"projects.col.title": "Title",
"projects.col.type": "Type",
"projects.col.reference": "Reference",
"projects.col.clientmatter": "ClientMatter",
"projects.col.status": "Status",
"projects.col.updated": "Last modified",
"projects.empty.title": "No projects yet",
"projects.empty.hint": "Start via \u201cNew project\u201d \u2014 create a client first, then litigations, patents and cases underneath.",
"projects.empty.filtered": "No matches for these filters.",
"projects.cancel": "Cancel",
"projects.submit": "Create project",
"projects.neu.title": "New project \u2014 Paliad",
"projects.neu.heading": "Create a new project",
"projects.neu.subtitle": "Client, litigation, patent, case or generic project \u2014 place it in the hierarchy. Visibility follows the team (you are auto-added as \u201cLead\u201d).",
"projects.field.type": "Type",
"projects.field.type.choose": "Please choose…",
"projects.field.parent": "Parent project",
"projects.field.parent.placeholder": "Type to search for a parent project...",
"projects.field.parent.hint": "Leave blank for a root project (typically a client).",
"projects.field.title": "Title",
"projects.field.title.placeholder": "e.g. Siemens AG | Siemens v. Huawei | EP 1 234 567",
"projects.field.reference": "Internal reference (optional)",
"projects.field.reference.placeholder": `e.g. ${FIRM}-2026-0042`,
"projects.field.client_number": "Client no. (7 digits)",
"projects.field.matter_number": "Matter no. (7 digits)",
"projects.field.clientmatter.hint": `${FIRM} billing numbers. Format CCCCCCC.MMMMMMM. Client no. is inherited by sub-projects (overridable).`,
"projects.field.billing_reference": "Billing reference (optional)",
"projects.field.netdocuments_url": "netDocuments URL (optional)",
"projects.field.industry": "Industry",
"projects.field.country": "Country (ISO-2)",
"projects.field.description": "Notes",
"projects.field.description.placeholder": "Short notes about the project (optional)...",
"projects.detail.description.heading": "Notes",
"projects.field.patent_number": "Patent number",
"projects.field.filing_date": "Filing date",
"projects.field.grant_date": "Grant date",
"projects.field.court": "Court",
"projects.field.case_number": "Case number (court)",
"projects.field.proceeding_type_id": "Proceeding type",
"projects.field.our_side": "We represent",
"projects.field.our_side.hint": "Pre-selects the perspective chip in the Fristenrechner Determinator. Always overridable from there.",
"projects.field.our_side.unset": "Unknown / not set",
"projects.field.our_side.claimant": "Claimant side",
"projects.field.our_side.defendant": "Defendant side",
"projects.field.our_side.court": "Court / tribunal",
"projects.field.our_side.both": "Both sides",
"projects.field.our_side.none": "—",
"projects.field.status": "Status",
"projects.error.title_required": "Title required",
"projects.detail.edit.type_change_warning.title": "These fields will be cleared:",
"projects.detail.title": "Project \u2014 Paliad",
"projects.detail.back": "\u2190 Back to overview",
"projects.detail.loading": "Loading\u2026",
"projects.detail.notfound": "Project not found or no access.",
"projects.detail.edit": "Edit",
"projects.detail.edit.modal.title": "Edit project",
"projects.detail.save": "Save",
"projects.detail.tab.verlauf": "Activity",
"projects.detail.tab.team": "Team",
"projects.detail.tab.kinder": "Project Tree",
"projects.detail.tab.parteien": "Parties",
"projects.detail.tab.fristen": "Deadlines",
"projects.detail.tab.termine": "Appointments",
"projects.detail.tab.notizen": "Notes",
"projects.detail.tab.checklisten": "Checklists",
"projects.detail.verlauf.empty": "No events recorded yet.",
"projects.detail.verlauf.loadMore": "Load more",
"projects.detail.smarttimeline.empty": "No events captured yet.",
"projects.detail.smarttimeline.today": "Today",
"projects.detail.smarttimeline.section.past": "Past",
"projects.detail.smarttimeline.section.future": "Future",
"projects.detail.smarttimeline.section.undated": "Undated",
"projects.detail.smarttimeline.kind.deadline": "Deadline",
"projects.detail.smarttimeline.kind.appointment": "Appointment",
"projects.detail.smarttimeline.kind.milestone": "Milestone",
"projects.detail.smarttimeline.kind.projected": "Predicted",
"projects.detail.smarttimeline.status.done": "Done",
"projects.detail.smarttimeline.status.open": "Open",
"projects.detail.smarttimeline.status.overdue": "Overdue",
"projects.detail.smarttimeline.status.court_set": "Court-set date",
"projects.detail.smarttimeline.status.predicted": "Predicted",
"projects.detail.smarttimeline.status.off_script": "Custom",
"projects.detail.smarttimeline.audit.toggle.show": "Show audit log",
"projects.detail.smarttimeline.audit.toggle.hide": "Timeline only",
"projects.detail.smarttimeline.add.cta": "+ Entry",
"projects.detail.smarttimeline.add.modal.title": "New SmartTimeline entry",
"projects.detail.smarttimeline.add.choice.deadline": "Add a deadline",
"projects.detail.smarttimeline.add.choice.appointment": "Add an appointment",
"projects.detail.smarttimeline.add.choice.counterclaim": "Counterclaim (CCR)",
"projects.detail.smarttimeline.add.choice.amend": "Application to amend (R.30)",
"projects.detail.smarttimeline.add.choice.milestone": "Custom milestone",
"projects.detail.smarttimeline.add.choice.disabled": "Coming in Slice 3",
"projects.detail.smarttimeline.add.cancel": "Cancel",
"projects.detail.smarttimeline.add.submit": "Save",
"projects.detail.smarttimeline.milestone.title": "Title",
"projects.detail.smarttimeline.milestone.date": "Date (optional)",
"projects.detail.smarttimeline.milestone.description": "Description (optional)",
"projects.detail.smarttimeline.error.title_required": "Please enter a title.",
"projects.detail.smarttimeline.error.generic": "Could not save the entry.",
"projects.detail.team.form.user": "User",
"projects.detail.team.form.role": "Role",
"projects.detail.team.form.responsibility": "Project role",
"projects.detail.team.form.profession.label": "Profession",
"projects.detail.team.form.profession.none": "No profession set — cannot grant 4-eye approvals.",
"projects.detail.team.form.cancel": "Cancel",
"projects.detail.team.form.submit": "Add",
"projects.detail.team.col.name": "Name",
"projects.detail.team.col.role": "Role",
"projects.detail.team.col.profession": "Profession",
"projects.detail.team.col.responsibility": "Project role",
"projects.detail.team.col.source": "Source",
"projects.detail.kinder.add": "Create sub-project",
"projects.detail.kinder.empty": "No sub-projects.",
"projects.detail.parteien.add": "Add party",
"projects.detail.parteien.form.name": "Name",
"projects.detail.parteien.form.role": "Role",
"projects.detail.parteien.form.rep": "Representative (optional)",
"projects.detail.parteien.form.cancel": "Cancel",
"projects.detail.parteien.form.submit": "Add",
"projects.detail.parteien.role.claimant": "Claimant",
"projects.detail.parteien.role.defendant": "Defendant",
"projects.detail.parteien.role.thirdparty": "Third-party / intervenor",
"projects.detail.parteien.col.name": "Name",
"projects.detail.parteien.col.role": "Role",
"projects.detail.parteien.col.rep": "Representative",
"projects.detail.parteien.empty": "No parties recorded yet.",
"projects.detail.deadlines.add": "Add deadline",
"projects.detail.deadlines.empty": "No deadlines recorded for this project.",
"projects.detail.appointments.add": "Add appointment",
"projects.detail.appointments.form.cancel": "Cancel",
"projects.detail.appointments.form.submit": "Add",
"projects.detail.appointments.empty": "No appointments recorded for this project.",
"projects.detail.checklisten.empty": "No checklist instances recorded for this project.",
"projects.detail.checklisten.col.template": "Template",
"projects.detail.checklisten.col.name": "Name",
"projects.detail.checklisten.col.progress": "Progress",
"projects.detail.checklisten.col.created": "Created",
"projects.detail.checklisten.hint.prefix": "Instances are created on the template page under ",
"projects.detail.checklisten.hint.link": "Checklists",
"projects.detail.checklisten.hint.suffix": ".",
"projects.detail.delete": "Archive project",
"projects.detail.delete.confirm.title": "Archive project?",
"projects.detail.delete.confirm.body": "The project will be archived. It cannot be directly restored.",
"projects.detail.delete.confirm.cancel": "Cancel",
"projects.detail.delete.confirm.ok": "Archive",
"projects.type.client": "Client",
"projects.type.litigation": "Litigation",
"projects.type.patent": "Patent",
"projects.type.case": "Case",
"projects.type.project": "Project",
"projects.team.role.lead": "Lead",
"projects.team.role.associate": "Associate",
"projects.team.role.pa": "PA",
"projects.team.role.of_counsel": "Of Counsel",
"projects.team.role.local_counsel": "Local Counsel",
"projects.team.role.expert": "Expert",
"projects.team.role.observer": "Observer",
"projects.team.responsibility.lead": "Lead",
"projects.team.responsibility.member": "Member",
"projects.team.responsibility.observer": "Observer",
"projects.team.responsibility.external": "External",
"projects.team.profession.partner": "Partner",
"projects.team.profession.of_counsel": "Of Counsel",
"projects.team.profession.associate": "Associate",
"projects.team.profession.senior_pa": "Senior PA",
"projects.team.profession.pa": "PA",
"projects.team.profession.paralegal": "Paralegal",
"projects.team.profession.none": "(external)",
"projects.team.profession.hint": "Profession — managed in firm profile",
"projects.team.profession.none.hint": "No profession set — no 4-eye authority",
"projects.team.direct": "direct",
"projects.team.inherited.hint": "Inherited from ancestor",
"projects.detail.team.add": "Add member",
"projects.detail.team.remove": "Remove",
"projects.detail.team.confirm_remove": "Remove member?",
"projects.detail.team.empty": "No team members yet.",
"projects.detail.team.error.user_required": "Select a user",
"projects.detail.team.invite.hint": "User not found?",
"projects.detail.team.invite.hint_email": "No one with that email.",
"projects.detail.team.invite.cta": "Invite",
"projects.view.tree": "Tree view",
"projects.tree.toggle": "Expand / collapse",
"projects.tree.loading": "Loading tree…",
"projects.tree.error": "Failed to load tree view.",
"projects.tree.deadlines.overdue": "Overdue deadlines",
"projects.tree.deadlines.open": "Open deadlines",
"projects.tree.deadlines.subtree.tooltip": "Includes sub-projects",
"projects.tree.deadlines.direct.tooltip": "This project only",
"projects.tree.pin": "Pin",
"projects.tree.unpin": "Unpin",
"projects.tree.inherited.context": "Visible because of a sub-project",
"projects.toolbar.search.placeholder": "Search — title, reference, ClientMatter…",
"projects.toolbar.view.tree": "Tree",
"projects.toolbar.view.cards": "Cards",
"projects.toolbar.view.flat": "List",
"projects.toolbar.subtree_counts": "Count sub-projects too",
"projects.chip.all": "All",
"projects.chip.mine": "Mine",
"projects.chip.pinned": "Pinned",
"projects.chip.status": "Status",
"projects.chip.type": "Type",
"projects.chip.has_open_deadlines": "With open deadlines",
"projects.chip.status.active": "Active",
"projects.chip.status.archived": "Archived",
"projects.chip.status.closed": "Closed",
"projects.chip.type.client": "Client",
"projects.chip.type.litigation": "Litigation",
"projects.chip.type.patent": "Patent",
"projects.chip.type.case": "Case",
"projects.chip.type.project": "Project",
"projects.chip.multi.none": "Nothing selected",
"projects.chip.multi.count": "{n} selected",
"projects.empty.filtered.action": "Reset filters",
"projects.search.match.self": "Match",
"projects.search.match.ancestor": "Parent of a match",
"projects.search.match.descendant": "Child of a match",
"projects.cards.next_events": "Upcoming",
"projects.cards.recent_verlauf": "Recent",
"projects.cards.no_next_events": "— nothing upcoming",
"projects.cards.no_recent": "— nothing recent",
"projects.cards.team": "Team",
"projects.cards.deadline_open": "open",
"projects.cards.deadline_overdue": "overdue",
"projects.cards.show_all_levels": "Show all levels",
"projects.cards.show_all_levels.hint": "Include Clients + Litigations as their own cards",
"projects.cards.layout.label": "View",
"projects.cards.layout.new": "New view",
"projects.cards.layout.edit": "Edit",
"projects.cards.layout.save": "Save",
"projects.cards.layout.discard": "Discard",
"projects.cards.layout.set_default": "Set as default",
"projects.cards.layout.delete": "Delete",
"projects.cards.layout.rename": "Rename",
"projects.cards.layout.is_default": "Default",
"projects.cards.layout.new.prompt": "Name of the new view",
"projects.cards.layout.delete.confirm": "Really delete this view?",
"projects.cards.layout.delete.default_blocked": "Cannot delete the active default view — switch defaults first.",
"projects.cards.layout.fact.title-row": "Title row",
"projects.cards.layout.fact.type-chip": "Type badge",
"projects.cards.layout.fact.status-chip": "Status badge",
"projects.cards.layout.fact.client-matter": "ClientMatter",
"projects.cards.layout.fact.parent-path": "Parent path",
"projects.cards.layout.fact.deadline-counts": "Deadline counts",
"projects.cards.layout.fact.next-events": "Upcoming events",
"projects.cards.layout.fact.recent-verlauf": "Recent entries",
"projects.cards.layout.fact.team-chips": "Team chips",
"projects.cards.layout.fact.reference": "Reference",
"projects.cards.layout.fact.last-activity-at": "Last activity",
"projects.cards.layout.density": "Density",
"projects.cards.layout.density.compact": "Compact",
"projects.cards.layout.density.roomy": "Roomy",
"projects.cards.layout.grid": "Columns",
"projects.cards.layout.grid.auto": "Auto",
"projects.cards.layout.grid.2": "2",
"projects.cards.layout.grid.3": "3",
"projects.cards.layout.grid.4": "4",
"projects.cards.layout.fact.toggle.hide": "Hide",
"projects.cards.layout.fact.toggle.show": "Show",
"projects.cards.layout.fact.move_up": "Move up",
"projects.cards.layout.fact.move_down": "Move down",
"projects.cards.layout.fact.count": "Count",
"projects.cards.event.kind.deadline": "Deadline",
"projects.cards.event.kind.appointment": "Appointment",
"projects.cards.event.kind.project_event": "Verlauf",
"projects.cards.empty": "No projects to show.",
"projects.detail.clientmatter.inherited": "Inherited from parent",
"einstellungen.profil.email": "Email",
"einstellungen.profil.email.hint": "Email cannot be changed.",
"einstellungen.profil.display_name": "Display name",
"einstellungen.profil.display_name.placeholder": "First and last name",
"einstellungen.profil.office": "Office",
"einstellungen.profil.job_title": "Job title",
"einstellungen.profil.job_title.placeholder": "e.g. Associate, Partner, Patent Attorney",
"einstellungen.profil.lang": "Language",
"einstellungen.profil.lang.de": "Deutsch",
"einstellungen.profil.lang.en": "English",
"einstellungen.profil.lang.hint": "Used for the UI and notification emails.",
"einstellungen.profil.error.display_name": "Please enter a display name.",
"einstellungen.profil.error.office": "Please select an office.",
"einstellungen.profil.error.job_title": "Please enter a job title.",
"einstellungen.prefs.reminders.heading": "Deadline reminders",
"einstellungen.prefs.reminders.hint": "Paliad emails you when deadlines approach.",
"einstellungen.prefs.reminders.master": "Deadline reminders enabled",
"einstellungen.prefs.reminders.overdue": "Overdue deadlines",
"einstellungen.prefs.reminders.due_today": "Due today",
"einstellungen.prefs.reminders.due_warning": "Heads-up (N days ahead)",
"einstellungen.prefs.times.heading": "Send times",
"einstellungen.prefs.times.hint": "Reminders are sent at the chosen time in your timezone.",
"einstellungen.prefs.times.morning": "Morning slot",
"einstellungen.prefs.times.morning.hint": "Bundled email with overdue, due-today and upcoming deadlines.",
"einstellungen.prefs.times.evening": "Evening slot (escalation)",
"einstellungen.prefs.times.evening.hint": "Urgent reminder for deadlines still open today.",
"einstellungen.prefs.times.timezone": "Timezone",
"einstellungen.prefs.times.timezone.hint": "IANA timezone name (e.g. Europe/Berlin, Europe/London).",
"einstellungen.prefs.times.error.required": "Please choose both reminder times.",
"einstellungen.prefs.warning_offset.label": "Heads-up (days ahead)",
"einstellungen.prefs.warning_offset.hint": "We'll remind you this many days before each deadline.",
"einstellungen.prefs.warning_offset.error": "Heads-up must be between 1 and 30 days.",
"einstellungen.prefs.escalation.heading": "Escalation contact",
"einstellungen.prefs.escalation.hint": "Who else should be notified for DRINGEND-escalations in the evening slot? Default: global admins.",
"einstellungen.prefs.escalation.default_option": "— Default (global admins) —",
// Invitation modal (sidebar)
"invite.button": "Invite a colleague",
"invite.modal.title": "Invite a colleague to Paliad",
"invite.modal.body": `Send an invitation to an ${FIRM} email address. The recipient will receive a registration link.`,
"invite.modal.email": "Email address",
"invite.modal.message": "Personal message (optional)",
"invite.modal.message.placeholder": "Hi, I'm using Paliad for matter management \u2014 take a look.",
"invite.modal.cancel": "Cancel",
"invite.modal.send": "Send invitation",
"appointments.list.title": "Appointments \u2014 Paliad",
"appointments.list.heading": "Appointments",
"appointments.list.subtitle": "Hearings, meetings, consultations \u2014 personal or matter-linked.",
"appointments.list.calendar": "Calendar view",
"appointments.list.new": "New appointment",
"appointments.summary.today": "Today",
"appointments.summary.thisweek": "This week",
"appointments.summary.later": "Later",
"appointments.filter.type": "Type",
"appointments.filter.type.all": "All types",
"appointments.filter.akte": "Matter",
"appointments.filter.akte.all": "All matters & personal",
"appointments.filter.akte.personal": "Personal only",
"appointments.filter.from": "From",
"appointments.filter.to": "To",
"appointments.col.start": "Start",
"appointments.col.title": "Title",
"appointments.col.akte": "Matter",
"appointments.col.location": "Location",
"appointments.col.type": "Type",
"appointments.empty.title": "No appointments yet",
"appointments.empty.hint": "Once appointments are created they will show up here.",
"appointments.empty.filtered": "No appointments match these filters.",
"appointments.unavailable": "Appointments unavailable \u2014 please contact your administrator.",
"appointments.personal": "Personal",
"appointments.type.hearing": "Hearing",
"appointments.type.meeting": "Meeting",
"appointments.type.consultation": "Consultation",
"appointments.type.deadline_hearing": "Deadline hearing",
"appointments.neu.title": "New appointment \u2014 Paliad",
"appointments.neu.heading": "New appointment",
"appointments.neu.subtitle": "Personal or matter-linked. With CalDAV sync enabled, the appointment also appears in your external calendar.",
"appointments.neu.back": "\u2190 Back to overview",
"appointments.neu.cancel": "Cancel",
"appointments.neu.submit": "Create appointment",
"appointments.field.title": "Title",
"appointments.field.title.placeholder": "e.g. Oral hearing",
"appointments.field.start": "Start",
"appointments.field.end": "End (optional)",
"appointments.field.type": "Type",
"appointments.field.type.none": "No type",
"appointments.field.akte": "Matter (optional)",
"appointments.field.akte.none": "Personal appointment",
"appointments.field.location": "Location (optional)",
"appointments.field.location.placeholder": "e.g. UPC LD Munich",
"appointments.field.description": "Description (optional)",
"appointments.field.description.placeholder": "Notes, agenda, next steps\u2026",
"appointments.error.required": "Title and start are required.",
"appointments.error.generic": "Save failed. Please try again later.",
"appointments.detail.title": "Appointment \u2014 Paliad",
"appointments.detail.back": "\u2190 Back to overview",
"appointments.detail.loading": "Loading\u2026",
"appointments.detail.notfound": "Appointment not found",
"appointments.detail.notfound.hint": "The appointment doesn't exist or you don't have permission.",
"appointments.detail.akte": "Matter:",
"appointments.detail.save": "Save changes",
"appointments.detail.saved": "Saved.",
"appointments.detail.delete": "Delete appointment",
"appointments.detail.delete.confirm": "Really delete this appointment?",
"appointments.kalender.title": "Appointment calendar \u2014 Paliad",
"appointments.kalender.heading": "Appointment calendar",
"appointments.kalender.subtitle": "Monthly overview of all appointments.",
"appointments.kalender.list": "List view",
"appointments.kalender.empty": "No appointments in the selected period.",
// t-paliad-110 \u2014 unified Events page (rendered on /deadlines + /appointments).
"events.toggle.deadline": "Deadlines",
"events.toggle.appointment": "Appointments",
"events.toggle.all": "Both",
"events.filter.status.all": "All",
"events.summary.later": "Later",
"events.col.date": "Date",
"events.col.location": "Location",
"events.col.appointment_type": "Appointment type",
"events.row.type.deadline": "Deadline",
"events.row.type.appointment": "Appointment",
"events.empty.title": "Nothing yet",
"events.empty.hint": "Once deadlines or appointments are added, they appear here.",
"events.empty.filtered": "No entries match these filters.",
"events.unavailable": "Deadline / appointment management currently unavailable \u2014 please contact your administrator.",
"events.view.cards": "Cards",
"events.view.list": "List",
"events.view.calendar": "Calendar",
"events.calendar.empty": "No entries in the selected period.",
"caldav.title": "CalDAV sync \u2014 Paliad",
"caldav.heading": "CalDAV sync",
"caldav.subtitle": "Sync your Paliad appointments with your external calendar (Nextcloud, iCloud, Outlook, mailcow\u2026). The password is stored encrypted and never returned.",
"caldav.disabled": "CalDAV sync currently unavailable \u2014 please contact your administrator.",
"caldav.never": "Never",
"caldav.field.url": "CalDAV server URL",
"caldav.field.url.placeholder": "https://cloud.example.com/remote.php/dav/calendars/user/personal/",
"caldav.field.url.hint": "Full URL to your calendar (including path).",
"caldav.field.username": "Username",
"caldav.field.password": "Password / app token",
"caldav.field.password.hint": "Leave blank when a configuration exists to keep the stored password.",
"caldav.field.calendar_path": "Calendar path (optional)",
"caldav.field.calendar_path.placeholder": "/calendars/user/personal/",
"caldav.field.calendar_path.hint": "If the URL only points at the server, set the calendar path here.",
"caldav.field.enabled": "Sync enabled",
"caldav.test": "Test connection",
"caldav.test.ok": "Connection successful.",
"caldav.test.fail": "Connection failed",
"caldav.save": "Save",
"caldav.saved": "Configuration saved.",
"caldav.delete": "Delete configuration",
"caldav.delete.confirm": "Really delete? The stored password will be removed permanently.",
"caldav.delete.done": "Configuration deleted.",
"caldav.error.required": "URL and username are required.",
"caldav.error.password_required": "Password is required on first save.",
"caldav.error.generic": "Save failed.",
"caldav.status.last_sync": "Last sync:",
"caldav.status.last_error": "Last error:",
"caldav.log.heading": "Recent syncs",
"caldav.log.col.time": "When",
"caldav.log.col.pushed": "Pushed",
"caldav.log.col.pulled": "Pulled",
"caldav.log.col.duration": "Duration",
"caldav.log.col.error": "Error",
"caldav.log.empty": "No sync attempts recorded yet.",
// Notizen (polymorphic notes — Phase I)
"notes.section.title": "Notes",
"notes.placeholder": "Add a note\u2026",
"notes.shortcut.hint": "Ctrl+Enter (or \u2318+Enter) to save",
"notes.submit": "Add",
"notes.save": "Save",
"notes.cancel": "Cancel",
"notes.edit": "Edit",
"notes.delete": "Delete",
"notes.delete.confirm": "Really delete this note?",
"notes.empty": "No notes yet.",
"notes.edited": "edited",
"notes.unknown_author": "Unknown",
"notes.time.just_now": "just now",
"notes.error.empty": "Note cannot be empty.",
"notes.error.generic": "Action failed. Please try again.",
// Agenda (t-paliad-030) — unified timeline across projects
"agenda.title": "Agenda — Paliad",
"agenda.heading": "Agenda",
"agenda.subtitle": "Upcoming deadlines and appointments across all visible matters, grouped by day.",
"agenda.unavailable": "Agenda is currently unavailable — please contact an administrator.",
"agenda.loading": "Loading …",
"agenda.filter.type": "View",
"agenda.filter.both": "Both",
"agenda.filter.deadlines": "Deadlines only",
"agenda.filter.appointments": "Appointments only",
"agenda.filter.range": "Range",
"agenda.range.7": "7 days",
"agenda.range.14": "14 days",
"agenda.range.30": "30 days",
"agenda.range.90": "90 days",
"agenda.empty.title": "Nothing in this range",
"agenda.empty.hint": "Nothing due — widen the range or create new deadlines or appointments.",
"agenda.label.deadline": "Deadline",
"agenda.label.appointment": "Appointment",
"agenda.appointment_type.hearing": "Hearing",
"agenda.appointment_type.meeting": "Meeting",
"agenda.appointment_type.consultation": "Client meeting",
"agenda.appointment_type.deadline_hearing": "Deadline hearing",
"agenda.day.today": "Today",
"agenda.day.tomorrow": "Tomorrow",
"agenda.urgency.overdue": "Overdue",
"agenda.urgency.today": "Today",
"agenda.urgency.tomorrow": "Tomorrow",
"agenda.urgency.this_week": "This week",
"agenda.urgency.later": "Later",
// Team directory (t-paliad-029)
"team.title": "Team — Paliad",
"team.heading": "Team",
"team.subtitle": "All Paliad colleagues, grouped by office or partner unit.",
"team.search.placeholder": "Search by name, role, office…",
"team.group.office": "By office",
"team.group.department": "By partner unit",
"team.group.other": "Other",
"team.filter.all": "All",
"team.filter.role": "Role",
"team.role.partner": "Partner",
"team.role.counsel": "Counsel",
"team.role.counsel_knowledge_lawyer": "Counsel Knowledge Lawyer",
"team.role.senior_associate": "Senior Associate",
"team.role.associate": "Associate",
"team.role.junior_associate": "Junior Associate",
"team.role.trainee": "Trainee",
"team.role.pa": "PA",
"team.role.paralegal": "Paralegal",
"team.role.secretary": "Secretary",
"team.empty": "No matches.",
"team.dept.lead": "Lead",
"team.dept.unassigned": "No partner unit",
"team.partner_unit.unassigned": "No partner unit",
// Project filter (t-paliad-147)
"team.filter.project": "Project",
"team.filter.project.all": "All projects",
"team.filter.project.selected": "selected",
"team.filter.project.clear": "Deselect all",
// Broadcast modal (t-paliad-147)
"team.broadcast.button": "Email selection",
"team.broadcast.title": "Email selection",
"team.broadcast.recipients": "Recipients",
"team.broadcast.show_all": "Show all",
"team.broadcast.mailto.label": "Open in mail client",
"team.broadcast.mailto.tooltip": "Opens your local mail client with every recipient prefilled in the To: line",
"team.broadcast.template": "Template",
"team.broadcast.template_optional": "optional",
"team.broadcast.template_freeform": "Free-form",
"team.broadcast.template.invitation": "Invitation",
"team.broadcast.template.deadline_digest": "Deadline digest",
"team.broadcast.subject": "Subject",
"team.broadcast.body": "Message",
"team.broadcast.body_placeholder": "Hi {{first_name}}, …",
"team.broadcast.placeholders_hint": "Placeholders: {{name}}, {{first_name}}, {{role_on_project}}",
"team.broadcast.markdown_hint": "Markdown supported: **bold**, *italic*, [link](https://...), - bullet.",
"team.broadcast.send": "Send",
"team.broadcast.sending": "Sending…",
"team.broadcast.sent": "Sent",
"team.broadcast.success": "{sent} of {total} emails sent ({failed} failed).",
"team.broadcast.error.no_recipients": "No recipients selected.",
"team.broadcast.error.too_many": "Recipient limit ({cap}) exceeded.",
"team.broadcast.error.subject_required": "Subject is required.",
"team.broadcast.error.body_required": "Message is required.",
"common.close": "Close",
// Admin broadcasts viewer (t-paliad-147)
"admin.broadcasts.title": "Broadcasts — Paliad",
"admin.broadcasts.heading": "Broadcasts",
"admin.broadcasts.subtitle": "Sent bulk emails to team selections.",
"admin.broadcasts.col.sent_at": "Sent",
"admin.broadcasts.col.subject": "Subject",
"admin.broadcasts.col.sender": "Sender",
"admin.broadcasts.col.count": "Recipients",
"admin.broadcasts.loading": "Loading…",
"admin.broadcasts.empty": "No broadcasts sent yet.",
"admin.broadcasts.detail.sent_by": "Sent by",
"admin.broadcasts.detail.delivered": "delivered",
"admin.broadcasts.detail.failed": "failed",
"admin.broadcasts.detail.recipients": "Recipients",
// t-paliad-146: Paliadin in-app AI buddy (PoC)
"paliadin.title": "Paliadin — Paliad",
"paliadin.heading": "✨ Paliadin",
"paliadin.tagline": "I know your matters and Paliad's knowledge base.",
"paliadin.empty": "What can I help you with?",
"paliadin.starter.today": "What's on my plate today?",
"paliadin.starter.week": "Which deadlines are due this week?",
"paliadin.starter.concept": "Explain Klageerwiderung.",
"paliadin.input.placeholder": "Ask Paliadin…",
"paliadin.send": "Send",
"paliadin.stop": "Stop",
"paliadin.reset": "New conversation",
"paliadin.error.local_only": "Paliadin only runs locally. This instance has no tmux/claude installed — start it locally via ./paliad.",
"paliadin.error.mriver_unreachable": "mRiver is offline — Paliadin can't reach it. Wake mRiver, or run Paliadin locally with ./paliad.",
"paliadin.error.shim_auth_failed": "Paliadin auth failed. Check the SSH key or authorized_keys on mRiver.",
"paliadin.error.shim_error": "Paliadin error on mRiver. Check the tmux/claude pane.",
"paliadin.error.timeout": "Paliadin didn't respond in time (60s). Try again.",
"paliadin.error.connection_lost": "Connection lost.",
"paliadin.error.upstream": "Send failed.",
"paliadin.late.waiting": "Will fill in the response when it arrives …",
"paliadin.late.marker": "late",
"paliadin.widget.title": "Paliadin",
"paliadin.widget.trigger": "Paliadin (Cmd+J)",
"paliadin.widget.empty": "What can I help you with?",
"paliadin.widget.input.placeholder": "Ask Paliadin...",
"paliadin.widget.input.label": "Message to Paliadin",
"paliadin.widget.send": "Send",
"paliadin.widget.reset": "Reset conversation",
"paliadin.widget.reset.confirm": "Reset the conversation here and on the server?",
"paliadin.widget.fullscreen": "Fullscreen mode",
"paliadin.widget.close": "Close",
"paliadin.widget.context.on_page": "On this page",
"approvals.agent.label": "Paliadin suggested this",
"approvals.agent.byline": "Paliadin",
"approvals.agent.suggestion_pending": "Suggestion awaiting your approval",
"nav.admin.paliadin": "Paliadin Monitor",
"admin.paliadin.title": "Paliadin Monitor — Paliad",
"admin.paliadin.heading": "Paliadin Monitor",
"admin.paliadin.subtitle": "How is Paliadin actually being used?",
"admin.paliadin.total": "Total",
"admin.paliadin.last7": "Last 7 days",
"admin.paliadin.median_dur": "Median duration",
"admin.paliadin.tool_rate": "Tool-use rate",
"admin.paliadin.abandon_rate": "Abandon rate",
"admin.paliadin.classifier_heading": "Question types",
"admin.paliadin.daily_heading": "Daily usage",
"admin.paliadin.top_heading": "Top queries",
"admin.paliadin.recent_heading": "Recent queries",
"admin.paliadin.col.prompt": "Query",
"admin.paliadin.col.count": "Count",
"admin.paliadin.col.started": "Time",
"admin.paliadin.col.user": "User",
"admin.paliadin.col.classifier": "Type",
"admin.paliadin.col.response": "Answer",
"admin.paliadin.col.tools": "Tools",
"admin.paliadin.col.origin": "Page",
"admin.paliadin.col.duration": "Duration",
"admin.paliadin.loading": "Loading…",
"common.forbidden": "Access denied.",
"common.load_error": "Load error.",
"common.loading": "Loading…",
"partner_unit.heading": "My Partner Units",
"partner_unit.subtitle": "Partner Units are structural units — separate from project teams. Membership is admin-managed.",
"partner_unit.none": "You are not a member of any Partner Unit yet.",
"partner_unit.members_label": "members",
// Admin team management (t-paliad-050)
"nav.group.admin": "Admin",
"nav.admin.bereich": "Admin Area",
"nav.admin.team": "Team Management",
"admin.title": "Admin Area — Paliad",
"admin.heading": "Admin Area",
"admin.subtitle": "Tools for managing Paliad. Visible only to administrators.",
"admin.section.available": "Available",
"admin.section.planned": "Planned",
"admin.coming_soon": "Coming soon",
"admin.card.team.title": "Team Management",
"admin.card.team.desc": "Create, edit and delete user accounts.",
"admin.card.partner_units.title": "Partner Units",
"admin.card.partner_units.desc": "Create structural partner units and assign members.",
"admin.card.audit.title": "Audit Log",
"admin.card.audit.desc": "Who changed what, and when. Traceability for security-relevant actions.",
"admin.card.email_templates.title": "Email Templates",
"admin.card.email_templates.desc": "Customise templates for invitations, reminders and the wrapper layout.",
"admin.card.feature_flags.title": "Feature Flags",
"admin.card.feature_flags.desc": "Enable features per office, partner unit or role.",
"admin.card.broadcasts.title": "Broadcasts",
"admin.card.broadcasts.desc": "Inspect bulk emails sent to team selections.",
"admin.card.approval_policies.title": "Approval Policies",
"admin.card.approval_policies.desc": "Configure 4-eye review per project and partner unit.",
"admin.approval_policies.title": "Approval Policies — Paliad",
"admin.approval_policies.heading": "Approval Policies",
"admin.approval_policies.subtitle": "Configure 4-eye review per project and partner unit.",
"admin.approval_policies.loading": "Loading …",
"admin.approval_policies.section.units": "Partner Unit Defaults",
"admin.approval_policies.section.units.hint": "Default rules that every project attached to a partner unit inherits. When multiple partner units apply, the strictest rule wins.",
"admin.approval_policies.section.projects": "Project-specific",
"admin.approval_policies.section.projects.hint": "Per-project rules. Override partner-unit defaults and inherited project rules.",
"admin.approval_policies.units.empty": "No partner units yet.",
"admin.approval_policies.picker.label": "Pick a project",
"admin.approval_policies.picker.placeholder": "Search…",
"admin.approval_policies.picker.no_results": "No matches.",
"admin.approval_policies.entity.deadline": "Deadlines",
"admin.approval_policies.entity.appointment": "Appointments",
"admin.approval_policies.lifecycle.create": "Create",
"admin.approval_policies.lifecycle.update": "Edit",
"admin.approval_policies.lifecycle.complete": "Complete",
"admin.approval_policies.lifecycle.delete": "Delete",
"admin.approval_policies.role.partner": "Partner",
"admin.approval_policies.role.of_counsel": "Of Counsel",
"admin.approval_policies.role.associate": "Associate",
"admin.approval_policies.role.senior_pa": "Senior PA",
"admin.approval_policies.role.pa": "PA",
"admin.approval_policies.role.none": "No approval",
"admin.approval_policies.role.no_rule": "— no rule —",
"admin.approval_policies.source.project": "Project",
"admin.approval_policies.source.ancestor": "Inherited",
"admin.approval_policies.source.unit_default": "Default",
"admin.approval_policies.source.no_approval": "no approval",
"admin.approval_policies.cell.requires": "Approval required",
"admin.approval_policies.cell.clear": "—",
"admin.approval_policies.cell.clear.title": "Reset to inheritance",
"admin.approval_policies.cell.saved_msg": "Saved.",
"admin.approval_policies.cell.error_msg": "Error",
"admin.approval_policies.bulk.cta": "Apply to descendants",
"admin.approval_policies.bulk.no_descendants": "No descendants.",
"admin.approval_policies.bulk.modal.title": "Apply to descendants",
"admin.approval_policies.bulk.modal.body": "The descendants below receive this project's effective matrix as project-specific rules. Existing project-specific rules will be overwritten. Partner-unit defaults remain intact.",
"admin.approval_policies.bulk.modal.cancel": "Cancel",
"admin.approval_policies.bulk.modal.confirm": "Apply",
"admin.approval_policies.bulk.modal.applying": "Applying …",
"admin.approval_policies.bulk.modal.done": "Applied",
"admin.approval_policies.bulk.modal.writes_label": "writes",
"admin.approval_policies.bulk.modal.targets_label": "projects",
"inbox.empty.admin_nudge.title": "No approval policies configured yet?",
"inbox.empty.admin_nudge.body": "Set which lifecycle events require 4-eye review.",
"inbox.empty.admin_nudge.cta": "Configure approval policies",
"deadlines.form.approval_hint": "4-eye review required",
"appointments.form.approval_hint": "4-eye review required",
"admin.email_templates.title": "Email Templates — Paliad",
"admin.email_templates.heading": "Email Templates",
"admin.email_templates.subtitle": "Customise templates for invitations, reminders, and the shared layout wrapper.",
"admin.email_templates.loading": "Loading…",
"admin.email_templates.load_error": "Failed to load templates.",
"admin.email_templates.back": "← Back to list",
"admin.email_templates.lang.de": "German",
"admin.email_templates.lang.en": "English",
"admin.email_templates.status.default": "Default",
"admin.email_templates.status.last_modified": "Last modified: {date}",
"admin.email_templates.card.invitation.title": "Invitation",
"admin.email_templates.card.invitation.desc": "Email sent to new colleagues from the sidebar invite flow.",
"admin.email_templates.card.deadline_digest.title": "Deadline digest",
"admin.email_templates.card.deadline_digest.desc": "Daily morning + evening email with overdue, due-today, and upcoming deadlines.",
"admin.email_templates.card.base.title": "Layout wrapper",
"admin.email_templates.card.base.desc": "Shared HTML frame (header + footer) that wraps every email.",
"admin.email_templates.editor.title": "Edit email template — Paliad",
"admin.email_templates.editor.heading": "Edit email template",
"admin.email_templates.editor.heading_for": "{title} — {lang}",
"admin.email_templates.editor.is_default": "Currently using the default.",
"admin.email_templates.editor.last_modified": "Last modified: {date}",
"admin.email_templates.editor.subject": "Subject",
"admin.email_templates.editor.body": "HTML body",
"admin.email_templates.editor.note_optional": "Note (optional)",
"admin.email_templates.editor.note_placeholder": "e.g. Correction following counsel feedback",
"admin.email_templates.editor.variables": "Available variables",
"admin.email_templates.editor.preview": "Preview",
"admin.email_templates.editor.preview_refresh": "Refresh preview",
"admin.email_templates.editor.preview_error": "Preview failed.",
"admin.email_templates.editor.parse_error": "Template error:",
"admin.email_templates.editor.save": "Save",
"admin.email_templates.editor.save_ok": "Saved.",
"admin.email_templates.editor.save_error": "Save failed.",
"admin.email_templates.editor.reset": "Reset to default",
"admin.email_templates.editor.reset_confirm": "Really reset to default?",
"admin.email_templates.editor.reset_ok": "Reset to default.",
"admin.email_templates.editor.reset_error": "Reset failed.",
"admin.email_templates.editor.versions": "Versions",
"admin.email_templates.editor.versions_empty": "No versions yet.",
"admin.email_templates.editor.restore": "Restore",
"admin.email_templates.editor.restore_confirm": "Restore this version?",
"admin.email_templates.editor.restore_ok": "Version restored.",
"admin.email_templates.editor.restore_error": "Restore failed.",
"admin.email_templates.editor.dirty_warn": "Discard unsaved changes?",
"admin.email_templates.editor.unknown_key": "Unknown template key.",
"admin.email_templates.editor.slot.morning": "Morning slot",
"admin.email_templates.editor.slot.evening": "Evening slot",
"admin.team.title": "Team Management — Paliad",
"admin.team.heading": "Team Management",
"admin.team.subtitle": "View, edit and add Paliad accounts.",
"admin.team.search.placeholder": "Search by name or email…",
"admin.team.add.direct": "Onboard existing account",
"admin.team.add.invite": "Invite Colleague",
"admin.team.loading": "Loading…",
"admin.team.empty": "No matches.",
"admin.team.error.forbidden": "Admins only.",
"admin.team.col.name": "Name",
"admin.team.col.email": "Email",
"admin.team.col.office": "Office",
"admin.team.col.job_title": "Job title",
"admin.team.col.profession": "Profession",
"admin.team.col.profession.none": "(external)",
"admin.team.col.profession.none.hint": "No profession set — no 4-eye authority.",
"admin.team.col.permission": "Permission",
"admin.team.col.additional": "Additional offices",
"admin.team.col.lang": "Lang",
"admin.team.col.created": "Created",
"admin.team.col.actions": "Actions",
"admin.team.row.edit": "Edit",
"admin.team.row.delete": "Delete",
"admin.team.row.save": "Save",
"admin.team.row.cancel": "Cancel",
"admin.team.confirm.delete": "Really delete {name}? This action is permanent.",
"admin.team.feedback.saved": "Saved.",
"admin.team.feedback.deleted": "Deleted.",
"admin.team.feedback.added": "Account onboarded.",
"admin.team.direct_add.title": "Onboard existing account",
"admin.team.direct_add.body": "This list shows accounts that have signed in but never completed onboarding.",
"admin.team.direct_add.email": "Email",
"admin.team.direct_add.email.placeholder": "Please select…",
"admin.team.direct_add.empty": "No pending accounts.",
"admin.team.direct_add.name": "Display name",
"admin.team.direct_add.office": "Office",
"admin.team.direct_add.job_title": "Job title",
"admin.team.permission.standard": "Standard",
"admin.team.permission.global_admin": "Global Admin",
"admin.team.permission.last_admin": "The last global admin cannot be demoted.",
"admin.team.direct_add.cancel": "Cancel",
"admin.team.direct_add.submit": "Create",
// Admin audit log (t-paliad-071)
"nav.admin.audit": "Audit Log",
"nav.admin.partner_units": "Partner Units",
"admin.audit.title": "Audit Log — Paliad",
"admin.audit.heading": "Audit Log",
"admin.audit.subtitle": "Global timeline across project, CalDAV, reminder and partner-unit events.",
"admin.audit.source.partner_unit_events": "Partner Units",
"admin.partner_units.title": "Partner Units — Paliad",
"admin.partner_units.heading": "Partner Units",
"admin.partner_units.subtitle": "Manage structural partner units and assign members.",
"admin.partner_units.loading": "Loading…",
"admin.partner_units.empty": "No partner units yet.",
"admin.partner_units.new": "New Partner Unit",
"admin.partner_units.new.heading": "Create Partner Unit",
"admin.partner_units.edit.heading": "Edit Partner Unit",
"admin.partner_units.create": "Save",
"admin.partner_units.cancel": "Cancel",
"admin.partner_units.col.name": "Name",
"admin.partner_units.col.office": "Office",
"admin.partner_units.col.lead": "Lead",
"admin.partner_units.col.members": "Members",
"admin.partner_units.col.actions": "Actions",
"admin.partner_units.action.members": "Members",
"admin.partner_units.action.edit": "Edit",
"admin.partner_units.action.delete": "Delete",
"admin.partner_units.confirm_delete": "Really delete partner unit \"{name}\"?",
"admin.partner_units.error.name_required": "Name required",
"admin.partner_units.error.user_required": "Select a user",
"admin.partner_units.feedback.created": "Created.",
"admin.partner_units.feedback.updated": "Updated.",
"admin.partner_units.feedback.deleted": "Deleted.",
"admin.partner_units.feedback.role_updated": "Role updated.",
"admin.partner_units.member.heading": "Manage members",
"admin.partner_units.member.empty": "No members yet.",
"admin.partner_units.member.add": "Add member",
"admin.partner_units.member.add_btn": "Add",
"admin.partner_units.member.remove": "Remove",
"admin.partner_units.member.confirm_remove": "Remove member?",
"admin.partner_units.member.placeholder": "Name or email",
"admin.partner_units.member.role": "Role",
"admin.audit.loading": "Loading…",
"admin.audit.empty": "No events match the selected filters.",
"admin.audit.loadmore": "Load more",
"admin.audit.error.forbidden": "Admins only.",
"admin.audit.error.unavailable": "Audit service unavailable.",
"admin.audit.search.placeholder": "Subject, description, event type…",
"admin.audit.filter.source": "Source",
"admin.audit.filter.range": "Range",
"admin.audit.filter.from": "From",
"admin.audit.filter.to": "To",
"admin.audit.filter.search": "Search",
"admin.audit.range.24h": "Last 24h",
"admin.audit.range.7d": "Last 7 days",
"admin.audit.range.30d": "Last 30 days",
"admin.audit.range.custom": "Custom",
"admin.audit.range.all": "All",
"admin.audit.source.all": "All sources",
"admin.audit.source.project_events": "Project events",
"admin.audit.source.caldav_sync_log": "CalDAV sync",
"admin.audit.source.reminder_log": "Reminder",
"admin.audit.col.time": "Time",
"admin.audit.col.source": "Source",
"admin.audit.col.event": "Event",
"admin.audit.col.actor": "Actor",
"admin.audit.col.subject": "Subject",
"admin.audit.col.description": "Description",
"admin.audit.event.caldav_synced": "CalDAV sync ok",
"admin.audit.event.caldav_sync_error": "CalDAV sync error",
"admin.audit.event.morning_digest": "Morning digest sent",
"admin.audit.event.evening_digest": "Evening digest sent",
"admin.audit.event.deadline_reminder": "Deadline reminder sent",
"admin.audit.event.due_today": "Due-today reminder sent",
"admin.audit.event.weekly": "Weekly digest sent",
// Not-found (404) page
"notfound.title": "Page not found — Paliad",
"notfound.heading": "Page not found",
"notfound.lede": "This page doesn't exist or has been moved.",
"notfound.cta": "Back to dashboard",
// t-paliad-088: Event Types — picker, multi-select filter, add modal.
"common.cancel": "Cancel",
"event_types.cat.submission": "Submissions",
"event_types.cat.decision": "Decisions",
"event_types.cat.order": "Orders",
"event_types.cat.service": "Service",
"event_types.cat.fee": "Fees",
"event_types.cat.hearing": "Hearings",
"event_types.cat.other": "Other",
"event_types.picker.search": "Search or type…",
"event_types.picker.add": "+ Add new type…",
"event_types.picker.remove": "Remove",
"event_types.picker.no_match": "No matches.",
"event_types.picker.browse_all": "Browse all",
"event_types.browse.title": "Choose event types",
"event_types.browse.search": "Search across all types…",
"event_types.browse.empty": "No matches.",
"event_types.browse.apply": "Apply",
"event_types.browse.cancel": "Cancel",
"event_types.browse.selected_count": "{n} selected",
"event_types.browse.jurisdiction.none": "Any",
"event_types.filter.all": "All types",
"event_types.filter.untyped": "— Untyped —",
"event_types.filter.search": "Search type…",
"event_types.filter.reset": "Reset",
"event_types.filter.apply": "Apply",
"event_types.filter.n_selected": "{n} types",
"event_types.add.title": "Create new event type",
"event_types.add.label_de": "Label (DE) *",
"event_types.add.label_en": "Label (EN, optional)",
"event_types.add.category": "Category *",
"event_types.add.jurisdiction": "Jurisdiction (optional)",
"event_types.add.jurisdiction.none": "—",
"event_types.add.jurisdiction.any": "Any",
"event_types.add.firm_wide": "Make firm-wide",
"event_types.add.firm_wide.hint": "Firm-wide types are visible to all colleagues. Admins can archive them.",
"event_types.add.submit": "Create",
"event_types.add.duplicate_warn": "Probably already exists:",
"event_types.add.error.required": "Label (DE) is required.",
"event_types.add.error.slug_taken": "A type with this name already exists.",
"event_types.add.error.generic": "Could not create. Please try again.",
"deadlines.field.event_type": "Type (optional)",
"deadlines.col.event_type": "Type",
"deadlines.filter.event_type": "Type",
"agenda.filter.event_type": "Type",
// t-paliad-089: Admin Event-Type moderation panel.
"nav.admin.event_types": "Event Types",
"admin.card.event_types.title": "Event Types",
"admin.card.event_types.desc": "Moderate firm-wide event types: archive, merge, promote.",
"admin.event_types.title": "Event Types — Paliad",
"admin.event_types.heading": "Event Types",
"admin.event_types.subtitle": "Moderate firm-wide event types: archive, merge, promote private types.",
"admin.event_types.section.firm_wide": "Firm-wide types",
"admin.event_types.section.private_pending": "Private types (pending promotion)",
"admin.event_types.section.private_pending.hint": "Private types from other colleagues, sorted by usage. Promoting makes the type firm-wide.",
"admin.event_types.search.placeholder": "Search label, slug or author…",
"admin.event_types.show_archived": "Show archived",
"admin.event_types.loading": "Loading…",
"admin.event_types.empty": "No matches.",
"admin.event_types.private.empty": "No private types.",
"admin.event_types.col.label": "Label",
"admin.event_types.col.category": "Category",
"admin.event_types.col.jurisdiction": "Jurisdiction",
"admin.event_types.col.author": "Author",
"admin.event_types.col.created": "Created",
"admin.event_types.col.usage": "Usage",
"admin.event_types.col.actions": "Actions",
"admin.event_types.row.archived": "Archived",
"admin.event_types.author.system": "System",
"admin.event_types.author.unknown": "Unknown",
"admin.event_types.action.archive": "Archive",
"admin.event_types.action.archive_selected": "Archive selected",
"admin.event_types.action.merge_selected": "Merge…",
"admin.event_types.action.restore": "Restore",
"admin.event_types.action.promote": "Promote",
"admin.event_types.bulk.count": "{n} selected",
"admin.event_types.confirm.archive": "Really archive \"{label}\"?",
"admin.event_types.confirm.bulk_archive": "Really archive {n} types?",
"admin.event_types.confirm.promote": "Make \"{label}\" firm-wide?",
"admin.event_types.confirm.merge": "\"{winner}\" as winner: {n} loser type(s) will be archived, {usage} junction row(s) redirected. Proceed?",
"admin.event_types.feedback.archived": "{n} archived.",
"admin.event_types.feedback.archive_error": "Archive failed.",
"admin.event_types.feedback.restored": "Restored.",
"admin.event_types.feedback.restore_error": "Restore failed.",
"admin.event_types.feedback.promoted": "Promoted.",
"admin.event_types.feedback.promote_error": "Promotion failed.",
"admin.event_types.feedback.merged": "Merged.",
"admin.event_types.feedback.merge_error": "Merge failed.",
"admin.event_types.error.forbidden": "Admins only.",
"admin.event_types.merge.title": "Merge types",
"admin.event_types.merge.body": "Pick the winner. Loser junction rows get redirected to the winner, then the losers are archived.",
"admin.event_types.merge.submit": "Merge",
// Approval workflow (t-paliad-138).
"approvals.title": "Approvals",
"approvals.heading": "Approvals",
"approvals.subtitle": "Four-eyes review for deadlines and appointments.",
"approvals.tab.pending_mine": "Awaiting approval",
"approvals.tab.mine": "My requests",
"approvals.empty.pending_mine": "Nothing awaits your approval.",
"approvals.empty.mine": "You have no open requests.",
"approvals.lifecycle.create": "Creation",
"approvals.lifecycle.update": "Change",
"approvals.lifecycle.complete": "Completion",
"approvals.lifecycle.delete": "Deletion",
"approvals.entity.deadline": "Deadline",
"approvals.entity.appointment": "Appointment",
"approvals.required_role.lead": "Lead",
"approvals.required_role.of_counsel": "Of Counsel",
"approvals.required_role.associate": "Associate",
"approvals.required_role.senior_pa": "Senior PA",
"approvals.required_role.pa": "PA",
"approvals.status.pending": "Open",
"approvals.status.approved": "Approved",
"approvals.status.rejected": "Rejected",
"approvals.status.revoked": "Revoked",
"approvals.status.superseded": "Superseded",
"approvals.action.approve": "Approve",
"approvals.action.reject": "Reject",
"approvals.action.revoke": "Revoke",
"approvals.note.placeholder": "Optional note...",
"approvals.requested_by": "Submitted by",
"approvals.decided_by": "Decided by",
"approvals.decision_kind.peer": "Peer approval",
"approvals.decision_kind.admin_override": "Admin override",
"approvals.decision_kind.derived_peer": "Approved by derived member (Partner Unit)",
"approvals.error.self_approval": "You cannot approve your own request.",
"approvals.error.not_authorized": "You don't have the required role.",
"approvals.error.no_qualified_approver": "No qualified approver available — please add an approver to the project team or contact an admin.",
"approvals.error.concurrent_pending": "Another approval request is already in flight on this entity.",
"approvals.error.awaiting_approval": "This entity is awaiting approval.",
"approvals.error.request_not_pending": "This request is no longer open.",
"approvals.pending.badge": "Awaiting approval",
"approvals.withdraw.cta": "Withdraw approval request",
"approvals.withdraw.confirm": "Withdraw the approval request?",
"approvals.withdraw.error": "Failed to withdraw",
"approvals.pending_create.label": "Awaits approval (creation)",
"approvals.pending_update.label": "Awaits approval (change)",
"approvals.pending_complete.label": "Awaits approval (completion)",
"approvals.pending_delete.label": "Awaits approval (deletion)",
"approvals.diff.before": "Before",
"approvals.diff.after": "After",
"approvals.policies.title": "Approval policies",
"approvals.policies.subtitle": "Which lifecycle events need four-eyes review on this project?",
"approvals.policies.column.event": "Event",
"approvals.policies.column.deadline": "Deadline",
"approvals.policies.column.appointment": "Appointment",
"approvals.policies.no_approval": "No approval needed",
"approvals.policies.copy_parent": "Copy from parent project",
"approvals.policies.set_all_associate": "Set all to Associate",
// t-paliad-144 — Custom Views
"nav.group.user_views": "My Views",
"nav.user_views.new": "New view",
"views.title": "Views — Paliad",
"views.heading": "Views",
"views.subtitle": "Saved views over your data — filters and shape preserved.",
"views.loading": "Loading …",
"views.shape.list": "List",
"views.shape.cards": "Cards",
"views.shape.calendar": "Calendar",
"views.save_as": "Save as view",
"views.action.edit": "Edit",
"views.empty.title": "No matches found.",
"views.error.back": "Back to views",
"views.error.not_found": "View not found.",
"views.error.network": "Network error — please retry.",
"views.toast.inaccessible_one": "1 project in this view is no longer visible to you.",
"views.toast.inaccessible_n": "{n} projects in this view are no longer visible to you.",
"views.calendar.mobile_fallback": "Calendar view works best on a wide screen.",
"views.onboarding.title": "Saved views — what are they?",
"views.onboarding.body": "A view is a saved filter combination — e.g. \"Deadlines in my projects in the next 14 days\". Views appear as their own buttons in the sidebar.",
"views.onboarding.create": "Create example view",
"views.source.deadline": "Deadlines",
"views.source.appointment": "Appointments",
"views.source.project_event": "Project history",
"views.source.approval_request": "Approvals",
"views.kind.deadline": "Deadline",
"views.kind.appointment": "Appointment",
"views.kind.project_event": "History",
"views.kind.approval_request": "Approval",
"views.scope.all_visible": "All visible",
"views.scope.my_subtree": "My subtree",
"views.scope.explicit": "Specific projects",
"views.scope.personal_only": "Personal only",
"views.horizon.next_7d": "Next 7 days",
"views.horizon.next_30d": "Next 30 days",
"views.horizon.next_90d": "Next 90 days",
"views.horizon.past_30d": "Last 30 days",
"views.horizon.past_90d": "Last 90 days",
"views.horizon.any": "Any",
"views.horizon.all": "All-time",
"views.horizon.custom": "Custom",
"views.density.comfortable": "Comfortable",
"views.density.compact": "Compact",
"views.col.date": "Date",
"views.col.time": "When",
"views.col.title": "Title",
"views.col.project": "Project",
"views.col.actor": "Actor",
"views.col.status": "Status",
"views.col.rule": "Rule",
"views.col.event_type": "Type",
"views.col.location": "Location",
"views.col.appointment_type": "Appointment type",
"views.col.approval_status": "Approval",
"views.col.decided_by": "Decided by",
"views.col.kind": "Kind",
"views.editor.title": "Edit view — Paliad",
"views.editor.heading.new": "New view",
"views.editor.heading.edit": "Edit view",
"views.editor.subtitle": "Pick sources, filters, and shape. Save to confirm.",
"views.editor.section.identity": "Identity",
"views.editor.section.sources": "Sources",
"views.editor.section.scope": "Scope",
"views.editor.section.time": "Time",
"views.editor.section.render": "Display",
"views.editor.field.name": "Name",
"views.editor.field.slug": "Slug (URL)",
"views.editor.field.icon": "Icon",
"views.editor.field.show_count": "Show count badge in sidebar",
"views.editor.field.scope_mode": "Projects",
"views.editor.field.personal_only": "Personal only",
"views.editor.field.horizon": "Horizon",
"views.editor.field.shape": "Shape",
"views.editor.field.density": "Density",
"views.editor.hint.slug": "Lowercase letters, digits, hyphens — no reserved words.",
"views.editor.hint.sources": "Which data sources should this view include?",
"views.editor.icon.default": "Default (folder)",
"views.editor.icon.clock": "Clock",
"views.editor.icon.calendar": "Calendar",
"views.editor.icon.bell": "Bell",
"views.editor.icon.folder": "Folder",
"views.editor.icon.users": "People",
"views.editor.icon.building": "Building",
"views.editor.save": "Save",
"views.editor.cancel": "Cancel",
"views.editor.delete": "Delete",
"views.editor.confirm_delete": "Delete this view permanently?",
"views.editor.error.name_required": "Name is required.",
"views.editor.error.slug_format": "Slug must be lowercase, start with a letter or digit, contain only letters, digits, and hyphens.",
"views.editor.error.sources_required": "Pick at least one source.",
"views.editor.error.load_failed": "Could not load this view.",
"views.editor.error.delete_failed": "Could not delete this view.",
// Universal FilterBar — t-paliad-163.
"views.bar.label.time": "Time",
"views.bar.label.personal": "Mine",
"views.bar.label.approval_role": "View",
"views.bar.label.approval_status": "Status",
"views.bar.label.approval_entity": "Kind",
"views.bar.label.deadline_status": "Deadline status",
"views.bar.label.appointment_type": "Appointment type",
"views.bar.label.project_event_kind": "Event",
"views.bar.label.shape": "Display",
"views.bar.label.density": "Density",
"views.bar.label.sort": "Sort",
"views.bar.common.all": "All",
"views.bar.time.next_7d": "7 days",
"views.bar.time.next_30d": "30 days",
"views.bar.time.next_90d": "90 days",
"views.bar.time.past_7d": "Past 7d",
"views.bar.time.past_30d": "Past 30 d.",
"views.bar.time.past_90d": "Past 90 d.",
"views.bar.time.any": "Any",
"views.bar.time.all": "All time",
"views.bar.time.custom": "Custom",
"views.bar.time.custom.coming_soon": "Custom date range arrives in a follow-up iteration.",
"views.bar.personal.on": "Mine only",
"views.bar.approval_role.approver_eligible": "To approve",
"views.bar.approval_role.self_requested": "My requests",
"views.bar.approval_role.any_visible": "All visible",
"views.bar.approval_status.pending": "Pending",
"views.bar.approval_status.approved": "Approved",
"views.bar.approval_status.rejected": "Rejected",
"views.bar.approval_status.revoked": "Revoked",
"views.bar.approval_entity.deadline": "Deadline",
"views.bar.approval_entity.appointment": "Appointment",
"views.bar.deadline_status.pending": "Open",
"views.bar.deadline_status.completed": "Completed",
"views.bar.appointment_type.hearing": "Hearing",
"views.bar.appointment_type.meeting": "Meeting",
"views.bar.appointment_type.consultation": "Consultation",
"views.bar.appointment_type.deadline_hearing": "Oral hearing",
"views.bar.shape.list": "List",
"views.bar.shape.cards": "Cards",
"views.bar.shape.calendar": "Calendar",
"views.bar.density.comfortable": "Comfortable",
"views.bar.density.compact": "Compact",
"views.bar.sort.date_asc": "Date ascending",
"views.bar.sort.date_desc": "Date descending",
"views.bar.action.reset": "Reset",
"views.bar.action.save_as_view": "Save as view",
"views.bar.save.heading": "Save view",
"views.bar.save.field.name": "Name",
"views.bar.save.field.slug": "Slug",
"views.bar.save.field.slug_hint": "Becomes part of the URL: /views/<slug>",
"views.bar.save.field.show_count": "Show count in sidebar",
"views.bar.save.cancel": "Cancel",
"views.bar.save.confirm": "Save",
"views.bar.save.error.name_required": "Please supply a name.",
"views.bar.save.error.slug_format": "Slug must start with a letter or digit and contain only lowercase letters, digits, and hyphens.",
"views.bar.save.error.slug_taken": "This slug is already in use.",
"views.bar.save.error.network": "Network error — please retry.",
},
};
// t — strict translation lookup. The I18nKey parameter is the generated
// union of every key in `translations`, so a literal-string typo at a call
// site fails tsc. Runtime-composed keys (`deadlines.status.${x}`) cannot
// satisfy this signature — TypeScript narrows them to template literal
// types that don't fit the union — so those call sites must use `tDyn`.
export function t(key: I18nKey): string {
return translations[currentLang][key] ?? translations.de[key] ?? key;
}
// tDyn — runtime-composed key escape hatch. Use only when the key is built
// from variables (`tDyn(\`deadlines.status.${x}\`)`); literal-string keys
// must go through `t()` so the I18nKey type catches typos. There is no
// compile-time guarantee the key exists; callers get the same fallback-to-
// raw-key behaviour as t() and are responsible for ensuring the key set
// they interpolate over is fully covered by i18n.ts.
export function tDyn(key: string): string {
return translations[currentLang][key] ?? translations.de[key] ?? key;
}
// tOrEmpty returns the translation if present, else "" — so callers that
// want to fall back to the existing default text in the DOM can do so. The
// `string` parameter is intentional: applyTranslations reads keys off the
// DOM at runtime, so static typing isn't possible here. Internal use only.
function tOrEmpty(key: string): string {
return translations[currentLang][key] ?? translations.de[key] ?? "";
}
export function getLang(): Lang {
return currentLang;
}
// translateEvent localizes a stored project_events row for display.
//
// project_events rows are written with stable English event_type slugs
// ("project_type_changed") and English fallback titles ("Project type
// changed"). The description column is freeform but for known event types
// follows a value-only pattern ("case → litigation", "active → archived",
// "deadline" for note_created). Legacy rows from before this PR carry the
// English prefix ("Type case → litigation", "Note zu deadline hinzugefügt"
// — DE/EN-mixed); both legacy and new shapes parse here.
//
// Caller provides whatever the backend returned for title + description;
// receives a localized pair ready for innerHTML/textContent.
export function translateEvent(
eventType: string | null | undefined,
storedTitle: string,
storedDescription: string | null | undefined,
): { title: string; description: string } {
// Title: prefer the per-event-type localized noun phrase.
let title = storedTitle;
if (eventType) {
const v = tOrEmpty(`event.title.${eventType}`);
if (v) title = v;
}
const description = storedDescription
? translateEventDescription(eventType ?? "", storedDescription)
: "";
return { title, description };
}
function translateEventDescription(eventType: string, description: string): string {
const body = description.trim();
if (!body) return "";
if (eventType === "project_type_changed") {
// New format: "case → litigation". Legacy: "Type case → litigation".
return translateArrowSlugs(body.replace(/^Type\s+/, ""), "projects.type.");
}
if (eventType === "status_changed") {
// New format: "active → archived". Legacy: "Status active → archived".
return translateArrowSlugs(body.replace(/^Status\s+/, ""), "projects.filter.status.");
}
if (eventType === "our_side_changed") {
// Format: "<from> → <to>", where each side is one of
// claimant / defendant / court / both / "none" (the sentinel for
// NULL the service writes when the column is unset on either end).
return translateArrowSlugs(body, "projects.field.our_side.");
}
if (eventType === "note_created") {
// New format: just the parent slug. Legacy: "Note zu <slug> hinzugefügt".
const m = body.match(/^Note zu (project|deadline|appointment) hinzugef[üu]gt$/i);
const slug = (m ? m[1] : body).toLowerCase();
const parent = tOrEmpty(`event.note.parent.${slug}`) || slug;
const phrase = tOrEmpty("event.note.added_to");
return phrase ? phrase.replace("{parent}", parent) : body;
}
if (eventType.startsWith("deadline_") || eventType.startsWith("appointment_")) {
// New format: just the entity title. Legacy: 'Deadline „Foo" geändert' /
// 'Appointment „Foo" angelegt' etc. Strip the noun + verb wrapper, keep
// the quoted title, then re-wrap in the localized template.
const title = extractQuotedTitle(body) ?? body;
return interpolateTemplate(`event.description.${eventType}`, { title }) ?? body;
}
if (eventType === "deadlines_imported") {
// New format: just the count. Legacy: "N Deadlines aus Fristenrechner übernommen".
const m = body.match(/^(\d+)\b/);
const count = m ? m[1] : body;
return interpolateTemplate("event.description.deadlines_imported", { count }) ?? body;
}
return description;
}
// extractQuotedTitle pulls the body out of a legacy DE description like
// `Deadline „Foo" geändert` — German double-low-9 (U+201E) opening quote and
// double-high-6 (U+201C) closing quote, the pair the Go services actually
// write today. Returns null if no quoted run is found, so callers can fall
// back to the raw body.
function extractQuotedTitle(body: string): string | null {
const m = body.match(/„([^“”„]+)[“”]/);
return m ? m[1] : null;
}
function interpolateTemplate(key: string, vars: Record<string, string>): string | null {
const tmpl = tOrEmpty(key);
if (!tmpl) return null;
return tmpl.replace(/\{(\w+)\}/g, (_, name) => vars[name] ?? `{${name}}`);
}
function translateArrowSlugs(body: string, prefix: string): string {
const m = body.match(/^(\S+)\s*[→→]\s*(\S+)$/);
if (!m) return body;
const a = tOrEmpty(`${prefix}${m[1]}`) || m[1];
const b = tOrEmpty(`${prefix}${m[2]}`) || m[2];
return `${a}${b}`;
}
export function onLangChange(cb: () => void) {
changeCallbacks.push(cb);
}
export function setLang(lang: Lang) {
if (lang === currentLang) return;
currentLang = lang;
localStorage.setItem(STORAGE_KEY, lang);
document.documentElement.lang = lang;
applyTranslations();
applyLangToInputs();
updateToggle();
for (const cb of changeCallbacks) cb();
}
// Native <input type="date|time|datetime-local"> follows the browser locale
// for display formatting unless `lang` is set on the element itself — the
// `lang` attribute on <html> is not enough in Chrome/Safari. Stamp the
// current locale on every such input so DE users see dd.mm.yyyy and 24h.
function applyLangToInputs() {
document.querySelectorAll<HTMLInputElement>(
'input[type="date"], input[type="time"], input[type="datetime-local"]',
).forEach((el) => {
el.lang = currentLang;
});
}
function applyTranslations() {
// When a key is missing from every locale, preserve whatever static text
// the HTML was authored with — never overwrite with the raw key string.
document.querySelectorAll<HTMLElement>("[data-i18n]").forEach((el) => {
const key = el.getAttribute("data-i18n")!;
const val = tOrEmpty(key);
if (val !== "") el.textContent = val;
});
document.querySelectorAll<HTMLElement>("[data-i18n-placeholder]").forEach((el) => {
const key = el.getAttribute("data-i18n-placeholder")!;
const val = tOrEmpty(key);
if (val !== "") (el as HTMLInputElement).placeholder = val;
});
document.querySelectorAll<HTMLElement>("[data-i18n-title]").forEach((el) => {
const key = el.getAttribute("data-i18n-title")!;
const val = tOrEmpty(key);
if (val !== "") el.setAttribute("title", val);
});
}
function updateToggle() {
document.querySelectorAll<HTMLElement>("[data-lang-toggle]").forEach((btn) => {
const lang = btn.getAttribute("data-lang-toggle") as Lang;
btn.classList.toggle("lang-active", lang === currentLang);
});
}
export function initI18n() {
let stored = localStorage.getItem(STORAGE_KEY) as Lang | null;
// One-shot migration from the pre-rebrand key (patholo-lang → paliad-lang).
// Drop this fallback once the grace period is over.
if (stored !== "de" && stored !== "en") {
const legacy = localStorage.getItem(LEGACY_STORAGE_KEY) as Lang | null;
if (legacy === "de" || legacy === "en") {
localStorage.setItem(STORAGE_KEY, legacy);
stored = legacy;
}
}
if (localStorage.getItem(LEGACY_STORAGE_KEY) !== null) {
localStorage.removeItem(LEGACY_STORAGE_KEY);
}
if (stored === "de" || stored === "en") {
currentLang = stored;
}
document.documentElement.lang = currentLang;
document.querySelectorAll<HTMLElement>("[data-lang-toggle]").forEach((btn) => {
btn.addEventListener("click", () => {
setLang(btn.getAttribute("data-lang-toggle") as Lang);
});
});
applyTranslations();
applyLangToInputs();
updateToggle();
}