feat: Fuenfte Stufe der iOS-App - Kategorien, Schlagwoerter, Bank, zweiter Faktor

Die Nebenraeume haengen unter Einstellungen, nicht als eigene Reiter: Man
braucht sie selten, und eine Leiste mit zehn Reitern findet niemand mehr.

- Kategorien: anlegen, aendern, archivieren, loeschen - samt Gruppen. Eine
  Kategorie oeffnet ihre Erkennungswoerter, die sich dort hinzufuegen und
  entfernen lassen. Darunter steht, was sonst niemand merkt: Sie wirken nur
  auf kuenftige Importe.
- Woerter, die oft korrigiert werden, stehen als Pruefmeldung in den
  Einstellungen - behalten oder entfernen.
- Schlagwoerter: anlegen, umbenennen, umfaerben, loeschen. Neue bekommen
  reihum eine Farbe, damit nicht alle grau sind.
- Einstellungen: Erscheinungsbild, Hauptwaehrung und Budget-Starttag lassen
  sich jetzt aendern. Ohne Sichern-Knopf - es ist je Zeile genau ein Wert,
  und das Backend nimmt ihn einzeln entgegen. Dazu der Hinweis, dass sie dem
  Konto gehoeren und nicht dem Geraet.
- Bank: abrufen und Salden auffrischen. Verbinden bleibt am Rechner, die
  Bank leitet fest dorthin zurueck. Der letzte Fehler der Verbindung steht
  dabei, sonst ruft man vergeblich ab.
- Zweiter Faktor: einrichten in drei Schritten. Auf dem Telefon fuehrt der
  Weg ueber die otpauth-Adresse direkt in die Authenticator-App statt ueber
  einen QR-Code, den man sich selbst zeigen muesste. Die Rettungscodes
  erscheinen einmal; das Blatt laesst sich nicht wegwischen und erst
  schliessen, wenn man bestaetigt hat, sie gesichert zu haben.

