Zwei Schlüssel ohne Platzhalter, zwei Kreisel übereinander

**Die Schlüssel.** Im Quelltext steht `"season.number \(season)"`, der
Schlüssel heißt damit `season.number %lld`. Im Katalog stand er ohne
Platzhalter — also traf er nie, und die App zeigte den Schlüssel selbst:
„The 50 · season.number 1 · episode.number 1". Beide umbenannt. Ein
Überbleibsel `episode.number %@` ohne eine einzige Übersetzung ist
mitgegangen, und aus „Episode" wurde „Folge", wie überall sonst im Haus.

**Die Kreisel.** Die Abdeckung beim Wiederherstellen der Stelle ist eine
ganze Seite, kein Schleier — nur lag das Übrige weiter darüber. Zu sehen
waren Bedienelemente mitten im Satz, ein Kreisel in der Abdeckung und ein
zweiter im Abspielknopf, den man in dem Moment ohnehin nicht drücken
soll. Jetzt ist die Abdeckung ausschließlich. Die Kopfzeile bleibt: sie
ist der Weg zurück.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-15 21:52:08 +02:00
co-authored by Claude Opus 5
parent 8a63f815cd
commit fc812f5a25
2 changed files with 70 additions and 66 deletions
+34 -37
View File
@@ -1542,26 +1542,6 @@
} }
} }
} }
},
"episode.number" : {
"extractionState" : "manual",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Episode %lld"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Episode %lld"
}
}
}
},
"episode.number %@" : {
}, },
"episode.short %lld %lld" : { "episode.short %lld %lld" : {
"comment" : "Staffel- und Folgennummer", "comment" : "Staffel- und Folgennummer",
@@ -4054,23 +4034,6 @@
} }
} }
}, },
"season.number" : {
"extractionState" : "manual",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Staffel %lld"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Season %lld"
}
}
}
},
"season.short %lld" : { "season.short %lld" : {
"comment" : "Platzhalter: Staffelnummer", "comment" : "Platzhalter: Staffelnummer",
"extractionState" : "stale", "extractionState" : "stale",
@@ -6238,6 +6201,40 @@
} }
} }
} }
},
"season.number %lld" : {
"extractionState" : "manual",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Staffel %lld"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Season %lld"
}
}
}
},
"episode.number %lld" : {
"extractionState" : "manual",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Folge %lld"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Episode %lld"
}
}
}
} }
}, },
"version" : "1.1" "version" : "1.1"
+17 -10
View File
@@ -68,10 +68,16 @@ struct PlayerView: View {
// Deckt den Umstieg ab. Ohne sie sieht man den Filmanfang, // Deckt den Umstieg ab. Ohne sie sieht man den Filmanfang,
// während der neue Stream anläuft — und denkt, die Stelle sei // während der neue Stream anläuft — und denkt, die Stelle sei
// weg. Die Abdeckung nennt sie ausdrücklich. // weg. Die Abdeckung nennt sie ausdrücklich.
//
// **Und dann nichts anderes.** Die Abdeckung ist eine ganze
// Seite, kein Schleier: legt sich das Übrige darüber, stehen
// Bedienelemente und Kreisel mitten im Satz „Stelle wird
// wiederhergestellt" — zwei Ladeanzeigen übereinander, eine
// davon in einem Knopf, den man in dem Moment gar nicht
// drücken soll. Die Kopfzeile bleibt: sie ist der Weg zurück.
if let target = model.resumeTarget { if let target = model.resumeTarget {
restoring(to: target) restoring(to: target)
} } else {
switch model.phase { switch model.phase {
case .preparing: case .preparing:
preparing(for: model) preparing(for: model)
@@ -83,10 +89,10 @@ struct PlayerView: View {
// Wartet auf Daten: ohne Anzeige sieht das aus wie ein // Wartet auf Daten: ohne Anzeige sieht das aus wie ein
// Standbild, und man weiß nicht, ob noch etwas kommt. // Standbild, und man weiß nicht, ob noch etwas kommt.
// //
// Nur, solange die Bedienelemente aus sind. Sind sie an, // Nur, solange die Bedienelemente aus sind. Sind sie
// steht der Kreisel **im** Abspielknopf — dort, wo sonst // an, steht der Kreisel **im** Abspielknopf — dort, wo
// das Symbol ist. Vorher lag er dahinter und das Dreieck // sonst das Symbol ist. Vorher lag er dahinter und das
// davor: es sah pausiert aus, war es aber nicht. // Dreieck davor: es sah pausiert aus, war es nicht.
if model.isBuffering && !showsControls { if model.isBuffering && !showsControls {
ProgressView() ProgressView()
.tint(.white) .tint(.white)
@@ -97,12 +103,13 @@ struct PlayerView: View {
if showsControls { if showsControls {
controls(for: model).transition(.opacity) controls(for: model).transition(.opacity)
} }
// Überspringen und „Nächste Folge" liegen außerhalb der // Überspringen und „Nächste Folge" liegen außerhalb
// Bedienelemente: sie sollen auch dann erscheinen, wenn // der Bedienelemente: sie sollen auch dann erscheinen,
// die ausgeblendet sind — sonst müsste man erst antippen, // wenn die ausgeblendet sind — sonst müsste man erst
// um das Intro überspringen zu können. // antippen, um das Intro überspringen zu können.
overlayActions(for: model) overlayActions(for: model)
} }
}
// Die Kopfzeile liegt über allem und erscheint auch während // Die Kopfzeile liegt über allem und erscheint auch während
// des Ladens. Ohne sie sitzt man bei langsamer Verbindung // des Ladens. Ohne sie sitzt man bei langsamer Verbindung