Version 4.0.0 (#629)

### Added/improved functionality

- Added proper support for controlling Apple displays.
- Added option to show/hide brightness slider.
- Added option to show brightness slider for internal display and apple displays (enabled by default).
- Replication of built-in and Apple display brightness to corresponding brightness slider.
- Added suffix to similarly named displays for better differentiation.
- Option to disable slider snapping for finer control + disable slider snapping by default.
- Added option to show slider tick marks for better accuracy.
- Added option to use window focus instead of mouse to determine which display to control.
- Ctrl+Command+Brightness now controls external displays only (Ctrl+Brightness continues to control internal display only)
- Added separate tab for menu options.
- Added option to restore last saved values upon startup.
- Added option for audio device name matching for display volume control selection.
- Separated option to change all screens for brightness and volume.
- Added option for keyboard fine scale for brightness.
- Added option for keyboard fine scale for volume.
- Added version check upon startup for mandatory preferences reset upon downgrade or incompatible previous version + notification about this.
- Added implementation for Command+F1 macOS shortcut to enable/disable mirroring.
- Added safer 'Assume last saved settings are valid' option as default instead of startup DDC read (or restore).
- Streamlined preference panes, 'Show advanced settings' now affect all tabs. This leads to a better and safer first timer experience (especially because of the influx of many new features).
- Added a Quit button to Preferences if menu is hidden (it was not passible to quit the application until this time in this mode only by re-enabling the menu).
- Lowered default first-run volume DDC default from 75% to 15% if read is not possible or disabled to prevent unexpectedly loud sound. 
- Added slider skew setting on a per control basis to have the ability to manipulate DDC slider balance and OSD scale if display control is not linear.
- Added the ability to set min. and max. DDC bounds on a per display, per control basis.
- Audio device name override option for a display (manually assign a specific audio device to a display).
- Advanced setting to invert DDC control range (some displays have the scale reversed).
- Advanced setting to remap DDC control code (some displays have contrast and brightness mixed up).
- Ability to mark a DDC control as available or unavailable in advanced settings under Displays.
- Ability to automatically hide menu icon if there is no slider present in the menu.
- Option to show slider percentage for more precision.
- Option to set combined or separate OSD scale when combined hardware+software brightness is used.
- Apple like smooth brightness change (both for software, hardware, mixed and DisplayServices).
- Added support for DisplayLink, AirPlay, Sidecar, screen sharing etc. using window shades (this is an inferior technique to the existing software implementation - gamma control - but still better than nothing). Disabled for any kind of mirroring setups. _(Only on Big Sur and above)_
- Brightness change synchronisation from Built-In and Apple displays to other displays. This makes Touch Bar, Ambient light sensor, Control Center and System Preferences induced changes affect all displays. Synchronisation uses a sophisticated indirect delta method + the user can intervene and adjust individual screen brightness at any time to easily compensate mismatching native brightness levels.
- Preferences pane tab selector has a simpler look on Catalina.
- All menu sliders are now scrollable using a magic mouse/trackpad swipes or mouse wheel.
- Added option for menu to show only items that are relevant to display which shows the menu currently.
- Added option to enable combined sliders (note: this option combined with enabled Apple/built-in display syncing and enabled 'change all' keyboard settings finally provides full synchronised control of all displays).
- Combined sliders can now display multiple displays when keyboard and brightness syncing is not enabled. _(Only on Big Sur and above)_
- Redesigned sliders to look like Big Sur/Monterey Control Center's sliders. _(Only on Big Sur and above)_
- Quit and Preferences... are now icons for a much cleaner look. _(Only on Big Sur and above)_
- Added option to change additional menu options style or hide them. _(Only on Big Sur and above)_
- Multiple displays are now in nice Big Sur styled blocks - no more ugly separators. _(Only on Big Sur and above)_
- Added customisable gamma/ddc switchover point for combined brightness in the advanced section of Displays.
- Added comma separated list for control code override to enable edge cases like controlling Brightness and Contrast at the same time (use VCP list entry `10, 12` for that)
- Contrast can now be controlled from keyboard via <kbd>control</kbd> + <kbd>option</kbd> + <kbd>command</kbd> + brightness up/down.
- Custom keyboard shortcuts for brightness, contrast, volume and mute
- Added automatic update.

### Other under the hood changes and bug fixes

- Standardised internal scale among various displays and DDC ranges for ranged controls.
- Uses the new internal scale for combined hardware-software brightness mode.
- Migrated scales to internal float representation to prevent loss of fine detail on transformations.
- Fixed double sound when muting multiple external displays at the same time.
- Fixed lack of initial volume configuration if slider is not shown in menu.
- Fixed wrong settings being applied to a display when replaced on Apple Silicon (UserDefaults preferences are now tied to specific display strings instead of CGDirectDisplayID - which is no longer semi-unique on arm64).
- A lot of refactoring, streamlining and general optimisations.
This commit is contained in:
Istvan T 2021-09-30 23:05:24 +02:00 committed by GitHub
parent 5947be2b89
commit 30da9a8020
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
100 changed files with 12635 additions and 4748 deletions

BIN
.github/screenshot.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before After
Before After

View file

@ -3,20 +3,17 @@
archiveVersion = 1;
classes = {
};
objectVersion = 52;
objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
2894D9B82280B30500DF58DA /* CGDirectDisplayID+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2894D9B72280B30500DF58DA /* CGDirectDisplayID+Extension.swift */; };
28D1DDF2227FBE71004CB494 /* NSScreen+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28D1DDF1227FBE71004CB494 /* NSScreen+Extension.swift */; };
28D1DDF3227FC8C6004CB494 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 56754EB01D9A4016007BCDC5 /* Assets.xcassets */; };
56754EAF1D9A4016007BCDC5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56754EAE1D9A4016007BCDC5 /* AppDelegate.swift */; };
56754EAF1D9A4016007BCDC5 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56754EAE1D9A4016007BCDC5 /* main.swift */; };
56754EB11D9A4016007BCDC5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 56754EB01D9A4016007BCDC5 /* Assets.xcassets */; };
6C20466C23153E4F00859767 /* Display+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C20466B23153E4F00859767 /* Display+Extension.swift */; };
6C85EFDA22C941B000227EA1 /* DisplayManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C85EFD922C941B000227EA1 /* DisplayManager.swift */; };
6C85EFE122CC00AD00227EA1 /* NSNotification+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C85EFE022CC00AD00227EA1 /* NSNotification+Extension.swift */; };
6CBFE27A23DB266000D1BC41 /* Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBFE27923DB266000D1BC41 /* Display.swift */; };
6CBFE27C23DB27A200D1BC41 /* InternalDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBFE27B23DB27A200D1BC41 /* InternalDisplay.swift */; };
6CBFE27C23DB27A200D1BC41 /* AppleDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBFE27B23DB27A200D1BC41 /* AppleDisplay.swift */; };
6CC260F6256AD8F900613714 /* Preferences+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CC260F5256AD8F900613714 /* Preferences+Extension.swift */; };
6CD35F53264FFFC6001F1344 /* SimplyCoreAudio in Frameworks */ = {isa = PBXBuildFile; productRef = 6CD35F52264FFFC6001F1344 /* SimplyCoreAudio */; };
6CD35F5626500008001F1344 /* MediaKeyTap in Frameworks */ = {isa = PBXBuildFile; productRef = 6CD35F5526500008001F1344 /* MediaKeyTap */; };
@ -25,18 +22,27 @@
AA062E8A26C9A039007E628C /* DisplaysPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA062E8926C9A039007E628C /* DisplaysPrefsViewController.swift */; };
AA062E8E26CA7BE5007E628C /* DisplaysPrefsCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA062E8D26CA7BE5007E628C /* DisplaysPrefsCellView.swift */; };
AA16139B26BE772E00DCF027 /* Arm64DDC.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA16139A26BE772E00DCF027 /* Arm64DDC.swift */; };
AA25F6CF26E680510087F3A2 /* MenuslidersPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA25F6CE26E680510087F3A2 /* MenuslidersPrefsViewController.swift */; };
AA25F6D126E681D30087F3A2 /* KeyboardPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA25F6D026E681D30087F3A2 /* KeyboardPrefsViewController.swift */; };
AA25F6D726E68C160087F3A2 /* MediaKeyTapManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA25F6D626E68C160087F3A2 /* MediaKeyTapManager.swift */; };
AA3B4A2826AE103C00B74CD2 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = AA3B4A2726AE103C00B74CD2 /* README.md */; };
AA4398A926DD55DA00943F16 /* IntelDDC.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA4398A826DD55DA00943F16 /* IntelDDC.swift */; };
AA44E703270377C200E06865 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = AA44E702270377C200E06865 /* KeyboardShortcuts */; };
AA44E7052703790100E06865 /* KeyboardShortcuts+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA44E7042703790100E06865 /* KeyboardShortcuts+Extension.swift */; };
AA44E70727038F7F00E06865 /* KeyboardShortcutsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA44E70627038F7F00E06865 /* KeyboardShortcutsManager.swift */; };
AA473EB126DFF8DE0063A181 /* Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA473EB026DFF8DE0063A181 /* Command.swift */; };
AA5314C426EBF5170041D178 /* PrefKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA5314C326EBF5170041D178 /* PrefKey.swift */; };
AA665A5D26C5892800FEF2C1 /* AboutPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA665A5C26C5892800FEF2C1 /* AboutPrefsViewController.swift */; };
AA70817C27046B9800CC5625 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = AA70817B27046B9800CC5625 /* Sparkle */; };
AA99521726FE25AB00612E07 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA99521626FE25AB00612E07 /* AppDelegate.swift */; };
AA99521926FE49A300612E07 /* MenuHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA99521826FE49A300612E07 /* MenuHandler.swift */; };
AA9AE86F26B5BF3D00B6CA65 /* OSD.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA9AE86E26B5BF3D00B6CA65 /* OSD.framework */; };
AA9AE87126B5BFB700B6CA65 /* CoreDisplay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA9AE87026B5BFB700B6CA65 /* CoreDisplay.framework */; };
AACE5E2327050C63006C2A48 /* NSNotification+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AACE5E2227050C63006C2A48 /* NSNotification+Extension.swift */; };
AADB625A26BC196900DFFAA5 /* DisplayServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AADB625926BC196900DFFAA5 /* DisplayServices.framework */; };
F01B0699228221B7008E64DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F01B0680228221B6008E64DB /* Localizable.strings */; };
F01B069A228221B7008E64DB /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01B0683228221B6008E64DB /* Utils.swift */; };
F01B069F228221B7008E64DB /* SliderHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01B068F228221B7008E64DB /* SliderHandler.swift */; };
F01B06A1228221B7008E64DB /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F01B0692228221B7008E64DB /* MainMenu.xib */; };
F03A8DF21FFBAA6F0034DC27 /* ExternalDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = F03A8DF11FFBAA6F0034DC27 /* ExternalDisplay.swift */; };
F03A8DF21FFBAA6F0034DC27 /* OtherDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = F03A8DF11FFBAA6F0034DC27 /* OtherDisplay.swift */; };
F0445D3820023E710025AE82 /* MainPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0445D3720023E710025AE82 /* MainPrefsViewController.swift */; };
F06792EA200A73460066C438 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F06792E9200A73460066C438 /* main.swift */; };
F06792F6200A745F0066C438 /* MonitorControlHelper.app in [Login] Copy Helper to start at Login */ = {isa = PBXBuildFile; fileRef = F06792E7200A73460066C438 /* MonitorControlHelper.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
@ -58,79 +64,68 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1E7ECF3F22A4552400E4E701 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
1E7ECF4122A4553000E4E701 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/MainMenu.strings; sourceTree = "<group>"; };
2894D9B72280B30500DF58DA /* CGDirectDisplayID+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CGDirectDisplayID+Extension.swift"; sourceTree = "<group>"; };
28D1DDF1227FBE71004CB494 /* NSScreen+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSScreen+Extension.swift"; sourceTree = "<group>"; };
2EAA5B7E24BF9E9A00937821 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/MainMenu.strings; sourceTree = "<group>"; };
2EAA5B7F24BF9E9A00937821 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
2F251E9C26E250E70051D007 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Main.strings; sourceTree = "<group>"; };
2F251E9D26E250E70051D007 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/MainMenu.strings; sourceTree = "<group>"; };
2F251E9E26E250E70051D007 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
3CCA5F962442EFF800B4DB84 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainMenu.strings; sourceTree = "<group>"; };
3CCA5F972442EFF800B4DB84 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
44706EBA26D25F7100C82ECB /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = "<group>"; };
44706EBB26D25F7100C82ECB /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/MainMenu.strings; sourceTree = "<group>"; };
44706EBC26D25F7100C82ECB /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
47A9F5A022ACAFBE00F649BB /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
47A9F5A122ACAFBE00F649BB /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
56754EAB1D9A4016007BCDC5 /* MonitorControl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MonitorControl.app; sourceTree = BUILT_PRODUCTS_DIR; };
56754EAE1D9A4016007BCDC5 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = AppDelegate.swift; sourceTree = "<group>"; };
56754EAE1D9A4016007BCDC5 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = main.swift; sourceTree = "<group>"; };
56754EB01D9A4016007BCDC5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
6C20466B23153E4F00859767 /* Display+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Display+Extension.swift"; sourceTree = "<group>"; };
6C85EFD922C941B000227EA1 /* DisplayManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisplayManager.swift; sourceTree = "<group>"; };
6C85EFE022CC00AD00227EA1 /* NSNotification+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNotification+Extension.swift"; sourceTree = "<group>"; };
6CAD134F23624CC1009BD53F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainMenu.strings; sourceTree = "<group>"; };
6CAD135023624CC1009BD53F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
6CBB437E26D80650009645CA /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Main.strings; sourceTree = "<group>"; };
6CBB437F26D80650009645CA /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/MainMenu.strings; sourceTree = "<group>"; };
6CBB438026D80651009645CA /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
6CBFE27923DB266000D1BC41 /* Display.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Display.swift; sourceTree = "<group>"; };
6CBFE27B23DB27A200D1BC41 /* InternalDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalDisplay.swift; sourceTree = "<group>"; };
6CBFE27B23DB27A200D1BC41 /* AppleDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleDisplay.swift; sourceTree = "<group>"; };
6CC260F5256AD8F900613714 /* Preferences+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Preferences+Extension.swift"; sourceTree = "<group>"; };
6CDA0FCE26485A8300F52125 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
6CDA0FD026485AA100F52125 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD126485AA300F52125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
6CDA0FD226485AA700F52125 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD326485AA900F52125 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD426485AAA00F52125 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD526485AAB00F52125 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD626485AAC00F52125 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD726485AAC00F52125 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = "<group>"; };
6CDA0FD826485AAE00F52125 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Main.strings; sourceTree = "<group>"; };
AA062E8926C9A039007E628C /* DisplaysPrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplaysPrefsViewController.swift; sourceTree = "<group>"; };
AA062E8D26CA7BE5007E628C /* DisplaysPrefsCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplaysPrefsCellView.swift; sourceTree = "<group>"; };
AA16139A26BE772E00DCF027 /* Arm64DDC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Arm64DDC.swift; sourceTree = "<group>"; };
AA25F6CE26E680510087F3A2 /* MenuslidersPrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuslidersPrefsViewController.swift; sourceTree = "<group>"; };
AA25F6D026E681D30087F3A2 /* KeyboardPrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardPrefsViewController.swift; sourceTree = "<group>"; };
AA25F6D626E68C160087F3A2 /* MediaKeyTapManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaKeyTapManager.swift; sourceTree = "<group>"; };
AA3B4A2726AE103C00B74CD2 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
AA4398A826DD55DA00943F16 /* IntelDDC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntelDDC.swift; sourceTree = "<group>"; };
AA44E7042703790100E06865 /* KeyboardShortcuts+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyboardShortcuts+Extension.swift"; sourceTree = "<group>"; };
AA44E70627038F7F00E06865 /* KeyboardShortcutsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardShortcutsManager.swift; sourceTree = "<group>"; };
AA473EB026DFF8DE0063A181 /* Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Command.swift; sourceTree = "<group>"; };
AA5314C326EBF5170041D178 /* PrefKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefKey.swift; sourceTree = "<group>"; };
AA665A5C26C5892800FEF2C1 /* AboutPrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutPrefsViewController.swift; sourceTree = "<group>"; };
AA6686F026B8172E00AF74A2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Main.strings; sourceTree = "<group>"; };
AA6686F126B8172E00AF74A2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/MainMenu.strings; sourceTree = "<group>"; };
AA6686F226B8172E00AF74A2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
AA8B7A5426D6501D0005C4D9 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Main.strings"; sourceTree = "<group>"; };
AA8B7A5526D6501D0005C4D9 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/MainMenu.strings"; sourceTree = "<group>"; };
AA8B7A5626D6501D0005C4D9 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.strings"; sourceTree = "<group>"; };
AA99521626FE25AB00612E07 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
AA99521826FE49A300612E07 /* MenuHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuHandler.swift; sourceTree = "<group>"; };
AA9AE86E26B5BF3D00B6CA65 /* OSD.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSD.framework; path = ../../../../../System/Library/PrivateFrameworks/OSD.framework; sourceTree = "<group>"; };
AA9AE87026B5BFB700B6CA65 /* CoreDisplay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreDisplay.framework; path = ../../../../../System/Library/Frameworks/CoreDisplay.framework; sourceTree = "<group>"; };
AA9CB6252704BB440086DC0E /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB6262704BB440086DC0E /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB6272704C0530086DC0E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB6282704C0530086DC0E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB62A2704C0890086DC0E /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB62B2704C0890086DC0E /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB62D2704C0D70086DC0E /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB62E2704C0D70086DC0E /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB62F2704C1250086DC0E /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Main.strings"; sourceTree = "<group>"; };
AA9CB6302704C1250086DC0E /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = "<group>"; };
AA9CB6312704C1440086DC0E /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB6322704C1440086DC0E /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB6332704C14D0086DC0E /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB6342704C14D0086DC0E /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB6352704C16F0086DC0E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB6362704C16F0086DC0E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB6372704C17A0086DC0E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB6382704C17A0086DC0E /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB6392704C1890086DC0E /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB63A2704C1890086DC0E /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB63B2704C1900086DC0E /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB63C2704C1900086DC0E /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB63D2704C1970086DC0E /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Main.strings; sourceTree = "<group>"; };
AA9CB63E2704C1970086DC0E /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
AA9CB63F2704C1A40086DC0E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
AA9CB6402704C1A40086DC0E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
AA9CB6412704C1B80086DC0E /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Main.strings"; sourceTree = "<group>"; };
AA9CB6422704C1B80086DC0E /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/Localizable.strings"; sourceTree = "<group>"; };
AACE5E2227050C63006C2A48 /* NSNotification+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotification+Extension.swift"; sourceTree = "<group>"; };
AADB625926BC196900DFFAA5 /* DisplayServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DisplayServices.framework; path = ../../../../../System/Library/PrivateFrameworks/DisplayServices.framework; sourceTree = "<group>"; };
B0C4810623357CE500053F91 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
B0C4810823357CE500053F91 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainMenu.strings; sourceTree = "<group>"; };
CE14313826D54C8C001883F8 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Main.strings"; sourceTree = "<group>"; };
CE14313926D54C8C001883F8 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/MainMenu.strings"; sourceTree = "<group>"; };
CE14313A26D54C8C001883F8 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = "<group>"; };
F01B0681228221B6008E64DB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
F01B0682228221B6008E64DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
F01B0683228221B6008E64DB /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = "<group>"; };
F01B0684228221B6008E64DB /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
F01B0685228221B6008E64DB /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = "<group>"; };
F01B0686228221B6008E64DB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
F01B068F228221B7008E64DB /* SliderHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderHandler.swift; sourceTree = "<group>"; };
F01B0693228221B7008E64DB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
F01B06A222822208008E64DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
F01B06A32282220A008E64DB /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainMenu.strings; sourceTree = "<group>"; };
F01B06A42282220D008E64DB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainMenu.strings; sourceTree = "<group>"; };
F03A8DF11FFBAA6F0034DC27 /* ExternalDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalDisplay.swift; sourceTree = "<group>"; };
F03A8DF11FFBAA6F0034DC27 /* OtherDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OtherDisplay.swift; sourceTree = "<group>"; };
F0445D3720023E710025AE82 /* MainPrefsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainPrefsViewController.swift; sourceTree = "<group>"; };
F06792E7200A73460066C438 /* MonitorControlHelper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MonitorControlHelper.app; sourceTree = BUILT_PRODUCTS_DIR; };
F06792E9200A73460066C438 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
@ -145,6 +140,8 @@
buildActionMask = 2147483647;
files = (
AA9AE87126B5BFB700B6CA65 /* CoreDisplay.framework in Frameworks */,
AA70817C27046B9800CC5625 /* Sparkle in Frameworks */,
AA44E703270377C200E06865 /* KeyboardShortcuts in Frameworks */,
6CD35F53264FFFC6001F1344 /* SimplyCoreAudio in Frameworks */,
6CD35F5626500008001F1344 /* MediaKeyTap in Frameworks */,
AA9AE86F26B5BF3D00B6CA65 /* OSD.framework in Frameworks */,
@ -176,11 +173,10 @@
28D1DDEB227FB8E9004CB494 /* Extensions */ = {
isa = PBXGroup;
children = (
2894D9B72280B30500DF58DA /* CGDirectDisplayID+Extension.swift */,
28D1DDF1227FBE71004CB494 /* NSScreen+Extension.swift */,
6C85EFE022CC00AD00227EA1 /* NSNotification+Extension.swift */,
6C20466B23153E4F00859767 /* Display+Extension.swift */,
6CC260F5256AD8F900613714 /* Preferences+Extension.swift */,
AA44E7042703790100E06865 /* KeyboardShortcuts+Extension.swift */,
AACE5E2227050C63006C2A48 /* NSNotification+Extension.swift */,
);
path = Extensions;
sourceTree = "<group>";
@ -209,13 +205,13 @@
56754EAD1D9A4016007BCDC5 /* MonitorControl */ = {
isa = PBXGroup;
children = (
6C6C34F423DB25BF00C0E9CB /* Model */,
F01B0686228221B6008E64DB /* Info.plist */,
6C85EFD622C74B0E00227EA1 /* Manager */,
56754EAE1D9A4016007BCDC5 /* AppDelegate.swift */,
56754EB01D9A4016007BCDC5 /* Assets.xcassets */,
28D1DDEB227FB8E9004CB494 /* Extensions */,
56754EAE1D9A4016007BCDC5 /* main.swift */,
6C6C34F423DB25BF00C0E9CB /* Model */,
F01B067F228221B6008E64DB /* Support */,
AA9D231226EE0B25007E22E7 /* Enums */,
28D1DDEB227FB8E9004CB494 /* Extensions */,
F01B0687228221B6008E64DB /* UI */,
F0445D3620023D5B0025AE82 /* View Controllers */,
);
@ -225,31 +221,35 @@
6C6C34F423DB25BF00C0E9CB /* Model */ = {
isa = PBXGroup;
children = (
F03A8DF11FFBAA6F0034DC27 /* ExternalDisplay.swift */,
6CBFE27923DB266000D1BC41 /* Display.swift */,
6CBFE27B23DB27A200D1BC41 /* InternalDisplay.swift */,
6CBFE27B23DB27A200D1BC41 /* AppleDisplay.swift */,
F03A8DF11FFBAA6F0034DC27 /* OtherDisplay.swift */,
);
path = Model;
sourceTree = "<group>";
};
6C85EFD622C74B0E00227EA1 /* Manager */ = {
AA9D231226EE0B25007E22E7 /* Enums */ = {
isa = PBXGroup;
children = (
6C85EFD922C941B000227EA1 /* DisplayManager.swift */,
AA473EB026DFF8DE0063A181 /* Command.swift */,
AA5314C326EBF5170041D178 /* PrefKey.swift */,
);
path = Manager;
path = Enums;
sourceTree = "<group>";
};
F01B067F228221B6008E64DB /* Support */ = {
isa = PBXGroup;
children = (
F01B0685228221B6008E64DB /* Bridging-Header.h */,
F01B0680228221B6008E64DB /* Localizable.strings */,
F01B0683228221B6008E64DB /* Utils.swift */,
FE4E0895249D584C003A50BB /* OSDUtils.swift */,
AA99521626FE25AB00612E07 /* AppDelegate.swift */,
AA99521826FE49A300612E07 /* MenuHandler.swift */,
F01B068F228221B7008E64DB /* SliderHandler.swift */,
6C85EFD922C941B000227EA1 /* DisplayManager.swift */,
AA25F6D626E68C160087F3A2 /* MediaKeyTapManager.swift */,
AA44E70627038F7F00E06865 /* KeyboardShortcutsManager.swift */,
AA16139A26BE772E00DCF027 /* Arm64DDC.swift */,
AA4398A826DD55DA00943F16 /* IntelDDC.swift */,
AA473EB026DFF8DE0063A181 /* Command.swift */,
FE4E0895249D584C003A50BB /* OSDUtils.swift */,
);
path = Support;
sourceTree = "<group>";
@ -257,9 +257,8 @@
F01B0687228221B6008E64DB /* UI */ = {
isa = PBXGroup;
children = (
F01B0680228221B6008E64DB /* Localizable.strings */,
6CDA0FCD26485A8300F52125 /* Main.storyboard */,
F01B0692228221B7008E64DB /* MainMenu.xib */,
F01B068F228221B7008E64DB /* SliderHandler.swift */,
);
path = UI;
sourceTree = "<group>";
@ -268,9 +267,11 @@
isa = PBXGroup;
children = (
F0445D3720023E710025AE82 /* MainPrefsViewController.swift */,
AA665A5C26C5892800FEF2C1 /* AboutPrefsViewController.swift */,
AA25F6CE26E680510087F3A2 /* MenuslidersPrefsViewController.swift */,
AA25F6D026E681D30087F3A2 /* KeyboardPrefsViewController.swift */,
AA062E8926C9A039007E628C /* DisplaysPrefsViewController.swift */,
AA062E8D26CA7BE5007E628C /* DisplaysPrefsCellView.swift */,
AA665A5C26C5892800FEF2C1 /* AboutPrefsViewController.swift */,
);
path = "View Controllers";
sourceTree = "<group>";
@ -309,6 +310,8 @@
6CD35F52264FFFC6001F1344 /* SimplyCoreAudio */,
6CD35F5526500008001F1344 /* MediaKeyTap */,
6CD35F5B2650003F001F1344 /* Preferences */,
AA44E702270377C200E06865 /* KeyboardShortcuts */,
AA70817B27046B9800CC5625 /* Sparkle */,
);
productName = MonitorControl.OSX;
productReference = 56754EAB1D9A4016007BCDC5 /* MonitorControl.app */;
@ -356,32 +359,34 @@
};
};
buildConfigurationList = 56754EA61D9A4016007BCDC5 /* Build configuration list for PBXProject "MonitorControl" */;
compatibilityVersion = "Xcode 3.2";
compatibilityVersion = "Xcode 13.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
fr,
hu,
de,
fr,
it,
"es-419",
ja,
ko,
nl,
pl,
ru,
tr,
uk,
"zh-Hans",
ru,
it,
ja,
pl,
hu,
tr,
"es-419",
"zh-Hant-TW",
nl,
ko,
);
mainGroup = 56754EA21D9A4016007BCDC5;
packageReferences = (
6CD35F51264FFFC6001F1344 /* XCRemoteSwiftPackageReference "SimplyCoreAudio" */,
6CD35F5426500008001F1344 /* XCRemoteSwiftPackageReference "MediaKeyTap" */,
6CD35F5A2650003F001F1344 /* XCRemoteSwiftPackageReference "Preferences" */,
AA44E701270377C200E06865 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */,
AA70817A27046B9800CC5625 /* XCRemoteSwiftPackageReference "Sparkle" */,
);
productRefGroup = 56754EAC1D9A4016007BCDC5 /* Products */;
projectDirPath = "";
@ -402,7 +407,6 @@
6CDA0FCF26485A8300F52125 /* Main.storyboard in Resources */,
AA3B4A2826AE103C00B74CD2 /* README.md in Resources */,
F01B0699228221B7008E64DB /* Localizable.strings in Resources */,
F01B06A1228221B7008E64DB /* MainMenu.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -419,7 +423,7 @@
/* Begin PBXShellScriptBuildPhase section */
28D1DE0C227FCFAF004CB494 /* [Format] Run SwiftFormat */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
buildActionMask = 12;
files = (
);
inputFileListPaths = (
@ -473,7 +477,7 @@
};
6CB1BDB2253C7EBE00B52124 /* [Localization] Run BartyCrouch */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
buildActionMask = 12;
files = (
);
inputFileListPaths = (
@ -510,26 +514,31 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
56754EAF1D9A4016007BCDC5 /* AppDelegate.swift in Sources */,
6C85EFE122CC00AD00227EA1 /* NSNotification+Extension.swift in Sources */,
AA5314C426EBF5170041D178 /* PrefKey.swift in Sources */,
56754EAF1D9A4016007BCDC5 /* main.swift in Sources */,
AA062E8A26C9A039007E628C /* DisplaysPrefsViewController.swift in Sources */,
AA473EB126DFF8DE0063A181 /* Command.swift in Sources */,
2894D9B82280B30500DF58DA /* CGDirectDisplayID+Extension.swift in Sources */,
6CC260F6256AD8F900613714 /* Preferences+Extension.swift in Sources */,
AA99521926FE49A300612E07 /* MenuHandler.swift in Sources */,
AA665A5D26C5892800FEF2C1 /* AboutPrefsViewController.swift in Sources */,
6CBFE27C23DB27A200D1BC41 /* InternalDisplay.swift in Sources */,
6CBFE27C23DB27A200D1BC41 /* AppleDisplay.swift in Sources */,
AA062E8E26CA7BE5007E628C /* DisplaysPrefsCellView.swift in Sources */,
AA25F6D726E68C160087F3A2 /* MediaKeyTapManager.swift in Sources */,
FE4E0896249D584C003A50BB /* OSDUtils.swift in Sources */,
6CBFE27A23DB266000D1BC41 /* Display.swift in Sources */,
F03A8DF21FFBAA6F0034DC27 /* ExternalDisplay.swift in Sources */,
6C20466C23153E4F00859767 /* Display+Extension.swift in Sources */,
AA44E70727038F7F00E06865 /* KeyboardShortcutsManager.swift in Sources */,
F03A8DF21FFBAA6F0034DC27 /* OtherDisplay.swift in Sources */,
AA44E7052703790100E06865 /* KeyboardShortcuts+Extension.swift in Sources */,
AA16139B26BE772E00DCF027 /* Arm64DDC.swift in Sources */,
F0445D3820023E710025AE82 /* MainPrefsViewController.swift in Sources */,
28D1DDF2227FBE71004CB494 /* NSScreen+Extension.swift in Sources */,
AA99521726FE25AB00612E07 /* AppDelegate.swift in Sources */,
AA25F6D126E681D30087F3A2 /* KeyboardPrefsViewController.swift in Sources */,
F01B069F228221B7008E64DB /* SliderHandler.swift in Sources */,
AACE5E2327050C63006C2A48 /* NSNotification+Extension.swift in Sources */,
AA25F6CF26E680510087F3A2 /* MenuslidersPrefsViewController.swift in Sources */,
AA4398A926DD55DA00943F16 /* IntelDDC.swift in Sources */,
6C85EFDA22C941B000227EA1 /* DisplayManager.swift in Sources */,
F01B069A228221B7008E64DB /* Utils.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -549,20 +558,20 @@
children = (
6CDA0FCE26485A8300F52125 /* Base */,
6CDA0FD026485AA100F52125 /* en */,
6CDA0FD126485AA300F52125 /* zh-Hans */,
6CDA0FD226485AA700F52125 /* fr */,
6CDA0FD326485AA900F52125 /* de */,
6CDA0FD426485AAA00F52125 /* it */,
6CDA0FD526485AAB00F52125 /* ja */,
6CDA0FD626485AAC00F52125 /* pl */,
6CDA0FD726485AAC00F52125 /* ru */,
6CDA0FD826485AAE00F52125 /* uk */,
AA6686F026B8172E00AF74A2 /* hu */,
44706EBA26D25F7100C82ECB /* tr */,
CE14313826D54C8C001883F8 /* es-419 */,
AA8B7A5426D6501D0005C4D9 /* zh-Hant-TW */,
6CBB437E26D80650009645CA /* nl */,
2F251E9C26E250E70051D007 /* ko */,
AA9CB6252704BB440086DC0E /* hu */,
AA9CB6272704C0530086DC0E /* de */,
AA9CB62A2704C0890086DC0E /* fr */,
AA9CB62D2704C0D70086DC0E /* it */,
AA9CB62F2704C1250086DC0E /* es-419 */,
AA9CB6312704C1440086DC0E /* ja */,
AA9CB6332704C14D0086DC0E /* ko */,
AA9CB6352704C16F0086DC0E /* nl */,
AA9CB6372704C17A0086DC0E /* pl */,
AA9CB6392704C1890086DC0E /* ru */,
AA9CB63B2704C1900086DC0E /* tr */,
AA9CB63D2704C1970086DC0E /* uk */,
AA9CB63F2704C1A40086DC0E /* zh-Hans */,
AA9CB6412704C1B80086DC0E /* zh-Hant-TW */,
);
name = Main.storyboard;
sourceTree = "<group>";
@ -570,48 +579,25 @@
F01B0680228221B6008E64DB /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
F01B0681228221B6008E64DB /* de */,
F01B0682228221B6008E64DB /* en */,
F01B0684228221B6008E64DB /* fr */,
1E7ECF3F22A4552400E4E701 /* uk */,
47A9F5A122ACAFBE00F649BB /* zh-Hans */,
B0C4810623357CE500053F91 /* ru */,
6CAD135023624CC1009BD53F /* it */,
3CCA5F972442EFF800B4DB84 /* ja */,
2EAA5B7F24BF9E9A00937821 /* pl */,
AA6686F226B8172E00AF74A2 /* hu */,
44706EBC26D25F7100C82ECB /* tr */,
CE14313A26D54C8C001883F8 /* es-419 */,
AA8B7A5626D6501D0005C4D9 /* zh-Hant-TW */,
6CBB438026D80651009645CA /* nl */,
2F251E9E26E250E70051D007 /* ko */,
AA9CB6262704BB440086DC0E /* hu */,
AA9CB6282704C0530086DC0E /* de */,
AA9CB62B2704C0890086DC0E /* fr */,
AA9CB62E2704C0D70086DC0E /* it */,
AA9CB6302704C1250086DC0E /* es-419 */,
AA9CB6322704C1440086DC0E /* ja */,
AA9CB6342704C14D0086DC0E /* ko */,
AA9CB6362704C16F0086DC0E /* nl */,
AA9CB6382704C17A0086DC0E /* pl */,
AA9CB63A2704C1890086DC0E /* ru */,
AA9CB63C2704C1900086DC0E /* tr */,
AA9CB63E2704C1970086DC0E /* uk */,
AA9CB6402704C1A40086DC0E /* zh-Hans */,
AA9CB6422704C1B80086DC0E /* zh-Hant-TW */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
F01B0692228221B7008E64DB /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
F01B0693228221B7008E64DB /* Base */,
F01B06A42282220D008E64DB /* de */,
F01B06A222822208008E64DB /* en */,
F01B06A32282220A008E64DB /* fr */,
1E7ECF4122A4553000E4E701 /* uk */,
47A9F5A022ACAFBE00F649BB /* zh-Hans */,
B0C4810823357CE500053F91 /* ru */,
6CAD134F23624CC1009BD53F /* it */,
3CCA5F962442EFF800B4DB84 /* ja */,
2EAA5B7E24BF9E9A00937821 /* pl */,
AA6686F126B8172E00AF74A2 /* hu */,
44706EBB26D25F7100C82ECB /* tr */,
CE14313926D54C8C001883F8 /* es-419 */,
AA8B7A5526D6501D0005C4D9 /* zh-Hant-TW */,
6CBB437F26D80650009645CA /* nl */,
2F251E9D26E250E70051D007 /* ko */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
@ -667,7 +653,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.12;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
@ -722,7 +708,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.12;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
@ -734,11 +720,11 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1179;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = CYC8C8R4K9;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(PROJECT_DIR)/**",
@ -749,8 +735,8 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MARKETING_VERSION = 3.1.1;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.0.0;
PRODUCT_BUNDLE_IDENTIFIER = me.guillaumeb.MonitorControl;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -769,11 +755,11 @@
buildSettings = {
ARCHS = "$(ARCHS_STANDARD)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1179;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = CYC8C8R4K9;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(PROJECT_DIR)/**",
@ -784,13 +770,13 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MARKETING_VERSION = 3.1.1;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.0.0;
PRODUCT_BUNDLE_IDENTIFIER = me.guillaumeb.MonitorControl;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "MonitorControl/Support/Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
SYSTEM_FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@ -807,11 +793,11 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = MonitorControlHelper/MonitorControlHelper.entitlements;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 631;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = CYC8C8R4K9;
ENABLE_HARDENED_RUNTIME = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = MonitorControlHelper/Info.plist;
@ -819,8 +805,8 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MARKETING_VERSION = 3.1.1;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.0.0;
PRODUCT_BUNDLE_IDENTIFIER = me.guillaumeb.MonitorControlHelper;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@ -836,11 +822,11 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = MonitorControlHelper/MonitorControlHelper.entitlements;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 631;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = CYC8C8R4K9;
ENABLE_HARDENED_RUNTIME = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = MonitorControlHelper/Info.plist;
@ -848,8 +834,8 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.14;
MARKETING_VERSION = 3.1.1;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.0.0;
PRODUCT_BUNDLE_IDENTIFIER = me.guillaumeb.MonitorControlHelper;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@ -914,6 +900,22 @@
minimumVersion = 2.3.0;
};
};
AA44E701270377C200E06865 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/sindresorhus/KeyboardShortcuts";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.0.0;
};
};
AA70817A27046B9800CC5625 /* XCRemoteSwiftPackageReference "Sparkle" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/sparkle-project/Sparkle";
requirement = {
branch = 2.x;
kind = branch;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
@ -932,6 +934,16 @@
package = 6CD35F5A2650003F001F1344 /* XCRemoteSwiftPackageReference "Preferences" */;
productName = Preferences;
};
AA44E702270377C200E06865 /* KeyboardShortcuts */ = {
isa = XCSwiftPackageProductDependency;
package = AA44E701270377C200E06865 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */;
productName = KeyboardShortcuts;
};
AA70817B27046B9800CC5625 /* Sparkle */ = {
isa = XCSwiftPackageProductDependency;
package = AA70817A27046B9800CC5625 /* XCRemoteSwiftPackageReference "Sparkle" */;
productName = Sparkle;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 56754EA31D9A4016007BCDC5 /* Project object */;

View file

@ -1,487 +0,0 @@
import Cocoa
import Foundation
import MediaKeyTap
import os.log
import Preferences
import SimplyCoreAudio
var app: AppDelegate!
let prefs = UserDefaults.standard
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet var statusMenu: NSMenu!
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
var monitorItems: [NSMenuItem] = []
var mediaKeyTap: MediaKeyTap?
var keyRepeatTimers: [MediaKey: Timer] = [:]
let coreAudio = SimplyCoreAudio()
var accessibilityObserver: NSObjectProtocol!
var reconfigureID: Int = 0 // dispatched reconfigure command ID
var sleepID: Int = 0 // Don't reconfigure display as the system or display is sleeping or wake just recently.
var safeMode = false // Safe mode engaged during startup?
let debugSw: Bool = false
lazy var preferencesWindowController: PreferencesWindowController = {
let storyboard = NSStoryboard(name: "Main", bundle: Bundle.main)
let mainPrefsVc = storyboard.instantiateController(withIdentifier: "MainPrefsVC") as? MainPrefsViewController
let displaysPrefsVc = storyboard.instantiateController(withIdentifier: "DisplaysPrefsVC") as? DisplaysPrefsViewController
let aboutPrefsVc = storyboard.instantiateController(withIdentifier: "AboutPrefsVC") as? AboutPrefsViewController
return PreferencesWindowController(
preferencePanes: [
mainPrefsVc!,
displaysPrefsVc!,
aboutPrefsVc!,
],
animated: true
)
}()
func applicationDidFinishLaunching(_: Notification) {
app = self
self.subscribeEventListeners()
if NSEvent.modifierFlags.contains(NSEvent.ModifierFlags.shift) {
self.safeMode = true
self.handlePreferenceReset()
Utils.alert(text: NSLocalizedString("Safe Mode Activated", comment: "Shown in the alert dialog"), info: NSLocalizedString("Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.", comment: "Shown in the alert dialog"))
}
self.setDefaultPrefs()
if #available(macOS 11.0, *) {
self.statusItem.button?.image = NSImage(systemSymbolName: "sun.max", accessibilityDescription: "MonitorControl")
} else {
self.statusItem.button?.image = NSImage(named: "status")
}
self.statusItem.isVisible = prefs.bool(forKey: Utils.PrefKeys.hideMenuIcon.rawValue) ? false : true
self.statusItem.menu = self.statusMenu
self.checkPermissions()
CGDisplayRegisterReconfigurationCallback({ _, _, _ in app.displayReconfigured() }, nil)
MediaKeyTap.useAlternateBrightnessKeys = prefs.bool(forKey: Utils.PrefKeys.altBrightnessKeys.rawValue)
self.updateDisplays(firstrun: true)
}
func applicationShouldHandleReopen(_: NSApplication, hasVisibleWindows _: Bool) -> Bool {
self.prefsClicked(self)
return true
}
func applicationWillTerminate(_: Notification) {
os_log("Goodbye!", type: .info)
DisplayManager.shared.resetSwBrightnessForAllDisplays()
self.statusItem.isVisible = true
}
@IBAction func quitClicked(_: AnyObject) {
NSApplication.shared.terminate(self)
}
@IBAction func prefsClicked(_: AnyObject) {
self.preferencesWindowController.show()
}
func setDefaultPrefs() {
if !prefs.bool(forKey: Utils.PrefKeys.appAlreadyLaunched.rawValue) {
prefs.set(true, forKey: Utils.PrefKeys.appAlreadyLaunched.rawValue)
prefs.set(false, forKey: Utils.PrefKeys.showContrast.rawValue)
prefs.set(true, forKey: Utils.PrefKeys.showVolume.rawValue)
prefs.set(false, forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue)
prefs.set(true, forKey: Utils.PrefKeys.fallbackSw.rawValue)
prefs.set(false, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
prefs.set(false, forKey: Utils.PrefKeys.showAdvancedDisplays.rawValue)
prefs.set(true, forKey: Utils.PrefKeys.altBrightnessKeys.rawValue)
}
}
func clearMenu() {
if self.statusMenu.items.count > 2 {
var items: [NSMenuItem] = []
for i in 0 ..< self.statusMenu.items.count - 2 {
items.append(self.statusMenu.items[i])
}
for item in items {
self.statusMenu.removeItem(item)
}
}
self.monitorItems = []
}
func updateArm64AVServices() {
if Arm64DDC.isArm64 {
os_log("arm64 AVService update requested", type: .info)
var displayIDs: [CGDirectDisplayID] = []
for externalDisplay in DisplayManager.shared.getExternalDisplays() {
displayIDs.append(externalDisplay.identifier)
}
for serviceMatch in Arm64DDC.getServiceMatches(displayIDs: displayIDs) {
for externalDisplay in DisplayManager.shared.getExternalDisplays() where externalDisplay.identifier == serviceMatch.displayID && serviceMatch.service != nil {
externalDisplay.arm64avService = serviceMatch.service
os_log("Display service match successful for display %{public}@", type: .info, String(serviceMatch.displayID))
if !serviceMatch.isDiscouraged {
externalDisplay.arm64ddc = !debugSw ? true : false // MARK: (point of interest when testing)
}
}
}
os_log("AVService update done", type: .info)
}
}
func displayReconfigured() {
self.reconfigureID += 1
os_log("Bumping reconfigureID to %{public}@", type: .info, String(self.reconfigureID))
if self.sleepID == 0 {
let dispatchedReconfigureID = self.reconfigureID
os_log("Display to be reconfigured with reconfigureID %{public}@", type: .info, String(dispatchedReconfigureID))
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.updateDisplays(dispatchedReconfigureID: dispatchedReconfigureID)
}
}
}
func updateMenus() {
self.clearMenu()
var controllableExternalDisplays: [ExternalDisplay] = []
if prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) {
controllableExternalDisplays = DisplayManager.shared.getNonVirtualExternalDisplays()
} else {
controllableExternalDisplays = DisplayManager.shared.getDdcCapableDisplays()
}
if controllableExternalDisplays.count == 0 {
let item = NSMenuItem()
item.title = NSLocalizedString("No supported display found", comment: "Shown in menu")
item.isEnabled = false
self.monitorItems.append(item)
self.statusMenu.insertItem(item, at: 0)
self.statusMenu.insertItem(NSMenuItem.separator(), at: 1)
} else {
for display in controllableExternalDisplays {
os_log("Supported display found: %{public}@", type: .info, "\(display.name) (Vendor: \(display.vendorNumber ?? 0), Model: \(display.modelNumber ?? 0))")
let asSubmenu: Bool = controllableExternalDisplays.count > 2 ? true : false
if asSubmenu {
self.statusMenu.insertItem(NSMenuItem.separator(), at: 0)
}
self.addDisplayToMenu(display: display, asSubMenu: asSubmenu)
}
}
}
func updateDisplays(dispatchedReconfigureID: Int = 0, firstrun: Bool = false) {
guard self.sleepID == 0, dispatchedReconfigureID == self.reconfigureID else {
return
}
os_log("Request for updateDisplay with reconfigreID %{public}@", type: .info, String(dispatchedReconfigureID))
self.reconfigureID = 0
DisplayManager.shared.clearDisplays()
var onlineDisplayIDs = [CGDirectDisplayID](repeating: 0, count: 16)
var displayCount: UInt32 = 0
guard CGGetOnlineDisplayList(10, &onlineDisplayIDs, &displayCount) == .success else {
os_log("Unable to get display list.", type: .info)
return
}
for onlineDisplayID in onlineDisplayIDs where onlineDisplayID != 0 {
let name = DisplayManager.shared.getDisplayNameByID(displayID: onlineDisplayID)
let id = onlineDisplayID
let vendorNumber = CGDisplayVendorNumber(onlineDisplayID)
let modelNumber = CGDisplayVendorNumber(onlineDisplayID)
let display: Display
var isVirtual: Bool = false
if #available(macOS 11.0, *) {
if let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(onlineDisplayID))?.takeRetainedValue() as NSDictionary?) {
let isVirtualDevice = dictionary["kCGDisplayIsVirtualDevice"] as? Bool
let displayIsAirplay = dictionary["kCGDisplayIsAirPlay"] as? Bool
if isVirtualDevice ?? displayIsAirplay ?? false {
isVirtual = true
}
}
}
if !debugSw, CGDisplayIsBuiltin(onlineDisplayID) != 0 { // MARK: (point of interest for testing)
display = InternalDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
} else {
display = ExternalDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
}
DisplayManager.shared.addDisplay(display: display)
}
self.updateArm64AVServices()
if firstrun {
DisplayManager.shared.resetSwBrightnessForAllDisplays(settingsOnly: true)
}
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.displayListUpdate.rawValue), object: nil)
self.updateMenus()
if !firstrun {
if prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) || prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
DisplayManager.shared.restoreSwBrightnessForAllDisplays(async: true)
}
}
updateMediaKeyTap()
}
private func addDisplayToMenu(display: ExternalDisplay, asSubMenu: Bool) {
if !asSubMenu {
self.statusMenu.insertItem(NSMenuItem.separator(), at: 0)
}
let monitorSubMenu: NSMenu = asSubMenu ? NSMenu() : self.statusMenu
if !display.isSw() {
if prefs.bool(forKey: Utils.PrefKeys.showVolume.rawValue) {
let volumeSliderHandler = SliderHandler.addSliderMenuItem(toMenu: monitorSubMenu, forDisplay: display, command: .audioSpeakerVolume, title: NSLocalizedString("Volume", comment: "Shown in menu"))
display.volumeSliderHandler = volumeSliderHandler
}
if prefs.bool(forKey: Utils.PrefKeys.showContrast.rawValue) {
let contrastSliderHandler = SliderHandler.addSliderMenuItem(toMenu: monitorSubMenu, forDisplay: display, command: .contrast, title: NSLocalizedString("Contrast", comment: "Shown in menu"))
display.contrastSliderHandler = contrastSliderHandler
}
}
var numOfTickMarks = 0
if !display.isSw(), prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
numOfTickMarks = 0 // 1 - I disabled this because tickmarks are buggy in dark mode on Monterey (probably Big Sur as well).
}
let brightnessSliderHandler = SliderHandler.addSliderMenuItem(toMenu: monitorSubMenu, forDisplay: display, command: .brightness, title: NSLocalizedString("Brightness", comment: "Shown in menu"), numOfTickMarks: numOfTickMarks)
display.brightnessSliderHandler = brightnessSliderHandler
let monitorMenuItem = NSMenuItem()
if asSubMenu {
monitorMenuItem.title = "\(display.getFriendlyName())"
monitorMenuItem.submenu = monitorSubMenu
} else {
let attrs: [NSAttributedString.Key: Any] = [.foregroundColor: NSColor.systemGray, .font: NSFont.boldSystemFont(ofSize: 12)]
monitorMenuItem.attributedTitle = NSAttributedString(string: "\(display.getFriendlyName())", attributes: attrs)
}
self.monitorItems.append(monitorMenuItem)
self.statusMenu.insertItem(monitorMenuItem, at: 0)
}
private func checkPermissions() {
let permissionsRequired: Bool = prefs.integer(forKey: Utils.PrefKeys.listenFor.rawValue) != Utils.ListenForKeys.none.rawValue
if !Utils.readPrivileges(prompt: false) && permissionsRequired {
Utils.acquirePrivileges()
}
}
private func subscribeEventListeners() {
NotificationCenter.default.addObserver(self, selector: #selector(handleListenForChanged), name: .listenFor, object: nil) // subscribe KeyTap event listeners
NotificationCenter.default.addObserver(self, selector: #selector(handleFriendlyNameChanged), name: .friendlyName, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handlePreferenceReset), name: .preferenceReset, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(audioDeviceChanged), name: Notification.Name.defaultOutputDeviceChanged, object: nil) // subscribe Audio output detector (SimplyCoreAudio)
DistributedNotificationCenter.default.addObserver(self, selector: #selector(colorSyncSettingsChanged), name: NSNotification.Name(rawValue: kColorSyncDisplayDeviceProfilesNotification.takeRetainedValue() as String), object: nil) // ColorSync change
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.sleepNotification), name: NSWorkspace.screensDidSleepNotification, object: nil) // sleep and wake listeners
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeNotofication), name: NSWorkspace.screensDidWakeNotification, object: nil)
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.sleepNotification), name: NSWorkspace.willSleepNotification, object: nil)
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeNotofication), name: NSWorkspace.didWakeNotification, object: nil)
_ = DistributedNotificationCenter.default().addObserver(forName: .accessibilityApi, object: nil, queue: nil) { _ in DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.updateMediaKeyTap() } } // listen for accessibility status changes
}
@objc private func sleepNotification() {
self.sleepID += 1
os_log("Sleeping with sleep %{public}@", type: .info, String(self.sleepID))
}
@objc private func wakeNotofication() {
if self.sleepID != 0 {
os_log("Waking up from sleep %{public}@", type: .info, String(self.sleepID))
let dispatchedSleepID = self.sleepID
DispatchQueue.main.asyncAfter(deadline: .now() + 6.0) { // Some displays take time to recover...
self.soberNow(dispatchedSleepID: dispatchedSleepID)
}
}
}
private func soberNow(dispatchedSleepID: Int) {
if self.sleepID == dispatchedSleepID {
os_log("Sober from sleep %{public}@", type: .info, String(self.sleepID))
self.sleepID = 0
if self.reconfigureID != 0 {
let dispatchedReconfigureID = self.reconfigureID
os_log("Display needs reconfig after sober with reconfigureID %{public}@", type: .info, String(dispatchedReconfigureID))
self.updateDisplays(dispatchedReconfigureID: dispatchedReconfigureID)
} else if Arm64DDC.isArm64 {
os_log("Displays don't need reconfig after sober but might need AVServices update", type: .info)
self.updateArm64AVServices()
}
}
}
private func oppositeMediaKey(mediaKey: MediaKey) -> MediaKey? {
if mediaKey == .brightnessUp {
return .brightnessDown
} else if mediaKey == .brightnessDown {
return .brightnessUp
} else if mediaKey == .volumeUp {
return .volumeDown
} else if mediaKey == .volumeDown {
return .volumeUp
}
return nil
}
func handleOpenPrefPane(mediaKey: MediaKey, event: KeyEvent?, modifiers: NSEvent.ModifierFlags?) -> Bool {
guard let modifiers = modifiers else { return false }
if !(modifiers.contains(.option) && !modifiers.contains(.shift)) {
return false
}
if event?.keyRepeat == true {
return false
}
switch mediaKey {
case .brightnessUp, .brightnessDown:
NSWorkspace.shared.open(URL(fileURLWithPath: "/System/Library/PreferencePanes/Displays.prefPane"))
case .mute, .volumeUp, .volumeDown:
NSWorkspace.shared.open(URL(fileURLWithPath: "/System/Library/PreferencePanes/Sound.prefPane"))
default:
return false
}
return true
}
}
extension AppDelegate: MediaKeyTapDelegate {
func handle(mediaKey: MediaKey, event: KeyEvent?, modifiers: NSEvent.ModifierFlags?) {
guard self.sleepID == 0, self.reconfigureID == 0 else {
if [.brightnessUp, .brightnessDown].contains(mediaKey) {
OSDUtils.showOSDLockOnAllDisplays(osdImage: 1)
}
if [.volumeUp, .volumeDown, .mute].contains(mediaKey) {
OSDUtils.showOSDLockOnAllDisplays(osdImage: 3)
}
return
}
let isPressed = event?.keyPressed ?? true
let isRepeat = event?.keyRepeat ?? false
if isPressed, self.handleOpenPrefPane(mediaKey: mediaKey, event: event, modifiers: modifiers) {
return
}
let isSmallIncrement = modifiers?.isSuperset(of: NSEvent.ModifierFlags([.shift, .option])) ?? false
// control internal display when holding ctrl modifier
let isControlModifier = modifiers?.isSuperset(of: NSEvent.ModifierFlags([.control])) ?? false
if isControlModifier, mediaKey == .brightnessUp || mediaKey == .brightnessDown {
if isPressed, let internalDisplay = DisplayManager.shared.getBuiltInDisplay() as? InternalDisplay {
internalDisplay.stepBrightness(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
return
}
}
let oppositeKey: MediaKey? = self.oppositeMediaKey(mediaKey: mediaKey)
// If the opposite key to the one being held has an active timer, cancel it - we'll be going in the opposite direction
if let oppositeKey = oppositeKey, let oppositeKeyTimer = self.keyRepeatTimers[oppositeKey], oppositeKeyTimer.isValid {
oppositeKeyTimer.invalidate()
} else if let mediaKeyTimer = self.keyRepeatTimers[mediaKey], mediaKeyTimer.isValid {
// If there's already an active timer for the key being held down, let it run rather than executing it again
if isRepeat {
return
}
mediaKeyTimer.invalidate()
}
self.sendDisplayCommand(mediaKey: mediaKey, isRepeat: isRepeat, isSmallIncrement: isSmallIncrement, isPressed: isPressed)
}
private func sendDisplayCommand(mediaKey: MediaKey, isRepeat: Bool, isSmallIncrement: Bool, isPressed: Bool) {
guard self.sleepID == 0, self.reconfigureID == 0, let affectedDisplays = DisplayManager.shared.getAffectedDisplays() else {
return
}
var wasNotIsPressedVolumeSentAlready = false
for display in affectedDisplays where display.isEnabled && !display.isVirtual {
switch mediaKey {
case .brightnessUp:
var isAnyDisplayInSwAfterBrightnessMode: Bool = false
for display in affectedDisplays where ((display as? ExternalDisplay)?.isSwBrightnessNotDefault() ?? false) && !((display as? ExternalDisplay)?.isSw() ?? false) {
isAnyDisplayInSwAfterBrightnessMode = true
}
if isPressed, !(isAnyDisplayInSwAfterBrightnessMode && !(((display as? ExternalDisplay)?.isSwBrightnessNotDefault() ?? false) && !((display as? ExternalDisplay)?.isSw() ?? false))) {
display.stepBrightness(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
}
case .brightnessDown:
if isPressed {
display.stepBrightness(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
}
case .mute:
// The mute key should not respond to press + hold or keyup
if !isRepeat, isPressed {
// mute only matters for external displays
if let display = display as? ExternalDisplay {
display.toggleMute()
}
}
case .volumeUp, .volumeDown:
// volume only matters for external displays
if let display = display as? ExternalDisplay {
if isPressed || !wasNotIsPressedVolumeSentAlready {
display.stepVolume(isUp: mediaKey == .volumeUp, isSmallIncrement: isSmallIncrement, isPressed: isPressed)
}
wasNotIsPressedVolumeSentAlready = true
}
default:
return
}
}
}
@objc func handleListenForChanged() {
self.checkPermissions()
self.updateMediaKeyTap()
}
@objc func handleFriendlyNameChanged() {
self.updateMenus()
}
@objc func handlePreferenceReset() {
os_log("Resetting all preferences.")
if prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) || prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
DisplayManager.shared.resetSwBrightnessForAllDisplays()
}
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
app.statusItem.isVisible = true
self.setDefaultPrefs()
self.checkPermissions()
self.updateMediaKeyTap()
self.updateDisplays(firstrun: true)
}
private func updateMediaKeyTap() {
var keys: [MediaKey]
switch prefs.integer(forKey: Utils.PrefKeys.listenFor.rawValue) {
case Utils.ListenForKeys.brightnessOnlyKeys.rawValue:
keys = [.brightnessUp, .brightnessDown]
case Utils.ListenForKeys.volumeOnlyKeys.rawValue:
keys = [.mute, .volumeUp, .volumeDown]
case Utils.ListenForKeys.none.rawValue:
keys = []
default:
keys = [.brightnessUp, .brightnessDown, .mute, .volumeUp, .volumeDown]
}
// Remove keys if no external displays are connected
var isInternalDisplayOnly = true
for display in DisplayManager.shared.getAllDisplays() where display is ExternalDisplay {
isInternalDisplayOnly = false
}
if isInternalDisplayOnly {
let keysToDelete: [MediaKey] = [.volumeUp, .volumeDown, .mute, .brightnessUp, .brightnessDown]
keys.removeAll { keysToDelete.contains($0) }
}
// Remove volume related keys if audio device is controllable
if self.coreAudio.defaultOutputDevice?.canSetVirtualMasterVolume(scope: .output) == true {
let keysToDelete: [MediaKey] = [.volumeUp, .volumeDown, .mute]
keys.removeAll { keysToDelete.contains($0) }
}
self.mediaKeyTap?.stop()
// returning an empty array listens for all mediakeys in MediaKeyTap
if keys.count > 0 {
self.mediaKeyTap = MediaKeyTap(delegate: self, on: KeyPressMode.keyDownAndUp, for: keys, observeBuiltIn: true)
self.mediaKeyTap?.start()
}
}
@objc private func audioDeviceChanged() {
#if DEBUG
if let defaultDevice = self.coreAudio.defaultOutputDevice {
os_log("Default output device changed to “%{public}@”.", type: .info, defaultDevice.name)
os_log("Can device set its own volume? %{public}@", type: .info, defaultDevice.canSetVirtualMasterVolume(scope: .output).description)
}
#endif
self.updateMediaKeyTap()
}
@objc private func colorSyncSettingsChanged() {
CGDisplayRestoreColorSyncSettings()
self.displayReconfigured()
}
}

View file

@ -1,4 +1,8 @@
public enum Command: UInt8 {
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
enum Command: UInt8 {
case none = 0
// Display Control
case horizontalFrequency = 0xAC
case verticalFrequency = 0xAE

View file

@ -0,0 +1,187 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
enum PrefKey: String {
// Enable mute DDC for display
case enableMuteUnmute
// Sparkle automatic checks
case SUEnableAutomaticChecks
// Hide OSD for display
case hideOsd
// Longer delay DDC for display
case longerDelay
// DDC polling mode for display
case pollingMode
// DDC polling count for display
case pollingCount
// Command value display
case value
// Min command value display
case minDDCOverride
// Max command value display
case maxDDC
// Max user override command value display
case maxDDCOverride
// Max command value display
case curveDDC
// Is the specific control is set as unavailable for display?
case unavailableDDC
// Invert DDC scale?
case invertDDC
// Override DDC control command code
case remapDDC
// User assigned audio device name for display
case audioDeviceNameOverride
// Display disabled for keyboard control
case isDisabled
// Force software mode for display
case forceSw
// Software brightness for display
case SwBrightness
// Build number
case buildNumber
// Was the app launched once
case appAlreadyLaunched
// Hide menu icon
case menuIcon
// Menu item style
case menuItemStyle
// Keys listened for
case keyboardBrightness
// Keys listened for
case keyboardVolume
// Don't listen to F14/F15
case disableAltBrightnessKeys
// Hide brightness sliders
case hideBrightness
// Show volume sliders
case showContrast
// Show volume sliders
case hideVolume
// Lower via software after brightness
case disableCombinedBrightness
// Lower via software after brightness
case combinedBrightnessSwitchingPoint
// Use separated OSD scale for combined brightness
case separateCombinedScale
// Fallback to software control for other displays with no DDC
case disableSoftwareFallback
// Do not show sliders for Apple displays (including built-in display) in menu
case hideAppleFromMenu
// Disable slider snapping
case enableSliderSnap
// Disable slider snapping
case enableSliderPercent
// Show tick marks for sliders
case showTickMarks
// Friendly name changed
case friendlyName
// Instead of assuming default values, enable read or write upon startup (according to readDDCInsteadOfRestoreValues)
case enableDDCDuringStartup
// Restore last saved values upon startup or wake
case readDDCInsteadOfRestoreValues
// Show advanced options under Displays tab in Preferences
case showAdvancedSettings
// Change Brightness for all screens
case allScreensBrightness
// Use focus instead of mouse position to determine which display to control for brightness
case useFocusInsteadOfMouse
// Change Volume for all screens
case allScreensVolume
// Use audio device name matching to determine display to control for volume
case useAudioDeviceNameMatching
// Use fine OSD scale for brightness
case useFineScaleBrightness
// Use fine OSD scale for volume
case useFineScaleVolume
// Use smoothBrightness
case disableSmoothBrightness
// Synchronize brightness from sync source displays among all other displays
case enableBrightnessSync
// Show only relevant slider for menu (depending on which display shows the menu)
case slidersRelevant
// Combine sliders for all displays
case slidersCombine
}
enum PollingMode: Int {
case none = -2
case minimal = -1
case normal = 0
case heavy = 1
case custom = 2
}
enum MenuIcon: Int {
case show = 0
case sliderOnly = 1
case hide = 2
}
enum MenuItemStyle: Int {
case text = 0
case icon = 1
case hide = 2
}
enum KeyboardBrightness: Int {
case media = 0
case custom = 1
case both = 2
case disabled = 3
}
enum KeyboardVolume: Int {
case media = 0
case custom = 1
case both = 2
case disabled = 3
}

View file

@ -1,3 +1,5 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
public extension CGDirectDisplayID {

View file

@ -1,7 +0,0 @@
import Foundation
extension Display: Equatable {
static func == (lhs: Display, rhs: Display) -> Bool {
return lhs.identifier == rhs.identifier
}
}

View file

@ -0,0 +1,15 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import KeyboardShortcuts
extension KeyboardShortcuts.Name {
static let brightnessUp = Self("brightnessUp")
static let brightnessDown = Self("brightnessDown")
static let contrastUp = Self("contrastUp")
static let contrastDown = Self("contrastDown")
static let volumeUp = Self("volumeUp")
static let volumeDown = Self("volumeDown")
static let mute = Self("mute")
static let none = Self("none")
}

View file

@ -2,8 +2,4 @@ import Cocoa
extension NSNotification.Name {
static let accessibilityApi = NSNotification.Name(rawValue: "com.apple.accessibility.api")
static let listenFor = NSNotification.Name(rawValue: Utils.PrefKeys.listenFor.rawValue)
static let friendlyName = NSNotification.Name(rawValue: Utils.PrefKeys.friendlyName.rawValue)
static let preferenceReset = NSNotification.Name(rawValue: Utils.PrefKeys.preferenceReset.rawValue)
static let displayListUpdate = NSNotification.Name(rawValue: Utils.PrefKeys.displayListUpdate.rawValue)
}

View file

@ -1,3 +1,5 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
public extension NSScreen {
@ -6,7 +8,7 @@ public extension NSScreen {
}
var vendorNumber: UInt32? {
switch self.displayID.vendorNumber {
switch CGDisplayVendorNumber(self.displayID) {
case 0xFFFF_FFFF:
return nil
case let vendorNumber:
@ -15,7 +17,7 @@ public extension NSScreen {
}
var modelNumber: UInt32? {
switch self.displayID.modelNumber {
switch CGDisplayModelNumber(self.displayID) {
case 0xFFFF_FFFF:
return nil
case let modelNumber:
@ -24,7 +26,7 @@ public extension NSScreen {
}
var serialNumber: UInt32? {
switch self.displayID.serialNumber {
switch CGDisplaySerialNumber(self.displayID) {
case 0x0000_0000:
return nil
case let serialNumber:
@ -56,12 +58,4 @@ public extension NSScreen {
return nil
}
var isBuiltin: Bool {
return CGDisplayIsBuiltin(self.displayID) != 0
}
static func getByDisplayID(displayID: CGDirectDisplayID) -> NSScreen? {
return NSScreen.screens.first { $0.displayID == displayID }
}
}

View file

@ -1,15 +1,11 @@
//
// Preferences+Extension.swift
// MonitorControl
//
// Created by Joni Van Roost on 22/11/2020.
// Copyright © 2020 MonitorControl. All rights reserved.
//
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Preferences
extension Preferences.PaneIdentifier {
static let main = Self("Main")
static let menusliders = Self("Menu & Sliders")
static let keyboard = Self("Keyboard")
static let displays = Self("Displays")
static let about = Self("About")
}

View file

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>3103</string>
<string>6293</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
@ -28,9 +28,11 @@
<true/>
<key>NSHumanReadableCopyright</key>
<string>MIT Licensed. 2017.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>SUFeedURL</key>
<string>https://monitorcontrol.app/appcast.xml</string>
<key>SUPublicEDKey</key>
<string>KuISgz+2n2/qnP/Rom5nWYAp+Pru+U3UtnAlnUjj6Pw=</string>
</dict>
</plist>

View file

@ -1,173 +0,0 @@
import Cocoa
class DisplayManager {
public static let shared = DisplayManager()
private var displays: [Display]
init() {
self.displays = []
}
func updateDisplays(displays: [Display]) {
self.displays = displays
}
func getExternalDisplays() -> [ExternalDisplay] {
return self.displays.compactMap { $0 as? ExternalDisplay }
}
func getAllDisplays() -> [Display] {
return self.displays
}
func getAllNonVirtualDisplays() -> [Display] {
return self.displays.compactMap { display -> Display? in
if !display.isVirtual {
return display
} else { return nil }
}
}
func getDdcCapableDisplays() -> [ExternalDisplay] {
return self.displays.compactMap { display -> ExternalDisplay? in
if let externalDisplay = display as? ExternalDisplay, !externalDisplay.isSw(), !externalDisplay.isVirtual {
return externalDisplay
} else { return nil }
}
}
func getNonVirtualExternalDisplays() -> [ExternalDisplay] {
return self.displays.compactMap { display -> ExternalDisplay? in
if let externalDisplay = display as? ExternalDisplay, !externalDisplay.isVirtual {
return externalDisplay
} else { return nil }
}
}
func getBuiltInDisplay() -> Display? {
return self.displays.first { $0 is InternalDisplay }
}
func getCurrentDisplay() -> Display? {
let mouseLocation = NSEvent.mouseLocation
let screens = NSScreen.screens
if let screenWithMouse = (screens.first { NSMouseInRect(mouseLocation, $0.frame, false) }) {
return self.displays.first { $0.identifier == screenWithMouse.displayID }
}
return nil
}
func addDisplay(display: Display) {
self.displays.append(display)
}
func updateDisplay(display updatedDisplay: Display) {
if let indexToUpdate = self.displays.firstIndex(of: updatedDisplay) {
self.displays[indexToUpdate] = updatedDisplay
}
}
func clearDisplays() {
self.displays = []
}
func resetSwBrightnessForAllDisplays(settingsOnly: Bool = false, async: Bool = false) {
for externalDisplay in self.getNonVirtualExternalDisplays() {
if !settingsOnly {
_ = externalDisplay.setSwBrightness(value: externalDisplay.getSwMaxBrightness(), smooth: async)
} else {
externalDisplay.saveSwBirghtnessPrefValue(Int(externalDisplay.getSwMaxBrightness()))
}
if externalDisplay.isSw() {
externalDisplay.saveValue(Int(externalDisplay.getSwMaxBrightness()), for: .brightness)
}
}
}
func setBrightnessSliderValue(externalDisplay: ExternalDisplay, value: Int32) {
if let slider = externalDisplay.brightnessSliderHandler?.slider {
slider.intValue = value
}
}
func getBrightnessSliderMaxValue(externalDisplay: ExternalDisplay) -> Double {
if let slider = externalDisplay.brightnessSliderHandler?.slider {
return slider.maxValue
}
return 0
}
func restoreSwBrightnessForAllDisplays(async: Bool = false) {
for externalDisplay in self.getExternalDisplays() {
let sliderMax = self.getBrightnessSliderMaxValue(externalDisplay: externalDisplay)
if externalDisplay.getValue(for: .brightness) == 0 || externalDisplay.isSw() {
let savedPrefValue = externalDisplay.getSwBrightnessPrefValue()
if externalDisplay.getSwBrightness() != savedPrefValue {
if let manager = OSDManager.sharedManager() as? OSDManager { // This will give the user a hint why is the brightness suddenly changes and also give screen activity to counter the 'no gamma change when there is no screen activity' issue on some macs
manager.showImage(OSDImage.brightness.rawValue, onDisplayID: externalDisplay.identifier, priority: 0x1F4, msecUntilFade: 0)
}
}
externalDisplay.saveSwBirghtnessPrefValue(Int(externalDisplay.getSwBrightness()))
_ = externalDisplay.setSwBrightness(value: UInt8(savedPrefValue), smooth: async)
if !externalDisplay.isSw(), prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
if savedPrefValue < externalDisplay.getSwMaxBrightness() {
self.setBrightnessSliderValue(externalDisplay: externalDisplay, value: Int32(Float(sliderMax / 2) * (Float(savedPrefValue) / Float(externalDisplay.getSwMaxBrightness()))))
} else {
self.setBrightnessSliderValue(externalDisplay: externalDisplay, value: Int32(sliderMax / 2) + Int32(externalDisplay.getValue(for: .brightness)))
}
} else if externalDisplay.isSw() {
self.setBrightnessSliderValue(externalDisplay: externalDisplay, value: Int32(Float(sliderMax) * (Float(savedPrefValue) / Float(externalDisplay.getSwMaxBrightness()))))
}
} else {
_ = externalDisplay.setSwBrightness(value: externalDisplay.getSwMaxBrightness())
if externalDisplay.isSw() {
self.setBrightnessSliderValue(externalDisplay: externalDisplay, value: Int32(sliderMax))
}
}
}
}
func getDisplayNameByID(displayID: CGDirectDisplayID) -> String {
let defaultName: String = NSLocalizedString("Unknown", comment: "Unknown display name")
if #available(macOS 11.0, *) {
if let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(displayID))?.takeRetainedValue() as NSDictionary?), let nameList = dictionary["DisplayProductName"] as? [String: String], var name = nameList[Locale.current.identifier] ?? nameList["en_US"] ?? nameList.first?.value {
if CGDisplayIsInHWMirrorSet(displayID) != 0 || CGDisplayIsInMirrorSet(displayID) != 0 {
let mirroredDisplayID = CGDisplayMirrorsDisplay(displayID)
if mirroredDisplayID != 0, let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(mirroredDisplayID))?.takeRetainedValue() as NSDictionary?), let nameList = dictionary["DisplayProductName"] as? [String: String], let mirroredName = nameList[Locale.current.identifier] ?? nameList["en_US"] ?? nameList.first?.value {
name.append("~" + mirroredName)
}
}
return name
}
}
if let screen = NSScreen.getByDisplayID(displayID: displayID) {
if #available(OSX 10.15, *) {
return screen.localizedName
} else {
return screen.displayName ?? defaultName
}
}
return defaultName
}
func getAffectedDisplays() -> [Display]? {
var affectedDisplays: [Display]
let allDisplays = DisplayManager.shared.getAllNonVirtualDisplays()
guard let currentDisplay = DisplayManager.shared.getCurrentDisplay() else {
return nil
}
// let allDisplays = prefs.bool(forKey: Utils.PrefKeys.allScreens.rawValue) ? displays : [currentDisplay]
if prefs.bool(forKey: Utils.PrefKeys.allScreens.rawValue) {
affectedDisplays = allDisplays
} else {
affectedDisplays = [currentDisplay]
if CGDisplayIsInHWMirrorSet(currentDisplay.identifier) != 0 || CGDisplayIsInMirrorSet(currentDisplay.identifier) != 0, CGDisplayMirrorsDisplay(currentDisplay.identifier) == 0 {
for display in allDisplays where CGDisplayMirrorsDisplay(display.identifier) == currentDisplay.identifier {
affectedDisplays.append(display)
}
}
}
return affectedDisplays
}
}

View file

@ -0,0 +1,72 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Foundation
import os.log
class AppleDisplay: Display {
private var displayQueue: DispatchQueue
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false) {
self.displayQueue = DispatchQueue(label: String("displayQueue-\(identifier)"))
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
}
public func getAppleBrightness() -> Float {
var brightness: Float = 0
DisplayServicesGetBrightness(self.identifier, &brightness)
return brightness
}
public func setAppleBrightness(value: Float) {
self.displayQueue.sync {
DisplayServicesSetBrightness(self.identifier, value)
DisplayServicesBrightnessChanged(self.identifier, Double(value))
}
}
override func setDirectBrightness(_ to: Float, transient: Bool = false) -> Bool {
let value = max(min(to, 1), 0)
self.setAppleBrightness(value: value)
if !transient {
self.savePref(value, for: .brightness)
self.brightnessSyncSourceValue = value
self.smoothBrightnessTransient = value
}
return true
}
override func getBrightness() -> Float {
if self.prefExists(for: .brightness) {
return self.readPrefAsFloat(for: .brightness)
} else {
return self.getAppleBrightness()
}
}
override func refreshBrightness() -> Float {
guard !self.smoothBrightnessRunning else {
return 0
}
let brightness = self.getAppleBrightness()
let oldValue = self.brightnessSyncSourceValue
self.savePref(brightness, for: .brightness)
if brightness != oldValue {
os_log("Pushing slider and reporting delta for Apple display %{public}@", type: .debug, String(self.identifier))
var newValue: Float
if abs(brightness - oldValue) < 0.01 {
newValue = brightness
} else if brightness > oldValue {
newValue = oldValue + max((brightness - oldValue) / 3, 0.005)
} else {
newValue = oldValue + min((brightness - oldValue) / 3, -0.005)
}
self.brightnessSyncSourceValue = newValue
if let sliderHandler = self.sliderHandler[.brightness] {
sliderHandler.setValue(newValue, displayID: self.identifier)
}
return newValue - oldValue
}
return 0
}
}

View file

@ -1,44 +1,25 @@
//
// Display.swift
// MonitorControl
//
// Created by Joni Van Roost on 24/01/2020.
// Copyright © 2020 MonitorControl. All rights reserved.
//
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import Foundation
import os.log
enum OSDImage: Int64 {
case brightness = 1
case audioSpeaker = 3
case audioSpeakerMuted = 4
}
class Display {
class Display: Equatable {
internal let identifier: CGDirectDisplayID
internal let name: String
internal let prefsId: String
internal var name: String
internal var vendorNumber: UInt32?
internal var modelNumber: UInt32?
internal var isEnabled: Bool {
get {
self.prefs.object(forKey: "\(self.identifier)-state") as? Bool ?? true
}
set {
self.prefs.set(newValue, forKey: "\(self.identifier)-state")
}
}
var forceSw: Bool {
get {
return self.prefs.bool(forKey: "forceSw-\(self.identifier)")
}
set {
self.prefs.set(newValue, forKey: "forceSw-\(self.identifier)")
os_log("Set `forceSw` to: %{public}@", type: .info, String(newValue))
}
internal var smoothBrightnessTransient: Float = 1
internal var smoothBrightnessRunning: Bool = false
internal var smoothBrightnessSlow: Bool = false
static func == (lhs: Display, rhs: Display) -> Bool {
return lhs.identifier == rhs.identifier
}
var sliderHandler: [Command: SliderHandler] = [:]
var brightnessSyncSourceValue: Float = 1
var isVirtual: Bool = false
var defaultGammaTableRed = [CGGammaValue](repeating: 0, count: 256)
@ -47,42 +28,158 @@ class Display {
var defaultGammaTableSampleCount: UInt32 = 0
var defaultGammaTablePeak: Float = 1
private let prefs = UserDefaults.standard
func prefExists(key: PrefKey? = nil, for command: Command? = nil) -> Bool {
return prefs.object(forKey: self.getKey(key: key, for: command)) != nil
}
func removePref(key: PrefKey, for command: Command? = nil) {
prefs.removeObject(forKey: self.getKey(key: key, for: command))
}
func savePref<T>(_ value: T, key: PrefKey? = nil, for command: Command? = nil) {
prefs.set(value, forKey: self.getKey(key: key, for: command))
}
func readPrefAsFloat(key: PrefKey? = nil, for command: Command? = nil) -> Float {
return prefs.float(forKey: self.getKey(key: key, for: command))
}
func readPrefAsInt(key: PrefKey? = nil, for command: Command? = nil) -> Int {
return prefs.integer(forKey: self.getKey(key: key, for: command))
}
func readPrefAsBool(key: PrefKey? = nil, for command: Command? = nil) -> Bool {
return prefs.bool(forKey: self.getKey(key: key, for: command))
}
func readPrefAsString(key: PrefKey? = nil, for command: Command? = nil) -> String {
return prefs.string(forKey: self.getKey(key: key, for: command)) ?? ""
}
private func getKey(key: PrefKey? = nil, for command: Command? = nil) -> String {
return (key ?? PrefKey.value).rawValue + (command != nil ? String((command ?? Command.none).rawValue) : "") + self.prefsId
}
internal init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false) {
self.identifier = identifier
self.name = name
self.vendorNumber = vendorNumber
self.modelNumber = modelNumber
self.isVirtual = isVirtual
self.prefsId = "(" + String(name.filter { !$0.isWhitespace }) + String(vendorNumber ?? 0) + String(modelNumber ?? 0) + "@" + String(identifier) + ")"
os_log("Display init with prefsIdentifier %{public}@", type: .info, self.prefsId)
self.isVirtual = DEBUG_VIRTUAL ? true : isVirtual
self.swUpdateDefaultGammaTable()
self.smoothBrightnessTransient = self.getBrightness()
if self.isVirtual {
os_log("Creating or updating shade for virtual display %{public}@", type: .debug, String(self.identifier))
_ = DisplayManager.shared.updateShade(displayID: self.identifier)
} else {
os_log("Destroying shade (if exists) for real display %{public}@", type: .debug, String(self.identifier))
_ = DisplayManager.shared.destroyShade(displayID: self.identifier)
}
self.brightnessSyncSourceValue = self.getBrightness()
}
func stepBrightness(isUp _: Bool, isSmallIncrement _: Bool) {}
func setFriendlyName(_ value: String) {
self.prefs.set(value, forKey: "friendlyName-\(self.identifier)")
func calcNewBrightness(isUp: Bool, isSmallIncrement: Bool) -> Float {
var step: Float = (isUp ? 1 : -1) / 16.0
let delta = step / 4
if isSmallIncrement {
step = delta
}
return min(max(0, ceil((self.getBrightness() + delta) / step) * step), 1)
}
func getFriendlyName() -> String {
return self.prefs.string(forKey: "friendlyName-\(self.identifier)") ?? self.name
}
func getShowOsdDisplayId() -> CGDirectDisplayID {
if CGDisplayIsInHWMirrorSet(self.identifier) != 0 || CGDisplayIsInMirrorSet(self.identifier) != 0, CGDisplayMirrorsDisplay(self.identifier) != 0 {
for mirrorMaestro in DisplayManager.shared.getAllNonVirtualDisplays() where CGDisplayMirrorsDisplay(self.identifier) == mirrorMaestro.identifier {
if let externalMirrorMaestro = mirrorMaestro as? ExternalDisplay, externalMirrorMaestro.isSw() {
var thereAreOthers = false
for mirrorMember in DisplayManager.shared.getAllNonVirtualDisplays() where CGDisplayMirrorsDisplay(mirrorMember.identifier) == CGDisplayMirrorsDisplay(self.identifier) && mirrorMember.identifier != self.identifier {
thereAreOthers = true
}
if !thereAreOthers {
return externalMirrorMaestro.identifier
}
}
func stepBrightness(isUp: Bool, isSmallIncrement: Bool) {
let value = self.calcNewBrightness(isUp: isUp, isSmallIncrement: isSmallIncrement)
if self.setBrightness(value) {
OSDUtils.showOsd(displayID: self.identifier, command: .brightness, value: value * 64, maxValue: 64)
if let slider = self.sliderHandler[.brightness] {
slider.setValue(value, displayID: self.identifier)
self.brightnessSyncSourceValue = value
}
}
return self.identifier
}
func setBrightness(_ to: Float = -1, slow: Bool = false) -> Bool {
if !prefs.bool(forKey: PrefKey.disableSmoothBrightness.rawValue) {
return self.setSmoothBrightness(to, slow: slow)
} else {
return self.setDirectBrightness(to)
}
}
func setSmoothBrightness(_ to: Float = -1, slow: Bool = false) -> Bool {
guard app.sleepID == 0, app.reconfigureID == 0 else {
self.savePref(self.smoothBrightnessTransient, for: .brightness)
self.smoothBrightnessRunning = false
os_log("Pushing brightness stopped for Display %{public}@ because of sleep or reconfiguration", type: .debug, String(self.identifier))
return false
}
if slow {
self.smoothBrightnessSlow = true
}
var stepDivider: Float = 6
if self.smoothBrightnessSlow {
stepDivider = 16
}
var dontPushAgain = false
if to != -1 {
os_log("Pushing brightness towards goal of %{public}@ for Display %{public}@", type: .debug, String(to), String(self.identifier))
let value = max(min(to, 1), 0)
self.savePref(value, for: .brightness)
self.brightnessSyncSourceValue = value
self.smoothBrightnessSlow = slow
if self.smoothBrightnessRunning {
return true
}
}
let brightness = self.readPrefAsFloat(for: .brightness)
if brightness != self.smoothBrightnessTransient {
if abs(brightness - self.smoothBrightnessTransient) < 0.01 {
self.smoothBrightnessTransient = brightness
os_log("Pushing brightness finished for Display %{public}@", type: .debug, String(self.identifier))
dontPushAgain = true
self.smoothBrightnessRunning = false
} else if brightness > self.smoothBrightnessTransient {
self.smoothBrightnessTransient += max((brightness - self.smoothBrightnessTransient) / stepDivider, 1 / 100)
} else {
self.smoothBrightnessTransient += min((brightness - self.smoothBrightnessTransient) / stepDivider, 1 / 100)
}
_ = self.setDirectBrightness(self.smoothBrightnessTransient, transient: true)
if !dontPushAgain {
self.smoothBrightnessRunning = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.02) {
_ = self.setSmoothBrightness()
}
}
} else {
os_log("No more need to push brightness for Display %{public}@ (setting one final time)", type: .debug, String(self.identifier))
_ = self.setDirectBrightness(self.smoothBrightnessTransient, transient: true)
self.smoothBrightnessRunning = false
}
self.swBrightnessSemaphore.signal()
return true
}
func setDirectBrightness(_ to: Float, transient: Bool = false) -> Bool {
let value = max(min(to, 1), 0)
if self.setSwBrightness(value) {
if !transient {
self.savePref(value, for: .brightness)
self.brightnessSyncSourceValue = value
self.smoothBrightnessTransient = value
}
return true
}
return false
}
func getBrightness() -> Float {
if self.prefExists(for: .brightness) {
return self.readPrefAsFloat(for: .brightness)
} else {
return self.getSwBrightness()
}
}
func swUpdateDefaultGammaTable() {
@ -94,7 +191,7 @@ class Display {
}
func swBrightnessTransform(value: Float, reverse: Bool = false) -> Float {
let lowTreshold: Float = 0.1 // We don't allow decrease lower than 5% for safety reasons and because some displays blank off after a while on full black screen due to energy saving settings
let lowTreshold: Float = 0.0 // If we don't want to allow zero brightness for safety reason, this value can be modified (for example to 0.1 for a 10% minimum)
if !reverse {
return value * (1 - lowTreshold) + lowTreshold
} else {
@ -103,39 +200,51 @@ class Display {
}
let swBrightnessSemaphore = DispatchSemaphore(value: 1)
func setSwBrightness(value: UInt8, smooth: Bool = false) -> Bool {
let brightnessValue: UInt8 = min(getSwMaxBrightness(), value)
var currentValue = Float(self.getSwBrightnessPrefValue()) / Float(self.getSwMaxBrightness())
self.saveSwBirghtnessPrefValue(Int(brightnessValue))
var newValue = Float(Float(brightnessValue)) / Float(self.getSwMaxBrightness())
func setSwBrightness(_ value: Float, smooth: Bool = false) -> Bool {
let brightnessValue = min(1, value)
var currentValue = self.readPrefAsFloat(key: .SwBrightness)
self.savePref(brightnessValue, key: .SwBrightness)
var newValue = brightnessValue
currentValue = self.swBrightnessTransform(value: currentValue)
newValue = self.swBrightnessTransform(value: newValue)
os_log("setting software brightness to: %{public}@", type: .debug, String(newValue))
if smooth {
DispatchQueue.global(qos: .userInteractive).async {
self.swBrightnessSemaphore.wait()
for transientValue in stride(from: currentValue, to: newValue, by: 0.005 * (currentValue > newValue ? -1 : 1)) {
let gammaTableRed = self.defaultGammaTableRed.map { $0 * transientValue }
let gammaTableGreen = self.defaultGammaTableGreen.map { $0 * transientValue }
let gammaTableBlue = self.defaultGammaTableBlue.map { $0 * transientValue }
guard app.reconfigureID == 0 else {
return
}
CGSetDisplayTransferByTable(self.identifier, self.defaultGammaTableSampleCount, gammaTableRed, gammaTableGreen, gammaTableBlue)
if self.isVirtual {
_ = DisplayManager.shared.setShadeAlpha(value: 1 - transientValue, displayID: self.identifier)
} else {
let gammaTableRed = self.defaultGammaTableRed.map { $0 * transientValue }
let gammaTableGreen = self.defaultGammaTableGreen.map { $0 * transientValue }
let gammaTableBlue = self.defaultGammaTableBlue.map { $0 * transientValue }
CGSetDisplayTransferByTable(self.identifier, self.defaultGammaTableSampleCount, gammaTableRed, gammaTableGreen, gammaTableBlue)
}
Thread.sleep(forTimeInterval: 0.001) // Let's make things quick if not performed in the background
}
self.swBrightnessSemaphore.signal()
}
} else {
let gammaTableRed = self.defaultGammaTableRed.map { $0 * /* transientValue */ newValue }
let gammaTableGreen = self.defaultGammaTableGreen.map { $0 * /* transientValue */ newValue }
let gammaTableBlue = self.defaultGammaTableBlue.map { $0 * /* transientValue */ newValue }
CGSetDisplayTransferByTable(self.identifier, self.defaultGammaTableSampleCount, gammaTableRed, gammaTableGreen, gammaTableBlue)
if self.isVirtual {
return DisplayManager.shared.setShadeAlpha(value: 1 - value, displayID: self.identifier)
} else {
let gammaTableRed = self.defaultGammaTableRed.map { $0 * newValue }
let gammaTableGreen = self.defaultGammaTableGreen.map { $0 * newValue }
let gammaTableBlue = self.defaultGammaTableBlue.map { $0 * newValue }
DisplayManager.shared.moveGammaActivityEnforcer(displayID: self.identifier)
CGSetDisplayTransferByTable(self.identifier, self.defaultGammaTableSampleCount, gammaTableRed, gammaTableGreen, gammaTableBlue)
DisplayManager.shared.enforceGammaActivity()
}
}
return true
}
func getSwBrightness() -> UInt8 {
func getSwBrightness() -> Float {
if self.isVirtual {
return 1 - (DisplayManager.shared.getShadeAlpha(displayID: self.identifier) ?? 1)
}
var gammaTableRed = [CGGammaValue](repeating: 0, count: 256)
var gammaTableGreen = [CGGammaValue](repeating: 0, count: 256)
var gammaTableBlue = [CGGammaValue](repeating: 0, count: 256)
@ -146,73 +255,35 @@ class Display {
let bluePeak = gammaTableBlue.max() ?? 0
let gammaTablePeak = max(redPeak, greenPeak, bluePeak)
let peakRatio = gammaTablePeak / self.defaultGammaTablePeak
let brightnessValue = UInt8(round(self.swBrightnessTransform(value: peakRatio, reverse: true) * Float(self.getSwMaxBrightness())))
os_log("Current software gammatable brightness is: %{public}@", type: .debug, String(brightnessValue))
let brightnessValue = round(self.swBrightnessTransform(value: peakRatio, reverse: true) * 256) / 256
return brightnessValue
}
return self.getSwMaxBrightness()
return 1
}
func resetSwBrightness() -> Bool {
return self.setSwBrightness(value: self.getSwMaxBrightness())
}
func saveSwBirghtnessPrefValue(_ value: Int) {
self.prefs.set(value, forKey: "SwBrightness-\(self.identifier)")
}
func getSwBrightnessPrefValue() -> Int {
return self.prefs.integer(forKey: "SwBrightness-\(self.identifier)")
}
func getSwMaxBrightness() -> UInt8 {
return 100
return self.setSwBrightness(1)
}
func isSwBrightnessNotDefault() -> Bool {
guard !self.isVirtual else {
return false
}
if self.getSwBrightness() < self.getSwMaxBrightness() {
if self.getSwBrightness() < 1 {
return true
}
return false
}
func showOsd(command: Command, value: Int, maxValue: Int = 100, roundChiclet: Bool = false, lock: Bool = false) {
guard let manager = OSDManager.sharedManager() as? OSDManager else {
return
}
func refreshBrightness() -> Float {
return 0
}
var osdImage: OSDImage
switch command {
case .audioSpeakerVolume:
osdImage = value > 0 ? .audioSpeaker : .audioSpeakerMuted
case .audioMuteScreenBlank:
osdImage = .audioSpeakerMuted
default:
osdImage = .brightness
}
let filledChiclets: Int
let totalChiclets: Int
if roundChiclet {
let osdChiclet = OSDUtils.chiclet(fromValue: Float(value), maxValue: Float(maxValue))
filledChiclets = Int(round(osdChiclet))
totalChiclets = 16
func isBuiltIn() -> Bool {
if CGDisplayIsBuiltin(self.identifier) != 0 {
return true
} else {
filledChiclets = value
totalChiclets = maxValue
return false
}
manager.showImage(osdImage.rawValue,
onDisplayID: self.getShowOsdDisplayId(),
priority: 0x1F4,
msecUntilFade: 1000,
filledChiclets: UInt32(filledChiclets),
totalChiclets: UInt32(totalChiclets),
locked: lock)
}
}

View file

@ -1,421 +0,0 @@
import AVFoundation
import Cocoa
import IOKit
import os.log
class ExternalDisplay: Display {
var brightnessSliderHandler: SliderHandler?
var volumeSliderHandler: SliderHandler?
var contrastSliderHandler: SliderHandler?
var ddc: IntelDDC?
var arm64ddc: Bool = false
var arm64avService: IOAVService?
let DDC_HARD_MAX_LIMIT: Int = 100
let ddcQueue = DispatchQueue(label: "DDC queue")
private let prefs = UserDefaults.standard
var enableMuteUnmute: Bool {
get {
return self.prefs.bool(forKey: "enableMuteUnmute-\(self.identifier)")
}
set {
self.prefs.set(newValue, forKey: "enableMuteUnmute-\(self.identifier)")
os_log("Set `enableMuteUnmute` for %{private}@ to: %{public}@", type: .info, String(self.identifier), String(newValue))
}
}
var hideOsd: Bool {
get {
return self.prefs.bool(forKey: "hideOsd-\(self.identifier)")
}
set {
self.prefs.set(newValue, forKey: "hideOsd-\(self.identifier)")
os_log("Set `hideOsd` to: %{public}@", type: .info, String(newValue))
}
}
var needsLongerDelay: Bool {
get {
return self.prefs.object(forKey: "longerDelay-\(self.identifier)") as? Bool ?? false
}
set {
self.prefs.set(newValue, forKey: "longerDelay-\(self.identifier)")
os_log("Set `needsLongerDisplay` to: %{public}@", type: .info, String(newValue))
}
}
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false) {
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
if !isVirtual, !Arm64DDC.isArm64 {
self.ddc = IntelDDC(for: identifier)
}
}
func isMuted() -> Bool {
return self.getValue(for: .audioMuteScreenBlank) == 1
}
func toggleMute(fromVolumeSlider: Bool = false) {
var muteValue: Int
var volumeOSDValue: Int
if !self.isMuted() {
muteValue = 1
volumeOSDValue = 0
} else {
muteValue = 2
volumeOSDValue = self.getValue(for: .audioSpeakerVolume)
// The volume that will be set immediately after setting unmute while the old set volume was 0 is unpredictable
// Hence, just set it to a single filled chiclet
if volumeOSDValue == 0 {
volumeOSDValue = self.stepSize(for: .audioSpeakerVolume, isSmallIncrement: false)
self.saveValue(volumeOSDValue, for: .audioSpeakerVolume)
}
}
let volumeDDCValue = UInt16(volumeOSDValue)
if self.enableMuteUnmute {
guard self.writeDDCValues(command: .audioMuteScreenBlank, value: UInt16(muteValue)) == true else {
return
}
}
self.saveValue(muteValue, for: .audioMuteScreenBlank)
if !self.enableMuteUnmute || volumeOSDValue > 0 {
_ = self.writeDDCValues(command: .audioSpeakerVolume, value: volumeDDCValue)
}
if !fromVolumeSlider {
if !self.hideOsd {
self.showOsd(command: volumeOSDValue > 0 ? .audioSpeakerVolume : .audioMuteScreenBlank, value: volumeOSDValue, roundChiclet: true)
}
if volumeOSDValue > 0 {
self.playVolumeChangedSound()
}
if let slider = self.volumeSliderHandler?.slider {
slider.intValue = Int32(volumeDDCValue)
}
}
}
func stepVolume(isUp: Bool, isSmallIncrement: Bool, isPressed: Bool) {
let currentValue = self.getValue(for: .audioSpeakerVolume)
guard isPressed else {
self.playVolumeChangedSound()
return
}
var muteValue: Int?
let maxValue = self.getMaxValue(for: .audioSpeakerVolume)
let volumeOSDValue = self.calcNewValue(currentValue: currentValue, maxValue: maxValue, isUp: isUp, isSmallIncrement: isSmallIncrement)
let volumeDDCValue = UInt16(volumeOSDValue)
if self.isMuted(), volumeOSDValue > 0 {
muteValue = 2
} else if !self.isMuted(), volumeOSDValue == 0 {
muteValue = 1
}
let isAlreadySet = volumeOSDValue == self.getValue(for: .audioSpeakerVolume)
if !isAlreadySet {
if let muteValue = muteValue, self.enableMuteUnmute {
guard self.writeDDCValues(command: .audioMuteScreenBlank, value: UInt16(muteValue)) == true else {
return
}
self.saveValue(muteValue, for: .audioMuteScreenBlank)
}
if !self.enableMuteUnmute || volumeOSDValue != 0 {
_ = self.writeDDCValues(command: .audioSpeakerVolume, value: volumeDDCValue)
}
}
if !self.hideOsd {
self.showOsd(command: .audioSpeakerVolume, value: volumeOSDValue, roundChiclet: !isSmallIncrement)
}
if !isAlreadySet {
self.saveValue(volumeOSDValue, for: .audioSpeakerVolume)
if let slider = self.volumeSliderHandler?.slider {
slider.intValue = Int32(volumeDDCValue)
}
}
}
func isSwOnly() -> Bool {
return (!self.arm64ddc && self.ddc == nil && !self.isVirtual)
}
func isSw() -> Bool {
if self.prefs.bool(forKey: "forceSw-\(self.identifier)") || self.isSwOnly() {
return true
} else {
return false
}
}
let swAfterOsdAnimationSemaphore = DispatchSemaphore(value: 1)
var lastAnimationStartedTime: CFTimeInterval = CACurrentMediaTime()
func doSwAfterOsdAnimation() {
self.lastAnimationStartedTime = CACurrentMediaTime()
DispatchQueue.global(qos: .userInteractive).async {
self.swAfterOsdAnimationSemaphore.wait()
guard CACurrentMediaTime() < self.lastAnimationStartedTime + 0.05 else {
self.swAfterOsdAnimationSemaphore.signal()
return
}
for value: Int in stride(from: 1, to: 6, by: 1) {
guard self.getValue(for: .brightness) == 0 else {
self.swAfterOsdAnimationSemaphore.signal()
return
}
self.showOsd(command: .brightness, value: value, roundChiclet: false)
Thread.sleep(forTimeInterval: Double(value * 2) / 300)
}
for value: Int in stride(from: 5, to: 0, by: -1) {
guard self.getValue(for: .brightness) == 0 else {
self.swAfterOsdAnimationSemaphore.signal()
return
}
self.showOsd(command: .brightness, value: value, roundChiclet: false)
Thread.sleep(forTimeInterval: Double(value * 2) / 300)
}
self.showOsd(command: .brightness, value: 0, roundChiclet: true)
self.swAfterOsdAnimationSemaphore.signal()
}
}
func stepBrightnessPart(osdValue: Int, isSmallIncrement: Bool) -> Bool {
if self.isSw(), self.prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) {
if self.setSwBrightness(value: UInt8(osdValue), smooth: true) {
self.showOsd(command: .brightness, value: osdValue, roundChiclet: !isSmallIncrement)
self.saveValue(osdValue, for: .brightness)
if let slider = brightnessSliderHandler?.slider {
slider.intValue = Int32(osdValue)
}
}
return true
}
return false
}
func stepBrightnessswAfterBirghtnessMode(osdValue: Int, isUp: Bool, isSmallIncrement: Bool) -> Bool {
let isAlreadySet = osdValue == self.getValue(for: .brightness)
var swAfterBirghtnessMode: Bool = isSwBrightnessNotDefault()
if isAlreadySet, !isUp, !swAfterBirghtnessMode, self.prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
swAfterBirghtnessMode = true
}
if swAfterBirghtnessMode {
let currentSwBrightness = UInt8(self.getSwBrightnessPrefValue())
var swBirghtnessValue = self.calcNewValue(currentValue: Int(currentSwBrightness), maxValue: Int(getSwMaxBrightness()), isUp: isUp, isSmallIncrement: isSmallIncrement)
if swBirghtnessValue >= Int(getSwMaxBrightness()) {
swBirghtnessValue = Int(getSwMaxBrightness())
swAfterBirghtnessMode = false
}
if self.setSwBrightness(value: UInt8(swBirghtnessValue)) {
if let slider = brightnessSliderHandler?.slider {
slider.intValue = Int32(Float(slider.maxValue / 2) * (Float(swBirghtnessValue) / Float(getSwMaxBrightness())))
}
self.doSwAfterOsdAnimation()
}
}
return swAfterBirghtnessMode
}
override func stepBrightness(isUp: Bool, isSmallIncrement: Bool) {
let currentValue = self.getValue(for: .brightness)
let maxValue = self.isSw() ? Int(self.getSwMaxBrightness()) : self.getMaxValue(for: .brightness)
let osdValue = self.calcNewValue(currentValue: currentValue, maxValue: maxValue, isUp: isUp, isSmallIncrement: isSmallIncrement)
if self.stepBrightnessPart(osdValue: osdValue, isSmallIncrement: isSmallIncrement) {
return
}
if self.stepBrightnessswAfterBirghtnessMode(osdValue: osdValue, isUp: isUp, isSmallIncrement: isSmallIncrement) {
return
}
let ddcValue = UInt16(osdValue)
guard self.writeDDCValues(command: .brightness, value: ddcValue) == true else {
return
}
if let slider = brightnessSliderHandler?.slider {
if !self.isSw(), self.prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
slider.intValue = Int32(slider.maxValue / 2) + Int32(ddcValue)
} else {
slider.intValue = Int32(ddcValue)
}
}
self.showOsd(command: .brightness, value: osdValue, roundChiclet: !isSmallIncrement)
self.saveValue(osdValue, for: .brightness)
}
public func writeDDCValues(command: Command, value: UInt16, errorRecoveryWaitTime _: UInt32? = nil) -> Bool? {
guard app.sleepID == 0, app.reconfigureID == 0, !self.forceSw else {
return false
}
var success: Bool = false
self.ddcQueue.sync {
if Arm64DDC.isArm64 {
if self.arm64ddc {
success = Arm64DDC.write(service: self.arm64avService, command: command.rawValue, value: value)
}
} else {
success = self.ddc?.write(command: command.rawValue, value: value, errorRecoveryWaitTime: 2000) ?? false
}
}
return success
}
func readDDCValues(for command: Command, tries: UInt, minReplyDelay delay: UInt64?) -> (current: UInt16, max: UInt16)? {
var values: (UInt16, UInt16)?
guard app.sleepID == 0, app.reconfigureID == 0, !self.forceSw else {
return values
}
if Arm64DDC.isArm64 {
guard self.arm64ddc else {
return nil
}
self.ddcQueue.sync {
if let unwrappedDelay = delay {
values = Arm64DDC.read(service: self.arm64avService, command: command.rawValue, tries: UInt8(min(tries, 255)), minReplyDelay: UInt32(unwrappedDelay / 1000))
} else {
values = Arm64DDC.read(service: self.arm64avService, command: command.rawValue, tries: UInt8(min(tries, 255)))
}
}
} else {
self.ddcQueue.sync {
values = self.ddc?.read(command: command.rawValue, tries: tries, minReplyDelay: delay)
}
}
return values
}
func calcNewValue(currentValue: Int, maxValue: Int, isUp: Bool, isSmallIncrement: Bool) -> Int {
let nextValue: Int
if isSmallIncrement {
nextValue = currentValue + (isUp ? 1 : -1)
} else {
let osdChicletFromValue = OSDUtils.chiclet(fromValue: Float(currentValue), maxValue: Float(maxValue))
let distance = OSDUtils.getDistance(fromNearestChiclet: osdChicletFromValue)
// get the next rounded chiclet
var nextFilledChiclet = isUp ? ceil(osdChicletFromValue) : floor(osdChicletFromValue)
// Depending on the direction, if the chiclet is above or below a certain threshold, we go to the next whole chiclet
let distanceThreshold = Float(0.25) // 25% of the distance between the edges of an osd box
if distance == 0 {
nextFilledChiclet += isUp ? 1 : -1
} else if !isUp, distance < distanceThreshold {
nextFilledChiclet -= 1
} else if isUp, distance > (1 - distanceThreshold) {
nextFilledChiclet += 1
}
nextValue = Int(round(OSDUtils.value(fromChiclet: nextFilledChiclet, maxValue: Float(maxValue))))
os_log("next: .value %{public}@/%{public}@, .osd %{public}@/%{public}@", type: .debug, String(nextValue), String(maxValue), String(nextFilledChiclet), String(OSDUtils.chicletCount))
}
return max(0, min(maxValue, nextValue))
}
func getValue(for command: Command) -> Int {
return self.prefs.integer(forKey: "\(command.rawValue)-\(self.identifier)")
}
func getValueExists(for command: Command) -> Bool {
return self.prefs.object(forKey: "\(command.rawValue)-\(self.identifier)") != nil
}
func saveValue(_ value: Int, for command: Command) {
self.prefs.set(value, forKey: "\(command.rawValue)-\(self.identifier)")
}
func saveMaxValue(_ maxValue: Int, for command: Command) {
self.prefs.set(maxValue, forKey: "max-\(command.rawValue)-\(self.identifier)")
}
func getMaxValue(for command: Command) -> Int {
let max = self.prefs.integer(forKey: "max-\(command.rawValue)-\(self.identifier)")
return min(self.DDC_HARD_MAX_LIMIT, max == 0 ? self.DDC_HARD_MAX_LIMIT : max)
}
func getRestoreValue(for command: Command) -> Int {
return self.prefs.integer(forKey: "restore-\(command.rawValue)-\(self.identifier)")
}
func setRestoreValue(_ value: Int?, for command: Command) {
self.prefs.set(value, forKey: "restore-\(command.rawValue)-\(self.identifier)")
}
func setPollingMode(_ value: Int) {
self.prefs.set(String(value), forKey: "pollingMode-\(self.identifier)")
}
/*
Polling Modes:
0 -> .none -> 0 tries
1 -> .minimal -> 5 tries
2 -> .normal -> 10 tries
3 -> .heavy -> 100 tries
4 -> .custom -> $pollingCount tries
*/
func getPollingMode() -> Int {
// Reading as string so we don't get "0" as the default value
return Int(self.prefs.string(forKey: "pollingMode-\(self.identifier)") ?? "2") ?? 2
}
func getPollingCount() -> Int {
let selectedMode = self.getPollingMode()
switch selectedMode {
case 0:
return Utils.PollingMode.none.value
case 1:
return Utils.PollingMode.minimal.value
case 2:
return Utils.PollingMode.normal.value
case 3:
return Utils.PollingMode.heavy.value
case 4:
let val = self.prefs.integer(forKey: "pollingCount-\(self.identifier)")
return Utils.PollingMode.custom(value: val).value
default:
return 0
}
}
func setPollingCount(_ value: Int) {
self.prefs.set(value, forKey: "pollingCount-\(self.identifier)")
}
private func stepSize(for command: Command, isSmallIncrement: Bool) -> Int {
return isSmallIncrement ? 1 : Int(floor(Float(self.getMaxValue(for: command)) / OSDUtils.chicletCount))
}
override func showOsd(command: Command, value: Int, maxValue _: Int = 100, roundChiclet: Bool = false, lock: Bool = false) {
super.showOsd(command: command, value: value, maxValue: self.getMaxValue(for: command), roundChiclet: roundChiclet, lock: lock)
}
private var audioPlayer: AVAudioPlayer?
private func playVolumeChangedSound() {
// Check if user has enabled "Play feedback when volume is changed" in Sound Preferences
guard let preferences = Utils.getSystemPreferences(), let hasSoundEnabled = preferences["com.apple.sound.beep.feedback"] as? Int, hasSoundEnabled == 1
else {
return
}
do {
self.audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: "/System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"))
self.audioPlayer?.volume = 1
self.audioPlayer?.play()
} catch {
os_log("%{public}@", type: .error, error.localizedDescription)
}
}
}

View file

@ -1,46 +0,0 @@
//
// InternalDisplay.swift
// MonitorControl
//
// Created by Joni Van Roost on 24/01/2020.
// Copyright © 2020 MonitorControl. All rights reserved.
//
// Some of the code in this file was sourced from:
// https://github.com/fnesveda/ExternalDisplayBrightness
// all credit goes to @fnesveda
import Foundation
class InternalDisplay: Display {
// the queue for dispatching display operations, so they're not performed directly and concurrently
private var displayQueue: DispatchQueue
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false) {
self.displayQueue = DispatchQueue(label: String("displayQueue-\(identifier)"))
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
}
func calcNewBrightness(isUp: Bool, isSmallIncrement: Bool) -> Float {
var step: Float = (isUp ? 1 : -1) / 16.0
let delta = step / 4
if isSmallIncrement {
step = delta
}
return min(max(0, ceil((self.getBrightness() + delta) / step) * step), 1)
}
public func getBrightness() -> Float {
var brightness: Float = 0
DisplayServicesGetBrightness(self.identifier, &brightness)
return brightness
}
override func stepBrightness(isUp: Bool, isSmallIncrement: Bool) {
let value = self.calcNewBrightness(isUp: isUp, isSmallIncrement: isSmallIncrement)
self.displayQueue.sync {
DisplayServicesSetBrightness(self.identifier, Float(value))
DisplayServicesBrightnessChanged(self.identifier, Double(value))
self.showOsd(command: .brightness, value: Int(value * 64), maxValue: 64)
}
}
}

View file

@ -0,0 +1,500 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import AVFoundation
import Cocoa
import IOKit
import os.log
class OtherDisplay: Display {
var volumeSliderHandler: SliderHandler?
var contrastSliderHandler: SliderHandler?
var ddc: IntelDDC?
var arm64ddc: Bool = false
var arm64avService: IOAVService?
var isDiscouraged: Bool = false
let DDC_MAX_DETECT_LIMIT: Int = 100
private var audioPlayer: AVAudioPlayer?
var pollingCount: Int {
get {
switch self.readPrefAsInt(key: .pollingMode) {
case PollingMode.none.rawValue: return 0
case PollingMode.minimal.rawValue: return 1
case PollingMode.normal.rawValue: return 5
case PollingMode.heavy.rawValue: return 20
case PollingMode.custom.rawValue: return prefs.integer(forKey: PrefKey.pollingCount.rawValue + self.prefsId)
default: return PollingMode.none.rawValue
}
}
set { prefs.set(newValue, forKey: PrefKey.pollingCount.rawValue + self.prefsId) }
}
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false) {
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
if !isVirtual, !Arm64DDC.isArm64 {
self.ddc = IntelDDC(for: identifier)
}
}
func processCurrentDDCValue(read: Bool, command: Command, firstrun: Bool, currentDDCValue: UInt16) {
if read {
var currentValue = self.convDDCToValue(for: command, from: currentDDCValue)
if !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue), command == .brightness {
os_log("- Combined brightness mapping on DDC data.", type: .info)
if currentValue > 0 {
currentValue = self.combinedBrightnessSwitchingValue() + currentValue * (1 - self.combinedBrightnessSwitchingValue())
} else if currentValue == 0, firstrun {
currentValue = self.combinedBrightnessSwitchingValue()
} else if self.prefExists(for: command), self.readPrefAsFloat(for: command) <= self.combinedBrightnessSwitchingValue() {
currentValue = self.readPrefAsFloat(for: command)
} else {
currentValue = self.combinedBrightnessSwitchingValue()
}
}
self.savePref(currentValue, for: command)
if command == .brightness {
self.smoothBrightnessTransient = currentValue
}
} else {
var currentValue: Float = self.readPrefAsFloat(for: command)
if !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue), command == .brightness {
os_log("- Combined brightness mapping on saved data.", type: .info)
if !self.prefExists(for: command) {
currentValue = self.combinedBrightnessSwitchingValue() + self.convDDCToValue(for: command, from: currentDDCValue) * (1 - self.combinedBrightnessSwitchingValue())
} else if firstrun, currentValue < self.combinedBrightnessSwitchingValue() {
currentValue = self.combinedBrightnessSwitchingValue()
}
} else {
currentValue = self.prefExists(for: command) ? self.readPrefAsFloat(for: command) : self.convDDCToValue(for: command, from: currentDDCValue)
}
self.savePref(currentValue, for: command)
if command == .brightness {
self.smoothBrightnessTransient = currentValue
}
}
}
func setupCurrentAndMaxValues(command: Command, firstrun: Bool = false) {
var ddcValues: (UInt16, UInt16)?
var maxDDCValue = UInt16(DDC_MAX_DETECT_LIMIT)
var currentDDCValue = UInt16(Float(DDC_MAX_DETECT_LIMIT) * 1)
if command == .audioSpeakerVolume {
currentDDCValue = UInt16(Float(self.DDC_MAX_DETECT_LIMIT) * 0.125) // lower default audio value as high volume might rattle the user.
}
os_log("Setting up display %{public}@ for %{public}@", type: .info, String(self.identifier), String(reflecting: command))
if !self.isSw() {
if prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue), self.pollingCount != 0, !app.safeMode {
os_log("- Reading DDC from display %{public}@ times", type: .info, String(self.pollingCount))
let delay = self.readPrefAsBool(key: .longerDelay) ? UInt64(40 * kMillisecondScale) : nil
ddcValues = self.readDDCValues(for: command, tries: UInt(self.pollingCount), minReplyDelay: delay)
if ddcValues != nil {
(currentDDCValue, maxDDCValue) = ddcValues ?? (currentDDCValue, maxDDCValue)
self.processCurrentDDCValue(read: true, command: command, firstrun: firstrun, currentDDCValue: currentDDCValue)
os_log("- DDC read successful.", type: .info)
} else {
os_log("- DDC read failed.", type: .info)
}
} else {
os_log("- DDC read disabled.", type: .info)
}
if self.readPrefAsInt(key: .maxDDCOverride, for: command) > self.readPrefAsInt(key: .minDDCOverride, for: command) {
self.savePref(self.readPrefAsInt(key: .maxDDCOverride, for: command), key: .maxDDC, for: command)
} else {
self.savePref(min(Int(maxDDCValue), self.DDC_MAX_DETECT_LIMIT), key: .maxDDC, for: command)
}
if ddcValues == nil {
self.processCurrentDDCValue(read: false, command: command, firstrun: firstrun, currentDDCValue: currentDDCValue)
currentDDCValue = self.convValueToDDC(for: command, from: (!prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue) && command == .brightness) ? max(0, self.readPrefAsFloat(for: command) - self.combinedBrightnessSwitchingValue()) * (1 / (1 - self.combinedBrightnessSwitchingValue())) : self.readPrefAsFloat(for: command))
}
os_log("- Current DDC value: %{public}@", type: .info, String(currentDDCValue))
os_log("- Minimum DDC value: %{public}@ (overrides 0)", type: .info, String(self.readPrefAsInt(key: .minDDCOverride, for: command)))
os_log("- Maximum DDC value: %{public}@ (overrides %{public}@)", type: .info, String(self.readPrefAsInt(key: .maxDDC, for: command)), String(maxDDCValue))
os_log("- Current internal value: %{public}@", type: .info, String(self.readPrefAsFloat(for: command)))
if prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), !prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue), !app.safeMode {
os_log("- Writing last saved DDC values.", type: .info, self.name, String(reflecting: command))
_ = self.writeDDCValues(command: command, value: currentDDCValue)
}
} else {
self.savePref(max(0.1, self.prefExists(for: command) ? self.readPrefAsFloat(for: command) : Float(1)), for: command)
self.savePref(self.readPrefAsFloat(for: command), key: .SwBrightness)
self.brightnessSyncSourceValue = self.readPrefAsFloat(for: command)
self.smoothBrightnessTransient = self.readPrefAsFloat(for: command)
os_log("- Software controlled display current internal value: %{public}@", type: .info, String(self.readPrefAsFloat(for: command)))
}
if command == .audioSpeakerVolume {
self.setupMuteUnMute()
}
}
func setupMuteUnMute() {
guard !self.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) else {
return
}
var currentMuteValue = self.readPrefAsInt(for: .audioMuteScreenBlank)
currentMuteValue = currentMuteValue == 0 ? 2 : currentMuteValue
var muteValues: (current: UInt16, max: UInt16)?
if self.readPrefAsBool(key: .enableMuteUnmute) {
if self.pollingCount != 0, !app.safeMode, prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue) {
os_log("Reading DDC from display %{public}@ times for Mute", type: .info, String(self.pollingCount))
let delay = self.readPrefAsBool(key: .longerDelay) ? UInt64(40 * kMillisecondScale) : nil
muteValues = self.readDDCValues(for: .audioMuteScreenBlank, tries: UInt(self.pollingCount), minReplyDelay: delay)
if let muteValues = muteValues {
os_log("Success, current Mute setting: %{public}@", type: .info, String(muteValues.current))
currentMuteValue = Int(muteValues.current)
} else {
os_log("Mute read failed", type: .info)
}
}
if prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue), !prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue), !app.safeMode {
os_log("Writing last saved DDC value for Mute: %{public}@", type: .info, String(currentMuteValue))
_ = self.writeDDCValues(command: .audioMuteScreenBlank, value: UInt16(currentMuteValue))
}
self.savePref(Int(currentMuteValue), for: .audioMuteScreenBlank)
}
}
func setupSliderCurrentValue(command: Command) -> Float {
return (command == .audioSpeakerVolume && self.readPrefAsBool(key: .enableMuteUnmute) && self.readPrefAsInt(for: .audioMuteScreenBlank) == 1) ? 0 : self.readPrefAsFloat(for: command)
}
func stepVolume(isUp: Bool, isSmallIncrement: Bool) {
guard !self.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) else {
OSDUtils.showOsdVolumeDisabled(displayID: self.identifier)
return
}
let currentValue = self.readPrefAsFloat(for: .audioSpeakerVolume)
var muteValue: Int?
let volumeOSDValue = self.calcNewValue(currentValue: currentValue, isUp: isUp, isSmallIncrement: isSmallIncrement)
if self.readPrefAsInt(for: .audioMuteScreenBlank) == 1, volumeOSDValue > 0 {
muteValue = 2
} else if self.readPrefAsInt(for: .audioMuteScreenBlank) != 1, volumeOSDValue == 0 {
muteValue = 1
}
let isAlreadySet = volumeOSDValue == self.readPrefAsFloat(for: .audioSpeakerVolume)
if !isAlreadySet {
if let muteValue = muteValue, self.readPrefAsBool(key: .enableMuteUnmute) {
guard self.writeDDCValues(command: .audioMuteScreenBlank, value: UInt16(muteValue)) == true else {
return
}
self.savePref(muteValue, for: .audioMuteScreenBlank)
}
if !self.readPrefAsBool(key: .enableMuteUnmute) || volumeOSDValue != 0 {
_ = self.writeDDCValues(command: .audioSpeakerVolume, value: self.convValueToDDC(for: .audioSpeakerVolume, from: volumeOSDValue))
}
}
if !self.readPrefAsBool(key: .hideOsd) {
OSDUtils.showOsd(displayID: self.identifier, command: .audioSpeakerVolume, value: volumeOSDValue, roundChiclet: !isSmallIncrement)
}
if !isAlreadySet {
self.savePref(volumeOSDValue, for: .audioSpeakerVolume)
if let slider = self.sliderHandler[.audioSpeakerVolume] {
slider.setValue(volumeOSDValue, displayID: self.identifier)
}
}
}
func stepContrast(isUp: Bool, isSmallIncrement: Bool) {
guard !self.readPrefAsBool(key: .unavailableDDC, for: .contrast), !self.isSw() else {
return
}
let currentValue = self.readPrefAsFloat(for: .contrast)
let contrastOSDValue = self.calcNewValue(currentValue: currentValue, isUp: isUp, isSmallIncrement: isSmallIncrement)
let isAlreadySet = contrastOSDValue == self.readPrefAsFloat(for: .contrast)
if !isAlreadySet {
_ = self.writeDDCValues(command: .contrast, value: self.convValueToDDC(for: .contrast, from: contrastOSDValue))
}
OSDUtils.showOsd(displayID: self.identifier, command: .contrast, value: contrastOSDValue, roundChiclet: !isSmallIncrement)
if !isAlreadySet {
self.savePref(contrastOSDValue, for: .contrast)
if let slider = self.sliderHandler[.contrast] {
slider.setValue(contrastOSDValue, displayID: self.identifier)
}
}
}
func toggleMute(fromVolumeSlider: Bool = false) {
guard !self.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) else {
OSDUtils.showOsdMuteDisabled(displayID: self.identifier)
return
}
var muteValue: Int
var volumeOSDValue: Float
if self.readPrefAsInt(for: .audioMuteScreenBlank) != 1 {
muteValue = 1
volumeOSDValue = 0
} else {
muteValue = 2
volumeOSDValue = self.readPrefAsFloat(for: .audioSpeakerVolume)
// The volume that will be set immediately after setting unmute while the old set volume was 0 is unpredictable. Hence, just set it to a single filled chiclet
if volumeOSDValue == 0 {
volumeOSDValue = 1 / OSDUtils.chicletCount
self.savePref(volumeOSDValue, for: .audioSpeakerVolume)
}
}
if self.readPrefAsBool(key: .enableMuteUnmute) {
guard self.writeDDCValues(command: .audioMuteScreenBlank, value: UInt16(muteValue)) == true else {
return
}
}
self.savePref(muteValue, for: .audioMuteScreenBlank)
if !self.readPrefAsBool(key: .enableMuteUnmute) || volumeOSDValue > 0 {
_ = self.writeDDCValues(command: .audioSpeakerVolume, value: self.convValueToDDC(for: .audioSpeakerVolume, from: volumeOSDValue))
}
if !fromVolumeSlider {
if !self.readPrefAsBool(key: .hideOsd) {
OSDUtils.showOsd(displayID: self.identifier, command: volumeOSDValue > 0 ? .audioSpeakerVolume : .audioMuteScreenBlank, value: volumeOSDValue, roundChiclet: true)
}
if let slider = self.sliderHandler[.audioSpeakerVolume] {
slider.setValue(volumeOSDValue)
}
}
}
func isSwOnly() -> Bool {
return (!self.arm64ddc && self.ddc == nil) || self.isVirtual
}
func isSw() -> Bool {
if prefs.bool(forKey: PrefKey.forceSw.rawValue + self.prefsId) || self.isSwOnly() {
return true
} else {
return false
}
}
let swAfterOsdAnimationSemaphore = DispatchSemaphore(value: 1)
var lastAnimationStartedTime: CFTimeInterval = CACurrentMediaTime()
func doSwAfterOsdAnimation() {
self.lastAnimationStartedTime = CACurrentMediaTime()
DispatchQueue.global(qos: .userInteractive).async {
self.swAfterOsdAnimationSemaphore.wait()
guard CACurrentMediaTime() < self.lastAnimationStartedTime + 0.05 else {
self.swAfterOsdAnimationSemaphore.signal()
return
}
for value: Int in stride(from: 1, to: 6, by: 1) {
guard self.readPrefAsFloat(for: .brightness) <= self.combinedBrightnessSwitchingValue() else {
self.swAfterOsdAnimationSemaphore.signal()
return
}
OSDUtils.showOsd(displayID: self.identifier, command: .brightness, value: Float(value), maxValue: 100, roundChiclet: false)
Thread.sleep(forTimeInterval: Double(value * 2) / 300)
}
for value: Int in stride(from: 5, to: 0, by: -1) {
guard self.readPrefAsFloat(for: .brightness) <= self.combinedBrightnessSwitchingValue() else {
self.swAfterOsdAnimationSemaphore.signal()
return
}
OSDUtils.showOsd(displayID: self.identifier, command: .brightness, value: Float(value), maxValue: 100, roundChiclet: false)
Thread.sleep(forTimeInterval: Double(value * 2) / 300)
}
OSDUtils.showOsd(displayID: self.identifier, command: .brightness, value: 0, roundChiclet: true)
self.swAfterOsdAnimationSemaphore.signal()
}
}
override func stepBrightness(isUp: Bool, isSmallIncrement: Bool) {
if self.isSw() {
if !prefs.bool(forKey: PrefKey.disableSoftwareFallback.rawValue) {
super.stepBrightness(isUp: isUp, isSmallIncrement: isSmallIncrement)
}
return
}
guard !self.readPrefAsBool(key: .unavailableDDC, for: .brightness) else {
return
}
let currentValue = self.readPrefAsFloat(for: .brightness)
var osdValue: Float = 1
if !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue), prefs.bool(forKey: PrefKey.separateCombinedScale.rawValue) {
osdValue = self.calcNewValue(currentValue: currentValue, isUp: isUp, isSmallIncrement: isSmallIncrement, half: true)
_ = self.setBrightness(osdValue)
if osdValue > self.combinedBrightnessSwitchingValue() {
OSDUtils.showOsd(displayID: self.identifier, command: .brightness, value: osdValue - self.combinedBrightnessSwitchingValue(), maxValue: self.combinedBrightnessSwitchingValue(), roundChiclet: !isSmallIncrement)
} else {
self.doSwAfterOsdAnimation()
}
} else {
osdValue = self.calcNewValue(currentValue: currentValue, isUp: isUp, isSmallIncrement: isSmallIncrement)
_ = self.setBrightness(osdValue)
OSDUtils.showOsd(displayID: self.identifier, command: .brightness, value: osdValue, roundChiclet: !isSmallIncrement)
}
if let slider = self.sliderHandler[.brightness] {
slider.setValue(osdValue, displayID: self.identifier)
self.brightnessSyncSourceValue = osdValue
}
}
override func setDirectBrightness(_ to: Float, transient: Bool = false) -> Bool {
let value = max(min(to, 1), 0)
if !self.isSw() {
if !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue) {
var brightnessValue: Float = 0
var brightnessSwValue: Float = 1
if value >= self.combinedBrightnessSwitchingValue() {
brightnessValue = (value - self.combinedBrightnessSwitchingValue()) * (1 / (1 - self.combinedBrightnessSwitchingValue()))
brightnessSwValue = 1
} else {
brightnessValue = 0
brightnessSwValue = (value / self.combinedBrightnessSwitchingValue())
}
_ = self.writeDDCValues(command: .brightness, value: self.convValueToDDC(for: .brightness, from: brightnessValue))
_ = self.setSwBrightness(brightnessSwValue)
} else {
_ = self.writeDDCValues(command: .brightness, value: self.convValueToDDC(for: .brightness, from: value))
}
if !transient {
self.savePref(value, for: .brightness)
self.smoothBrightnessTransient = value
}
} else {
_ = super.setDirectBrightness(to, transient: transient)
}
return true
}
override func getBrightness() -> Float {
return self.prefExists(for: .brightness) ? self.readPrefAsFloat(for: .brightness) : 1
}
func getRemapControlCodes(command: Command) -> [UInt8] {
let codes = self.readPrefAsString(key: PrefKey.remapDDC, for: command).components(separatedBy: ",")
var intCodes: [UInt8] = []
for code in codes {
let trimmedCode = code.trimmingCharacters(in: CharacterSet(charactersIn: " "))
if !trimmedCode.isEmpty, let intCode = UInt8(trimmedCode, radix: 16), intCode != 0 {
intCodes.append(intCode)
}
}
return intCodes
}
public func writeDDCValues(command: Command, value: UInt16, errorRecoveryWaitTime _: UInt32? = nil) -> Bool? {
guard app.sleepID == 0, app.reconfigureID == 0, !self.readPrefAsBool(key: .forceSw), !self.readPrefAsBool(key: .unavailableDDC, for: command) else {
return false
}
var success: Bool = false
var controlCodes = self.getRemapControlCodes(command: command)
if controlCodes.count == 0 {
controlCodes.append(command.rawValue)
}
for controlCode in controlCodes {
DisplayManager.shared.ddcQueue.sync {
if Arm64DDC.isArm64 {
if self.arm64ddc {
success = Arm64DDC.write(service: self.arm64avService, command: controlCode, value: value)
}
} else {
success = self.ddc?.write(command: command.rawValue, value: value, errorRecoveryWaitTime: 2000) ?? false
}
}
}
return success
}
func readDDCValues(for command: Command, tries: UInt, minReplyDelay delay: UInt64?) -> (current: UInt16, max: UInt16)? {
var values: (UInt16, UInt16)?
guard app.sleepID == 0, app.reconfigureID == 0, !self.readPrefAsBool(key: .forceSw), !self.readPrefAsBool(key: .unavailableDDC, for: command) else {
return values
}
let controlCodes = self.getRemapControlCodes(command: command)
let controlCode = controlCodes.count == 0 ? command.rawValue : controlCodes[0]
if Arm64DDC.isArm64 {
guard self.arm64ddc else {
return nil
}
DisplayManager.shared.ddcQueue.sync {
if let unwrappedDelay = delay {
values = Arm64DDC.read(service: self.arm64avService, command: controlCode, tries: UInt8(min(tries, 255)), minReplyDelay: UInt32(unwrappedDelay / 1000))
} else {
values = Arm64DDC.read(service: self.arm64avService, command: controlCode, tries: UInt8(min(tries, 255)))
}
}
} else {
DisplayManager.shared.ddcQueue.sync {
values = self.ddc?.read(command: controlCode, tries: tries, minReplyDelay: delay)
}
}
return values
}
func calcNewValue(currentValue: Float, isUp: Bool, isSmallIncrement: Bool, half: Bool = false) -> Float {
let nextValue: Float
if isSmallIncrement {
nextValue = currentValue + (isUp ? 0.01 : -0.01)
} else {
let osdChicletFromValue = OSDUtils.chiclet(fromValue: currentValue, maxValue: 1, half: half)
let distance = OSDUtils.getDistance(fromNearestChiclet: osdChicletFromValue)
var nextFilledChiclet = isUp ? ceil(osdChicletFromValue) : floor(osdChicletFromValue)
let distanceThreshold: Float = 0.25 // 25% of the distance between the edges of an osd box
if distance == 0 {
nextFilledChiclet += (isUp ? 1 : -1)
} else if !isUp, distance < distanceThreshold {
nextFilledChiclet -= 1
} else if isUp, distance > (1 - distanceThreshold) {
nextFilledChiclet += 1
}
nextValue = OSDUtils.value(fromChiclet: nextFilledChiclet, maxValue: 1, half: half)
}
return max(0, min(1, nextValue))
}
func getCurveMultiplier(_ curveDDC: Int) -> Float {
switch curveDDC {
case 1: return 0.6
case 2: return 0.7
case 3: return 0.8
case 4: return 0.9
case 6: return 1.3
case 7: return 1.5
case 8: return 1.7
case 9: return 1.88
default: return 1.0
}
}
func convValueToDDC(for command: Command, from: Float) -> UInt16 {
var value = from
if self.readPrefAsBool(key: .invertDDC, for: command) {
value = 1 - value
}
let curveMultiplier = self.getCurveMultiplier(self.readPrefAsInt(key: .curveDDC, for: command))
let minDDCValue = Float(self.readPrefAsInt(key: .minDDCOverride, for: command))
let maxDDCValue = Float(self.readPrefAsInt(key: .maxDDC, for: command))
let curvedValue = pow(max(min(value, 1), 0), curveMultiplier)
let deNormalizedValue = (maxDDCValue - minDDCValue) * curvedValue + minDDCValue
var intDDCValue = UInt16(min(max(deNormalizedValue, minDDCValue), maxDDCValue))
if from > 0, command == Command.audioSpeakerVolume {
intDDCValue = max(1, intDDCValue) // Never let sound to mute accidentally, keep it digitally to at digital 1 if needed as muting breaks some displays
}
return intDDCValue
}
func convDDCToValue(for command: Command, from: UInt16) -> Float {
let curveMultiplier = self.getCurveMultiplier(self.readPrefAsInt(key: .curveDDC, for: command))
let minDDCValue = Float(self.readPrefAsInt(key: .minDDCOverride, for: command))
let maxDDCValue = Float(self.readPrefAsInt(key: .maxDDC, for: command))
let normalizedValue = ((min(max(Float(from), minDDCValue), maxDDCValue) - minDDCValue) / (maxDDCValue - minDDCValue))
let deCurvedValue = pow(normalizedValue, 1.0 / curveMultiplier)
var value = deCurvedValue
if self.readPrefAsBool(key: .invertDDC, for: command) {
value = 1 - value
}
return max(min(value, 1), 0)
}
func playVolumeChangedSound() {
guard let preferences = app.getSystemPreferences(), let hasSoundEnabled = preferences["com.apple.sound.beep.feedback"] as? Int, hasSoundEnabled == 1 else {
return
}
do {
self.audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: "/System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"))
self.audioPlayer?.volume = 1
self.audioPlayer?.play()
} catch {
os_log("%{public}@", type: .error, error.localizedDescription)
}
}
func combinedBrightnessSwitchingValue() -> Float {
return Float(self.readPrefAsInt(key: .combinedBrightnessSwitchingPoint) + 8) / 16
}
}

View file

@ -0,0 +1,302 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import Foundation
import MediaKeyTap
import os.log
import Preferences
import ServiceManagement
import SimplyCoreAudio
import Sparkle
class AppDelegate: NSObject, NSApplicationDelegate {
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
var mediaKeyTap = MediaKeyTapManager()
var keyboardShortcuts = KeyboardShortcutsManager()
let coreAudio = SimplyCoreAudio()
var accessibilityObserver: NSObjectProtocol!
var reconfigureID: Int = 0 // dispatched reconfigure command ID
var sleepID: Int = 0 // sleep event ID
var safeMode = false
var jobRunning = false
let updaterController = SPUStandardUpdaterController(startingUpdater: false, updaterDelegate: nil, userDriverDelegate: nil)
var preferencePaneStyle: Preferences.Style {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return Preferences.Style.toolbarItems
} else {
return Preferences.Style.segmentedControl
}
}
lazy var preferencesWindowController: PreferencesWindowController = {
PreferencesWindowController(
preferencePanes: [
mainPrefsVc!,
menuslidersPrefsVc!,
keyboardPrefsVc!,
displaysPrefsVc!,
aboutPrefsVc!,
],
style: preferencePaneStyle,
animated: true
)
}()
func applicationDidFinishLaunching(_: Notification) {
app = self
menu = MenuHandler()
menu.delegate = menu
self.subscribeEventListeners()
if NSEvent.modifierFlags.contains(NSEvent.ModifierFlags.shift) {
self.safeMode = true
let alert = NSAlert()
alert.messageText = NSLocalizedString("Safe Mode Activated", comment: "Shown in the alert dialog")
alert.informativeText = NSLocalizedString("Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.", comment: "Shown in the alert dialog")
alert.runModal()
}
let currentBuildNumber = Int(Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "1") ?? 1
let previousBuildNumber: Int = (Int(prefs.string(forKey: PrefKey.buildNumber.rawValue) ?? "0") ?? 0)
if self.safeMode || ((previousBuildNumber < MIN_PREVIOUS_BUILD_NUMBER) && previousBuildNumber > 0) || (previousBuildNumber > currentBuildNumber), let bundleID = Bundle.main.bundleIdentifier {
if !self.safeMode {
let alert = NSAlert()
alert.messageText = NSLocalizedString("Incompatible previous version", comment: "Shown in the alert dialog")
alert.informativeText = NSLocalizedString("Preferences for an incompatible previous app version detected. Default preferences are reloaded.", comment: "Shown in the alert dialog")
alert.runModal()
}
prefs.removePersistentDomain(forName: bundleID)
}
prefs.set(currentBuildNumber, forKey: PrefKey.buildNumber.rawValue)
self.setDefaultPrefs()
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
self.statusItem.button?.image = NSImage(systemSymbolName: "sun.max", accessibilityDescription: "MonitorControl")
} else {
self.statusItem.button?.image = NSImage(named: "status")
}
self.statusItem.menu = menu
self.checkPermissions()
CGDisplayRegisterReconfigurationCallback({ _, _, _ in app.displayReconfigured() }, nil)
self.configure(firstrun: true)
DisplayManager.shared.createGammaActivityEnforcer()
self.updaterController.startUpdater()
}
@objc func quitClicked(_: AnyObject) {
os_log("Quit clicked", type: .debug)
NSApplication.shared.terminate(self)
}
@objc func prefsClicked(_: AnyObject) {
os_log("Preferences clicked", type: .debug)
self.preferencesWindowController.show()
}
func applicationShouldHandleReopen(_: NSApplication, hasVisibleWindows _: Bool) -> Bool {
app.prefsClicked(self)
return true
}
func applicationWillTerminate(_: Notification) {
os_log("Goodbye!", type: .info)
DisplayManager.shared.resetSwBrightnessForAllDisplays()
self.statusItem.isVisible = true
}
func setDefaultPrefs() {
if !prefs.bool(forKey: PrefKey.appAlreadyLaunched.rawValue) {
// Only preferences that are not false, 0 or "" by default are set here. Assumes pre-wiped database.
prefs.set(true, forKey: PrefKey.appAlreadyLaunched.rawValue)
prefs.set(true, forKey: PrefKey.SUEnableAutomaticChecks.rawValue)
}
}
func displayReconfigured() {
self.reconfigureID += 1
os_log("Bumping reconfigureID to %{public}@", type: .info, String(self.reconfigureID))
_ = DisplayManager.shared.destroyAllShades()
if self.sleepID == 0 {
let dispatchedReconfigureID = self.reconfigureID
os_log("Display to be reconfigured with reconfigureID %{public}@", type: .info, String(dispatchedReconfigureID))
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.configure(dispatchedReconfigureID: dispatchedReconfigureID)
}
}
}
func configure(dispatchedReconfigureID: Int = 0, firstrun: Bool = false) {
guard self.sleepID == 0, dispatchedReconfigureID == self.reconfigureID else {
return
}
os_log("Request for configuration with reconfigreID %{public}@", type: .info, String(dispatchedReconfigureID))
self.reconfigureID = 0
DisplayManager.shared.configureDisplays()
DisplayManager.shared.addDisplayCounterSuffixes()
DisplayManager.shared.updateArm64AVServices()
if firstrun {
DisplayManager.shared.resetSwBrightnessForAllDisplays(settingsOnly: true)
}
DisplayManager.shared.setupOtherDisplays(firstrun: firstrun)
self.updateMenusAndKeys()
if !firstrun {
if !prefs.bool(forKey: PrefKey.disableSoftwareFallback.rawValue) || !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue) {
DisplayManager.shared.restoreSwBrightnessForAllDisplays(async: !prefs.bool(forKey: PrefKey.disableSmoothBrightness.rawValue))
}
}
displaysPrefsVc?.loadDisplayList()
self.job(start: true)
}
func updateMenusAndKeys() {
menu.updateMenus()
self.updateMediaKeyTap()
}
func checkPermissions() {
let permissionsRequired: Bool = [KeyboardVolume.media.rawValue, KeyboardVolume.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardVolume.rawValue)) || [KeyboardBrightness.media.rawValue, KeyboardBrightness.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardBrightness.rawValue))
if !MediaKeyTapManager.readPrivileges(prompt: false) && permissionsRequired {
MediaKeyTapManager.acquirePrivileges()
}
}
private func subscribeEventListeners() {
NotificationCenter.default.addObserver(self, selector: #selector(self.audioDeviceChanged), name: Notification.Name.defaultOutputDeviceChanged, object: nil) // subscribe Audio output detector (SimplyCoreAudio)
DistributedNotificationCenter.default.addObserver(self, selector: #selector(self.colorSyncSettingsChanged), name: NSNotification.Name(rawValue: kColorSyncDisplayDeviceProfilesNotification.takeRetainedValue() as String), object: nil) // ColorSync change
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.sleepNotification), name: NSWorkspace.screensDidSleepNotification, object: nil) // sleep and wake listeners
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeNotofication), name: NSWorkspace.screensDidWakeNotification, object: nil)
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.sleepNotification), name: NSWorkspace.willSleepNotification, object: nil)
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeNotofication), name: NSWorkspace.didWakeNotification, object: nil)
_ = DistributedNotificationCenter.default().addObserver(forName: NSNotification.Name(rawValue: NSNotification.Name.accessibilityApi.rawValue), object: nil, queue: nil) { _ in DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.updateMediaKeyTap() } } // listen for accessibility status changes
}
@objc private func sleepNotification() {
self.sleepID += 1
os_log("Sleeping with sleep %{public}@", type: .info, String(self.sleepID))
}
@objc private func wakeNotofication() {
if self.sleepID != 0 {
os_log("Waking up from sleep %{public}@", type: .info, String(self.sleepID))
let dispatchedSleepID = self.sleepID
DispatchQueue.main.asyncAfter(deadline: .now() + 6.0) { // Some displays take time to recover...
self.soberNow(dispatchedSleepID: dispatchedSleepID)
}
}
}
private func soberNow(dispatchedSleepID: Int) {
if self.sleepID == dispatchedSleepID {
os_log("Sober from sleep %{public}@", type: .info, String(self.sleepID))
self.sleepID = 0
if self.reconfigureID != 0 {
let dispatchedReconfigureID = self.reconfigureID
os_log("Display needs reconfig after sober with reconfigureID %{public}@", type: .info, String(dispatchedReconfigureID))
self.configure(dispatchedReconfigureID: dispatchedReconfigureID)
} else if Arm64DDC.isArm64 {
os_log("Displays don't need reconfig after sober but might need AVServices update", type: .info)
DisplayManager.shared.updateArm64AVServices()
self.job(start: true)
}
}
}
private func job(start: Bool = false) {
guard !(self.jobRunning && start) else {
return
}
if self.sleepID == 0, self.reconfigureID == 0 {
if !self.jobRunning {
os_log("MonitorControl job started.", type: .debug)
self.jobRunning = true
}
var refreshedSomething = false
for display in DisplayManager.shared.displays {
let delta = display.refreshBrightness()
if delta != 0 {
refreshedSomething = true
if prefs.bool(forKey: PrefKey.enableBrightnessSync.rawValue) {
for targetDisplay in DisplayManager.shared.displays where targetDisplay != display {
os_log("Updating delta from display %{public}@ to display %{public}@", type: .debug, String(display.identifier), String(targetDisplay.identifier))
let newValue = max(0, min(1, targetDisplay.getBrightness() + delta))
_ = targetDisplay.setBrightness(newValue)
if let slider = targetDisplay.sliderHandler[.brightness] {
slider.setValue(newValue, displayID: targetDisplay.identifier)
}
}
}
}
}
let nextRefresh = refreshedSomething ? 0.1 : 1.0
DispatchQueue.main.asyncAfter(deadline: .now() + nextRefresh) {
self.job()
}
} else {
self.jobRunning = false
os_log("MonitorControl job died because of sleep or reconfiguration.", type: .info)
}
}
@objc private func colorSyncSettingsChanged() {
CGDisplayRestoreColorSyncSettings()
self.displayReconfigured()
}
func handleListenForChanged() {
self.checkPermissions()
self.updateMediaKeyTap()
}
func preferenceReset() {
os_log("Resetting all preferences.")
if !prefs.bool(forKey: PrefKey.disableSoftwareFallback.rawValue) || !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue) {
DisplayManager.shared.resetSwBrightnessForAllDisplays(async: false)
}
if let bundleID = Bundle.main.bundleIdentifier {
prefs.removePersistentDomain(forName: bundleID)
}
app.statusItem.isVisible = true
self.setDefaultPrefs()
self.checkPermissions()
self.updateMediaKeyTap()
self.configure(firstrun: true)
}
@objc func audioDeviceChanged() {
if let defaultDevice = self.coreAudio.defaultOutputDevice {
os_log("Default output device changed to “%{public}@”.", type: .debug, defaultDevice.name)
os_log("Can device set its own volume? %{public}@", type: .debug, defaultDevice.canSetVirtualMasterVolume(scope: .output).description)
}
self.updateMediaKeyTap()
}
func updateMediaKeyTap() {
MediaKeyTap.useAlternateBrightnessKeys = !prefs.bool(forKey: PrefKey.disableAltBrightnessKeys.rawValue)
self.mediaKeyTap.updateMediaKeyTap()
}
func setStartAtLogin(enabled: Bool) {
let identifier = "\(Bundle.main.bundleIdentifier!)Helper" as CFString
SMLoginItemSetEnabled(identifier, enabled)
}
func getSystemPreferences() -> [String: AnyObject]? {
var propertyListFormat = PropertyListSerialization.PropertyListFormat.xml
let plistPath = NSString(string: "~/Library/Preferences/.GlobalPreferences.plist").expandingTildeInPath
guard let plistXML = FileManager.default.contents(atPath: plistPath) else {
return nil
}
do {
return try PropertyListSerialization.propertyList(from: plistXML, options: .mutableContainersAndLeaves, format: &propertyListFormat) as? [String: AnyObject]
} catch {
os_log("Error reading system prefs plist: %{public}@", type: .info, error.localizedDescription)
return nil
}
}
func macOS10() -> Bool {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return false
} else {
return true
}
}
}

View file

@ -1,10 +1,4 @@
//
// Arm64DDC.swift
// MonitorControl
//
// Created by @waydabber, 2021
// Copyright © 2021. MonitorControl. All rights reserved.
//
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Foundation
import IOKit
@ -84,7 +78,7 @@ class Arm64DDC: NSObject {
return success
}
var checkedsend: [UInt8] = [UInt8(0x80 | (send.count + 1)), UInt8(send.count)] + send + [0]
checkedsend[checkedsend.count - 1] = Utils.checksum(chk: send.count == 1 ? 0x6E : 0x6E ^ 0x51, data: &checkedsend, start: 0, end: checkedsend.count - 2)
checkedsend[checkedsend.count - 1] = self.checksum(chk: send.count == 1 ? 0x6E : 0x6E ^ 0x51, data: &checkedsend, start: 0, end: checkedsend.count - 2)
for _ in 1 ... numOfRetryAttemps {
for _ in 1 ... numofWriteCycles {
usleep(writeSleepTime)
@ -95,7 +89,7 @@ class Arm64DDC: NSObject {
if reply.count > 0 {
usleep(readSleepTime)
if IOAVServiceReadI2C(service, 0x37, 0x51, &reply, UInt32(reply.count)) == 0 {
if Utils.checksum(chk: 0x50, data: &reply, start: 0, end: reply.count - 2) == reply[reply.count - 1] {
if self.checksum(chk: 0x50, data: &reply, start: 0, end: reply.count - 2) == reply[reply.count - 1] {
success = true
} else {
success = false
@ -126,6 +120,15 @@ class Arm64DDC: NSObject {
private static let MAX_MATCH_SCORE: Int = 13
// DDC checksum calculator
private static func checksum(chk: UInt8, data: inout [UInt8], start: Int, end: Int) -> UInt8 {
var chkd: UInt8 = chk
for i in start ... end {
chkd ^= data[i]
}
return chkd
}
// Scores the likelihood of a display match based on EDID UUID, ProductName and SerialNumber from in ioreg, compared to DisplayCreateInfoDictionary.
private static func ioregMatchScore(displayID: CGDirectDisplayID, ioregEdidUUID: String, ioregProductName: String = "", ioregSerialNumber: Int64 = 0, serviceLocation: Int = 0) -> Int {
var matchScore: Int = 0

View file

@ -1,3 +1,5 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
#pragma once
#import <Foundation/Foundation.h>
@ -14,6 +16,8 @@ extern CFDictionaryRef CoreDisplay_DisplayCreateInfoDictionary(CGDirectDisplayID
extern void DisplayServicesBrightnessChanged(CGDirectDisplayID display, double brightness);
extern int DisplayServicesGetBrightness(CGDirectDisplayID display, float *brightness);
extern int DisplayServicesSetBrightness(CGDirectDisplayID display, float brightness);
extern int DisplayServicesGetLinearBrightness(CGDirectDisplayID display, float *brightness);
extern int DisplayServicesSetLinearBrightness(CGDirectDisplayID display, float brightness);
extern void CGSServiceForDisplayNumber(CGDirectDisplayID display, io_service_t* service);

View file

@ -0,0 +1,476 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import CoreGraphics
import os.log
class DisplayManager {
public static let shared = DisplayManager()
var displays: [Display] = []
var audioControlTargetDisplays: [OtherDisplay] = []
let ddcQueue = DispatchQueue(label: "DDC queue")
let gammaActivityEnforcer = NSWindow(contentRect: .init(origin: NSPoint(x: 0, y: 0), size: .init(width: DEBUG_GAMMA_ENFORCER ? 15 : 1, height: DEBUG_GAMMA_ENFORCER ? 15 : 1)), styleMask: [], backing: .buffered, defer: false)
func createGammaActivityEnforcer() {
self.gammaActivityEnforcer.title = "Monior Control Gamma Activity Enforcer"
self.gammaActivityEnforcer.isMovableByWindowBackground = false
self.gammaActivityEnforcer.backgroundColor = DEBUG_GAMMA_ENFORCER ? .red : .black
self.gammaActivityEnforcer.ignoresMouseEvents = true
self.gammaActivityEnforcer.level = .screenSaver
self.gammaActivityEnforcer.orderFrontRegardless()
self.gammaActivityEnforcer.collectionBehavior = [.stationary, .canJoinAllSpaces]
os_log("Gamma activity enforcer created.", type: .debug)
}
func enforceGammaActivity() {
if self.gammaActivityEnforcer.alphaValue == 1 * (DEBUG_GAMMA_ENFORCER ? 0.5 : 0.01) {
self.gammaActivityEnforcer.alphaValue = 2 * (DEBUG_GAMMA_ENFORCER ? 0.5 : 0.01)
} else {
self.gammaActivityEnforcer.alphaValue = 1 * (DEBUG_GAMMA_ENFORCER ? 0.5 : 0.01)
}
}
func moveGammaActivityEnforcer(displayID: CGDirectDisplayID) {
if let screen = DisplayManager.getByDisplayID(displayID: DisplayManager.resolveEffectiveDisplayID(displayID)) {
self.gammaActivityEnforcer.setFrameOrigin(screen.frame.origin)
}
self.gammaActivityEnforcer.orderFrontRegardless()
}
internal var shades: [CGDirectDisplayID: NSWindow] = [:]
internal var shadeGrave: [NSWindow] = []
func isDisqualifiedFromShade(_ displayID: CGDirectDisplayID) -> Bool { // We ban mirror members from shade control as it might lead to double control
return (CGDisplayIsInHWMirrorSet(displayID) != 0 || CGDisplayIsInMirrorSet(displayID) != 0) ? true : false
}
internal func createShadeOnDisplay(displayID: CGDirectDisplayID) -> NSWindow? {
if let screen = DisplayManager.getByDisplayID(displayID: displayID) {
let shade = NSWindow(contentRect: .init(origin: NSPoint(x: 0, y: 0), size: .init(width: 10, height: 1)), styleMask: [], backing: .buffered, defer: false)
shade.title = "Monitor Control Window Shade for Display " + String(displayID)
shade.isMovableByWindowBackground = false
shade.backgroundColor = .black
shade.ignoresMouseEvents = true
shade.level = NSWindow.Level(rawValue: Int(CGShieldingWindowLevel()))
shade.alphaValue = 0
shade.orderFrontRegardless()
shade.collectionBehavior = [.stationary, .canJoinAllSpaces, .ignoresCycle]
shade.setFrame(screen.frame, display: true)
os_log("Window shade created for display %{public}@", type: .debug, String(displayID))
return shade
}
return nil
}
func getShade(displayID: CGDirectDisplayID) -> NSWindow? {
guard !self.isDisqualifiedFromShade(displayID) else {
return nil
}
if let shade = shades[displayID] {
return shade
} else {
if let shade = self.createShadeOnDisplay(displayID: displayID) {
self.shades[displayID] = shade
return shade
}
}
return nil
}
func destroyAllShades() -> Bool {
var ret = false
for displayID in self.shades.keys {
os_log("Attempting to destory shade for display %{public}@", type: .debug, String(displayID))
if self.destroyShade(displayID: displayID) {
ret = true
}
}
if ret {
os_log("Destroyed all shades.", type: .debug)
} else {
os_log("No shades were found to be destroyed.", type: .debug)
}
return ret
}
func destroyShade(displayID: CGDirectDisplayID) -> Bool {
if let shade = shades[displayID] {
os_log("Destroying shade for display %{public}@", type: .debug, String(displayID))
self.shadeGrave.append(shade)
self.shades.removeValue(forKey: displayID)
shade.close()
return true
}
return false
}
func updateShade(displayID: CGDirectDisplayID) -> Bool {
guard !self.isDisqualifiedFromShade(displayID) else {
return false
}
if let screen = DisplayManager.getByDisplayID(displayID: displayID) {
if let shade = getShade(displayID: displayID) {
shade.setFrame(screen.frame, display: true)
return true
}
}
return false
}
func getShadeAlpha(displayID: CGDirectDisplayID) -> Float? {
guard !self.isDisqualifiedFromShade(displayID) else {
return 1
}
if let shade = getShade(displayID: displayID) {
return Float(shade.alphaValue)
} else {
return 1
}
}
func setShadeAlpha(value: Float, displayID: CGDirectDisplayID) -> Bool {
guard !self.isDisqualifiedFromShade(displayID) else {
return false
}
if let shade = getShade(displayID: displayID) {
shade.alphaValue = CGFloat(value)
return true
}
return false
}
func configureDisplays() {
self.clearDisplays()
var onlineDisplayIDs = [CGDirectDisplayID](repeating: 0, count: 16)
var displayCount: UInt32 = 0
guard CGGetOnlineDisplayList(16, &onlineDisplayIDs, &displayCount) == .success else {
os_log("Unable to get display list.", type: .info)
return
}
for onlineDisplayID in onlineDisplayIDs where onlineDisplayID != 0 {
let name = DisplayManager.getDisplayNameByID(displayID: onlineDisplayID)
let id = onlineDisplayID
let vendorNumber = CGDisplayVendorNumber(onlineDisplayID)
let modelNumber = CGDisplayModelNumber(onlineDisplayID)
var isVirtual: Bool = false
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
if let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(onlineDisplayID))?.takeRetainedValue() as NSDictionary?) {
let isVirtualDevice = dictionary["kCGDisplayIsVirtualDevice"] as? Bool
let displayIsAirplay = dictionary["kCGDisplayIsAirPlay"] as? Bool
if isVirtualDevice ?? displayIsAirplay ?? false {
isVirtual = true
}
}
}
if !DEBUG_SW, DisplayManager.isAppleDisplay(displayID: onlineDisplayID) { // MARK: (point of interest for testing)
let appleDisplay = AppleDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
os_log("Apple display found - %{public}@", type: .info, "ID: \(appleDisplay.identifier) Name: \(appleDisplay.name) (Vendor: \(appleDisplay.vendorNumber ?? 0), Model: \(appleDisplay.modelNumber ?? 0))")
self.addDisplay(display: appleDisplay)
} else {
let otherDisplay = OtherDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
os_log("Other display found - %{public}@", type: .info, "ID: \(otherDisplay.identifier) Name: \(otherDisplay.name) (Vendor: \(otherDisplay.vendorNumber ?? 0), Model: \(otherDisplay.modelNumber ?? 0))")
self.addDisplay(display: otherDisplay)
}
}
}
func setupOtherDisplays(firstrun: Bool = false) {
for otherDisplay in self.getOtherDisplays() {
if !otherDisplay.isSw(), !otherDisplay.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) {
otherDisplay.setupCurrentAndMaxValues(command: .audioSpeakerVolume, firstrun: firstrun)
}
if !otherDisplay.isSw(), !otherDisplay.readPrefAsBool(key: .unavailableDDC, for: .contrast) {
otherDisplay.setupCurrentAndMaxValues(command: .contrast, firstrun: firstrun)
}
if (!otherDisplay.isSw() && !otherDisplay.readPrefAsBool(key: .unavailableDDC, for: .brightness)) || otherDisplay.isSw() {
otherDisplay.setupCurrentAndMaxValues(command: .brightness, firstrun: firstrun)
otherDisplay.brightnessSyncSourceValue = otherDisplay.readPrefAsFloat(for: .brightness)
}
}
}
func normalizedName(_ name: String) -> String {
var normalizedName = name.replacingOccurrences(of: "(", with: "")
normalizedName = normalizedName.replacingOccurrences(of: ")", with: "")
normalizedName = normalizedName.replacingOccurrences(of: " ", with: "")
for i in 0 ... 9 {
normalizedName = normalizedName.replacingOccurrences(of: String(i), with: "")
}
return normalizedName
}
func updateAudioControlTargetDisplays(deviceName: String) -> Int {
self.audioControlTargetDisplays.removeAll()
os_log("Detecting displays for audio control via audio device name matching...", type: .debug)
var numOfAddedDisplays: Int = 0
for ddcCapableDisplay in self.getDdcCapableDisplays() {
var displayAudioDeviceName = ddcCapableDisplay.readPrefAsString(key: .audioDeviceNameOverride)
if displayAudioDeviceName == "" {
displayAudioDeviceName = DisplayManager.getDisplayRawNameByID(displayID: ddcCapableDisplay.identifier)
}
if self.normalizedName(displayAudioDeviceName) == self.normalizedName(deviceName) {
self.audioControlTargetDisplays.append(ddcCapableDisplay)
numOfAddedDisplays += 1
os_log("Added display for audio control - %{public}@", type: .debug, ddcCapableDisplay.name)
}
}
return numOfAddedDisplays
}
func getOtherDisplays() -> [OtherDisplay] {
return self.displays.compactMap { $0 as? OtherDisplay }
}
func getAllDisplays() -> [Display] {
return self.displays
}
func getDdcCapableDisplays() -> [OtherDisplay] {
return self.displays.compactMap { display -> OtherDisplay? in
if let otherDisplay = display as? OtherDisplay, !otherDisplay.isSw() {
return otherDisplay
} else { return nil }
}
}
func getAppleDisplays() -> [AppleDisplay] {
return self.displays.compactMap { $0 as? AppleDisplay }
}
func getBuiltInDisplay() -> Display? {
return self.displays.first { CGDisplayIsBuiltin($0.identifier) != 0 }
}
func getCurrentDisplay(byFocus: Bool = false) -> Display? {
if byFocus {
guard let mainDisplayID = NSScreen.main?.displayID else {
return nil
}
return self.displays.first { $0.identifier == mainDisplayID }
} else {
let mouseLocation = NSEvent.mouseLocation
let screens = NSScreen.screens
if let screenWithMouse = (screens.first { NSMouseInRect(mouseLocation, $0.frame, false) }) {
return self.displays.first { $0.identifier == screenWithMouse.displayID }
}
return nil
}
}
func addDisplay(display: Display) {
self.displays.append(display)
}
func clearDisplays() {
self.displays = []
}
func addDisplayCounterSuffixes() {
var nameDisplays: [String: [Display]] = [:]
for display in self.displays {
if nameDisplays[display.name] != nil {
nameDisplays[display.name]?.append(display)
} else {
nameDisplays[display.name] = [display]
}
}
for nameDisplayKey in nameDisplays.keys where nameDisplays[nameDisplayKey]?.count ?? 0 > 1 {
for i in 0 ... (nameDisplays[nameDisplayKey]?.count ?? 1) - 1 {
if let display = nameDisplays[nameDisplayKey]?[i] {
display.name = "" + display.name + " (" + String(i + 1) + ")"
}
}
}
}
func updateArm64AVServices() {
if Arm64DDC.isArm64 {
os_log("arm64 AVService update requested", type: .info)
var displayIDs: [CGDirectDisplayID] = []
for otherDisplay in self.getOtherDisplays() {
displayIDs.append(otherDisplay.identifier)
}
for serviceMatch in Arm64DDC.getServiceMatches(displayIDs: displayIDs) {
for otherDisplay in self.getOtherDisplays() where otherDisplay.identifier == serviceMatch.displayID && serviceMatch.service != nil {
otherDisplay.arm64avService = serviceMatch.service
os_log("Display service match successful for display %{public}@", type: .info, String(serviceMatch.displayID))
if serviceMatch.isDiscouraged {
os_log("Display %{public}@ is flagged as discouraged by Arm64DDC.", type: .info, String(serviceMatch.displayID))
otherDisplay.isDiscouraged = serviceMatch.isDiscouraged
} else {
otherDisplay.arm64ddc = DEBUG_SW ? false : true // MARK: (point of interest when testing)
}
}
}
os_log("AVService update done", type: .info)
}
}
func resetSwBrightnessForAllDisplays(settingsOnly: Bool = false, async: Bool = false) {
for otherDisplay in self.getOtherDisplays() {
if !settingsOnly {
_ = otherDisplay.setSwBrightness(1, smooth: async)
otherDisplay.smoothBrightnessTransient = 1
} else {
otherDisplay.savePref(1, key: .SwBrightness)
otherDisplay.smoothBrightnessTransient = 1
}
if otherDisplay.isSw() {
otherDisplay.savePref(1, for: .brightness)
}
}
}
func restoreSwBrightnessForAllDisplays(async: Bool = false) {
for otherDisplay in self.getOtherDisplays() {
if (otherDisplay.readPrefAsFloat(for: .brightness) == 0 && !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue)) || (otherDisplay.readPrefAsFloat(for: .brightness) < otherDisplay.combinedBrightnessSwitchingValue() && !prefs.bool(forKey: PrefKey.separateCombinedScale.rawValue) && !prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue)) || otherDisplay.isSw() {
let savedPrefValue = otherDisplay.readPrefAsFloat(key: .SwBrightness)
if otherDisplay.getSwBrightness() != savedPrefValue {
OSDUtils.popEmptyOsd(displayID: otherDisplay.identifier, command: Command.brightness) // This will give the user a hint why is the brightness suddenly changes and also give screen activity to counter the 'no gamma change when there is no screen activity' issue on some macs
}
otherDisplay.savePref(otherDisplay.getSwBrightness(), key: .SwBrightness)
os_log("Restoring sw brightness to %{public}@ on other display %{public}@", type: .debug, String(savedPrefValue), String(otherDisplay.identifier))
_ = otherDisplay.setSwBrightness(savedPrefValue, smooth: async)
if otherDisplay.isSw(), let slider = otherDisplay.sliderHandler[.brightness] {
os_log("Restoring sw slider to %{public}@ for other display %{public}@", type: .debug, String(savedPrefValue), String(otherDisplay.identifier))
slider.setValue(savedPrefValue, displayID: otherDisplay.identifier)
}
} else {
_ = otherDisplay.setSwBrightness(1)
}
}
}
func getAffectedDisplays(isBrightness: Bool = false, isVolume: Bool = false, isContrast _: Bool = false) -> [Display]? {
var affectedDisplays: [Display]
let allDisplays = self.getAllDisplays()
var currentDisplay: Display?
if isBrightness {
if prefs.bool(forKey: PrefKey.allScreensBrightness.rawValue) {
affectedDisplays = allDisplays
return affectedDisplays
}
currentDisplay = self.getCurrentDisplay(byFocus: prefs.bool(forKey: PrefKey.useFocusInsteadOfMouse.rawValue))
}
if isVolume {
if prefs.bool(forKey: PrefKey.allScreensVolume.rawValue) {
affectedDisplays = allDisplays
return affectedDisplays
} else if prefs.bool(forKey: PrefKey.useAudioDeviceNameMatching.rawValue) {
return self.audioControlTargetDisplays
}
currentDisplay = self.getCurrentDisplay(byFocus: false)
}
if let currentDisplay = currentDisplay {
affectedDisplays = [currentDisplay]
if CGDisplayIsInHWMirrorSet(currentDisplay.identifier) != 0 || CGDisplayIsInMirrorSet(currentDisplay.identifier) != 0, CGDisplayMirrorsDisplay(currentDisplay.identifier) == 0 {
for display in allDisplays where CGDisplayMirrorsDisplay(display.identifier) == currentDisplay.identifier {
affectedDisplays.append(display)
}
}
} else {
affectedDisplays = []
}
return affectedDisplays
}
static func engageMirror() -> Bool {
var onlineDisplayIDs = [CGDirectDisplayID](repeating: 0, count: 16)
var displayCount: UInt32 = 0
guard CGGetOnlineDisplayList(16, &onlineDisplayIDs, &displayCount) == .success, displayCount > 1 else {
return false
}
// Break display mirror if there is any
var mirrorBreak = false
var displayConfigRef: CGDisplayConfigRef?
for onlineDisplayID in onlineDisplayIDs where onlineDisplayID != 0 {
if CGDisplayIsInHWMirrorSet(onlineDisplayID) != 0 || CGDisplayIsInMirrorSet(onlineDisplayID) != 0 {
if mirrorBreak == false {
CGBeginDisplayConfiguration(&displayConfigRef)
}
CGConfigureDisplayMirrorOfDisplay(displayConfigRef, onlineDisplayID, kCGNullDirectDisplay)
mirrorBreak = true
}
}
if mirrorBreak {
CGCompleteDisplayConfiguration(displayConfigRef, CGConfigureOption.permanently)
return true
}
// Build display mirror
var mainDisplayId = kCGNullDirectDisplay
for onlineDisplayID in onlineDisplayIDs where onlineDisplayID != 0 {
if CGDisplayIsBuiltin(onlineDisplayID) == 0, mainDisplayId == kCGNullDirectDisplay {
mainDisplayId = onlineDisplayID
}
}
guard mainDisplayId != kCGNullDirectDisplay else {
return false
}
CGBeginDisplayConfiguration(&displayConfigRef)
for onlineDisplayID in onlineDisplayIDs where onlineDisplayID != 0 && onlineDisplayID != mainDisplayId {
CGConfigureDisplayMirrorOfDisplay(displayConfigRef, onlineDisplayID, mainDisplayId)
}
CGCompleteDisplayConfiguration(displayConfigRef, CGConfigureOption.permanently)
return true
}
static func resolveEffectiveDisplayID(_ displayID: CGDirectDisplayID) -> CGDirectDisplayID {
var realDisplayID = displayID
if CGDisplayIsInHWMirrorSet(displayID) != 0 || CGDisplayIsInMirrorSet(displayID) != 0 {
let mirroredDisplayID = CGDisplayMirrorsDisplay(displayID)
if mirroredDisplayID != 0 {
realDisplayID = mirroredDisplayID
}
}
return realDisplayID
}
static func isAppleDisplay(displayID: CGDirectDisplayID) -> Bool {
var brightness: Float = -1
let ret = DisplayServicesGetBrightness(displayID, &brightness)
if ret == 0, brightness >= 0 { // If brightness read appears to be successful using DisplayServices then it should be an Apple display
return true
}
if CGDisplayIsBuiltin(displayID) != 0 { // If built-in display then it should be Apple (except for hackintosh notebooks...)
return true
}
return false
}
static func getByDisplayID(displayID: CGDirectDisplayID) -> NSScreen? {
return NSScreen.screens.first { $0.displayID == displayID }
}
static func getDisplayRawNameByID(displayID: CGDirectDisplayID) -> String {
let defaultName: String = ""
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
if let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(displayID))?.takeRetainedValue() as NSDictionary?), let nameList = dictionary["DisplayProductName"] as? [String: String], let name = nameList["en_US"] ?? nameList.first?.value {
return name
}
}
if let screen = getByDisplayID(displayID: displayID) {
return screen.displayName ?? defaultName
}
return defaultName
}
static func getDisplayNameByID(displayID: CGDirectDisplayID) -> String {
let defaultName: String = NSLocalizedString("Unknown", comment: "Unknown display name")
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
if let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(displayID))?.takeRetainedValue() as NSDictionary?), let nameList = dictionary["DisplayProductName"] as? [String: String], var name = nameList[Locale.current.identifier] ?? nameList["en_US"] ?? nameList.first?.value {
if CGDisplayIsInHWMirrorSet(displayID) != 0 || CGDisplayIsInMirrorSet(displayID) != 0 {
let mirroredDisplayID = CGDisplayMirrorsDisplay(displayID)
if mirroredDisplayID != 0, let dictionary = ((CoreDisplay_DisplayCreateInfoDictionary(mirroredDisplayID))?.takeRetainedValue() as NSDictionary?), let nameList = dictionary["DisplayProductName"] as? [String: String], let mirroredName = nameList[Locale.current.identifier] ?? nameList["en_US"] ?? nameList.first?.value {
name.append("~" + mirroredName)
}
}
return name
}
}
if let screen = getByDisplayID(displayID: displayID) { // MARK: This, and NSScreen+Extension.swift will not be needed when we drop MacOS 10 support.
return screen.localizedName
}
return defaultName
}
}

View file

@ -1,11 +1,5 @@
//
// IntelDDC.swift
// MonitorControl
//
// Original code: https://github.com/reitermarkus/DDC.swift
// Adapted for MonitorControl
// Credits to @reitermarkus, @waydabber
//
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
// Adapted from IntelDDC.swift, @reitermarkus
import Foundation
import IOKit.i2c

View file

@ -0,0 +1,167 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Foundation
import KeyboardShortcuts
import os.log
class KeyboardShortcutsManager {
var initialKeyRepeat = 0.24 // This should come from UserDefaults instead, but it's ok for now.
var keyRepeat = 0.032 // This should come from UserDefaults instead, but it's ok for now.
var currentCommand = KeyboardShortcuts.Name.none
var isFirstKeypress = false
var currentEventId = 0
var isHold = false
init() {
KeyboardShortcuts.onKeyDown(for: .brightnessUp) { [self] in
self.engage(KeyboardShortcuts.Name.brightnessUp)
}
KeyboardShortcuts.onKeyDown(for: .brightnessDown) { [self] in
self.engage(KeyboardShortcuts.Name.brightnessDown)
}
KeyboardShortcuts.onKeyDown(for: .contrastUp) { [self] in
self.engage(KeyboardShortcuts.Name.contrastUp)
}
KeyboardShortcuts.onKeyDown(for: .contrastDown) { [self] in
self.engage(KeyboardShortcuts.Name.contrastDown)
}
KeyboardShortcuts.onKeyDown(for: .volumeUp) { [self] in
self.engage(KeyboardShortcuts.Name.volumeUp)
}
KeyboardShortcuts.onKeyDown(for: .volumeDown) { [self] in
self.engage(KeyboardShortcuts.Name.volumeDown)
}
KeyboardShortcuts.onKeyDown(for: .mute) { [self] in
self.mute()
}
KeyboardShortcuts.onKeyUp(for: .brightnessUp) { [self] in
disengage()
}
KeyboardShortcuts.onKeyUp(for: .brightnessDown) { [self] in
disengage()
}
KeyboardShortcuts.onKeyUp(for: .contrastUp) { [self] in
disengage()
}
KeyboardShortcuts.onKeyUp(for: .contrastDown) { [self] in
disengage()
}
KeyboardShortcuts.onKeyUp(for: .volumeUp) { [self] in
disengage()
}
KeyboardShortcuts.onKeyUp(for: .volumeDown) { [self] in
disengage()
}
}
func engage(_ shortcut: KeyboardShortcuts.Name) {
self.initialKeyRepeat = UserDefaults.standard.double(forKey: "InitialKeyRepeat") * 0.014
self.keyRepeat = UserDefaults.standard.double(forKey: "KeyRepeat") * 0.014
self.currentCommand = shortcut
self.isFirstKeypress = true
self.isHold = true
self.currentEventId += 1
self.apply(shortcut, eventId: self.currentEventId)
}
func disengage() {
self.isHold = false
self.isFirstKeypress = false
self.currentCommand = KeyboardShortcuts.Name.none
}
func apply(_ shortcut: KeyboardShortcuts.Name, eventId: Int) {
guard app.sleepID == 0, app.reconfigureID == 0 else {
self.disengage()
return
}
guard self.currentCommand == shortcut, self.isHold, eventId == self.currentEventId else {
if [KeyboardShortcuts.Name.volumeUp, KeyboardShortcuts.Name.volumeDown].contains(shortcut) {
self.volume(isUp: true, isPressed: false)
}
return
}
if self.isFirstKeypress {
self.isFirstKeypress = false
DispatchQueue.main.asyncAfter(deadline: .now() + self.initialKeyRepeat) {
self.apply(shortcut, eventId: eventId)
}
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + self.keyRepeat) {
self.apply(shortcut, eventId: eventId)
}
}
switch shortcut {
case KeyboardShortcuts.Name.brightnessUp: self.brightness(isUp: true)
case KeyboardShortcuts.Name.brightnessDown: self.brightness(isUp: false)
case KeyboardShortcuts.Name.contrastUp: self.contrast(isUp: true)
case KeyboardShortcuts.Name.contrastDown: self.contrast(isUp: false)
case KeyboardShortcuts.Name.volumeUp: self.volume(isUp: true, isPressed: true)
case KeyboardShortcuts.Name.volumeDown: self.volume(isUp: false, isPressed: true)
default: break
}
}
func brightness(isUp: Bool) {
guard let affectedDisplays = DisplayManager.shared.getAffectedDisplays(isBrightness: true, isVolume: false), [KeyboardBrightness.custom.rawValue, KeyboardBrightness.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardBrightness.rawValue)) else {
self.disengage()
return
}
for display in affectedDisplays where !display.readPrefAsBool(key: .isDisabled) {
var isAnyDisplayInSwAfterBrightnessMode: Bool = false
for display in affectedDisplays where ((display as? OtherDisplay)?.isSwBrightnessNotDefault() ?? false) && !((display as? OtherDisplay)?.isSw() ?? false) && prefs.bool(forKey: PrefKey.separateCombinedScale.rawValue) {
isAnyDisplayInSwAfterBrightnessMode = true
}
if !(isAnyDisplayInSwAfterBrightnessMode && !(((display as? OtherDisplay)?.isSwBrightnessNotDefault() ?? false) && !((display as? OtherDisplay)?.isSw() ?? false))) {
display.stepBrightness(isUp: isUp, isSmallIncrement: prefs.bool(forKey: PrefKey.useFineScaleBrightness.rawValue))
}
}
}
func contrast(isUp: Bool) {
guard let affectedDisplays = DisplayManager.shared.getAffectedDisplays(isBrightness: true, isVolume: false), [KeyboardBrightness.custom.rawValue, KeyboardBrightness.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardBrightness.rawValue)) else {
self.disengage()
return
}
for display in affectedDisplays where !display.readPrefAsBool(key: .isDisabled) {
if let otherDisplay = display as? OtherDisplay {
otherDisplay.stepContrast(isUp: isUp, isSmallIncrement: prefs.bool(forKey: PrefKey.useFineScaleBrightness.rawValue))
}
}
}
func volume(isUp: Bool, isPressed: Bool) {
guard let affectedDisplays = DisplayManager.shared.getAffectedDisplays(isBrightness: false, isVolume: true), [KeyboardVolume.custom.rawValue, KeyboardVolume.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardVolume.rawValue)) else {
self.disengage()
return
}
var wasNotIsPressedVolumeSentAlready = false
for display in affectedDisplays where !display.readPrefAsBool(key: .isDisabled) {
if let display = display as? OtherDisplay {
if isPressed {
display.stepVolume(isUp: isUp, isSmallIncrement: prefs.bool(forKey: PrefKey.useFineScaleVolume.rawValue))
} else if !wasNotIsPressedVolumeSentAlready, !display.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) {
display.playVolumeChangedSound()
wasNotIsPressedVolumeSentAlready = true
}
}
}
}
func mute() {
guard app.sleepID == 0, app.reconfigureID == 0, [KeyboardVolume.custom.rawValue, KeyboardVolume.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardVolume.rawValue)), let affectedDisplays = DisplayManager.shared.getAffectedDisplays(isBrightness: false, isVolume: true) else {
return
}
var wasNotIsPressedVolumeSentAlready = false
for display in affectedDisplays where !display.readPrefAsBool(key: .isDisabled) {
if let display = display as? OtherDisplay {
display.toggleMute()
if !wasNotIsPressedVolumeSentAlready, display.readPrefAsInt(for: .audioMuteScreenBlank) != 1, !display.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) {
display.playVolumeChangedSound()
wasNotIsPressedVolumeSentAlready = true
}
}
}
}
}

View file

@ -0,0 +1,228 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import AudioToolbox
import Cocoa
import Foundation
import MediaKeyTap
import os.log
class MediaKeyTapManager: MediaKeyTapDelegate {
var mediaKeyTap: MediaKeyTap?
var keyRepeatTimers: [MediaKey: Timer] = [:]
func handle(mediaKey: MediaKey, event: KeyEvent?, modifiers: NSEvent.ModifierFlags?) {
let isPressed = event?.keyPressed ?? true
let isRepeat = event?.keyRepeat ?? false
let isControl = modifiers?.isSuperset(of: NSEvent.ModifierFlags([.control])) ?? false
let isCommand = modifiers?.isSuperset(of: NSEvent.ModifierFlags([.command])) ?? false
let isOption = modifiers?.isSuperset(of: NSEvent.ModifierFlags([.option])) ?? false
let isShift = modifiers?.isSuperset(of: NSEvent.ModifierFlags([.shift])) ?? false
if isPressed, isCommand, !isControl, mediaKey == .brightnessDown, DisplayManager.engageMirror() {
return
}
guard app.sleepID == 0, app.reconfigureID == 0 else {
self.showOSDLock(mediaKey)
return
}
if isPressed, self.handleOpenPrefPane(mediaKey: mediaKey, event: event, modifiers: modifiers) {
return
}
var isSmallIncrement = isOption && isShift
let isContrast = isControl && isOption && isCommand
if [.brightnessUp, .brightnessDown].contains(mediaKey), prefs.bool(forKey: PrefKey.useFineScaleBrightness.rawValue) {
isSmallIncrement = !isSmallIncrement
}
if [.volumeUp, .volumeDown, .mute].contains(mediaKey), prefs.bool(forKey: PrefKey.useFineScaleVolume.rawValue) {
isSmallIncrement = !isSmallIncrement
}
if isPressed, isControl, !isOption, mediaKey == .brightnessUp || mediaKey == .brightnessDown {
self.handleDirectedBrightness(isCommandModifier: isCommand, isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
return
}
let oppositeKey: MediaKey? = self.oppositeMediaKey(mediaKey: mediaKey)
// If the opposite key to the one being held has an active timer, cancel it - we'll be going in the opposite direction
if let oppositeKey = oppositeKey, let oppositeKeyTimer = self.keyRepeatTimers[oppositeKey], oppositeKeyTimer.isValid {
oppositeKeyTimer.invalidate()
} else if let mediaKeyTimer = self.keyRepeatTimers[mediaKey], mediaKeyTimer.isValid {
// If there's already an active timer for the key being held down, let it run rather than executing it again
if isRepeat {
return
}
mediaKeyTimer.invalidate()
}
self.sendDisplayCommand(mediaKey: mediaKey, isRepeat: isRepeat, isSmallIncrement: isSmallIncrement, isPressed: isPressed, isContrast: isContrast)
}
func handleDirectedBrightness(isCommandModifier: Bool, isUp: Bool, isSmallIncrement: Bool) {
if isCommandModifier {
for otherDisplay in DisplayManager.shared.getOtherDisplays() {
otherDisplay.stepBrightness(isUp: isUp, isSmallIncrement: isSmallIncrement)
}
for appleDisplay in DisplayManager.shared.getAppleDisplays() where !appleDisplay.isBuiltIn() {
appleDisplay.stepBrightness(isUp: isUp, isSmallIncrement: isSmallIncrement)
}
return
} else if let internalDisplay = DisplayManager.shared.getBuiltInDisplay() as? AppleDisplay {
internalDisplay.stepBrightness(isUp: isUp, isSmallIncrement: isSmallIncrement)
return
}
}
private func showOSDLock(_ mediaKey: MediaKey) {
if [.brightnessUp, .brightnessDown].contains(mediaKey) {
OSDUtils.showOSDLockOnAllDisplays(osdImage: OSDUtils.OSDImage.brightness.rawValue)
}
if [.volumeUp, .volumeDown, .mute].contains(mediaKey) {
OSDUtils.showOSDLockOnAllDisplays(osdImage: OSDUtils.OSDImage.audioSpeaker.rawValue)
}
}
private func sendDisplayCommand(mediaKey: MediaKey, isRepeat: Bool, isSmallIncrement: Bool, isPressed: Bool, isContrast: Bool = false) {
self.sendDisplayCommandVolumeMute(mediaKey: mediaKey, isRepeat: isRepeat, isSmallIncrement: isSmallIncrement, isPressed: isPressed)
self.sendDisplayCommandBrightnessContrast(mediaKey: mediaKey, isRepeat: isRepeat, isSmallIncrement: isSmallIncrement, isPressed: isPressed, isContrast: isContrast)
}
private func sendDisplayCommandVolumeMute(mediaKey: MediaKey, isRepeat: Bool, isSmallIncrement: Bool, isPressed: Bool) {
guard [.volumeUp, .volumeDown, .mute].contains(mediaKey), app.sleepID == 0, app.reconfigureID == 0, let affectedDisplays = DisplayManager.shared.getAffectedDisplays(isBrightness: false, isVolume: true) else {
return
}
var wasNotIsPressedVolumeSentAlready = false
for display in affectedDisplays where !display.readPrefAsBool(key: .isDisabled) {
switch mediaKey {
case .mute:
// The mute key should not respond to press + hold or keyup
if !isRepeat, isPressed, let display = display as? OtherDisplay {
display.toggleMute()
if !wasNotIsPressedVolumeSentAlready, display.readPrefAsInt(for: .audioMuteScreenBlank) != 1, !display.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) {
display.playVolumeChangedSound()
wasNotIsPressedVolumeSentAlready = true
}
}
case .volumeUp, .volumeDown:
// volume only matters for other displays
if let display = display as? OtherDisplay {
if isPressed {
display.stepVolume(isUp: mediaKey == .volumeUp, isSmallIncrement: isSmallIncrement)
} else if !wasNotIsPressedVolumeSentAlready, !display.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) {
display.playVolumeChangedSound()
wasNotIsPressedVolumeSentAlready = true
}
}
default: continue
}
}
}
private func sendDisplayCommandBrightnessContrast(mediaKey: MediaKey, isRepeat _: Bool, isSmallIncrement: Bool, isPressed: Bool, isContrast: Bool = false) {
guard [.brightnessUp, .brightnessDown].contains(mediaKey), app.sleepID == 0, app.reconfigureID == 0, isPressed, let affectedDisplays = DisplayManager.shared.getAffectedDisplays(isBrightness: true, isVolume: false) else {
return
}
for display in affectedDisplays where !display.readPrefAsBool(key: .isDisabled) {
switch mediaKey {
case .brightnessUp:
if isContrast, let otherDisplay = display as? OtherDisplay {
otherDisplay.stepContrast(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
} else {
var isAnyDisplayInSwAfterBrightnessMode: Bool = false
for display in affectedDisplays where ((display as? OtherDisplay)?.isSwBrightnessNotDefault() ?? false) && !((display as? OtherDisplay)?.isSw() ?? false) && prefs.bool(forKey: PrefKey.separateCombinedScale.rawValue) {
isAnyDisplayInSwAfterBrightnessMode = true
}
if !(isAnyDisplayInSwAfterBrightnessMode && !(((display as? OtherDisplay)?.isSwBrightnessNotDefault() ?? false) && !((display as? OtherDisplay)?.isSw() ?? false))) {
display.stepBrightness(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
}
}
case .brightnessDown:
if isContrast, let otherDisplay = display as? OtherDisplay {
otherDisplay.stepContrast(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
} else {
display.stepBrightness(isUp: mediaKey == .brightnessUp, isSmallIncrement: isSmallIncrement)
}
default: continue
}
}
}
private func oppositeMediaKey(mediaKey: MediaKey) -> MediaKey? {
if mediaKey == .brightnessUp {
return .brightnessDown
} else if mediaKey == .brightnessDown {
return .brightnessUp
} else if mediaKey == .volumeUp {
return .volumeDown
} else if mediaKey == .volumeDown {
return .volumeUp
}
return nil
}
func updateMediaKeyTap() {
var keys: [MediaKey] = []
if [KeyboardBrightness.media.rawValue, KeyboardBrightness.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardBrightness.rawValue)) {
keys.append(contentsOf: [.brightnessUp, .brightnessDown])
}
if [KeyboardVolume.media.rawValue, KeyboardVolume.both.rawValue].contains(prefs.integer(forKey: PrefKey.keyboardVolume.rawValue)) {
keys.append(contentsOf: [.mute, .volumeUp, .volumeDown])
}
// Remove keys if no external displays are connected
var isInternalDisplayOnly = true
for display in DisplayManager.shared.getAllDisplays() where !display.isBuiltIn() {
isInternalDisplayOnly = false
}
if isInternalDisplayOnly {
let keysToDelete: [MediaKey] = [.volumeUp, .volumeDown, .mute, .brightnessUp, .brightnessDown]
keys.removeAll { keysToDelete.contains($0) }
}
// Remove volume related keys if audio device is controllable
if !isInternalDisplayOnly, let defaultAudioDevice = app.coreAudio.defaultOutputDevice {
let keysToDelete: [MediaKey] = [.volumeUp, .volumeDown, .mute]
if !prefs.bool(forKey: PrefKey.allScreensVolume.rawValue), prefs.bool(forKey: PrefKey.useAudioDeviceNameMatching.rawValue) {
if DisplayManager.shared.updateAudioControlTargetDisplays(deviceName: defaultAudioDevice.name) == 0 {
keys.removeAll { keysToDelete.contains($0) }
}
} else if defaultAudioDevice.canSetVirtualMasterVolume(scope: .output) == true {
keys.removeAll { keysToDelete.contains($0) }
}
}
self.mediaKeyTap?.stop()
// returning an empty array listens for all mediakeys in MediaKeyTap
if keys.count > 0 {
self.mediaKeyTap = MediaKeyTap(delegate: self, on: KeyPressMode.keyDownAndUp, for: keys, observeBuiltIn: true)
self.mediaKeyTap?.start()
}
}
func handleOpenPrefPane(mediaKey: MediaKey, event: KeyEvent?, modifiers: NSEvent.ModifierFlags?) -> Bool {
guard let modifiers = modifiers else { return false }
if !(modifiers.contains(.option) && !modifiers.contains(.shift) && !modifiers.contains(.control) && !modifiers.contains(.command)) {
return false
}
if event?.keyRepeat == true {
return false
}
switch mediaKey {
case .brightnessUp, .brightnessDown:
NSWorkspace.shared.open(URL(fileURLWithPath: "/System/Library/PreferencePanes/Displays.prefPane"))
case .mute, .volumeUp, .volumeDown:
NSWorkspace.shared.open(URL(fileURLWithPath: "/System/Library/PreferencePanes/Sound.prefPane"))
default:
return false
}
return true
}
static func acquirePrivileges() {
if !self.readPrivileges(prompt: true) {
let alert = NSAlert()
alert.messageText = NSLocalizedString("Shortcuts not available", comment: "Shown in the alert dialog")
alert.informativeText = NSLocalizedString("You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work", comment: "Shown in the alert dialog")
alert.runModal()
}
}
static func readPrivileges(prompt: Bool) -> Bool {
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: prompt]
let status = AXIsProcessTrustedWithOptions(options)
os_log("Reading Accessibility privileges - Current access status %{public}@", type: .info, String(status))
return status
}
}

View file

@ -0,0 +1,273 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import AppKit
import os.log
class MenuHandler: NSMenu, NSMenuDelegate {
var combinedSliderHandler: [Command: SliderHandler] = [:]
var lastMenuRelevantDisplayId: CGDirectDisplayID = 0
func clearMenu() {
var items: [NSMenuItem] = []
for i in 0 ..< self.items.count {
items.append(self.items[i])
}
for item in items {
self.removeItem(item)
}
self.combinedSliderHandler.removeAll()
}
func menuWillOpen(_: NSMenu) {
self.updateMenuRelevantDisplay()
}
func updateMenus(dontClose: Bool = false) {
os_log("Menu update initiated", type: .debug)
if !dontClose {
self.cancelTrackingWithoutAnimation()
}
app.statusItem.isVisible = prefs.integer(forKey: PrefKey.menuIcon.rawValue) == MenuIcon.show.rawValue ? true : false
self.clearMenu()
let currentDisplay = DisplayManager.shared.getCurrentDisplay()
var displays: [Display] = []
if !prefs.bool(forKey: PrefKey.hideAppleFromMenu.rawValue) {
displays.append(contentsOf: DisplayManager.shared.getAppleDisplays())
}
if !prefs.bool(forKey: PrefKey.disableSoftwareFallback.rawValue) {
displays.append(contentsOf: DisplayManager.shared.getOtherDisplays())
} else {
displays.append(contentsOf: DisplayManager.shared.getDdcCapableDisplays())
}
let relevant = prefs.bool(forKey: PrefKey.slidersRelevant.rawValue)
let combine = prefs.bool(forKey: PrefKey.slidersCombine.rawValue)
let numOfDisplays = displays.count
if numOfDisplays != 0 {
let asSubMenu: Bool = (displays.count > 3 && !relevant && !combine && app.macOS10()) ? true : false
var iterator = 0
for display in displays where !relevant || display == currentDisplay {
iterator += 1
if !relevant, !combine, iterator != 1, app.macOS10() {
self.insertItem(NSMenuItem.separator(), at: 0)
}
self.updateDisplayMenu(display: display, asSubMenu: asSubMenu, numOfDisplays: numOfDisplays)
}
if combine {
self.addCombinedDisplayMenuBlock()
}
}
self.addDefaultMenuOptions()
}
func addSliderItem(monitorSubMenu: NSMenu, sliderHandler: SliderHandler) {
let item = NSMenuItem()
item.view = sliderHandler.view
monitorSubMenu.insertItem(item, at: 0)
if app.macOS10() {
let sliderHeaderItem = NSMenuItem()
let attrs: [NSAttributedString.Key: Any] = [.foregroundColor: NSColor.systemGray, .font: NSFont.systemFont(ofSize: 12)]
sliderHeaderItem.attributedTitle = NSAttributedString(string: sliderHandler.title, attributes: attrs)
monitorSubMenu.insertItem(sliderHeaderItem, at: 0)
}
}
func setupMenuSliderHandler(command: Command, display: Display, title: String) -> SliderHandler {
if prefs.bool(forKey: PrefKey.slidersCombine.rawValue), let combinedHandler = self.combinedSliderHandler[command] {
combinedHandler.addDisplay(display)
display.sliderHandler[command] = combinedHandler
return combinedHandler
} else {
let sliderHandler = SliderHandler(display: display, command: command, title: title)
if prefs.bool(forKey: PrefKey.slidersCombine.rawValue) {
self.combinedSliderHandler[command] = sliderHandler
}
display.sliderHandler[command] = sliderHandler
return sliderHandler
}
}
func addDisplayMenuBlock(addedSliderHandlers: [SliderHandler], blockName: String, monitorSubMenu: NSMenu, numOfDisplays: Int, asSubMenu: Bool) {
if numOfDisplays > 1, !prefs.bool(forKey: PrefKey.slidersRelevant.rawValue), !DEBUG_MACOS10, #available(macOS 11.0, *) {
class BlockView: NSView {
override func draw(_: NSRect) {
let radius = CGFloat(11)
let outerMargin = CGFloat(15)
let blockRect = self.frame.insetBy(dx: outerMargin, dy: outerMargin / 2 + 2).offsetBy(dx: 0, dy: outerMargin / 2 * -1 + 7)
for i in 1 ... 5 {
let blockPath = NSBezierPath(roundedRect: blockRect.insetBy(dx: CGFloat(i) * -1, dy: CGFloat(i) * -1), xRadius: radius + CGFloat(i) * 0.5, yRadius: radius + CGFloat(i) * 0.5)
NSColor.black.withAlphaComponent(0.1 / CGFloat(i)).setStroke()
blockPath.stroke()
}
let blockPath = NSBezierPath(roundedRect: blockRect, xRadius: radius, yRadius: radius)
if [NSAppearance.Name.darkAqua, NSAppearance.Name.vibrantDark].contains(effectiveAppearance.name) {
NSColor.systemGray.withAlphaComponent(0.3).setStroke()
blockPath.stroke()
}
if ![NSAppearance.Name.darkAqua, NSAppearance.Name.vibrantDark].contains(effectiveAppearance.name) {
NSColor.white.withAlphaComponent(0.5).setFill()
blockPath.fill()
}
}
}
var contentWidth: CGFloat = 0
var contentHeight: CGFloat = 0
for addedSliderHandler in addedSliderHandlers {
contentWidth = max(addedSliderHandler.view!.frame.width, contentWidth)
contentHeight += addedSliderHandler.view!.frame.height
}
var blockNameView: NSTextField?
if blockName != "" {
contentHeight += 21
let attrs: [NSAttributedString.Key: Any] = [.foregroundColor: NSColor.textColor, .font: NSFont.boldSystemFont(ofSize: 12)]
blockNameView = NSTextField(labelWithAttributedString: NSAttributedString(string: blockName, attributes: attrs))
blockNameView?.alphaValue = 0.5
}
let margin = CGFloat(13)
let itemView = BlockView(frame: NSRect(x: 0, y: 0, width: contentWidth + margin * 2, height: contentHeight + margin * 2))
var sliderPosition = CGFloat(margin * -1 + 1)
for addedSliderHandler in addedSliderHandlers {
addedSliderHandler.view!.setFrameOrigin(NSPoint(x: margin, y: margin + sliderPosition + 13))
itemView.addSubview(addedSliderHandler.view!)
sliderPosition += addedSliderHandler.view!.frame.height
}
if let blockNameView = blockNameView {
blockNameView.setFrameOrigin(NSPoint(x: margin + 13, y: contentHeight - 8))
itemView.addSubview(blockNameView)
}
let item = NSMenuItem()
item.view = itemView
monitorSubMenu.insertItem(item, at: 0)
} else {
for addedSliderHandler in addedSliderHandlers {
self.addSliderItem(monitorSubMenu: monitorSubMenu, sliderHandler: addedSliderHandler)
}
}
self.appendMenuHeader(friendlyName: blockName, monitorSubMenu: monitorSubMenu, asSubMenu: asSubMenu, numOfDisplays: numOfDisplays)
}
func addCombinedDisplayMenuBlock() {
if let sliderHandler = self.combinedSliderHandler[.audioSpeakerVolume] {
self.addSliderItem(monitorSubMenu: self, sliderHandler: sliderHandler)
}
if let sliderHandler = self.combinedSliderHandler[.contrast] {
self.addSliderItem(monitorSubMenu: self, sliderHandler: sliderHandler)
}
if let sliderHandler = self.combinedSliderHandler[.brightness] {
self.addSliderItem(monitorSubMenu: self, sliderHandler: sliderHandler)
}
}
func updateDisplayMenu(display: Display, asSubMenu: Bool, numOfDisplays: Int) {
os_log("Addig menu items for display %{public}@", type: .info, "\(display.identifier)")
let monitorSubMenu: NSMenu = asSubMenu ? NSMenu() : self
var addedSliderHandlers: [SliderHandler] = []
display.sliderHandler[.audioSpeakerVolume] = nil
if let otherDisplay = display as? OtherDisplay, !otherDisplay.isSw(), !display.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume), !prefs.bool(forKey: PrefKey.hideVolume.rawValue) {
let title = NSLocalizedString("Volume", comment: "Shown in menu")
addedSliderHandlers.append(self.setupMenuSliderHandler(command: .audioSpeakerVolume, display: display, title: title))
}
display.sliderHandler[.contrast] = nil
if let otherDisplay = display as? OtherDisplay, !otherDisplay.isSw(), !display.readPrefAsBool(key: .unavailableDDC, for: .contrast), prefs.bool(forKey: PrefKey.showContrast.rawValue) {
let title = NSLocalizedString("Contrast", comment: "Shown in menu")
addedSliderHandlers.append(self.setupMenuSliderHandler(command: .contrast, display: display, title: title))
}
display.sliderHandler[.brightness] = nil
if !display.readPrefAsBool(key: .unavailableDDC, for: .brightness), !prefs.bool(forKey: PrefKey.hideBrightness.rawValue) {
let title = NSLocalizedString("Brightness", comment: "Shown in menu")
addedSliderHandlers.append(self.setupMenuSliderHandler(command: .brightness, display: display, title: title))
}
if !prefs.bool(forKey: PrefKey.slidersCombine.rawValue) {
self.addDisplayMenuBlock(addedSliderHandlers: addedSliderHandlers, blockName: display.readPrefAsString(key: .friendlyName) != "" ? display.readPrefAsString(key: .friendlyName) : display.name, monitorSubMenu: monitorSubMenu, numOfDisplays: numOfDisplays, asSubMenu: asSubMenu)
}
if addedSliderHandlers.count > 0, prefs.integer(forKey: PrefKey.menuIcon.rawValue) == MenuIcon.sliderOnly.rawValue {
app.statusItem.isVisible = true
}
}
private func appendMenuHeader(friendlyName: String, monitorSubMenu: NSMenu, asSubMenu: Bool, numOfDisplays: Int) {
let monitorMenuItem = NSMenuItem()
if asSubMenu {
monitorMenuItem.title = "\(friendlyName)"
monitorMenuItem.submenu = monitorSubMenu
self.insertItem(monitorMenuItem, at: 0)
} else if app.macOS10(), numOfDisplays > 1 {
let attrs: [NSAttributedString.Key: Any] = [.foregroundColor: NSColor.systemGray, .font: NSFont.boldSystemFont(ofSize: 12)]
monitorMenuItem.attributedTitle = NSAttributedString(string: "\(friendlyName)", attributes: attrs)
self.insertItem(monitorMenuItem, at: 0)
}
}
func updateMenuRelevantDisplay() {
if prefs.bool(forKey: PrefKey.slidersRelevant.rawValue) {
if let display = DisplayManager.shared.getCurrentDisplay(), display.identifier != self.lastMenuRelevantDisplayId {
os_log("Menu must be refreshed as relevant display changed since last time.")
self.lastMenuRelevantDisplayId = display.identifier
self.updateMenus(dontClose: true)
}
}
}
func addDefaultMenuOptions() {
if !DEBUG_MACOS10, #available(macOS 11.0, *), prefs.integer(forKey: PrefKey.menuItemStyle.rawValue) == MenuItemStyle.icon.rawValue {
let iconSize = CGFloat(22)
let viewWidth = max(120, self.size.width)
var compensateForBlock: CGFloat = 0
if viewWidth > 230 { // if there are display blocks, we need to compensate a bit for the negative inset of the blocks
compensateForBlock = 4
}
let menuItemView = NSView(frame: NSRect(x: 0, y: 0, width: viewWidth, height: iconSize + 10))
let preferencesIcon = NSButton()
preferencesIcon.bezelStyle = .regularSquare
preferencesIcon.isBordered = false
preferencesIcon.setButtonType(.momentaryChange)
preferencesIcon.image = NSImage(systemSymbolName: "ellipsis.circle", accessibilityDescription: NSLocalizedString("Preferences...", comment: "Shown in menu"))
preferencesIcon.alternateImage = NSImage(systemSymbolName: "ellipsis.circle.fill", accessibilityDescription: NSLocalizedString("Preferences...", comment: "Shown in menu"))
preferencesIcon.alphaValue = 0.3
preferencesIcon.frame = NSRect(x: menuItemView.frame.maxX - iconSize - 16 + compensateForBlock, y: menuItemView.frame.origin.y + 5, width: iconSize, height: iconSize)
preferencesIcon.imageScaling = .scaleProportionallyUpOrDown
preferencesIcon.action = #selector(app.prefsClicked)
let updateIcon = NSButton()
updateIcon.bezelStyle = .regularSquare
updateIcon.isBordered = false
updateIcon.setButtonType(.momentaryChange)
updateIcon.image = NSImage(systemSymbolName: "arrow.triangle.2.circlepath.circle", accessibilityDescription: NSLocalizedString("Check for updates...", comment: "Shown in menu"))
updateIcon.alternateImage = NSImage(systemSymbolName: "arrow.triangle.2.circlepath.circle.fill", accessibilityDescription: NSLocalizedString("Check for updates...", comment: "Shown in menu"))
updateIcon.alphaValue = 0.3
updateIcon.frame = NSRect(x: menuItemView.frame.maxX - iconSize * 2 - 10 - 16 + compensateForBlock, y: menuItemView.frame.origin.y + 5, width: iconSize, height: iconSize)
updateIcon.imageScaling = .scaleProportionallyUpOrDown
updateIcon.action = #selector(app.updaterController.checkForUpdates(_:))
updateIcon.target = app.updaterController
let quitIcon = NSButton()
quitIcon.bezelStyle = .regularSquare
quitIcon.isBordered = false
quitIcon.setButtonType(.momentaryChange)
quitIcon.image = NSImage(systemSymbolName: "xmark.circle", accessibilityDescription: NSLocalizedString("Quit", comment: "Shown in menu"))
quitIcon.alternateImage = NSImage(systemSymbolName: "xmark.circle.fill", accessibilityDescription: NSLocalizedString("Quit", comment: "Shown in menu"))
quitIcon.alphaValue = 0.3
quitIcon.frame = NSRect(x: menuItemView.frame.maxX - iconSize * 3 - 20 - 16 + compensateForBlock, y: menuItemView.frame.origin.y + 5, width: iconSize, height: iconSize)
quitIcon.imageScaling = .scaleProportionallyUpOrDown
quitIcon.action = #selector(app.quitClicked)
menuItemView.addSubview(preferencesIcon)
menuItemView.addSubview(updateIcon)
menuItemView.addSubview(quitIcon)
let item = NSMenuItem()
item.view = menuItemView
self.insertItem(item, at: self.items.count)
} else if prefs.integer(forKey: PrefKey.menuItemStyle.rawValue) != MenuItemStyle.hide.rawValue {
if app.macOS10() {
self.insertItem(NSMenuItem.separator(), at: self.items.count)
}
self.insertItem(withTitle: NSLocalizedString("Preferences...", comment: "Shown in menu"), action: #selector(app.prefsClicked), keyEquivalent: "", at: self.items.count)
let updateItem = NSMenuItem(title: NSLocalizedString("Check for updates...", comment: "Shown in menu"), action: #selector(app.updaterController.checkForUpdates(_:)), keyEquivalent: "")
updateItem.target = app.updaterController
self.insertItem(updateItem, at: self.items.count)
self.insertItem(withTitle: NSLocalizedString("Quit", comment: "Shown in menu"), action: #selector(app.quitClicked), keyEquivalent: "", at: self.items.count)
}
}
}

View file

@ -1,22 +1,74 @@
//
// OSDUtils.swift
// MonitorControl
//
// Created by Victor Chabbert on 19/06/2020.
// Copyright © 2020 MonitorControl. All rights reserved.
//
// Copyright © MonitorControl. @victorchabbert, @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
class OSDUtils: NSObject {
static let chicletCount: Float = 16
static func chiclet(fromValue value: Float, maxValue: Float) -> Float {
return (value * self.chicletCount) / maxValue
enum OSDImage: Int64 {
case brightness = 1
case audioSpeaker = 3
case audioSpeakerMuted = 4
case contrast = 0
}
static func value(fromChiclet chiclet: Float, maxValue: Float) -> Float {
return (chiclet * maxValue) / self.chicletCount
static func getOSDImageByCommand(command: Command, value: Float = 1) -> OSDImage {
var osdImage: OSDImage
switch command {
case .audioSpeakerVolume: osdImage = value > 0 ? .audioSpeaker : .audioSpeakerMuted
case .audioMuteScreenBlank: osdImage = .audioSpeakerMuted
case .contrast: osdImage = .contrast
default: osdImage = .brightness
}
return osdImage
}
static func showOsd(displayID: CGDirectDisplayID, command: Command, value: Float, maxValue: Float = 1, roundChiclet: Bool = false, lock: Bool = false) {
guard let manager = OSDManager.sharedManager() as? OSDManager else {
return
}
let osdImage = self.getOSDImageByCommand(command: command, value: value)
let filledChiclets: Int
let totalChiclets: Int
if roundChiclet {
let osdChiclet = OSDUtils.chiclet(fromValue: value, maxValue: maxValue)
filledChiclets = Int(round(osdChiclet))
totalChiclets = 16
} else {
filledChiclets = Int(value * 100)
totalChiclets = Int(maxValue * 100)
}
manager.showImage(osdImage.rawValue, onDisplayID: displayID, priority: 0x1F4, msecUntilFade: 1000, filledChiclets: UInt32(filledChiclets), totalChiclets: UInt32(totalChiclets), locked: lock)
}
static func showOsdVolumeDisabled(displayID: CGDirectDisplayID) {
guard let manager = OSDManager.sharedManager() as? OSDManager else {
return
}
manager.showImage(22, onDisplayID: displayID, priority: 0x1F4, msecUntilFade: 1000)
}
static func showOsdMuteDisabled(displayID: CGDirectDisplayID) {
guard let manager = OSDManager.sharedManager() as? OSDManager else {
return
}
manager.showImage(21, onDisplayID: displayID, priority: 0x1F4, msecUntilFade: 1000)
}
static func popEmptyOsd(displayID: CGDirectDisplayID, command: Command) {
guard let manager = OSDManager.sharedManager() as? OSDManager else {
return
}
let osdImage = self.getOSDImageByCommand(command: command)
manager.showImage(osdImage.rawValue, onDisplayID: displayID, priority: 0x1F4, msecUntilFade: 0)
}
static let chicletCount: Float = 16
static func chiclet(fromValue value: Float, maxValue: Float, half: Bool = false) -> Float {
return (value * self.chicletCount * (half ? 2 : 1)) / maxValue
}
static func value(fromChiclet chiclet: Float, maxValue: Float, half: Bool = false) -> Float {
return (chiclet * maxValue) / (self.chicletCount * (half ? 2 : 1))
}
static func getDistance(fromNearestChiclet chiclet: Float) -> Float {

View file

@ -0,0 +1,386 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import os.log
class SliderHandler {
var slider: MCSlider?
var view: NSView?
var percentageBox: NSTextField?
var displays: [Display] = []
var values: [CGDirectDisplayID: Float] = [:]
var title: String
let command: Command
var icon: ClickThroughImageView?
class MCSliderCell: NSSliderCell {
let knobFillColor = NSColor(white: 1, alpha: 1)
let knobFillColorTracking = NSColor(white: 0.8, alpha: 1)
let knobStrokeColor = NSColor.systemGray.withAlphaComponent(0.5)
let knobShadowColor = NSColor(white: 0, alpha: 0.03)
let barFillColor = NSColor.systemGray.withAlphaComponent(0.2)
let barStrokeColor = NSColor.systemGray.withAlphaComponent(0.5)
let barFilledFillColor = NSColor(white: 1, alpha: 1)
let highlightDisplayIndicatorColor = NSColor(white: 0.85, alpha: 1) // This is visible if there is more the 2 displays
let tickMarkColor = NSColor.systemGray.withAlphaComponent(0.5)
let inset: CGFloat = 3.5
let offsetX: CGFloat = -1.5
let offsetY: CGFloat = -1.5
let tickMarkKnobExtraInset: CGFloat = 4
let tickMarkKnobExtraRadiusMultiplier: CGFloat = 0.5
var numOfTickmarks: Int = 0
var isHighlightDisplayItems: Bool = false
var displayHighlightItems: [CGDirectDisplayID: Float] = [:]
var isTracking: Bool = false
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init() {
super.init()
}
override func barRect(flipped: Bool) -> NSRect {
let bar = super.barRect(flipped: flipped)
let knob = super.knobRect(flipped: flipped)
return NSRect(x: bar.origin.x, y: knob.origin.y, width: bar.width, height: knob.height).insetBy(dx: 0, dy: self.inset).offsetBy(dx: self.offsetX, dy: self.offsetY)
}
override func startTracking(at startPoint: NSPoint, in controlView: NSView) -> Bool {
self.isTracking = true
return super.startTracking(at: startPoint, in: controlView)
}
override func stopTracking(last lastPoint: NSPoint, current stopPoint: NSPoint, in controlView: NSView, mouseIsUp flag: Bool) {
self.isTracking = false
return super.stopTracking(last: lastPoint, current: stopPoint, in: controlView, mouseIsUp: flag)
}
override func drawKnob(_ knobRect: NSRect) {
guard !DEBUG_MACOS10, #available(macOS 11.0, *) else {
super.drawKnob(knobRect)
return
}
// This is intentionally empty as the knob is inside the bar. Please leave it like this!
}
override func drawBar(inside aRect: NSRect, flipped: Bool) {
guard !DEBUG_MACOS10, #available(macOS 11.0, *) else {
super.drawBar(inside: aRect, flipped: flipped)
return
}
var maxValue: Float = self.floatValue
var minValue: Float = self.floatValue
if self.isHighlightDisplayItems {
maxValue = max(self.displayHighlightItems.values.max() ?? 0, maxValue)
minValue = min(self.displayHighlightItems.values.min() ?? 1, minValue)
}
let barRadius = aRect.height * 0.5 * (self.numOfTickmarks == 0 ? 1 : self.tickMarkKnobExtraRadiusMultiplier)
let bar = NSBezierPath(roundedRect: aRect, xRadius: barRadius, yRadius: barRadius)
self.barFillColor.setFill()
bar.fill()
let barFilledWidth = (aRect.width - aRect.height) * CGFloat(maxValue) + aRect.height
let barFilledRect = NSRect(x: aRect.origin.x, y: aRect.origin.y, width: barFilledWidth, height: aRect.height)
let barFilled = NSBezierPath(roundedRect: barFilledRect, xRadius: barRadius, yRadius: barRadius)
self.barFilledFillColor.setFill()
barFilled.fill()
let knobMinX = aRect.origin.x + (aRect.width - aRect.height) * CGFloat(minValue)
let knobMaxX = aRect.origin.x + (aRect.width - aRect.height) * CGFloat(maxValue)
let knobRect = NSRect(x: knobMinX + (self.numOfTickmarks == 0 ? CGFloat(0) : self.tickMarkKnobExtraInset), y: aRect.origin.y, width: aRect.height + CGFloat(knobMaxX - knobMinX), height: aRect.height).insetBy(dx: self.numOfTickmarks == 0 ? CGFloat(0) : self.tickMarkKnobExtraInset, dy: 0)
let knobRadius = knobRect.height * 0.5 * (self.numOfTickmarks == 0 ? 1 : self.tickMarkKnobExtraRadiusMultiplier)
if self.numOfTickmarks > 0 {
for i in 1 ... self.numOfTickmarks - 2 {
let currentMarkLocation = CGFloat((Float(1) / Float(self.numOfTickmarks - 1)) * Float(i))
let tickMarkBounds = NSRect(x: aRect.origin.x + aRect.height + self.tickMarkKnobExtraInset - knobRect.height + self.tickMarkKnobExtraInset * 2 + CGFloat(Float((aRect.width - self.tickMarkKnobExtraInset * 5) * currentMarkLocation)), y: aRect.origin.y + aRect.height * (1 / 3), width: 4, height: aRect.height / 3)
let tickmark = NSBezierPath(roundedRect: tickMarkBounds, xRadius: 2, yRadius: 2)
self.tickMarkColor.setFill()
tickmark.fill()
}
}
let knobAlpha = CGFloat(max(0, min(1, (minValue - 0.08) * 5)))
for i in 1 ... 3 {
let knobShadow = NSBezierPath(roundedRect: knobRect.offsetBy(dx: CGFloat(-1 * 2 * i), dy: 0), xRadius: knobRadius, yRadius: knobRadius)
self.knobShadowColor.withAlphaComponent(self.knobShadowColor.alphaComponent * knobAlpha).setFill()
knobShadow.fill()
}
let knob = NSBezierPath(roundedRect: knobRect, xRadius: knobRadius, yRadius: knobRadius)
(self.isTracking ? self.knobFillColorTracking : self.knobFillColor).withAlphaComponent(knobAlpha).setFill()
knob.fill()
if self.isHighlightDisplayItems, self.displayHighlightItems.count > 2 {
for currentMarkLocation in self.displayHighlightItems.values {
let highlightKnobX = aRect.origin.x + (aRect.width - aRect.height) * CGFloat(currentMarkLocation)
let highlightKnobRect = NSRect(x: highlightKnobX + (self.numOfTickmarks == 0 ? CGFloat(0) : self.tickMarkKnobExtraInset), y: aRect.origin.y, width: aRect.height, height: aRect.height).insetBy(dx: (self.numOfTickmarks == 0 ? CGFloat(0) : self.tickMarkKnobExtraInset) + CGFloat(self.numOfTickmarks == 0 ? 6 : 3), dy: CGFloat(self.numOfTickmarks == 0 ? 6 : 6))
let highlightKnobRadius = highlightKnobRect.height * 0.5 * (self.numOfTickmarks == 0 ? 1 : self.tickMarkKnobExtraRadiusMultiplier)
let highlightKnob = NSBezierPath(roundedRect: highlightKnobRect, xRadius: highlightKnobRadius, yRadius: highlightKnobRadius)
let highlightDisplayIndicatorAlpha = CGFloat(max(0, min(1, (currentMarkLocation - 0.08) * 5)))
self.highlightDisplayIndicatorColor.withAlphaComponent(self.highlightDisplayIndicatorColor.alphaComponent * highlightDisplayIndicatorAlpha).setFill()
highlightKnob.fill()
}
}
self.knobStrokeColor.withAlphaComponent(self.knobStrokeColor.alphaComponent * knobAlpha).setStroke()
knob.stroke()
self.barStrokeColor.setStroke()
bar.stroke()
}
}
class MCSlider: NSSlider {
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
self.cell = MCSliderCell()
}
func setNumOfCustomTickmarks(_ numOfCustomTickmarks: Int) {
if let cell = self.cell as? MCSliderCell {
cell.numOfTickmarks = numOfCustomTickmarks
}
}
func setDisplayHighlightItems(_ isHighlightDisplayItems: Bool) {
if let cell = self.cell as? MCSliderCell {
cell.isHighlightDisplayItems = isHighlightDisplayItems
}
}
func setHighlightItem(_ displayID: CGDirectDisplayID, value: Float) {
if let cell = self.cell as? MCSliderCell {
cell.displayHighlightItems[displayID] = value
}
}
func removeHighlightItem(_ displayID: CGDirectDisplayID) {
if let cell = self.cell as? MCSliderCell {
if cell.displayHighlightItems[displayID] != nil {
cell.displayHighlightItems[displayID] = nil
}
}
}
func resetHighlightItems() {
if let cell = self.cell as? MCSliderCell {
cell.displayHighlightItems.removeAll()
}
}
// Credits for this class go to @thompsonate - https://github.com/thompsonate/Scrollable-NSSlider
override func scrollWheel(with event: NSEvent) {
guard self.isEnabled else { return }
let range = Float(self.maxValue - self.minValue)
var delta = Float(0)
if self.isVertical, self.sliderType == .linear {
delta = Float(event.deltaY)
} else if self.userInterfaceLayoutDirection == .rightToLeft {
delta = Float(event.deltaY + event.deltaX)
} else {
delta = Float(event.deltaY - event.deltaX)
}
if event.isDirectionInvertedFromDevice {
delta *= -1
}
let increment = range * delta / 100
let value = self.floatValue + increment
self.floatValue = value
self.sendAction(self.action, to: self.target)
}
}
class ClickThroughImageView: NSImageView {
override func hitTest(_ point: NSPoint) -> NSView? {
return subviews.first { subview in subview.hitTest(point) != nil
}
}
}
public init(display: Display?, command: Command, title: String = "", position _: Int = 0) {
self.command = command
self.title = title
let slider = SliderHandler.MCSlider(value: 0, minValue: 0, maxValue: 1, target: self, action: #selector(SliderHandler.valueChanged))
let showPercent = prefs.bool(forKey: PrefKey.enableSliderPercent.rawValue)
slider.isEnabled = true
slider.setNumOfCustomTickmarks(prefs.bool(forKey: PrefKey.showTickMarks.rawValue) ? 5 : 0)
self.slider = slider
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
slider.frame.size.width = 180
slider.frame.origin = NSPoint(x: 15, y: 5)
let view = NSView(frame: NSRect(x: 0, y: 0, width: slider.frame.width + 30 + (showPercent ? 38 : 0), height: slider.frame.height + 14))
view.frame.origin = NSPoint(x: 12, y: 0)
var iconName: String = "circle.dashed"
switch command {
case .audioSpeakerVolume: iconName = "speaker.wave.2.fill"
case .brightness: iconName = "sun.max.fill"
case .contrast: iconName = "circle.lefthalf.fill"
default: break
}
let icon = SliderHandler.ClickThroughImageView()
icon.image = NSImage(systemSymbolName: iconName, accessibilityDescription: title)
icon.contentTintColor = NSColor.black.withAlphaComponent(0.6)
icon.frame = NSRect(x: view.frame.origin.x + 6.5, y: view.frame.origin.y + 13, width: 15, height: 15)
icon.imageAlignment = .alignCenter
view.addSubview(slider)
view.addSubview(icon)
self.icon = icon
if showPercent {
let percentageBox = NSTextField(frame: NSRect(x: 15 + slider.frame.size.width - 2, y: 17, width: 40, height: 12))
self.setupPercentageBox(percentageBox)
self.percentageBox = percentageBox
view.addSubview(percentageBox)
}
self.view = view
} else {
slider.frame.size.width = 180
slider.frame.origin = NSPoint(x: 15, y: 5)
let view = NSView(frame: NSRect(x: 0, y: 0, width: slider.frame.width + 30 + (showPercent ? 38 : 0), height: slider.frame.height + 10))
view.addSubview(slider)
if showPercent {
let percentageBox = NSTextField(frame: NSRect(x: 15 + slider.frame.size.width - 2, y: 18, width: 40, height: 12))
self.setupPercentageBox(percentageBox)
self.percentageBox = percentageBox
view.addSubview(percentageBox)
}
self.view = view
}
slider.maxValue = 1
if let displayToAppend = display {
self.addDisplay(displayToAppend)
}
}
func addDisplay(_ display: Display) {
self.displays.append(display)
if let otherDisplay = display as? OtherDisplay {
let value = otherDisplay.setupSliderCurrentValue(command: self.command)
self.setValue(value, displayID: otherDisplay.identifier)
} else if let appleDisplay = display as? AppleDisplay {
if self.command == .brightness {
self.setValue(appleDisplay.getAppleBrightness(), displayID: appleDisplay.identifier)
}
}
}
func setupPercentageBox(_ percentageBox: NSTextField) {
percentageBox.font = NSFont.systemFont(ofSize: 12)
percentageBox.isEditable = false
percentageBox.isBordered = false
percentageBox.drawsBackground = false
percentageBox.alignment = .right
percentageBox.alphaValue = 0.7
}
func valueChangedOtherDisplay(otherDisplay: OtherDisplay, value: Float) {
// For the speaker volume slider, also set/unset the mute command when the value is changed from/to 0
if self.command == .audioSpeakerVolume, (otherDisplay.readPrefAsInt(for: .audioMuteScreenBlank) == 1 && value > 0) || (otherDisplay.readPrefAsInt(for: .audioMuteScreenBlank) != 1 && value == 0) {
otherDisplay.toggleMute(fromVolumeSlider: true)
}
if self.command == Command.brightness {
_ = otherDisplay.setBrightness(value)
return
} else if !otherDisplay.isSw() {
if self.command == Command.audioSpeakerVolume {
if !otherDisplay.readPrefAsBool(key: .enableMuteUnmute) || value != 0 {
_ = otherDisplay.writeDDCValues(command: self.command, value: otherDisplay.convValueToDDC(for: self.command, from: value))
}
} else {
_ = otherDisplay.writeDDCValues(command: self.command, value: otherDisplay.convValueToDDC(for: self.command, from: value))
}
otherDisplay.savePref(value, for: self.command)
}
}
@objc func valueChanged(slider: MCSlider) {
guard app.sleepID == 0, app.reconfigureID == 0 else {
return
}
var value = slider.floatValue
self.updateIcon()
if prefs.bool(forKey: PrefKey.enableSliderSnap.rawValue) {
let intPercent = Int(value * 100)
let snapInterval = 25
let snapThreshold = 3
let closest = (intPercent + snapInterval / 2) / snapInterval * snapInterval
if abs(closest - intPercent) <= snapThreshold {
value = Float(closest) / 100
slider.floatValue = value
}
}
if self.percentageBox == self.percentageBox {
self.percentageBox?.stringValue = "" + String(Int(value * 100)) + "%"
}
for display in self.displays {
slider.setHighlightItem(display.identifier, value: value)
if self.command == .brightness, let appleDisplay = display as? AppleDisplay {
_ = appleDisplay.setBrightness(value)
} else if let otherDisplay = display as? OtherDisplay {
self.valueChangedOtherDisplay(otherDisplay: otherDisplay, value: value)
}
}
slider.setDisplayHighlightItems(false)
}
func updateIcon() {
// This looks hideous so I disable it for now. Maybe after a bit of tinkering it will look better
/*
if self.command == .audioSpeakerVolume {
let value = self.slider?.floatValue ?? 0.5
if value > 2/3 {
self.icon?.image = NSImage(systemSymbolName: "speaker.wave.3.fill", accessibilityDescription: "")
} else if value > 1/3 {
self.icon?.image = NSImage(systemSymbolName: "speaker.wave.2.fill", accessibilityDescription: "")
} else if value != 0 {
self.icon?.image = NSImage(systemSymbolName: "speaker.wave.1.fill", accessibilityDescription: "")
} else {
self.icon?.image = NSImage(systemSymbolName: "speaker.slash.fill", accessibilityDescription: "")
}
}
*/
}
func setValue(_ value: Float, displayID: CGDirectDisplayID = 0) {
if let slider = self.slider {
if displayID != 0 {
self.values[displayID] = value
slider.setHighlightItem(displayID, value: value)
}
var sumVal: Float = 0
var maxVal: Float = 0
var minVal: Float = 1
var num: Int = 0
for key in self.values.keys {
if let val = values[key] {
sumVal += val
maxVal = max(maxVal, val)
minVal = min(minVal, val)
num += 1
}
}
// let average = sumVal / Float(num)
slider.floatValue = value
self.updateIcon()
if abs(maxVal - minVal) > 0.001 {
slider.setDisplayHighlightItems(true)
} else {
slider.setDisplayHighlightItems(false)
}
if self.percentageBox == self.percentageBox {
self.percentageBox?.stringValue = "" + String(Int(value * 100)) + "%"
}
}
}
}

View file

@ -1,148 +0,0 @@
import Cocoa
import os.log
import ServiceManagement
class Utils: NSObject {
/// Acquire Privileges (Necessary to listen to keyboard event globally)
static func acquirePrivileges() {
if !self.readPrivileges(prompt: true) {
let alert = NSAlert()
alert.addButton(withTitle: NSLocalizedString("Ok", comment: "Shown in the alert dialog"))
alert.messageText = NSLocalizedString("Shortcuts not available", comment: "Shown in the alert dialog")
alert.informativeText = NSLocalizedString("You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work", comment: "Shown in the alert dialog")
alert.alertStyle = .warning
alert.runModal()
}
}
static func readPrivileges(prompt: Bool) -> Bool {
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: prompt]
let status = AXIsProcessTrustedWithOptions(options)
os_log("Reading Accessibility privileges - Current access status %{public}@", type: .info, String(status))
return status
}
static func setStartAtLogin(enabled: Bool) {
let identifier = "\(Bundle.main.bundleIdentifier!)Helper" as CFString
SMLoginItemSetEnabled(identifier, enabled)
os_log("Toggle start at login state: %{public}@", type: .info, enabled ? "on" : "off")
}
static func getSystemPreferences() -> [String: AnyObject]? {
var propertyListFormat = PropertyListSerialization.PropertyListFormat.xml
let plistPath = NSString(string: "~/Library/Preferences/.GlobalPreferences.plist").expandingTildeInPath
guard let plistXML = FileManager.default.contents(atPath: plistPath) else {
return nil
}
do {
return try PropertyListSerialization.propertyList(from: plistXML, options: .mutableContainersAndLeaves, format: &propertyListFormat) as? [String: AnyObject]
} catch {
os_log("Error reading system prefs plist: %{public}@", type: .info, error.localizedDescription)
return nil
}
}
static func checksum(chk: UInt8, data: inout [UInt8], start: Int, end: Int) -> UInt8 {
var chkd: UInt8 = chk
for i in start ... end {
chkd ^= data[i]
}
return chkd
}
static func alert(text: String, info: String = "") {
let alert = NSAlert()
alert.messageText = text
if info != "" {
alert.informativeText = info
}
alert.alertStyle = NSAlert.Style.informational
alert.addButton(withTitle: "OK")
alert.runModal()
}
// MARK: - Enums
/// UserDefault Keys for the app prefs
enum PrefKeys: String {
/// Was the app launched once
case appAlreadyLaunched
/// Does the app start when plugged to an external monitor
case startWhenExternal
/// Hide menu icon
case hideMenuIcon
/// Keys listened for (Brightness/Volume)
case listenFor
/// Show contrast sliders
case showContrast
/// Show volume sliders
case showVolume
/// Lower via software after brightness
case lowerSwAfterBrightness
/// Fallback to software control for external displays with no DDC
case fallbackSw
/// Change Brightness/Volume for all screens
case allScreens
/// Use F14 / F15 keys to control brightness
case altBrightnessKeys
/// Friendly name changed
case friendlyName
/// Prefs Reset
case preferenceReset
/// Used for notification when displays are updated in DisplayManager
case displayListUpdate
/// Show advanced options under Displays tab in Preferences
case showAdvancedDisplays
}
/// Keys for the value of listenFor option
enum ListenForKeys: Int {
/// Listen for Brightness and Volume keys
case brightnessAndVolumeKeys = 0
/// Listen for Brightness keys only
case brightnessOnlyKeys = 1
/// Listen for Volume keys only
case volumeOnlyKeys = 2
/// Don't listen for any keys
case none = 3
}
enum PollingMode {
case none
case minimal
case normal
case heavy
case custom(value: Int)
var value: Int {
switch self {
case .none:
return 0
case .minimal:
return 5
case .normal:
return 10
case .heavy:
return 100
case let .custom(val):
return val
}
}
}
}

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "Über";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Bist du sicher, dass du eine längere Verzögerung aktivieren willst? Wenn du dies tust, kann dein System einfrieren und einen Neustart erfordern. Der Start bei der Anmeldung wird als Sicherheitsmassnahme deaktiviert.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Bist du sicher, dass du alle Einstellungen zurücksetzen willst?";
/* Shown in menu */
"Brightness" = "Helligkeit";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Integriertes Display";
/* Shown in menu */
"Contrast" = "Kontrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Displays";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Längere Verzögerung einschalten?";
/* Shown in the Display Preferences */
"External Display" = "Externes Display";
/* Shown in the main prefs window */
"General" = "Allgemein";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "Nein";
/* Shown in the Display Preferences */
"No Control Available" = "Keine Steuerung verfügbar";
/* Shown in menu */
"No supported display found" = "Kein unterstütztes Display gefunden";
/* Shown in the alert dialog */
"Ok" = "OK";
/* Shown in the Display Preferences */
"Other Display" = "Anderes Display";
/* Shown in the alert dialog */
"Reset Preferences?" = "Einstellungen zurücksetzen?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Kurzbefehle sind nicht verfügbar";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Erzwungen)";
/* Shown in the Display Preferences */
"Software Only" = "Nur Software";
/* unknown display name
unknown model
unknown vendor */
"Unknown" = "Unbekannt";
/* Shown in the Display Preferences */
"Unspecified" = "Unbestimmt";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtuelles Display";
/* Shown in menu */
"Volume" = "Lautstärke";
/* Shown in the alert dialog */
"Yes" = "Ja";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Du musst MonitorControl in Systemeinstellungen > Sicherheit > Datenschutz > Bedienungshilfen aktivieren, damit die Kurzbefehle funktionieren.";

View file

@ -1,101 +0,0 @@
/* Shown in the main prefs window */
"About" = "About";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Are you sure you want to reset all preferences?";
/* Shown in menu */
"Brightness" = "Brightness";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Contrast" = "Contrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Displays";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Enable Longer Delay?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "General";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control Available" = "No Control Available";
/* Shown in menu */
"No supported display found" = "No supported display found";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Preferences?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Shortcuts not available";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Forced)";
/* Shown in the Display Preferences */
"Software Only" = "Software Only";
/* Unknown display name */
"Unknown" = "Unknown";
/* Shown in the Display Preferences */
"Unspecified" = "Unspecified";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtual Display";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Yes";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work";

View file

@ -1,101 +0,0 @@
/* Shown in the main prefs window */
"About" = "Acerca de";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "¿Está seguro de que quiere activar un retraso mayor? Hacerlo puede congelar su sistema y requerir un reinicio. El inicio al iniciar la sesión se desactivará como medida de seguridad.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "¿Estás seguro de que quieres restablecer todas las preferencias?";
/* Shown in menu */
"Brightness" = "Brillo";
/* Build */
"Build" = "Compilación";
/* Shown in the Display Preferences */
"Built-in Display" = "Pantalla incorporada";
/* Shown in menu */
"Contrast" = "Contraste";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Pantallas";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "¿Permitir un mayor atenuación?";
/* Shown in the Display Preferences */
"External Display" = "Pantallas externas";
/* Shown in the main prefs window */
"General" = "General";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control Available" = "Control no disponible";
/* Shown in menu */
"No supported display found" = "No se encontraron pantallas soportadas";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Otras pantallas";
/* Shown in the alert dialog */
"Reset Preferences?" = "¿Restablecer las preferencias?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Atajos no disponibles";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Forzado)";
/* Shown in the Display Preferences */
"Software Only" = "Solo Software";
/* Unknown display name */
"Unknown" = "Desconocido";
/* Shown in the Display Preferences */
"Unspecified" = "Sin especificar";
/* Version */
"Version" = "Versión";
/* Shown in the Display Preferences */
"Virtual Display" = "Pantalla virtual";
/* Shown in menu */
"Volume" = "Volumen";
/* Shown in the alert dialog */
"Yes" = "Sí";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Es necesario activar MonitorControl en Preferencias del Sistema > Seguridad y Privacidad > Accesibilidad para que los atajos de teclado funcionen";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "À Propos";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Êtes-vous sûr de vouloir augmenter cette durée? Cela peut entrainer un gêle du système et nécessiter un redémarrage. Par sécurité, cette option sera désactivée au démarrage.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Êtes-vous sûr de vouloir réinitialiser toutes les préférences?";
/* Sown in menu */
"Brightness" = "Luminosité";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Écran intégré";
/* Shown in menu */
"Contrast" = "Contraste";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Écrans";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Activer une plus longue durée ?";
/* Shown in the Display Preferences */
"External Display" = "Écran externe";
/* Shown in the main prefs window */
"General" = "Général";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Matériel (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Matériel (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "Non";
/* Shown in the Display Preferences */
"No Control Available" = "Contrôles indisponibles";
/* Shown in menu */
"No supported display found" = "Aucun écran supporté trouvé";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Autre écran";
/* Shown in the alert dialog */
"Reset Preferences?" = "Réinitialiser les préférences ?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Mode sans échec activé";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Maj. appuyée pendant le démarrage. MonitorControl démarré en mode sans échec. Les préférences par défaut sont utilisées, la communication via DDC est bloquée.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Raccourcis non disponible";
/* Shown in the Display Preferences */
"Software (Forced)" = "Logiciel (Forcé)";
/* Shown in the Display Preferences */
"Software Only" = "Logiciel seulement";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Inconnu";
/* Shown in the Display Preferences */
"Unspecified" = "Non spécifié";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Écran virtuel";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Oui";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Vous devez activer MonitorControl dans Préférences Système > Sécurité et confidentialité > Accessibilité pour que les raccourcis clavier fonctionnent";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "Névjegy";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Biztos benne, hogy engedélyezni kívánja a hosszabb várakozást? Ez bizonyos esetekben a rendszer lefagyását eredményezheti, akár újraindítás is szükségessé válhat. A bejelentkezéskori automatikus indítást letiltjuk a biztonság kedvéért.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Biztos benne, hogy vissza kívánja állítani az alapértelmezett beállításokat?";
/* Sown in menu */
"Brightness" = "Fényerő";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Contrast" = "Kontraszt";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Kijelzők";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Hosszabb várakozás engedélyezése?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "Általános";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardver (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardver (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "Nem";
/* Shown in the Display Preferences */
"No Control Available" = "Nincs vezérlés";
/* Shown in menu */
"No supported display found" = "Nincs támogatott kijelző";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Egyéb kijelző";
/* Shown in the alert dialog */
"Reset Preferences?" = "Alapértelmezett beállítások";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Biztonsági mód engedélyezve";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "A Shift gomb le lett nyomva indítás közben, az alkalmazás biztonsági módban indult el. Az alapértelmezett beállításokat visszaállítottuk, a DDC olvasás letiltásra került.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Gyorsbillentyűk nem elérhetők";
/* Shown in the Display Preferences */
"Software (Forced)" = "Szoftveres";
/* Shown in the Display Preferences */
"Software Only" = "Csak szoftveres";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Ismeretlen";
/* Shown in the Display Preferences */
"Unspecified" = "Meghatározatlan";
/* Version */
"Version" = "Verzió";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtuális kijelző";
/* Shown in menu */
"Volume" = "Hangerő";
/* Shown in the alert dialog */
"Yes" = "Igen";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Engedélyeznie kell a MonitorControlt a Rendszerbeállítások > Biztonság és adatvédelem > Kisegítő lehetőségek alatt a gyorsbillentyűk használatához!";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "Informazioni";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Sei sicuro di voler abilitare un delay più lungo? Ciò potrebbe causare un freeze del sistema e richeidere un riavvio. L'avvio al login sarà disabilitato per sicurezza.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Sei sicuro di voler resettare tutte le preferenze?";
/* Sown in menu */
"Brightness" = "Luminosità";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Monitor Built-in";
/* Shown in menu */
"Contrast" = "Contrasto";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Monitor";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Abilitare Delay più Lungo?";
/* Shown in the Display Preferences */
"External Display" = "Monitor esterno";
/* Shown in the main prefs window */
"General" = "Generale";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control Available" = "Nessun Controlo Disponibile";
/* Shown in menu */
"No supported display found" = "Nessuno schermo supportato è stato trovato";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Altri monitor";
/* Shown in the alert dialog */
"Reset Preferences?" = "Resettare Preferenze?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode attivata";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Il tasto shift è stato premuto durante l'avvio. MonitorControl avviato in safe mode. Verranno caricate le impostazioni di default, la lettura DDC è bloccata.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Comandi rapidi non disponibili";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Forzato)";
/* Shown in the Display Preferences */
"Software Only" = "Solo Software";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Sconosciuto";
/* Shown in the Display Preferences */
"Unspecified" = "Non specificato";
/* Version */
"Version" = "Versione";
/* Shown in the Display Preferences */
"Virtual Display" = "Monitor virtuale";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Sì";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "E' necessario abilitare MonitorControl nelle Preferenze di Sistema > Sicurezza e Privacy > Accessibilità affinchè le abbreviazioni da tastiera funzionino";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "About";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "すべての環境設定を初期状態に戻してよろしいですか?";
/* Sown in menu */
"Brightness" = "画面輝度";
/* Build */
"Build" = "ビルド";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Contrast" = "コントラスト";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "画面";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Enable Longer Delay?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "一般";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control Available" = "No Control Available";
/* Shown in menu */
"No supported display found" = "サポートされていないディスプレイが検知されました";
/* Shown in the alert dialog */
"Ok" = "OK";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Reset Preferences?" = "環境設定を初期状態に戻しますか?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "ショートカットキーを使用できません";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Forced)";
/* Shown in the Display Preferences */
"Software Only" = "Software Only";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "不明";
/* Shown in the Display Preferences */
"Unspecified" = "Unspecified";
/* Version */
"Version" = "バージョン";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtual Display";
/* Shown in menu */
"Volume" = "音量";
/* Shown in the alert dialog */
"Yes" = "Yes";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "ショートカットキーを使用するには、 環境設定 > セキュリティとプライバシー > アクセリビリティ からMonitorControlを有効にしてください。";

View file

@ -1,101 +0,0 @@
/* Shown in the main prefs window */
"About" = "정보";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "응답지연 시간을 연장하시겠습니까? 시스템이 멈추거나 재시작이 필요할 수 있습니다. 로그인 시 자동 실행 옵션은 안전을 위해 비활성화됩니다.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "모든 설정을 초기화하시겠습니까?";
/* Shown in menu */
"Brightness" = "밝기";
/* Build */
"Build" = "빌드";
/* Shown in the Display Preferences */
"Built-in Display" = "내장 디스플레이";
/* Shown in menu */
"Contrast" = "대비";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "디스플레이";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "응답지연 시간 연장";
/* Shown in the Display Preferences */
"External Display" = "외장 디스플레이";
/* Shown in the main prefs window */
"General" = "일반";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "하드웨어 (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "하드웨어 (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "아니오";
/* Shown in the Display Preferences */
"No Control Available" = "사용가능한 제어 없음";
/* Shown in menu */
"No supported display found" = "감지된 디스플레이 없음";
/* Shown in the alert dialog */
"Ok" = "확인";
/* Shown in the Display Preferences */
"Other Display" = "그 외 디스플레이";
/* Shown in the alert dialog */
"Reset Preferences?" = "설정 초기화";
/* Shown in the alert dialog */
"Safe Mode Activated" = "안전모드 활성화 됨";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "쉬프트가 눌린 채로 시작되었습니다. MonitorControl 이 안전모드로 시작되었습니다. 기본 설정으로 다시 로딩되었으며, DDC 읽기가 제한됩니다.";
/* Shown in the alert dialog */
"Shortcuts not available" = "단축키를 사용할 수 없음";
/* Shown in the Display Preferences */
"Software (Forced)" = "소프트웨어 (강제)";
/* Shown in the Display Preferences */
"Software Only" = "소프트웨어 전용";
/* Unknown display name */
"Unknown" = "알 수 없음";
/* Shown in the Display Preferences */
"Unspecified" = "지정되지 않음";
/* Version */
"Version" = "버전";
/* Shown in the Display Preferences */
"Virtual Display" = "가상 디스플레이";
/* Shown in menu */
"Volume" = "볼륨";
/* Shown in the alert dialog */
"Yes" = "예";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "단축키가 동작하기 위해서는 시스템 환경설정 > 보안 및 개인 정보 보호 > 손쉬운 사용에서 MonitorControl 항목을 체크해야 합니다.";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "Over";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Weet u zeker dat u een langere vertraging wilt inschakelen? Als u dit doet kan uw systeem vastlopen en een herstart nodig hebben. Start bij het inloggen wordt uitgeschakeld als veiligheidsmaatregel.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Weet u zeker dat u alle voorkeuren wilt herstellen?";
/* Shown in menu */
"Brightness" = "Helderheid";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Ingebouwd Beeldscherm";
/* Shown in menu */
"Contrast" = "Contrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Beeldschermen";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Langere vertraging inschakelen?";
/* Shown in the Display Preferences */
"External Display" = "Extern Beeldscherm";
/* Shown in the main prefs window */
"General" = "Algemeen";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "Nee";
/* Shown in the Display Preferences */
"No Control Available" = "Geen Besturing Beschikbaar";
/* Shown in menu */
"No supported display found" = "Geen ondersteund scherm gevonden";
/* Shown in the alert dialog */
"Ok" = "Oké";
/* Shown in the Display Preferences */
"Other Display" = "Ander Beeldscherm";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Voorkeuren?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Veilige Modus Geactiveerd";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift werd ingedrukt tijdens het opstarten. MonitorControl is gestart in veilige modus. Standaardinstellingen zijn herladen, DDC uitlezen is geblokkeerd.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Sneltoetsen niet beschikbaar";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Geforceerd)";
/* Shown in the Display Preferences */
"Software Only" = "Alleen Software";
/* unknown display name
unknown model
unknown vendor */
"Unknown" = "Onbekend";
/* Shown in the Display Preferences */
"Unspecified" = "Niet gespecificeerd";
/* Version */
"Version" = "Versie";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtueel Beeldscherm";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Ja";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "U moet MonitorControl inschakelen in Systeemvoorkeuren > Beveiliging en Privacy > Privacy > Toegankelijkheid inschakelen, zodat de sneltoetsen werken.";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "Informacje";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Czy na pewno chcesz ustawić większe opóźnienie? Może to skutkować zawieszeniem systemu i koniecznością restartu. Uruchamianie programu podczas logowania zostanie wyłączone.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Czy na pewno chcesz przywrócić wszystkie ustawienia do stanu początkowego?";
/* Sown in menu */
"Brightness" = "Jasność";
/* Build */
"Build" = "Kompilacja";
/* Shown in the Display Preferences */
"Built-in Display" = "Wbudowany Wyświetlacz";
/* Shown in menu */
"Contrast" = "Kontrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Wyświetlacze";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Włączyć dłuższe opóźnienie?";
/* Shown in the Display Preferences */
"External Display" = "Zewnętrzny Wyświetlacz";
/* Shown in the main prefs window */
"General" = "Ogólne";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "Nie";
/* Shown in the Display Preferences */
"No Control Available" = "Brak dostępnego sterowania";
/* Shown in menu */
"No supported display found" = "Nie znaleziono obsługiwanego wyświetlacza";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Inny Wyświetlacz";
/* Shown in the alert dialog */
"Reset Preferences?" = "Zresetować Preferencje?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Skróty klawiszowe niedostępne";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Wymuszone)";
/* Shown in the Display Preferences */
"Software Only" = "Wyłącznie Software";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Nieznany";
/* Shown in the Display Preferences */
"Unspecified" = "Nieokreślone";
/* Version */
"Version" = "Wersja";
/* Shown in the Display Preferences */
"Virtual Display" = "Wirtualny Wyświetlacz";
/* Shown in menu */
"Volume" = "Głośność";
/* Shown in the alert dialog */
"Yes" = "Tak";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Musisz włączyć MonitorControl w Preferencjach systemowych > Ochrona i prywatność > Dostępność, aby skróty klawiszowe mogły działać";

View file

@ -1,101 +0,0 @@
/* Shown in the main prefs window */
"About" = "Hakkında";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Daha uzun bir gecikmeyi etkinleştirmek istediğinizden emin misiniz? Bunu yapmak sisteminizi dondurabilir ve yeniden başlatılabilir. Başlangıçta güvenlik önlemi olarak devre dışı bırakılır.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Tüm ayarları sıfırlamak istediğinize emin misiniz?";
/* Shown in menu */
"Brightness" = "Parlaklık";
/* Build */
"Build" = "Derleme";
/* Shown in the Display Preferences */
"Built-in Display" = "Dahili Ekran";
/* Shown in menu */
"Contrast" = "Kontrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Telif Hakkı Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Ekranlar";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Daha Uzun Gecikmeyi Etkinleştir?";
/* Shown in the Display Preferences */
"External Display" = "Harici Ekran";
/* Shown in the main prefs window */
"General" = "Genel";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Donanım (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Donanım (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "Hayır";
/* Shown in the Display Preferences */
"No Control Available" = "Kontrol yok";
/* Shown in menu */
"No supported display found" = "Desteklenen ekran bulunamadı";
/* Shown in the alert dialog */
"Ok" = "Tamam";
/* Shown in the Display Preferences */
"Other Display" = "Diğer Ekran";
/* Shown in the alert dialog */
"Reset Preferences?" = "Ayarları Sıfırla?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Kısayollar bulunamadı";
/* Shown in the Display Preferences */
"Software (Forced)" = "Yazılım (Zorunlu)";
/* Shown in the Display Preferences */
"Software Only" = "Sadece Yazılım";
/* Unknown display name */
"Unknown" = "Bilinmeyen";
/* Shown in the Display Preferences */
"Unspecified" = "Belirtilmemiş";
/* Version */
"Version" = "Versiyon";
/* Shown in the Display Preferences */
"Virtual Display" = "Sanal Ekran";
/* Shown in menu */
"Volume" = "Ses";
/* Shown in the alert dialog */
"Yes" = "Evet";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "MonitorControl klavye kısayollarını aktif hale getirmek için Sistem Tercihleri > Güvenlik ve Gizlilik > Erişebilirlik altından izin vermeniz gerekmektedir";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "About";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Are you sure you want to reset all preferences?";
/* Sown in menu */
"Brightness" = "亮度";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Contrast" = "对比度";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Displays";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Enable Longer Delay?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "通用";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control Available" = "No Control Available";
/* Shown in menu */
"No supported display found" = "未发现支持的显示器";
/* Shown in the alert dialog */
"Ok" = "Ok";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Preferences?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "快捷键不可用";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Forced)";
/* Shown in the Display Preferences */
"Software Only" = "Software Only";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Unknown";
/* Shown in the Display Preferences */
"Unspecified" = "Unspecified";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtual Display";
/* Shown in menu */
"Volume" = "音量";
/* Shown in the alert dialog */
"Yes" = "Yes";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "您需要在「系统偏好设置」>「安全性与隐私」>「辅助功能」中开启 MonitorControl 以便使快捷键生效";

View file

@ -1,103 +0,0 @@
/* Shown in the main prefs window */
"About" = "關於";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "您確定要啟用更長的延遲嗎? 這樣做可能會使系統崩潰並需要重新啟動。 作為安全措施,登錄時啟動將被禁用。";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "確定要重置嗎?";
/* Sown in menu */
"Brightness" = "亮度";
/* Build */
"Build" = "建構";
/* Shown in the Display Preferences */
"Built-in Display" = "內置螢幕";
/* Shown in menu */
"Contrast" = "對比度";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "螢幕";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "啟用更長的延遲?";
/* Shown in the Display Preferences */
"External Display" = "外接螢幕";
/* Shown in the main prefs window */
"General" = "通用";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "硬體(CoreDisplay)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "硬體(DDC)";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the alert dialog */
"No" = "否";
/* Shown in the Display Preferences */
"No Control Available" = "沒有可用的控制項";
/* Shown in menu */
"No supported display found" = "找不到支援的螢幕";
/* Shown in the alert dialog */
"Ok" = "好";
/* Shown in the Display Preferences */
"Other Display" = "其他螢幕";
/* Shown in the alert dialog */
"Reset Preferences?" = "重置偏好設定?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "快捷鍵不可使用";
/* Shown in the Display Preferences */
"Software (Forced)" = "軟體(強制)";
/* Shown in the Display Preferences */
"Software Only" = "僅用軟體";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "未知";
/* Shown in the Display Preferences */
"Unspecified" = "未指定";
/* Version */
"Version" = "版本";
/* Shown in the Display Preferences */
"Virtual Display" = "虛擬螢幕";
/* Shown in menu */
"Volume" = "音量";
/* Shown in the alert dialog */
"Yes" = "是";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "您需要在「系統偏好設定」>「安全性與隱私權」>「輔助使用」中開啟 MonitorControl 使快捷鍵生效";

File diff suppressed because it is too large Load diff

View file

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19150" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19150"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="MonitorControl" customModuleProvider="target">
<connections>
<outlet property="statusMenu" destination="lCi-vw-mwp" id="iBf-iw-RcA"/>
</connections>
</customObject>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<menu id="lCi-vw-mwp">
<items>
<menuItem isSeparatorItem="YES" id="F5R-GH-0ZO"/>
<menuItem title="Preferences..." id="SOS-eZ-uU5">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="prefsClicked:" target="Voe-Tx-rLC" id="sSU-RG-py2"/>
</connections>
</menuItem>
<menuItem title="Quit" id="JTa-2I-AsI">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="quitClicked:" target="Voe-Tx-rLC" id="6Y0-el-CJx"/>
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="-1180" y="-1189"/>
</menu>
<sliderCell controlSize="small" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="above" sliderType="linear" id="JEl-jP-rdy"/>
</objects>
</document>

View file

@ -1,174 +0,0 @@
import Cocoa
import os.log
class SliderHandler {
var slider: NSSlider?
var display: ExternalDisplay
let cmd: Command
public init(display: ExternalDisplay, command: Command) {
self.display = display
self.cmd = command
}
@objc func valueChanged(slider: NSSlider) {
guard app.sleepID == 0, app.reconfigureID == 0 else {
return
}
let snapInterval = 25
let snapThreshold = 3
var value = slider.integerValue
let closest = (value + snapInterval / 2) / snapInterval * snapInterval
if abs(closest - value) <= snapThreshold {
value = closest
slider.integerValue = value
}
// For the speaker volume slider, also set/unset the mute command when the value is changed from/to 0
if self.cmd == .audioSpeakerVolume, (self.display.isMuted() && value > 0) || (!self.display.isMuted() && value == 0) {
self.display.toggleMute(fromVolumeSlider: true)
}
if !self.display.isSw() {
if self.cmd == Command.brightness, prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
var brightnessDDCValue: Int = 0
var brightnessSwValue: Int = 100
if value >= Int(slider.maxValue / 2) {
brightnessDDCValue = slider.integerValue - Int(slider.maxValue / 2)
brightnessSwValue = Int(self.display.getSwMaxBrightness())
} else {
brightnessDDCValue = 0
brightnessSwValue = Int((Float(value) / Float(slider.maxValue / 2)) * Float(self.display.getSwMaxBrightness()))
}
_ = self.display.writeDDCValues(command: self.cmd, value: UInt16(brightnessDDCValue))
_ = self.display.setSwBrightness(value: UInt8(brightnessSwValue))
self.display.saveValue(brightnessDDCValue, for: self.cmd)
} else if self.cmd == Command.audioSpeakerVolume {
if !self.display.enableMuteUnmute || value != 0 {
_ = self.display.writeDDCValues(command: self.cmd, value: UInt16(value))
}
self.display.saveValue(value, for: self.cmd)
} else {
_ = self.display.writeDDCValues(command: self.cmd, value: UInt16(value))
self.display.saveValue(value, for: self.cmd)
}
} else if self.cmd == Command.brightness {
_ = self.display.setSwBrightness(value: UInt8(value))
self.display.saveValue(value, for: self.cmd)
}
}
static func addSliderMenuItem(toMenu menu: NSMenu, forDisplay display: ExternalDisplay, command: Command, title: String, numOfTickMarks: Int = 0) -> SliderHandler {
let item = NSMenuItem()
let handler = SliderHandler(display: display, command: command)
let slider = NSSlider(value: 0, minValue: 0, maxValue: 100, target: handler, action: #selector(SliderHandler.valueChanged))
slider.isEnabled = false
handler.slider = slider
if #available(macOS 11.0, *) {
slider.frame.size.width = 160
slider.frame.origin = NSPoint(x: 35, y: 5)
let view = NSView(frame: NSRect(x: 0, y: 0, width: slider.frame.width + 47, height: slider.frame.height + 14))
view.frame.origin = NSPoint(x: 12, y: 0)
var iconName: String = "circle.dashed"
switch command {
case .audioSpeakerVolume: iconName = "speaker.wave.2"
case .brightness: iconName = "sun.max"
case .contrast: iconName = "circle.lefthalf.fill"
default: break
}
let icon = NSImageView(image: NSImage(systemSymbolName: iconName, accessibilityDescription: title)!)
icon.frame = view.frame
icon.wantsLayer = true
icon.alphaValue = 0.7
icon.imageAlignment = NSImageAlignment.alignLeft
view.addSubview(icon)
view.addSubview(slider)
item.view = view
menu.insertItem(item, at: 0)
} else {
slider.frame.size.width = 180
slider.frame.origin = NSPoint(x: 15, y: 5)
let view = NSView(frame: NSRect(x: 0, y: 0, width: slider.frame.width + 30, height: slider.frame.height + 10))
let sliderHeaderItem = NSMenuItem()
let attrs: [NSAttributedString.Key: Any] = [.foregroundColor: NSColor.systemGray, .font: NSFont.systemFont(ofSize: 12)]
sliderHeaderItem.attributedTitle = NSAttributedString(string: title, attributes: attrs)
view.addSubview(slider)
item.view = view
menu.insertItem(item, at: 0)
menu.insertItem(sliderHeaderItem, at: 0)
}
var values: (UInt16, UInt16)?
let delay = display.needsLongerDelay ? UInt64(40 * kMillisecondScale) : nil
var (currentValue, maxValue) = (UInt16(0), UInt16(0))
let tries = UInt(display.getPollingCount())
if display.isSw(), command == Command.brightness {
(currentValue, maxValue) = (UInt16(display.getSwBrightnessPrefValue()), UInt16(display.getSwMaxBrightness()))
} else {
if tries != 0, !app.safeMode {
os_log("Polling %{public}@ times", type: .info, String(tries))
values = display.readDDCValues(for: command, tries: tries, minReplyDelay: delay)
}
(currentValue, maxValue) = values ?? (UInt16(display.getValueExists(for: command) ? display.getValue(for: command) : 75), 100) // We set 100 as max value if we could not read DDC, the previous setting as current value or 75 if not present.
}
display.saveMaxValue(Int(maxValue), for: command)
display.saveValue(min(Int(currentValue), display.getMaxValue(for: command)), for: command) // We won't allow currrent value to be higher than the max. value
os_log("%{public}@ (%{public}@):", type: .info, display.name, String(reflecting: command))
os_log(" - current value: %{public}@ - from display? %{public}@", type: .info, String(currentValue), String(values != nil))
os_log(" - maximum value: %{public}@ - from display? %{public}@", type: .info, String(display.getMaxValue(for: command)), String(values != nil))
if command == .brightness {
if !display.isSw(), prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
slider.maxValue = Double(display.getMaxValue(for: command) * 2)
slider.integerValue = Int(slider.maxValue) / 2 + Int(currentValue)
} else {
slider.integerValue = Int(currentValue)
slider.maxValue = Double(display.getMaxValue(for: command))
}
} else if command == .audioSpeakerVolume {
// If we're looking at the audio speaker volume, also retrieve the values for the mute command
var muteValues: (current: UInt16, max: UInt16)?
if display.enableMuteUnmute, tries != 0, !app.safeMode {
os_log("Polling %{public}@ times", type: .info, String(tries))
os_log("%{public}@ (%{public}@):", type: .info, display.name, String(reflecting: Command.audioMuteScreenBlank))
muteValues = display.readDDCValues(for: .audioMuteScreenBlank, tries: tries, minReplyDelay: delay)
}
if let muteValues = muteValues {
os_log(" - current ddc value: %{public}@", type: .info, String(muteValues.current))
os_log(" - maximum ddc value: %{public}@", type: .info, String(muteValues.max))
display.saveValue(Int(muteValues.current), for: .audioMuteScreenBlank)
display.saveMaxValue(Int(muteValues.max), for: .audioMuteScreenBlank)
} else {
os_log(" - current ddc value: unknown", type: .info)
os_log(" - stored maximum ddc value: %{public}@", type: .info, String(display.getMaxValue(for: .audioMuteScreenBlank)))
}
// If the system is not currently muted, or doesn't support the mute command, display the current volume as the slider value
if muteValues == nil || muteValues!.current == 2 {
slider.integerValue = Int(currentValue)
} else {
slider.integerValue = 0
}
slider.maxValue = Double(display.getMaxValue(for: command))
} else {
slider.integerValue = Int(currentValue)
slider.maxValue = Double(display.getMaxValue(for: command))
}
slider.numberOfTickMarks = numOfTickMarks
slider.isEnabled = true
return handler
}
}

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "Über";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Bist du sicher, dass du eine längere Verzögerung aktivieren willst? Wenn du dies tust, kann dein System einfrieren und einen Neustart erfordern. Der Start bei der Anmeldung wird als Sicherheitsmassnahme deaktiviert.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Bist du sicher, dass du alle Einstellungen zurücksetzen willst?";
/* Shown in menu */
"Brightness" = "Helligkeit";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Integriertes Display";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Kontrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Displays";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Längere Verzögerung einschalten?";
/* Shown in the Display Preferences */
"External Display" = "Externes Display";
/* Shown in the main prefs window */
"General" = "Allgemein";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "Nein";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Anderes Display";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Einstellungen zurücksetzen?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Kurzbefehle sind nicht verfügbar";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* unknown display name
unknown model
unknown vendor */
"Unknown" = "Unbekannt";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtuelles Display";
/* Shown in menu */
"Volume" = "Lautstärke";
/* Shown in the alert dialog */
"Yes" = "Ja";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Du musst MonitorControl in Systemeinstellungen > Sicherheit > Datenschutz > Bedienungshilfen aktivieren, damit die Kurzbefehle funktionieren.";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Besonderen Dank an unsere Mitwirkenden!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Menüsymbol ausblenden";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "macOS Lautstärke OSD deaktivieren";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Zurücksetzen";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Stummschaltung DDC Befehl aktivieren";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Tastatur:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Benutzerdefiniert";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Webseite";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Warnung! Ändern einiger dieser Einstellungen können zu unerwartetem Verhalten führen!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Lautstärkeregler im Menü anzeigen";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Helligkeit und Lautstärke für alle Bildschirme ändern";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimal";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Name zurücksetzen";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Weitere Verringerung der Helligkeit durch Software-Dimmung";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Keine";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Helligkeitsregelung:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Helligkeit";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Diese Optionen gelten nur für hardwaregesteuerte (DDC) Displays.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Start beim Login";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Benutzerdefinierte Anzahl der Leseabrufe:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Verwende die Medientasten deiner Tastatur zur Steuerung von Helligkeit und Lautstärke.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Aktiviere bei Bedarf die Software-Dimmung";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Mehr Informationen";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Display Typ:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menü:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Wenn ein externes Display nicht gesteuert werden kann, wird stattdessen die Software-Dimmung verwendet.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Lautstärke";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Anwendung:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Steuerung:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Längere Verzögerung bei DDC-Lesevorgängen";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Um die Einstellungen wieder anzuzeigen, musst du die Anwendung neustarten!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Erweitert:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normal";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Tastatursteuerung für das Display verwenden";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Stark";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Helligkeit & Lautstärke";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC Leseabfrage Modus:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Erweiterte Einstellungen unter Displays anzeigen";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Keine";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Kontrastregler im Menü anzeigen";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Einstellungen zurücksetzen";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Zusätzliche Einstellungen:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Zusätzliche Software-Dimmung, nachdem die Hardware-Helligkeit des Displays 0 erreicht hat. Der Menüregler ist ebenfalls betroffen, wobei 50% der Übergangspunkt ist. Funktioniert nur bei DDC-gesteuerten Displays.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Bezeichnung:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Hardware DDC Regelung verwenden";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Spenden";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "MonitorControl beenden";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Einstellungen …";

View file

@ -0,0 +1,134 @@
/* Shown in the main prefs window */
"About" = "About";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Are you sure you want to reset all preferences?";
/* Shown in menu */
"Brightness" = "Brightness";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Contrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Displays";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Enable Longer Delay?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "General";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Preferences?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Shortcuts not available";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name */
"Unknown" = "Unknown";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtual Display";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Yes";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Special thanks to our contributors!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Hide Menu Icon";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Disable macOS volume OSD";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Reset settings";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Enable Mute DDC command";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Keyboard:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Custom";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Website";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Show volume slider in menu";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Change Brightness and Volume for all screens";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimal";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Name";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Further lower brightness via software dimming";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "None";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Brightness control:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Brightness only";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "These options work for hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Start at Login";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Custom read polling count:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Use the media keys of your keyboard to control Brightness & Volume.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Enable software dimming if required";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "More Info";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Display type:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menu contents:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "If an external display can't be controlled, software dimming will be used instead.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Volume only";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Application:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Control method:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Longer delay during DDC read operations";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "If the menu item is hidden, just relaunch the app to reveal Preferences!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Advanced:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normal";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Enable keyboard control for display";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast (DDC)";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Heavy";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Both Brightness & Volume";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC read polling mode:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Show advanced settings under Displays";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "None";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Reset Preferences";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Additional settings:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identifier:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Use hardware DDC control";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Donate";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Quit";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Preferences...";

View file

@ -0,0 +1,134 @@
/* Shown in the main prefs window */
"About" = "Acerca de";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "¿Está seguro de que quiere activar un retraso mayor? Hacerlo puede congelar su sistema y requerir un reinicio. El inicio al iniciar la sesión se desactivará como medida de seguridad.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "¿Estás seguro de que quieres restablecer todas las preferencias?";
/* Shown in menu */
"Brightness" = "Brillo";
/* Build */
"Build" = "Compilación";
/* Shown in the Display Preferences */
"Built-in Display" = "Pantalla incorporada";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Contraste";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Pantallas";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "¿Permitir un mayor atenuación?";
/* Shown in the Display Preferences */
"External Display" = "Pantallas externas";
/* Shown in the main prefs window */
"General" = "General";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Otras pantallas";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "¿Restablecer las preferencias?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Atajos no disponibles";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name */
"Unknown" = "Desconocido";
/* Version */
"Version" = "Versión";
/* Shown in the Display Preferences */
"Virtual Display" = "Pantalla virtual";
/* Shown in menu */
"Volume" = "Volumen";
/* Shown in the alert dialog */
"Yes" = "Sí";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Es necesario activar MonitorControl en Preferencias del Sistema > Seguridad y Privacidad > Accesibilidad para que los atajos de teclado funcionen";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Agradecimientos especiales para colaboradores!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Ocultar ícono de menú";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Desactivar el OSD de volumen de macOS";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Reiniciar configuraciones";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Activar el comando DDC de silenciamiento";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Teclado:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Custom";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Sitio web";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Advertencia! La modificación de algunos de estos ajustes puede provocar un comportamiento inesperado.";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Mostrar barra de volumen en el menú";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Cambiar el brillo y volumen para todas las pantallas";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimal";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Name";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Reducir aún más el brillo mediante la atenuación por software";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Ninguno";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Control de brillo:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Brillo";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Estas opciones sólo funcionan para pantallas controladas por hardware (DDC).";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Iniciar app en inicio";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Recuento de lectura personalizado:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Usa las teclas de brillo o volumen de tu teclado";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Habilitar la atenuación por software si es necesario";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "More Info";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Tipo de pantalla:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menú de contenidos:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Si no se puede controlar una pantalla externa, se utilizará la atenuación por software.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Volumen";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Aplicación:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Método de control:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Mayor retardo en las operaciones de lectura del DDC";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Si el menú está oculto, solo reinicia la app para mostrar las configuraciones!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Avanzado:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normal";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Habilitar el control de pantalla en teclado";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Heavy";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Brillo y volumen";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "Modo de lectura DDC:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Mostrar configuraciones avanzadas debajo de las pantallas";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "None";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Mostrar barra de contraste en el menú";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Restaurar preferencias";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Configuraciones adicionales:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Esto activa la atenuación adicional por software después de que la pantalla haya alcanzado el brillo cero por hardware. El deslizador del menú también se ve afectado, siendo el 50% el punto de transición. Sólo funciona para pantallas controladas por DDC.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identificador:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Utilizar el control DDC por hardware";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Donar";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Quitar";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Ajustes...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "À Propos";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Êtes-vous sûr de vouloir augmenter cette durée? Cela peut entrainer un gêle du système et nécessiter un redémarrage. Par sécurité, cette option sera désactivée au démarrage.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Êtes-vous sûr de vouloir réinitialiser toutes les préférences?";
/* Sown in menu */
"Brightness" = "Luminosité";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Écran intégré";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Contraste";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Écrans";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Activer une plus longue durée ?";
/* Shown in the Display Preferences */
"External Display" = "Écran externe";
/* Shown in the main prefs window */
"General" = "Général";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Matériel (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "Non";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Autre écran";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Réinitialiser les préférences ?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Mode sans échec activé";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Maj. appuyée pendant le démarrage. MonitorControl démarré en mode sans échec. Les préférences par défaut sont utilisées, la communication via DDC est bloquée.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Raccourcis non disponible";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Inconnu";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Écran virtuel";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Oui";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Vous devez activer MonitorControl dans Préférences Système > Sécurité et confidentialité > Accessibilité pour que les raccourcis clavier fonctionnent";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Special thanks to our contributors!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Hide Menu Icon";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Disable macOS volume OSD";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Reset settings";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Enable Mute DDC command";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Keyboard:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Custom";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Website";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Show volume slider in menu";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Change Brightness and Volume for all screens";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimal";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Name";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Diminuer le contraste après la luminosité";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "None";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Brightness control:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Luminosité uniquement";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "These options work for hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Lancer MonitorControl au démarrage";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Custom read polling count:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Use the media keys of your keyboard to control Brightness & Volume.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Enable software dimming if required";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "More Info";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Display type:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menu contents:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "If an external display can't be controlled, software dimming will be used instead.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Volume uniquement";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Application:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Control method:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Longer delay during DDC read operations";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "If the menu item is hidden, just relaunch the app to reveal Preferences!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Advanced:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normal";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Enable keyboard control for display";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Heavy";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Luminosité & Volume";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC read polling mode:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Show advanced settings under Displays";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "None";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Afficher un slide pour le contraste";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Reset Preferences";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Additional settings:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identifier:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Use hardware DDC control";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Donate";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Quitter";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Préférences...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "Névjegy";
/* Shown in the main prefs window */
"App menu" = "Menü";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Biztos benne, hogy engedélyezni kívánja a hosszabb várakozást? Ez bizonyos esetekben a rendszer lefagyását eredményezheti, akár újraindítás is szükségessé válhat. A bejelentkezéskori automatikus indítást letiltjuk a biztonság kedvéért.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Biztos benne, hogy vissza kívánja állítani az alapértelmezett beállításokat?";
/* Sown in menu */
"Brightness" = "Fényerő";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Beépített";
/* Shown in menu */
"Check for updates..." = "Frissítések ellenőrzése...";
/* Shown in menu */
"Contrast" = "Kontraszt";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Kijelzők";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Hosszabb várakozás engedélyezése?";
/* Shown in the Display Preferences */
"External Display" = "Külső kijelző";
/* Shown in the main prefs window */
"General" = "Általános";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardver (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardver (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Inkompatibilis előző verzió";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Billentyűzet";
/* Shown in the alert dialog */
"No" = "Nem";
/* Shown in the Display Preferences */
"No Control" = "Nem vezérelt";
/* Shown in the Display Preferences */
"Other Display" = "Egyéb kijelző";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Az előző alkalmazásverzió beállításai nem kompatibilisek ezzel a verzióval. Visszaállítottuk az alapértelmezett beállításokat.";
/* Shown in menu */
"Preferences..." = "Beállítások...";
/* Shown in menu */
"Quit" = "Kilépés";
/* Shown in the alert dialog */
"Reset Preferences?" = "Alapértelmezett beállítások";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Biztonsági mód engedélyezve";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "A Shift gomb le lett nyomva indítás közben, az alkalmazás biztonsági módban indult el. Az alapértelmezett beállításokat visszaállítottuk, a DDC olvasás letiltásra került.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Gyorsbillentyűk nem elérhetők";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Szoftver (gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Szoftver (erőltetett)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Szoftver (árnyékolás)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "Ez a kijelző nem támogatja a hardveres vezérlést, hanem szoftveres fényerővezérlést tesz lehetővé gamma táblázat manipulálás segítségével. Ennek okai lehetnek a nem támogatott kimenet (pl. Mac mini HDMI kimenet) vagy feketelistára helyezett kijelző használata.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "A kijelzőnek nem meghatározott a vezérlési státusza.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "Ez a kijelző támogatja a hardveres vezérlést, azonban az aktuális beállítások csak szoftveres vezérlést tesznek lehetővé.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "Ez a kijelző támogatja a hardveres vezérlést. Amennyiben problémákat tapasztal, kapcsolja ki a hardveres DDC vezérlést a szoftveres alternatíva érdekében!";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "Ez a kijelző az Apple saját fényerőkezelő protokolját támogatja. Ez lehetővé teszi a macOS számára is a fényerő vezérlését, MonitorControl nélkül is.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "Ez egy virtuális kijelző (AirPlay, Sidecar, DisplayLink állomás vagy hasonló), amely nem támogatja sem a hardveres, sem a szoftveres gamma táblázat alapú fényerőkezelést. Emiatt a program árnyékolást alkalmaz, amennyiben a kijelző nincs tükrözve. Az egérkurzorra az árnyékolás nincs hatással, valamint képernyőhibák jelentkezhetnek, amikor teljes képernyős ablakváltás történik.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Ismeretlen";
/* Version */
"Version" = "Verzió";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtuális kijelző";
/* Shown in menu */
"Volume" = "Hangerő";
/* Shown in the alert dialog */
"Yes" = "Igen";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Engedélyeznie kell a MonitorControlt a Rendszerbeállítások > Biztonság és adatvédelem > Kisegítő lehetőségek alatt a gyorsbillentyűk használatához!";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Beépített és Apple kijelzők fényerejének szinkronizálása";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Képernyőbeállítások olvasásának megkísérlése";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Hagyományos hangerő és némító billentyűk";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Hangerő módosítása minden képernyőn";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Egyéni billentyűkombinációk";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "Az alkalmazás az egér poziciója alapján határozza meg a vezérelt kijelzőt. Az ablakfókusz mód nem mindig működik teljes képernyős programokkal.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Külön vezérlő minden képernyő számára";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Fényerő";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Beállítások visszaállítása";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Mindig rejtett";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Csúszka viselkedés:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Kombinált csúszka az összes kijelző számára";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Mértékjelek mutatása mutatása";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "A csúszka fogantyú 0%, 25%, 50%, 75% és 100% pontokhoz ugrik, hogy ezek könnyebben beállíthatók legyenek.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Finom OSD skála használata";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Köszönjük mindenkinek, aki hozzájárult!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Menü ikon elrejtése";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Egyéni billentyűkombinációk";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Fényerő";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Mértékjelek mutatása 0%, 25%, 50%, 75% és 100% pontokon.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Szoftveres sötétítési opció letiltása";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Utolsó ismert, vagy alapértelmezett fényerő, hangerő és egyéb beálltások használata. A megváltoztatott értékek első változtatáskor érvényesülnek.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Fényerő:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "Hardveresen (DDC) vezérelt kijelzők esetén működhet.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "MacOS hangerő OSD tiltása";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD skála:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Visszaállítás";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "DDC némítás parancs engedélyezése";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Billentyűzet:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Csökkentés:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Hangerő csúszka mutatása";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Egyedi";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Weboldal";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Indításkor vagy alvás után:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Figyelem! Ezen beállítások változtatása veszélyeztetheti a rendszer stabilitását!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Hangerő csúszka megjelenítése a menüben";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Az alternatív gombok az F14/F15 (Scroll Lock vagy Pause PC-k esetén ill. fényerő gombok egyes Logitech billentyűn).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Fényerő/hangerő módosítása az összes képernyőn";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP lista";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Enélkül az alkalmazás az egér poziciója alapján dönti el a vezérlendő kijelzőt. A hangeszköz neve módosítható a Kijelzők alatt szükség esetén.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "A finom átmenet letitlható a direktebb, azonnali vezérlés érdekében.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimális";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Növelés:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Skála görbület";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Némítás:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Alapesetben egy OSD egységnyi a szintváltozás. Ez a beállítás a finom vezérlést teszi alapértelmezetté.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Alaphelyzet";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Fényerő tovább csökkentése szoftveres sötétítéssel";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Frissítések automatikus ellenőrzése";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Fényerő vezérlés:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Hangerő:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Az Apple és beépített kijelzők már rendelkeznek csúszkával a Vezérlőközpontban";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Nincs";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Fényerő billentyűk:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Megjelenítés ikonként";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Csak a fényerő billentyűk";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Megjelenítés szövegként";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Ezek a lehetőségek hardveresen (DDC) vezérelhető kijelzőkkel működnek.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invertálás";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Fényerő csúszka hardveresen vagy szoftveresen vezérelt kijelzők, TV-k számára.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Hangeszköz nevének felülírása:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Indítsa újra az alkalmazást a Beállítások eléréséhez, ha az opció rejtett. Az alábbi gombbal kiléphet az alkalmazásból.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Aktuális";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Rögzítés:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Elrejtés";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "További vezérlők:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Fényerő";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Finom fényerő átmenet engedélyeze";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Finom OSD skála a hangerő számára";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Automatikus indítás bejelentkezéskor";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Olvasási próbálkozások:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Minden képernyő módosítása";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "A képernyő fényerejét és hangerejét az Apple Billentyűzet fényerő és hangerő gombjaival lehet szabályozni.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Megjegyzés: a Shift nyomvatartásával induláskor aktiválhatja a Biztonsági Módot az alapértelmezett értékek helyreállítására.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Átállás szoftveres sötétítésre, ha szükséges";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Utolsó mentett értékek elküldése a kijelzőnek";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "További információ";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Engedélyezés Apple és beépített kijelzők esetén is";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Szoftveres sötétítés használatának mellőzése, ha hardveres állítás nem lehetséges.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Rögzítés:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Fényerő és kontraszt vezérlés:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Kijelző típusa:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menü tartalom:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Vezérelt képernyő:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Szoftveres sötétítés használata, ha egy külső kijelzőt nem lehet vezérelni. Csak a fényerő szabályozás elérhető ilyen kijelzőknél.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Csúszka igazítás engedélyezése";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Csak a hangerő billentyűk";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Mindig legyen látható a menüben";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Ablakfókusz határozza meg a vezérelt kijelzőt";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Kontraszt:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Növelés:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Fényerő csúszka megjelenítése a menüben";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Külön skála kombinált hardver/szoftver sötétítésnál";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Hangeszköz nevének megfelelő kijelző vezérlése";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Fényerő";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Billentyűk letiltása";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Alkalmazás:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Hagyományos fényerő billentyűk használata";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "számosság:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Az Apple billentyűzet fényerőgombjainak használata. A Control lenyomásával a beépített kijelzőt, a Control+Option segítségével a külső kijelzőt vezérelheti. Shift+Option finom vezérlést tesz lehetővé. Control+Option+Command nyomvatartása a kontrasztot szabályozza. ";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Vezérlés:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Hosszabb várakozás DDC olvasáskor";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Ha rejtett, indítsa el újra az alkalmazást a beállítások megnyitásához!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "Hardveres (DDC) vezérelt kijelzők esetén.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Az aktuális kijelző csúszkáinak mutatása";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Szoftveres sötétítés alkalmazása, miután a kijelző elérte a minimális hardveres fényerőt. Csak hardveres (DDC) kijelzők esetén.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Hagyományos és egyedi billentyűkombinációk";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Kilépés";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Kontraszt csúszka megjelenítése";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Hangerő vezérlés (DDC esetén):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Százalékok mutatása a csúszka mellett a precizitás érdekében.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Hardveres és szoftveres fényerővezérlés kombinálása";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Haladó:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normál";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Fényerő";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Haladó beállítások mutatása";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "Általános menüpontok stílusa:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menü ikon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Akkor működik, ha hangerővezérléssel nem rendelkező hangeszköz van kiválasztva.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Fényerő";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Vezérlés billentyűzetről";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Kontraszt";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Alternatív fényerőgombok használatának mellőzése";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Magas";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Fényerő és hangerő billentyűk";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Több kijelző esetén:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC olvasás mód:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Haladó beállítások a Kijelzők alatt";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "Általános beállítások:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Nincs";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Hasznos, amikor a kijelző hajlamos visszaállni alvás után.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Kontraszt csúszka megjelenítése a menüben";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "A környezetifény-érzékelő, Touch Bar, Vezérlőközpont módosításai minden kijelzőre hatással vannak.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Alaphelyzetbe állítás";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Haladó beállítások és további információk megjelenítése a Beállításokban.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Additional settings:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Fényerő";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "A fényerő szoftveres csökkentése, ha a kijelző elérte a nulla fényerőt. A menü csúszkát is befolyásolja, 50% a váltóhatár. Csak hardveresen (DDC) vezérelhető kijelzőkkel működik.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Beállítások frissítése a kijelző állapota alapján. Nem minden hardverrel működik.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Csak ha legalább egy vezérlő megjelenik";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Hagyományos és egyedi billentyűkombinációk";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "A szinkronizációs és mindent vezérlő beállításokkal működik a legjobban.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Elérhető";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "A teljes OSD skála elérhető a hardveres fényerővezérlés számára, majd a minimum elérése után további szoftveres csökkentés történik.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Utolsó ismert beállítások feltételezése (javasolt)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Csökkentés:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Azonosító:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Hardveres DDC vezérlés";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Billentyűk letiltása";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Adakozás";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Százalékok mutatása";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Kombinált fényerő váltópont:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Kilépés";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Beállítások...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "Informazioni";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Sei sicuro di voler abilitare un delay più lungo? Ciò potrebbe causare un freeze del sistema e richeidere un riavvio. L'avvio al login sarà disabilitato per sicurezza.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Sei sicuro di voler resettare tutte le preferenze?";
/* Sown in menu */
"Brightness" = "Luminosità";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Monitor Built-in";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Contrasto";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Monitor";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Abilitare Delay più Lungo?";
/* Shown in the Display Preferences */
"External Display" = "Monitor esterno";
/* Shown in the main prefs window */
"General" = "Generale";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Altri monitor";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Resettare Preferenze?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode attivata";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Il tasto shift è stato premuto durante l'avvio. MonitorControl avviato in safe mode. Verranno caricate le impostazioni di default, la lettura DDC è bloccata.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Comandi rapidi non disponibili";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Sconosciuto";
/* Version */
"Version" = "Versione";
/* Shown in the Display Preferences */
"Virtual Display" = "Monitor virtuale";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Sì";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "E' necessario abilitare MonitorControl nelle Preferenze di Sistema > Sicurezza e Privacy > Accessibilità affinchè le abbreviazioni da tastiera funzionino";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Ringraziamenti speciali ai nostri contributori!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Nascondi Icona del Menu";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Disabilita volume OSD di macOS";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Resetta preferenze";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Abilità comando Muto DDC";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Tastiera:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Custom";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Sito web";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Attenzione! La modifica di queste opzioni può causare freeze di sistema o comportamenti inattesi!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Mostra un selettore per il Volume";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Cambia Luminosità e Volume di tutti i display";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimale";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Resetta Nome";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Abbassa il contrasto dopo la luminosità";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "None";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Controllo luminosità:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Solo Luminosità";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Queste opzioni funzionano solo con monitor controllati via hardware (DDC)";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Avvia MonitorControl al login";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Numero letture polling";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Usa i tasti media della tastiera per controllare Luminosità & Volume";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Abilità il dimming software se necessario";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Più informazioni";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Tipo di monitor:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Contenuto menu:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Se non è possibile controllare un monitor esterno, sarà utilizzato il dimmering software.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Solo Volume";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Applicazione:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Tipo di controllo:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Delay più lungo durante le operazioni di lettura DDC";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Se l'icona del menu è nascosta, rilancia l'app per visualizzare le Preferenze!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Avanzate:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normale";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Controlla monitor da tastiera";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Intensiva";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Luminosità e Volume";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "Modalità lettura polling DDC:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Mostra opzioni avanzate sotto la voce Monitor";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Nessuno";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Mostra un selettore per il Contrasto";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Resetta Preferenze";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Opzioni aggiuntive:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Attiva il dimming software dopo che il monitor ha raggiunto la luminosità hardware zero. Infleunza anche il selettore del menu con il 50% come punto di transizione. Funziona solo con i monitor controllati da DDC.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identificatore:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Usa controllo hardware DDC";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Fai una donazione";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Esci";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Preferenze...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "About";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "すべての環境設定を初期状態に戻してよろしいですか?";
/* Sown in menu */
"Brightness" = "画面輝度";
/* Build */
"Build" = "ビルド";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "コントラスト";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "画面";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Enable Longer Delay?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "一般";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "環境設定を初期状態に戻しますか?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "ショートカットキーを使用できません";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "不明";
/* Version */
"Version" = "バージョン";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtual Display";
/* Shown in menu */
"Volume" = "音量";
/* Shown in the alert dialog */
"Yes" = "Yes";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "ショートカットキーを使用するには、 環境設定 > セキュリティとプライバシー > アクセリビリティ からMonitorControlを有効にしてください。";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Special thanks to our contributors!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "メニューアイコンを隠す";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "macOSの音量調節OSDを無効にする";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "初期設定に戻す";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Enable Mute DDC command";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Keyboard:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "カスタム";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "ウェブサイト";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "音量変更用のスライダーをメニューに表示する";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "すべての画面の画面輝度と音量を変更する";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "低頻度";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Name";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "ソフトウェアディミングを用いて輝度を通常以上に下げる";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "設定しない";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Brightness control:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "画面輝度のみ";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "These options work for hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "ログイン時にMonitorControlを起動する";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Custom read polling count:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Use the media keys of your keyboard to control Brightness & Volume.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "必要に応じてソフトウェア調光を有効にする";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "More Info";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Display type:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menu contents:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "If an external display can't be controlled, software dimming will be used instead.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "音量のみ";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Application:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Control method:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Longer delay during DDC read operations";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "If the menu item is hidden, just relaunch the app to reveal Preferences!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Advanced:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "普通";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "画面のキーボード操作を有効にする";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "高頻度";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "画面輝度と音量";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC read polling mode:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "画面に詳細設定を表示";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "設定しない";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "コントラスト変更用のスライダーをメニューに表示する";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "環境設定を初期状態に戻す";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Additional settings:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identifier:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "ハードウェアDDC制御を使用する";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "寄付";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "MonitorControl を終了";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "環境設定...";

View file

@ -0,0 +1,134 @@
/* Shown in the main prefs window */
"About" = "정보";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "응답지연 시간을 연장하시겠습니까? 시스템이 멈추거나 재시작이 필요할 수 있습니다. 로그인 시 자동 실행 옵션은 안전을 위해 비활성화됩니다.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "모든 설정을 초기화하시겠습니까?";
/* Shown in menu */
"Brightness" = "밝기";
/* Build */
"Build" = "빌드";
/* Shown in the Display Preferences */
"Built-in Display" = "내장 디스플레이";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "대비";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "디스플레이";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "응답지연 시간 연장";
/* Shown in the Display Preferences */
"External Display" = "외장 디스플레이";
/* Shown in the main prefs window */
"General" = "일반";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "하드웨어 (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "아니오";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "그 외 디스플레이";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "설정 초기화";
/* Shown in the alert dialog */
"Safe Mode Activated" = "안전모드 활성화 됨";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "쉬프트가 눌린 채로 시작되었습니다. MonitorControl 이 안전모드로 시작되었습니다. 기본 설정으로 다시 로딩되었으며, DDC 읽기가 제한됩니다.";
/* Shown in the alert dialog */
"Shortcuts not available" = "단축키를 사용할 수 없음";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name */
"Unknown" = "알 수 없음";
/* Version */
"Version" = "버전";
/* Shown in the Display Preferences */
"Virtual Display" = "가상 디스플레이";
/* Shown in menu */
"Volume" = "볼륨";
/* Shown in the alert dialog */
"Yes" = "예";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "단축키가 동작하기 위해서는 시스템 환경설정 > 보안 및 개인 정보 보호 > 손쉬운 사용에서 MonitorControl 항목을 체크해야 합니다.";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "기여자에게 특별한 감사를 드립니다!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "메뉴 항목 숨기기";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "맥OS 볼륨 OSD 비활성화";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "설정 초기화";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "음소거 DDC 커맨드 활성화";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "키보드:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "사용자 설정";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "웹사이트";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ 경고! 이 설정을 변경하면 시스템이 멈추거나 예기치 않은 동작이 발생할 수 있습니다";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "메뉴에서 볼륨 슬라이더 표시";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "모든 화면의 밝기와 볼륨 조절";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "최소";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Name";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "소프트웨어 디밍을 통한 더 낮은 밝기";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "설정하지 않음";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "밝기 조절:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "밝기";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "이 옵션들은 하드웨어 (DDC) 제어 방식의 디스플레이에서만 작동됩니다.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "로그인 시 시작";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "리드 폴링 횟수:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "밝기와 볼륨을 조절하기 위해 미디어 키를 사용합니다.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "필요할 때 소프트웨어 디밍 활성화";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "더 알아보기";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "디스플레이 타입:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "메뉴 컨텐츠:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "외장 디스플레이가 제어되지 않을 때, 소프트웨어 디밍을 대신 사용합니다.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "볼륨";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "애플리케이션:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "제어 방식:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "DDC 리드 작업 중 응답지연 시간 연장";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "이 메뉴 항목이 안 보인다면, 앱을 재실행해야 설정에 나타납니다!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "고급:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "보통";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "디스플레이 키보드 제어 활성화";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "자주";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "밝기와 볼륨";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC 리드 폴링 모드:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "디스플레이 탭 아래에 고급 설정 표시";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "안함";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "메뉴에서 대비 슬라이더 표시";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "설정 초기화";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "추가 설정:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "이 옵션은 하드웨어 밝기가 최소에 다다르면 추가적인 소프트웨어 디밍을 활성화합니다. 메뉴 슬라이더의 50%를 기준으로 전환합니다. DDC 제어 방식 디스플레이에서만 작동됩니다.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "식별자:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "하드웨어 DDC 제어 사용";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "기부하기";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "종료";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "환경설정...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "Over";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Weet u zeker dat u een langere vertraging wilt inschakelen? Als u dit doet kan uw systeem vastlopen en een herstart nodig hebben. Start bij het inloggen wordt uitgeschakeld als veiligheidsmaatregel.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Weet u zeker dat u alle voorkeuren wilt herstellen?";
/* Shown in menu */
"Brightness" = "Helderheid";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Ingebouwd Beeldscherm";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Contrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Beeldschermen";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Langere vertraging inschakelen?";
/* Shown in the Display Preferences */
"External Display" = "Extern Beeldscherm";
/* Shown in the main prefs window */
"General" = "Algemeen";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "Nee";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Ander Beeldscherm";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Voorkeuren?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Veilige Modus Geactiveerd";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift werd ingedrukt tijdens het opstarten. MonitorControl is gestart in veilige modus. Standaardinstellingen zijn herladen, DDC uitlezen is geblokkeerd.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Sneltoetsen niet beschikbaar";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* unknown display name
unknown model
unknown vendor */
"Unknown" = "Onbekend";
/* Version */
"Version" = "Versie";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtueel Beeldscherm";
/* Shown in menu */
"Volume" = "Volume";
/* Shown in the alert dialog */
"Yes" = "Ja";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "U moet MonitorControl inschakelen in Systeemvoorkeuren > Beveiliging en Privacy > Privacy > Toegankelijkheid inschakelen, zodat de sneltoetsen werken.";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Speciale dank aan onze bijdragers!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Verberg Menu Icoon";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "MacOS volume OSD uitzetten";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Herstel instellingen";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Schakel DDC commando voor dempen in";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Toetsenbord:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Custom";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Website";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Waarschuwing! Het wijzigen van sommige instellingen kan er voor zorgen dat het systeem vastloopt of onverwacht gedrag vertoont!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Toon volumeschuifregelaar in menu";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Verander Helderheid en Volume voor alle beeldschermen";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Gebruik F14 / F15 keys voor helderheid";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimaal";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Naam";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Verder verlagen van helderheid via softwarematig dimmen";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Geen";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Helderheid regelen:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Alleen Helderheid";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Deze opties werken alleen voor hardware (DDC) gestuurde beeldschermen.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Start bij Inloggen";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Aangepast aantal peilingen:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Gebruik de mediatoetsen van uw toetsenbord om Helderheid en Volume te regelen";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Schakel indien nodig softwarematig dimmen in";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Meer Info";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Beeldscherm type:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menu inhoud:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Als een extern beeldscherm niet kan worden bediend, wordt in plaats daarvan softwarematig dimmen gebruikt.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Alleen volume";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Applicatie:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Besturingsmethode:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Langere vertraging tijdens DDC-leesbewerkingen";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Als het menu-item verborgen is, start u de app opnieuw om Voorkeuren weer te geven!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Geavanceerd:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normaal";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Toetsenbordbediening inschakelen voor beeldscherm";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Zwaar";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Zowel Helderheid als Volume";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC peiling modus:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Geavanceerde instellingen weergeven onder Beeldschermen";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Geen";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Toon contrastschuifregelaar in menu";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Reset Voorkeuren";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Aanvullende instellingen:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Dit activeert extra softwarematig dimmen nadat het beeldscherm de hardwarehelderheid nul heeft bereikt. De menuschuifregelaar wordt ook beïnvloed, waarbij 50% het overgangspunt is. Werkt alleen voor DDC-gestuurde beeldschermen.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identificatie:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Gebruik hardwarematige DDC-besturing";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Doneer";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Stop";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Voorkeuren...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "Informacje";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Czy na pewno chcesz ustawić większe opóźnienie? Może to skutkować zawieszeniem systemu i koniecznością restartu. Uruchamianie programu podczas logowania zostanie wyłączone.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Czy na pewno chcesz przywrócić wszystkie ustawienia do stanu początkowego?";
/* Sown in menu */
"Brightness" = "Jasność";
/* Build */
"Build" = "Kompilacja";
/* Shown in the Display Preferences */
"Built-in Display" = "Wbudowany Wyświetlacz";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Kontrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Wyświetlacze";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Włączyć dłuższe opóźnienie?";
/* Shown in the Display Preferences */
"External Display" = "Zewnętrzny Wyświetlacz";
/* Shown in the main prefs window */
"General" = "Ogólne";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "Nie";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Inny Wyświetlacz";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Zresetować Preferencje?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Skróty klawiszowe niedostępne";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Nieznany";
/* Version */
"Version" = "Wersja";
/* Shown in the Display Preferences */
"Virtual Display" = "Wirtualny Wyświetlacz";
/* Shown in menu */
"Volume" = "Głośność";
/* Shown in the alert dialog */
"Yes" = "Tak";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "Musisz włączyć MonitorControl w Preferencjach systemowych > Ochrona i prywatność > Dostępność, aby skróty klawiszowe mogły działać";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Specjalne podziękowania naszym współtwórcom!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Ukryj Ikonę Menu";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Wyłącz OSD głośności macOS";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Zresetuj ustawienia";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Uruchom komendę Wyciszenia DDC";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Klawiatura:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Niestandardowy";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Strona";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Uwaga! Zmiana niektórych z tych ustawień może doprowadzić do zawieszeń systemu bądź też innych nieprzewidzianych zachowań!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Pokaż suwak dla głośności";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Zmień Jasność i Głośność dla wszystkich wyświetlaczy";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimalny";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Zresetuj Nazwę";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Obniż kontrast po jasności.";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Nikt";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Sterowanie jasnością:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Tylko jasność";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Te opcje działają wyłącznie z ekranami sterowanymi przez hardware (DDC).";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Uruchamiaj MonitorContol podczas logowania";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Niestandardowa liczba odczytywania zapytań:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Użyj klawiszy multimedialnych na klawiaturze aby kontrolować Jasność i Głośność.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Włącz ściemnianie software'owe jeśli wymagane";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Więcej informacji";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Rodzaj wyświetlacza:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Zawartość menu:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Jeśli zewnętrzny wyświetlacz nie może być kontrolowany, zostanie zastosowane ściemnianie software'owe.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Tylko głośność";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Aplikacja:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Metoda kontroli:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Dłuższe opóźnienie podczas odczytywania operacji DDC";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Jeśli aplikacja jest ukryta w pasku menu, uruchom ją ponownie by wyświetlić okno Preferencji!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Zaawansowane:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normalny";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Włącz sterowanie klawiaturą dla tego wyświetlacza";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Ciężki";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Jasność i Głośność";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "Tryb odczytywania zapytań DDC:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Pokaż zaawansowane ustawienia pod Wyświetlacze";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Nic";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Pokaż suwak dla kontrastu";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Resetuj Preferencje";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Dodatkowe ustawienia:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Ta opcja włącza dodatkowe ściemnianie software'owe po osiągnięciu przez wyświetlacz zerowej hardware'owej jasności. Oddziałowuje to również na suwak w menu, ustawiając 50% jako punkt przejściowy. Działa wyłącznie z wyświetlaczami sterowanymi poprzez DDC.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identyfikator:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Użyj sterowania hardware DDC";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Darowizna";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Zamknij";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Preferencje...";

View file

@ -1,6 +1,9 @@
/* Shown in the main prefs window */
"About" = "О приложении";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
@ -19,6 +22,9 @@
/* Shown in the Display Preferences */
"Built-in Display" = "Встроенный дисплей";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Контрастность";
@ -38,29 +44,38 @@
"General" = "Основные";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Аппаратно (CoreDisplay)";
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Аппаратно (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "Нет";
/* Shown in the Display Preferences */
"No Control Available" = "Нет возможности управления";
/* Shown in menu */
"No supported display found" = "Поддерживаемых дисплеев не найдено";
/* Shown in the alert dialog */
"Ok" = "ОК";
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Другой дисплей";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Сбросить параметры?";
@ -74,19 +89,37 @@
"Shortcuts not available" = "Сочетания клавиш недоступны";
/* Shown in the Display Preferences */
"Software (Forced)" = "Программно (Принудительно)";
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software Only" = "Только программно";
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Неизвестный";
/* Shown in the Display Preferences */
"Unspecified" = "Неопределённый";
/* Version */
"Version" = "Версия";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Особая благодарность нашим контрибьюторам!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Скрыть иконку в меню";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Выключить наэкранную индикацию macOS (OSD)";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Сбросить параметры";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Включить DDC-команду 'Отключить звук'";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Клавиатура:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Другое";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Веб-сайт";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Внимание! Изменение некоторых из этих настроек может привести к зависаниям системы или неожиданному поведению!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Показывать ползунок громкости в меню";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Изменить яркость и громоксть на всех экранах";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Редко";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Сбросить название";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Снижать яркость дальше с помощью программного затемнения";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Нет";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Управление яркостью:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Только яркость";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Эти опции работают только для дисплеев с аппаратным управлением (DDC).";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Запуск при входе в систему";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Свой счетчик сбора показаний:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Использовать мультимедийные клавиши клавиатуры для управления яркостью и громкостью.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Включить программное затемнение при необходимости";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Подробнее";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Тип дисплея:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Содержание меню:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Когда нет возможности управлять внешним дисплеем, вместо него будет использовано программное затемнение.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Только громкость";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Приложение:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Метод управления:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Более длительная задержка при выполнении операций считывания данных DDC";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Если пункт меню скрыт, просто перезапустите приложение, чтобы открыть Параметры!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Расширенные:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Нормально";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Включить управление клавиатурой для дисплея";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Часто";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Как яркость, так и громкость";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "Режим сбора показаний DDC:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Показать расширенные настройки в разделе Дисплеи";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Нет";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Показать ползунок контрастности в меню";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Сбросить параметры";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Дополнительные настройки:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Это активирует дополнительное программное затемнение после достижения дисплеем нулевой аппаратной яркости. На ползунок меню также влияет 50% - точка перехода. Работает только для дисплеев с управлением DDC.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Идентификатор:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Использовать аппаратное управление DDC";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Пожертвовать";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Выйти";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Параметры...";

View file

@ -0,0 +1,134 @@
/* Shown in the main prefs window */
"About" = "Hakkında";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Daha uzun bir gecikmeyi etkinleştirmek istediğinizden emin misiniz? Bunu yapmak sisteminizi dondurabilir ve yeniden başlatılabilir. Başlangıçta güvenlik önlemi olarak devre dışı bırakılır.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Tüm ayarları sıfırlamak istediğinize emin misiniz?";
/* Shown in menu */
"Brightness" = "Parlaklık";
/* Build */
"Build" = "Derleme";
/* Shown in the Display Preferences */
"Built-in Display" = "Dahili Ekran";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Kontrast";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Telif Hakkı Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Ekranlar";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Daha Uzun Gecikmeyi Etkinleştir?";
/* Shown in the Display Preferences */
"External Display" = "Harici Ekran";
/* Shown in the main prefs window */
"General" = "Genel";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Donanım (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "Hayır";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Diğer Ekran";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Ayarları Sıfırla?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "Kısayollar bulunamadı";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name */
"Unknown" = "Bilinmeyen";
/* Version */
"Version" = "Versiyon";
/* Shown in the Display Preferences */
"Virtual Display" = "Sanal Ekran";
/* Shown in menu */
"Volume" = "Ses";
/* Shown in the alert dialog */
"Yes" = "Evet";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "MonitorControl klavye kısayollarını aktif hale getirmek için Sistem Tercihleri > Güvenlik ve Gizlilik > Erişebilirlik altından izin vermeniz gerekmektedir";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Katkıda bulunanlarımıza özel teşekkürler!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Menü simgesini gizle";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "macOS ses OSD'yi pasif et";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Ayarları sıfırla";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Mute DDC komutunu etkinleştir";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Klavye:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Özel";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Web Sitesi";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Uyarı! Bu ayarların bazılarını değiştirmek, sistemin donmasına veya beklenmeyen davranışlara neden olabilir!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Menüde ses ayarını göster";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Tüm ekranlar için Parlaklığı ve Sesi değiştir";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Minimal";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "İsmi Sıfırla";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Yazılımsal karartma yoluyla daha düşük parlaklık";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Yok";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Parlaklık kontrolü:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "Sadece parlaklık";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "Bu seçenekler yalnızca donanım (DDC) kontrollü ekranlar için çalışır.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Başlangıçta çalıştır";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Özel okuma yoklama sayımı:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Parlaklığı ve Sesi değiştirmek için klavyedeki medya tuşlarını kullan";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Gerekirse yazılımsal karartma etkinleştir";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Detaylı Bilgi";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Ekran tipi:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menü içerikleri:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "Harici bir ekran kontrol edilemezse, yazılımsal karartma yerine kullanılacaktır.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "Sadece ses";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Uygulama:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Kontrol yöntemi:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "DDC okuma işlemleri sırasında daha uzun gecikme";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "Menü öğesi gizlenirse, tercihleri ortaya çıkarmak için uygulamayı yeniden başlatın!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Gelişmiş:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Normal";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Bu ekran için klavye kısayollarını etkinleştir";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Ağır";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Hem Parlaklık Hem de Ses";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC Okuma Oylama Modu:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Ekranlarda gelişmiş ayarları göster";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "Yok";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Menüde kontrast ayarını göster";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Ayarları Sıfırla";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Ek ayarlar:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "Bu, ekran sıfır donanım parlaklığına ulaştıktan sonra ek yazılımsal karartmayı etkinleştirir. Menü kaydırıcısı ayrıca geçiş noktası olan %50'sinden de etkilenir. Yalnızca DDC kontrollü ekranlar için çalışır.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Tanımlayıcı:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Donanım DDC kontrolünü kullan";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Bağış Yap";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Çıkış";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Tercihler...";

View file

@ -1,6 +1,9 @@
/* Shown in the main prefs window */
"About" = "About";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
@ -19,6 +22,9 @@
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "Контраст";
@ -38,29 +44,38 @@
"General" = "Загальні";
/* Shown in the Display Preferences */
"Hardware (CoreDisplay)" = "Hardware (CoreDisplay)";
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control Available" = "No Control Available";
/* Shown in menu */
"No supported display found" = "Не знайдено жодного дісплею";
/* Shown in the alert dialog */
"Ok" = "ОК";
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Preferences?";
@ -74,19 +89,37 @@
"Shortcuts not available" = "Скорочення недоступні";
/* Shown in the Display Preferences */
"Software (Forced)" = "Software (Forced)";
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software Only" = "Software Only";
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Невідомо";
/* Shown in the Display Preferences */
"Unspecified" = "Unspecified";
/* Version */
"Version" = "Версія";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "Special thanks to our contributors!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "Hide Menu Icon";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "Disable macOS volume OSD";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "Reset settings";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Enable Mute DDC command";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "Keyboard:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "Власне";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "Website";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "Show volume slider in menu";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "Change Brightness and Volume for all screens";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "Мінім.";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "Reset Name";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "Зменшувати Контраст після Яскравості";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "Немає";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "Brightness control:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "лише Яскравість";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "These options work for hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "Запускати MonitorControl разом із системою";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "Custom read polling count:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "Use the media keys of your keyboard to control Brightness & Volume.";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "Enable software dimming if required";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "Детальніше";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "Display type:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "Menu contents:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "If an external display can't be controlled, software dimming will be used instead.";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "лише Гучність";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "Application:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "Control method:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "Longer delay during DDC read operations";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "If the menu item is hidden, just relaunch the app to reveal Preferences!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "Advanced:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "Звич.";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "Enable keyboard control for display";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "Част.";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "Яскравість та Гучність ";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC read polling mode:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "Show advanced settings under Displays";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "None";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "Показувати слайдер для контрасту";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "Reset Preferences";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "Additional settings:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only.";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "Identifier:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "Use hardware DDC control";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "Donate";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "Завершити MonitorControl";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "Налаштування";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "About";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure.";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "Are you sure you want to reset all preferences?";
/* Sown in menu */
"Brightness" = "亮度";
/* Build */
"Build" = "Build";
/* Shown in the Display Preferences */
"Built-in Display" = "Built-in Display";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "对比度";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "Displays";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "Enable Longer Delay?";
/* Shown in the Display Preferences */
"External Display" = "External Display";
/* Shown in the main prefs window */
"General" = "通用";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "Hardware (DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "No";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "Other Display";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "Reset Preferences?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "快捷键不可用";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "Unknown";
/* Version */
"Version" = "Version";
/* Shown in the Display Preferences */
"Virtual Display" = "Virtual Display";
/* Shown in menu */
"Volume" = "音量";
/* Shown in the alert dialog */
"Yes" = "Yes";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "您需要在「系统偏好设置」>「安全性与隐私」>「辅助功能」中开启 MonitorControl 以便使快捷键生效";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "特别感谢我们的贡献者!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "隐藏菜单图标";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "隐藏 macOS 音量显示";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "重置设置";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "Enable Mute DDC command";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "键盘:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "自定义";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "网站";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ 警告! 修改这些设置可能导致系统死机或不可预料的行为!";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "在菜单中显示音量滑块";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "改变所有屏幕的亮度和音量";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "少量";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "重置名称";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "对比度与亮度同时降低";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "不请求";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "亮度控制:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "仅亮度";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "这些选项只对于硬件(DDC)控制的显示器有效";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "登录时启动 MonitorControl";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "自定义轮询计数:";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "使用媒体按键控制亮度和音量";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "按需开启软件遮罩";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "了解更多";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "显示类型:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "菜单内容:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "如果外置显示器无法控制,可以尝试使用软件遮罩。";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "仅音量";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "应用:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "控制方法:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "为 DDC 读取提供更长等待时间";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "如果菜单项目被隐藏,只需重启软件即可恢复偏好设置!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "高级:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "正常";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "启用键盘控制显示";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "多次";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "亮度和音量";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC read polling mode:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "在显示器下显示高级设置";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "无";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "显示对比度滑动条";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "重置偏好设置";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "高级设置:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "当显示器硬件亮度到达0时会激活软件遮罩。50%是过度点,该选项对菜单中的滑块也适用。仅对可以通过 DDC 控制的显示器有效。";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "ID:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "使用硬件 DDC 控制";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "赞助";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "退出";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "偏好设置...";

View file

@ -0,0 +1,136 @@
/* Shown in the main prefs window */
"About" = "關於";
/* Shown in the main prefs window */
"App menu" = "App menu";
/* Apple Silicon designation (shown after the version number in Preferences) */
"Apple Silicon" = "Apple Silicon";
/* Shown in the alert dialog */
"Are you sure you want to enable a longer delay? Doing so may freeze your system and require a restart. Start at login will be disabled as a safety measure." = "您確定要啟用更長的延遲嗎? 這樣做可能會使系統崩潰並需要重新啟動。 作為安全措施,登錄時啟動將被禁用。";
/* Shown in the alert dialog */
"Are you sure you want to reset all preferences?" = "確定要重置嗎?";
/* Sown in menu */
"Brightness" = "亮度";
/* Build */
"Build" = "建構";
/* Shown in the Display Preferences */
"Built-in Display" = "內置螢幕";
/* Shown in menu */
"Check for updates..." = "Check for updates...";
/* Shown in menu */
"Contrast" = "對比度";
/* Version */
"Copyright Ⓒ MonitorControl, " = "Copyright Ⓒ MonitorControl, ";
/* Shown in the main prefs window */
"Displays" = "螢幕";
/* Shown in the alert dialog */
"Enable Longer Delay?" = "啟用更長的延遲?";
/* Shown in the Display Preferences */
"External Display" = "外接螢幕";
/* Shown in the main prefs window */
"General" = "通用";
/* Shown in the Display Preferences */
"Hardware (Apple)" = "Hardware (Apple)";
/* Shown in the Display Preferences */
"Hardware (DDC)" = "硬體(DDC)";
/* Shown in the alert dialog */
"Incompatible previous version" = "Incompatible previous version";
/* Intel designation (shown after the version number in Preferences) */
"Intel" = "Intel";
/* Shown in the main prefs window */
"Keyboard" = "Keyboard";
/* Shown in the alert dialog */
"No" = "否";
/* Shown in the Display Preferences */
"No Control" = "No Control";
/* Shown in the Display Preferences */
"Other Display" = "其他螢幕";
/* Shown in the alert dialog */
"Preferences for an incompatible previous app version detected. Default preferences are reloaded." = "Preferences for an incompatible previous app version detected. Default preferences are reloaded.";
/* Shown in menu */
"Preferences..." = "Preferences...";
/* Shown in menu */
"Quit" = "Quit";
/* Shown in the alert dialog */
"Reset Preferences?" = "重置偏好設定?";
/* Shown in the alert dialog */
"Safe Mode Activated" = "Safe Mode Activated";
/* Shown in the alert dialog */
"Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked." = "Shift was pressed during launch. MonitorControl started in safe mode. Default preferences are reloaded, DDC read is blocked.";
/* Shown in the alert dialog */
"Shortcuts not available" = "快捷鍵不可使用";
/* Shown in the Display Preferences */
"Software (Gamma)" = "Software (Gamma)";
/* Shown in the Display Preferences */
"Software (Gamma, Forced)" = "Software (Gamma, Forced)";
/* Shown in the Display Preferences */
"Software (Shade)" = "Software (Shade)";
/* Shown in the Display Preferences */
"This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display." = "This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.";
/* Shown in the Display Preferences */
"This display has an unspecified control status." = "This display has an unspecified control status.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control but the current settings allow for software control only." = "This display is reported to support hardware DDC control but the current settings allow for software control only.";
/* Shown in the Display Preferences */
"This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control." = "This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.";
/* Shown in the Display Preferences */
"This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well." = "This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.";
/* Shown in the Display Preferences */
"This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode." = "This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.";
/* Unknown display name
Unknown model
Unknown vendor */
"Unknown" = "未知";
/* Version */
"Version" = "版本";
/* Shown in the Display Preferences */
"Virtual Display" = "虛擬螢幕";
/* Shown in menu */
"Volume" = "音量";
/* Shown in the alert dialog */
"Yes" = "是";
/* Shown in the alert dialog */
"You need to enable MonitorControl in System Preferences > Security and Privacy > Accessibility for the keyboard shortcuts to work" = "您需要在「系統偏好設定」>「安全性與隱私權」>「輔助使用」中開啟 MonitorControl 使快捷鍵生效";

View file

@ -1,23 +1,98 @@
/* Class = "NSButtonCell"; title = "Sync brightness changes from Built-in and Apple displays"; ObjectID = "0ca-DG-AgB"; */
"0ca-DG-AgB.title" = "Sync brightness changes from Built-in and Apple displays";
/* Class = "NSButtonCell"; title = "Attempt to read display settings"; ObjectID = "0qp-fq-8MI"; */
"0qp-fq-8MI.title" = "Attempt to read display settings";
/* Class = "NSTextFieldCell"; title = "MonitorControl"; ObjectID = "1PJ-14-Bvn"; */
"1PJ-14-Bvn.title" = "MonitorControl";
/* Class = "NSMenuItem"; title = "Standard keyboard volume and mute keys"; ObjectID = "1sy-Kd-WL5"; */
"1sy-Kd-WL5.title" = "Standard keyboard volume and mute keys";
/* Class = "NSButtonCell"; title = "Change volume for all screens"; ObjectID = "1XT-3S-UuD"; */
"1XT-3S-UuD.title" = "Change volume for all screens";
/* Class = "NSTextFieldCell"; title = "DDC min"; ObjectID = "1zE-fg-xEm"; */
"1zE-fg-xEm.title" = "DDC min";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "4CG-0I-anB"; */
"4CG-0I-anB.title" = "Custom keyboard shortcuts";
/* Class = "NSTextFieldCell"; title = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps."; ObjectID = "4dX-o1-xAc"; */
"4dX-o1-xAc.title" = "MonitorControl uses mouse position to determine which display to control. Using window focus instead might not work well with full screen apps.";
/* Class = "NSButtonCell"; title = "Show separate controls for each display in menu"; ObjectID = "4t2-Rv-njr"; */
"4t2-Rv-njr.title" = "Show separate controls for each display in menu";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "567-le-fLg"; */
"567-le-fLg.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "5yT-5F-X5R"; */
"5yT-5F-X5R.title" = "Reset Preferences";
/* Class = "NSMenuItem"; title = "Always hide"; ObjectID = "6mo-7S-oOO"; */
"6mo-7S-oOO.title" = "Always hide";
/* Class = "NSTextFieldCell"; title = "Slider behavior:"; ObjectID = "75n-7M-1mS"; */
"75n-7M-1mS.title" = "Slider behavior:";
/* Class = "NSButtonCell"; title = "Use combined slider for all displays"; ObjectID = "7rn-Lu-fcl"; */
"7rn-Lu-fcl.title" = "Use combined slider for all displays";
/* Class = "NSButtonCell"; title = "Show slider tick marks"; ObjectID = "7zf-m1-gJO"; */
"7zf-m1-gJO.title" = "Show slider tick marks";
/* Class = "NSTextFieldCell"; title = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control."; ObjectID = "8Gx-Ya-zhp"; */
"8Gx-Ya-zhp.title" = "Slider knob will snap to 0%, 25%, 50%, 75% and 100% when in proximity making setting these values easier. Disable for finer control.";
/* Class = "NSButtonCell"; title = "Use fine OSD scale"; ObjectID = "8Q8-57-xnT"; */
"8Q8-57-xnT.title" = "Use fine OSD scale";
/* Class = "NSButtonCell"; title = "Special thanks to our contributors!"; ObjectID = "95V-M4-2l5"; */
"95V-M4-2l5.title" = "特別感謝的貢獻者們!";
/* Class = "NSButtonCell"; title = "Hide Menu Icon"; ObjectID = "aXL-i8-S6R"; */
"aXL-i8-S6R.title" = "隱藏選單列圖示";
/* Class = "NSMenuItem"; title = "Custom keyboard shortcuts"; ObjectID = "9eC-PD-FHl"; */
"9eC-PD-FHl.title" = "Custom keyboard shortcuts";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "9H1-0z-xsx"; */
"9H1-0z-xsx.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy."; ObjectID = "A8P-vn-DEJ"; */
"A8P-vn-DEJ.title" = "Show tick marks at 0%, 25%, 50%, 75% and 100% for accuracy.";
/* Class = "NSButtonCell"; title = "Disable software dimming as fallback"; ObjectID = "afB-Xx-Lta"; */
"afB-Xx-Lta.title" = "Disable software dimming as fallback";
/* Class = "NSTextFieldCell"; title = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user."; ObjectID = "an7-Aj-3fZ"; */
"an7-Aj-3fZ.title" = "Use brightness, volume and other settings from last time or use defaults. Values will be applied to the display upon first change by the user.";
/* Class = "NSTextFieldCell"; title = "Brightness:"; ObjectID = "Bhb-6l-uPQ"; */
"Bhb-6l-uPQ.title" = "Brightness:";
/* Class = "NSTextFieldCell"; title = "(Gamma->DDC)"; ObjectID = "Bid-UL-blc"; */
"Bid-UL-blc.title" = "(Gamma->DDC)";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only. Results may vary."; ObjectID = "bIe-6O-xEH"; */
"bIe-6O-xEH.title" = "For hardware (DDC) controlled displays only. Results may vary.";
/* Class = "NSButtonCell"; title = "Disable macOS volume OSD"; ObjectID = "bkM-Px-U3b"; */
"bkM-Px-U3b.title" = "停用macOS音量調節";
/* Class = "NSTextFieldCell"; title = "OSD scale:"; ObjectID = "bP4-GJ-vhJ"; */
"bP4-GJ-vhJ.title" = "OSD scale:";
/* Class = "NSButtonCell"; title = "Reset settings"; ObjectID = "BYS-7Y-bRz"; */
"BYS-7Y-bRz.title" = "重置設定";
/* Class = "NSButtonCell"; title = "Enable Mute DDC command"; ObjectID = "bZq-0d-lJa"; */
"bZq-0d-lJa.title" = "允許DDC靜音指令";
/* Class = "NSTextFieldCell"; title = "Keyboard:"; ObjectID = "c7N-cO-759"; */
"c7N-cO-759.title" = "鍵盤:";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "Bzq-Co-fex"; */
"Bzq-Co-fex.title" = "Decrease:";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "c9D-MB-lma"; */
"c9D-MB-lma.title" = "Show volume slider in menu";
/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Cle-DD-vR7"; */
"Cle-DD-vR7.title" = "自定義";
@ -25,77 +100,203 @@
/* Class = "NSButtonCell"; title = "Website"; ObjectID = "Cln-uW-2dd"; */
"Cln-uW-2dd.title" = "網站";
/* Class = "NSTextFieldCell"; title = "Upon startup or wake:"; ObjectID = "cNt-Cq-vK4"; */
"cNt-Cq-vK4.title" = "Upon startup or wake:";
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these settings may cause system freezes or unexpected behavior!"; ObjectID = "Cz1-Mh-llk"; */
"Cz1-Mh-llk.title" = "⚠️ 警告! 更改這些設定可能導致系統崩潰或不可預期的結果";
/* Class = "NSButtonCell"; title = "Show volume slider in menu"; ObjectID = "dhP-eB-1L6"; */
"dhP-eB-1L6.title" = "在選單中顯示音量滑桿";
/* Class = "NSTextFieldCell"; title = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards)."; ObjectID = "D4H-hU-FLn"; */
"D4H-hU-FLn.title" = "Alternative keys are the F14/F15 (Scroll Lock and Pause on PC keyboards, brightness keys on some Logitech keyboards).";
/* Class = "NSButtonCell"; title = "Change Brightness and Volume for all screens"; ObjectID = "E6M-ih-S8Y"; */
"E6M-ih-S8Y.title" = "更改所有螢幕的亮度和音量";
/* Class = "NSTextFieldCell"; title = "VCP list"; ObjectID = "D9t-vT-gNJ"; */
"D9t-vT-gNJ.title" = "VCP list";
/* Class = "NSButtonCell"; title = "Enable F14 / F15 keys for Brightness Control"; ObjectID = "E6M-ih-SZY"; */
"E6M-ih-SZY.title" = "Enable F14 / F15 keys for Brightness Control";
/* Class = "NSTextFieldCell"; title = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed."; ObjectID = "Dha-Tm-cDM"; */
"Dha-Tm-cDM.title" = "Without this the app uses mouse position to determine which display to control. You can override audio device name under Displays if needed.";
/* Class = "NSTextFieldCell"; title = "You can disable smooth transitions for a more direct, immediate control."; ObjectID = "ENt-mP-0yH"; */
"ENt-mP-0yH.title" = "You can disable smooth transitions for a more direct, immediate control.";
/* Class = "NSMenuItem"; title = "Minimal"; ObjectID = "Eq3-z9-yIo"; */
"Eq3-z9-yIo.title" = "少量";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "eue-as-VOR"; */
"eue-as-VOR.title" = "Increase:";
/* Class = "NSTextFieldCell"; title = "Scale mapping curve"; ObjectID = "Eui-5S-JR6"; */
"Eui-5S-JR6.title" = "Scale mapping curve";
/* Class = "NSTextFieldCell"; title = "Mute:"; ObjectID = "EvN-FT-vdZ"; */
"EvN-FT-vdZ.title" = "Mute:";
/* Class = "NSTextFieldCell"; title = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default."; ObjectID = "f6J-Ui-uMB"; */
"f6J-Ui-uMB.title" = "Normally keyboard controls change one OSD chiclet worth of value and Shift+Option allows fine control. This makes fine control default.";
/* Class = "NSButtonCell"; title = "Reset Name"; ObjectID = "f9g-8s-gdd"; */
"f9g-8s-gdd.title" = "重設名稱";
/* Class = "NSButtonCell"; title = "Further lower brightness via software dimming"; ObjectID = "fhy-Er-0aI"; */
"fhy-Er-0aI.title" = "亮度和對比度同時降低";
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "Faf-9L-TXx"; */
"Faf-9L-TXx.title" = "Automatically check for updates";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "fe9-Ia-t9m"; */
"fe9-Ia-t9m.title" = "Brightness control:";
/* Class = "NSTextFieldCell"; title = "Volume:"; ObjectID = "FER-Ri-4UO"; */
"FER-Ri-4UO.title" = "Volume:";
/* Class = "NSTextFieldCell"; title = "Apple and built-in displays already have a brightness slider in Control Center."; ObjectID = "fmZ-HI-Mdc"; */
"fmZ-HI-Mdc.title" = "Apple and built-in displays already have a brightness slider in Control Center.";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "FoA-yh-Yx3"; */
"FoA-yh-Yx3.title" = "不請求";
/* Class = "NSTextFieldCell"; title = "Brightness control:"; ObjectID = "hdd-Zz-buN"; */
"hdd-Zz-buN.title" = "亮度控制:";
/* Class = "NSMenuItem"; title = "Show as icons"; ObjectID = "fR3-kq-cps"; */
"fR3-kq-cps.title" = "Show as icons";
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
"hjz-0c-rvK.title" = "僅亮度";
/* Class = "NSMenuItem"; title = "Show as text"; ObjectID = "fWd-Es-zsy"; */
"fWd-Es-zsy.title" = "Show as text";
/* Class = "NSTextFieldCell"; title = "These options work for hardware (DDC) controlled displays only."; ObjectID = "iBZ-8c-JDY"; */
"iBZ-8c-JDY.title" = "這些選項僅供允許硬體控制(DDC)的螢幕使用";
/* Class = "NSTextFieldCell"; title = "Invert"; ObjectID = "G5A-y3-eZz"; */
"G5A-y3-eZz.title" = "Invert";
/* Class = "NSTextFieldCell"; title = "Brightness slider for hardware or software controlled displays or TVs."; ObjectID = "gXH-HL-ZOL"; */
"gXH-HL-ZOL.title" = "Brightness slider for hardware or software controlled displays or TVs.";
/* Class = "NSTextFieldCell"; title = "Override audio device name:"; ObjectID = "H9X-it-sXs"; */
"H9X-it-sXs.title" = "Override audio device name:";
/* Class = "NSTextFieldCell"; title = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app."; ObjectID = "hF7-fM-aKr"; */
"hF7-fM-aKr.title" = "Relaunch the app to access Preferences if the menu option is not accessible. Use the button below to quit the app.";
/* Class = "NSButtonCell"; title = "Get current"; ObjectID = "hkC-vq-IcD"; */
"hkC-vq-IcD.title" = "Get current";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "HLE-Vp-kcS"; */
"HLE-Vp-kcS.title" = "Record shortcuts:";
/* Class = "NSMenuItem"; title = "Hide"; ObjectID = "HUT-Qc-kuu"; */
"HUT-Qc-kuu.title" = "Hide";
/* Class = "NSTextFieldCell"; title = "Additional controls:"; ObjectID = "i5X-M5-Tf5"; */
"i5X-M5-Tf5.title" = "Additional controls:";
/* Class = "NSTextFieldCell"; title = "Brightness"; ObjectID = "IJB-mO-e8I"; */
"IJB-mO-e8I.title" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable smooth brightness transitions"; ObjectID = "IK4-u5-qjf"; */
"IK4-u5-qjf.title" = "Enable smooth brightness transitions";
/* Class = "NSButtonCell"; title = "Use fine OSD scale for volume"; ObjectID = "J3L-MW-iJL"; */
"J3L-MW-iJL.title" = "Use fine OSD scale for volume";
/* Class = "NSButtonCell"; title = "Start at Login"; ObjectID = "j72-NF-zsW"; */
"j72-NF-zsW.title" = "登入時啟動 MonitorControl";
/* Class = "NSTextFieldCell"; title = "Custom read polling count:"; ObjectID = "J77-r0-djA"; */
"J77-r0-djA.title" = "自訂請求次數";
/* Class = "NSButtonCell"; title = "Change for all screens"; ObjectID = "JC3-pb-XnR"; */
"JC3-pb-XnR.title" = "Change for all screens";
/* Class = "NSTextFieldCell"; title = "Use the media keys of your keyboard to control Brightness & Volume."; ObjectID = "K2r-aD-eec"; */
"K2r-aD-eec.title" = "用鍵盤上的媒體按鍵控制亮度和音量";
/* Class = "NSTextFieldCell"; title = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything."; ObjectID = "Jx2-gO-nq9"; */
"Jx2-gO-nq9.title" = "Note: you can press Shift during startup for 'Safe mode' to restore defaults and avoid reading or setting anything.";
/* Class = "NSButtonCell"; title = "Enable software dimming if required"; ObjectID = "kMa-3q-udl"; */
"kMa-3q-udl.title" = "需要時啟用軟體調光";
/* Class = "NSButtonCell"; title = "Apply last saved values to the display"; ObjectID = "K0S-zN-M4k"; */
"K0S-zN-M4k.title" = "Apply last saved values to the display";
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
"kqn-gU-mZX.ibShadowedToolTip" = "了解更多";
/* Class = "NSButtonCell"; title = "Enable for Apple branded and built-in displays as well"; ObjectID = "K6A-4z-1aQ"; */
"K6A-4z-1aQ.title" = "Enable for Apple branded and built-in displays as well";
/* Class = "NSTextFieldCell"; title = "Don't use software dimming as fallback if no hardware control is available."; ObjectID = "kgh-b4-gmO"; */
"kgh-b4-gmO.title" = "Don't use software dimming as fallback if no hardware control is available.";
/* Class = "NSTextFieldCell"; title = "Record shortcuts:"; ObjectID = "kqJ-jQ-b7U"; */
"kqJ-jQ-b7U.title" = "Record shortcuts:";
/* Class = "NSTextFieldCell"; title = "Brightness and contrast control:"; ObjectID = "LO4-4k-gxY"; */
"LO4-4k-gxY.title" = "Brightness and contrast control:";
/* Class = "NSTextFieldCell"; title = "Display type:"; ObjectID = "lSJ-6w-KJ2"; */
"lSJ-6w-KJ2.title" = "螢幕類型:";
/* Class = "NSTextFieldCell"; title = "Menu contents:"; ObjectID = "MJx-MK-e7D"; */
"MJx-MK-e7D.title" = "選單內容:";
/* Class = "NSTextFieldCell"; title = "Screen to control:"; ObjectID = "ltL-gR-K3Z"; */
"ltL-gR-K3Z.title" = "Screen to control:";
/* Class = "NSTextFieldCell"; title = "If an external display can't be controlled, software dimming will be used instead."; ObjectID = "n4V-jQ-1Ri"; */
"n4V-jQ-1Ri.title" = "如果無法控制外接螢幕,將會啟用軟體調光";
/* Class = "NSButtonCell"; title = "Enable slider snapping"; ObjectID = "MlU-hl-d46"; */
"MlU-hl-d46.title" = "Enable slider snapping";
/* Class = "NSMenuItem"; title = "Volume only"; ObjectID = "NLP-dU-Dam"; */
"NLP-dU-Dam.title" = "僅音量";
/* Class = "NSMenuItem"; title = "Always show in the menu bar"; ObjectID = "MM0-Lf-VgF"; */
"MM0-Lf-VgF.title" = "Always show in the menu bar";
/* Class = "NSButtonCell"; title = "Use window focus to determine which display to control"; ObjectID = "mMG-Ac-gdB"; */
"mMG-Ac-gdB.title" = "Use window focus to determine which display to control";
/* Class = "NSTextFieldCell"; title = "Contrast:"; ObjectID = "MMk-S2-yJN"; */
"MMk-S2-yJN.title" = "Contrast:";
/* Class = "NSTextFieldCell"; title = "Increase:"; ObjectID = "mue-fa-8z6"; */
"mue-fa-8z6.title" = "Increase:";
/* Class = "NSButtonCell"; title = "Show brightness slider in menu"; ObjectID = "MWo-6I-s9L"; */
"MWo-6I-s9L.title" = "Show brightness slider in menu";
/* Class = "NSButtonCell"; title = "Separate scales for combined hardware & software dimming"; ObjectID = "O8o-hI-8eR"; */
"O8o-hI-8eR.title" = "Separate scales for combined hardware & software dimming";
/* Class = "NSButtonCell"; title = "Use audio device name to determine which display to control"; ObjectID = "OAa-B4-8r3"; */
"OAa-B4-8r3.title" = "Use audio device name to determine which display to control";
/* Class = "NSSlider"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "OG9-iA-jK1"; */
"OG9-iA-jK1.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "oHf-Gh-68c"; */
"oHf-Gh-68c.title" = "Disable keyboard";
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
"okD-DG-pYa.title" = "應用程式:";
/* Class = "NSMenuItem"; title = "Standard keyboard brightness keys"; ObjectID = "Oke-bW-cb1"; */
"Oke-bW-cb1.title" = "Standard keyboard brightness keys";
/* Class = "NSTextFieldCell"; title = "count:"; ObjectID = "Orv-yj-Nad"; */
"Orv-yj-Nad.title" = "count:";
/* Class = "NSTextFieldCell"; title = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays."; ObjectID = "pa0-Hz-ace"; */
"pa0-Hz-ace.title" = "Use the brightness keys of your Apple keyboard to control brightness. You can hold Control to adjust the built-in display, Control+Option to adjust external displays. Hold Shift+Option for fine control. Control+Option+Command adjusts contrast on DDC compatible displays.";
/* Class = "NSTextFieldCell"; title = "Control method:"; ObjectID = "PaK-1f-DsW"; */
"PaK-1f-DsW.title" = "控制方式:";
/* Class = "NSButtonCell"; title = "Longer delay during DDC read operations"; ObjectID = "pF5-Sw-7BR"; */
"pF5-Sw-7BR.title" = "延長DDC讀取操作的延遲時間";
/* Class = "NSTextFieldCell"; title = "If the menu item is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
"PVE-y7-zIk.title" = "如果選單項被隱藏,重新啟動應用程式即可顯示首選項!";
/* Class = "NSTextFieldCell"; title = "For hardware (DDC) controlled displays only."; ObjectID = "POy-35-bh0"; */
"POy-35-bh0.title" = "For hardware (DDC) controlled displays only.";
/* Class = "NSTextFieldCell"; title = "DDC max"; ObjectID = "psF-vX-AFB"; */
"psF-vX-AFB.title" = "DDC max";
/* Class = "NSButtonCell"; title = "Show sliders only for the display currently showing the menu"; ObjectID = "PvP-TV-OmT"; */
"PvP-TV-OmT.title" = "Show sliders only for the display currently showing the menu";
/* Class = "NSTextFieldCell"; title = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only."; ObjectID = "PyY-p9-3NP"; */
"PyY-p9-3NP.title" = "Use software dimming after the display reached zero hardware brightness for extended range. Works for DDC controlled displays only.";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "QDG-SA-mRX"; */
"QDG-SA-mRX.title" = "Both standard and custom shortcuts";
/* Class = "NSButtonCell"; title = "Quit appliation"; ObjectID = "qlb-wH-qr4"; */
"qlb-wH-qr4.title" = "Quit appliation";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "qO0-dB-yUs"; */
"qO0-dB-yUs.title" = "Show contrast slider in menu";
/* Class = "NSTextFieldCell"; title = "Volume control (DDC only):"; ObjectID = "qoh-Gn-f11"; */
"qoh-Gn-f11.title" = "Volume control (DDC only):";
/* Class = "NSTextFieldCell"; title = "Show percentage next to slider for more precision."; ObjectID = "qXy-CL-Wf1"; */
"qXy-CL-Wf1.title" = "Show percentage next to slider for more precision.";
/* Class = "NSButtonCell"; title = "Combine hardware and software dimming"; ObjectID = "r76-Zc-x09"; */
"r76-Zc-x09.title" = "Combine hardware and software dimming";
/* Class = "NSTextFieldCell"; title = "Advanced:"; ObjectID = "r7i-oG-Ab6"; */
"r7i-oG-Ab6.title" = "自訂:";
@ -103,38 +304,83 @@
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "Riq-uM-bTs"; */
"Riq-uM-bTs.title" = "正常";
/* Class = "NSButton"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "RkH-7d-KvR"; */
"RkH-7d-KvR.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Show advanced settings"; ObjectID = "sAR-sh-y8e"; */
"sAR-sh-y8e.title" = "Show advanced settings";
/* Class = "NSTextFieldCell"; title = "General menu items style:"; ObjectID = "thh-DG-ecH"; */
"thh-DG-ecH.title" = "General menu items style:";
/* Class = "NSTextFieldCell"; title = "@the0neyouseek\n@JoniVR\n@waydabber"; ObjectID = "TKd-J8-Iyk"; */
"TKd-J8-Iyk.title" = "@the0neyouseek\n@reitermarkus\n@JoniVR\n@waydabber";
/* Class = "NSTextFieldCell"; title = "Menu Icon:"; ObjectID = "u6s-Pb-BCG"; */
"u6s-Pb-BCG.title" = "Menu Icon:";
/* Class = "NSTextFieldCell"; title = "Works if an audio device is selected with no native volume control."; ObjectID = "uF5-a9-Ngz"; */
"uF5-a9-Ngz.title" = "Works if an audio device is selected with no native volume control.";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "uJS-s3-Zpi"; */
"uJS-s3-Zpi.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSButtonCell"; title = "Enable keyboard control for display"; ObjectID = "UqR-WE-jHl"; */
"UqR-WE-jHl.title" = "允許鍵盤控制螢幕";
/* Class = "NSTextFieldCell"; title = "Contrast (DDC)"; ObjectID = "urd-Rh-aiL"; */
"urd-Rh-aiL.title" = "Contrast";
/* Class = "NSButtonCell"; title = "Do not use alternative brightness keys"; ObjectID = "vd2-Lk-neX"; */
"vd2-Lk-neX.title" = "Do not use alternative brightness keys";
/* Class = "NSMenuItem"; title = "Heavy"; ObjectID = "vik-vN-bJe"; */
"vik-vN-bJe.title" = "多次";
/* Class = "NSMenuItem"; title = "Both Brightness & Volume"; ObjectID = "Vr4-xb-B4o"; */
"Vr4-xb-B4o.title" = "亮度和音量";
/* Class = "NSTextFieldCell"; title = "Multiple displays:"; ObjectID = "vri-pv-tJ4"; */
"vri-pv-tJ4.title" = "Multiple displays:";
/* Class = "NSTextFieldCell"; title = "DDC read polling mode:"; ObjectID = "vwm-hY-on5"; */
"vwm-hY-on5.title" = "DDC讀取操作模式:";
/* Class = "NSButtonCell"; title = "Show advanced settings under Displays"; ObjectID = "Wnd-hx-Meb"; */
"Wnd-hx-Meb.title" = "在螢幕下顯示進階設定";
/* Class = "NSTextFieldCell"; title = "General options:"; ObjectID = "W58-ch-j69"; */
"W58-ch-j69.title" = "General options:";
/* Class = "NSMenuItem"; title = "None"; ObjectID = "X96-ny-lAP"; */
"X96-ny-lAP.title" = "不使用";
/* Class = "NSTextFieldCell"; title = "Useful when a display tends to reset its settings during sleep."; ObjectID = "w8B-x6-sq5"; */
"w8B-x6-sq5.title" = "Useful when a display tends to reset its settings during sleep.";
/* Class = "NSButtonCell"; title = "Show contrast slider in menu"; ObjectID = "xSI-8W-Xd0"; */
"xSI-8W-Xd0.title" = "顯示對比度滑桿";
/* Class = "NSTextFieldCell"; title = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays."; ObjectID = "wjv-tq-iUx"; */
"wjv-tq-iUx.title" = "Changes that are caused by the Ambient light sensor or made using Touch Bar, Control Center, System Preferences will be replicated to all displays.";
/* Class = "NSButtonCell"; title = "Reset Preferences"; ObjectID = "xY6-aw-o9u"; */
"xY6-aw-o9u.title" = "重置偏好設定";
/* Class = "NSTextFieldCell"; title = "Display advanced settings and additional information in Preferences."; ObjectID = "X6w-Ee-9Jq"; */
"X6w-Ee-9Jq.title" = "Display advanced settings and additional information in Preferences.";
/* Class = "NSTextFieldCell"; title = "Additional settings:"; ObjectID = "Xz0-X0-rB4"; */
"Xz0-X0-rB4.title" = "進階設置:";
/* Class = "NSTextField"; ibExternalAccessibilityDescription = "Brightness"; ObjectID = "xDF-IA-bBh"; */
"xDF-IA-bBh.ibExternalAccessibilityDescription" = "Brightness";
/* Class = "NSTextFieldCell"; title = "This activates additional software dimming after the display reached zero hardware brightness. Menu slider is also affected with 50% being the transition point. Works for DDC controlled displays only."; ObjectID = "yeg-GN-SuO"; */
"yeg-GN-SuO.title" = "這會在螢幕硬體亮度達到0後啟用額外的軟體調光。 選單滑桿也受將到影響其中50%是過渡點。 僅適用於DDC控制的螢幕。";
/* Class = "NSTextFieldCell"; title = "Update settings from the display. May not work with some hardware."; ObjectID = "xjq-hs-wWB"; */
"xjq-hs-wWB.title" = "Update settings from the display. May not work with some hardware.";
/* Class = "NSMenuItem"; title = "Only if at least one slider is present"; ObjectID = "xLa-PN-rsq"; */
"xLa-PN-rsq.title" = "Only if at least one slider is present";
/* Class = "NSMenuItem"; title = "Both standard and custom shortcuts"; ObjectID = "xQJ-aJ-VhH"; */
"xQJ-aJ-VhH.title" = "Both standard and custom shortcuts";
/* Class = "NSTextFieldCell"; title = "Works best with various syncing and 'control all' keyboard settings enabled."; ObjectID = "XU4-Bn-bwH"; */
"XU4-Bn-bwH.title" = "Works best with various syncing and 'control all' keyboard settings enabled.";
/* Class = "NSTextFieldCell"; title = "Available"; ObjectID = "yBJ-5d-I7e"; */
"yBJ-5d-I7e.title" = "Available";
/* Class = "NSTextFieldCell"; title = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used."; ObjectID = "YHZ-VL-QJ3"; */
"YHZ-VL-QJ3.title" = "Full OSD scale will be available for hardware brightness control and after reaching 0 brightness, further software dimming will be used.";
/* Class = "NSButtonCell"; title = "Assume last saved settings are valid (recommended)"; ObjectID = "yn8-Nd-o89"; */
"yn8-Nd-o89.title" = "Assume last saved settings are valid (recommended)";
/* Class = "NSTextFieldCell"; title = "Decrease:"; ObjectID = "yQh-Ve-WEE"; */
"yQh-Ve-WEE.title" = "Decrease:";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "YqZ-LS-YvR"; */
"YqZ-LS-YvR.title" = "標籤:";
@ -142,5 +388,14 @@
/* Class = "NSButtonCell"; title = "Use hardware DDC control"; ObjectID = "ZdU-gV-V05"; */
"ZdU-gV-V05.title" = "使用硬體DDC控制";
/* Class = "NSMenuItem"; title = "Disable keyboard"; ObjectID = "zHa-xo-XPW"; */
"zHa-xo-XPW.title" = "Disable keyboard";
/* Class = "NSButtonCell"; title = "Donate"; ObjectID = "ZKk-ve-rS4"; */
"ZKk-ve-rS4.title" = "貢獻";
/* Class = "NSButtonCell"; title = "Show percentages"; ObjectID = "ZUu-MR-XwA"; */
"ZUu-MR-XwA.title" = "Show percentages";
/* Class = "NSTextFieldCell"; title = "Combined dimming switchover point:"; ObjectID = "zv8-pZ-OPy"; */
"zv8-pZ-OPy.title" = "Combined dimming switchover point:";

View file

@ -1,5 +0,0 @@
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "JTa-2I-AsI"; */
"JTa-2I-AsI.title" = "退出";
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "SOS-eZ-uU5"; */
"SOS-eZ-uU5.title" = "偏好設定";

View file

@ -1,3 +1,5 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import Preferences
import ServiceManagement
@ -7,10 +9,9 @@ class AboutPrefsViewController: NSViewController, PreferencePane {
let preferencePaneTitle: String = NSLocalizedString("About", comment: "Shown in the main prefs window")
var toolbarItemIcon: NSImage {
if #available(macOS 11.0, *) {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return NSImage(systemSymbolName: "info.circle", accessibilityDescription: "About")!
} else {
// Fallback on earlier versions
return NSImage(named: NSImage.infoName)!
}
}
@ -25,7 +26,6 @@ class AboutPrefsViewController: NSViewController, PreferencePane {
self.setCopyrightInfo()
}
@available(macOS, deprecated: 10.10)
override func viewWillAppear() {
super.viewWillAppear()
}

View file

@ -1,3 +1,5 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import os.log
@ -24,6 +26,35 @@ class DisplaysPrefsCellView: NSTableCellView {
@IBOutlet var pollingCount: NSTextFieldCell!
@IBOutlet var enableMuteButton: NSButton!
@IBOutlet var combinedBrightnessSwitchingPoint: NSSlider!
@IBOutlet var audioDeviceNameOverride: NSTextField!
@IBOutlet var updateWithCurrentAudioName: NSButton!
@IBOutlet var unavailableDDCBrightness: NSButton!
@IBOutlet var unavailableDDCVolume: NSButton!
@IBOutlet var unavailableDDCContrast: NSButton!
@IBOutlet var minDDCOverrideBrightness: NSTextField!
@IBOutlet var minDDCOverrideVolume: NSTextField!
@IBOutlet var minDDCOverrideContrast: NSTextField!
@IBOutlet var maxDDCOverrideBrightness: NSTextField!
@IBOutlet var maxDDCOverrideVolume: NSTextField!
@IBOutlet var maxDDCOverrideContrast: NSTextField!
@IBOutlet var curveDDCBrightness: NSSlider!
@IBOutlet var curveDDCVolume: NSSlider!
@IBOutlet var curveDDCContrast: NSSlider!
@IBOutlet var invertDDCBrightness: NSButton!
@IBOutlet var invertDDCVolume: NSButton!
@IBOutlet var invertDDCContrast: NSButton!
@IBOutlet var remapDDCBrightness: NSTextField!
@IBOutlet var remapDDCVolume: NSTextField!
@IBOutlet var remapDDCContrast: NSTextField!
@IBAction func openAdvancedHelp(_: NSButton) {
if let url = URL(string: "https://github.com/the0neyouseek/MonitorControl/wiki/Advanced-Preferences") {
NSWorkspace.shared.open(url)
@ -31,28 +62,26 @@ class DisplaysPrefsCellView: NSTableCellView {
}
@IBAction func pollingModeValueChanged(_ sender: NSPopUpButton) {
if let display = display as? ExternalDisplay {
if let display = display as? OtherDisplay {
let newValue = sender.selectedTag()
let originalValue = display.getPollingMode()
let originalValue = display.readPrefAsInt(key: .pollingMode)
if newValue != originalValue {
display.setPollingMode(newValue)
if display.getPollingMode() == 4 {
display.savePref(newValue, key: .pollingMode)
if display.readPrefAsInt(key: .pollingMode) == PollingMode.custom.rawValue {
self.pollingCount.isEnabled = true
} else {
self.pollingCount.isEnabled = false
}
self.pollingCount.stringValue = String(display.getPollingCount())
os_log("Value changed for polling count: %{public}@", type: .info, "from `\(originalValue)` to `\(newValue)`")
self.pollingCount.stringValue = String(display.pollingCount)
}
}
}
@IBAction func pollingCountValueChanged(_ sender: NSTextFieldCell) {
if let display = display as? ExternalDisplay {
if let display = display as? OtherDisplay {
let newValue = sender.stringValue
let originalValue = "\(display.getPollingCount())"
let originalValue = "\(display.pollingCount)"
if newValue.isEmpty {
self.pollingCount.stringValue = originalValue
} else if let intValue = Int(newValue) {
@ -60,26 +89,24 @@ class DisplaysPrefsCellView: NSTableCellView {
} else {
self.pollingCount.stringValue = ""
}
if newValue != originalValue, !newValue.isEmpty, let newValue = Int(newValue) {
display.setPollingCount(newValue)
os_log("Value changed for polling count: %{public}@", type: .info, "from `\(originalValue)` to `\(newValue)`")
display.pollingCount = newValue
}
}
}
@IBAction func enableMuteButtonToggled(_ sender: NSButton) {
if let display = display as? ExternalDisplay {
if let display = display as? OtherDisplay {
switch sender.state {
case .on:
display.enableMuteUnmute = true
display.savePref(true, key: .enableMuteUnmute)
case .off:
// If the display is currently muted, toggle back to unmute
// to prevent the display becoming stuck in the muted state
if display.isMuted() {
if display.readPrefAsInt(for: .audioMuteScreenBlank) == 1 {
display.toggleMute()
}
display.enableMuteUnmute = false
display.savePref(false, key: .enableMuteUnmute)
default:
break
}
@ -87,7 +114,7 @@ class DisplaysPrefsCellView: NSTableCellView {
}
@IBAction func longerDelayButtonToggled(_ sender: NSButton) {
if let display = self.display as? ExternalDisplay {
if let display = self.display as? OtherDisplay {
switch sender.state {
case .on:
let alert = NSAlert()
@ -100,15 +127,15 @@ class DisplaysPrefsCellView: NSTableCellView {
if let window = self.window {
alert.beginSheetModal(for: window, completionHandler: { modalResponse in
if modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn {
Utils.setStartAtLogin(enabled: false)
display.needsLongerDelay = true
app.setStartAtLogin(enabled: false)
display.savePref(true, key: .longerDelay)
} else {
sender.state = .off
}
})
}
case .off:
display.needsLongerDelay = false
display.savePref(false, key: .longerDelay)
default:
break
}
@ -117,35 +144,34 @@ class DisplaysPrefsCellView: NSTableCellView {
@IBAction func enabledButtonToggled(_ sender: NSButton) {
if let disp = display {
let isEnabled = sender.state == .on
disp.isEnabled = isEnabled
#if DEBUG
os_log("Toggle enabled display state: %{public}@", type: .info, isEnabled ? "on" : "off")
#endif
disp.savePref(sender.state == .off, key: .isDisabled)
}
}
@IBAction func ddcButtonToggled(_ sender: NSButton) {
if let disp = display {
if let display = display {
switch sender.state {
case .off:
disp.forceSw = true
display.savePref(true, key: .forceSw)
case .on:
disp.forceSw = false
_ = display.setDirectBrightness(1)
display.savePref(false, key: .forceSw)
default:
break
}
_ = disp.resetSwBrightness()
app.updateMenus()
let displayInfo = DisplaysPrefsViewController.getDisplayInfo(display: disp)
_ = display.setSwBrightness(1)
_ = display.setDirectBrightness(1)
let displayInfo = DisplaysPrefsViewController.getDisplayInfo(display: display)
self.controlMethod.stringValue = displayInfo.controlMethod
self.controlMethod.controlView?.toolTip = displayInfo.controlStatus
app.configure()
}
}
@IBAction func friendlyNameValueChanged(_ sender: NSTextFieldCell) {
if let disp = display {
if let display = display {
let newValue = sender.stringValue
let originalValue = disp.getFriendlyName()
let originalValue = (display.readPrefAsString(key: .friendlyName) != "" ? display.readPrefAsString(key: .friendlyName) : display.name)
if newValue.isEmpty {
self.friendlyName.stringValue = originalValue
@ -153,56 +179,239 @@ class DisplaysPrefsCellView: NSTableCellView {
}
if newValue != originalValue, !newValue.isEmpty {
disp.setFriendlyName(newValue)
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.friendlyName.rawValue), object: nil)
#if DEBUG
os_log("Value changed for friendly name: %{public}@", type: .info, "from `\(originalValue)` to `\(newValue)`")
#endif
display.savePref(newValue, key: .friendlyName)
}
app.updateMenusAndKeys()
}
}
@IBAction func disableVolumeOSDButton(_ sender: NSButton) {
if let disp = display as? ExternalDisplay {
if let display = display as? OtherDisplay {
switch sender.state {
case .on:
disp.hideOsd = true
display.savePref(true, key: .hideOsd)
case .off:
disp.hideOsd = false
display.savePref(false, key: .hideOsd)
default:
break
}
}
}
func tagCommand(_ tag: Int) -> Command {
var command: Command
switch tag {
case 2: command = Command.audioSpeakerVolume
case 3: command = Command.contrast
default: command = Command.brightness
}
return command
}
@IBAction func combinedBrightnessSwitchingPoint(_ sender: NSSlider) {
if let display = display as? OtherDisplay {
display.savePref(Int(sender.intValue), key: .combinedBrightnessSwitchingPoint)
}
}
@IBAction func audioDeviceNameOverride(_ sender: NSTextField) {
if let display = display as? OtherDisplay {
display.savePref(sender.stringValue, key: .audioDeviceNameOverride)
}
app.configure()
}
@IBAction func updateWithCurrentAudioName(_: NSButton) {
if let defaultDevice = app.coreAudio.defaultOutputDevice {
self.audioDeviceNameOverride.stringValue = defaultDevice.name
self.audioDeviceNameOverride(self.audioDeviceNameOverride)
}
}
@IBAction func unavailableDDC(_ sender: NSButton) {
let command = self.tagCommand(sender.tag)
let prefKey = PrefKey.unavailableDDC
if let display = display as? OtherDisplay {
switch sender.state {
case .on:
display.savePref(false, key: prefKey, for: command)
case .off:
display.savePref(true, key: prefKey, for: command)
default:
break
}
_ = display.setDirectBrightness(1)
_ = display.setSwBrightness(1)
app.configure()
}
}
@IBAction func minDDCOverride(_ sender: NSTextField) {
let command = self.tagCommand(sender.tag)
let prefKey = PrefKey.minDDCOverride
let value = sender.stringValue
if let display = display as? OtherDisplay {
if let intValue = Int(value), intValue >= 0, intValue <= 65535 {
display.savePref(intValue, key: prefKey, for: command)
} else {
display.removePref(key: prefKey, for: command)
}
app.configure()
if display.prefExists(key: prefKey, for: command) {
sender.stringValue = String(display.readPrefAsInt(key: prefKey, for: command))
} else {
sender.stringValue = ""
}
} else {
sender.stringValue = ""
}
}
@IBAction func maxDDCOverride(_ sender: NSTextField) {
let command = self.tagCommand(sender.tag)
let prefKey = PrefKey.maxDDCOverride
let value = sender.stringValue
if let display = display as? OtherDisplay {
if !value.isEmpty, let intValue = UInt(value) {
display.savePref(Int(intValue), key: prefKey, for: command)
} else {
display.removePref(key: prefKey, for: command)
}
app.configure()
if display.prefExists(key: prefKey, for: command) {
sender.stringValue = String(display.readPrefAsInt(key: prefKey, for: command))
} else {
sender.stringValue = ""
}
} else {
sender.stringValue = ""
}
}
@IBAction func curveDDC(_ sender: NSSlider) {
let command = self.tagCommand(sender.tag)
let prefKey = PrefKey.curveDDC
let value = Int(sender.intValue)
if let display = display as? OtherDisplay {
display.savePref(value, key: prefKey, for: command)
}
}
@IBAction func invertDDC(_ sender: NSButton) {
let command = self.tagCommand(sender.tag)
let prefKey = PrefKey.invertDDC
if let display = display as? OtherDisplay {
switch sender.state {
case .on:
display.savePref(true, key: prefKey, for: command)
case .off:
display.savePref(false, key: prefKey, for: command)
default:
break
}
app.configure()
}
}
@IBAction func remapDDC(_ sender: NSTextField) {
let command = self.tagCommand(sender.tag)
let prefKey = PrefKey.remapDDC
let value = sender.stringValue
let values = value.components(separatedBy: ",")
var normalizedValues: [String] = []
var normalizedString: String = ""
for value in values {
let trimmedValue = value.trimmingCharacters(in: CharacterSet(charactersIn: " "))
if !trimmedValue.isEmpty, let intValue = UInt8(trimmedValue, radix: 16), intValue != 0 {
normalizedValues.append(String(format: "%02x", intValue))
}
}
var first = true
for normalizedValue in normalizedValues {
if !first {
normalizedString.append(", ")
}
normalizedString.append(normalizedValue)
first = false
}
if let display = display as? OtherDisplay {
display.savePref(normalizedString, key: prefKey, for: command)
}
sender.stringValue = normalizedString
}
@IBAction func resetSettings(_: NSButton) {
if let disp = display {
if self.ddcButton.isEnabled {
if self.ddcButton.isEnabled { // This signifies that the DDC block is enabled
self.ddcButton.state = .on
self.ddcButtonToggled(self.ddcButton)
}
if self.enabledButton.isEnabled {
self.enabledButton.state = .on
self.enabledButtonToggled(self.enabledButton)
}
if self.disableVolumeOSDButton.isEnabled {
self.disableVolumeOSDButton.state = .off
self.disableVolumeOSDButton(self.disableVolumeOSDButton)
}
if self.pollingModeMenu.isEnabled {
self.pollingModeMenu.selectItem(withTag: 2)
self.pollingModeValueChanged(self.pollingModeMenu)
}
if self.longerDelayButton.isEnabled {
self.longerDelayButton.state = .off
self.longerDelayButtonToggled(self.longerDelayButton)
}
if self.enableMuteButton.isEnabled {
self.enableMuteButton.state = .off
self.enableMuteButtonToggled(self.enableMuteButton)
self.friendlyName.stringValue = disp.name
self.friendlyNameValueChanged(self.friendlyName)
self.combinedBrightnessSwitchingPoint.intValue = 0
self.combinedBrightnessSwitchingPoint(self.combinedBrightnessSwitchingPoint)
self.audioDeviceNameOverride.stringValue = ""
self.audioDeviceNameOverride(self.audioDeviceNameOverride)
self.unavailableDDCBrightness.state = .on
self.unavailableDDCVolume.state = .on
self.unavailableDDCContrast.state = .on
self.minDDCOverrideBrightness.stringValue = ""
self.minDDCOverrideVolume.stringValue = ""
self.minDDCOverrideContrast.stringValue = ""
self.maxDDCOverrideBrightness.stringValue = ""
self.maxDDCOverrideVolume.stringValue = ""
self.maxDDCOverrideContrast.stringValue = ""
self.curveDDCBrightness.intValue = 5
self.curveDDCVolume.intValue = 5
self.curveDDCContrast.intValue = 5
self.invertDDCBrightness.state = .off
self.invertDDCVolume.state = .off
self.invertDDCContrast.state = .off
self.remapDDCBrightness.stringValue = ""
self.remapDDCVolume.stringValue = ""
self.remapDDCContrast.stringValue = ""
self.unavailableDDC(self.unavailableDDCBrightness)
self.unavailableDDC(self.unavailableDDCBrightness)
self.unavailableDDC(self.unavailableDDCVolume)
self.unavailableDDC(self.unavailableDDCContrast)
self.minDDCOverride(self.minDDCOverrideBrightness)
self.minDDCOverride(self.minDDCOverrideVolume)
self.minDDCOverride(self.minDDCOverrideContrast)
self.maxDDCOverride(self.maxDDCOverrideBrightness)
self.maxDDCOverride(self.maxDDCOverrideVolume)
self.maxDDCOverride(self.maxDDCOverrideContrast)
self.curveDDC(self.curveDDCBrightness)
self.curveDDC(self.curveDDCVolume)
self.curveDDC(self.curveDDCContrast)
self.invertDDC(self.invertDDCBrightness)
self.invertDDC(self.invertDDCVolume)
self.invertDDC(self.invertDDCContrast)
self.remapDDC(self.remapDDCBrightness)
self.remapDDC(self.remapDDCVolume)
self.remapDDC(self.remapDDCContrast)
}
self.friendlyName.stringValue = disp.name
self.friendlyNameValueChanged(self.friendlyName)
}
}
}

View file

@ -1,3 +1,5 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import os.log
import Preferences
@ -7,33 +9,42 @@ class DisplaysPrefsViewController: NSViewController, PreferencePane, NSTableView
let preferencePaneTitle: String = NSLocalizedString("Displays", comment: "Shown in the main prefs window")
var toolbarItemIcon: NSImage {
if #available(macOS 11.0, *) {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return NSImage(systemSymbolName: "display.2", accessibilityDescription: "Displays")!
} else {
// Fallback on earlier versions
return NSImage(named: NSImage.computerName)!
return NSImage(named: NSImage.infoName)!
}
}
let prefs = UserDefaults.standard
var displays: [Display] = []
@IBOutlet var displayList: NSTableView!
@IBOutlet var displayScrollView: NSScrollView!
@IBOutlet var constraintHeight: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
self.loadDisplayList()
}
override func viewWillAppear() {
super.viewWillAppear()
}
func showAdvanced() -> Bool {
let hide = !prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue)
self.loadDisplayList()
NotificationCenter.default.addObserver(self, selector: #selector(self.loadDisplayList), name: .displayListUpdate, object: nil)
return !hide
}
@objc func loadDisplayList() {
guard self.displayList != nil else {
os_log("Reloading Displays preferences display list skipped as there is no display list table yet.", type: .info)
return
}
os_log("Reloading Displays preferences display list", type: .info)
self.displays = DisplayManager.shared.getAllDisplays()
self.displayList.reloadData()
self.displayList?.reloadData()
self.updateDisplayListRowHeight()
}
@ -54,47 +65,53 @@ class DisplaysPrefsViewController: NSViewController, PreferencePane, NSTableView
var displayType = ""
var displayImage = ""
var controlMethod = ""
var controlStatus = ""
}
public static func getDisplayInfo(display: Display) -> DisplayInfo {
var displayType = ""
var displayImage = ""
var controlMethod = ""
var displayType = NSLocalizedString("Other Display", comment: "Shown in the Display Preferences")
var displayImage = "display.trianglebadge.exclamationmark"
var controlMethod = NSLocalizedString("No Control", comment: "Shown in the Display Preferences") + " ⚠️"
var controlStatus = NSLocalizedString("This display has an unspecified control status.", comment: "Shown in the Display Preferences")
if display.isVirtual {
displayType = NSLocalizedString("Virtual Display", comment: "Shown in the Display Preferences")
displayImage = "tv.and.mediabox"
controlMethod = NSLocalizedString("No Control Available", comment: "Shown in the Display Preferences")
} else if display is ExternalDisplay {
controlMethod = NSLocalizedString("Software (Shade)", comment: "Shown in the Display Preferences") + " ⚠️"
controlStatus = NSLocalizedString("This is a virtual display (examples: AirPlay, Sidecar, display connected via a DisplayLink Dock or similar) which does not allow hardware or software gammatable control. Shading is used as a substitute but only in non-mirror scenarios. Mouse cursor will be unaffected and artifacts may appear when entering/leaving full screen mode.", comment: "Shown in the Display Preferences")
} else if display is OtherDisplay {
displayType = NSLocalizedString("External Display", comment: "Shown in the Display Preferences")
displayImage = "display"
if let externalDisplay: ExternalDisplay = display as? ExternalDisplay {
if externalDisplay.isSwOnly() {
controlMethod = NSLocalizedString("Software Only", comment: "Shown in the Display Preferences")
if let otherDisplay: OtherDisplay = display as? OtherDisplay {
if otherDisplay.isSwOnly() {
controlMethod = NSLocalizedString("Software (Gamma)", comment: "Shown in the Display Preferences") + " ⚠️"
displayImage = "display.trianglebadge.exclamationmark"
controlStatus = NSLocalizedString("This display allows for software brightness control via gammatable manipulation as it does not support hardware control. Reasons for this might be using the HDMI port of a Mac mini (which blocks hardware DDC control) or having a blacklisted display.", comment: "Shown in the Display Preferences")
} else {
if externalDisplay.isSw() {
controlMethod = NSLocalizedString("Software (Forced)", comment: "Shown in the Display Preferences")
if otherDisplay.isSw() {
controlMethod = NSLocalizedString("Software (Gamma, Forced)", comment: "Shown in the Display Preferences") + " ⚠️"
controlStatus = NSLocalizedString("This display is reported to support hardware DDC control but the current settings allow for software control only.", comment: "Shown in the Display Preferences")
} else {
controlMethod = NSLocalizedString("Hardware (DDC)", comment: "Shown in the Display Preferences")
controlStatus = NSLocalizedString("This display is reported to support hardware DDC control. If you encounter issues, you can disable hardware DDC control to force software control.", comment: "Shown in the Display Preferences")
}
}
} else {
controlMethod = NSLocalizedString("Unspecified", comment: "Shown in the Display Preferences")
}
} else if display is InternalDisplay {
displayType = NSLocalizedString("Built-in Display", comment: "Shown in the Display Preferences")
if self.isImac() {
displayImage = "desktopcomputer"
} else if let appleDisplay: AppleDisplay = display as? AppleDisplay {
if appleDisplay.isBuiltIn() {
displayType = NSLocalizedString("Built-in Display", comment: "Shown in the Display Preferences")
if self.isImac() {
displayImage = "desktopcomputer"
} else {
displayImage = "laptopcomputer"
}
} else {
displayImage = "laptopcomputer"
displayType = NSLocalizedString("External Display", comment: "Shown in the Display Preferences")
displayImage = "display"
}
controlMethod = NSLocalizedString("Hardware (CoreDisplay)", comment: "Shown in the Display Preferences")
} else {
displayType = NSLocalizedString("Other Display", comment: "Shown in the Display Preferences")
displayImage = "display.trianglebadge.exclamationmark"
controlMethod = NSLocalizedString("No Control Available", comment: "Shown in the Display Preferences")
controlMethod = NSLocalizedString("Hardware (Apple)", comment: "Shown in the Display Preferences")
controlStatus = NSLocalizedString("This display supports native Apple brightness protocol. This allows macOS to control this display without MonitorControl as well.", comment: "Shown in the Display Preferences")
}
return DisplayInfo(displayType: displayType, displayImage: displayImage, controlMethod: controlMethod)
return DisplayInfo(displayType: displayType, displayImage: displayImage, controlMethod: controlMethod, controlStatus: controlStatus)
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
@ -109,14 +126,13 @@ class DisplaysPrefsViewController: NSViewController, PreferencePane, NSTableView
// ID
cell.displayId.stringValue = String(display.identifier)
// Firendly name
cell.friendlyName.stringValue = display.getFriendlyName()
cell.friendlyName.stringValue = (display.readPrefAsString(key: .friendlyName) != "" ? display.readPrefAsString(key: .friendlyName) : display.name)
cell.friendlyName.isEditable = true
// Enabled
cell.enabledButton.state = display.isEnabled && !display.isVirtual ? .on : .off
cell.enabledButton.isEnabled = !display.isVirtual
cell.enabledButton.state = display.readPrefAsBool(key: .isDisabled) ? .off : .on
// DDC
cell.ddcButton.state = ((display as? ExternalDisplay)?.isSw() ?? true) || ((display as? ExternalDisplay)?.isVirtual ?? true) ? .off : .on
if ((display as? ExternalDisplay)?.isSwOnly() ?? true) || ((display as? ExternalDisplay)?.isVirtual ?? true) {
cell.ddcButton.state = ((display as? OtherDisplay)?.isSw() ?? true) ? .off : .on
if ((display as? OtherDisplay)?.isSwOnly() ?? true) || ((display as? OtherDisplay)?.isVirtual ?? true) {
cell.ddcButton.isEnabled = false
} else {
cell.ddcButton.isEnabled = true
@ -125,36 +141,83 @@ class DisplaysPrefsViewController: NSViewController, PreferencePane, NSTableView
let displayInfo = DisplaysPrefsViewController.getDisplayInfo(display: display)
cell.displayType.stringValue = displayInfo.displayType
cell.controlMethod.stringValue = displayInfo.controlMethod
if #available(macOS 11.0, *) {
cell.controlMethod.controlView?.toolTip = displayInfo.controlStatus
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
cell.displayImage.image = NSImage(systemSymbolName: displayInfo.displayImage, accessibilityDescription: display.name)!
} else {
cell.displayImage.image = NSImage(named: NSImage.computerName)!
cell.displayImage.image = NSImage(named: NSImage.touchBarIconViewTemplateName)!
}
// Disable Volume OSD
if let externalDisplay = display as? ExternalDisplay, !externalDisplay.isVirtual, !externalDisplay.isSw() {
cell.disableVolumeOSDButton.state = externalDisplay.hideOsd ? .on : .off
if let otherDisplay = display as? OtherDisplay, !otherDisplay.isSw() {
cell.disableVolumeOSDButton.state = otherDisplay.readPrefAsBool(key: .hideOsd) ? .on : .off
cell.disableVolumeOSDButton.isEnabled = true
} else {
cell.disableVolumeOSDButton.state = .off
cell.disableVolumeOSDButton.isEnabled = false
}
// Advanced settings
if let externalDisplay = display as? ExternalDisplay, !externalDisplay.isSwOnly(), !externalDisplay.isVirtual {
// DDC read polling mode
if let otherDisplay = display as? OtherDisplay, !otherDisplay.isSwOnly() {
cell.pollingModeMenu.isEnabled = true
cell.pollingModeMenu.selectItem(withTag: externalDisplay.getPollingMode())
// Custom read polling count
if externalDisplay.getPollingMode() == 4 {
cell.pollingModeMenu.selectItem(withTag: otherDisplay.readPrefAsInt(key: .pollingMode))
if otherDisplay.readPrefAsInt(key: .pollingMode) == PollingMode.custom.rawValue {
cell.pollingCount.isEnabled = true
} else {
cell.pollingCount.isEnabled = false
}
cell.pollingCount.stringValue = String(externalDisplay.getPollingCount())
// DDC read delay
cell.pollingCount.stringValue = String(otherDisplay.pollingCount)
cell.longerDelayButton.isEnabled = true
cell.longerDelayButton.state = externalDisplay.needsLongerDelay ? .on : .off
cell.longerDelayButton.state = otherDisplay.readPrefAsBool(key: .longerDelay) ? .on : .off
cell.enableMuteButton.isEnabled = true
cell.enableMuteButton.state = externalDisplay.enableMuteUnmute ? .on : .off
cell.enableMuteButton.state = otherDisplay.readPrefAsBool(key: .enableMuteUnmute) ? .on : .off
cell.combinedBrightnessSwitchingPoint.isEnabled = true
cell.combinedBrightnessSwitchingPoint.intValue = Int32(otherDisplay.readPrefAsInt(key: .combinedBrightnessSwitchingPoint))
cell.audioDeviceNameOverride.isEnabled = true
cell.audioDeviceNameOverride.stringValue = otherDisplay.readPrefAsString(key: .audioDeviceNameOverride)
cell.updateWithCurrentAudioName.isEnabled = true
cell.unavailableDDCBrightness.isEnabled = true
cell.unavailableDDCVolume.isEnabled = true
cell.unavailableDDCContrast.isEnabled = true
cell.unavailableDDCBrightness.state = !otherDisplay.readPrefAsBool(key: .unavailableDDC, for: .brightness) ? .on : .off
cell.unavailableDDCVolume.state = !otherDisplay.readPrefAsBool(key: .unavailableDDC, for: .audioSpeakerVolume) ? .on : .off
cell.unavailableDDCContrast.state = !otherDisplay.readPrefAsBool(key: .unavailableDDC, for: .contrast) ? .on : .off
cell.minDDCOverrideBrightness.isEnabled = true
cell.minDDCOverrideVolume.isEnabled = true
cell.minDDCOverrideContrast.isEnabled = true
cell.minDDCOverrideBrightness.stringValue = otherDisplay.readPrefAsString(key: .minDDCOverride, for: .brightness)
cell.minDDCOverrideVolume.stringValue = otherDisplay.readPrefAsString(key: .minDDCOverride, for: .audioSpeakerVolume)
cell.minDDCOverrideContrast.stringValue = otherDisplay.readPrefAsString(key: .minDDCOverride, for: .contrast)
cell.maxDDCOverrideBrightness.isEnabled = true
cell.maxDDCOverrideVolume.isEnabled = true
cell.maxDDCOverrideContrast.isEnabled = true
cell.maxDDCOverrideBrightness.stringValue = otherDisplay.readPrefAsString(key: .maxDDCOverride, for: .brightness)
cell.maxDDCOverrideVolume.stringValue = otherDisplay.readPrefAsString(key: .maxDDCOverride, for: .audioSpeakerVolume)
cell.maxDDCOverrideContrast.stringValue = otherDisplay.readPrefAsString(key: .maxDDCOverride, for: .contrast)
cell.curveDDCBrightness.isEnabled = true
cell.curveDDCVolume.isEnabled = true
cell.curveDDCContrast.isEnabled = true
cell.curveDDCBrightness.intValue = Int32(otherDisplay.readPrefAsInt(key: .curveDDC, for: .brightness) == 0 ? 5 : otherDisplay.readPrefAsInt(key: .curveDDC, for: .brightness))
cell.curveDDCVolume.intValue = Int32(otherDisplay.readPrefAsInt(key: .curveDDC, for: .audioSpeakerVolume) == 0 ? 5 : otherDisplay.readPrefAsInt(key: .curveDDC, for: .audioSpeakerVolume))
cell.curveDDCContrast.intValue = Int32(otherDisplay.readPrefAsInt(key: .curveDDC, for: .contrast) == 0 ? 5 : otherDisplay.readPrefAsInt(key: .curveDDC, for: .contrast))
cell.invertDDCBrightness.state = otherDisplay.readPrefAsBool(key: .invertDDC, for: .brightness) ? .on : .off
cell.invertDDCVolume.state = otherDisplay.readPrefAsBool(key: .invertDDC, for: .audioSpeakerVolume) ? .on : .off
cell.invertDDCContrast.state = otherDisplay.readPrefAsBool(key: .invertDDC, for: .contrast) ? .on : .off
cell.invertDDCBrightness.isEnabled = true
cell.invertDDCVolume.isEnabled = true
cell.invertDDCContrast.isEnabled = true
cell.remapDDCBrightness.isEnabled = true
cell.remapDDCVolume.isEnabled = true
cell.remapDDCContrast.isEnabled = true
cell.remapDDCBrightness.stringValue = otherDisplay.readPrefAsString(key: .remapDDC, for: .brightness)
cell.remapDDCVolume.stringValue = otherDisplay.readPrefAsString(key: .remapDDC, for: .audioSpeakerVolume)
cell.remapDDCContrast.stringValue = otherDisplay.readPrefAsString(key: .remapDDC, for: .contrast)
} else {
cell.pollingModeMenu.selectItem(withTag: 0)
cell.pollingModeMenu.isEnabled = false
@ -164,8 +227,57 @@ class DisplaysPrefsViewController: NSViewController, PreferencePane, NSTableView
cell.longerDelayButton.isEnabled = false
cell.enableMuteButton.state = .off
cell.enableMuteButton.isEnabled = false
cell.combinedBrightnessSwitchingPoint.intValue = 0
cell.combinedBrightnessSwitchingPoint.isEnabled = false
cell.audioDeviceNameOverride.isEnabled = false
cell.audioDeviceNameOverride.stringValue = ""
cell.updateWithCurrentAudioName.isEnabled = false
cell.unavailableDDCBrightness.state = .off
cell.unavailableDDCVolume.state = .off
cell.unavailableDDCContrast.state = .off
cell.unavailableDDCBrightness.isEnabled = false
cell.unavailableDDCVolume.isEnabled = false
cell.unavailableDDCContrast.isEnabled = false
cell.minDDCOverrideBrightness.stringValue = ""
cell.minDDCOverrideVolume.stringValue = ""
cell.minDDCOverrideContrast.stringValue = ""
cell.minDDCOverrideBrightness.isEnabled = false
cell.minDDCOverrideVolume.isEnabled = false
cell.minDDCOverrideContrast.isEnabled = false
cell.maxDDCOverrideBrightness.stringValue = ""
cell.maxDDCOverrideVolume.stringValue = ""
cell.maxDDCOverrideContrast.stringValue = ""
cell.maxDDCOverrideBrightness.isEnabled = false
cell.maxDDCOverrideVolume.isEnabled = false
cell.maxDDCOverrideContrast.isEnabled = false
cell.curveDDCBrightness.intValue = 5
cell.curveDDCVolume.intValue = 5
cell.curveDDCContrast.intValue = 5
cell.curveDDCBrightness.isEnabled = false
cell.curveDDCVolume.isEnabled = false
cell.curveDDCContrast.isEnabled = false
cell.invertDDCBrightness.state = .off
cell.invertDDCVolume.state = .off
cell.invertDDCContrast.state = .off
cell.invertDDCBrightness.isEnabled = false
cell.invertDDCVolume.isEnabled = false
cell.invertDDCContrast.isEnabled = false
cell.remapDDCBrightness.stringValue = ""
cell.remapDDCVolume.stringValue = ""
cell.remapDDCContrast.stringValue = ""
cell.remapDDCBrightness.isEnabled = false
cell.remapDDCVolume.isEnabled = false
cell.remapDDCContrast.isEnabled = false
}
if self.prefs.bool(forKey: Utils.PrefKeys.showAdvancedDisplays.rawValue) {
if prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue) {
cell.advancedSettings.isHidden = false
} else {
cell.advancedSettings.isHidden = true
@ -176,10 +288,12 @@ class DisplaysPrefsViewController: NSViewController, PreferencePane, NSTableView
}
func updateDisplayListRowHeight() {
if self.prefs.bool(forKey: Utils.PrefKeys.showAdvancedDisplays.rawValue) {
self.displayList.rowHeight = 300
if prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue) {
self.displayList?.rowHeight = 500
self.constraintHeight?.constant = self.displayList.rowHeight + 15
} else {
self.displayList.rowHeight = 150
self.displayList?.rowHeight = 165
self.constraintHeight?.constant = self.displayList.rowHeight * 2 + 15
}
}
}

View file

@ -0,0 +1,277 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import KeyboardShortcuts
import Preferences
import ServiceManagement
class KeyboardPrefsViewController: NSViewController, PreferencePane {
let preferencePaneIdentifier = Preferences.PaneIdentifier.keyboard
let preferencePaneTitle: String = NSLocalizedString("Keyboard", comment: "Shown in the main prefs window")
var toolbarItemIcon: NSImage {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return NSImage(systemSymbolName: "keyboard", accessibilityDescription: "Keyboard")!
} else {
return NSImage(named: NSImage.infoName)!
}
}
@IBOutlet var customBrightnessUp: NSView!
@IBOutlet var customBrightnessDown: NSView!
@IBOutlet var customContrastUp: NSView!
@IBOutlet var customContrastDown: NSView!
@IBOutlet var customVolumeUp: NSView!
@IBOutlet var customVolumeDown: NSView!
@IBOutlet var customMute: NSView!
@IBOutlet var keyboardBrightness: NSPopUpButton!
@IBOutlet var keyboardVolume: NSPopUpButton!
@IBOutlet var disableAltBrightnessKeys: NSButton!
@IBOutlet var allScreens: NSButton!
@IBOutlet var useFocusInsteadOfMouse: NSButton!
@IBOutlet var allScreensVolume: NSButton!
@IBOutlet var useAudioDeviceNameMatching: NSButton!
@IBOutlet var useFineScale: NSButton!
@IBOutlet var useFineScaleVolume: NSButton!
@IBOutlet var separateCombinedScale: NSButton!
@IBOutlet var rowKeyboardBrightnessPopUp: NSGridRow!
@IBOutlet var rowKeyboardBrightnessText: NSGridRow!
@IBOutlet var rowDisableAltBrightnessKeysCheck: NSGridRow!
@IBOutlet var rowDisableAltBrightnessKeysText: NSGridRow!
@IBOutlet var rowCustomBrightnessShortcuts: NSGridRow!
@IBOutlet var rowUseFocusCheck: NSGridRow!
@IBOutlet var rowUseFocusText: NSGridRow!
@IBOutlet var rowCustomAudioShortcuts: NSGridRow!
@IBOutlet var rowUseAudioNameCheck: NSGridRow!
@IBOutlet var rowUseAudioNameText: NSGridRow!
@IBOutlet var rowUseFineScaleCheck: NSGridRow!
@IBOutlet var rowUseFineScaleText: NSGridRow!
@IBOutlet var rowSeparateCombinedScaleCheck: NSGridRow!
@IBOutlet var rowSeparateCombinedScaleText: NSGridRow!
func showAdvanced() -> Bool {
let hide = !prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue)
if self.keyboardBrightness.selectedTag() == KeyboardBrightness.media.rawValue {
self.rowKeyboardBrightnessPopUp.bottomPadding = hide ? -6 : -13
self.rowKeyboardBrightnessText.isHidden = hide
if self.disableAltBrightnessKeys.state == .on {
self.rowDisableAltBrightnessKeysCheck.isHidden = false
self.rowDisableAltBrightnessKeysText.isHidden = false
} else {
self.rowDisableAltBrightnessKeysCheck.isHidden = hide
self.rowDisableAltBrightnessKeysText.isHidden = hide
}
self.rowCustomBrightnessShortcuts.isHidden = true
} else if self.keyboardBrightness.selectedTag() == KeyboardBrightness.custom.rawValue {
self.rowKeyboardBrightnessPopUp.bottomPadding = -6
self.rowKeyboardBrightnessText.isHidden = true
self.rowDisableAltBrightnessKeysCheck.isHidden = true
self.rowDisableAltBrightnessKeysText.isHidden = true
self.rowCustomBrightnessShortcuts.isHidden = false
} else if self.keyboardBrightness.selectedTag() == KeyboardBrightness.both.rawValue {
self.rowKeyboardBrightnessPopUp.bottomPadding = hide ? -6 : -13
self.rowKeyboardBrightnessText.isHidden = hide
if self.disableAltBrightnessKeys.state == .on {
self.rowDisableAltBrightnessKeysCheck.isHidden = false
self.rowDisableAltBrightnessKeysText.isHidden = false
} else {
self.rowDisableAltBrightnessKeysCheck.isHidden = hide
self.rowDisableAltBrightnessKeysText.isHidden = hide
}
self.rowCustomBrightnessShortcuts.isHidden = false
} else {
self.rowKeyboardBrightnessPopUp.bottomPadding = -6
self.rowKeyboardBrightnessText.isHidden = true
self.rowDisableAltBrightnessKeysCheck.isHidden = true
self.rowDisableAltBrightnessKeysText.isHidden = true
self.rowCustomBrightnessShortcuts.isHidden = true
}
if [KeyboardVolume.custom.rawValue, KeyboardVolume.both.rawValue].contains(self.keyboardVolume.selectedTag()) {
self.rowCustomAudioShortcuts.isHidden = false
} else {
self.rowCustomAudioShortcuts.isHidden = true
}
if self.useFocusInsteadOfMouse.state == .on {
self.rowUseFocusCheck.isHidden = false
self.rowUseFocusText.isHidden = false
} else {
self.rowUseFocusCheck.isHidden = hide
self.rowUseFocusText.isHidden = hide
}
if self.useAudioDeviceNameMatching.state == .on {
self.rowUseAudioNameCheck.isHidden = false
self.rowUseAudioNameText.isHidden = false
} else {
self.rowUseAudioNameCheck.isHidden = hide
self.rowUseAudioNameText.isHidden = hide
}
if self.useFineScale.state == .on {
self.rowUseFineScaleCheck.isHidden = false
self.rowUseFineScaleText.isHidden = false
} else {
self.rowUseFineScaleCheck.isHidden = hide
self.rowUseFineScaleText.isHidden = hide
}
if self.separateCombinedScale.state == .on {
self.rowSeparateCombinedScaleCheck.isHidden = false
self.rowSeparateCombinedScaleText.isHidden = false
} else {
self.rowSeparateCombinedScaleCheck.isHidden = hide
self.rowSeparateCombinedScaleText.isHidden = hide
}
return !hide
}
override func viewDidLoad() {
super.viewDidLoad()
let customBrightnessUpRecorder = KeyboardShortcuts.RecorderCocoa(for: .brightnessUp)
self.customBrightnessUp.addSubview(customBrightnessUpRecorder)
let customBrightnessDownRecorder = KeyboardShortcuts.RecorderCocoa(for: .brightnessDown)
self.customBrightnessDown.addSubview(customBrightnessDownRecorder)
let customContrastUpRecorder = KeyboardShortcuts.RecorderCocoa(for: .contrastUp)
self.customContrastUp.addSubview(customContrastUpRecorder)
let customContrastDownRecorder = KeyboardShortcuts.RecorderCocoa(for: .contrastDown)
self.customContrastDown.addSubview(customContrastDownRecorder)
let customVolumeUpRecorder = KeyboardShortcuts.RecorderCocoa(for: .volumeUp)
self.customVolumeUp.addSubview(customVolumeUpRecorder)
let customVolumeDownRecorder = KeyboardShortcuts.RecorderCocoa(for: .volumeDown)
self.customVolumeDown.addSubview(customVolumeDownRecorder)
let customMuteRecorder = KeyboardShortcuts.RecorderCocoa(for: .mute)
self.customMute.addSubview(customMuteRecorder)
self.populateSettings()
}
func populateSettings() {
self.keyboardBrightness.selectItem(withTag: prefs.integer(forKey: PrefKey.keyboardBrightness.rawValue))
self.keyboardVolume.selectItem(withTag: prefs.integer(forKey: PrefKey.keyboardVolume.rawValue))
self.disableAltBrightnessKeys.state = prefs.bool(forKey: PrefKey.disableAltBrightnessKeys.rawValue) ? .on : .off
self.allScreens.state = prefs.bool(forKey: PrefKey.allScreensBrightness.rawValue) ? .on : .off
self.useFocusInsteadOfMouse.state = prefs.bool(forKey: PrefKey.useFocusInsteadOfMouse.rawValue) ? .on : .off
self.allScreensVolume.state = prefs.bool(forKey: PrefKey.allScreensVolume.rawValue) ? .on : .off
self.useAudioDeviceNameMatching.state = prefs.bool(forKey: PrefKey.useAudioDeviceNameMatching.rawValue) ? .on : .off
self.useFineScale.state = prefs.bool(forKey: PrefKey.useFineScaleBrightness.rawValue) ? .on : .off
self.useFineScaleVolume.state = prefs.bool(forKey: PrefKey.useFineScaleVolume.rawValue) ? .on : .off
self.separateCombinedScale.state = prefs.bool(forKey: PrefKey.separateCombinedScale.rawValue) ? .on : .off
self.allScreensClicked(self.allScreens)
self.allScreensVolumeClicked(self.allScreensVolume)
_ = self.showAdvanced()
}
@IBAction func allScreensClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.allScreensBrightness.rawValue)
self.useFocusInsteadOfMouse.state = .off
self.useFocusInsteadOfMouse.isEnabled = false
case .off:
prefs.set(false, forKey: PrefKey.allScreensBrightness.rawValue)
self.useFocusInsteadOfMouse.isEnabled = true
self.useFocusInsteadOfMouse.state = prefs.bool(forKey: PrefKey.useFocusInsteadOfMouse.rawValue) ? .on : .off
default: break
}
}
@IBAction func useFocusInsteadOfMouseClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.useFocusInsteadOfMouse.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.useFocusInsteadOfMouse.rawValue)
default: break
}
_ = self.showAdvanced()
}
@IBAction func allScreensVolumeClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.allScreensVolume.rawValue)
self.useAudioDeviceNameMatching.state = .off
self.useAudioDeviceNameMatching.isEnabled = false
case .off:
prefs.set(false, forKey: PrefKey.allScreensVolume.rawValue)
self.useAudioDeviceNameMatching.isEnabled = true
self.useAudioDeviceNameMatching.state = prefs.bool(forKey: PrefKey.useAudioDeviceNameMatching.rawValue) ? .on : .off
default: break
}
app.updateMediaKeyTap()
}
@IBAction func useAudioDeviceNameMatchingClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.useAudioDeviceNameMatching.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.useAudioDeviceNameMatching.rawValue)
default: break
}
app.updateMediaKeyTap()
_ = self.showAdvanced()
}
@IBAction func useFineScaleClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.useFineScaleBrightness.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.useFineScaleBrightness.rawValue)
default: break
}
_ = self.showAdvanced()
}
@IBAction func useFineScaleVolumeClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.useFineScaleVolume.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.useFineScaleVolume.rawValue)
default: break
}
}
@IBAction func separateCombinedScale(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.separateCombinedScale.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.separateCombinedScale.rawValue)
default: break
}
_ = self.showAdvanced()
}
@IBAction func disableAltBrightnessKeys(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.disableAltBrightnessKeys.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.disableAltBrightnessKeys.rawValue)
default: break
}
_ = self.showAdvanced()
app.updateMediaKeyTap()
}
@IBAction func keyboardBrightness(_ sender: NSPopUpButton) {
prefs.set(sender.selectedTag(), forKey: PrefKey.keyboardBrightness.rawValue)
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func keyboardVolume(_ sender: NSPopUpButton) {
prefs.set(sender.selectedTag(), forKey: PrefKey.keyboardVolume.rawValue)
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
}

View file

@ -1,5 +1,6 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import MediaKeyTap
import os.log
import Preferences
import ServiceManagement
@ -9,34 +10,77 @@ class MainPrefsViewController: NSViewController, PreferencePane {
let preferencePaneTitle: String = NSLocalizedString("General", comment: "Shown in the main prefs window")
var toolbarItemIcon: NSImage {
if #available(macOS 11.0, *) {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return NSImage(systemSymbolName: "switch.2", accessibilityDescription: "Display")!
} else {
// Fallback on earlier versions
return NSImage(named: NSImage.preferencesGeneralName)!
return NSImage(named: NSImage.infoName)!
}
}
let prefs = UserDefaults.standard
@IBOutlet var startAtLogin: NSButton!
@IBOutlet var hideMenuIcon: NSButton!
@IBOutlet var showContrastSlider: NSButton!
@IBOutlet var showVolumeSlider: NSButton!
@IBOutlet var lowerSwAfterBrightness: NSButton!
@IBOutlet var fallbackSw: NSButton!
@IBOutlet var listenFor: NSPopUpButton!
@IBOutlet var allScreens: NSButton!
@IBOutlet var altBrightnessKeys: NSButton!
@IBOutlet var automaticUpdateCheck: NSButton!
@IBOutlet var disableSoftwareFallback: NSButton!
@IBOutlet var combinedBrightness: NSButton!
@IBOutlet var enableSmooth: NSButton!
@IBOutlet var enableBrightnessSync: NSButton!
@IBOutlet var showAdvancedDisplays: NSButton!
@IBOutlet var notEnableDDCDuringStartup: NSButton!
@IBOutlet var writeDDCOnStartup: NSButton!
@IBOutlet var readDDCOnStartup: NSButton!
@IBOutlet var rowStartupSeparator: NSGridRow!
@IBOutlet var rowDoNothingStartupCheck: NSGridRow!
@IBOutlet var rowDoNothingStartupText: NSGridRow!
@IBOutlet var rowWriteStartupCheck: NSGridRow!
@IBOutlet var rowWriteStartupText: NSGridRow!
@IBOutlet var rowReadStartupCheck: NSGridRow!
@IBOutlet var rowReadStartupText: NSGridRow!
@IBOutlet var rowSafeModeText: NSGridRow!
@IBOutlet var rowResetButton: NSGridRow!
@IBOutlet var rowDisableSoftwareFallbackCheck: NSGridRow!
@IBOutlet var rowDisableSoftwareFallbackText: NSGridRow!
override func viewDidLoad() {
super.viewDidLoad()
func showAdvanced() -> Bool {
let hide = !prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue)
if self.notEnableDDCDuringStartup.state == .on {
self.rowStartupSeparator.isHidden = hide
self.rowDoNothingStartupCheck.isHidden = hide
self.rowDoNothingStartupText.isHidden = hide
self.rowWriteStartupCheck.isHidden = hide
self.rowWriteStartupText.isHidden = hide
self.rowReadStartupCheck.isHidden = hide
self.rowReadStartupText.isHidden = hide
self.rowSafeModeText.isHidden = hide
} else {
self.rowStartupSeparator.isHidden = false
self.rowDoNothingStartupCheck.isHidden = false
self.rowDoNothingStartupText.isHidden = false
if self.writeDDCOnStartup.state == .on {
self.rowWriteStartupCheck.isHidden = false
self.rowWriteStartupText.isHidden = false
self.rowReadStartupCheck.isHidden = hide
self.rowReadStartupText.isHidden = hide
} else {
self.rowWriteStartupCheck.isHidden = hide
self.rowWriteStartupText.isHidden = hide
self.rowReadStartupCheck.isHidden = false
self.rowReadStartupText.isHidden = false
}
self.rowSafeModeText.isHidden = false
}
if self.disableSoftwareFallback.state == .on {
self.rowDisableSoftwareFallbackCheck.isHidden = false
self.rowDisableSoftwareFallbackText.isHidden = false
} else {
self.rowDisableSoftwareFallbackCheck.isHidden = hide
self.rowDisableSoftwareFallbackText.isHidden = hide
}
self.rowResetButton.isHidden = hide
return !hide
}
@available(macOS, deprecated: 10.10)
override func viewWillAppear() {
super.viewWillAppear()
override func viewDidLoad() {
super.viewDidLoad()
self.populateSettings()
}
@ -45,153 +89,158 @@ class MainPrefsViewController: NSViewController, PreferencePane {
// This is marked as deprectated but according to the function header it still does not have a replacement as of macOS 12 Monterey and is valid to use.
let startAtLogin = (SMCopyAllJobDictionaries(kSMDomainUserLaunchd).takeRetainedValue() as? [[String: AnyObject]])?.first { $0["Label"] as? String == "\(Bundle.main.bundleIdentifier!)Helper" }?["OnDemand"] as? Bool ?? false
self.startAtLogin.state = startAtLogin ? .on : .off
self.hideMenuIcon.state = self.prefs.bool(forKey: Utils.PrefKeys.hideMenuIcon.rawValue) ? .on : .off
self.showContrastSlider.state = self.prefs.bool(forKey: Utils.PrefKeys.showContrast.rawValue) ? .on : .off
self.showVolumeSlider.state = self.prefs.bool(forKey: Utils.PrefKeys.showVolume.rawValue) ? .on : .off
self.lowerSwAfterBrightness.state = self.prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) ? .on : .off
self.fallbackSw.state = self.prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) ? .on : .off
self.listenFor.selectItem(at: self.prefs.integer(forKey: Utils.PrefKeys.listenFor.rawValue))
self.allScreens.state = self.prefs.bool(forKey: Utils.PrefKeys.allScreens.rawValue) ? .on : .off
self.altBrightnessKeys.state = self.prefs.bool(forKey: Utils.PrefKeys.altBrightnessKeys.rawValue) ? .on : .off
self.showAdvancedDisplays.state = self.prefs.bool(forKey: Utils.PrefKeys.showAdvancedDisplays.rawValue) ? .on : .off
}
@IBAction func allScreensTouched(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.allScreens.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.allScreens.rawValue)
default: break
}
#if DEBUG
os_log("Toggle allScreens state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
}
@IBAction func altBrightnessKeysTouched(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.altBrightnessKeys.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.altBrightnessKeys.rawValue)
default: break
}
MediaKeyTap.useAlternateBrightnessKeys = (sender.state == .on)
#if DEBUG
os_log("Toggle altBrightnessKeys state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
self.automaticUpdateCheck.state = prefs.bool(forKey: PrefKey.SUEnableAutomaticChecks.rawValue) ? .on : .off
self.combinedBrightness.state = prefs.bool(forKey: PrefKey.disableCombinedBrightness.rawValue) ? .off : .on
self.disableSoftwareFallback.state = prefs.bool(forKey: PrefKey.disableSoftwareFallback.rawValue) ? .on : .off
self.enableSmooth.state = prefs.bool(forKey: PrefKey.disableSmoothBrightness.rawValue) ? .off : .on
self.enableBrightnessSync.state = prefs.bool(forKey: PrefKey.enableBrightnessSync.rawValue) ? .on : .off
self.showAdvancedDisplays.state = prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue) ? .on : .off
self.notEnableDDCDuringStartup.state = !prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue) ? .on : .off
self.writeDDCOnStartup.state = !prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue) && prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue) ? .on : .off
self.readDDCOnStartup.state = prefs.bool(forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue) && prefs.bool(forKey: PrefKey.enableDDCDuringStartup.rawValue) ? .on : .off
// Preload Display preferences to some extent to properly set up size in orther that animation won't fail
menuslidersPrefsVc?.view.layoutSubtreeIfNeeded()
keyboardPrefsVc?.view.layoutSubtreeIfNeeded()
displaysPrefsVc?.view.layoutSubtreeIfNeeded()
aboutPrefsVc?.view.layoutSubtreeIfNeeded()
_ = self.showAdvanced()
}
@IBAction func startAtLoginClicked(_ sender: NSButton) {
switch sender.state {
case .on:
Utils.setStartAtLogin(enabled: true)
app.setStartAtLogin(enabled: true)
case .off:
Utils.setStartAtLogin(enabled: false)
app.setStartAtLogin(enabled: false)
default: break
}
}
@IBAction func hideMenuIconClicked(_ sender: NSButton) {
@IBAction func automaticUpdateCheck(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
app.statusItem.isVisible = false
prefs.set(true, forKey: PrefKey.SUEnableAutomaticChecks.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
app.statusItem.isVisible = true
prefs.set(false, forKey: PrefKey.SUEnableAutomaticChecks.rawValue)
default: break
}
}
@IBAction func showContrastSliderClicked(_ sender: NSButton) {
@IBAction func combinedBrightness(_ sender: NSButton) {
for display in DisplayManager.shared.getDdcCapableDisplays() where !display.isSw() {
_ = display.setDirectBrightness(1)
}
DisplayManager.shared.resetSwBrightnessForAllDisplays(async: false)
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.showContrast.rawValue)
prefs.set(false, forKey: PrefKey.disableCombinedBrightness.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.showContrast.rawValue)
prefs.set(true, forKey: PrefKey.disableCombinedBrightness.rawValue)
default: break
}
app.updateMenus()
#if DEBUG
os_log("Toggle show contrast slider state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
app.configure()
}
@IBAction func showVolumeSliderClicked(_ sender: NSButton) {
@IBAction func disableSoftwareFallback(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.showVolume.rawValue)
for display in DisplayManager.shared.getOtherDisplays() where display.isSw() {
_ = display.setBrightness(1)
}
prefs.set(true, forKey: PrefKey.disableSoftwareFallback.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.showVolume.rawValue)
prefs.set(false, forKey: PrefKey.disableSoftwareFallback.rawValue)
for display in DisplayManager.shared.getOtherDisplays() where display.isSw() {
_ = display.setBrightness(1)
}
default: break
}
app.updateMenus()
#if DEBUG
os_log("Toggle show volume slider state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
_ = self.showAdvanced()
app.configure()
}
@IBAction func lowerSwAfterBrightnessClicked(_ sender: NSButton) {
@IBAction func enableSmooth(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue)
prefs.set(false, forKey: PrefKey.disableSmoothBrightness.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue)
DisplayManager.shared.resetSwBrightnessForAllDisplays()
prefs.set(true, forKey: PrefKey.disableSmoothBrightness.rawValue)
default: break
}
app.updateMenus()
#if DEBUG
os_log("Toggle software control after brightness state: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
}
@IBAction func fallbackSwClicked(_ sender: NSButton) {
@IBAction func enableBrightnessSync(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.fallbackSw.rawValue)
prefs.set(true, forKey: PrefKey.enableBrightnessSync.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.fallbackSw.rawValue)
prefs.set(false, forKey: PrefKey.enableBrightnessSync.rawValue)
default: break
}
DisplayManager.shared.resetSwBrightnessForAllDisplays()
app.updateMenus()
#if DEBUG
os_log("Toggle fallback to software if no DDC: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
}
@IBAction func notEnableDDCDuringStartupClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(false, forKey: PrefKey.enableDDCDuringStartup.rawValue)
prefs.set(false, forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue)
self.writeDDCOnStartup.state = .off
self.readDDCOnStartup.state = .off
default: break
}
_ = self.showAdvanced()
}
@IBAction func writeDDCOnStartupClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(false, forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue)
prefs.set(true, forKey: PrefKey.enableDDCDuringStartup.rawValue)
self.notEnableDDCDuringStartup.state = .off
self.readDDCOnStartup.state = .off
default: break
}
_ = self.showAdvanced()
}
@IBAction func readDDCOnStartupClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.readDDCInsteadOfRestoreValues.rawValue)
prefs.set(true, forKey: PrefKey.enableDDCDuringStartup.rawValue)
self.notEnableDDCDuringStartup.state = .off
self.writeDDCOnStartup.state = .off
default: break
}
_ = self.showAdvanced()
}
@IBAction func showAdvancedClicked(_ sender: NSButton) {
switch sender.state {
case .on:
self.prefs.set(true, forKey: Utils.PrefKeys.showAdvancedDisplays.rawValue)
prefs.set(true, forKey: PrefKey.showAdvancedSettings.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.showAdvancedDisplays.rawValue)
prefs.set(false, forKey: PrefKey.showAdvancedSettings.rawValue)
default: break
}
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.displayListUpdate.rawValue), object: nil)
#if DEBUG
os_log("Show advanced settings in Display clicked: %{public}@", type: .info, sender.state == .on ? "on" : "off")
#endif
}
@IBAction func listenForChanged(_ sender: NSPopUpButton) {
self.prefs.set(sender.selectedTag(), forKey: Utils.PrefKeys.listenFor.rawValue)
#if DEBUG
os_log("Toggle keys listened for state state: %{public}@", type: .info, sender.selectedItem?.title ?? "")
#endif
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.listenFor.rawValue), object: nil)
_ = self.showAdvanced()
_ = menuslidersPrefsVc?.showAdvanced()
_ = keyboardPrefsVc?.showAdvanced()
_ = displaysPrefsVc?.showAdvanced()
menuslidersPrefsVc?.view.layoutSubtreeIfNeeded()
keyboardPrefsVc?.view.layoutSubtreeIfNeeded()
displaysPrefsVc?.view.layoutSubtreeIfNeeded()
aboutPrefsVc?.view.layoutSubtreeIfNeeded()
}
@available(macOS, deprecated: 10.10)
func resetSheetModalHander(modalResponse: NSApplication.ModalResponse) {
if modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn {
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.preferenceReset.rawValue), object: nil)
app.preferenceReset()
self.populateSettings()
menuslidersPrefsVc?.populateSettings()
keyboardPrefsVc?.populateSettings()
self.showAdvancedClicked(self.showAdvancedDisplays)
}
}

View file

@ -0,0 +1,309 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import os.log
import Preferences
import ServiceManagement
class MenuslidersPrefsViewController: NSViewController, PreferencePane {
let preferencePaneIdentifier = Preferences.PaneIdentifier.menusliders
let preferencePaneTitle: String = NSLocalizedString("App menu", comment: "Shown in the main prefs window")
var toolbarItemIcon: NSImage {
if !DEBUG_MACOS10, #available(macOS 11.0, *) {
return NSImage(systemSymbolName: "filemenu.and.cursorarrow", accessibilityDescription: "App menu")!
} else {
return NSImage(named: NSImage.infoName)!
}
}
@IBOutlet var iconShow: NSPopUpButton!
@IBOutlet var menuItemStyle: NSPopUpButton!
@IBOutlet var quitApplication: NSButton!
@IBOutlet var showBrightnessSlider: NSButton!
@IBOutlet var showAppleFromMenu: NSButton!
@IBOutlet var showVolumeSlider: NSButton!
@IBOutlet var showContrastSlider: NSButton!
@IBOutlet var slidersSeparate: NSButton!
@IBOutlet var slidersRelevant: NSButton!
@IBOutlet var slidersCombine: NSButton!
@IBOutlet var enableSliderSnap: NSButton!
@IBOutlet var showTickMarks: NSButton!
@IBOutlet var enableSliderPercent: NSButton!
@IBOutlet var rowIconShow: NSGridRow!
@IBOutlet var rowMenuItemStyle: NSGridRow!
@IBOutlet var rowQuitButton: NSGridRow!
@IBOutlet var rowQuitButtonText: NSGridRow!
@IBOutlet var rowHideIconSpearator: NSGridRow!
@IBOutlet var rowShowContrastCheck: NSGridRow!
@IBOutlet var rowShowContrastText: NSGridRow!
@IBOutlet var rowSlidersSeparator: NSButton!
@IBOutlet var rowSlidersSeparate: NSButton!
@IBOutlet var rowSlidersRelevant: NSButton!
@IBOutlet var rowSlidersCombine: NSButton!
@IBOutlet var rowSlidersCombineText: NSButton!
@IBOutlet var rowTickCheck: NSGridRow!
@IBOutlet var rowTickText: NSGridRow!
@IBOutlet var rowPercentCheck: NSGridRow!
@IBOutlet var rowPercentText: NSGridRow!
// swiftlint:disable cyclomatic_complexity
func showAdvanced() -> Bool {
let hide = !prefs.bool(forKey: PrefKey.showAdvancedSettings.rawValue)
var doNotHideRowIconSeparator = false
if self.iconShow.selectedTag() != MenuIcon.show.rawValue {
self.rowIconShow.isHidden = false
doNotHideRowIconSeparator = true
} else {
self.rowIconShow.isHidden = hide
}
if app.macOS10() {
self.rowMenuItemStyle.isHidden = true
} else if self.menuItemStyle.selectedTag() != MenuItemStyle.text.rawValue {
self.rowMenuItemStyle.isHidden = false
doNotHideRowIconSeparator = true
} else {
self.rowMenuItemStyle.isHidden = hide
}
if self.iconShow.selectedTag() != MenuIcon.show.rawValue || self.menuItemStyle.selectedTag() == MenuItemStyle.hide.rawValue {
self.rowQuitButton.isHidden = false
self.rowQuitButtonText.isHidden = false
doNotHideRowIconSeparator = true
} else {
self.rowQuitButton.isHidden = true
self.rowQuitButtonText.isHidden = true
}
if doNotHideRowIconSeparator {
self.rowHideIconSpearator.isHidden = false
self.rowHideIconSpearator.isHidden = false
} else {
self.rowHideIconSpearator.isHidden = hide
self.rowHideIconSpearator.isHidden = hide
}
if self.showContrastSlider.state == .on {
self.rowShowContrastCheck.isHidden = false
self.rowShowContrastText.isHidden = false
} else {
self.rowShowContrastCheck.isHidden = hide
self.rowShowContrastText.isHidden = hide
}
if self.slidersSeparate.state == .on {
self.rowSlidersSeparator.isHidden = hide
self.rowSlidersSeparate.isHidden = hide
self.rowSlidersRelevant.isHidden = hide
self.rowSlidersCombine.isHidden = hide
self.rowSlidersCombineText.isHidden = hide
} else {
self.rowSlidersSeparator.isHidden = false
self.rowSlidersSeparate.isHidden = false
if self.slidersRelevant.state == .on {
self.rowSlidersRelevant.isHidden = false
} else {
self.rowSlidersRelevant.isHidden = hide
}
if self.slidersCombine.state == .on {
self.rowSlidersCombine.isHidden = false
self.rowSlidersCombineText.isHidden = false
} else {
self.rowSlidersCombine.isHidden = hide
self.rowSlidersCombineText.isHidden = hide
}
}
if app.macOS10() {
self.rowTickCheck.isHidden = true
self.rowTickText.isHidden = true
} else if self.showTickMarks.state == .on {
self.rowTickCheck.isHidden = false
self.rowTickText.isHidden = false
} else {
self.rowTickCheck.isHidden = hide
self.rowTickText.isHidden = hide
}
if self.enableSliderPercent.state == .on {
self.rowPercentCheck.isHidden = false
self.rowPercentText.isHidden = false
} else {
self.rowPercentCheck.isHidden = hide
self.rowPercentText.isHidden = hide
}
return !hide
}
// swiftlint:enable cyclomatic_complexity
override func viewDidLoad() {
super.viewDidLoad()
self.populateSettings()
}
func populateSettings() {
self.iconShow.selectItem(withTag: prefs.integer(forKey: PrefKey.menuIcon.rawValue))
self.menuItemStyle.selectItem(withTag: prefs.integer(forKey: PrefKey.menuItemStyle.rawValue))
self.showBrightnessSlider.state = !prefs.bool(forKey: PrefKey.hideBrightness.rawValue) ? .on : .off
if !prefs.bool(forKey: PrefKey.hideBrightness.rawValue) {
self.showAppleFromMenu.isEnabled = true
self.showAppleFromMenu.state = !prefs.bool(forKey: PrefKey.hideAppleFromMenu.rawValue) ? .on : .off
} else {
self.showAppleFromMenu.state = .off
self.showAppleFromMenu.isEnabled = false
}
self.showContrastSlider.state = prefs.bool(forKey: PrefKey.showContrast.rawValue) ? .on : .off
self.slidersSeparate.state = prefs.bool(forKey: PrefKey.slidersRelevant.rawValue) || prefs.bool(forKey: PrefKey.slidersCombine.rawValue) ? .off : .on
self.slidersRelevant.state = prefs.bool(forKey: PrefKey.slidersRelevant.rawValue) ? .on : .off
self.slidersCombine.state = prefs.bool(forKey: PrefKey.slidersCombine.rawValue) ? .on : .off
self.showVolumeSlider.state = prefs.bool(forKey: PrefKey.hideVolume.rawValue) ? .off : .on
self.enableSliderSnap.state = prefs.bool(forKey: PrefKey.enableSliderSnap.rawValue) ? .on : .off
self.showTickMarks.state = prefs.bool(forKey: PrefKey.showTickMarks.rawValue) ? .on : .off
self.enableSliderPercent.state = prefs.bool(forKey: PrefKey.enableSliderPercent.rawValue) ? .on : .off
_ = self.showAdvanced()
}
@IBAction func icon(_ sender: NSPopUpButton) {
prefs.set(sender.selectedTag(), forKey: PrefKey.menuIcon.rawValue)
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func menuItemStyle(_ sender: NSPopUpButton) {
prefs.set(sender.selectedTag(), forKey: PrefKey.menuItemStyle.rawValue)
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func quitApplicationClicked(_: NSButton) {
NSApplication.shared.terminate(self)
}
@IBAction func showBrightnessSliderClicked(_ sender: NSButton) {
switch sender.state {
case .off:
prefs.set(true, forKey: PrefKey.hideBrightness.rawValue)
self.showAppleFromMenu.state = .off
self.showAppleFromMenu.isEnabled = false
case .on:
prefs.set(false, forKey: PrefKey.hideBrightness.rawValue)
self.showAppleFromMenu.isEnabled = true
self.showAppleFromMenu.state = !prefs.bool(forKey: PrefKey.hideAppleFromMenu.rawValue) ? .on : .off
default: break
}
app.updateMenusAndKeys()
}
@IBAction func showAppleFromMenuClicked(_ sender: NSButton) {
switch sender.state {
case .off:
prefs.set(true, forKey: PrefKey.hideAppleFromMenu.rawValue)
case .on:
prefs.set(false, forKey: PrefKey.hideAppleFromMenu.rawValue)
default: break
}
app.updateMenusAndKeys()
}
@IBAction func showVolumeSliderClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(false, forKey: PrefKey.hideVolume.rawValue)
case .off:
prefs.set(true, forKey: PrefKey.hideVolume.rawValue)
default: break
}
app.updateMenusAndKeys()
}
@IBAction func showContrastSliderClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.showContrast.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.showContrast.rawValue)
default: break
}
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func enableSliderSnapClicked(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.enableSliderSnap.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.enableSliderSnap.rawValue)
default: break
}
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func slidersSeparate(_: NSButton) {
prefs.set(false, forKey: PrefKey.slidersCombine.rawValue)
prefs.set(false, forKey: PrefKey.slidersRelevant.rawValue)
self.slidersSeparate.state = .on
self.slidersCombine.state = .off
self.slidersRelevant.state = .off
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func slidersRelevant(_: NSButton) {
prefs.set(false, forKey: PrefKey.slidersCombine.rawValue)
prefs.set(true, forKey: PrefKey.slidersRelevant.rawValue)
self.slidersSeparate.state = .off
self.slidersCombine.state = .off
self.slidersRelevant.state = .on
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func slidersCombine(_: NSButton) {
prefs.set(true, forKey: PrefKey.slidersCombine.rawValue)
prefs.set(false, forKey: PrefKey.slidersRelevant.rawValue)
self.slidersSeparate.state = .off
self.slidersCombine.state = .on
self.slidersRelevant.state = .off
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func showTickMarks(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.showTickMarks.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.showTickMarks.rawValue)
default: break
}
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
@IBAction func enableSliderPercent(_ sender: NSButton) {
switch sender.state {
case .on:
prefs.set(true, forKey: PrefKey.enableSliderPercent.rawValue)
case .off:
prefs.set(false, forKey: PrefKey.enableSliderPercent.rawValue)
default: break
}
app.updateMenusAndKeys()
_ = self.showAdvanced()
}
}

29
MonitorControl/main.swift Normal file
View file

@ -0,0 +1,29 @@
// Copyright © MonitorControl. @JoniVR, @theOneyouseek, @waydabber and others
import Cocoa
import Foundation
let DEBUG_SW = false
let DEBUG_VIRTUAL = false
let DEBUG_MACOS10 = false
let DEBUG_GAMMA_ENFORCER = false
let MIN_PREVIOUS_BUILD_NUMBER = 6262
var app: AppDelegate!
var menu: MenuHandler!
let prefs = UserDefaults.standard
let storyboard = NSStoryboard(name: "Main", bundle: Bundle.main)
let mainPrefsVc = storyboard.instantiateController(withIdentifier: "MainPrefsVC") as? MainPrefsViewController
let displaysPrefsVc = storyboard.instantiateController(withIdentifier: "DisplaysPrefsVC") as? DisplaysPrefsViewController
let menuslidersPrefsVc = storyboard.instantiateController(withIdentifier: "MenuslidersPrefsVC") as? MenuslidersPrefsViewController
let keyboardPrefsVc = storyboard.instantiateController(withIdentifier: "KeyboardPrefsVC") as? KeyboardPrefsViewController
let aboutPrefsVc = storyboard.instantiateController(withIdentifier: "AboutPrefsVC") as? AboutPrefsViewController
autoreleasepool { () -> Void in
let mc = NSApplication.shared
let mcDelegate = AppDelegate()
mc.delegate = mcDelegate
mc.run()
}

View file

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>3095</string>
<string>6293</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSBackgroundOnly</key>
@ -28,8 +28,6 @@
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>MIT Licensed. 2018.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>

View file

@ -48,13 +48,15 @@ Go to [Releases](https://github.com/MonitorControl/MonitorControl/releases) and
## Compatibility
- macOS Mojave (`10.14`) and up _(note: you can download [version 2.1.0](https://github.com/MonitorControl/MonitorControl/releases/tag/v2.1.0) for macOS Sierra `10.12` support)_
- Works with monitors controllable via [DDC](https://en.wikipedia.org/wiki/Display_Data_Channel) (or any other display via software dimming)
- macOS Big Sur (`macOS 11`) and newer are supported
- Current version is compatible with macOS Catalina (`10.15`) as well (with some limitations).
_(Note: you can download [version 2.1.0](https://github.com/MonitorControl/MonitorControl/releases/tag/v2.1.0) for Sierra `10.12` and [version 3.1.1](https://github.com/MonitorControl/MonitorControl/releases/tag/v3.1.1) for Mojave `10.14` support)_
## How to help
Open [issues](https://github.com/MonitorControl/MonitorControl/issues) if you have a question, an enhancement to suggest or a bug you've found. If you want you can fork the code yourself and submit a pull request to improve the app.
## How to build
### Required
@ -82,8 +84,9 @@ You're all set ! Now open the `MonitorControl.xcodeproj` with Xcode! The depende
- [MediaKeyTap](https://github.com/MonitorControl/MediaKeyTap)
- [Preferences](https://github.com/sindresorhus/Preferences)
- [DDC.swift](https://github.com/reitermarkus/DDC.swift)
- [SimplyCoreAudio](https://github.com/rnine/SimplyCoreAudio)
- [KeyboardShortcuts](https://github.com/sindresorhus/KeyboardShortcuts)
- [Sparkle](https://github.com/sparkle-project/Sparkle)
## Contributors

17
docs/appcast.xml Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" standalone="yes"?>
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
<channel>
<title>MonitorControl</title>
<link>https://monitorcontrol.app</link>
<item>
<title>v4.0.0-beta1</title>
<!-- TODO: Use correct channels once setting is present. (after 4.0.0 release) -->
<!-- <sparkle:channel>beta</sparkle:channel> -->
<pubDate>Thu, 30 Sep 2021 21:43:20 +0200</pubDate>
<sparkle:version>6293</sparkle:version>
<sparkle:shortVersionString>4.0.0-beta1</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>10.15</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/MonitorControl/MonitorControl/releases/download/v4.0.0/MonitorControl.4.0.0.dmg" type="application/octet-stream" sparkle:edSignature="5dLmd501WPdq0c542Iv0g/++zSwQGlDmrxkwMWKmrCMxGs2xE/MGh4XtawZOIQmUIRjzZjEr09X57lbJQEkICg==" length="4127131"/>
</item>
</channel>
</rss>