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>
738 lines
16 KiB
Plaintext
738 lines
16 KiB
Plaintext
{
|
|
"sourceLanguage": "en",
|
|
"strings": {
|
|
"": {},
|
|
"%lld": {
|
|
"comment": "A label displaying the speed of a fan. The argument is the speed of the fan, in revolutions per minute.",
|
|
"isCommentAutoGenerated": true,
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "%lld"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "%lld"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"%lld U/min": {
|
|
"comment": "A label that shows the fan speed in revolutions per minute. The value is the fan speed in revolutions per minute.",
|
|
"isCommentAutoGenerated": true,
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "%lld U/min"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "%lld U/min"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"Lüfter %lld": {
|
|
"comment": "A label that shows the name of a fan. The argument is the index of the fan.",
|
|
"isCommentAutoGenerated": true,
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Lüfter %lld"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Fan %lld"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.battery": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Akku"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Battery"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.battery.charging": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Lädt"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Charging"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.cpu": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "CPU"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "CPU"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.cpu.perCore": {
|
|
"extractionState": "stale",
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Je Kern"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Per core"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.fan %lld": {
|
|
"extractionState": "stale",
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Lüfter %lld"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Fan %lld"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.fan.controlComing": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Die Lüftersteuerung kommt mit dem privilegierten Helfer — Schreibzugriff auf den SMC verlangt root."
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Fan control arrives with the privileged helper — writing to the SMC requires root."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.gpu": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "GPU"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "GPU"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.memory": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Speicher"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Memory"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.mode.temperature": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Temperatur"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Temperature"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.mode.usage": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Auslastung"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Usage"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.rpm": {
|
|
"extractionState": "stale",
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "U/min"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "rpm"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.sensors": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Sensoren"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Sensors"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.sensors.none": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Keine Sensoren lesbar"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "No sensors readable"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"metric.show": {
|
|
"extractionState": "stale",
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Anzeigen"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Show"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.calculating": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Wird berechnet …"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Calculating…"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.charging": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Lädt mit"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Charging at"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.condition": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Zustand"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Condition"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.cycles": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Ladezyklen"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Cycles"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.draining": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Verbrauch"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Draw"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.health": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Kapazität"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Capacity"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.limitComing": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Das Ladelimit kommt mit dem privilegierten Helfer. Der zuständige SMC-Key ist auf diesem Modell noch nicht identifiziert — siehe docs/spikes/A-smc.md."
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "The charge limit arrives with the privileged helper. The relevant SMC key is not yet identified on this model — see docs/spikes/A-smc.md."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.none": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Kein Akku gefunden"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "No battery found"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.pluggedIn": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Am Netzteil"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "On adapter"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.remaining": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "verbleibend"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "remaining"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.untilFull": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "bis voll"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "until full"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.battery.voltage": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Spannung"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Voltage"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.fans": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Lüfter"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Fans"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.app": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Programme"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Apps"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.compressed": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Komprimiert"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Compressed"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.free": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Frei"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Free"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.swap": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Auslagerung"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Swap"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.swapUsed": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Benutzt"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Used"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.used": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Belegt"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Used"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.memory.wired": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Reserviert"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Wired"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.perCore": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Je Kern"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Per core"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.power": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Leistung"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Power"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.power.adapter": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Netzteil"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Adapter"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.power.cpu": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "CPU"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "CPU"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.power.display": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Anzeige"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Display"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.power.total": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Gesamt"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Total"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.processes": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Größte Verbraucher"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Top consumers"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"popover.temperature": {
|
|
"localizations": {
|
|
"de": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Temperatur"
|
|
}
|
|
},
|
|
"en": {
|
|
"stringUnit": {
|
|
"state": "translated",
|
|
"value": "Temperature"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"version": "1.1"
|
|
}
|