Mediensteuerung hochkant, Symbole wieder sichtbar, „Auto" als Zustand

Die Mediensteuerung stand nebeneinander: Cover links, alles andere in den
verbleibenden gut hundert Punkten. Daher „Bernhard H…" statt eines Titels.
Jetzt übereinander, wie es zu einer hochkanten Kachel passt.

Das Cover ragte zusätzlich über die Kachel hinaus, weil `clipShape` vor dem
Rahmen stand — beschnitten wurde damit auf die Eigengröße des Bildes, und
die ist bei einem Podcast-Cover ein Vielfaches. Erst Rahmen, dann
beschneiden.

Menüleistensymbole waren kaum zu sehen. `color.set()` vor `image.draw(in:)`
färbt ein Template-Bild nicht: es wird schwarz gezeichnet, auf einer dunklen
Menüleiste also unsichtbar. AppKit färbt Template-Bilder nur ein, wenn sie
als `image` eines Buttons gesetzt sind — in einer selbst gezeichneten Ansicht
muss die Farbe in die Symbolkonfiguration. Betraf alle fünf Zeichenstellen,
nicht nur die Lüfter.

„fans.auto" stand als roher Schlüssel da: Xcode hatte ihn extrahiert, gefüllt
wurde er nie. Beim Nachsehen waren es 35 solche Einträge über alle Kataloge
hinweg — die meisten reine Formatschlüssel, die als Durchreicher trotzdem
einen Wert brauchen.

Der Automatik-Knopf ist jetzt eine gefüllte Pille, wenn sie greift. Blauer
Text sieht aus wie ein Link und nicht wie ein Zustand.

Und ein Absturz, der noch niemandem passiert ist: meldet der Helfer für einen
stehenden Lüfter keine Grenzen, hätte `Slider(in: 0...0)` die App beendet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-08-11 11:12:33 +02:00
parent 93fe95827f
commit b22a44ba70
14 changed files with 1400 additions and 1027 deletions

View File

