Ein neuer Reiter "Eingang" mit allem, worueber jemand entscheiden muss. Vier Abschnitte, jeweils mit Anzahl im Kopf: - Zu buchen: offene Eingangseintraege aus Kurzbefehl, Postfach oder Bank. Buchen, als Uebertrag buchen, verwerfen - oder alle auf einmal, bei denen das Konto feststeht. Unklare tragen einen Hinweis ueber den Knoepfen, nicht darunter: Man soll sie ansehen, nicht wegbuchen. - Koennten Uebertraege sein: zwei getrennte Buchungen, die zusammengehoeren koennten. Verbinden oder ablehnen. Hat eine der beiden eine Kategorie, steht dabei, dass sie durchs Verbinden aus dem Budget faellt. - Ohne Kategorie: gebuchtes Geld, das in keiner Budget-Zeile mitzaehlt. Ein Tipp, eine Kategorie - kein Formular mit zwoelf Feldern davor. - Sieht doppelt aus: gleiches Konto, gleicher Tag, gleicher Betrag. Mit der Kennung der Bank je Zeile, denn verschiedene Kennungen heissen, dass die Bank sie als verschiedene Zahlungen gemeldet hat. Alles in einem Abruf. Vier getrennte Zwischenspeicher koennten offline aus vier verschiedenen Momenten stammen und sich widersprechen. Hier sitzt der einzige 409-Fall der App: Beim Buchen als Uebertrag kann das Backend Bedenken haben. Das ist eine Frage, kein Fehler - die App zeigt den Hinweis und wiederholt den Aufruf auf Wunsch mit trotzdem=true. Ihn zu verschlucken waere falsch, ihn als blossen Fehler zu zeigen auch. Zwei Dinge, die die Tests festhalten: Ohne Konto laesst sich nichts buchen (das Backend lehnt mit 400 ab, der Knopf bleibt also grau - und die Zeile sagt auch warum). Und ein Uebertrag braucht keine Kategorie, sonst fragte die Liste ewig nach einer, die es nie geben wird. Die Pruefdatei deckt jetzt auch Eingang, Dubletten und Uebertragsvorschlaege ab. Die aelteren Pruefungen zaehlten exakt und wurden dadurch rot - sie pruefen jetzt Eigenschaften statt Mengen, damit sie das naechste Wachstum ueberleben. 54 Tests gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
274 lines
13 KiB
Plaintext
274 lines
13 KiB
Plaintext
/* Certain für iOS – Deutsch (Grundsprache)
|
||
|
||
Die Schlüssel sind nach Bereich benannt. Bitte beim Ergänzen die englische
|
||
Fassung gleich mitpflegen; im Web stehen de.json und en.json zeilengleich,
|
||
und das ist der Grund, warum dort nie etwas fehlt. */
|
||
|
||
/* --- Allgemein --- */
|
||
"allgemein.nochmal" = "Nochmal versuchen";
|
||
"allgemein.abbrechen" = "Abbrechen";
|
||
"allgemein.abmelden" = "Abmelden";
|
||
"allgemein.unbekannt" = "Unbekannt";
|
||
"allgemein.sichern" = "Sichern";
|
||
"allgemein.ok" = "OK";
|
||
|
||
/* --- Reiter --- */
|
||
"reiter.dashboard" = "Übersicht";
|
||
"reiter.budget" = "Budget";
|
||
"reiter.buchungen" = "Buchungen";
|
||
"reiter.abos" = "Verträge";
|
||
"reiter.arbeitsliste" = "Eingang";
|
||
"reiter.konten" = "Konten";
|
||
"reiter.einstellungen" = "Einstellungen";
|
||
|
||
/* --- Fehler --- */
|
||
"fehler.titel" = "Das hat nicht geklappt";
|
||
"fehler.unbekannt" = "Unbekannter Fehler.";
|
||
"fehler.keineVerbindung" = "Keine Verbindung zum Server: %@";
|
||
"fehler.keinCertainServer" = "Unter dieser Adresse antwortet zwar etwas, aber kein Certain.";
|
||
"fehler.nichtAngemeldet" = "Die Anmeldung dieses Geräts gilt nicht mehr. Vermutlich wurde sie am Rechner widerrufen.";
|
||
"fehler.passwortWechseln" = "Bevor es weitergeht, muss das Passwort gewechselt werden.";
|
||
"fehler.zweiterFaktor" = "Dieses Konto braucht einen zweiten Faktor.";
|
||
"fehler.nichtGefunden" = "Gibt es nicht.";
|
||
"fehler.server" = "Der Server meldet einen Fehler (%d).";
|
||
"fehler.antwortUnlesbar" = "Die Antwort des Servers passt nicht zu dem, was die App erwartet: %@";
|
||
|
||
/* --- Offline --- */
|
||
"stand.hinweis" = "Stand von %@ – der Server ist gerade nicht erreichbar.";
|
||
|
||
/* --- Server-Adresse --- */
|
||
"server.titel" = "Mit Certain verbinden";
|
||
"server.ueberschrift" = "Adresse";
|
||
"server.platzhalter" = "budget.beispiel.com";
|
||
"server.erklaerung" = "Dieselbe Adresse, unter der du Certain im Browser öffnest. Ohne https davor geht auch.";
|
||
"server.verbinden" = "Verbinden";
|
||
"server.keineAdresse" = "Das sieht nicht nach einer Adresse aus.";
|
||
|
||
/* --- Anmeldung --- */
|
||
"anmeldung.titel" = "Anmelden";
|
||
"anmeldung.benutzer" = "Benutzername";
|
||
"anmeldung.passwort" = "Passwort";
|
||
"anmeldung.anmelden" = "Anmelden";
|
||
"anmeldung.erklaerung" = "Nur dieses eine Mal. Danach merkt sich das Gerät einen eigenen Schlüssel, und dein Passwort wird nirgends gespeichert.";
|
||
"anmeldung.andererServer" = "Anderen Server wählen";
|
||
"anmeldung.aktuellerServer" = "Verbunden mit %@";
|
||
"anmeldung.markeOhneSchluessel" = "Der Server hat keinen Schlüssel zurückgegeben. Bitte nochmal versuchen.";
|
||
|
||
/* --- Zweiter Faktor --- */
|
||
"zweifaktor.titel" = "Zweiter Faktor";
|
||
"zweifaktor.ueberschrift" = "Code";
|
||
"zweifaktor.platzhalterCode" = "123456";
|
||
"zweifaktor.platzhalterWiederherstellung" = "ABCDE-FGHIJ";
|
||
"zweifaktor.erklaerungCode" = "Die sechs Ziffern aus deiner Authenticator-App.";
|
||
"zweifaktor.erklaerungWiederherstellung" = "Einer der Codes, die du beim Einrichten bekommen hast. Jeder gilt nur einmal.";
|
||
"zweifaktor.bestaetigen" = "Bestätigen";
|
||
"zweifaktor.dochWiederherstellung" = "Stattdessen einen Wiederherstellungscode benutzen";
|
||
"zweifaktor.dochCode" = "Stattdessen den Code aus der App benutzen";
|
||
"zweifaktor.abbrechen" = "Anmeldung abbrechen";
|
||
"zweifaktor.verbraucht" = "Zu viele Fehlversuche. Bitte von vorn anmelden.";
|
||
|
||
/* --- Zweiter Faktor fehlt noch --- */
|
||
"zweifaktorEinrichten.titel" = "Zweiter Faktor nötig";
|
||
"zweifaktorEinrichten.erklaerung" = "Für dieses Konto verlangt die Richtlinie einen zweiten Faktor. Einrichten lässt er sich bisher nur im Browser – in der App kommt das noch.";
|
||
"zweifaktorEinrichten.imBrowser" = "Im Browser öffnen";
|
||
|
||
/* --- Passwortwechsel --- */
|
||
"passwort.titel" = "Passwort wechseln";
|
||
"passwort.bisher" = "Bisheriges Passwort";
|
||
"passwort.neu" = "Neues Passwort";
|
||
"passwort.wiederholen" = "Noch einmal";
|
||
"passwort.erklaerung" = "Für dieses Konto steht ein Passwortwechsel an. Vorher lässt der Server nichts anderes zu.";
|
||
"passwort.stimmtNichtUeberein" = "Die beiden stimmen nicht überein.";
|
||
"passwort.speichern" = "Passwort wechseln";
|
||
|
||
/* --- Konten --- */
|
||
"konten.titel" = "Konten";
|
||
"konten.leerTitel" = "Noch keine Konten";
|
||
"konten.leerErklaerung" = "Lege dein erstes Konto im Browser an – in der App kommt das in einer späteren Stufe.";
|
||
"konten.archivierteZeigen" = "Archivierte zeigen";
|
||
"konten.archiviert" = "archiviert";
|
||
"konten.gebunden" = "Gebundenes Geld";
|
||
"konten.gebundenSumme" = "Davon gebunden";
|
||
"konten.verfuegbar" = "Verfügbar";
|
||
"konten.bankWeichtAb" = "Die Bank meldet einen anderen Saldo";
|
||
|
||
/* --- Kontoarten --- */
|
||
"kontoart.girokonto" = "Girokonto";
|
||
"kontoart.sparkonto" = "Sparkonto";
|
||
"kontoart.bargeld" = "Bargeld";
|
||
"kontoart.kreditkarte" = "Kreditkarte";
|
||
"kontoart.depot" = "Depot";
|
||
"kontoart.sonstiges" = "Sonstiges";
|
||
|
||
/* --- Einstellungen --- */
|
||
"einstellungen.zugang" = "Zugang";
|
||
"einstellungen.angemeldetAls" = "Angemeldet als";
|
||
"einstellungen.server" = "Server";
|
||
"einstellungen.markeErklaerung" = "Dieses Gerät hat einen eigenen Schlüssel. Du kannst ihn am Rechner unter Einstellungen → Gerätemarken jederzeit widerrufen; dann meldet sich die App sofort ab.";
|
||
"einstellungen.ausDemServer" = "Vom Server";
|
||
"einstellungen.hauptwaehrung" = "Hauptwährung";
|
||
"einstellungen.budgetStarttag" = "Budget beginnt am";
|
||
"einstellungen.abmeldenFrage" = "Von diesem Gerät abmelden?";
|
||
"einstellungen.abmeldenErklaerung" = "Beim Abmelden wird der Schlüssel dieses Geräts auch am Server entfernt.";
|
||
|
||
/* --- Dashboard --- */
|
||
"dashboard.bilanz" = "Dieser Monat";
|
||
"dashboard.einnahmen" = "Einnahmen";
|
||
"dashboard.ausgaben" = "Ausgaben";
|
||
"dashboard.budgetfortschritt" = "Budget";
|
||
"dashboard.keinBudget" = "Für diesen Monat ist noch nichts geplant.";
|
||
"dashboard.kontostaende" = "Konten";
|
||
"dashboard.letzteBuchungen" = "Zuletzt";
|
||
|
||
/* --- Budget --- */
|
||
"budget.einnahmen" = "Geplante Einnahmen";
|
||
"budget.uebrig" = "übrig";
|
||
"budget.vonGeplant" = "%1$@ von %2$@ ausgegeben";
|
||
"budget.vonBetrag" = "von %@";
|
||
"budget.angepasst" = "angepasst";
|
||
"budget.vorigerMonat" = "Voriger Monat";
|
||
"budget.naechsterMonat" = "Nächster Monat";
|
||
"budget.ausVertraegenHinweis" = "%1$d Verträge: %2$@";
|
||
"budget.ausVertraegenBerechnet" = "Berechnet aus %1$d Verträgen: %2$@";
|
||
"budget.vertraegeOhneKategorie" = "%1$d Verträge ohne Kategorie (%2$@) fehlen in diesen Summen.";
|
||
"budget.ohneKurs" = "Kein Wechselkurs für %@ – diese Beträge fehlen in den Summen.";
|
||
|
||
/* --- Buchungen --- */
|
||
"buchungen.suchen" = "Empfänger, Zweck, Notiz";
|
||
"buchungen.konto" = "Konto";
|
||
"buchungen.alleKonten" = "Alle Konten";
|
||
"buchungen.art" = "Art";
|
||
"buchungen.alleArten" = "Alle Arten";
|
||
"buchungen.leerTitel" = "Keine Buchungen";
|
||
"buchungen.leerErklaerung" = "Sobald etwas gebucht ist, steht es hier.";
|
||
"buchungen.leerGefiltert" = "Zu dieser Suche gibt es nichts. Andere Filter versuchen?";
|
||
"buchung.ohneBezeichnung" = "Ohne Bezeichnung";
|
||
"buchung.ohneKategorie" = "Ohne Kategorie";
|
||
"buchung.uebertrag" = "Übertrag";
|
||
|
||
/* --- Buchungsarten --- */
|
||
"buchungsart.ausgabe" = "Ausgabe";
|
||
"buchungsart.einnahme" = "Einnahme";
|
||
"buchungsart.uebertrag" = "Übertrag";
|
||
|
||
/* --- Verträge --- */
|
||
"abos.leerTitel" = "Keine Verträge";
|
||
"abos.leerErklaerung" = "Hier stehen Abos und Verträge, sobald welche angelegt sind.";
|
||
"abos.beendeteZeigen" = "Beendete zeigen";
|
||
"abos.beendet" = "beendet";
|
||
"abos.jaehrlichUndAnzahl" = "%1$@ im Jahr · %2$d aktiv";
|
||
"abos.ohneKurs" = "Kein Wechselkurs für %@ – diese Verträge fehlen in der Summe.";
|
||
"abo.monatlich" = "monatlich";
|
||
"abo.vierteljaehrlich" = "vierteljährlich";
|
||
"abo.halbjaehrlich" = "halbjährlich";
|
||
"abo.jaehrlich" = "jährlich";
|
||
"abo.alleNMonate" = "alle %d Monate";
|
||
"abo.proMonat" = "%@ im Monat";
|
||
"abo.naechste" = "nächste am %@";
|
||
"abo.inTagen" = "fällig in %d Tagen";
|
||
|
||
/* --- Buchung bearbeiten --- */
|
||
"buchung.neu" = "Neue Buchung";
|
||
"buchung.aendern" = "Buchung ändern";
|
||
"buchung.datum" = "Datum";
|
||
"buchung.betrag" = "Betrag";
|
||
"buchung.konto" = "Konto";
|
||
"buchung.konto.keines" = "Kein Konto";
|
||
"buchung.zielkonto" = "Auf Konto";
|
||
"buchung.kategorie" = "Kategorie";
|
||
"buchung.empfaenger" = "Empfänger";
|
||
"buchung.verwendungszweck" = "Verwendungszweck";
|
||
"buchung.notiz" = "Notiz";
|
||
"buchung.schlagwoerter" = "Schlagwörter";
|
||
"buchung.keineSchlagwoerter" = "Noch keine Schlagwörter angelegt. Das geht am Rechner.";
|
||
"buchung.uebertragErklaerung" = "Ein Übertrag verschiebt Geld zwischen deinen Konten. Er zählt in keiner Auswertung mit und braucht deshalb keine Kategorie.";
|
||
"buchung.loeschen" = "Buchung löschen";
|
||
"buchung.loeschenFrage" = "Diese Buchung löschen?";
|
||
|
||
/* --- Budget bearbeiten --- */
|
||
"budget.geplant" = "Geplant";
|
||
"budget.zuschlag" = "Zuschlag";
|
||
"budget.ausVertraegen" = "Aus Verträgen";
|
||
"budget.ergibt" = "Ergibt";
|
||
"budget.monatSetzen" = "Nur dieser Monat";
|
||
"budget.vorlageSetzen" = "Standard-Budget";
|
||
"budget.vorlage" = "Vorlage";
|
||
"budget.ausVertraegenRechnen" = "Aus Verträgen rechnen";
|
||
"budget.berechnetErklaerung" = "Der Soll-Betrag ergibt sich aus den Verträgen dieser Kategorie plus Zuschlag. Ändert sich ein Vertrag, ändert sich das Budget mit.";
|
||
"budget.festErklaerung" = "Ein fester Betrag, den du selbst setzt.";
|
||
"budget.vorlageHolen" = "Vorlage in diesen Monat holen";
|
||
"budget.alsVorlageSetzen" = "Diesen Monat als Standard festlegen";
|
||
"budget.zuruecksetzen" = "Monat zurücksetzen";
|
||
"budget.zuruecksetzenFrage" = "Diesen Monat zurücksetzen?";
|
||
"budget.zuruecksetzenErklaerung" = "Alle Anpassungen dieses Monats fallen weg. Danach gilt wieder das Standard-Budget.";
|
||
|
||
/* --- Vertrag bearbeiten --- */
|
||
"abo.neu" = "Neuer Vertrag";
|
||
"abo.aendern" = "Vertrag ändern";
|
||
"abo.name" = "Name";
|
||
"abo.betrag" = "Betrag je Zahlung";
|
||
"abo.rhythmus" = "Rhythmus";
|
||
"abo.konto" = "Wird abgebucht von";
|
||
"abo.kategorieErklaerung" = "Die Kategorie entscheidet, in welcher Budget-Zeile dieser Vertrag mitzählt.";
|
||
"abo.faelligkeitKennen" = "Nächste Zahlung bekannt";
|
||
"abo.naechsteZahlung" = "Nächste Zahlung";
|
||
"abo.erkennungstext" = "Erkennungstext";
|
||
"abo.erkennungErklaerung" = "Woran die Erkennung diesen Vertrag in einer Buchung wiedererkennt - meist ein Teil des Empfängernamens.";
|
||
"abo.laeuftNoch" = "Läuft noch";
|
||
"abo.beendenStattLoeschen" = "Beenden statt löschen hält fest, was er gekostet hat. Löschen entfernt ihn ganz.";
|
||
"abo.loeschen" = "Vertrag löschen";
|
||
"abo.loeschenFrage" = "Diesen Vertrag löschen?";
|
||
"abo.loeschenErklaerung" = "Die zugeordneten Buchungen bleiben, sie verlieren nur das Etikett.";
|
||
|
||
/* --- Konto bearbeiten --- */
|
||
"konto.neu" = "Neues Konto";
|
||
"konto.aendern" = "Konto ändern";
|
||
"konto.name" = "Name";
|
||
"konto.art" = "Art";
|
||
"konto.waehrung" = "Währung";
|
||
"konto.anfangssaldo" = "Anfangssaldo";
|
||
"konto.stichtagKennen" = "Stichtag angeben";
|
||
"konto.stichtag" = "Stichtag";
|
||
"konto.anfangssaldoErklaerung" = "Der Stand zu Beginn. Ohne Stichtag gilt er von Anfang an; mit Stichtag zählen nur Buchungen ab diesem Tag darauf.";
|
||
"konto.kreditrahmenKennen" = "Kreditrahmen angeben";
|
||
"konto.kreditrahmen" = "Kreditrahmen";
|
||
"konto.kreditrahmenErklaerung" = "Was die Karte ausgeben darf - kein Guthaben.";
|
||
"konto.gebunden" = "Gebundenes Geld";
|
||
"konto.gebundenErklaerung" = "Geld, an das du nicht herankommst, etwa Säule 3a. Es zählt nicht als verfügbar.";
|
||
"konto.archiviert" = "Archiviert";
|
||
"konto.archivierenStattLoeschen" = "Archivieren blendet das Konto aus und behält seine Buchungen. Löschen geht nur, solange keine daran hängen.";
|
||
"konto.loeschen" = "Konto löschen";
|
||
"konto.loeschenFrage" = "Dieses Konto löschen?";
|
||
"konto.loeschenErklaerung" = "Das geht nur, wenn keine Buchung mehr daran hängt. Sonst archivieren.";
|
||
|
||
/* --- Arbeitsliste --- */
|
||
"arbeit.leerTitel" = "Nichts zu tun";
|
||
"arbeit.leerErklaerung" = "Keine offenen Einträge, keine Übertragsvorschläge, keine Dubletten. So soll es sein.";
|
||
"arbeit.eingang" = "Zu buchen";
|
||
"arbeit.uebertraege" = "Könnten Überträge sein";
|
||
"arbeit.ohneKategorie" = "Ohne Kategorie";
|
||
"arbeit.dubletten" = "Sieht doppelt aus";
|
||
"arbeit.dublettenErklaerung" = "Gleiches Konto, gleicher Tag, gleicher Betrag. Ob es wirklich dieselbe Zahlung ist, weisst nur du - verschiedene Kennungen bedeuten, dass die Bank sie als verschieden gemeldet hat.";
|
||
"arbeit.buchen" = "Buchen";
|
||
"arbeit.alleBuchen" = "Alle buchen, bei denen das Konto feststeht";
|
||
"arbeit.alsUebertrag" = "Übertrag";
|
||
"arbeit.verwerfen" = "Verwerfen";
|
||
"arbeit.verbinden" = "Verbinden";
|
||
"arbeit.keinUebertrag" = "Kein Übertrag";
|
||
"arbeit.istRichtigSo" = "Ist richtig so";
|
||
"arbeit.unklarHinweis" = "Die Erkennung war unsicher - erst ansehen.";
|
||
"arbeit.hatKategorie" = "Eine der beiden hat eine Kategorie. Durchs Verbinden fällt sie aus dem Budget.";
|
||
"arbeit.ohneKonto" = "ohne Konto";
|
||
"arbeit.rueckfrage" = "Sicher?";
|
||
"arbeit.trotzdem" = "Trotzdem";
|
||
"arbeit.zielkontoErklaerung" = "Es entsteht eine Buchung, die das Geld von einem Konto aufs andere bewegt. Sie zählt auf beiden Seiten im Saldo und in keiner Auswertung.";
|
||
|
||
/* --- Eingang: Quelle und Stand --- */
|
||
"eingang.quelle.kurzbefehl" = "Kurzbefehl";
|
||
"eingang.quelle.postfach" = "Postfach";
|
||
"eingang.quelle.bank" = "Bank";
|
||
"eingang.stand.gebucht" = "gebucht";
|
||
"eingang.stand.offen" = "offen";
|
||
"eingang.stand.unklar" = "unklar";
|
||
"eingang.stand.verworfen" = "verworfen";
|