diff --git a/Easydict.xcodeproj/project.pbxproj b/Easydict.xcodeproj/project.pbxproj index d4a4be7dc..c120c7813 100644 --- a/Easydict.xcodeproj/project.pbxproj +++ b/Easydict.xcodeproj/project.pbxproj @@ -284,7 +284,6 @@ 9643D94A2B71EABE000FBEA6 /* KeyHolderAlterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9643D9492B71EABE000FBEA6 /* KeyHolderAlterView.swift */; }; 9643D94C2B71F74D000FBEA6 /* MainMenuShortcutCommandItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9643D94B2B71F74D000FBEA6 /* MainMenuShortcutCommandItem.swift */; }; 9643D9562B73B3CD000FBEA6 /* Shortcut+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9643D9552B73B3CD000FBEA6 /* Shortcut+Menu.swift */; }; - 9643D9592B73BAFD000FBEA6 /* String+Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9643D9582B73BAFD000FBEA6 /* String+Localized.swift */; }; 9672D7D22B4008B40023B8FB /* MASShortcutBinder+EZMASShortcutBinder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9672D7D12B4008B40023B8FB /* MASShortcutBinder+EZMASShortcutBinder.m */; }; 967712EA2B5B913600105E0F /* KeyHolder in Frameworks */ = {isa = PBXBuildFile; productRef = 967712E92B5B913600105E0F /* KeyHolder */; }; 967712EE2B5B943400105E0F /* Shortcut.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967712ED2B5B943400105E0F /* Shortcut.swift */; }; @@ -809,7 +808,6 @@ 9643D9492B71EABE000FBEA6 /* KeyHolderAlterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyHolderAlterView.swift; sourceTree = ""; }; 9643D94B2B71F74D000FBEA6 /* MainMenuShortcutCommandItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuShortcutCommandItem.swift; sourceTree = ""; }; 9643D9552B73B3CD000FBEA6 /* Shortcut+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Shortcut+Menu.swift"; sourceTree = ""; }; - 9643D9582B73BAFD000FBEA6 /* String+Localized.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Localized.swift"; sourceTree = ""; }; 9672D7D02B4008B40023B8FB /* MASShortcutBinder+EZMASShortcutBinder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MASShortcutBinder+EZMASShortcutBinder.h"; sourceTree = ""; }; 9672D7D12B4008B40023B8FB /* MASShortcutBinder+EZMASShortcutBinder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "MASShortcutBinder+EZMASShortcutBinder.m"; sourceTree = ""; }; 967712ED2B5B943400105E0F /* Shortcut.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shortcut.swift; sourceTree = ""; }; @@ -1266,7 +1264,6 @@ isa = PBXGroup; children = ( 038A723F2B62C0B9004995E3 /* String+Regex.swift */, - 9643D9582B73BAFD000FBEA6 /* String+Localized.swift */, ); path = String; sourceTree = ""; @@ -2933,7 +2930,6 @@ 0AC8A8412B695480006DA5CC /* DeepLTranslate+ConfigurableService.swift in Sources */, 039CC90D292F664E0037B91E /* NSObject+EZWindowType.m in Sources */, 03B0232229231FA6001C7E63 /* NSImage+MM.m in Sources */, - 9643D9592B73BAFD000FBEA6 /* String+Localized.swift in Sources */, 03BB2DEF29F59C8A00447EDD /* EZSymbolImageButton.m in Sources */, 0A2BA9642B4A3CCD002872A4 /* Notification+Name.swift in Sources */, C415C0AD2B450D4800A9D231 /* GeminiService.swift in Sources */, diff --git a/Easydict/NewApp/Feature/Shortcut/Shortcut+Menu.swift b/Easydict/NewApp/Feature/Shortcut/Shortcut+Menu.swift index caa72e8c0..04f109aa6 100644 --- a/Easydict/NewApp/Feature/Shortcut/Shortcut+Menu.swift +++ b/Easydict/NewApp/Feature/Shortcut/Shortcut+Menu.swift @@ -9,9 +9,11 @@ import SwiftUI extension Shortcut { + @available(macOS 13, *) func updateMenu(_ type: ShortcutType) { // update shortcut menu - let shortcutTitle = LocalizedStringKey(type.localizedStringKey()).stringValue() - let shortcutMenu = NSApp.mainMenu?.items.first(where: { $0.title == "Shortcut" }) + let shortcutTitle = String(localized: LocalizedStringResource(stringLiteral: type.localizedStringKey())) + let menuTitle = String(localized: LocalizedStringResource(stringLiteral: "shortcut")) + let shortcutMenu = NSApp.mainMenu?.items.first(where: { $0.title == menuTitle }) let clearInput = shortcutMenu?.submenu?.items.first(where: { $0.title == shortcutTitle }) clearInput?.keyEquivalent = "" } diff --git a/Easydict/NewApp/Utility/Extensions/String/String+Localized.swift b/Easydict/NewApp/Utility/Extensions/String/String+Localized.swift deleted file mode 100644 index 6975ad271..000000000 --- a/Easydict/NewApp/Utility/Extensions/String/String+Localized.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// String+Localized.swift -// Easydict -// -// Created by Sharker on 2024/2/7. -// Copyright © 2024 izual. All rights reserved. -// - -import SwiftUI - -// ref: https://stackoverflow.com/questions/60841915/how-to-change-localizedstringkey-to-string-in-swiftui -extension LocalizedStringKey { - // This will mirror the `LocalizedStringKey` so it can access its - // internal `key` property. Mirroring is rather expensive, but it - // should be fine performance-wise, unless you are - // using it too much or doing something out of the norm. - var stringKey: String? { - Mirror(reflecting: self).children.first(where: { $0.label == "key" })?.value as? String - } - - func stringValue(locale: Locale = .current) -> String { - .localizedString(for: stringKey ?? "", locale: locale) - } -} - -extension String { - static func localizedString(for key: String, - locale: Locale = .current) -> String - { - let language = locale.languageCode - let path = Bundle.main.path(forResource: language, ofType: "lproj")! - let bundle = Bundle(path: path)! - let localizedString = NSLocalizedString(key, bundle: bundle, comment: "") - - return localizedString - } -} diff --git a/Easydict/NewApp/View/SettingView/Tabs/View/Shortcut/KeyHolderWrapper.swift b/Easydict/NewApp/View/SettingView/Tabs/View/Shortcut/KeyHolderWrapper.swift index 61a0515ab..097541b2b 100644 --- a/Easydict/NewApp/View/SettingView/Tabs/View/Shortcut/KeyHolderWrapper.swift +++ b/Easydict/NewApp/View/SettingView/Tabs/View/Shortcut/KeyHolderWrapper.swift @@ -17,6 +17,7 @@ public struct KeyHolderDataItem: Identifiable { var type: ShortcutType } +@available(macOS 13, *) struct KeyHolderWrapper: NSViewRepresentable { func makeCoordinator() -> Coordinator { .init(shortcutType: type, confictAlterMessage: $confictAlterMessage) @@ -44,6 +45,7 @@ struct KeyHolderWrapper: NSViewRepresentable { func updateNSView(_: NSViewType, context _: Context) {} } +@available(macOS 13, *) extension KeyHolderWrapper { class Coordinator: NSObject, RecordViewDelegate { private var type: ShortcutType @@ -70,14 +72,7 @@ extension KeyHolderWrapper { if let key = keyCombo { // shortcut validate confict if Shortcut.validateShortcut(key) { - if #available(macOS 12, *) { confictAlterMessage = ShortcutConfictAlertMessage(title: String(localized: "shortcut_confict_title \(keyCombo!.keyEquivalentModifierMaskString + keyCombo!.characters)"), message: String(localized: "shortcut_confict_message \(Shortcut.shared.confictMenuItem?.title ?? "")")) - } else { - // Fallback on earlier versions - let title = NSLocalizedString("shortcut_confict_title \(keyCombo!.keyEquivalentModifierMaskString + keyCombo!.characters)", comment: "") - let msg = NSLocalizedString("shortcut_confict_message \(Shortcut.shared.confictMenuItem?.title ?? "")", comment: "") - confictAlterMessage = ShortcutConfictAlertMessage(title: title, message: msg) - } recordView.clear() return }