Files
certain/ios/Texte/de.lproj/Localizable.strings
T
GuidoandClaude Opus 5 82db09e6de feat: Dritte Stufe der iOS-App - alles laesst sich jetzt bearbeiten
Buchungen anlegen, aendern und loeschen; Budget-Zeilen setzen, fuer den Monat
oder fuer die Vorlage; Vertraege und Konten anlegen und aendern. Damit kann
die App alles, wofuer man bisher an den Rechner musste - ausser Import,
Arbeitsliste und Verwaltung.

Ein Formular je Sache, nicht zwei: Anlegen und Aendern teilen sich die Maske,
weil die Felder dieselben sind und zwei Kopien genau die Stelle waeren, an der
sie auseinanderlaufen. Was sich unterscheidet, steht in einem Zweck-Typ.

Geteilt in Bausteine/Formular.swift: ein Speichervorgang, der den Knopf sperrt
und den Fehler festhaelt (das Formular bleibt offen - zugeklappt waere die
Eingabe weg und die Meldung nutzlos), ein Betragsfeld, das an Cent gebunden
ist statt an Text, und die Auswahlfelder fuer Kategorie, Konto und
Schlagwoerter.

Drei Dinge, die stillschweigend falsch waeren:

Eine Teilaenderung schickt nur, was gesetzt ist. Ginge ein nicht angefasstes
Feld als null hinaus, loeschte jedes Speichern den Empfaenger, die Notiz und
die Kategorie gleich mit. Eine leere Tag-Liste geht dagegen sehr wohl mit -
sie bedeutet "alle abnehmen" und darf nicht mit "nicht angefasst"
zusammenfallen.

Bei einem Uebertrag wird keine Kategorie mitgeschickt: Das Geld wechselt nur
die Tasche, es wird nicht eingeordnet.

Bei Betriebsart "berechnet" bleibt planned_cents unberuehrt - das Backend
liest es dann nicht, und es zu ueberschreiben verloere den Wert, auf den ein
Zurueckschalten auf "fest" zurueckfallen soll.

Die Waehrung eines bestehenden Kontos laesst sich nicht aendern: Jeder
gespeicherte Betrag wuerde danach etwas anderes bedeuten.

49 Tests gruen. Texte in Deutsch und Englisch, zeilengleich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-21 21:04:46 +02:00

242 lines
11 KiB
Plaintext
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.
/* 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.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.";