From 2ec3214491ba27802909a93d1f04de9151c86e2d Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Thu, 4 Jan 2024 13:25:34 +0800 Subject: [PATCH] Repo // Introducing associated phrases in non-SCPC mode. - Our implementation doesn't use compositor to handle associated phrases, considering that there are too many polyphonic ideographs in Mandarin Chinese. - This implementation is NOT meant to be as competitive as the similar feature in McBopomofo PR416 (which uses compositor but has issues with polyphonic ideographs). - This also brings related updates for CheatSheet. - The translated terms of "Associated Phrases" are changed in this commit. --- Packages/vChewing_LangModelAssembly/README.md | 2 +- .../LangModelAssembly/LMInstantiator.swift | 2 +- .../Sources/MainAssembly/IMEState.swift | 2 +- .../MainAssembly/InputHandler_Core.swift | 38 +++++++++++++--- .../InputHandler_HandleCandidate.swift | 18 +++++++- .../InputHandler_HandleComposition.swift | 20 ++++++--- .../InputHandler_HandleStates.swift | 44 +++++++++++++------ .../InputHandler_TriageInput.swift | 11 ++++- .../MainAssembly/SessionCtl_Delegates.swift | 2 +- .../SettingsUI/VwrSettingsPaneKeyboard.swift | 2 +- .../Sources/Shared/Shared.swift | 2 +- .../Sources/Shared/UserDef.swift | 2 +- README-CHS.md | 2 +- README.md | 2 +- Source/Modules/SessionCtl_Menu.swift | 4 +- .../Resources/Base.lproj/Localizable.strings | 2 +- Source/Resources/en.lproj/Localizable.strings | 2 +- Source/Resources/en.lproj/shortcuts.html | 26 ++++++++++- Source/Resources/ja.lproj/Localizable.strings | 4 +- Source/Resources/ja.lproj/shortcuts.html | 28 +++++++++++- .../zh-Hans.lproj/Localizable.strings | 14 +++--- Source/Resources/zh-Hans.lproj/shortcuts.html | 34 +++++++++++--- .../zh-Hant.lproj/Localizable.strings | 14 +++--- Source/Resources/zh-Hant.lproj/shortcuts.html | 34 +++++++++++--- .../WindowNIBs/en.lproj/frmPrefWindow.strings | 2 +- .../WindowNIBs/ja.lproj/frmPrefWindow.strings | 2 +- .../zh-Hans.lproj/frmPrefWindow.strings | 4 +- .../zh-Hant.lproj/frmPrefWindow.strings | 4 +- 28 files changed, 247 insertions(+), 76 deletions(-) diff --git a/Packages/vChewing_LangModelAssembly/README.md b/Packages/vChewing_LangModelAssembly/README.md index c5fb705a..e679db0f 100644 --- a/Packages/vChewing_LangModelAssembly/README.md +++ b/Packages/vChewing_LangModelAssembly/README.md @@ -9,7 +9,7 @@ 以下是子模組: - lmCassette:專門用來處理 CIN 磁帶檔案的模組,命名為「遠野」引擎。 -- LMAssociates:聯想詞模組。 +- LMAssociates:關聯詞語模組。 - LMCoreEX:可以直接讀取 TXT 格式的帶有權重資料的語彙檔案的模組。 - LMCoreJSON:專門用來讀取原廠 JSON 檔案的模組。 - lmPlainBopomofo:專門用來讀取使用者自訂ㄅ半候選字順序覆蓋定義檔案(plist)的模組。 diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift index ae353cd9..a41e7915 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift @@ -73,7 +73,7 @@ public extension vChewingLM { /// 比較適合那種每筆記錄都有不同的權重數值的語言模組,雖然也可以強制施加權重數值就是了。 /// LMCoreEX 的辭典陣列不承載 Unigram 本體、而是承載索引範圍,這樣可以節約記憶體。 /// 一個 LMCoreEX 就可以滿足威注音幾乎所有語言模組副本的需求,當然也有這兩個例外: - /// LMReplacements 與 LMAssociates 分別擔當語彙置換表資料與使用者聯想詞的資料承載工作。 + /// LMReplacements 與 LMAssociates 分別擔當語彙置換表資料與使用者關聯詞語的資料承載工作。 /// 但是,LMCoreEX 對 2010-2013 年等舊 mac 機種而言,讀取速度異常緩慢。 /// 於是 LMCoreJSON 就出場了,專門用來讀取原廠的 JSON 格式的辭典。 diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/IMEState.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/IMEState.swift index 74ce5573..4a75e226 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/IMEState.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/IMEState.swift @@ -33,7 +33,7 @@ import Shared /// 威注音輸入法在「組字區與組音區/組筆區同時為空」、 /// 且客體軟體正在準備接收使用者文字輸入行為的時候,會處於空狀態。 /// 有時,威注音會利用呼叫空狀態的方式,讓組字區內已經顯示出來的內容遞交出去。 -/// - **聯想詞狀態 .ofAssociates**: 逐字選字模式內的聯想詞輸入狀態。 +/// - **關聯詞語狀態 .ofAssociates**: 逐字選字模式內的關聯詞語輸入狀態。 /// - **中絕狀態 .ofAbortion**: 與 .ofEmpty() 類似,但會扔掉上一個狀態的內容、 /// 不將這些內容遞交給客體應用。該狀態在處理完畢之後會被立刻切換至 .ofEmpty()。 /// - **遞交狀態 .ofCommitting**: 該狀態會承載要遞交出去的內容,讓輸入法控制器處理時代為遞交。 diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_Core.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_Core.swift index 65966263..35c83c1c 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_Core.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_Core.swift @@ -198,18 +198,44 @@ public class InputHandler: InputHandlerProtocol { } } - /// 用以組建聯想詞陣列的函式。 - /// - Parameter key: 給定的聯想詞的開頭字。 - /// - Returns: 抓取到的聯想詞陣列。 + /// 用以組建關聯詞語陣列的函式,生成的內容不包含重複的結果。 + /// - Parameter pairs: 給定的詞音配對陣列。 + /// - Returns: 抓取到的關聯詞語陣列。 /// 不會是 nil,但那些負責接收結果的函式會對空白陣列結果做出正確的處理。 - func generateArrayOfAssociates(withPair pair: Megrez.KeyValuePaired) -> [(keyArray: [String], value: String)] { + func generateArrayOfAssociates(withPairs pairs: [Megrez.KeyValuePaired]) -> [(keyArray: [String], value: String)] { var arrResult: [(keyArray: [String], value: String)] = [] - if currentLM.hasAssociatedPhrasesFor(pair: pair) { - arrResult = currentLM.associatedPhrasesFor(pair: pair).map { ([""], $0) } + pairs.forEach { pair in + if currentLM.hasAssociatedPhrasesFor(pair: pair) { + let arrFetched: [String] = currentLM.associatedPhrasesFor(pair: pair) + arrFetched.forEach { thingToAdd in + // keyArray 對關聯詞語候選字詞而言(現階段)毫無意義。這裡只判斷 value。 + if !arrResult.map(\.value).contains(thingToAdd) { + arrResult.append((keyArray: [""], value: thingToAdd)) + } + } + } } return arrResult } + /// 用以組建關聯詞語陣列的函式,生成的內容不包含重複的結果。 + /// - Parameter pair: 給定的詞音配對。 + /// - Returns: 抓取到的關聯詞語陣列。 + /// 不會是 nil,但那些負責接收結果的函式會對空白陣列結果做出正確的處理。 + func generateArrayOfAssociates(withPair pair: Megrez.KeyValuePaired) -> [(keyArray: [String], value: String)] { + var pairs = [Megrez.KeyValuePaired]() + var keyArray = pair.keyArray + var value = pair.value + while !keyArray.isEmpty { + // 關聯詞語處理用不到組字引擎,故不需要 score。 + if keyArray.count == value.count { pairs.append(.init(keyArray: keyArray, value: value)) } + pairs.append(.init(key: "", value: value)) // 保底。 + keyArray = Array(keyArray.dropFirst()) + value = value.dropFirst().description + } + return generateArrayOfAssociates(withPairs: pairs) + } + /// 用來計算離當前游標最近的一個節點邊界的距離的函式。 /// - Parameter direction: 文字輸入方向意義上的方向。 /// - Returns: 邊界距離。 diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleCandidate.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleCandidate.swift index 686e2d49..f63af872 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleCandidate.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleCandidate.swift @@ -11,6 +11,7 @@ import CandidateWindow import CocoaExtension import InputMethodKit +import Megrez import Shared // MARK: - § 對選字狀態進行調度 (Handle Candidate State). @@ -96,7 +97,22 @@ extension InputHandler { delegate.switchState(IMEState.ofAbortion()) return true } + let highlightedCandidate = state.candidates[ctlCandidate.highlightedIndex] // 關聯詞語功能專用。 + var handleAssociates = !prefs.useSCPCTypingMode && prefs.associatedPhrasesEnabled // 關聯詞語功能專用。 + handleAssociates = handleAssociates && compositor.cursor == compositor.length // 關聯詞語功能專用。 confirmHighlightedCandidate() + // 關聯詞語。 + associatedPhrases: if handleAssociates { + guard handleAssociates else { break associatedPhrases } + guard input.keyModifierFlags == .shift else { break associatedPhrases } + let pair = Megrez.KeyValuePaired( + keyArray: highlightedCandidate.keyArray, value: highlightedCandidate.value + ) + let associatedCandidates = generateArrayOfAssociates(withPair: pair) + guard !associatedCandidates.isEmpty else { break associatedPhrases } + delegate.switchState(IMEState.ofCommitting(textToCommit: state.displayedText)) + delegate.switchState(IMEState.ofAssociates(candidates: associatedCandidates)) + } return true case .kTab: let updated: Bool = @@ -158,7 +174,7 @@ extension InputHandler { } } - // MARK: 聯想詞處理 (Associated Phrases) 以及標準選字處理 + // MARK: 關聯詞語處理 (Associated Phrases) 以及標準選字處理 if state.type == .ofAssociates, !input.isShiftHold { return false } diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleComposition.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleComposition.swift index 3a8c53c8..1d94d71d 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleComposition.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleComposition.swift @@ -186,8 +186,12 @@ extension InputHandler { delegate.switchState(IMEState.ofCommitting(textToCommit: text)) if prefs.associatedPhrasesEnabled { - let associatedPhrases = generateStateOfAssociates(withPair: .init(keyArray: reading, value: text)) - delegate.switchState(associatedPhrases.candidates.isEmpty ? IMEState.ofEmpty() : associatedPhrases) + let associatedCandidates = generateArrayOfAssociates(withPairs: [.init(keyArray: reading, value: text)]) + delegate.switchState( + associatedCandidates.isEmpty + ? IMEState.ofEmpty() + : IMEState.ofAssociates(candidates: associatedCandidates) + ) } default: break } @@ -348,20 +352,24 @@ extension InputHandler { inputting.textToCommit = textToCommit delegate.switchState(inputting) - /// 逐字選字模式的處理,與注音輸入的部分完全雷同。 + /// 逐字選字模式的處理。 if prefs.useSCPCTypingMode { let candidateState: IMEStateProtocol = generateStateOfCandidates() switch candidateState.candidates.count { case 2...: delegate.switchState(candidateState) case 1: let firstCandidate = candidateState.candidates.first! // 一定會有,所以強制拆包也無妨。 - let reading: String = firstCandidate.0.joined(separator: compositor.separator) + let reading: [String] = firstCandidate.keyArray let text: String = firstCandidate.value delegate.switchState(IMEState.ofCommitting(textToCommit: text)) if prefs.associatedPhrasesEnabled { - let associatedPhrases = generateStateOfAssociates(withPair: .init(keyArray: [reading], value: text)) - delegate.switchState(associatedPhrases.candidates.isEmpty ? IMEState.ofEmpty() : associatedPhrases) + let associatedCandidates = generateArrayOfAssociates(withPairs: [.init(keyArray: reading, value: text)]) + delegate.switchState( + associatedCandidates.isEmpty + ? IMEState.ofEmpty() + : IMEState.ofAssociates(candidates: associatedCandidates) + ) } default: break } diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift index d1d3661c..7703d85a 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_HandleStates.swift @@ -149,23 +149,24 @@ extension InputHandler { return result } - // MARK: - 用以接收聯想詞陣列且生成狀態 + // MARK: - 用以接收關聯詞語陣列且生成狀態 - /// 拿著給定的聯想詞陣列資料內容,切換至聯想詞狀態。 + /// 拿著給定的關聯詞語陣列資料內容,切換至關聯詞語狀態。 /// /// 這次重寫時,針對「generateStateOfAssociates」這個(用以生成帶有 - /// 聯想詞候選清單的結果的狀態回呼的)函式進行了小幅度的重構處理,使其始終 + /// 關聯詞語候選清單的結果的狀態回呼的)函式進行了小幅度的重構處理,使其始終 /// 可以從 Core 部分的「generateArrayOfAssociates」函式獲取到一個內容類型 - /// 為「String」的標準 Swift 陣列。這樣一來,該聯想詞狀態回呼函式將始終能 + /// 為「String」的標準 Swift 陣列。這樣一來,該關聯詞語狀態回呼函式將始終能 /// 夠傳回正確的結果形態、永遠也無法傳回 nil。於是,所有在用到該函式時以 /// 回傳結果類型判斷作為合法性判斷依據的函式,全都將依據改為檢查傳回的陣列 /// 是否為空:如果陣列為空的話,直接回呼一個空狀態。 + /// + /// 該函式僅用於 SessionCtl,因為 InputHandler 內部可以直接存取 generateArrayOfAssociates(). /// - Parameters: - /// - key: 給定的索引鍵(也就是給定的聯想詞的開頭字)。 - /// - Returns: 回呼一個新的聯想詞狀態,來就給定的聯想詞陣列資料內容顯示選字窗。 + /// - key: 給定的索引鍵(也就是給定的關聯詞語的開頭字)。 + /// - Returns: 回呼一個新的關聯詞語狀態,來就給定的關聯詞語陣列資料內容顯示選字窗。 public func generateStateOfAssociates(withPair pair: Megrez.KeyValuePaired) -> IMEStateProtocol { - IMEState.ofAssociates( - candidates: generateArrayOfAssociates(withPair: pair)) + IMEState.ofAssociates(candidates: generateArrayOfAssociates(withPair: pair)) } // MARK: - 用以處理就地新增自訂語彙時的行為 @@ -342,9 +343,16 @@ extension InputHandler { // MARK: - Enter 鍵的處理,包括對其他修飾鍵的應對。 /// Enter 鍵的處理。 - /// - Parameter input: 輸入按鍵訊號。 + /// - Parameters: + /// - input: 輸入按鍵訊號。 + /// - readingOnly: 是否僅遞交讀音。 + /// - associatesData: 給定的關聯詞語資料陣列。 + /// 該部分僅對 .ofInputting() 狀態有效、且不能是漢音符號模式與內碼輸入模式。 /// - Returns: 將按鍵行為「是否有處理掉」藉由 SessionCtl 回報給 IMK。 - @discardableResult func handleEnter(input: InputSignalProtocol, readingOnly: Bool = false) -> Bool { + @discardableResult func handleEnter( + input: InputSignalProtocol, readingOnly: Bool = false, + associatesData: @escaping () -> ([(keyArray: [String], value: String)]) = { [] } + ) -> Bool { guard let delegate = delegate else { return false } let state = delegate.state @@ -360,13 +368,21 @@ extension InputHandler { } else if readingOnly { displayedText = commissionByCtrlCommandEnter() } else if input.isCommandHold, input.isControlHold { - displayedText = - input.isOptionHold - ? commissionByCtrlOptionCommandEnter(isShiftPressed: input.isShiftHold) - : commissionByCtrlCommandEnter(isShiftPressed: input.isShiftHold) + displayedText = input.isOptionHold + ? commissionByCtrlOptionCommandEnter(isShiftPressed: input.isShiftHold) + : commissionByCtrlCommandEnter(isShiftPressed: input.isShiftHold) } delegate.switchState(IMEState.ofCommitting(textToCommit: displayedText)) + + associatedPhrases: if !prefs.useSCPCTypingMode, prefs.associatedPhrasesEnabled { + guard input.keyModifierFlags == .shift else { break associatedPhrases } + guard isComposerOrCalligrapherEmpty else { break associatedPhrases } + let associatedCandidates = associatesData() + guard !associatedCandidates.isEmpty else { break associatedPhrases } + delegate.switchState(IMEState.ofAssociates(candidates: associatedCandidates)) + } + return true } diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_TriageInput.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_TriageInput.swift index 911c9292..e81b8942 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_TriageInput.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/InputHandler_TriageInput.swift @@ -13,6 +13,7 @@ import CocoaExtension import IMKUtils import InputMethodKit import LangModelAssembly +import Megrez import Shared // MARK: - § 根據狀態調度按鍵輸入 (Handle Input with States) * Triage @@ -45,7 +46,15 @@ public extension InputHandler { case .kEnd: return handleEnd() case .kBackSpace: return handleBackSpace(input: input) case .kWindowsDelete: return handleDelete(input: input) - case .kCarriageReturn, .kLineFeed: return handleEnter(input: input) + case .kCarriageReturn, .kLineFeed: + let frontNode = compositor.walkedNodes.last + return handleEnter(input: input) { + guard !self.isHaninKeyboardSymbolMode, !self.isCodePointInputMode else { return [] } + guard let frontNode = frontNode else { return [] } + let pair = Megrez.KeyValuePaired(keyArray: frontNode.keyArray, value: frontNode.value) + let associates = self.generateArrayOfAssociates(withPair: pair) + return associates + } case .kSymbolMenuPhysicalKeyJIS, .kSymbolMenuPhysicalKeyIntl: let isJIS = keyCodeType == .kSymbolMenuPhysicalKeyJIS switch input.keyModifierFlags { diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_Delegates.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_Delegates.swift index 09ccf68d..ca9fa1df 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_Delegates.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_Delegates.swift @@ -229,7 +229,7 @@ extension SessionCtl: CtlCandidateDelegate { defer { switchState(result) } // 這是最終輸出結果。 switchState(IMEState.ofCommitting(textToCommit: selectedValue.value)) guard PrefMgr.shared.associatedPhrasesEnabled else { return } - // 此時是聯想詞選字模式,所以「selectedValue.value」必須只保留最後一個字。 + // 此時是關聯詞語選字模式,所以「selectedValue.value」必須只保留最後一個字。 // 不然的話,一旦你選中了由多個字組成的聯想候選詞,則連續聯想會被打斷。 guard let valueKept = selectedValue.value.last?.description else { return } let associates = inputHandler.generateStateOfAssociates( diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneKeyboard.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneKeyboard.swift index dfaf43fd..e2de462a 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneKeyboard.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SettingsUI/VwrSettingsPaneKeyboard.swift @@ -176,7 +176,7 @@ private struct VwrSettingsPaneKeyboard_KeyboardShortcuts: View { isOn: $usingHotKeySCPC ) Toggle( - LocalizedStringKey("Per-Char Associated Phrases"), + LocalizedStringKey("Associated Phrases"), isOn: $usingHotKeyAssociates ) Toggle( diff --git a/Packages/vChewing_Shared/Sources/Shared/Shared.swift b/Packages/vChewing_Shared/Sources/Shared/Shared.swift index 7ad16dc4..9297ef11 100644 --- a/Packages/vChewing_Shared/Sources/Shared/Shared.swift +++ b/Packages/vChewing_Shared/Sources/Shared/Shared.swift @@ -41,7 +41,7 @@ public enum StateType: String { /// 該狀態在處理完畢之後會被立刻切換至 .ofEmpty()。如果直接呼叫處理該狀態的話, /// 在呼叫處理之前的組字區的內容會消失,除非你事先呼叫處理過 .ofEmpty()。 case ofCommitting = "Committing" - /// **聯想詞狀態 .ofAssociates**: 逐字選字模式內的聯想詞輸入狀態。 + /// **關聯詞語狀態 .ofAssociates**: 逐字選字模式內的關聯詞語輸入狀態。 case ofAssociates = "Associates" /// **輸入狀態 .ofInputting**: 使用者輸入了內容。此時會出現組字區(Compositor)。 case ofInputting = "Inputting" diff --git a/Packages/vChewing_Shared/Sources/Shared/UserDef.swift b/Packages/vChewing_Shared/Sources/Shared/UserDef.swift index e73744ad..70b6c20e 100644 --- a/Packages/vChewing_Shared/Sources/Shared/UserDef.swift +++ b/Packages/vChewing_Shared/Sources/Shared/UserDef.swift @@ -492,7 +492,7 @@ public extension UserDef { description: "This will batch-replace specified candidates." ) case .kUsingHotKeySCPC: return .init(userDef: self, shortTitle: "Per-Char Select Mode") - case .kUsingHotKeyAssociates: return .init(userDef: self, shortTitle: "Per-Char Associated Phrases") + case .kUsingHotKeyAssociates: return .init(userDef: self, shortTitle: "Associated Phrases") case .kUsingHotKeyCNS: return .init(userDef: self, shortTitle: "CNS11643 Mode") case .kUsingHotKeyKangXi: return .init(userDef: self, shortTitle: "Force KangXi Writing") case .kUsingHotKeyJIS: return .init(userDef: self, shortTitle: "Reverse Lookup (Phonabets)") diff --git a/README-CHS.md b/README-CHS.md index 63f2c714..53c9cb64 100644 --- a/README-CHS.md +++ b/README-CHS.md @@ -29,7 +29,7 @@ >- 可以将自己打的繁体中文自动转成日本 JIS 新字体来输出(包括基础的字词转换)、也可以转成康熙繁体来输出。 >- 简繁体中文语料库彼此分离,彻底杜绝任何繁简转换过程可能造成的失误。 >- 支持近年的全字库汉字输入。 ->- 可以自动整理使用者语汇档案格式、自订联想词。 +>- 可以自动整理使用者语汇档案格式、自订关联词语。 >- …… 威注音分支专案及威注音词库由孙志贵(Shiki Suen)维护,其内容属于可在 Gitee 公开展示的合法内容。小麦注音官方原始仓库内的词库的内容均与孙志贵无关。 diff --git a/README.md b/README.md index 6ec5b7f1..528e0c8d 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ >- 可以將自己打的繁體中文自動轉成日本 JIS 新字體來輸出(包括基礎的字詞轉換)、也可以轉成康熙繁體來輸出。 >- 簡繁體中文語料庫彼此分離,徹底杜絕任何繁簡轉換過程可能造成的失誤。 >- 支援近年的全字庫漢字輸入。 ->- 可以自動整理使用者語彙檔案格式、自訂聯想詞。 +>- 可以自動整理使用者語彙檔案格式、自訂關聯詞語。 >- …… 威注音分支專案及威注音詞庫由孫志貴(Shiki Suen)維護,其內容屬於可在 Gitee 公開展示的合法內容。小麥注音官方原始倉庫內的詞庫的內容均與孫志貴無關。 diff --git a/Source/Modules/SessionCtl_Menu.swift b/Source/Modules/SessionCtl_Menu.swift index e4e69cf8..4da7fed2 100644 --- a/Source/Modules/SessionCtl_Menu.swift +++ b/Source/Modules/SessionCtl_Menu.swift @@ -49,7 +49,7 @@ extension SessionCtl { useSCPCTypingModeItem.state = PrefMgr.shared.useSCPCTypingMode.state let userAssociatedPhrasesItem = menu.addItem( - withTitle: "Per-Char Associated Phrases".localized, + withTitle: "Associated Phrases".localized, action: #selector(toggleAssociatedPhrasesEnabled(_:)), keyEquivalent: PrefMgr.shared.usingHotKeyAssociates ? "O" : "" ) @@ -350,7 +350,7 @@ public extension SessionCtl { @objc func toggleAssociatedPhrasesEnabled(_: Any? = nil) { resetInputHandler(forceComposerCleanup: true) Notifier.notify( - message: "Per-Char Associated Phrases".localized + "\n" + message: "Associated Phrases".localized + "\n" + (PrefMgr.shared.associatedPhrasesEnabled.toggled() ? "NotificationSwitchON".localized : "NotificationSwitchOFF".localized) diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index a4e46f12..8b68cc04 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -151,7 +151,7 @@ "Inline comments are not supported in associated phrases." = "Inline comments are not supported in associated phrases."; "CNS11643 Mode" = "CNS11643 Mode"; "JIS Shinjitai Output" = "JIS Shinjitai Output"; -"Per-Char Associated Phrases" = "Per-Char Associated Phrases"; +"Associated Phrases" = "Associated Phrases"; "Open User Dictionary Folder" = "Open User Dictionary Folder"; "Edit Associated Phrases…" = "Edit Associated Phrases…"; "Reboot vChewing…" = "Reboot vChewing…"; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index a4e46f12..8b68cc04 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -151,7 +151,7 @@ "Inline comments are not supported in associated phrases." = "Inline comments are not supported in associated phrases."; "CNS11643 Mode" = "CNS11643 Mode"; "JIS Shinjitai Output" = "JIS Shinjitai Output"; -"Per-Char Associated Phrases" = "Per-Char Associated Phrases"; +"Associated Phrases" = "Associated Phrases"; "Open User Dictionary Folder" = "Open User Dictionary Folder"; "Edit Associated Phrases…" = "Edit Associated Phrases…"; "Reboot vChewing…" = "Reboot vChewing…"; diff --git a/Source/Resources/en.lproj/shortcuts.html b/Source/Resources/en.lproj/shortcuts.html index af560785..9bcbfc6e 100644 --- a/Source/Resources/en.lproj/shortcuts.html +++ b/Source/Resources/en.lproj/shortcuts.html @@ -17,7 +17,7 @@

