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.
This commit is contained in:
ShikiSuen 2024-01-04 13:25:34 +08:00
parent 3e4c564248
commit 2ec3214491
28 changed files with 247 additions and 76 deletions

View File

@ -9,7 +9,7 @@
以下是子模組:
- lmCassette專門用來處理 CIN 磁帶檔案的模組,命名為「遠野」引擎。
- LMAssociates詞模組。
- LMAssociates聯詞模組。
- LMCoreEX可以直接讀取 TXT 格式的帶有權重資料的語彙檔案的模組。
- LMCoreJSON專門用來讀取原廠 JSON 檔案的模組。
- lmPlainBopomofo專門用來讀取使用者自訂ㄅ半候選字順序覆蓋定義檔案plist的模組。

View File

@ -73,7 +73,7 @@ public extension vChewingLM {
///
/// LMCoreEX Unigram
/// LMCoreEX 滿
/// LMReplacements LMAssociates 使
/// LMReplacements LMAssociates 使
/// LMCoreEX 2010-2013 mac
/// LMCoreJSON JSON

View File

@ -33,7 +33,7 @@ import Shared
/// /
/// 使
///
/// - ** .ofAssociates**:
/// - ** .ofAssociates**:
/// - ** .ofAbortion**: .ofEmpty()
/// .ofEmpty()
/// - ** .ofCommitting**:

View File

@ -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:

View File

@ -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 }

View File

@ -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
}

View File

@ -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
}

View File

