cards-native/Sources/Resources/Localizable.xcstrings
Till JS aece169360 chore(lint): SwiftLint-Config + 0-Warnings-Pass + Swift-6-Concurrency-Fixes
Bringt cards-native auf 0 SwiftLint-Violations bei 75 Files. Build-Status
unverändert grün (xcodebuild iOS Debug).

.swiftlint.yml
- identifier_name excludes erweitert um math/index-Konventionen
  (i, j, n, m, x, y, w, h, r, g, b, a, c, d, s, f, p, q, t, l) —
  in algorithmischem Code klarer als verbose
- opening_brace disabled — kollidiert mit SwiftFormats
  wrapMultilineStatementBraces (SwiftFormat ist im Pre-Commit-Hook
  und gewinnt)

Code-Modernisierungen (real, nicht nur Annotations)
- Cloze.swift: regex-Tuple bekommt `swiftlint:disable large_tuple`-
  Region — Regex-Output-Type ist Builder-bedingt nicht reduzierbar
- Media.swift: `data(using: .utf8)` → `Data(s.utf8)` (non-failable),
  `String(data:as:)` → `String(bytes:encoding:)`
- CardsTheme.swift: HSL-Wert-Typ statt anonymes 3-Tupel —
  konkretere Call-Sites, kein `large_tuple`-Warning mehr
- MediaCache.swift: `CacheEntry`-Struct statt 3-Tupel im Prune-Pfad
- GradeQueue / MediaCache / StudySession / MarketplaceStore: OSLog-
  Interpolations auf lokale Variablen ziehen — fixt Swift-6-Strict-
  Concurrency-Fail bei Actor-isolated-Property-Zugriff aus
  @Sendable-Autoclosure
- DeckMutations.swift, MarketplaceModeration.swift: verschachtelte
  VersionInfo-Sub-Types auf Top-Level (`PullUpdateVersion`,
  `OwnedMarketplaceVersion`) — fixt `nesting`-Warning