Abschalten des zweiten Faktors bleibt bewusst draussen: Es verlangt das
Kontopasswort, und die App speichert keines. Ein Vollzugang auf diesem Geraet
soll den Schutz des Kontos nicht aufheben koennen.

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

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-10-21 22:03:28 +02:00
co-authored by Claude Opus 5
parent bab5cc5060
commit d290930759
13 changed files with 1828 additions and 9 deletions
+87
View File
@@ -11,6 +11,9 @@
"allgemein.unbekannt" = "Unbekannt";
"allgemein.sichern" = "Sichern";
"allgemein.ok" = "OK";
"allgemein.fertig" = "Fertig";
"allgemein.bearbeiten" = "Bearbeiten";
"allgemein.loeschen" = "Löschen";
/* --- Reiter --- */
"reiter.dashboard" = "Übersicht";
@@ -271,3 +274,87 @@
"eingang.stand.offen" = "offen";
"eingang.stand.unklar" = "unklar";
"eingang.stand.verworfen" = "verworfen";
/* --- Nebenräume --- */
"nebenraeume.titel" = "Verwalten";
"nebenraeume.kategorien" = "Kategorien";
"nebenraeume.tags" = "Schlagwörter";
"nebenraeume.bank" = "Bankanbindung";
/* --- Kategorien --- */
"kategorien.leer" = "Noch keine Kategorien.";
"kategorien.neu" = "Neue Kategorie";
"kategorien.aendern" = "Kategorie ändern";
"kategorien.neueGruppe" = "Neue Gruppe";
"kategorien.gruppe" = "Gruppe";
"kategorien.art" = "Art";
"kategorien.ausgaben" = "Ausgaben";
"kategorien.einnahmen" = "Einnahmen";
"kategorien.archivierteZeigen" = "Archivierte zeigen";
"kategorien.sparen" = "Sparen";
"kategorien.ohneAuswertung" = "ohne Auswertung";
"kategorien.istSparen" = "Ausgabe, die kein Verlust ist";
"kategorien.istSparenErklaerung" = "Für Sparen und Rücklagen. Mehr auszugeben als geplant ist hier keine Warnung, sondern gut.";
"kategorien.ohneAuswertungSchalter" = "Aus Auswertungen heraushalten";
"kategorien.ohneAuswertungErklaerung" = "Für durchlaufende Posten. Die Buchungen bleiben, zählen aber in keinem Diagramm und keiner Summe mit.";
"kategorien.loeschen" = "Kategorie löschen";
"kategorien.loeschenFrage" = "Diese Kategorie löschen?";
"kategorien.loeschenErklaerung" = "Das geht nur, solange keine Buchung daran hängt.";
"kategorien.archivierenStattLoeschen" = "Archivieren blendet die Kategorie aus und behält ihre Buchungen. Löschen geht nur, solange keine daran hängt.";
"kategorien.gruppeLoeschen" = "Gruppe löschen";
"kategorien.gruppeLoeschenFrage" = "Diese Gruppe löschen?";
"kategorien.gruppeLoeschenErklaerung" = "Das geht nur, solange keine Kategorie mehr darin steht.";
"kategorien.erkennungswoerter" = "Erkennungswörter";
"kategorien.wortHinzufuegen" = "Wort hinzufügen";
"kategorien.erkennungErklaerung" = "Trifft eines dieser Wörter auf Empfänger oder Verwendungszweck zu, ordnet der Import diese Kategorie zu. Das längste Wort gewinnt. Wirkt nur auf künftige Importe - an bestehenden Buchungen ändert sich nichts.";
"kategorien.markiertTitel" = "Wörter, die oft korrigiert werden";
"kategorien.markiertErklaerung" = "Diese Wörter ordnen häufig falsch zu. Behalten, wenn es Einzelfälle waren - entfernen, wenn das Wort nicht taugt.";
"kategorien.markiertZaehler" = "%1$d-mal angewendet, %2$d-mal korrigiert";
"kategorien.behalten" = "Behalten";
"kategorien.entfernen" = "Entfernen";
/* --- Schlagwörter (Tags) --- */
"tags.neu" = "Neues Schlagwort";
"tags.erklaerung" = "Schlagwörter liegen quer zur Kategorie: Eine Buchung kann mehrere tragen. Gut für alles, was sich nicht einordnen lässt - Urlaub Island, steuerlich absetzbar, zurückfordern.";
/* --- Einstellungen --- */
"einstellungen.erscheinungsbild" = "Erscheinungsbild";
"einstellungen.system" = "System";
"einstellungen.hell" = "Hell";
"einstellungen.dunkel" = "Dunkel";
"einstellungen.serverweitErklaerung" = "Diese Einstellungen gelten für dein Konto, nicht nur für dieses Gerät - auch im Browser.";
/* --- Zweiter Faktor einrichten --- */
"zweifaktor.stand" = "Zweiter Faktor";
"zweifaktor.aktiv" = "Aktiv";
"zweifaktor.inaktiv" = "Nicht eingerichtet";
"zweifaktor.aktivErklaerung" = "Beim Anmelden im Browser wird zusätzlich ein Code verlangt. Abschalten geht nur am Rechner - es verlangt dein Passwort, und das speichert diese App bewusst nicht.";
"zweifaktor.inaktivErklaerung" = "Ein zweiter Faktor schützt dein Konto, falls jemand dein Passwort kennt.";
"zweifaktor.einrichten" = "Einrichten";
"zweifaktor.schrittEins" = "Schritt 1: In die Authenticator-App übernehmen";
"zweifaktor.schrittZwei" = "Schritt 2: Mit einem Code bestätigen";
"zweifaktor.inAppOeffnen" = "In der Authenticator-App öffnen";
"zweifaktor.geheimnis" = "Geheimnis";
"zweifaktor.geheimnisErklaerung" = "Der Knopf öffnet die App direkt. Geht das nicht, trägst du das Geheimnis von Hand ein.";
"zweifaktor.code" = "Sechsstelliger Code";
"zweifaktor.aktivieren" = "Scharfschalten";
"zweifaktor.rettungscodes" = "Rettungscodes";
"zweifaktor.rettungscodesErklaerung" = "Jeder Code lässt sich einmal statt eines App-Codes verwenden. Sie stehen genau hier und nie wieder - sichere sie jetzt.";
"zweifaktor.codesSichern" = "Codes sichern";
"zweifaktor.codesNotiert" = "Ich habe sie gesichert";
/* --- Bank --- */
"bank.leerTitel" = "Keine Bankanbindung";
"bank.leerErklaerung" = "Eine Bank verbinden geht nur am Rechner - die Bank leitet dorthin zurück. Abrufen kannst du sie danach von hier.";
"bank.land" = "Land";
"bank.zuletzt" = "Zuletzt abgerufen";
"bank.nie" = "noch nie";
"bank.gueltigBis" = "Gültig bis";
"bank.takt" = "Automatisch";
"bank.alleNMinuten" = "alle %d Minuten";
"bank.abrufen" = "Jetzt abrufen";
"bank.saldenAuffrischen" = "Nur Salden auffrischen";
"bank.saldenAufgefrischt" = "Die Salden sind aufgefrischt.";
"bank.abrufFertig" = "Abruf fertig";
"bank.abrufErgebnis" = "%1$d Umsätze geholt, davon %2$d neu.";
"bank.ohneZuordnung" = "Dieser Anbindung ist noch kein Konto zugeordnet. Das geht am Rechner.";