815 geladene Banken bei ueber 2500 verfuegbaren, und alle Beispiele beginnen mit A oder B – das deutet auf eine abgeschnittene Liste, nicht auf einen falschen Suchbegriff. Die Sandbox-Vermutung ist damit widerlegt: "Aachener Bank" und "BBVA" sind echte Institute. Die Antwort nennt jetzt den Bereich von/bis und alle vorhandenen Anfangsbuchstaben. Fehlen N und R, ist die Sache entschieden und die Abfrage braucht Blaettern – dann suche ich nicht laenger am falschen Ende. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
624 lines
35 KiB
JSON
624 lines
35 KiB
JSON
{
|
||
"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",
|
||
"open": "Offene Buchungen",
|
||
"inbox": "Eingang"
|
||
},
|
||
"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",
|
||
"expenseShare": "Ausgaben-Anteile",
|
||
"noExpenses": "Noch keine Ausgaben in diesem Monat.",
|
||
"display": "Darstellung",
|
||
"asList": "Liste",
|
||
"asPie": "Kreis",
|
||
"range": "Zeitraum",
|
||
"days30": "30 T",
|
||
"days90": "90 T",
|
||
"days180": "6 M",
|
||
"days365": "1 J"
|
||
},
|
||
"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?",
|
||
"openingDateHint": "Stand am Ende dieses Tages. Buchungen bis dahin zählen nicht zum Kontostand, bleiben aber in Liste und Auswertungen. Ohne Stichtag zählt alles.",
|
||
"shortIdentWarning": "Kurze Erkennungstexte treffen leicht Fremdes: „Euro“ steckt auch in „Europa-Park“ oder „PayPal Europe“. Solche Buchungen werden dann fälschlich zu Überträgen. Nimm lieber etwas Eindeutiges wie die IBAN oder „Revolut**5064*“.",
|
||
"moveUp": "Nach oben",
|
||
"moveDown": "Nach unten"
|
||
},
|
||
"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 …",
|
||
"excludedFromStats": "Nicht in Auswertungen einrechnen",
|
||
"excludedHint": "Für Umbuchungen zwischen eigenen Konten: Der Kontostand ändert sich, aber Budget, Dashboard und Statistik lassen diese Buchungen außen vor – das Geld ist ja nicht ausgegeben.",
|
||
"excludedShort": "neutral"
|
||
},
|
||
"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": "Der Kontostand geht nicht auf. Die Datei endet bei {{file}}, aus den Zeilen errechnet sich aber {{app}} – es fehlen bzw. sind {{diff}} zu viel.",
|
||
"reconFirst": "Ab dem {{date}} laufen beide auseinander, bei „{{payee}}“: Die Kontostand-Spalte der Datei springt um {{expected}}, die Zeile selbst weist {{actual}} aus.",
|
||
"reconOpening": "Vor der ersten Zeile stand die Datei bei {{value}}. Trage das beim Konto als Anfangssaldo ein, mit einem Stichtag am Tag davor.",
|
||
"needsTarget": "Gegenkonto wählen",
|
||
"filterColumn": "Nur Zeilen aus Spalte",
|
||
"filterValue": "mit dem Wert",
|
||
"filterValuePlaceholder": "z. B. Giro",
|
||
"filterNone": "— kein Filter —",
|
||
"filterHint": "Revolut legt alle Produkte (Giro, Erspartes, Anlagekonto …) in EINE Datei, jedes mit eigenem Kontostand. Wähle hier eines aus und lies die übrigen mit einem eigenen Konto nochmal ein – sonst zählen die Bewegungen doppelt.",
|
||
"removeEntry": "Eintrag entfernen",
|
||
"removeEntryConfirm": "Den Verlaufs-Eintrag „{{file}}“ entfernen? Die Buchungen sind bereits zurückgenommen.",
|
||
"reconMixedHint": "Enthält die Datei mehrere Konten oder Produkte? Revolut legt Giro, Erspartes und Anlagekonto in EINE Datei, jedes mit eigener Kontostand-Spalte. Dann greift der Abgleich erst, wenn du oben den Zeilenfilter setzt (z. B. Produkt = Giro) und die übrigen Produkte einzeln einliest.",
|
||
"filterTitle": "Diese Datei enthält mehrere Konten",
|
||
"filterValueOption": "{{value}} ({{count}} Zeilen)",
|
||
"removeAllUndone": "Rückgängig gemachte entfernen",
|
||
"removeAllUndoneConfirm": "{{n}} rückgängig gemachte Einträge aus dem Verlauf entfernen? Die Buchungen sind bereits weg, es verschwindet nur der Eintrag.",
|
||
"dupInbox": "schon erfasst",
|
||
"dupInboxHint": "Diese Zahlung hast du unterwegs per Kurzbefehl erfasst – Betrag gleich, Datum in der Nähe. Sie ist bereits gebucht und wird deshalb übersprungen. Falls das doch zwei verschiedene Zahlungen sind, kannst du die Zeile von Hand anhaken.",
|
||
"fromPhone": "Vom Telefon empfangen",
|
||
"fromPhoneHint": "Diese Dateien hast du per Kurzbefehl geschickt. Gebucht ist noch nichts – übernimm eine, dann läuft sie durch die normale Vorschau mit Saldo-Abgleich.",
|
||
"usePhoneFile": "Übernehmen",
|
||
"phoneFileLoaded": "„{{name}}“ geladen – jetzt Format prüfen und Vorschau erzeugen.",
|
||
"discardPhoneFile": "Datei verwerfen",
|
||
"discardPhoneFileConfirm": "„{{name}}“ verwerfen? Die Datei wird gelöscht, gebucht war ohnehin nichts.",
|
||
"detectedBank": "Format erkannt: {{name}}",
|
||
"detectedGeneric": "Format aus der Datei abgeleitet",
|
||
"detectFailed": "Format nicht erkannt",
|
||
"detectUncertain": "Nicht alles war eindeutig – wirf einen Blick auf die Spaltenzuordnung unten, bevor du die Vorschau erzeugst."
|
||
},
|
||
"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."
|
||
},
|
||
"open": {
|
||
"title": "Buchungen ohne Kategorie",
|
||
"subtitle": "{{n}} noch zuzuordnen – älteste zuerst.",
|
||
"allDone": "Alles zugeordnet.",
|
||
"choose": "Kategorie wählen …",
|
||
"noText": "Ohne Text",
|
||
"rememberKeyword": "Zweck als Schlagwort merken, damit die nächste gleiche Buchung beim Import gleich zugeordnet wird",
|
||
"copy": "Text kopieren",
|
||
"copied": "Kopiert",
|
||
"copyFailed": "Kopieren nicht möglich – Text lässt sich jetzt aber markieren."
|
||
},
|
||
"tokens": {
|
||
"title": "Schnellerfassung per Kurzbefehl",
|
||
"intro": "Ein Geräteschlüssel ist ein langes Passwort nur für dein Telefon – nicht dein Anmelde-Passwort. Damit darf ein iOS-Kurzbefehl Zahlungen an Certain schicken, aber sonst nichts: keine Buchungen lesen, nichts ändern, nichts exportieren. Geht das Telefon verloren, widerrufst du hier einfach den Schlüssel.",
|
||
"name": "Wofür ist der Schlüssel?",
|
||
"namePlaceholder": "z. B. iPhone",
|
||
"defaultAccount": "Standardkonto",
|
||
"create": "Schlüssel erzeugen",
|
||
"onceOnly": "Das ist dein Geräteschlüssel. Er wird nur JETZT angezeigt – kopiere ihn und füge ihn in den Kurzbefehl ein. Certain speichert ihn nicht im Klartext, kann ihn dir also später nicht nochmal zeigen.",
|
||
"copy": "Kopieren",
|
||
"copied": "Kopiert",
|
||
"copyFailed": "Kopieren nicht möglich – der Text lässt sich aber markieren.",
|
||
"hide": "Fertig, ausblenden",
|
||
"guideTitle": "So baust du den Kurzbefehl",
|
||
"guideNoDownload": "Zum Herunterladen anbieten kann ich ihn leider nicht: Seit iOS 15 müssen Kurzbefehl-Dateien signiert sein, und signieren kann nur ein Mac mit Apple-Konto. Nachbauen dauert zwei Minuten. Tipp: Die Aktionsnamen ändern sich je nach iOS-Version – such im Aktionsfeld einfach nach dem fett gedruckten Wort, dann findest du sie sicher.",
|
||
"step1": "Suche nach „Eingabe“ → Aktion „Eingabe anfordern“ (englisch: Ask for Input). Frage: Betrag, Eingabetyp Zahl",
|
||
"step2": "Nochmal „Eingabe anfordern“. Frage: Wofür?",
|
||
"step3": "Optional: Suche nach „Liste“ → „Aus Liste wählen“ für das Konto. Ohne diesen Schritt gilt das Standardkonto der Marke",
|
||
"step4": "Suche nach „URL“ → „Inhalte von URL abrufen“. Methode POST, unter „Header“ die zweite Zeile unten eintragen (X-Certain-Token = dein Geräteschlüssel), Anfragetext JSON mit den Feldern amount (Zahl) und payee (Text):",
|
||
"step5": "Suche nach „Wörterbuch“ → „Wörterbuchwert abrufen“, Schlüssel: message. Danach „Mitteilung anzeigen“ – dann steht in der Meldung „12.50 CHF auf …“ statt der rohen Antwort",
|
||
"guideHomeScreen": "Danach über Teilen → „Zum Home-Bildschirm\" ablegen, dann ist es ein Tipp.",
|
||
"guideAutomation": "Wenn deine Kurzbefehle die Automation „Transaktion\" anbieten, kannst du denselben Kurzbefehl daran hängen: Schritt 1 und 2 entfallen, Betrag und Händler kommen dann von dort.",
|
||
"revoke": "Widerrufen",
|
||
"revokeConfirm": "Geräteschlüssel „{{name}}“ widerrufen? Der Kurzbefehl auf dem Gerät funktioniert danach nicht mehr. Bereits erfasste Buchungen bleiben.",
|
||
"noDefault": "kein Standardkonto",
|
||
"lastUsed": "schon benutzt",
|
||
"neverUsed": "noch nie benutzt",
|
||
"fileGuideTitle": "Kontoauszug vom Handy einlesen",
|
||
"fileGuideIntro": "Revolut und Raiffeisen lassen die CSV auch am Telefon exportieren. Ein zweiter Kurzbefehl nimmt sie aus dem Teilen-Menü entgegen. Voraussetzung: Du hast für dieses Konto schon einmal am Rechner eingelesen – Certain verwendet dann dieselbe Spaltenzuordnung.",
|
||
"fileStep1": "Neuer Kurzbefehl → oben auf den Namen tippen → „Im Teilen-Menü anzeigen“ einschalten, Eingabetyp: Dateien",
|
||
"fileStep2": "Kein Konto nötig: Certain erkennt es aus der Datei (Raiffeisen führt die eigene IBAN mit, Revolut die Währung). Nur wenn das nicht eindeutig ist, trägst du account_id ein – die Nummern stehen unten.",
|
||
"fileStep3": "Suche nach „URL“ → „Inhalte von URL abrufen“. Methode POST, Header X-Certain-Token = dein Geräteschlüssel, Anfragetext „Formular“ mit einem einzigen Feld: file = Kurzbefehleingabe.",
|
||
"fileStep4": "„Mitteilung anzeigen“ – dann siehst du „14 gebucht · 512 schon vorhanden“",
|
||
"fileGuideNote": "Gebucht wird sofort, weil ein Auszug hunderte Zeilen hat. Das ist ungefährlich: Bereits vorhandene Buchungen werden erkannt und übersprungen, und der ganze Stapel lässt sich im Import-Verlauf mit einem Klick zurücknehmen.",
|
||
"accountIds": "Konto-Nummern – nur nötig, wenn die Erkennung nicht eindeutig ist"
|
||
},
|
||
"inbox": {
|
||
"title": "Eingang",
|
||
"intro": "Zahlungen, die du unterwegs erfasst hast. Sie sind bereits gebucht – hier ordnest du ihnen in Ruhe eine Kategorie zu. Die Einträge bleiben stehen, damit der spätere Kontoauszug sie wiedererkennt und nichts doppelt verbucht wird.",
|
||
"empty": "Nichts erfasst. Richte unter „Mein Konto“ eine Gerätemarke ein, dann kannst du Zahlungen per Kurzbefehl vom Telefon aus erfassen.",
|
||
"noText": "ohne Text",
|
||
"viaShortcut": "per Kurzbefehl",
|
||
"discard": "Verwerfen",
|
||
"discardConfirm": "Diese Erfassung verwerfen? Die Buchung wird gelöscht. Der Eintrag bleibt als verworfen vermerkt, damit der Kontoauszug die Zahlung später trotzdem erkennt.",
|
||
"book": "Buchen",
|
||
"bookAll": "Alle buchen",
|
||
"bookedN": "{{n}} gebucht.",
|
||
"booked": "gebucht",
|
||
"unclear": "unklar – bitte ansehen",
|
||
"viaMail": "aus einer E-Mail"
|
||
},
|
||
"mailbox": {
|
||
"title": "Postfach für Zahlungs-Mails",
|
||
"intro": "Raiffeisen und Revolut melden Überweisungen per E-Mail. Certain holt sie ab und legt sie als Vorschlag in den Eingang – gebucht wird nur, was du abnickst. Kartenzahlungen im Laden melden die Banken nicht per Mail; dafür gibt es die Schnellerfassung per Kurzbefehl unter „Mein Konto“.",
|
||
"add": "Postfach hinzufügen",
|
||
"name": "Bezeichnung",
|
||
"namePlaceholder": "z. B. Belege",
|
||
"host": "IMAP-Server",
|
||
"port": "Port",
|
||
"username": "Benutzername",
|
||
"password": "Passwort",
|
||
"passwordKeep": "Passwort (leer lassen = unverändert)",
|
||
"passwordHint": "Wird verschlüsselt gespeichert. Der Schlüssel hängt am Server-Geheimnis: Wird es getauscht, musst du das Passwort neu eintragen. Nimm nach Möglichkeit ein App-Passwort statt deines echten.",
|
||
"folder": "Ordner",
|
||
"folderHint": "Nach einem Verbindungstest kannst du hier aus den echten Ordnern wählen.",
|
||
"doneFolder": "Nach dem Auswerten verschieben nach",
|
||
"doneFolderPlaceholder": "leer = nicht verschieben",
|
||
"pollMinutes": "Abrufen alle … Minuten",
|
||
"test": "Verbindung testen",
|
||
"testOk": "Verbindung steht – {{n}} Ordner gefunden.",
|
||
"fetchNow": "Jetzt abrufen",
|
||
"fetched": "{{gefunden}} Mails geprüft · {{neu}} neu · {{unklar}} unklar.",
|
||
"lastPoll": "zuletzt abgerufen",
|
||
"neverPolled": "noch nie abgerufen",
|
||
"lastError": "Fehler",
|
||
"delete": "Postfach entfernen",
|
||
"deleteConfirm": "Postfach „{{name}}“ entfernen? Bereits erfasste Zahlungen bleiben.",
|
||
"noSenders": "Noch kein Absender zugeordnet – ohne Zuordnung wird nichts übernommen.",
|
||
"noAccount": "kein Konto",
|
||
"fromPlaceholder": "Erkennungstext, z. B. raiffeisen",
|
||
"security": "Verschlüsselung",
|
||
"secSsl": "SSL/TLS (üblich, Port 993)",
|
||
"secStarttls": "STARTTLS (Port 143)",
|
||
"secNone": "keine",
|
||
"secNoneWarn": "Ohne Verschlüsselung gehen Benutzername und Passwort im Klartext über das Netz. Nur sinnvoll, wenn der Mailserver auf demselben Rechner läuft.",
|
||
"addSender": "Absender zuordnen",
|
||
"edit": "Postfach bearbeiten",
|
||
"skippedTitle": "Diese Mails wurden übergangen",
|
||
"skippedHint": "Für sie passt keine Absender-Zuordnung. Trag einen Teil der Adresse oder des Betreffs unten ein, dann werden sie beim nächsten Abruf übernommen.",
|
||
"fetchedNone": "Keine Mails im gewählten Ordner gefunden. Stimmt der Ordner? Beim ersten Abruf werden die letzten 14 Tage durchsucht.",
|
||
"senderHint": "Gesucht wird in Absender, Betreff und im Anfang des Textes – das greift auch bei weitergeleiteten Mails. Die Währung ist optional: Revolut schickt für Euro und Franken dieselbe Mail, erst sie sagt, welches Konto gemeint ist. Zuordnungen mit Währung gehen den allgemeinen vor.",
|
||
"deleteSender": "Zuordnung entfernen",
|
||
"deleteSenderConfirm": "Zuordnung „{{text}}“ entfernen? Bereits erfasste Zahlungen bleiben.",
|
||
"anyCurrency": "jede Währung"
|
||
},
|
||
"bank": {
|
||
"title": "Bankkonten direkt verbinden",
|
||
"intro": "Seit PSD2 müssen EU-Banken eine Schnittstelle anbieten – aber nur für lizenzierte Dienste. Enable Banking hält diese Lizenz und reicht sie weiter. Damit lassen sich N26 und Revolut direkt abrufen, ohne CSV. Die Schweiz fällt nicht unter PSD2; Raiffeisen bleibt beim Datei-Import.",
|
||
"setupTitle": "Einmal einrichten",
|
||
"setupHint": "Du brauchst eine eigene Anwendung bei Enable Banking. Mitliefern lässt sich das nicht – der Schlüssel ist an deine Registrierung gebunden.",
|
||
"setupStep1": "Auf enablebanking.com anmelden (Konto wird beim ersten Anmelden angelegt).",
|
||
"setupStep2": "Eine Anwendung im Bereich „Production“ anlegen und die Schlüsseldatei (.pem) herunterladen. Sie wird erst aktiv, wenn du deine eigenen Konten verknüpfst.",
|
||
"setupStep3": "Diese Adresse dort als Rückleitung („redirect URL“) eintragen:",
|
||
"setupStart": "Zugangsdaten eintragen",
|
||
"appTitle": "Zugangsdaten von Enable Banking",
|
||
"appReady": "Anwendung hinterlegt",
|
||
"appSaved": "Gespeichert.",
|
||
"applicationId": "Application ID",
|
||
"privateKey": "Privater Schlüssel – ganzer Inhalt der .pem-Datei",
|
||
"privateKeyKeep": "Privater Schlüssel (leer lassen = unverändert)",
|
||
"privateKeyHint": "Die Datei komplett öffnen und alles einfügen, MIT den Zeilen „-----BEGIN PRIVATE KEY-----“ und „-----END PRIVATE KEY-----“ – ohne sie ist es kein gültiges PEM. Wird verschlüsselt gespeichert und verlässt den Server nie; mit ihm wird jede Anfrage an die Bank signiert.",
|
||
"baseUrl": "Öffentliche Adresse dieser Installation",
|
||
"baseUrlHint": "Muss mit https:// beginnen und von aussen erreichbar sein – Banken leiten nicht auf eine unverschlüsselte Adresse zurück. Genau diese Adresse plus /bank/rueckkehr trägst du bei Enable Banking ein.",
|
||
"country": "Land der Bank",
|
||
"findBanks": "Banken suchen",
|
||
"noBanks": "Keine Treffer. Versuch einen kürzeren Suchbegriff, oder lass das Land leer.",
|
||
"pickBank": "{{n}} Treffer von {{gesamt}} geladenen Banken – wähle deine aus:",
|
||
"connect": "Verbinden",
|
||
"notMapped": "noch keinem Konto zugeordnet",
|
||
"mapHint": "Ohne Zuordnung wird von diesem Konto nichts abgerufen.",
|
||
"noAccountsFound": "Es wurden keine Konten übermittelt.",
|
||
"sync": "Umsätze holen",
|
||
"synced": "{{geholt}} Umsätze geprüft · {{neu}} neu im Eingang.",
|
||
"noMapping": "Kein Konto zugeordnet – ordne oben zuerst zu, dann wird abgerufen.",
|
||
"lastSync": "zuletzt geholt am {{datum}}",
|
||
"neverSynced": "noch nie geholt",
|
||
"lastError": "Fehler",
|
||
"validUntil": "Zustimmung gültig bis {{datum}}",
|
||
"expiresSoon": "Zustimmung läuft am {{datum}} ab – danach musst du neu autorisieren.",
|
||
"disconnect": "Verbindung trennen",
|
||
"disconnectConfirm": "Verbindung zu „{{name}}“ trennen? Bereits abgerufene Buchungen bleiben.",
|
||
"search": "Bank suchen",
|
||
"searchPlaceholder": "z. B. revolut oder n26",
|
||
"searchHint": "Ohne Land wird überall gesucht. Das ist meist richtig: Das Sitzland einer Bank steht nicht in der IBAN – Revolut vergibt deutsche IBANs, sitzt aber in Litauen.",
|
||
"allCountries": "alle Länder",
|
||
"noMatch": "{{gesamt}} Banken geladen, aber keine passt zum Suchbegriff. Versuch etwas Kürzeres – manche heissen in der Liste anders als im Alltag.",
|
||
"noneLoaded": "Die Schnittstelle hat gar keine Banken geliefert. Das liegt nicht am Suchbegriff: Prüf, ob deine Anwendung bei Enable Banking schon aktiv ist – sie wird es erst, wenn du dort deine eigenen Konten verknüpft hast.",
|
||
"sampleTitle": "Beispiele quer durch die geladene Liste:",
|
||
"sandboxHint": "Stehen dort lauter Test- oder Mock-Institute statt echter Banken, ist deine Anwendung im Control Panel als „Sandbox“ angelegt. N26 und Revolut gibt es nur in „Production“ – dort heissen sie genau so, in DE wie in LT.",
|
||
"range": "Die Liste reicht von „{{von}}“ bis „{{bis}}“.",
|
||
"letters": "Vorhandene Anfangsbuchstaben",
|
||
"truncatedHint": "Fehlen ganze Buchstaben – etwa N oder R –, ist die Liste abgeschnitten und deine Bank wurde gar nicht mitgeliefert. Dann liegt es nicht am Suchbegriff, und ich muss die Abfrage blättern lassen."
|
||
},
|
||
"bankReturn": {
|
||
"title": "Rückkehr von der Bank",
|
||
"working": "Die Zustimmung wird abgeschlossen …",
|
||
"ok": "Verbunden. {{n}} Konten gefunden.",
|
||
"next": "Ordne sie jetzt in den Einstellungen deinen Konten in Certain zu – danach lassen sich die Umsätze holen.",
|
||
"failed": "Das hat nicht geklappt",
|
||
"failedHint": "Der Code von der Bank gilt nur einmal und nur kurz. Starte die Verbindung in den Einstellungen neu.",
|
||
"missing": "Die Bank hat keinen Code zurückgegeben.",
|
||
"toSettings": "Zu den Einstellungen"
|
||
}
|
||
}
|