Phase 2 abgeschlossen: Einstellungsfenster und Lokalisierung
Einstellungen wirken sofort statt erst nach einem Neustart. In einer App ohne Fenster ist eine verzögerte Änderung praktisch unauffindbar — man sieht ja nicht, dass etwas passiert ist. AppModel meldet Layout- und Anzeigeänderungen an den Koordinator, das Panel zeichnet sich neu und die Panelgröße zieht mit. Widgets lassen sich hinzufügen, entfernen, in der Größe ändern und per Drag-and-Drop umsortieren. Angeboten werden nur die Größen, die ein Widget sinnvoll ausfüllt — ein Mini-Monat in 1x1 wäre unleserlich. Lokalisierung als String Catalog in DE und EN, Quellsprache Englisch damit die Schlüssel im Code lesbar bleiben. Der Katalog von OnyxCore musste ausdrücklich als Ressource deklariert werden: ohne das gibt es kein Bundle.module und die Übersetzungen wären zur Laufzeit unauffindbar. Im gebauten Bundle liegen jetzt de.lproj und en.lproj, auch für das Paket. Kein Menüleisten-Tab: solange es keine Module gibt, wäre das eine Oberfläche für ein Feature, das noch nicht existiert. Er kommt mit Phase 5. 80 Tests grün.
This commit is contained in:
56
Packages/OnyxKit/Sources/OnyxCore/Localizable.xcstrings
Normal file
56
Packages/OnyxKit/Sources/OnyxCore/Localizable.xcstrings
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"sourceLanguage" : "en",
|
||||
"strings" : {
|
||||
"singleInstance.blocked.message" : {
|
||||
"comment" : "Titel des Dialogs, wenn eine zweite Instanz zurücktritt",
|
||||
"localizations" : {
|
||||
"de" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Onyx läuft bereits"
|
||||
}
|
||||
},
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Onyx is already running"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"singleInstance.blocked.informative" : {
|
||||
"comment" : "Erklärung samt Hinweis auf Xcode. %@ ist der Pfad der laufenden Instanz.",
|
||||
"localizations" : {
|
||||
"de" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Eine andere Onyx-Instanz läuft und ließ sich nicht beenden. Diese Instanz wird deshalb nicht gestartet, damit nicht zwei Panels gleichzeitig auf der Notch arbeiten.\n\nLäuft sie aus Xcode, beende sie dort mit ⌘. und starte erneut.\n\n%@"
|
||||
}
|
||||
},
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Another Onyx instance is running and could not be quit. This instance will not start, so that two panels don't fight over the same notch.\n\nIf it was launched from Xcode, stop it there with ⌘. and try again.\n\n%@"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"common.ok" : {
|
||||
"localizations" : {
|
||||
"de" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "OK"
|
||||
}
|
||||
},
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "OK"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"version" : "1.0"
|
||||
}
|
||||
@@ -72,17 +72,12 @@ public enum SingleInstance {
|
||||
|
||||
let alert = NSAlert()
|
||||
alert.alertStyle = .warning
|
||||
alert.messageText = "Onyx läuft bereits"
|
||||
alert.informativeText = """
|
||||
Eine andere Onyx-Instanz läuft und ließ sich nicht beenden. \
|
||||
Diese Instanz wird deshalb nicht gestartet, damit nicht zwei Panels \
|
||||
gleichzeitig auf der Notch arbeiten.
|
||||
|
||||
Läuft sie aus Xcode, beende sie dort mit ⌘. und starte erneut.
|
||||
|
||||
\(paths)
|
||||
"""
|
||||
alert.addButton(withTitle: "OK")
|
||||
alert.messageText = String(localized: "singleInstance.blocked.message",
|
||||
bundle: .module)
|
||||
alert.informativeText = String(
|
||||
format: String(localized: "singleInstance.blocked.informative", bundle: .module),
|
||||
paths)
|
||||
alert.addButton(withTitle: String(localized: "common.ok", bundle: .module))
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
alert.runModal()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user