1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-08-07 03:50:08 +02:00

🏗️ WIP: Language override option

This commit is contained in:
2024-01-09 19:28:22 +01:00
parent 480cdb94ae
commit 32c757e711
7 changed files with 53 additions and 37 deletions

View File

@ -75,7 +75,7 @@ class MenuBarImageGenerator {
// Then we'll fetch the image we want on the left // Then we'll fetch the image we want on the left
var iconType = Preferences.preferences[.iconTypeToDisplay] as? String var iconType = Preferences.preferences[.iconTypeToDisplay] as? String
if iconType == nil { if iconType == nil || !MenuBarIcon.allCases.map({ $0.rawValue }).contains(iconType) {
Log.warn("Invalid icon type found, using the default") Log.warn("Invalid icon type found, using the default")
iconType = MenuBarIcon.iconPhp.rawValue iconType = MenuBarIcon.iconPhp.rawValue
} }

View File

@ -49,12 +49,20 @@ class GenericPreferenceVC: NSViewController {
} }
func getLanguageOptionsPV() -> NSView { func getLanguageOptionsPV() -> NSView {
var options = Bundle.main.localizations
.filter({ $0 != "Base"})
.map({ lang in
return PreferenceDropdownOption(
label: Locale.current.localizedString(forLanguageCode: lang)!,
value: lang
)
})
options.insert(PreferenceDropdownOption(label: "System Default", value: ""), at: 0)
return SelectPreferenceView.make( return SelectPreferenceView.make(
sectionText: "", sectionText: "prefs.language".localized,
descriptionText: "prefs.language_options_desc".localized, descriptionText: "prefs.language_options_desc".localized,
options: Bundle.main.localizations options: options,
.filter({ $0 != "Base"}),
localizationPrefix: "lang",
preference: .languageOverride, preference: .languageOverride,
action: { action: {
MainMenu.shared.refreshIcon() MainMenu.shared.refreshIcon()
@ -66,7 +74,8 @@ class GenericPreferenceVC: NSViewController {
return SelectPreferenceView.make( return SelectPreferenceView.make(
sectionText: "", sectionText: "",
descriptionText: "prefs.icon_options_desc".localized, descriptionText: "prefs.icon_options_desc".localized,
options: MenuBarIcon.allCases.map({ return $0.rawValue }), options: MenuBarIcon.allCases
.map({ return PreferenceDropdownOption(label: $0.rawValue, value: $0.rawValue) }),
localizationPrefix: "prefs.icon_options", localizationPrefix: "prefs.icon_options",
preference: .iconTypeToDisplay, preference: .iconTypeToDisplay,
action: { action: {

View File

@ -68,6 +68,8 @@ class PreferencesWindowController: PMWindowController {
App.shared.preferencesWindowController?.positionWindowInTopRightCorner() App.shared.preferencesWindowController?.positionWindowInTopRightCorner()
} }
App.shared.preferencesWindowController?.window?.orderFrontRegardless()
NSApp.activate(ignoringOtherApps: true) NSApp.activate(ignoringOtherApps: true)
} }

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@ -23,7 +23,7 @@
<action selector="toggled:" target="c22-O7-iKe" id="c9y-JM-TdE"/> <action selector="toggled:" target="c22-O7-iKe" id="c9y-JM-TdE"/>
</connections> </connections>
</button> </button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bcg-X1-qca"> <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bcg-X1-qca">
<rect key="frame" x="168" y="5" width="410" height="14"/> <rect key="frame" x="168" y="5" width="410" height="14"/>
<textFieldCell key="cell" title="DESCRIPTION" id="9fH-up-Sob"> <textFieldCell key="cell" title="DESCRIPTION" id="9fH-up-Sob">
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
@ -31,7 +31,7 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B8f-nb-Y0A"> <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B8f-nb-Y0A">
<rect key="frame" x="-2" y="27" width="154" height="16"/> <rect key="frame" x="-2" y="27" width="154" height="16"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="150" id="euj-t0-xv4"/> <constraint firstAttribute="width" constant="150" id="euj-t0-xv4"/>

View File

@ -9,30 +9,34 @@
import Foundation import Foundation
import Cocoa import Cocoa
class SelectPreferenceView: NSView, XibLoadable { struct PreferenceDropdownOption {
let label: String
let value: String
}
class SelectPreferenceView: NSView, XibLoadable {
@IBOutlet weak var labelSection: NSTextField! @IBOutlet weak var labelSection: NSTextField!
@IBOutlet weak var labelDescription: NSTextField! @IBOutlet weak var labelDescription: NSTextField!
@IBOutlet weak var popupButton: NSPopUpButton! @IBOutlet weak var popupButton: NSPopUpButton!
var localizationPrefix: String = "" var localizationPrefix: String?
var imagePrefix: String? var imagePrefix: String?
var options: [String] = [] { var options: [PreferenceDropdownOption] = [] {
didSet { didSet {
self.popupButton.removeAllItems() self.popupButton.removeAllItems()
self.options.forEach { value in self.options.forEach { option in
self.popupButton.addItem( if let prefix = localizationPrefix {
withTitle: "\(localizationPrefix).\(value)".localized self.popupButton.addItem(withTitle: "\(prefix).\(option.label)".localized)
) } else {
self.popupButton.addItem(withTitle: option.label)
}
} }
if imagePrefix == nil { if let prefix = imagePrefix {
return self.popupButton.itemArray.enumerated().forEach { item in
} item.element.image = NSImage(named: "\(prefix)_\(self.options[item.offset].value)")
}
self.popupButton.itemArray.enumerated().forEach { item in
item.element.image = NSImage(named: "\(imagePrefix!)_\(self.options[item.offset])")
} }
} }
} }
@ -43,19 +47,18 @@ class SelectPreferenceView: NSView, XibLoadable {
didSet { didSet {
let value = Preferences.preferences[preference] as! String let value = Preferences.preferences[preference] as! String
self.options.enumerated().forEach { option in self.options.enumerated().forEach { option in
if option.element == value { if option.element.value == value {
self.popupButton.selectItem(at: option.offset) self.popupButton.selectItem(at: option.offset)
} }
} }
} }
} }
// swiftlint:disable function_parameter_count
static func make( static func make(
sectionText: String, sectionText: String,
descriptionText: String, descriptionText: String,
options: [String], options: [PreferenceDropdownOption],
localizationPrefix: String, localizationPrefix: String? = nil,
imagePrefix: String? = nil, imagePrefix: String? = nil,
preference: PreferenceName, preference: PreferenceName,
action: @escaping () -> Void) -> NSView { action: @escaping () -> Void) -> NSView {
@ -72,11 +75,10 @@ class SelectPreferenceView: NSView, XibLoadable {
return view return view
} }
// swiftlint:enable function_parameter_count
@IBAction func valueChanged(_ sender: Any) { @IBAction func valueChanged(_ sender: Any) {
let index = self.popupButton.indexOfSelectedItem let index = self.popupButton.indexOfSelectedItem
Preferences.update(self.preference, value: self.options[index]) Preferences.update(self.preference, value: self.options[index].value)
self.action() self.action()
} }

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies> <dependencies>
<deployment identifier="macosx"/> <deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<objects> <objects>
@ -13,16 +13,16 @@
<rect key="frame" x="0.0" y="0.0" width="596" height="50"/> <rect key="frame" x="0.0" y="0.0" width="596" height="50"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bcg-X1-qca"> <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bcg-X1-qca">
<rect key="frame" x="183" y="5" width="395" height="14"/> <rect key="frame" x="168" y="5" width="410" height="14"/>
<textFieldCell key="cell" title="DESCRIPTION" id="9fH-up-Sob"> <textFieldCell key="cell" title="DESCRIPTION" id="9fH-up-Sob">
<font key="font" metaFont="smallSystem"/> <font key="font" metaFont="smallSystem"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
</textField> </textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B8f-nb-Y0A"> <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B8f-nb-Y0A">
<rect key="frame" x="13" y="29" width="154" height="16"/> <rect key="frame" x="-2" y="29" width="154" height="16"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="150" id="euj-t0-xv4"/> <constraint firstAttribute="width" constant="150" id="euj-t0-xv4"/>
</constraints> </constraints>
@ -33,7 +33,7 @@
</textFieldCell> </textFieldCell>
</textField> </textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YaB-Tg-Ir3"> <popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YaB-Tg-Ir3">
<rect key="frame" x="182" y="23" width="110" height="25"/> <rect key="frame" x="167" y="23" width="110" height="25"/>
<popUpButtonCell key="cell" type="push" title="Icon Option" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="SaA-mm-HBo" id="Su6-C4-aGo"> <popUpButtonCell key="cell" type="push" title="Icon Option" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="SaA-mm-HBo" id="Su6-C4-aGo">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/> <font key="font" metaFont="menu"/>
@ -58,7 +58,7 @@
<constraint firstItem="Bcg-X1-qca" firstAttribute="top" secondItem="YaB-Tg-Ir3" secondAttribute="bottom" constant="8" symbolic="YES" id="Mji-pe-CNl"/> <constraint firstItem="Bcg-X1-qca" firstAttribute="top" secondItem="YaB-Tg-Ir3" secondAttribute="bottom" constant="8" symbolic="YES" id="Mji-pe-CNl"/>
<constraint firstAttribute="trailing" secondItem="Bcg-X1-qca" secondAttribute="trailing" constant="20" symbolic="YES" id="UPo-Il-l81"/> <constraint firstAttribute="trailing" secondItem="Bcg-X1-qca" secondAttribute="trailing" constant="20" symbolic="YES" id="UPo-Il-l81"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="YaB-Tg-Ir3" secondAttribute="trailing" constant="20" symbolic="YES" id="Zlg-jj-uKY"/> <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="YaB-Tg-Ir3" secondAttribute="trailing" constant="20" symbolic="YES" id="Zlg-jj-uKY"/>
<constraint firstItem="B8f-nb-Y0A" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="15" id="Ztd-uk-4aw"/> <constraint firstItem="B8f-nb-Y0A" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="aBU-J8-gRK"/>
<constraint firstAttribute="bottom" secondItem="Bcg-X1-qca" secondAttribute="bottom" constant="5" id="hNE-mU-jcu"/> <constraint firstAttribute="bottom" secondItem="Bcg-X1-qca" secondAttribute="bottom" constant="5" id="hNE-mU-jcu"/>
</constraints> </constraints>
<connections> <connections>

View File

@ -378,6 +378,7 @@ This has no effect on other terminals, only for the particular terminal session
"prefs.tabs.visibility" = "Visibility"; "prefs.tabs.visibility" = "Visibility";
"prefs.tabs.notifications" = "Notifications"; "prefs.tabs.notifications" = "Notifications";
"prefs.language" = "Language:";
"prefs.global_shortcut" = "Global Shortcut:"; "prefs.global_shortcut" = "Global Shortcut:";
"prefs.dynamic_icon" = "Dynamic Icon:"; "prefs.dynamic_icon" = "Dynamic Icon:";
"prefs.dynamic_icon" = "Icon Type:"; "prefs.dynamic_icon" = "Icon Type:";
@ -392,6 +393,8 @@ This has no effect on other terminals, only for the particular terminal session
"prefs.menu_contents" = "Features in Menu:"; "prefs.menu_contents" = "Features in Menu:";
"prefs.startup" = "Startup:"; "prefs.startup" = "Startup:";
"prefs.language_options_desc" = "Choose a different language to use with PHP Monitor.";
"prefs.auto_start_desc" = "Automatically starts PHP Monitor when you log into your Mac."; "prefs.auto_start_desc" = "Automatically starts PHP Monitor when you log into your Mac.";
"prefs.auto_start_title" = "Start PHP Monitor at login"; "prefs.auto_start_title" = "Start PHP Monitor at login";