- Tests/UnitTests/*.swift: alle `""".data(using: .utf8)!` migriert auf
  `Data("""…""".utf8)`; force-cast `as!` in MutationEncodingTests
  durch guard-let + throw ersetzt

Pragmatische Disables (mit Doc-Comment-Begründung)
- DeckEditorView / MarketplacePublishView / DeckDetailView /
  PublicDeckView / DeckListView / CardEditorView / CardsAPI:
  `swiftlint:disable type_body_length` (+ teilweise file_length)
  als Region-Disable mit `enable` nach dem Struct. Begründung im
  Doc-Comment: Multi-State-Maschinen mit shared Toolbar + Sheets;
  Aufspalten würde nur @Binding-Plumbing produzieren

Auto-Format-Aufräumung
- Redundante `Sendable`-Conformance entfernt (Swift 6 leitet das
  bei Wert-Typen mit Sendable-Mitgliedern automatisch ab)
- EnvironmentValues nutzt jetzt @Entry-Macro statt manueller
  EnvironmentKey-Boilerplate
- Brace-Reformatting + Import-Sortierung auf allen 75 Files

Ergebnis: 80 Warnings + 3 Errors → 0 / 0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 02:04:29 +02:00

261 lines
No EOL
4.7 KiB
Text
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.

{
"sourceLanguage" : "de",
"strings" : {
"… und %@ weitere" : {
},
"„%@“" : {
},
"@%@" : {
},
"%@" : {
},
"%@ fällig" : {
},
"%@ fällige Karten aus abonnierten Decks" : {
},
"%@ Karten" : {
},
"%@ Karten gelernt" : {
},
"3500 Zeichen. Je präziser, desto besser die Karten." : {
},
"Abmelden" : {
},
"Account löschen…" : {
},
"AI-Moderation läuft — kann ein paar Sekunden dauern." : {
},
"Alle Karten und Reviews dieses Decks werden ebenfalls gelöscht. Diese Aktion kann nicht rückgängig gemacht werden." : {
},
"Anmelden / Konto erstellen" : {
},
"Antwort anzeigen" : {
},
"Archivierte Decks erscheinen nicht in der Hauptliste. Bestehende FSRS-Reviews bleiben erhalten." : {
},
"Aus Teilen-Menü" : {
},
"Author-Profil anlegen" : {
},
"Beide Richtungen werden gelernt — front→back und back→front." : {
},
"Beschreibung" : {
},
"Bestehendes Deck" : {
},
"Bild" : {
},
"Blockiere Authors über das Menü oben rechts auf Marketplace-Decks." : {
},
"Browse den Marketplace im Entdecken-Tab — kein Konto nötig. Für eigene Decks und Cloud-Sync logge dich ein." : {
},
"Card-Type »%@« kommt in einer späteren Phase" : {
},
"Cardecky" : {
},
"Changelog" : {
},
"CSV" : {
},
"CSV-Datei einlesen. Format: vorne,hinten[,typ] pro Zeile." : {
},
"Das kann eine Weile dauern." : {
},
"Datei" : {
},
"Deck-Metadaten" : {
},
"Decks dieses Authors erscheinen für dich nicht mehr im Marketplace." : {
},
"Der Slug wird Teil der Marketplace-URL: cardecky.mana.how/d/<slug>." : {
},
"Distractor-Optionen werden zur Lernzeit automatisch aus anderen Karten desselben Decks gezogen." : {
},
"Distractors konnten nicht geladen werden." : {
},
"Druck-Ansicht / PDF" : {
},
"Druck-Ansicht ist nur auf iOS verfügbar." : {
},
"Du hast schon Decks im Marketplace. Wähle eine, um eine neue Version zu publishen." : {
},
"Du nutzt Cardecky anonym" : {
},
"Erst ein Deck erstellen." : {
},
"Erst-Publish: 1.0.0. Spätere Versionen müssen semver-größer sein." : {
},
"Format pro Zeile: vorne,hinten,typ. Typ-Spalte optional (Default basic)." : {
},
"Im Marketplace veröffentlichen" : {
},
"Image-Occlusion und Audio-Cards werden im CSV-Import übersprungen — die brauchen Datei-Uploads." : {
},
"Inbox" : {
},
"Karteikarten des Vereins mana e.V." : {
},
"Karten" : {
},
"Karten konnten nicht geladen werden" : {
},
"Keine" : {
},
"KI" : {
},
"KI generiert das Deck aus einer kurzen Beschreibung. 10 Anfragen pro Minute." : {
},
"KI liest Bilder oder PDFs und macht daraus Karten. Bis zu 5 Dateien." : {
},
"KI liest den Inhalt der Seite als zusätzliche Quelle." : {
},
"Lade Decks …" : {
},
"Leer" : {
},
"Leeres Deck — Karten anschließend selbst anlegen." : {
},
"Marketplace und lokale Decks funktionieren ohne Konto. Für KI-Karten, eigene Decks im Cloud-Sync und Marketplace-Veröffentlichung brauchst du ein Konto." : {
},
"Max. %@ Dateien. Bilder ≤ 10 MB, PDFs ≤ 30 MB." : {
},
"Metadaten ändern: Marketplace-Webansicht → Deck → Bearbeiten." : {
},
"Mit Hint: `{{c1::Berlin::Hauptstadt von DE}}`" : {
},
"Neue Version: %@" : {
},
"Neues Marketplace-Deck" : {
},
"Nicht genug andere Karten im Deck für Multiple-Choice — tippe auf »Antwort anzeigen«." : {
},
"Noch keine Karten. Tippe auf »Karte hinzufügen«." : {
},
"Noch keine Maske" : {
},
"Öffentlich" : {
},
"OK" : {
},
"Pflicht-Schritt vor dem ersten Marketplace-Deck. Slug erscheint in Marketplace-URLs." : {
},
"Preis: %@ Credits" : {
},
"Privat" : {
},
"Quellen" : {
},
"Space" : {
},
"Thema" : {
},
"Tippe und ziehe auf das Bild, um eine Maske zu erstellen." : {
},
"Tippe unten auf »+«, um dein erstes Deck zu erstellen, oder browse den Marketplace im Entdecken-Tab." : {
},
"Veröffentlicht: %@" : {
},
"Veröffentlichungs-Modus" : {
},
"Version" : {
},
"Versuche eine andere Suche oder Sortierung." : {
},
"Vorschau (%@ Karten)" : {
},
"Wählen …" : {
},
"Wir prüfen jede Meldung. Hass und Rechtsverletzungen werden bevorzugt behandelt." : {
},
"Wird veröffentlicht …" : {
},
"Zusätzliche URL (optional)" : {
}
},
"version" : "1.0"
}