From 1ae01641f89086f94efcc322689725961cc9c7a0 Mon Sep 17 00:00:00 2001 From: choykarl <253440030@qq.com> Date: Thu, 2 May 2024 21:00:40 +0800 Subject: [PATCH 1/9] fix: improve local language (#530) * fix: improve local language * pref: optimize code --- .../Swift/Feature/Localization/I18nHelper.swift | 17 ++++++++++++++--- .../Feature/Localization/LanguageState.swift | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Easydict/Swift/Feature/Localization/I18nHelper.swift b/Easydict/Swift/Feature/Localization/I18nHelper.swift index 957bd7790..0b33e73b5 100644 --- a/Easydict/Swift/Feature/Localization/I18nHelper.swift +++ b/Easydict/Swift/Feature/Localization/I18nHelper.swift @@ -25,12 +25,23 @@ class I18nHelper: NSObject { } var localizeCode: String { - UserDefaults.standard.string(forKey: languagePreferenceLocalKey) ?? LanguageState.LanguageType - .simplifiedChinese.rawValue + if let code = UserDefaults.standard.string(forKey: languagePreferenceLocalKey) { + return code + } + + if let localLanguageType = LanguageState.LanguageType(rawValue: Locale.current.identifier) { + return localLanguageType.rawValue + } + + if Locale.current.identifier == "zh_CN" { + return LanguageState.LanguageType.simplifiedChinese.rawValue + } + + return LanguageState.LanguageType.english.rawValue } var languageType: LanguageState.LanguageType { - LanguageState.LanguageType(rawValue: localizeCode) ?? .simplifiedChinese + LanguageState.LanguageType(rawValue: localizeCode) ?? .english } var isSimplifiedChineseLocalize: Bool { diff --git a/Easydict/Swift/Feature/Localization/LanguageState.swift b/Easydict/Swift/Feature/Localization/LanguageState.swift index b780ec730..5ff231133 100644 --- a/Easydict/Swift/Feature/Localization/LanguageState.swift +++ b/Easydict/Swift/Feature/Localization/LanguageState.swift @@ -32,7 +32,7 @@ class LanguageState: ObservableObject { } @AppStorage(languagePreferenceLocalKey) var language: LanguageType = (.init( - rawValue: Locale.current.identifier + rawValue: I18nHelper.shared.localizeCode ) ?? .simplifiedChinese) { didSet { NotificationCenter.default.post(name: .languagePreferenceChanged, object: nil) From be9bc34785812eaee85ad0d581e6470cada75d02 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Thu, 2 May 2024 21:12:34 +0800 Subject: [PATCH 2/9] perf: format code --- Easydict/Swift/Feature/Localization/I18nHelper.swift | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Easydict/Swift/Feature/Localization/I18nHelper.swift b/Easydict/Swift/Feature/Localization/I18nHelper.swift index 0b33e73b5..fb4da04c9 100644 --- a/Easydict/Swift/Feature/Localization/I18nHelper.swift +++ b/Easydict/Swift/Feature/Localization/I18nHelper.swift @@ -26,17 +26,18 @@ class I18nHelper: NSObject { var localizeCode: String { if let code = UserDefaults.standard.string(forKey: languagePreferenceLocalKey) { - return code + return code } - + if let localLanguageType = LanguageState.LanguageType(rawValue: Locale.current.identifier) { return localLanguageType.rawValue } - + + // We should use EZLanguageModel localeIdentifier to rewrite this code. if Locale.current.identifier == "zh_CN" { return LanguageState.LanguageType.simplifiedChinese.rawValue } - + return LanguageState.LanguageType.english.rawValue } From 2f04062e16e674b831780594ca3cb4a01650b7ac Mon Sep 17 00:00:00 2001 From: tisfeng Date: Thu, 2 May 2024 21:53:34 +0800 Subject: [PATCH 3/9] chore: update app version to 2.7.1 --- Easydict.xcodeproj/project.pbxproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easydict.xcodeproj/project.pbxproj b/Easydict.xcodeproj/project.pbxproj index 62af53f84..a09a7de35 100644 --- a/Easydict.xcodeproj/project.pbxproj +++ b/Easydict.xcodeproj/project.pbxproj @@ -3340,7 +3340,7 @@ CODE_SIGN_IDENTITY = $CODE_SIGN_IDENTITY; CODE_SIGN_STYLE = $CODE_SIGN_STYLE; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 34; + CURRENT_PROJECT_VERSION = 35; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_HARDENED_RUNTIME = YES; @@ -3351,7 +3351,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 2.7.0; + MARKETING_VERSION = 2.7.1; PRODUCT_BUNDLE_IDENTIFIER = "com.izual.EasydictHelper-debug"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -3366,7 +3366,7 @@ CODE_SIGN_IDENTITY = $CODE_SIGN_IDENTITY; CODE_SIGN_STYLE = $CODE_SIGN_STYLE; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 34; + CURRENT_PROJECT_VERSION = 35; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_HARDENED_RUNTIME = YES; @@ -3377,7 +3377,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 2.7.0; + MARKETING_VERSION = 2.7.1; PRODUCT_BUNDLE_IDENTIFIER = com.izual.EasydictHelper; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -3523,7 +3523,7 @@ CODE_SIGN_STYLE = $CODE_SIGN_STYLE; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 34; + CURRENT_PROJECT_VERSION = 35; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_HARDENED_RUNTIME = YES; @@ -3538,7 +3538,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 2.7.0; + MARKETING_VERSION = 2.7.1; PRODUCT_BUNDLE_IDENTIFIER = "com.izual.Easydict-debug"; PRODUCT_MODULE_NAME = Easydict; PRODUCT_NAME = "Easydict-debug"; @@ -3563,7 +3563,7 @@ CODE_SIGN_STYLE = $CODE_SIGN_STYLE; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 34; + CURRENT_PROJECT_VERSION = 35; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_HARDENED_RUNTIME = YES; @@ -3578,7 +3578,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 2.7.0; + MARKETING_VERSION = 2.7.1; PRODUCT_BUNDLE_IDENTIFIER = com.izual.Easydict; PRODUCT_MODULE_NAME = Easydict; PRODUCT_NAME = "$(TARGET_NAME)"; From 313c17b96efca236543dcad4300637f2745a1717 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Thu, 2 May 2024 22:48:09 +0800 Subject: [PATCH 4/9] fix: bundleIdentifier cannot be nil --- .../EZDisableAutoSelectTextViewController.m | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Easydict/objc/PerferenceWindow/DisableAutoSelectTextViewController/EZDisableAutoSelectTextViewController.m b/Easydict/objc/PerferenceWindow/DisableAutoSelectTextViewController/EZDisableAutoSelectTextViewController.m index e53c4c3f6..19981bde5 100644 --- a/Easydict/objc/PerferenceWindow/DisableAutoSelectTextViewController/EZDisableAutoSelectTextViewController.m +++ b/Easydict/objc/PerferenceWindow/DisableAutoSelectTextViewController/EZDisableAutoSelectTextViewController.m @@ -82,9 +82,18 @@ - (void)setupAppModelList { NSArray *allAppModelList = [EZLocalStorage.shared selectTextTypeAppModelList]; NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; for (EZAppModel *appModel in allAppModelList) { - NSURL *appURL = [workspace URLForApplicationWithBundleIdentifier:appModel.appBundleID]; - if (appURL) { - [self.appModelList addObject:appModel]; + /** + Fix appcenter issue + + -[EZDisableAutoSelectTextViewController setupAppModelList] + EZDisableAutoSelectTextViewController.m, line 85 + SIGABRT: Invalid parameter not satisfying: bundleIdentifier != nil + */ + if (appModel.appBundleID) { + NSURL *appURL = [workspace URLForApplicationWithBundleIdentifier:appModel.appBundleID]; + if (appURL) { + [self.appModelList addObject:appModel]; + } } } } From bab4b1f626777611ae2f1f4a652922dad1c8cdf1 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Thu, 2 May 2024 23:30:22 +0800 Subject: [PATCH 5/9] fix: cannot remove self.subviews in updateConstraints --- .../ViewController/View/Titlebar/EZTitlebar.m | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Easydict/objc/ViewController/View/Titlebar/EZTitlebar.m b/Easydict/objc/ViewController/View/Titlebar/EZTitlebar.m index 141430624..02d5ee14a 100644 --- a/Easydict/objc/ViewController/View/Titlebar/EZTitlebar.m +++ b/Easydict/objc/ViewController/View/Titlebar/EZTitlebar.m @@ -59,12 +59,23 @@ - (void)setup { [defaultCenter addObserver:self selector:@selector(updateConstraints) name:NSNotification.languagePreferenceChanged object:nil]; } +//- (void)update + - (void)updateConstraints { + /** + Fix appcenter issue, seems cannot remove self.subviews 🤔 + + -[EZTitlebar updateConstraints] + EZTitlebar.m, line 64 + SIGABRT: *** Collection <__NSArrayM: 0x6000036e45d0> was mutated while being enumerated. + */ + // Remove and dealloc all views to refresh UI. - for (NSView *subview in self.subviews) { - [subview removeFromSuperview]; - } + + [_pinButton removeFromSuperview]; + [_stackView removeFromSuperview]; _stackView = nil; + _quickActionButton = nil; [self addSubview:self.pinButton]; [self updatePinButton]; From 5ea9e6929c7ec2d1e5c4d74d000218deaee02a9f Mon Sep 17 00:00:00 2001 From: tisfeng Date: Thu, 2 May 2024 23:53:30 +0800 Subject: [PATCH 6/9] chore: update appcast.xml --- appcast.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/appcast.xml b/appcast.xml index 80fbfa96b..5aa7fa333 100755 --- a/appcast.xml +++ b/appcast.xml @@ -2,6 +2,17 @@ Easydict + + + 2.7.1 + Thu, 02 May 2024 22:35:59 +0800 + 35 + 2.7.1 + 11.0 + https://github.com/tisfeng/easydict/releases/tag/2.7.1 + + + 2.7.0 Wed, 01 May 2024 00:38:04 +0800 From 0d340a3d6cb75043fb9a5aea9f75911f2e1f2088 Mon Sep 17 00:00:00 2001 From: Jerry Zhang Date: Sat, 4 May 2024 10:52:25 +0800 Subject: [PATCH 7/9] Rewrite About view (#532) * perf(UI): rewrite about view * perf(UI): rewrite about view * perf(UI): add about view to menubar * perf(UI): add shadow for app icon * pref: about view UI * pref: pref about view UI resize the hight * fix(UI): specify scrollview for settings about view * pref: pref about view UI * perf(UI): improve AboutTab layout * perf: clean stale xcstring * perf: improve showing About window * perf: remove unuse code * fix: crash when about window is closed * perf: improve showAboutWindow --------- Co-authored-by: Tisfeng Co-authored-by: Sharker <1548742234@qq.com> --- Easydict/App/AppDelegate.m | 1 - Easydict/App/EasydictApp.swift | 30 +++++++ Easydict/App/Localizable.xcstrings | 74 ++++++++++++++--- .../Swift/View/SettingView/SettingView.swift | 4 +- .../SettingView/Tabs/TabView/AboutTab.swift | 79 ++++++++++++++----- 5 files changed, 154 insertions(+), 34 deletions(-) diff --git a/Easydict/App/AppDelegate.m b/Easydict/App/AppDelegate.m index 0408628cd..4697dc94b 100644 --- a/Easydict/App/AppDelegate.m +++ b/Easydict/App/AppDelegate.m @@ -57,7 +57,6 @@ - (void)restartApplication { [task launch]; } - #pragma mark - NSApplicationDelegate - (void)applicationWillTerminate:(NSNotification *)aNotification { diff --git a/Easydict/App/EasydictApp.swift b/Easydict/App/EasydictApp.swift index 5d77f14fe..5dbf9f90e 100644 --- a/Easydict/App/EasydictApp.swift +++ b/Easydict/App/EasydictApp.swift @@ -54,6 +54,14 @@ struct EasydictApp: App { .menuBarExtraStyle(.menu) .commands { EasyDictMainMenu() // main menu + // Override About button + CommandGroup(replacing: .appInfo) { + Button { + showAboutWindow() + } label: { + Text("menubar.about") + } + } } Window("go_to_settings", id: "go_to_settings") { @@ -83,6 +91,28 @@ struct EasydictApp: App { @Default(.selectedMenuBarIcon) private var menuBarIcon @StateObject private var languageState = LanguageState() + + @State var aboutWindow: NSWindow? + + private func showAboutWindow() { + if let aboutWindow = aboutWindow { + aboutWindow.makeKeyAndOrderFront(nil) + } else { + aboutWindow = NSWindow( + contentRect: NSRect(x: 0, y: 0, width: 500, height: 220), + styleMask: [.titled, .closable], + backing: .buffered, defer: false + ) + aboutWindow?.titleVisibility = .hidden + aboutWindow?.titlebarAppearsTransparent = true + aboutWindow?.isReleasedWhenClosed = false + aboutWindow?.center() + if #available(macOS 13, *) { + aboutWindow?.contentView = NSHostingView(rootView: SettingsAboutTab()) + } + aboutWindow?.makeKeyAndOrderFront(nil) + } + } } // MARK: - FakeViewToOpenSettingsInSonoma diff --git a/Easydict/App/Localizable.xcstrings b/Easydict/App/Localizable.xcstrings index 7d40004e4..c2a6f4dc9 100644 --- a/Easydict/App/Localizable.xcstrings +++ b/Easydict/App/Localizable.xcstrings @@ -829,6 +829,22 @@ } } }, + "contributor_link" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Contributors" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "贡献者" + } + } + } + }, "copy_text" : { "localizations" : { "en" : { @@ -877,6 +893,22 @@ } } }, + "current_version %@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Version %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "版本 %@" + } + } + } + }, "custom_openai" : { "comment" : "The name of Custom OpenAI Translate", "localizations" : { @@ -1436,6 +1468,22 @@ } } }, + "github_link" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "GitHub" + } + } + } + }, "GitHub:" : { "localizations" : { "zh-Hans" : { @@ -2009,6 +2057,22 @@ } } }, + "menubar.about" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "About Easydict" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关于 Easydict" + } + } + } + }, "mini_window" : { "localizations" : { "en" : { @@ -4377,16 +4441,6 @@ } } }, - "Tisfeng" : { - "localizations" : { - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "" - } - } - } - }, "toggle_languages" : { "localizations" : { "en" : { diff --git a/Easydict/Swift/View/SettingView/SettingView.swift b/Easydict/Swift/View/SettingView/SettingView.swift index c5033557c..d5136da44 100644 --- a/Easydict/Swift/View/SettingView/SettingView.swift +++ b/Easydict/Swift/View/SettingView/SettingView.swift @@ -51,7 +51,7 @@ struct SettingView: View { .tabItem { Label("privacy", systemImage: "hand.raised.square") } .tag(SettingTab.privacy) - AboutTab() + SettingsAboutTab() .tabItem { Label("about", systemImage: "info.bubble") } .tag(SettingTab.about) } @@ -82,7 +82,7 @@ struct SettingView: View { case .privacy: 320 case .about: - 450 + 300 default: maxWidth * 0.82 } diff --git a/Easydict/Swift/View/SettingView/Tabs/TabView/AboutTab.swift b/Easydict/Swift/View/SettingView/Tabs/TabView/AboutTab.swift index f761cf664..f012ccc7f 100644 --- a/Easydict/Swift/View/SettingView/Tabs/TabView/AboutTab.swift +++ b/Easydict/Swift/View/SettingView/Tabs/TabView/AboutTab.swift @@ -6,38 +6,71 @@ // Copyright © 2023 izual. All rights reserved. // -import Defaults import SwiftUI +// MARK: - SettingsAboutTab + +// Use ScrollView to enable resize animation for Settings +@available(macOS 13, *) +struct SettingsAboutTab: View { + var body: some View { + ScrollView { + AboutTab() + } + } +} + +// MARK: - AboutTab + @available(macOS 13, *) struct AboutTab: View { // MARK: Internal var body: some View { - ScrollView { - VStack(spacing: 15) { - Image(.logo) - .resizable() - .frame(width: 110, height: 110) - Text(appName) - .font(.system(size: 26, weight: .semibold)) - Text("current_version") + Text(verbatim: " \(version)") - .font(.system(size: 14)) - - HStack { - Text("author") - Link("Tisfeng", destination: URL(string: EZGithubRepoEasydictURL)!.deletingLastPathComponent()) + HStack(alignment: .center, spacing: 30) { + Image(.logo) + .resizable() + .frame(width: 100, height: 100) + .padding() + .shadow(color: .gray, radius: 1, x: 0, y: 0.8) + + VStack(alignment: .leading) { + VStack(alignment: .leading) { + Text(appName) + .font(.system(size: 35, weight: .medium)) + .padding(.top, 25) + .padding(.bottom, 3) + + Text("current_version \(version)") + .font(.system(size: 13)) + .foregroundColor(.gray) + + Text(copyrightInfo) + .font(.system(size: 11)) + .foregroundColor(.gray) + .padding(.top, 25) + .padding(.bottom, 20) } - HStack { - Text("GitHub:") - Link("Easydict", destination: URL(string: EZGithubRepoEasydictURL)!) + + HStack(spacing: 15) { + Button { + NSWorkspace.shared.open(URL(string: "https://github.com/tisfeng/Easydict")!) + } label: { + Label("github_link", systemImage: "star.fill") + .frame(width: 120, height: 20) + } + + Button { + NSWorkspace.shared + .open(URL(string: "https://github.com/tisfeng/Easydict/graphs/contributors")!) + } label: { + Label("contributor_link", systemImage: "person.3.sequence.fill") + .frame(width: 120, height: 20) + } } } - .padding(.horizontal, 50) - .padding(.vertical, 30) - .frame(maxWidth: .infinity) } - .scrollIndicators(.hidden) + .frame(maxWidth: .infinity) } // MARK: Private @@ -49,6 +82,10 @@ struct AboutTab: View { private var version: String { Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "" } + + private var copyrightInfo: String { + Bundle.main.infoDictionary?["NSHumanReadableCopyright"] as? String ?? "" + } } @available(macOS 13, *) From 707de748041152b6e2d3ee8b37ad9caead9da282 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Fri, 3 May 2024 11:19:50 +0800 Subject: [PATCH 8/9] perf: add show floating window log --- .../Window/BaseQueryWindow/EZBaseQueryViewController.m | 2 +- .../ViewController/Window/WindowManager/EZWindowManager.m | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m b/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m index a1f7fdf25..7620423f1 100644 --- a/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m +++ b/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m @@ -434,7 +434,7 @@ - (void)postUpdateServiceNotification { } - (void)startOCRImage:(NSImage *)image actionType:(EZActionType)actionType { - MMLogInfo(@"start OCR Image"); + MMLogInfo(@"start OCR Image: %@, actionType: %@", @(image.size), actionType); self.queryModel.OCRImage = image; self.queryModel.actionType = actionType; diff --git a/Easydict/objc/ViewController/Window/WindowManager/EZWindowManager.m b/Easydict/objc/ViewController/Window/WindowManager/EZWindowManager.m index f1bae5f29..b45f17102 100644 --- a/Easydict/objc/ViewController/Window/WindowManager/EZWindowManager.m +++ b/Easydict/objc/ViewController/Window/WindowManager/EZWindowManager.m @@ -311,6 +311,8 @@ - (void)showFloatingWindowType:(EZWindowType)windowType self.selectedText = queryText; self.actionType = actionType; + MMLogInfo(@"show floating windowType: %ld, queryText: %@, autoQuery: %d, actionType: %@, atPoint: %@", windowType, queryText, autoQuery, actionType, @(point)); + // Update isTextEditable value when using invoke query, such as open URL Scheme by PopClip. if (actionType == EZActionTypeInvokeQuery) { [self.eventMonitor updateSelectedTextEditableState]; @@ -762,8 +764,9 @@ - (void)snipTranslate { // Reset window height first, avoid being affected by previous window height. [window.queryViewController resetTableView:^{ + self.actionType = EZActionTypeOCRQuery; [self showFloatingWindowType:windowType queryText:nil]; - [window.queryViewController startOCRImage:image actionType:EZActionTypeOCRQuery]; + [window.queryViewController startOCRImage:image actionType:self.actionType]; }]; }]; }); From 5800e14b48fe1c3addf5e435a6ea669cb6c50f1e Mon Sep 17 00:00:00 2001 From: tisfeng Date: Sat, 4 May 2024 21:16:57 +0800 Subject: [PATCH 9/9] docs: update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ef54e342..2e62f526a 100644 --- a/README.md +++ b/README.md @@ -584,7 +584,7 @@ Easydict 可以根据查询文本的内容,自动启用相应的查询服务 具体来说,在智能查询模式下,当查询单词时,则只会调用支持【单词查询】的服务;当翻译文本时,则只会调用支持【文本翻译】的服务。 -对于单词,支持查询单词的服务效果明显比翻译更好,而翻译文本时,启用单词查询服务 +对于单词查询,支持查询单词服务的效果明显比简单翻译更好,例如苹果词典和有道词典;而进行长文本翻译时,启用单词查询服务没有意义,例如使用苹果词典来翻译。 默认情况下,所有的翻译服务都支持单词查询(单词也属于文本的一种),用户可以手动调整,如设置 Google 智能模式只翻译文本,只需要使用下面命令修改为 `translation | sentence` 即可。