Repo // Allow only using L-Shift for toggling alphanumerical mode.

This commit is contained in:
ShikiSuen 2023-01-25 14:23:53 +08:00
parent 98dbe81962
commit 80f4cff96b
13 changed files with 63 additions and 60 deletions

View File

@ -12,19 +12,24 @@ extension Date {
}
public struct ShiftKeyUpChecker {
public init(useLShift: Bool) {
alsoToggleWithLShift = useLShift
public init(useLShift: Bool = false, useRShift: Bool = false) {
toggleWithLShift = useLShift
toggleWithRShift = useRShift
}
public var alsoToggleWithLShift = false
public var toggleWithLShift = false
public var toggleWithRShift = false
public var lShiftKeyCode: UInt16 = 56
public var rShiftKeyCode: UInt16 = 60
public var enabled: Bool { toggleWithLShift || toggleWithRShift }
private var checkModifier: NSEvent.ModifierFlags { NSEvent.ModifierFlags.shift }
private var checkKeyCode: [UInt16] {
alsoToggleWithLShift
? [lShiftKeyCode, rShiftKeyCode]
: [rShiftKeyCode]
var result = [UInt16]()
if toggleWithLShift { result.append(lShiftKeyCode) }
if toggleWithRShift { result.append(rShiftKeyCode) }
return result
}
private let delayInterval = 0.3

View File

@ -36,7 +36,7 @@ public protocol PrefMgrProtocol {
var keepReadingUponCompositionError: Bool { get set }
var upperCaseLetterKeyBehavior: Int { get set }
var togglingAlphanumericalModeWithLShift: Bool { get set }
var disableShiftTogglingAlphanumericalMode: Bool { get set }
var togglingAlphanumericalModeWithRShift: Bool { get set }
var consolidateContextOnCandidateSelection: Bool { get set }
var hardenVerticalPunctuations: Bool { get set }
var trimUnfinishedReadingsOnCommit: Bool { get set }

View File

@ -56,7 +56,7 @@ public enum UserDef: String, CaseIterable {
case kKeepReadingUponCompositionError = "KeepReadingUponCompositionError"
case kTogglingAlphanumericalModeWithLShift = "TogglingAlphanumericalModeWithLShift"
case kUpperCaseLetterKeyBehavior = "UpperCaseLetterKeyBehavior"
case kDisableShiftTogglingAlphanumericalMode = "DisableShiftTogglingAlphanumericalMode"
case kTogglingAlphanumericalModeWithRShift = "togglingAlphanumericalModeWithRShift"
case kConsolidateContextOnCandidateSelection = "ConsolidateContextOnCandidateSelection"
case kHardenVerticalPunctuations = "HardenVerticalPunctuations"
case kTrimUnfinishedReadingsOnCommit = "TrimUnfinishedReadingsOnCommit"

View File

@ -114,12 +114,16 @@ public class PrefMgr: PrefMgrProtocol {
@AppProperty(key: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue, defaultValue: true)
public var togglingAlphanumericalModeWithLShift: Bool {
didSet {
SessionCtl.theShiftKeyDetector.alsoToggleWithLShift = togglingAlphanumericalModeWithLShift
SessionCtl.theShiftKeyDetector.toggleWithLShift = togglingAlphanumericalModeWithLShift
}
}
@AppProperty(key: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue, defaultValue: false)
public var disableShiftTogglingAlphanumericalMode: Bool
@AppProperty(key: UserDef.kTogglingAlphanumericalModeWithRShift.rawValue, defaultValue: true)
public var togglingAlphanumericalModeWithRShift: Bool {
didSet {
SessionCtl.theShiftKeyDetector.toggleWithRShift = togglingAlphanumericalModeWithRShift
}
}
@AppProperty(key: UserDef.kConsolidateContextOnCandidateSelection.rawValue, defaultValue: true)
public var consolidateContextOnCandidateSelection: Bool

View File

@ -16,7 +16,7 @@ extension PrefMgr {
if #unavailable(macOS 10.15) {
useIMKCandidateWindow = true
handleDefaultCandidateFontsByLangIdentifier = false
disableShiftTogglingAlphanumericalMode = true
togglingAlphanumericalModeWithRShift = false
togglingAlphanumericalModeWithLShift = false
showReverseLookupInCandidateUI = false
shareAlphanumericalModeStatusAcrossClients = false

View File

@ -226,10 +226,11 @@ extension SessionCtl {
inputHandler?.delegate = self
syncBaseLMPrefs()
Self.theShiftKeyDetector.alsoToggleWithLShift = PrefMgr.shared.togglingAlphanumericalModeWithLShift
Self.theShiftKeyDetector.toggleWithLShift = PrefMgr.shared.togglingAlphanumericalModeWithLShift
Self.theShiftKeyDetector.toggleWithRShift = PrefMgr.shared.togglingAlphanumericalModeWithRShift
if #available(macOS 10.15, *) {
if isASCIIMode, PrefMgr.shared.disableShiftTogglingAlphanumericalMode { isASCIIMode = false }
if isASCIIMode, !Self.theShiftKeyDetector.enabled { isASCIIMode = false }
}
DispatchQueue.main.async {

View File

@ -71,20 +71,16 @@ extension SessionCtl {
}
// Shift macOS 10.15 macOS
// JIS macOS 10.09
// event event var Shift
if Self.theShiftKeyDetector.check(event), !PrefMgr.shared.disableShiftTogglingAlphanumericalMode {
// Shift keyUp
if (event.type == .keyDown && event.isJISAlphanumericalKey) || Self.theShiftKeyDetector.check(event) {
toggleAlphanumericalMode()
// Adobe Photoshop JIS true
// Shift
return true
}
// JIS
if event.type == .keyDown {
if event.isJISAlphanumericalKey {
toggleAlphanumericalMode()
return true // Adobe Photoshop JIS true
}
}
// MARK:
// Shift

View File

@ -36,10 +36,10 @@ struct VwrPrefPaneExperience: View {
forKey: UserDef.kKeepReadingUponCompositionError.rawValue)
@State private var selTogglingAlphanumericalModeWithLShift = UserDefaults.standard.bool(
forKey: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue)
@State private var selTogglingAlphanumericalModeWithRShift = UserDefaults.standard.bool(
forKey: UserDef.kTogglingAlphanumericalModeWithRShift.rawValue)
@State private var selUpperCaseLetterKeyBehavior = UserDefaults.standard.integer(
forKey: UserDef.kUpperCaseLetterKeyBehavior.rawValue)
@State private var selDisableShiftTogglingAlphanumericalMode: Bool = UserDefaults.standard.bool(
forKey: UserDef.kDisableShiftTogglingAlphanumericalMode.rawValue)
@State private var selSpecifyIntonationKeyBehavior = UserDefaults.standard.integer(
forKey: UserDef.kSpecifyIntonationKeyBehavior.rawValue)
@State private var selSpecifyShiftBackSpaceKeyBehavior = UserDefaults.standard.integer(
@ -193,26 +193,6 @@ struct VwrPrefPaneExperience: View {
Text(LocalizedStringKey("Specify the behavior of intonation key when syllable composer is empty."))
.preferenceDescription()
}
SSPreferences.Section(title: "Shift:") {
Toggle(
LocalizedStringKey("Completely disable using Shift key to toggle alphanumerical mode"),
isOn: $selDisableShiftTogglingAlphanumericalMode.onChange {
PrefMgr.shared.disableShiftTogglingAlphanumericalMode = selDisableShiftTogglingAlphanumericalMode
}
)
Toggle(
LocalizedStringKey("Also toggle alphanumerical mode with Left-Shift"),
isOn: $selTogglingAlphanumericalModeWithLShift.onChange {
PrefMgr.shared.togglingAlphanumericalModeWithLShift = selTogglingAlphanumericalModeWithLShift
}
).disabled(PrefMgr.shared.disableShiftTogglingAlphanumericalMode == true)
Toggle(
LocalizedStringKey("Share alphanumerical mode status across all clients"),
isOn: $selShareAlphanumericalModeStatusAcrossClients.onChange {
PrefMgr.shared.shareAlphanumericalModeStatusAcrossClients = selShareAlphanumericalModeStatusAcrossClients
}
).disabled(PrefMgr.shared.disableShiftTogglingAlphanumericalMode == true)
}
SSPreferences.Section(title: "Caps Lock:") {
Toggle(
LocalizedStringKey("Show notifications when toggling Caps Lock"),
@ -221,6 +201,28 @@ struct VwrPrefPaneExperience: View {
}
).disabled(!macOSMontereyOrLaterDetected)
}
SSPreferences.Section(title: "Shift:") {
Toggle(
LocalizedStringKey("Toggle alphanumerical mode with Right-Shift"),
isOn: $selTogglingAlphanumericalModeWithRShift.onChange {
PrefMgr.shared.togglingAlphanumericalModeWithRShift = selTogglingAlphanumericalModeWithRShift
}
)
Toggle(
LocalizedStringKey("Toggle alphanumerical mode with Left-Shift"),
isOn: $selTogglingAlphanumericalModeWithLShift.onChange {
PrefMgr.shared.togglingAlphanumericalModeWithLShift = selTogglingAlphanumericalModeWithLShift
}
)
Toggle(
LocalizedStringKey("Share alphanumerical mode status across all clients"),
isOn: $selShareAlphanumericalModeStatusAcrossClients.onChange {
PrefMgr.shared.shareAlphanumericalModeStatusAcrossClients = selShareAlphanumericalModeStatusAcrossClients
}
).disabled(
!PrefMgr.shared.togglingAlphanumericalModeWithRShift && !PrefMgr.shared.togglingAlphanumericalModeWithLShift
)
}
SSPreferences.Section(label: { Text(LocalizedStringKey("Misc Settings:")) }) {
Toggle(
LocalizedStringKey("Enable Space key for calling candidate window"),

View File

@ -165,7 +165,6 @@
"Allow boosting / excluding a candidate of single kanji" = "Allow boosting / excluding a candidate of single kanji";
"Allow using Enter key to confirm associated candidate selection" = "Allow using Enter key to confirm associated candidate selection";
"Alphanumerical Layout:" = "Alphanumerical Layout:";
"Also toggle alphanumerical mode with Left-Shift" = "Also toggle alphanumerical mode with Left-Shift";
"Always drop the previous reading" = "Always drop the previous reading";
"Always show tooltip texts horizontally" = "Always show tooltip texts horizontally";
"Always type intonations to the inline composition buffer" = "Always type intonations to the inline composition buffer";
@ -203,7 +202,6 @@
"Choose your preferred layout of the candidate window." = "Choose your preferred layout of the candidate window.";
"Clear the entire inline composition buffer like Shift+Delete" = "Clear the entire inline composition buffer like Shift+Delete";
"Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter" = "Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter";
"Completely disable using Shift key to toggle alphanumerical mode" = "Completely disable using Shift key to toggle alphanumerical mode";
"Consolidate the context on confirming candidate selection" = "Consolidate the context on confirming candidate selection";
"Cursor Selection:" = "Cursor Selection:";
"Dachen (Microsoft Standard / Wang / 01, etc.)" = "Dachen (Microsoft Standard / Wang / 01, etc.)";
@ -283,6 +281,8 @@
"This only works with Tadokoro candidate window." = "This only works with Tadokoro candidate window.";
"This will batch-replace specified candidates." = "This will batch-replace specified candidates.";
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "This will use the plist files deployed by the “make install” command from libvChewing-Data if possible.";
"Toggle alphanumerical mode with Left-Shift" = "Toggle alphanumerical mode with Left-Shift";
"Toggle alphanumerical mode with Right-Shift" = "Toggle alphanumerical mode with Right-Shift";
"Traditional Chinese" = "Traditional Chinese";
"Trim unfinished readings / strokes on commit" = "Trim unfinished readings / strokes on commit";
"Type them into inline composition buffer" = "Type them into inline composition buffer";
@ -292,7 +292,6 @@
"Use .langIdentifier to handle UI fonts in candidate window" = "Use .langIdentifier to handle UI fonts in candidate window";
"Use ESC key to clear the entire input buffer" = "Use ESC key to clear the entire input buffer";
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "Use IMK Candidate Window instead of Tadokoro (will reboot the IME)";
"Vertical" = "Vertical";
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected.";
"Yale Pinyin with Numeral Intonation" = "Yale Pinyin with Numeral Intonation";

View File

@ -165,7 +165,6 @@
"Allow boosting / excluding a candidate of single kanji" = "Allow boosting / excluding a candidate of single kanji";
"Allow using Enter key to confirm associated candidate selection" = "Allow using Enter key to confirm associated candidate selection";
"Alphanumerical Layout:" = "Alphanumerical Layout:";
"Also toggle alphanumerical mode with Left-Shift" = "Also toggle alphanumerical mode with Left-Shift";
"Always drop the previous reading" = "Always drop the previous reading";
"Always show tooltip texts horizontally" = "Always show tooltip texts horizontally";
"Always type intonations to the inline composition buffer" = "Always type intonations to the inline composition buffer";
@ -203,7 +202,6 @@
"Choose your preferred layout of the candidate window." = "Choose your preferred layout of the candidate window.";
"Clear the entire inline composition buffer like Shift+Delete" = "Clear the entire inline composition buffer like Shift+Delete";
"Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter" = "Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter";
"Completely disable using Shift key to toggle alphanumerical mode" = "Completely disable using Shift key to toggle alphanumerical mode";
"Consolidate the context on confirming candidate selection" = "Consolidate the context on confirming candidate selection";
"Cursor Selection:" = "Cursor Selection:";
"Dachen (Microsoft Standard / Wang / 01, etc.)" = "Dachen (Microsoft Standard / Wang / 01, etc.)";
@ -283,6 +281,8 @@
"This only works with Tadokoro candidate window." = "This only works with Tadokoro candidate window.";
"This will batch-replace specified candidates." = "This will batch-replace specified candidates.";
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "This will use the plist files deployed by the “make install” command from libvChewing-Data if possible.";
"Toggle alphanumerical mode with Left-Shift" = "Toggle alphanumerical mode with Left-Shift";
"Toggle alphanumerical mode with Right-Shift" = "Toggle alphanumerical mode with Right-Shift";
"Traditional Chinese" = "Traditional Chinese";
"Trim unfinished readings / strokes on commit" = "Trim unfinished readings / strokes on commit";
"Type them into inline composition buffer" = "Type them into inline composition buffer";
@ -292,7 +292,6 @@
"Use .langIdentifier to handle UI fonts in candidate window" = "Use .langIdentifier to handle UI fonts in candidate window";
"Use ESC key to clear the entire input buffer" = "Use ESC key to clear the entire input buffer";
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "Use IMK Candidate Window instead of Tadokoro (will reboot the IME)";
"Vertical" = "Vertical";
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected.";
"Yale Pinyin with Numeral Intonation" = "Yale Pinyin with Numeral Intonation";

View File

@ -165,7 +165,6 @@
"Allow boosting / excluding a candidate of single kanji" = "即排除/即最優先にできる候補の文字数の最低限は1字とする";
"Allow using Enter key to confirm associated candidate selection" = "Enter キーを連想語彙候補の確認のために使う";
"Alphanumerical Layout:" = "英数キーボード:";
"Also toggle alphanumerical mode with Left-Shift" = "左側の Shift キーでも英数入力モードの切り替え";
"Always drop the previous reading" = "カーソルの後部の音読みを常に削除する";
"Always show tooltip texts horizontally" = "ヒントを常に横書きにする";
"Always type intonations to the inline composition buffer" = "常に入力緩衝列に音調を入力する";
@ -203,7 +202,6 @@
"Choose your preferred layout of the candidate window." = "入力候補陳列の仕様をご指定ください。";
"Clear the entire inline composition buffer like Shift+Delete" = "Shift+Delete のように入力緩衝列を消す";
"Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter" = "Ctrl(+Option)+Command+Enter で出すのを漢語弁音と変換";
"Completely disable using Shift key to toggle alphanumerical mode" = "Shift キーの英数入力モードの切り替え機能を徹底的に禁ず";
"Consolidate the context on confirming candidate selection" = "候補陳列ウィンドウで候補を選ぶ時に文脈を強固する";
"Cursor Selection:" = "カーソル候補呼出:";
"Dachen (Microsoft Standard / Wang / 01, etc.)" = "大千配列 (Microsoft 標準・王安・零壹など)";
@ -283,6 +281,8 @@
"This only works with Tadokoro candidate window." = "これは田所候補陳列ウィンドウだけに効ける機能である。";
"This will batch-replace specified candidates." = "指定された候補そのものを置き換える";
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "これで libvChewing-Data の make install にて設置した公式辞書ファイルを優先的に用いる。";
"Toggle alphanumerical mode with Left-Shift" = "左側の Shift キーで英数入力モードの切り替え";
"Toggle alphanumerical mode with Right-Shift" = "右側の Shift キーで英数入力モードの切り替え";
"Traditional Chinese" = "繁体中国語";
"Trim unfinished readings / strokes on commit" = "送り出す緩衝列内容から未完成な音読み/筆組みを除く";
"Type them into inline composition buffer" = "入力緩衝列にローマ字入力";
@ -292,7 +292,6 @@
"Use .langIdentifier to handle UI fonts in candidate window" = "「.langIdentifier」を使って候補陳列ウィンドウのフォントを取り扱う";
"Use ESC key to clear the entire input buffer" = "ESC キーで入力緩衝列を消す";
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "IMK 候補陳列ウィンドウを起用(入力アプリは自動的に再起動)";
"Vertical" = "縦型陳列";
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:これからの新機能テストのために作ったページですから、\nここで陳列されている諸機能は予想通り動けるだと思わないでください。";
"Yale Pinyin with Numeral Intonation" = "イェール弁音 (ローマ字+数字音調)";

View File

@ -165,7 +165,6 @@
"Allow boosting / excluding a candidate of single kanji" = "将可以就地升权/排除的候选字词的最短词长设为单个汉字";
"Allow using Enter key to confirm associated candidate selection" = "允许使用 Enter 确认当前选中的联想词";
"Alphanumerical Layout:" = "英数键盘布局:";
"Also toggle alphanumerical mode with Left-Shift" = "也允许使用左侧的 Shift 键盘切换英数输入模式";
"Always drop the previous reading" = "始终剔除游标正后方的字音";
"Always show tooltip texts horizontally" = "始终使用横排来显示工具提示视窗";
"Always type intonations to the inline composition buffer" = "始终在内文组字区内键入声调符号";
@ -203,7 +202,6 @@
"Choose your preferred layout of the candidate window." = "选择您所偏好的候选字窗布局。";
"Clear the entire inline composition buffer like Shift+Delete" = "像 Shift+Delete 那样清空当前组字区内容";
"Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter" = "Ctrl(+Option)+Command+Enter 输出汉语拼音而非注音";
"Completely disable using Shift key to toggle alphanumerical mode" = "彻底禁止使用 Shift 键切换英数模式";
"Consolidate the context on confirming candidate selection" = "在使用选字窗选字时,自动巩固上下文";
"Cursor Selection:" = "选字游标:";
"Dachen (Microsoft Standard / Wang / 01, etc.)" = "大千排列 (微软标准/王安/零壹/仲鼎/国乔)";
@ -283,6 +281,8 @@
"This only works with Tadokoro candidate window." = "该方法仅对田所选字窗起作用。";
"This will batch-replace specified candidates." = "这将会对指定的候选字词进行整词取代。";
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "这将会优先使用由 libvChewing-Data 的 make install 部署的原厂辞典档案。";
"Toggle alphanumerical mode with Left-Shift" = "允许使用左侧的 Shift 键盘切换英数输入模式";
"Toggle alphanumerical mode with Right-Shift" = "允许使用右侧的 Shift 键盘切换英数输入模式";
"Traditional Chinese" = "繁体中文";
"Trim unfinished readings / strokes on commit" = "在递交时清理未完成拼写的读音或字根";
"Type them into inline composition buffer" = "直接键入内文组字区";
@ -292,7 +292,6 @@
"Use .langIdentifier to handle UI fonts in candidate window" = "使用 .langIdentifier 来管理选字窗的预设介面字型";
"Use ESC key to clear the entire input buffer" = "敲 ESC 键以清空整个组字缓冲区";
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "启用与 macOS 内建输入法相同的 IMK 选字窗(会自动重启输入法)";
"Vertical" = "纵向布局";
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:该页面仅作未来功能测试所用。\n在此列出的功能并非处于完全可用之状态。";
"Yale Pinyin with Numeral Intonation" = "耶鲁拼音+数字标调";

View File

@ -165,7 +165,6 @@
"Allow boosting / excluding a candidate of single kanji" = "將可以就地升權/排除的候選字詞的最短詞長設為單個漢字";
"Allow using Enter key to confirm associated candidate selection" = "允許使用 Enter 確認當前選中的聯想詞";
"Alphanumerical Layout:" = "英數鍵盤佈局:";
"Also toggle alphanumerical mode with Left-Shift" = "也允許使用左側的 Shift 鍵盤切換英數輸入模式";
"Always drop the previous reading" = "始終剔除游標正後方的字音";
"Always show tooltip texts horizontally" = "始終使用橫排來顯示工具提示視窗";
"Always type intonations to the inline composition buffer" = "始終在內文組字區內鍵入聲調符號";
@ -203,7 +202,6 @@
"Choose your preferred layout of the candidate window." = "選擇您所偏好的候選字窗佈局。";
"Clear the entire inline composition buffer like Shift+Delete" = "像 Shift+Delete 那樣清空當前組字區內容";
"Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter" = "Ctrl(+Option)+Command+Enter 輸出漢語拼音而非注音";
"Completely disable using Shift key to toggle alphanumerical mode" = "徹底禁止使用 Shift 鍵切換英數模式";
"Consolidate the context on confirming candidate selection" = "在使用選字窗選字時,自動鞏固上下文";
"Cursor Selection:" = "選字游標:";
"Dachen (Microsoft Standard / Wang / 01, etc.)" = "大千排列 (微軟標準/王安/零壹/仲鼎/國喬)";
@ -283,6 +281,8 @@
"This only works with Tadokoro candidate window." = "該方法僅對田所選字窗起作用。";
"This will batch-replace specified candidates." = "這將會對指定的候選字詞進行整詞取代。";
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "這將會優先使用由 libvChewing-Data 的 make install 部署的原廠辭典檔案。";
"Toggle alphanumerical mode with Left-Shift" = "允許使用左側的 Shift 鍵盤切換英數輸入模式";
"Toggle alphanumerical mode with Right-Shift" = "允許使用右側的 Shift 鍵盤切換英數輸入模式";
"Traditional Chinese" = "繁體中文";
"Trim unfinished readings / strokes on commit" = "在遞交時清理未完成拼寫的讀音或字根";
"Type them into inline composition buffer" = "直接鍵入內文組字區";
@ -292,7 +292,6 @@
"Use .langIdentifier to handle UI fonts in candidate window" = "使用 .langIdentifier 來管理選字窗的預設介面字型";
"Use ESC key to clear the entire input buffer" = "敲 ESC 鍵以清空整個組字緩衝區";
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "啟用與 macOS 內建輸入法相同的 IMK 選字窗(會自動重啟輸入法)";
"Vertical" = "縱向佈局";
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:該頁面僅作未來功能測試所用。\n在此列出的功能並非處於完全可用之狀態。";
"Yale Pinyin with Numeral Intonation" = "耶魯拼音+數字標調";