Keyboard Shortcut CheatSheet(macOS)

-
This article describes keyboard shortcuts used as of vChewing 3.5.4 release & vChewing-Aqua 0.5.26 release.
+
This article describes keyboard shortcuts used as of vChewing 3.7.2 release.
Please use mouse wheel to scroll this page.
This article uses certain macOS keyboard symbols to simplify the description. Note:
    @@ -311,6 +311,17 @@
    Requiring that ICB is not empty and the IME is not in marking state.
    + + +
    ⇧⏎
    + + +
    ‧ Commit everything first, then attempt to call associated phrases using the front node data.
    + + +
    This won't work with SPCP mode which calls associated phrases in a different way.
    + +
    ⌥⇧⏎
    @@ -721,6 +732,19 @@
    Can be disabled (in vChewing preferences) for associated phrase candidates.
    + + +
    ⇧⏎
    + + +
    ‧ Attempt to call available associated phrases using the highlighted candidate.
    +
    ‧ The current ICB with the confirmed highlighted candidate will be committed first.
    + + +
    ‧ Associates require that the cursor must be situated in the most-front.
    +
    ‧ This won't work with SPCP mode which calls associated phrases in a different way.
    + +
    ⌃⌘]
    diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index e10e90d0..c34a4011 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -53,7 +53,7 @@ "thePhrases" = "ユーザー辞書"; "theFilter" = "排除リスト"; "theReplacements" = "言葉置換"; -"theAssociates" = "連想語彙"; +"theAssociates" = "関連語彙"; "theSymbols" = "絵文字&符号"; "Please select…" = "お選びを…"; "Loading…" = "読み込む中…"; @@ -151,7 +151,7 @@ "Inline comments are not supported in associated phrases." = "インラインメモは連想語彙辞書で使えません。"; "CNS11643 Mode" = "全字庫モード"; "JIS Shinjitai Output" = "JIS 新字体モード"; -"Per-Char Associated Phrases" = "全候補入力で連想語彙"; +"Associated Phrases" = "関連語彙モード"; "Open User Dictionary Folder" = "ユーザー辞書フォルダを開く"; "Edit Associated Phrases…" = "連想語彙を編集…"; "Reboot vChewing…" = "入力アプリ再起動…"; diff --git a/Source/Resources/ja.lproj/shortcuts.html b/Source/Resources/ja.lproj/shortcuts.html index eb1bfc3d..e06d49cb 100644 --- a/Source/Resources/ja.lproj/shortcuts.html +++ b/Source/Resources/ja.lproj/shortcuts.html @@ -17,7 +17,7 @@

    キーボードショートカット取り扱い説明書(macOS)

    -
    この文章は、威注音入力アプリ v3.5.4 アップデート(とその Aqua 紀念版 v0.5.26)のキーボードショートカットの取り扱う方法を説明します。
    +
    この文章は、威注音入力アプリ v3.7.2 アップデートのキーボードショートカットの取り扱う方法を説明します。
    マウスホイールでこの文章をご覧ください。
    この文章は、簡単に説明できるために、いくつか macOS 専用のキー符号を用います。そして付記もございます:
      @@ -234,7 +234,7 @@
      ⇧⌘ A
      -
      全候補入力で連想語彙
      +
      関連語彙モード
      @@ -311,6 +311,17 @@
      ICB が空っぽでなければ、そして IME がマーキング状態中でなければ、の話。
      + + +
      ⇧⏎
      + + +
      ‧ ICBの内容をすべて送り出してから、最も前方のノードを以て利用できる関連語彙を提示する。
      + + +
      全候補入力モードでの関連語彙の呼び出す方法は別の話です。
      + +
      ⌥⇧⏎
      @@ -719,6 +730,19 @@
      連想語彙をこのキーで確認したくない場合、入力機能設定で無効と設定できる。
      + + +
      ⇧⏎
      + + +
      ‧ ハイライトした文字候補を以て利用できる関連語彙を提示する。
      +
      ‧ 関連語彙は利用可能だと確認した場合、まずICBの内容をすべて送り出してから、関連語彙を提示する。
      + + +
      ‧ カーサルが最前方に置かない限り、関連語彙は出られません。
      +
      ‧ 全候補入力モードでの関連語彙の呼び出す方法は別の話です。
      + +
      ⌃⌘]
      diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index 225fa8ef..474b8d1c 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -53,7 +53,7 @@ "thePhrases" = "自订语汇"; "theFilter" = "滤除清单"; "theReplacements" = "语汇置换"; -"theAssociates" = "联想字词"; +"theAssociates" = "关联词语"; "theSymbols" = "绘文字符号"; "Please select…" = "请选择…"; "Loading…" = "正在载入…"; @@ -148,12 +148,12 @@ "⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ 语汇置换功能已启用,会波及语汇自订。"; "⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ 无法处理:组字区字数与读音数不对应。"; "Per-Char Select Mode" = "模拟逐字选字输入"; -"Inline comments are not supported in associated phrases." = "联想词不支援行内注解。"; +"Inline comments are not supported in associated phrases." = "关联词语不支援行内注解。"; "CNS11643 Mode" = "全字库模式"; "JIS Shinjitai Output" = "JIS 新字体模式"; -"Per-Char Associated Phrases" = "逐字选字联想模式"; +"Associated Phrases" = "关联词语模式"; "Open User Dictionary Folder" = "开启使用者辞典资料夹"; -"Edit Associated Phrases…" = "编辑联想词…"; +"Edit Associated Phrases…" = "编辑关联词语…"; "Reboot vChewing…" = "重新启动输入法…"; "auto" = "与系统设定一致"; "en" = "英文"; @@ -171,7 +171,7 @@ "Optimize Memorized Phrases" = "精简临时记忆语汇资料"; "Clear Memorized Phrases" = "清除临时记忆语汇资料"; "Currency Numeral Output" = "大写汉字数字输出"; -"Hold ⇧ to choose associates." = "摁住⇧以选取联想词。"; +"Hold ⇧ to choose associates." = "摁住⇧以选取关联词语。"; "Dachen Trad." = "大千传统"; "Eten Trad." = "倚天传统"; "User phrase folder path is not customizable in macOS 10.9 - 10.12." = "在 macOS 10.9 - 10.12 系统下无法自订使用者辞典目录。"; @@ -219,7 +219,7 @@ "All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "不启用该选项的话,在组字区内的字根将会以原始键盘按键名称来显示。所有关于字根的定义,均请洽 CIN 磁带档案内的「%keyname」章节。"; "Allow backspace-editing miscomposed readings" = "允许对无效的读音使用 BackSpace 编辑"; "Allow boosting / excluding a candidate of single kanji when marking" = "允许借由标记模式将可以就地升权/排除的候选字词的最短词长设为单个汉字"; -"Allow using Enter key to confirm associated candidate selection" = "允许使用 Enter 确认当前选中的联想词"; +"Allow using Enter key to confirm associated candidate selection" = "允许使用 Enter 确认当前选中的关联词语"; "Alphanumerical Layout:" = "英数键盘布局:"; "Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "亦使用「\\」或「¥」键启用汉音键盘符号模式"; "Always directly commit lowercased letters" = "始终直接递交小写字母"; @@ -327,7 +327,7 @@ "Only enforce conversion in Traditional Chinese mode" = "仅在繁体模式转换至繁体"; "Only load factory language models if needed" = "按需载入简繁体模式的原厂辞典资料"; "Only override the intonation of the previous reading if different" = "仅在键入的声调与游标正后方的字音不同时,尝试覆写"; -"Otherwise, only the candidate keys are allowed to confirm associates." = "不勾选这一项的话,就只能用选字键来选取联想词。"; +"Otherwise, only the candidate keys are allowed to confirm associates." = "不勾选这一项的话,就只能用选字键来选取关联词语。"; "Output Settings:" = "输出设定:"; "Override the previous reading's intonation with candidate-reset" = "尝试对游标正后方的字音覆写声调,且重设其选字状态"; "Path invalid or file access error." = "档案存取失败,或者路径不合规。"; diff --git a/Source/Resources/zh-Hans.lproj/shortcuts.html b/Source/Resources/zh-Hans.lproj/shortcuts.html index 957904c3..184a8360 100644 --- a/Source/Resources/zh-Hans.lproj/shortcuts.html +++ b/Source/Resources/zh-Hans.lproj/shortcuts.html @@ -17,7 +17,7 @@

      键盘热键使用手册(macOS)

      -
      本文对应至少威注音 3.5.4 版(以及其 Aqua 纪念版 0.5.26)。请利用滑鼠滚轮检视该页面。
      +
      本文对应至少威注音 3.7.2 版。请利用滑鼠滚轮检视该页面。
      为了简化下文表述,这里介绍一下本文会用到的 macOS 的键盘符号。注:
      1. BackSpace 与 Delete 采 Windows 称谓。
      2. @@ -233,7 +233,7 @@
        ⌃⇧⌘ A
        -
        逐字选字联想模式(就是ㄅ半的联想词)
        +
        关联词语模式(就是ㄅ半的关联词语)
        @@ -311,6 +311,17 @@
        输入法并非处于标记模式时才会生效。
        + + +
        ⇧⏎
        + + +
        ‧ 将当前组字区内容递交出去之后、以文字输入方向最前端的已递交的节点内容作为索引资料、来试图叫出关联词语选字窗。
        + + +
        对逐字选字模式无效,因为组字选字模式另有安排。
        + +
        ⌥⇧⏎
        @@ -489,7 +500,7 @@
        输入法处于标记模式时才会生效;
        相关记录存于使用者语汇档案当中;
        -
        对使用者联想词无法生效。
        +
        对使用者关联词语无法生效。
        @@ -504,7 +515,7 @@
        输入法处于标记模式时才会生效;
        -
        对使用者联想词无法生效。
        +
        对使用者关联词语无法生效。
        @@ -745,7 +756,20 @@
        确认选字窗内的当前候选字
        -
        联想词选字时,该功能可在偏好设定内启用或停用。
        +
        关联词语选字时,该功能可在偏好设定内启用或停用。
        + + + + +
        ⇧⏎
        + + +
        ‧ 以文字输入方向最前端的已递交的节点内容作为索引资料、来试图叫出关联词语选字窗。
        +
        ‧ 如果能成功叫出关联词语的话,会先递交当前组字区的内容。
        + + +
        ‧ 关联词语仅会在游标处于组字区最前方的时候才可以触发。
        +
        ‧ 对逐字选字模式无效,因为组字选字模式另有安排。
        diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index 55006c68..93ea1c7e 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -53,7 +53,7 @@ "thePhrases" = "自訂語彙"; "theFilter" = "濾除清單"; "theReplacements" = "語彙置換"; -"theAssociates" = "聯想字詞"; +"theAssociates" = "關聯詞語"; "theSymbols" = "繪文字符號"; "Please select…" = "請選擇…"; "Loading…" = "正在載入…"; @@ -148,12 +148,12 @@ "⚠︎ Phrase replacement mode enabled, interfering user phrase entry." = "⚠︎ 語彙置換功能已啟用,會波及語彙自訂。"; "⚠︎ Unhandlable: Chars and Readings in buffer doesn't match." = "⚠︎ 無法處理:組字區字數與讀音數不對應。"; "Per-Char Select Mode" = "模擬逐字選字輸入"; -"Inline comments are not supported in associated phrases." = "聯想詞不支援行內註解。"; +"Inline comments are not supported in associated phrases." = "關聯詞語不支援行內註解。"; "CNS11643 Mode" = "全字庫模式"; "JIS Shinjitai Output" = "JIS 新字體模式"; -"Per-Char Associated Phrases" = "逐字選字聯想模式"; +"Associated Phrases" = "關聯詞語模式"; "Open User Dictionary Folder" = "開啟使用者辭典資料夾"; -"Edit Associated Phrases…" = "編輯聯想詞…"; +"Edit Associated Phrases…" = "編輯關聯詞語…"; "Reboot vChewing…" = "重新啟動輸入法…"; "auto" = "與系統設定一致"; "en" = "英文"; @@ -171,7 +171,7 @@ "Optimize Memorized Phrases" = "精簡臨時記憶語彙資料"; "Clear Memorized Phrases" = "清除臨時記憶語彙資料"; "Currency Numeral Output" = "大寫漢字數字輸出"; -"Hold ⇧ to choose associates." = "摁住⇧以選取聯想詞。"; +"Hold ⇧ to choose associates." = "摁住⇧以選取關聯詞語。"; "Dachen Trad." = "大千傳統"; "Eten Trad." = "倚天傳統"; "User phrase folder path is not customizable in macOS 10.9 - 10.12." = "在 macOS 10.9 - 10.12 系統下無法自訂使用者辭典目錄。"; @@ -219,7 +219,7 @@ "All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "不啟用該選項的話,在組字區內的字根將會以原始鍵盤按鍵名稱來顯示。所有關於字根的定義,均請洽 CIN 磁帶檔案內的「%keyname」章節。"; "Allow backspace-editing miscomposed readings" = "允許對無效的讀音使用 BackSpace 編輯"; "Allow boosting / excluding a candidate of single kanji when marking" = "允許藉由標記模式將可以就地升權/排除的候選字詞的最短詞長設為單個漢字"; -"Allow using Enter key to confirm associated candidate selection" = "允許使用 Enter 確認當前選中的聯想詞"; +"Allow using Enter key to confirm associated candidate selection" = "允許使用 Enter 確認當前選中的關聯詞語"; "Alphanumerical Layout:" = "英數鍵盤佈局:"; "Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "亦使用「\\」或「¥」鍵啟用漢音鍵盤符號模式"; "Always directly commit lowercased letters" = "始終直接遞交小寫字母"; @@ -327,7 +327,7 @@ "Only enforce conversion in Traditional Chinese mode" = "僅在繁體模式轉換至繁體"; "Only load factory language models if needed" = "按需載入簡繁體模式的原廠辭典資料"; "Only override the intonation of the previous reading if different" = "僅在鍵入的聲調與游標正後方的字音不同時,嘗試覆寫"; -"Otherwise, only the candidate keys are allowed to confirm associates." = "不勾選這一項的話,就只能用選字鍵來選取聯想詞。"; +"Otherwise, only the candidate keys are allowed to confirm associates." = "不勾選這一項的話,就只能用選字鍵來選取關聯詞語。"; "Output Settings:" = "輸出設定:"; "Override the previous reading's intonation with candidate-reset" = "嘗試對游標正後方的字音覆寫聲調,且重設其選字狀態"; "Path invalid or file access error." = "檔案存取失敗,或者路徑不合規。"; diff --git a/Source/Resources/zh-Hant.lproj/shortcuts.html b/Source/Resources/zh-Hant.lproj/shortcuts.html index ce57d8e8..eb323b9f 100644 --- a/Source/Resources/zh-Hant.lproj/shortcuts.html +++ b/Source/Resources/zh-Hant.lproj/shortcuts.html @@ -17,7 +17,7 @@

        鍵盤熱鍵使用手冊(macOS)

        -
        本文對應至少威注音 3.5.4 版(以及其 Aqua 紀念版 0.5.26)。請利用滑鼠滾輪檢視該頁面。
        +
        本文對應至少威注音 3.7.2 版。請利用滑鼠滾輪檢視該頁面。
        為了簡化下文表述,這裡介紹一下本文會用到的 macOS 的鍵盤符號。註:
        1. BackSpace 與 Delete 採 Windows 稱謂。
        2. @@ -233,7 +233,7 @@
          ⌃⇧⌘ A
          -
          逐字選字聯想模式(就是ㄅ半的聯想詞)
          +
          關聯詞語模式(就是ㄅ半的關聯詞語)
          @@ -311,6 +311,17 @@
          輸入法並非處於標記模式時才會生效。
          + + +
          ⇧⏎
          + + +
          ‧ 將當前組字區內容遞交出去之後、以文字輸入方向最前端的已遞交的節點內容作為索引資料、來試圖叫出關聯詞語選字窗。
          + + +
          對逐字選字模式無效,因為組字選字模式另有安排。
          + +
          ⌥⇧⏎
          @@ -489,7 +500,7 @@
          輸入法處於標記模式時才會生效;
          相關記錄存於使用者語彙檔案當中;
          -
          對使用者聯想詞無法生效。
          +
          對使用者關聯詞語無法生效。
          @@ -504,7 +515,7 @@
          輸入法處於標記模式時才會生效;
          -
          對使用者聯想詞無法生效。
          +
          對使用者關聯詞語無法生效。
          @@ -745,7 +756,20 @@
          確認選字窗內的當前候選字
          -
          聯想詞選字時,該功能可在偏好設定內啟用或停用。
          +
          關聯詞語選字時,該功能可在偏好設定內啟用或停用。
          + + + + +
          ⇧⏎
          + + +
          ‧ 以文字輸入方向最前端的已遞交的節點內容作為索引資料、來試圖叫出關聯詞語選字窗。
          +
          ‧ 如果能成功叫出關聯詞語的話,會先遞交當前組字區的內容。
          + + +
          ‧ 關聯詞語僅會在游標處於組字區最前方的時候才可以觸發。
          +
          ‧ 對逐字選字模式無效,因為組字選字模式另有安排。
          diff --git a/Source/WindowNIBs/en.lproj/frmPrefWindow.strings b/Source/WindowNIBs/en.lproj/frmPrefWindow.strings index 5f88eb36..1783870f 100644 --- a/Source/WindowNIBs/en.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/en.lproj/frmPrefWindow.strings @@ -146,7 +146,7 @@ "xibKeyboardShortcuts.title" = "Keyboard Shortcuts"; "xibOutputSettings.title" = "Output Settings"; "xibUsingCurrencyNumerals.title" = "Currency Numeral Output"; -"xibUsingHotKeyAssociates.title" = "Per-Char Associated Phrases"; +"xibUsingHotKeyAssociates.title" = "Associated Phrases"; "xibUsingHotKeyCassette.title" = "CIN Cassette Mode"; "xibUsingHotKeyCNS.title" = "CNS11643 Mode"; "xibUsingHotKeyHalfWidthASCII.title" = "Half-Width Punctuation Mode"; diff --git a/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings b/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings index 061185f2..5a9830b6 100644 --- a/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings @@ -146,7 +146,7 @@ "xibKeyboardShortcuts.title" = "ショートカット"; "xibOutputSettings.title" = "出力設定"; "xibUsingCurrencyNumerals.title" = "数字大字変換"; -"xibUsingHotKeyAssociates.title" = "全候補入力で連想語彙"; +"xibUsingHotKeyAssociates.title" = "関連語彙モード"; "xibUsingHotKeyCassette.title" = "CIN カセットモード"; "xibUsingHotKeyCNS.title" = "全字庫モード"; "xibUsingHotKeyHalfWidthASCII.title" = "半角句読モード"; diff --git a/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings b/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings index 0ed947a7..f5b10d4a 100644 --- a/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings @@ -46,7 +46,7 @@ "cBw-gz-TXe.title" = "仅在繁体模式转换至繁体"; "cf2-se-PDO.title" = "辞典&語言模型"; "chkAllowBoostingSingleKanjiAsUserPhrase.title" = "允许借由标记模式将可以就地升权/排除的候选字词的最短词长设为单个汉字"; -"chkAlsoConfirmAssociatedCandidatesByEnter.title" = "允许使用 Enter 确认当前选中的联想词"; +"chkAlsoConfirmAssociatedCandidatesByEnter.title" = "允许使用 Enter 确认当前选中的关联词语"; "chkAutoCorrectReadingCombination.title" = "敲字时自动纠正读音组合"; "chkBypassNonAppleCapsLockHandling.title" = "不使用威注音输入法内建的 Caps Lock 处理"; "chkCheckAbusersOfSecureEventInputAPI.title" = "主动检测正在滥用 SecureEventInput API 的后台进程"; @@ -146,7 +146,7 @@ "xibKeyboardShortcuts.title" = "键盘热键"; "xibOutputSettings.title" = "输出设定"; "xibUsingCurrencyNumerals.title" = "大写汉字数字输出"; -"xibUsingHotKeyAssociates.title" = "逐字选字联想模式"; +"xibUsingHotKeyAssociates.title" = "关联词语模式"; "xibUsingHotKeyCassette.title" = "CIN 磁带模式"; "xibUsingHotKeyCNS.title" = "全字库模式"; "xibUsingHotKeyHalfWidthASCII.title" = "半形标点模式"; diff --git a/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings b/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings index 034cb1a1..18b869a6 100644 --- a/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings @@ -46,7 +46,7 @@ "cBw-gz-TXe.title" = "僅在繁體模式轉換至繁體"; "cf2-se-PDO.title" = "辭典&語言模型"; "chkAllowBoostingSingleKanjiAsUserPhrase.title" = "允許藉由標記模式將可以就地升權/排除的候選字詞的最短詞長設為單個漢字"; -"chkAlsoConfirmAssociatedCandidatesByEnter.title" = "允許使用 Enter 確認當前選中的聯想詞"; +"chkAlsoConfirmAssociatedCandidatesByEnter.title" = "允許使用 Enter 確認當前選中的關聯詞語"; "chkAutoCorrectReadingCombination.title" = "敲字時自動糾正讀音組合"; "chkBypassNonAppleCapsLockHandling.title" = "不使用威注音輸入法內建的 Caps Lock 處理"; "chkCheckAbusersOfSecureEventInputAPI.title" = "主動偵測正在濫用 SecureEventInput API 的後檯執行緒"; @@ -146,7 +146,7 @@ "xibKeyboardShortcuts.title" = "鍵盤熱鍵"; "xibOutputSettings.title" = "輸出設定"; "xibUsingCurrencyNumerals.title" = "大寫漢字數字輸出"; -"xibUsingHotKeyAssociates.title" = "逐字選字聯想模式"; +"xibUsingHotKeyAssociates.title" = "關聯詞語模式"; "xibUsingHotKeyCassette.title" = "CIN 磁帶模式"; "xibUsingHotKeyCNS.title" = "全字庫模式"; "xibUsingHotKeyHalfWidthASCII.title" = "半形標點模式";