@@ -1,358 +1,404 @@
{
"sourceLanguage" : "en",
"strings" : {
"" : {
},
"%lld" : {
"comment" : "A day of the month. The argument is the day of the month.",
"isCommentAutoGenerated" : true
},
"calendar.source.apple" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Apple Kalender"
"sourceLanguage": "en",
"strings": {
"": {},
"%lld": {
"comment": "A day of the month. The argument is the day of the month.",
"isCommentAutoGenerated": true,
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "%lld"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Apple Calendar"
"en": {
"stringUnit": {
"state": "translated",
"value": "%lld"
}
}
}
},
"calendar.source.both" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Beide"
"calendar.source.apple": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Apple Kalender"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Both"
"en": {
"stringUnit": {
"state": "translated",
"value": "Apple Calendar"
}
}
}
},
"calendar.source.calendarr" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendarr"
"calendar.source.both": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Beide"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendarr"
"en": {
"stringUnit": {
"state": "translated",
"value": "Both"
}
}
}
},
"calendar.source.readOnly" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx liest nur. Es meldet sich nie selbst an und schreibt nie nach Calendarr."
"calendar.source.calendarr": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Calendarr"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx only reads. It never signs in and never writes to Calendarr."
"en": {
"stringUnit": {
"state": "translated",
"value": "Calendarr"
}
}
}
},
"calendar.source.status.coverage" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Bekannt bis %@"
"calendar.source.readOnly": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Onyx liest nur. Es meldet sich nie selbst an und schreibt nie nach Calendarr."
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Known through %@"
"en": {
"stringUnit": {
"state": "translated",
"value": "Onyx only reads. It never signs in and never writes to Calendarr."
}
}
}
},
"calendar.source.status.coverage %@" : {
"comment" : "A footnote in the Calendarr settings, indicating the end of the coverage window.",
"isCommentAutoGenerated" : true
},
"calendar.source.status.incompatible" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendarr schreibt ein neueres Format. Bitte Onyx aktualisieren."
"calendar.source.status.coverage": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Bekannt bis %@"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendarr writes a newer format. Please update Onyx."
"en": {
"stringUnit": {
"state": "translated",
"value": "Known through %@"
}
}
}
},
"calendar.source.status.loggedOut" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "In Calendarr nicht angemeldet. Alte Termine werden nicht gezeigt."
"calendar.source.status.coverage %@": {
"comment": "A footnote in the Calendarr settings, indicating the end of the coverage window.",
"isCommentAutoGenerated": true,
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Bekannt bis %@"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Not signed in to Calendarr. Old events are not shown."
"en": {
"stringUnit": {
"state": "translated",
"value": "Known through %@"
}
}
}
},
"calendar.source.status.neverWritten" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendarr einmal öffnen, damit ein Schnappschuss geschrieben wird."
"calendar.source.status.incompatible": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Calendarr schreibt ein neueres Format. Bitte Onyx aktualisieren."
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Open Calendarr once so it can write a snapshot."
"en": {
"stringUnit": {
"state": "translated",
"value": "Calendarr writes a newer format. Please update Onyx."
}
}
}
},
"calendar.source.status.ready" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ Termine, Stand %@"
"calendar.source.status.loggedOut": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "In Calendarr nicht angemeldet. Alte Termine werden nicht gezeigt."
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ events, as of %@"
"en": {
"stringUnit": {
"state": "translated",
"value": "Not signed in to Calendarr. Old events are not shown."
}
}
}
},
"calendar.source.status.ready %@ %@" : {
"comment" : "Die Anzahl der Termine in der The argument is the string “–”.",
"isCommentAutoGenerated" : true,
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "calendar.source.status.ready %1$@ %2$@"
"calendar.source.status.neverWritten": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Calendarr einmal öffnen, damit ein Schnappschuss geschrieben wird."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Open Calendarr once so it can write a snapshot."
}
}
}
},
"calendar.source.status.unreadable" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Schnappschuss unlesbar: %@"
"calendar.source.status.ready": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "%@ Termine, Stand %@"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Snapshot unreadable: %@"
"en": {
"stringUnit": {
"state": "translated",
"value": "%@ events, as of %@"
}
}
}
},
"calendar.source.status.unreadable %@" : {
"comment" : "A warning message explaining that a Calendarr source is not readable. The argument is a human-readable description of the problem.",
"isCommentAutoGenerated" : true
},
"calendar.source.title" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Terminquelle"
"calendar.source.status.ready %@ %@": {
"comment": "Die Anzahl der Termine in der The argument is the string “–”.",
"isCommentAutoGenerated": true,
"localizations": {
"en": {
"stringUnit": {
"state": "new",
"value": "calendar.source.status.ready %1$@ %2$@"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendar source"
"de": {
"stringUnit": {
"state": "translated",
"value": "%@ Termine, Stand %@"
}
}
}
},
"widget.calendar.allDay" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ganztägig"
"calendar.source.status.unreadable": {
"extractionState": "stale",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Schnappschuss unlesbar: %@"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "All day"
"en": {
"stringUnit": {
"state": "translated",
"value": "Snapshot unreadable: %@"
}
}
}
},
"widget.calendar.day.unknown" : {
"comment" : "Erklärt einen ausgegrauten Tag: keine Information, nicht keine Termine",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Für diesen Tag liegen keine Daten vor"
"calendar.source.status.unreadable %@": {
"comment": "A warning message explaining that a Calendarr source is not readable. The argument is a human-readable description of the problem.",
"isCommentAutoGenerated": true,
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Schnappschuss unlesbar: %@"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No data available for this day"
"en": {
"stringUnit": {
"state": "translated",
"value": "Snapshot unreadable: %@"
}
}
}
},
"widget.calendar.denied" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kein Kalenderzugriff.\nIn den Systemeinstellungen erlauben."
"calendar.source.title": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Terminquelle"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "No calendar access.\nAllow it in System Settings."
"en": {
"stringUnit": {
"state": "translated",
"value": "Calendar source"
}
}
}
},
"widget.calendar.incompatible" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx ist zu alt für diese\nCalendarr-Version. Bitte aktualisieren."
"widget.calendar.allDay": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Ganztägig"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Onyx is too old for this\nCalendarr version. Please update."
"en": {
"stringUnit": {
"state": "translated",
"value": "All day"
}
}
}
},
"widget.calendar.loggedOut" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "In Calendarr anmelden"
"widget.calendar.day.unknown": {
"comment": "Erklärt einen ausgegrauten Tag: keine Information, nicht keine Termine",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Für diesen Tag liegen keine Daten vor"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sign in to Calendarr"
"en": {
"stringUnit": {
"state": "translated",
"value": "No data available for this day"
}
}
}
},
"widget.calendar.name" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kalender"
"widget.calendar.denied": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Kein Kalenderzugriff.\nIn den Systemeinstellungen erlauben."
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendar"
"en": {
"stringUnit": {
"state": "translated",
"value": "No calendar access.\nAllow it in System Settings."
}
}
}
},
"widget.calendar.neverWritten" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Calendarr einmal öffnen,\ndamit Termine bereitstehen."
"widget.calendar.incompatible": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Onyx ist zu alt für diese\nCalendarr-Version. Bitte aktualisieren."
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Open Calendarr once\nso events become available."
"en": {
"stringUnit": {
"state": "translated",
"value": "Onyx is too old for this\nCalendarr version. Please update."
}
}
}
},
"widget.calendar.noUpcoming" : {
"comment" : "Nur zeigen, wenn der Zeitraum wirklich abgedeckt ist",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nichts mehr für heute"
"widget.calendar.loggedOut": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "In Calendarr anmelden"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nothing left today"
"en": {
"stringUnit": {
"state": "translated",
"value": "Sign in to Calendarr"
}
}
}
},
"widget.calendar.unreadable" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Termine nicht lesbar.\nKonfigurationsfehler."
"widget.calendar.name": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Kalender"
}
},
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Events unreadable.\nConfiguration error."
"en": {
"stringUnit": {
"state": "translated",
"value": "Calendar"
}
}
}
},
"widget.calendar.neverWritten": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Calendarr einmal öffnen,\ndamit Termine bereitstehen."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Open Calendarr once\nso events become available."
}
}
}
},
"widget.calendar.noUpcoming": {
"comment": "Nur zeigen, wenn der Zeitraum wirklich abgedeckt ist",
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Nichts mehr für heute"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Nothing left today"
}
}
}
},
"widget.calendar.unreadable": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Termine nicht lesbar.\nKonfigurationsfehler."
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Events unreadable.\nConfiguration error."
}
}
}
}
},
"version" : "1.1"
}
"version": "1.1"
}