@ -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 {

View File

@ -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(

View File

@ -176,7 +176,7 @@ private struct VwrSettingsPaneKeyboard_KeyboardShortcuts: View {
isOn: $usingHotKeySCPC
)
Toggle(
LocalizedStringKey("Per-Char Associated Phrases"),
LocalizedStringKey("Associated Phrases"),
isOn: $usingHotKeyAssociates
)
Toggle(

View File

@ -41,7 +41,7 @@ public enum StateType: String {
/// .ofEmpty()
/// .ofEmpty()
case ofCommitting = "Committing"
/// ** .ofAssociates**:
/// ** .ofAssociates**:
case ofAssociates = "Associates"
/// ** .ofInputting**: 使Compositor
case ofInputting = "Inputting"

View File

@ -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)")

View File

@ -29,7 +29,7 @@
>- 可以将自己打的繁体中文自动转成日本 JIS 新字体来输出(包括基础的字词转换)、也可以转成康熙繁体来输出。
>- 简繁体中文语料库彼此分离,彻底杜绝任何繁简转换过程可能造成的失误。
>- 支持近年的全字库汉字输入。
>- 可以自动整理使用者语汇档案格式、自订联词。
>- 可以自动整理使用者语汇档案格式、自订联词
>- ……
威注音分支专案及威注音词库由孙志贵Shiki Suen维护其内容属于可在 Gitee 公开展示的合法内容。小麦注音官方原始仓库内的词库的内容均与孙志贵无关。

View File

@ -29,7 +29,7 @@
>- 可以將自己打的繁體中文自動轉成日本 JIS 新字體來輸出(包括基礎的字詞轉換)、也可以轉成康熙繁體來輸出。
>- 簡繁體中文語料庫彼此分離,徹底杜絕任何繁簡轉換過程可能造成的失誤。
>- 支援近年的全字庫漢字輸入。
>- 可以自動整理使用者語彙檔案格式、自訂聯詞。
>- 可以自動整理使用者語彙檔案格式、自訂聯詞
>- ……
威注音分支專案及威注音詞庫由孫志貴Shiki Suen維護其內容屬於可在 Gitee 公開展示的合法內容。小麥注音官方原始倉庫內的詞庫的內容均與孫志貴無關。

View File

@ -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)

View File

@ -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…";

View File

@ -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…";

View File

@ -17,7 +17,7 @@
</head>
<body>
<h1><strong>Keyboard Shortcut CheatSheetmacOS</strong></h1>
<div>This article describes keyboard shortcuts used as of vChewing 3.5.4 release & vChewing-Aqua 0.5.26 release.</div>
<div>This article describes keyboard shortcuts used as of vChewing 3.7.2 release.</div>
<div>Please use mouse wheel to scroll this page.</div>
<div>This article uses certain macOS keyboard symbols to simplify the description. Note:</div>
<ol>
@ -311,6 +311,17 @@
<div>Requiring that ICB is not empty and the IME is not in marking state.</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ Commit everything first, then attempt to call associated phrases using the front node data.</div>
</td>
<td>
<div>This won't work with SPCP mode which calls associated phrases in a different way.</div>
</td>
</tr>
<tr>
<td>
<div>⌥⇧⏎</div>
@ -721,6 +732,19 @@
<div>Can be disabled (in vChewing preferences) for associated phrase candidates.</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ Attempt to call available associated phrases using the highlighted candidate.</div>
<div>‧ The current ICB with the confirmed highlighted candidate will be committed first.</div>
</td>
<td>
<div>‧ Associates require that the cursor must be situated in the most-front.</div>
<div>‧ This won't work with SPCP mode which calls associated phrases in a different way.</div>
</td>
</tr>
<tr>
<td>
<div>⌃⌘]</div>

View File

@ -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…" = "入力アプリ再起動…";

View File

@ -17,7 +17,7 @@
</head>
<body>
<h1><strong>キーボードショートカット取り扱い説明書macOS</strong></h1>
<div>この文章は、威注音入力アプリ v3.5.4 アップデート(とその Aqua 紀念版 v0.5.26のキーボードショートカットの取り扱う方法を説明します。</div>
<div>この文章は、威注音入力アプリ v3.7.2 アップデートのキーボードショートカットの取り扱う方法を説明します。</div>
<div>マウスホイールでこの文章をご覧ください。</div>
<div>この文章は、簡単に説明できるために、いくつか macOS 専用のキー符号を用います。そして付記もございます:</div>
<ol>
@ -234,7 +234,7 @@
<div><strong></strong>⇧⌘ A</div>
</td>
<td>
<div>全候補入力で連想語彙</div>
<div>関連語彙モード</div>
</td>
</tr>
<tr>
@ -311,6 +311,17 @@
<div>ICB&nbsp;が空っぽでなければ、そして&nbsp;IME&nbsp;がマーキング状態中でなければ、の話。</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ ICBの内容をすべて送り出してから、最も前方のードを以て利用できる関連語彙を提示する。</div>
</td>
<td>
<div>全候補入力モードでの関連語彙の呼び出す方法は別の話です。</div>
</td>
</tr>
<tr>
<td>
<div>⌥⇧⏎</div>
@ -719,6 +730,19 @@
<div>連想語彙をこのキーで確認したくない場合、入力機能設定で無効と設定できる。</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ ハイライトした文字候補を以て利用できる関連語彙を提示する。</div>
<div>‧ 関連語彙は利用可能だと確認した場合、まずICBの内容をすべて送り出してから、関連語彙を提示する。</div>
</td>
<td>
<div>‧ カーサルが最前方に置かない限り、関連語彙は出られません。</div>
<div>‧ 全候補入力モードでの関連語彙の呼び出す方法は別の話です。</div>
</td>
</tr>
<tr>
<td>
<div>⌃⌘]</div>

View File

@ -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." = "档案存取失败,或者路径不合规。";

View File

@ -17,7 +17,7 @@
</head>
<body>
<h1><strong>键盘热键使用手册macOS</strong></h1>
<div>本文对应至少威注音 3.5.4 版(以及其 Aqua 纪念版 0.5.26。请利用滑鼠滚轮检视该页面。</div>
<div>本文对应至少威注音 3.7.2 版。请利用滑鼠滚轮检视该页面。</div>
<div>为了简化下文表述,这里介绍一下本文会用到的 macOS 的键盘符号。注:</div>
<ol>
<li>BackSpace 与 Delete 采 Windows 称谓。</li>
@ -233,7 +233,7 @@
<div>⌃⇧⌘ A</div>
</td>
<td>
<div>逐字选字联想模式(就是ㄅ半的联想词</div>
<div>关联词语模式(就是ㄅ半的关联词语</div>
</td>
</tr>
<tr>
@ -311,6 +311,17 @@
<div>输入法并非处于标记模式时才会生效。</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ 将当前组字区内容递交出去之后、以文字输入方向最前端的已递交的节点内容作为索引资料、来试图叫出关联词语选字窗。</div>
</td>
<td>
<div>对逐字选字模式无效,因为组字选字模式另有安排。</div>
</td>
</tr>
<tr>
<td>
<div>⌥⇧⏎</div>
@ -489,7 +500,7 @@
<td>
<div>输入法处于标记模式时才会生效;</div>
<div>相关记录存于使用者语汇档案当中;</div>
<div>对使用者联词无法生效。</div>
<div>对使用者联词无法生效。</div>
</td>
</tr>
<tr>
@ -504,7 +515,7 @@
</td>
<td>
<div>输入法处于标记模式时才会生效;</div>
<div>对使用者联词无法生效。</div>
<div>对使用者联词无法生效。</div>
</td>
</tr>
<tr>
@ -745,7 +756,20 @@
<div>确认选字窗内的当前候选字</div>
</td>
<td>
<div>联想词选字时,该功能可在偏好设定内启用或停用。</div>
<div>关联词语选字时,该功能可在偏好设定内启用或停用。</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ 以文字输入方向最前端的已递交的节点内容作为索引资料、来试图叫出关联词语选字窗。</div>
<div>‧ 如果能成功叫出关联词语的话,会先递交当前组字区的内容。</div>
</td>
<td>
<div>‧ 关联词语仅会在游标处于组字区最前方的时候才可以触发。</div>
<div>‧ 对逐字选字模式无效,因为组字选字模式另有安排。</div>
</td>
</tr>
<tr>

View File

@ -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." = "檔案存取失敗,或者路徑不合規。";

View File

@ -17,7 +17,7 @@
</head>
<body>
<h1><strong>鍵盤熱鍵使用手冊macOS</strong></h1>
<div>本文對應至少威注音 3.5.4 版(以及其 Aqua 紀念版 0.5.26。請利用滑鼠滾輪檢視該頁面。</div>
<div>本文對應至少威注音 3.7.2 版。請利用滑鼠滾輪檢視該頁面。</div>
<div>為了簡化下文表述,這裡介紹一下本文會用到的 macOS 的鍵盤符號。註:</div>
<ol>
<li>BackSpace 與 Delete 採 Windows 稱謂。</li>
@ -233,7 +233,7 @@
<div>⌃⇧⌘ A</div>
</td>
<td>
<div>逐字選字聯想模式(就是ㄅ半的聯想詞</div>
<div>關聯詞語模式(就是ㄅ半的關聯詞語</div>
</td>
</tr>
<tr>
@ -311,6 +311,17 @@
<div>輸入法並非處於標記模式時才會生效。</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ 將當前組字區內容遞交出去之後、以文字輸入方向最前端的已遞交的節點內容作為索引資料、來試圖叫出關聯詞語選字窗。</div>
</td>
<td>
<div>對逐字選字模式無效,因為組字選字模式另有安排。</div>
</td>
</tr>
<tr>
<td>
<div>⌥⇧⏎</div>
@ -489,7 +500,7 @@
<td>
<div>輸入法處於標記模式時才會生效;</div>
<div>相關記錄存於使用者語彙檔案當中;</div>
<div>對使用者聯詞無法生效。</div>
<div>對使用者聯詞無法生效。</div>
</td>
</tr>
<tr>
@ -504,7 +515,7 @@
</td>
<td>
<div>輸入法處於標記模式時才會生效;</div>
<div>對使用者聯詞無法生效。</div>
<div>對使用者聯詞無法生效。</div>
</td>
</tr>
<tr>
@ -745,7 +756,20 @@
<div>確認選字窗內的當前候選字</div>
</td>
<td>
<div>聯想詞選字時,該功能可在偏好設定內啟用或停用。</div>
<div>關聯詞語選字時,該功能可在偏好設定內啟用或停用。</div>
</td>
</tr>
<tr>
<td>
<div>⇧⏎</div>
</td>
<td>
<div>‧ 以文字輸入方向最前端的已遞交的節點內容作為索引資料、來試圖叫出關聯詞語選字窗。</div>
<div>‧ 如果能成功叫出關聯詞語的話,會先遞交當前組字區的內容。</div>
</td>
<td>
<div>‧ 關聯詞語僅會在游標處於組字區最前方的時候才可以觸發。</div>
<div>‧ 對逐字選字模式無效,因為組字選字模式另有安排。</div>
</td>
</tr>
<tr>

View File

@ -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";

View File

@ -146,7 +146,7 @@
"xibKeyboardShortcuts.title" = "ショートカット";
"xibOutputSettings.title" = "出力設定";
"xibUsingCurrencyNumerals.title" = "数字大字変換";
"xibUsingHotKeyAssociates.title" = "全候補入力で連想語彙";
"xibUsingHotKeyAssociates.title" = "関連語彙モード";
"xibUsingHotKeyCassette.title" = "CIN カセットモード";
"xibUsingHotKeyCNS.title" = "全字庫モード";
"xibUsingHotKeyHalfWidthASCII.title" = "半角句読モード";

View File

@ -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" = "半形标点模式";

View File

@ -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" = "半形標點模式";