Files
certain/web/src/locales/de.json
T
GuidoandClaude Opus 4.8 62eab06bdc feat: Gegenseite eines Übertrags braucht keine eigene Transfer-Regel
Bisher musste die Regel auf BEIDEN Auszügen ein fremdes Gegenkonto liefern. Beim
Empfangs-Auszug zeigt sie aber auf das Konto, das gerade importiert wird – damit
blieb die Zeile ohne Gegenkonto und wurde still als Einnahme gebucht.

- Gegenbuchungen werden über die Konto-Seite bestehender Transfers gesucht, nicht
  über das Konto-Paar. Der Empfangs-Auszug braucht damit keine Regel mehr; eine
  Regel auf der abgehenden Seite genügt für beide Dateien.
- Trifft eine Transfer-Regel, ohne dass ein Gegenkonto feststeht, wird die Zeile
  nicht mehr als Einnahme/Ausgabe gebucht, sondern in der Prüfansicht mit
  „Gegenkonto wählen" markiert – sonst zählt die Bewegung je nach Import-
  Reihenfolge doppelt.
- Tests für beide Reihenfolgen; 86 grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-21 08:20:13 +02:00

418 lines
18 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"common": {
"save": "Speichern",
"cancel": "Abbrechen",
"delete": "Löschen",
"create": "Anlegen",
"edit": "Bearbeiten",
"loading": "Lädt…",
"logout": "Abmelden",
"admin": "Administrator",
"user": "Benutzer",
"close": "Schließen",
"retry": "Erneut versuchen",
"actions": "Aktionen"
},
"nav": {
"overview": "Übersicht",
"accounts": "Konten",
"categories": "Kategorien",
"transactions": "Buchungen",
"budget": "Budget",
"import": "Import",
"system": "System",
"users": "Benutzer",
"settings": "Einstellungen"
},
"login": {
"subtitle": "Bitte anmelden",
"username": "Benutzername",
"password": "Passwort",
"submit": "Anmelden",
"error": "Benutzername oder Passwort falsch",
"expired": "Deine Sitzung ist abgelaufen. Bitte erneut anmelden."
},
"changepw": {
"title": "Passwort ändern",
"forcedHint": "Bitte lege ein eigenes Passwort fest, bevor du fortfährst.",
"current": "Aktuelles Passwort",
"new": "Neues Passwort",
"repeat": "Neues Passwort wiederholen",
"submit": "Passwort speichern",
"mismatch": "Die neuen Passwörter stimmen nicht überein.",
"saved": "Passwort geändert.",
"policyHint": "Die Passwortrichtlinie wurde geändert. Dein bisheriges Passwort erfüllt sie nicht mehr – bitte lege ein neues fest."
},
"users": {
"title": "Benutzer",
"new": "Neuer Benutzer",
"username": "Benutzername",
"displayName": "Anzeigename",
"password": "Temporär-Passwort",
"passwordHint": "Der Benutzer wird beim ersten Login zum Ändern aufgefordert.",
"role": "Rolle",
"status": "Status",
"active": "Aktiv",
"inactive": "Deaktiviert",
"resetPassword": "Passwort zurücksetzen",
"deleteConfirm": "Diesen Benutzer wirklich löschen?",
"created": "Benutzer angelegt.",
"you": "(du)",
"twoFactor": "Zwei-Faktor",
"resetTwoFactor": "Zwei-Faktor zurücksetzen",
"resetTwoFactorConfirm": "Zwei-Faktor für „{{name}}“ abschalten? Nur nötig, wenn Gerät und Wiederherstellungscodes verloren sind.",
"twoFactorReset": "Zwei-Faktor zurückgesetzt.",
"generatePassword": "Passwort erzeugen"
},
"account": {
"title": "Mein Konto",
"password": "Passwort ändern",
"twoFactor": "Zwei-Faktor-Authentifizierung",
"manage2fa": "2FA verwalten"
},
"settings": {
"title": "Einstellungen",
"general": "Darstellung & Sprache",
"baseCurrency": "Hauptwährung",
"baseCurrencyHint": "Währung für Budget-Summen und Dashboard-Gesamtwerte.",
"locale": "Sprache",
"theme": "Darstellung",
"themeSystem": "Automatisch (System)",
"themeLight": "Hell",
"themeDark": "Dunkel",
"budgetStartDay": "Budget-Monat beginnt am",
"budgetStartDayHint": "Tag, an dem dein Budget-Monat startet (z. B. 25.).",
"dateFormat": "Datumsformat",
"saved": "Gespeichert.",
"languageDe": "Deutsch",
"languageEn": "Englisch",
"backup": "Backup & Export",
"exportHint": "Zum Ansehen und Weiterverarbeiten, etwa in einer Tabellenkalkulation. Diese Dateien lassen sich nicht zurückladen.",
"exportTxnCsv": "Buchungen (CSV)",
"exportTxnJson": "Buchungen (JSON)",
"exportAll": "Datenübersicht (JSON)",
"dbBackup": "Komplettes DB-Backup herunterladen",
"dbBackupHint": "Vollständige Datenbank aller Nutzer (nur Admin) – zum Wiederherstellen sichern.",
"keywordReview": "Schlagwörter prüfen",
"keywordReviewHint": "Diese Schlagwörter werden auffällig oft wieder wegkorrigiert – stimmen sie vielleicht nicht mehr?",
"keywordCorrected": "{{overridden}} von {{applied}} Buchungen korrigiert",
"keep": "Behalten",
"remove": "Entfernen",
"security": "Sicherheit",
"securityHint": "Zwei-Faktor-Authentisierung für dein eigenes Konto.",
"twoFactor": "Zwei-Faktor verwalten",
"backupHint": "Das Voll-Backup enthält alle deine Daten und lässt sich unten wieder einspielen.",
"exportBackup": "Voll-Backup (JSON)",
"systemBackup": "Systemweites Voll-Backup (JSON)",
"systemBackupWarning": "Das systemweite Backup enthält Passwort-Hashes und Zwei-Faktor-Geheimnisse aller Benutzer. Behandle die Datei wie ein Passwort."
},
"dashboard": {
"title": "Übersicht",
"emptyCards": "Keine Karten vorhanden – über den Anordnen-Modus hinzufügen.",
"edit": "Anordnen",
"done": "Fertig",
"addCard": "Karte hinzufügen",
"reset": "Zurücksetzen",
"resetConfirm": "Dashboard auf das Standard-Layout zurücksetzen?"
},
"cards": {
"balances": "Kontostände",
"budgetDonut": "Budget",
"netWorth": "Vermögensverlauf",
"budgetProgress": "Budget-Fortschritt",
"incomeExpense": "Einnahmen & Ausgaben",
"recent": "Letzte Buchungen",
"total": "Gesamt",
"planned": "geplant",
"spent": "ausgegeben",
"assets": "Vermögen",
"income": "Einnahmen",
"expense": "Ausgaben",
"net": "Saldo",
"noBudget": "Noch kein Budget für diesen Monat.",
"breakdown": "Aufschlüsselung",
"byGroup": "Gruppen",
"byCategory": "Kategorien"
},
"server": {
"unreachable": "Server nicht erreichbar.",
"sessionKept": "Deine Anmeldung ist noch gültig – sobald der Server wieder antwortet, geht es weiter."
},
"accounts": {
"title": "Konten",
"new": "Neues Konto",
"edit": "Konto bearbeiten",
"name": "Name",
"type": "Typ",
"currency": "Währung",
"icon": "Symbol",
"color": "Farbe",
"openingBalance": "Anfangssaldo",
"openingDate": "Stichtag",
"identifiers": "Erkennungs-Nummern (IBAN etc.)",
"addIdentifier": "Nummer hinzufügen",
"textIdentPlaceholder": "z. B. Sparkonto, Tagesgeld",
"identShort": "Nr.",
"total": "Gesamt",
"empty": "Noch keine Konten. Lege dein erstes Konto an.",
"deleteConfirm": "Dieses Konto und alle zugehörigen Buchungen löschen?"
},
"accountTypes": {
"girokonto": "Girokonto",
"sparkonto": "Sparkonto",
"bargeld": "Bargeld",
"kreditkarte": "Kreditkarte",
"depot": "Depot / Investment",
"sonstiges": "Sonstiges"
},
"identifierKinds": {
"iban": "IBAN",
"account_no": "Kontonummer",
"card_no": "Kartennummer",
"text": "Text (Erkennung)"
},
"transferRules": {
"title": "Transfer-Erkennung",
"hint": "Buchungen, deren Text eines dieser Wörter enthält (z. B. „Revolut“), werden als Transfer gesetzt. Das Zielkonto kannst du fest wählen – oder automatisch aus dem Buchungstext erraten lassen (über die Erkennungs-Texte je Konto: Konto bearbeiten, Art „Text“).",
"wordPlaceholder": "Wort (z. B. Übertrag)",
"autoTarget": "automatisch",
"empty": "Noch keine Transfer-Schlagwörter."
},
"categories": {
"title": "Kategorien",
"newGroup": "Neue Gruppe",
"editGroup": "Gruppe bearbeiten",
"newCategory": "Neue Kategorie",
"editCategory": "Kategorie bearbeiten",
"name": "Name",
"kind": "Art",
"income": "Einnahme",
"expense": "Ausgabe",
"emptyGroup": "Keine Kategorien in dieser Gruppe.",
"deleteConfirm": "Diese Kategorie löschen?",
"deleteGroupConfirm": "Diese Gruppe samt aller Kategorien löschen?",
"keywordsBtn": "Schlagwörter",
"keywordsCount_one": "{{count}} Schlagwort hinterlegt",
"keywordsCount_other": "{{count}} Schlagwörter hinterlegt",
"keywordsTitle": "Schlagwörter – {{name}}",
"keywordsHint": "Buchungen, die eines dieser Wörter im Empfänger oder Verwendungszweck enthalten, werden bei künftigen Importen automatisch dieser Kategorie zugeordnet.",
"keywordAdd": "Wort eingeben und Enter",
"keywordAmount": "Betrag (optional)",
"keywordEmpty": "Noch keine Schlagwörter.",
"keywordAddBtn": "Hinzufügen",
"keywordEditHint": "Doppelklick auf ein Schlagwort lädt es mit Betrag oben zum Bearbeiten.",
"keywordEditing": "Vorhandenes Schlagwort wird bearbeitet – Escape bricht ab.",
"searchPlaceholder": "Kategorie suchen …"
},
"transactions": {
"title": "Buchungen",
"new": "Neue Buchung",
"edit": "Buchung bearbeiten",
"expense": "Ausgabe",
"income": "Einnahme",
"transfer": "Transfer",
"date": "Datum",
"account": "Konto",
"fromAccount": "Von Konto",
"toAccount": "Auf Konto",
"category": "Kategorie",
"amount": "Betrag",
"toAmount": "Gutschrift",
"payee": "Empfänger",
"description": "Verwendungszweck",
"uncategorized": "Ohne Kategorie",
"empty": "Noch keine Buchungen.",
"needAccount": "Lege zuerst ein Konto an, um Buchungen zu erfassen.",
"allAccounts": "Alle Konten",
"allTypes": "Alle Typen",
"deleteConfirm": "Diese Buchung löschen?",
"amountRequired": "Bitte einen Betrag eingeben.",
"accountRequired": "Bitte ein Konto wählen.",
"budgetAsSavings": "Als Sparen ins Budget zählen",
"budgetCategory": "Budget-Kategorie"
},
"budget": {
"title": "Budget",
"monthMode": "Monat",
"templateMode": "Standard-Budget",
"income": "Einnahmen",
"expenses": "Ausgaben",
"planned": "Geplant",
"totalIncome": "Einnahmen gesamt",
"totalExpense": "Ausgaben gesamt",
"reset": "Auf Standard zurücksetzen",
"resetTitle": "Monat zurücksetzen",
"resetConfirm": "Diesen Monat auf das Standard-Budget zurücksetzen? Die Anpassungen dieses Monats gehen verloren.",
"templateHint": "Das Standard-Budget gilt für jeden Monat, solange du ihn nicht einzeln anpasst.",
"prevMonth": "Vorheriger Monat",
"nextMonth": "Nächster Monat",
"monthsShown": "Monate:",
"setAsTemplate": "Als Standard festlegen",
"setAsTemplateConfirm": "Die Soll-Werte dieses Monats als neues Standard-Budget übernehmen? Die bisherige Vorlage wird ersetzt (geplante Einnahmen bleiben).",
"copyFromTemplate": "Standard übernehmen",
"copyFromTemplateConfirm": "Diesen Monat mit dem Standard-Budget überschreiben? Die bisherigen Anpassungen dieses Monats gehen verloren.",
"addIncome": "Geplante Einnahme",
"editIncome": "Einnahme bearbeiten",
"noIncome": "Noch keine geplanten Einnahmen.",
"deleteIncomeConfirm": "Diese geplante Einnahme löschen?",
"incomeLabel": "Bezeichnung",
"incomeCategory": "Kategorie",
"targetAccount": "Zielkonto"
},
"import": {
"title": "Import",
"modeCsv": "CSV",
"modeDoc": "PDF · Bild",
"readDoc": "Beleg auslesen",
"docHint": "PDF-/Bild-Erkennung ist Best-Effort — bitte jede Zeile prüfen und ggf. korrigieren.",
"extractedText": "Extrahierter Text (zur Kontrolle)",
"step1": "1 · Konto & Datei",
"step2": "2 · Format",
"step3": "3 · Spalten zuordnen",
"step4": "4 · Prüfen & buchen",
"account": "Zielkonto",
"file": "Datei",
"preset": "Bank-Vorlage (vorgefertigt)",
"template": "Eigene Vorlage",
"templateAny": "Vorlage",
"presetGroup": "Bank-Vorlagen",
"ownGroup": "Eigene Vorlagen",
"templateManual": "Manuell einstellen",
"overwriteConfirm": "Vorlage „{{name}}“ mit den aktuellen Einstellungen überschreiben?",
"autoPreviewNote": "Die Spaltenvorschau erscheint automatisch, sobald Datei und Format passen.",
"moreColumns": "Weitere Spalten (optional)",
"ibanHint": "IBAN der Gegenseite – nur nötig, wenn dein Export eine Spalte mit der IBAN des anderen Kontos enthält; dient der automatischen Transfer-Erkennung.",
"belegPreview": "Beleg",
"delimiter": "Trennzeichen",
"decimal": "Dezimaltrenner",
"dateFormat": "Datumsformat",
"encoding": "Kodierung",
"amountMode": "Betragsspalten",
"skipRows": "Zeilen überspringen",
"hasHeader": "Erste Zeile ist Kopfzeile",
"modeSigned": "Ein Betrag (mit Vorzeichen)",
"modeDebitCredit": "Getrennte Soll-/Haben-Spalten",
"modeAbsExpense": "Ein Betrag (immer Ausgabe)",
"readFile": "Datei einlesen",
"makePreview": "Vorschau erstellen",
"saveTemplate": "Als Vorlage speichern",
"templateName": "Vorlagenname",
"colDate": "Datum",
"colAmount": "Betrag",
"colDebit": "Soll (Ausgang)",
"colCredit": "Haben (Eingang)",
"colPayee": "Empfänger",
"colPurpose": "Verwendungszweck",
"colIban": "Gegen-IBAN",
"makePreviewHint": "Ordne mindestens Datum und Betrag zu.",
"rawHint": "Nur die ersten Zeilen – sie dienen nur der Spaltenzuordnung.",
"makePreviewNote": "„Vorschau erstellen“ zeigt danach ALLE Buchungen zum Prüfen und Buchen.",
"summary": "{{total}} Zeilen erkannt · {{n}} werden gebucht (Duplikate/ungültige ausgenommen).",
"noneValid": "Keine gültige Buchung erkannt. Prüfe Datumsformat, Dezimaltrenner und Spaltenzuordnung – am einfachsten oben die passende Bank-Vorlage wählen.",
"commit": "{{n}} Buchungen übernehmen",
"imported": "{{n}} Buchungen importiert.",
"importedCount": "{{n}} gebucht",
"typeCol": "Typ",
"payeeCol": "Empfänger / Zweck",
"badDate": "Datum?",
"duplicate": "Duplikat",
"counterpart": "Gegenbuchung",
"chooseAccount": "Konto wählen",
"history": "Import-Verlauf",
"undo": "Rückgängig",
"undoConfirm": "Alle Buchungen aus {{file}} wieder entfernen?",
"undone": "rückgängig gemacht",
"needFile": "Bitte zuerst eine CSV-Datei wählen.",
"needFileAccount": "Bitte Konto und Datei wählen.",
"colFee": "Gebühr",
"colCurrency": "Währung",
"colState": "Status",
"extraColsHint": "Gebühr wird vom Betrag abgezogen. Zeilen mit Status ungleich COMPLETED (z. B. storniert) und Zeilen in einer anderen Währung als das Zielkonto werden nicht gebucht.",
"skipState": "storniert",
"skipCurrency": "andere Währung",
"colBalance": "Kontostand (laufend)",
"reconOk": "Saldo-Abgleich stimmt: alle {{n}} Schritte passen zur Kontostand-Spalte der Datei.",
"reconDiff": "Saldo-Abgleich weicht ab. Laut Datei: {{file}} · errechnet: {{app}} · Differenz: {{diff}}.",
"reconFirst": "Erste Abweichung am {{date}} bei „{{payee}}“: Bank {{expected}}, erkannt {{actual}}.",
"reconOpening": "Anfangssaldo laut Datei: {{value}} (trage ihn beim Konto ein, damit der Stand stimmt).",
"needsTarget": "Gegenkonto wählen"
},
"password": {
"show": "Passwort anzeigen",
"hide": "Passwort verbergen",
"met": "(erfüllt)",
"unmet": "(offen)",
"ruleLength": "Mindestens {{n}} Zeichen",
"ruleUpper": "Mindestens ein Grossbuchstabe",
"ruleLower": "Mindestens ein Kleinbuchstabe",
"ruleDigit": "Mindestens eine Ziffer",
"ruleSpecial": "Mindestens ein Sonderzeichen"
},
"twofactor": {
"title": "Zwei-Faktor-Authentisierung",
"intro": "Zusätzlich zum Passwort ein Einmalcode aus einer Authenticator-App. Wer nur dein Passwort kennt, kommt damit nicht mehr hinein.",
"on": "Aktiv",
"off": "Nicht eingerichtet",
"start": "Einrichten",
"scan": "Scanne den Code mit deiner Authenticator-App (z. B. Aegis, 1Password, Google Authenticator).",
"qrAlt": "QR-Code zur Einrichtung der Authenticator-App",
"manual": "Geht der Scan nicht, gib diesen Schlüssel von Hand ein:",
"code": "Code aus der App",
"codeHint": "Gib den sechsstelligen Code aus deiner Authenticator-App ein.",
"activate": "Aktivieren",
"verify": "Bestätigen",
"useRecovery": "Wiederherstellungscode verwenden",
"useApp": "Doch Code aus der App",
"recoveryCode": "Wiederherstellungscode",
"recoveryHint": "Gib einen deiner Wiederherstellungscodes ein. Jeder funktioniert nur einmal.",
"codesTitle": "Wiederherstellungscodes",
"codesHint": "Bewahre diese Codes sicher auf – zum Beispiel ausgedruckt. Sie sind der einzige Weg hinein, wenn dein Gerät verloren geht. Jeder Code funktioniert genau einmal, und angezeigt werden sie nur dieses eine Mal.",
"codesSaved": "Habe ich gesichert",
"codesLeft": "Noch {{n}} unbenutzte Wiederherstellungscodes.",
"copy": "Kopieren",
"copied": "In die Zwischenablage kopiert.",
"download": "Als Datei sichern",
"newCodes": "Neue Codes erzeugen",
"newCodesTitle": "Neue Wiederherstellungscodes",
"newCodesHint": "Die bisherigen Codes werden dabei ungültig. Zur Bestätigung dein Passwort eingeben.",
"disable": "Zwei-Faktor abschalten",
"disableTitle": "Zwei-Faktor abschalten",
"disableHint": "Danach genügt wieder das Passwort allein. Zur Bestätigung dein Passwort eingeben.",
"disabled": "Zwei-Faktor abgeschaltet.",
"requiredHint": "Die Richtlinie verlangt Zwei-Faktor. Bis zur Einrichtung bleibt der Rest der Anwendung gesperrt."
},
"policy": {
"title": "Passwortrichtlinie",
"hint": "Gilt für alle Benutzer dieser Instanz.",
"minLength": "Mindestlänge",
"require_upper": "Grossbuchstabe verlangen",
"require_lower": "Kleinbuchstabe verlangen",
"require_digit": "Ziffer verlangen",
"require_special": "Sonderzeichen verlangen",
"mfaRequired": "Zwei-Faktor für alle verpflichtend",
"mfaHint": "Benutzer ohne zweiten Faktor müssen ihn beim nächsten Anmelden einrichten.",
"tightenWarning": "Verschärfung: Benutzer, deren Passwort die neue Richtlinie nicht erfüllt, müssen es beim nächsten Anmelden ändern.",
"mfaWarning": "Alle Benutzer ohne Zwei-Faktor werden beim nächsten Anmelden zur Einrichtung geführt – auch du."
},
"restore": {
"title": "Backup zurückladen",
"hint": "Wähle eine Backup-Datei. Sie wird zuerst nur geprüft; eingespielt wird erst nach deiner Bestätigung.",
"file": "Backup-Datei",
"empty": "Die Datei enthält keine Daten.",
"scopeUser": "Backup der Daten von „{{name}}“.",
"scopeSystem": "Systemweites Backup mit {{n}} Benutzern.",
"exportedAt": "Erstellt am {{when}}",
"mode": "Vorgehen",
"modeReplace": "Ersetzen",
"modeMerge": "Ergänzen",
"modeReplaceHint": "Vorhandene Daten werden gelöscht und durch das Backup ersetzt. Vorher legt der Server automatisch eine Sicherungskopie der Datenbank an.",
"modeMergeHint": "Nichts wird gelöscht. Nur was fehlt, kommt hinzu; Budget, Regeln und Einstellungen bleiben unangetastet, wenn dazu schon etwas vorhanden ist.",
"start": "Wiederherstellen",
"confirmTitle": "Wirklich wiederherstellen?",
"confirmReplace": "Alle deine Konten, Buchungen, Kategorien und Einstellungen werden gelöscht und durch das Backup ersetzt.",
"confirmSystem": "Alle Benutzer und deren Daten werden gelöscht und durch das Backup ersetzt. Anschliessend sind alle Sitzungen beendet.",
"done": "Wiederherstellung abgeschlossen.",
"doneSystem": "Wiederherstellung abgeschlossen. Bitte neu anmelden."
}
}