2.8.5 SP2 // Bug fixes. Merge PR#168 from upd/2.8.5sp2
This commit is contained in:
commit
e9ec97269d
|
@ -184,7 +184,6 @@ public class CandidatePool {
|
|||
var indexSpecified = indexSpecified
|
||||
highlightedIndex = indexSpecified
|
||||
if !(0..<candidateDataAll.count).contains(highlightedIndex) {
|
||||
NSSound.beep()
|
||||
switch highlightedIndex {
|
||||
case candidateDataAll.count...:
|
||||
currentRowNumber = candidateRows.count - 1
|
||||
|
@ -218,7 +217,6 @@ public class CandidatePool {
|
|||
var indexSpecified = indexSpecified
|
||||
highlightedIndex = indexSpecified
|
||||
if !(0..<candidateDataAll.count).contains(highlightedIndex) {
|
||||
NSSound.beep()
|
||||
switch highlightedIndex {
|
||||
case candidateDataAll.count...:
|
||||
currentColumnNumber = candidateColumns.count - 1
|
||||
|
|
|
@ -89,6 +89,12 @@ public class CtlCandidateTDK: CtlCandidate {
|
|||
}
|
||||
|
||||
@discardableResult override public func showNextPage() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == thePoolHorizontal.candidateRows.count - 1)
|
||||
|| (currentLayout == .vertical
|
||||
&& thePoolVertical.currentColumnNumber == thePoolVertical.candidateColumns.count - 1)
|
||||
{
|
||||
return highlightNextCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
for _ in 0..<thePoolHorizontal.maximumRowsPerPage {
|
||||
|
@ -105,7 +111,31 @@ public class CtlCandidateTDK: CtlCandidate {
|
|||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showNextLine() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == thePoolHorizontal.candidateRows.count - 1)
|
||||
|| (currentLayout == .vertical
|
||||
&& thePoolVertical.currentColumnNumber == thePoolVertical.candidateColumns.count - 1)
|
||||
{
|
||||
return highlightNextCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
thePoolHorizontal.selectNewNeighborRow(direction: .down)
|
||||
case .vertical:
|
||||
thePoolVertical.selectNewNeighborColumn(direction: .right)
|
||||
@unknown default:
|
||||
return false
|
||||
}
|
||||
updateDisplay()
|
||||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showPreviousPage() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == 0)
|
||||
|| (currentLayout == .vertical && thePoolVertical.currentColumnNumber == 0)
|
||||
{
|
||||
return highlightPreviousCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
for _ in 0..<thePoolHorizontal.maximumRowsPerPage {
|
||||
|
@ -122,20 +152,12 @@ public class CtlCandidateTDK: CtlCandidate {
|
|||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showNextLine() -> Bool {
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
thePoolHorizontal.selectNewNeighborRow(direction: .down)
|
||||
case .vertical:
|
||||
thePoolVertical.selectNewNeighborColumn(direction: .right)
|
||||
@unknown default:
|
||||
return false
|
||||
}
|
||||
updateDisplay()
|
||||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showPreviousLine() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == 0)
|
||||
|| (currentLayout == .vertical && thePoolVertical.currentColumnNumber == 0)
|
||||
{
|
||||
return highlightPreviousCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
thePoolHorizontal.selectNewNeighborRow(direction: .up)
|
||||
|
@ -151,8 +173,18 @@ public class CtlCandidateTDK: CtlCandidate {
|
|||
@discardableResult override public func highlightNextCandidate() -> Bool {
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
if thePoolHorizontal.highlightedIndex == thePoolHorizontal.candidateDataAll.count - 1 {
|
||||
thePoolHorizontal.highlightHorizontal(at: 0)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolHorizontal.highlightHorizontal(at: thePoolHorizontal.highlightedIndex + 1)
|
||||
case .vertical:
|
||||
if thePoolVertical.highlightedIndex == thePoolVertical.candidateDataAll.count - 1 {
|
||||
thePoolVertical.highlightVertical(at: 0)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolVertical.highlightVertical(at: thePoolVertical.highlightedIndex + 1)
|
||||
@unknown default:
|
||||
return false
|
||||
|
@ -164,8 +196,18 @@ public class CtlCandidateTDK: CtlCandidate {
|
|||
@discardableResult override public func highlightPreviousCandidate() -> Bool {
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
if thePoolHorizontal.highlightedIndex == 0 {
|
||||
thePoolHorizontal.highlightHorizontal(at: thePoolHorizontal.candidateDataAll.count - 1)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolHorizontal.highlightHorizontal(at: thePoolHorizontal.highlightedIndex - 1)
|
||||
case .vertical:
|
||||
if thePoolVertical.highlightedIndex == 0 {
|
||||
thePoolVertical.highlightVertical(at: thePoolVertical.candidateDataAll.count - 1)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolVertical.highlightVertical(at: thePoolVertical.highlightedIndex - 1)
|
||||
@unknown default:
|
||||
return false
|
||||
|
@ -179,11 +221,11 @@ public class CtlCandidateTDK: CtlCandidate {
|
|||
case .horizontal:
|
||||
let currentRow = thePoolHorizontal.candidateRows[thePoolHorizontal.currentRowNumber]
|
||||
let actualID = max(0, min(id, currentRow.count - 1))
|
||||
return thePoolHorizontal.candidateRows[thePoolHorizontal.currentRowNumber][actualID].index
|
||||
return currentRow[actualID].index
|
||||
case .vertical:
|
||||
let currentColumn = thePoolVertical.candidateColumns[thePoolVertical.currentColumnNumber]
|
||||
let actualID = max(0, min(id, currentColumn.count - 1))
|
||||
return thePoolVertical.candidateColumns[thePoolVertical.currentColumnNumber][actualID].index
|
||||
return currentColumn[actualID].index
|
||||
@unknown default:
|
||||
return 0
|
||||
}
|
||||
|
|
|
@ -154,10 +154,13 @@ extension vChewingLM.LMUserOverride {
|
|||
// MARK: - Hash and Dehash the entire UOM data, etc.
|
||||
|
||||
extension vChewingLM.LMUserOverride {
|
||||
public func bleachSpecifiedSuggestions(target: String, saveCallback: @escaping () -> Void) {
|
||||
public func bleachSpecifiedSuggestions(targets: [String], saveCallback: @escaping () -> Void) {
|
||||
if targets.isEmpty { return }
|
||||
for neta in mutLRUMap {
|
||||
if neta.value.observation.overrides.keys.contains(target) {
|
||||
mutLRUMap.removeValue(forKey: neta.key)
|
||||
for target in targets {
|
||||
if neta.value.observation.overrides.keys.contains(target) {
|
||||
mutLRUMap.removeValue(forKey: neta.key)
|
||||
}
|
||||
}
|
||||
}
|
||||
resetMRUList()
|
||||
|
|
|
@ -91,6 +91,12 @@ public class CtlCandidateTDKBackports: CtlCandidate {
|
|||
}
|
||||
|
||||
@discardableResult override public func showNextPage() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == thePoolHorizontal.candidateRows.count - 1)
|
||||
|| (currentLayout == .vertical
|
||||
&& thePoolVertical.currentColumnNumber == thePoolVertical.candidateColumns.count - 1)
|
||||
{
|
||||
return highlightNextCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
for _ in 0..<thePoolHorizontal.maximumRowsPerPage {
|
||||
|
@ -107,7 +113,31 @@ public class CtlCandidateTDKBackports: CtlCandidate {
|
|||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showNextLine() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == thePoolHorizontal.candidateRows.count - 1)
|
||||
|| (currentLayout == .vertical
|
||||
&& thePoolVertical.currentColumnNumber == thePoolVertical.candidateColumns.count - 1)
|
||||
{
|
||||
return highlightNextCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
thePoolHorizontal.selectNewNeighborRow(direction: .down)
|
||||
case .vertical:
|
||||
thePoolVertical.selectNewNeighborColumn(direction: .right)
|
||||
@unknown default:
|
||||
return false
|
||||
}
|
||||
updateDisplay()
|
||||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showPreviousPage() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == 0)
|
||||
|| (currentLayout == .vertical && thePoolVertical.currentColumnNumber == 0)
|
||||
{
|
||||
return highlightPreviousCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
for _ in 0..<thePoolHorizontal.maximumRowsPerPage {
|
||||
|
@ -124,20 +154,12 @@ public class CtlCandidateTDKBackports: CtlCandidate {
|
|||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showNextLine() -> Bool {
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
thePoolHorizontal.selectNewNeighborRow(direction: .down)
|
||||
case .vertical:
|
||||
thePoolVertical.selectNewNeighborColumn(direction: .right)
|
||||
@unknown default:
|
||||
return false
|
||||
}
|
||||
updateDisplay()
|
||||
return true
|
||||
}
|
||||
|
||||
@discardableResult override public func showPreviousLine() -> Bool {
|
||||
if (currentLayout == .horizontal && thePoolHorizontal.currentRowNumber == 0)
|
||||
|| (currentLayout == .vertical && thePoolVertical.currentColumnNumber == 0)
|
||||
{
|
||||
return highlightPreviousCandidate()
|
||||
}
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
thePoolHorizontal.selectNewNeighborRow(direction: .up)
|
||||
|
@ -153,8 +175,18 @@ public class CtlCandidateTDKBackports: CtlCandidate {
|
|||
@discardableResult override public func highlightNextCandidate() -> Bool {
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
if thePoolHorizontal.highlightedIndex == thePoolHorizontal.candidateDataAll.count - 1 {
|
||||
thePoolHorizontal.highlightHorizontal(at: 0)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolHorizontal.highlightHorizontal(at: thePoolHorizontal.highlightedIndex + 1)
|
||||
case .vertical:
|
||||
if thePoolVertical.highlightedIndex == thePoolVertical.candidateDataAll.count - 1 {
|
||||
thePoolVertical.highlightVertical(at: 0)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolVertical.highlightVertical(at: thePoolVertical.highlightedIndex + 1)
|
||||
@unknown default:
|
||||
return false
|
||||
|
@ -166,8 +198,18 @@ public class CtlCandidateTDKBackports: CtlCandidate {
|
|||
@discardableResult override public func highlightPreviousCandidate() -> Bool {
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
if thePoolHorizontal.highlightedIndex == 0 {
|
||||
thePoolHorizontal.highlightHorizontal(at: thePoolHorizontal.candidateDataAll.count - 1)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolHorizontal.highlightHorizontal(at: thePoolHorizontal.highlightedIndex - 1)
|
||||
case .vertical:
|
||||
if thePoolVertical.highlightedIndex == 0 {
|
||||
thePoolVertical.highlightVertical(at: thePoolVertical.candidateDataAll.count - 1)
|
||||
delegate?.buzz()
|
||||
break
|
||||
}
|
||||
thePoolVertical.highlightVertical(at: thePoolVertical.highlightedIndex - 1)
|
||||
@unknown default:
|
||||
return false
|
||||
|
@ -181,11 +223,11 @@ public class CtlCandidateTDKBackports: CtlCandidate {
|
|||
case .horizontal:
|
||||
let currentRow = thePoolHorizontal.candidateRows[thePoolHorizontal.currentRowNumber]
|
||||
let actualID = max(0, min(id, currentRow.count - 1))
|
||||
return thePoolHorizontal.candidateRows[thePoolHorizontal.currentRowNumber][actualID].index
|
||||
return currentRow[actualID].index
|
||||
case .vertical:
|
||||
let currentColumn = thePoolVertical.candidateColumns[thePoolVertical.currentColumnNumber]
|
||||
let actualID = max(0, min(id, currentColumn.count - 1))
|
||||
return thePoolVertical.candidateColumns[thePoolVertical.currentColumnNumber][actualID].index
|
||||
return currentColumn[actualID].index
|
||||
@unknown default:
|
||||
return 0
|
||||
}
|
||||
|
|
|
@ -222,7 +222,7 @@ extension KeyHandler {
|
|||
}
|
||||
}
|
||||
|
||||
// MARK: 聯想詞處理 (Associated Phrases)
|
||||
// MARK: 聯想詞處理 (Associated Phrases) 以及標準選字處理
|
||||
|
||||
if state.type == .ofAssociates {
|
||||
if !input.isShiftHold { return false }
|
||||
|
|
|
@ -610,12 +610,12 @@ public enum LMMgr {
|
|||
group.notify(queue: DispatchQueue.main) {}
|
||||
}
|
||||
|
||||
public static func bleachSpecifiedSuggestions(target: String, mode: Shared.InputMode) {
|
||||
public static func bleachSpecifiedSuggestions(targets: [String], mode: Shared.InputMode) {
|
||||
switch mode {
|
||||
case .imeModeCHS:
|
||||
Self.uomCHT.bleachSpecifiedSuggestions(target: target, saveCallback: { Self.uomCHT.saveData() })
|
||||
Self.uomCHT.bleachSpecifiedSuggestions(targets: targets, saveCallback: { Self.uomCHT.saveData() })
|
||||
case .imeModeCHT:
|
||||
Self.uomCHS.bleachSpecifiedSuggestions(target: target, saveCallback: { Self.uomCHS.saveData() })
|
||||
Self.uomCHS.bleachSpecifiedSuggestions(targets: targets, saveCallback: { Self.uomCHS.saveData() })
|
||||
case .imeModeNULL:
|
||||
break
|
||||
}
|
||||
|
|
|
@ -13,11 +13,11 @@ import Shared
|
|||
extension PrefMgr {
|
||||
public func fixOddPreferences() {
|
||||
// macOS 10.15 開始才能使用 SwiftUI 構建的田所選字窗。
|
||||
if #unavailable(macOS 10.15) { useIMKCandidateWindow = true }
|
||||
if #unavailable(macOS 10.15) {
|
||||
useIMKCandidateWindow = true
|
||||
handleDefaultCandidateFontsByLangIdentifier = false
|
||||
shiftKeyAccommodationBehavior = 0
|
||||
disableShiftTogglingAlphanumericalMode = false
|
||||
disableShiftTogglingAlphanumericalMode = true
|
||||
togglingAlphanumericalModeWithLShift = false
|
||||
}
|
||||
// 自動糾正選字鍵 (利用其 didSet 特性)
|
||||
|
|
|
@ -68,6 +68,7 @@ class SessionCtl: IMKInputController {
|
|||
var state: IMEStateProtocol = IMEState.ofEmpty() {
|
||||
didSet {
|
||||
vCLog("Current State: \(state.type.rawValue)")
|
||||
setKeyLayout()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,7 +135,7 @@ extension SessionCtl {
|
|||
/// 指定鍵盤佈局。
|
||||
func setKeyLayout() {
|
||||
guard let client = client() else { return }
|
||||
if isASCIIMode, IMKHelper.isDynamicBasicKeyboardLayoutEnabled {
|
||||
if (isASCIIMode && IMKHelper.isDynamicBasicKeyboardLayoutEnabled) || state.isCandidateContainer {
|
||||
client.overrideKeyboard(withKeyboardNamed: PrefMgr.shared.alphanumericalKeyboardLayout)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -43,8 +43,8 @@ extension SessionCtl: KeyHandlerDelegate {
|
|||
let rawPair = state.data.userPhraseKVPair
|
||||
let valueCurrent = rawPair.1
|
||||
let valueReversed = ChineseConverter.crossConvert(rawPair.1)
|
||||
LMMgr.bleachSpecifiedSuggestions(target: valueCurrent, mode: IMEApp.currentInputMode)
|
||||
LMMgr.bleachSpecifiedSuggestions(target: valueReversed, mode: IMEApp.currentInputMode.reversed)
|
||||
LMMgr.bleachSpecifiedSuggestions(targets: [valueCurrent], mode: IMEApp.currentInputMode)
|
||||
LMMgr.bleachSpecifiedSuggestions(targets: [valueReversed], mode: IMEApp.currentInputMode.reversed)
|
||||
// 清詞完畢
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ extension SessionCtl {
|
|||
action: #selector(openUserDataFolder(_:)), keyEquivalent: ""
|
||||
)
|
||||
menu.addItem(
|
||||
withTitle: NSLocalizedString("Edit User Phrases…", comment: ""),
|
||||
withTitle: NSLocalizedString("Edit vChewing User Phrases…", comment: ""),
|
||||
action: #selector(openUserPhrases(_:)), keyEquivalent: ""
|
||||
)
|
||||
menu.addItem(
|
||||
|
|
|
@ -225,7 +225,7 @@ struct suiPrefPaneKeyboard: View {
|
|||
HStack {
|
||||
Text(
|
||||
NSLocalizedString(
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only.",
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only.",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"NotificationSwitchON" = "✔ ON";
|
||||
"NotificationSwitchOFF" = "✘ OFF";
|
||||
"NotificationSwitchASCII" = "↺ Switched";
|
||||
"Edit User Phrases…" = "Edit User Phrases…";
|
||||
"Edit vChewing User Phrases…" = "Edit vChewing User Phrases…";
|
||||
"Reload User Phrases" = "Reload User Phrases";
|
||||
"Unable to create the user phrase file." = "Unable to create the user phrase file.";
|
||||
"Please check the permission at \"%@\"." = "Please check the permission at \"%@\".";
|
||||
|
@ -144,7 +144,7 @@
|
|||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||
"Choose the behavior of Shift+Letter key with letter inputs." = "Choose the behavior of Shift+Letter key with letter inputs.";
|
||||
"Choose the cursor position where you want to list possible candidates." = "Choose the cursor position where you want to list possible candidates.";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only." = "Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only.";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only." = "Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only.";
|
||||
"Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only." = "Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only.";
|
||||
"Choose the phonetic layout for Mandarin parser." = "Choose the phonetic layout for Mandarin parser.";
|
||||
"Choose your desired user data folder path. Will be omitted if invalid." = "Choose your desired user data folder path. Will be omitted if invalid.";
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"NotificationSwitchON" = "✔ ON";
|
||||
"NotificationSwitchOFF" = "✘ OFF";
|
||||
"NotificationSwitchASCII" = "↺ Switched";
|
||||
"Edit User Phrases…" = "Edit User Phrases…";
|
||||
"Edit vChewing User Phrases…" = "Edit vChewing User Phrases…";
|
||||
"Reload User Phrases" = "Reload User Phrases";
|
||||
"Unable to create the user phrase file." = "Unable to create the user phrase file.";
|
||||
"Please check the permission at \"%@\"." = "Please check the permission at \"%@\".";
|
||||
|
@ -144,7 +144,7 @@
|
|||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||
"Choose the behavior of Shift+Letter key with letter inputs." = "Choose the behavior of Shift+Letter key with letter inputs.";
|
||||
"Choose the cursor position where you want to list possible candidates." = "Choose the cursor position where you want to list possible candidates.";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only." = "Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only.";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only." = "Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only.";
|
||||
"Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only." = "Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only.";
|
||||
"Choose the phonetic layout for Mandarin parser." = "Choose the phonetic layout for Mandarin parser.";
|
||||
"Choose your desired user data folder path. Will be omitted if invalid." = "Choose your desired user data folder path. Will be omitted if invalid.";
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"NotificationSwitchON" = "✔ 機能起動";
|
||||
"NotificationSwitchOFF" = "✘ 機能停止";
|
||||
"NotificationSwitchASCII" = "↺ 切替完了";
|
||||
"Edit User Phrases…" = "ユーザー辞書を編集…";
|
||||
"Edit vChewing User Phrases…" = "威注音ユーザー辞書を編集…";
|
||||
"Reload User Phrases" = "ユーザー辞書を再び読込む";
|
||||
"Unable to create the user phrase file." = "ユーザー辞書ファイルの作成は失敗しました。";
|
||||
"Please check the permission at \"%@\"." = "「%@」に書き出す権限は不足らしい。";
|
||||
|
@ -144,7 +144,7 @@
|
|||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "入力候補陳列での (Shift+)Tab キーの輪番切替対象をご指定ください。";
|
||||
"Choose the behavior of Shift+Letter key with letter inputs." = "Shift+文字キーの行為をご指定ください。";
|
||||
"Choose the cursor position where you want to list possible candidates." = "カーソルはどこで入力候補を呼び出すかとご指定ださい。";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only." = "macOS 英数キーボード配置をご指定ください。英数入力モードだけに使われる配置である。";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only." = "macOS 英数キーボード配置をご指定ください。文字候補の選択と英数入力モードだけに使われる配置である。";
|
||||
"Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only." = "macOS 基礎キーボード配置をご指定ください。QWERTY 以外の英数キーボードは弁音以外の配列に不適用。";
|
||||
"Choose the phonetic layout for Mandarin parser." = "共通語分析器の注音配列をご指定ください。";
|
||||
"Choose your desired user data folder path. Will be omitted if invalid." = "欲しがるユーザー辞書保存先をご指定ください。無効なる保存先設定は省かれる。";
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"NotificationSwitchON" = "✔ 已启用";
|
||||
"NotificationSwitchOFF" = "✘ 已停用";
|
||||
"NotificationSwitchASCII" = "↺ 切换完毕";
|
||||
"Edit User Phrases…" = "编辑自订语汇…";
|
||||
"Edit vChewing User Phrases…" = "编辑威注音自订语汇…";
|
||||
"Reload User Phrases" = "重载自订语汇";
|
||||
"Unable to create the user phrase file." = "无法创建自订语汇档案。";
|
||||
"Please check the permission at \"%@\"." = "请检查此处的存取权限:\"%@\".";
|
||||
|
@ -144,7 +144,7 @@
|
|||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "指定 (Shift+)Tab 在选字窗内的轮替操作对象。";
|
||||
"Choose the behavior of Shift+Letter key with letter inputs." = "指定 Shift+字母键 的行为。";
|
||||
"Choose the cursor position where you want to list possible candidates." = "请选择用以触发选字的游标相对位置。";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only." = "请选择 macOS 英数键盘布局。该布局仅用于英数输入模式。";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only." = "请选择 macOS 英数键盘布局。该布局仅用于选字窗和英数输入模式。";
|
||||
"Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only." = "请选择 macOS 基础键盘布局。QWERTY 以外的英数布局是为了拼音排列使用者而准备的。";
|
||||
"Choose the phonetic layout for Mandarin parser." = "请指定普通话/国音分析器所使用的注音排列。";
|
||||
"Choose your desired user data folder path. Will be omitted if invalid." = "请在此指定您想指定的使用者语汇档案目录。无效值会被忽略。";
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
"NotificationSwitchON" = "✔ 已啟用";
|
||||
"NotificationSwitchOFF" = "✘ 已停用";
|
||||
"NotificationSwitchASCII" = "↺ 切換完畢";
|
||||
"Edit User Phrases…" = "編輯自訂語彙…";
|
||||
"Edit vChewing User Phrases…" = "編輯威注音自訂語彙…";
|
||||
"Reload User Phrases" = "重載自訂語彙";
|
||||
"Unable to create the user phrase file." = "無法創建自訂語彙檔案。";
|
||||
"Please check the permission at \"%@\"." = "請檢查此處的存取權限:\"%@\".";
|
||||
|
@ -144,7 +144,7 @@
|
|||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "指定 (Shift+)Tab 在選字窗內的輪替操作對象。";
|
||||
"Choose the behavior of Shift+Letter key with letter inputs." = "指定 Shift+字母鍵 的行為。";
|
||||
"Choose the cursor position where you want to list possible candidates." = "請選擇用以觸發選字的游標相對位置。";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for the alphanumerical mode only." = "請選擇 macOS 英數鍵盤佈局。該佈局僅用於英數輸入模式。";
|
||||
"Choose the macOS-level alphanumerical keyboard layout. This setting is for candidate window and the alphanumerical mode only." = "請選擇 macOS 英數鍵盤佈局。該佈局僅用於選字窗和英數輸入模式。";
|
||||
"Choose the macOS-level basic keyboard layout. Non-QWERTY alphanumerical keyboard layouts are for Pinyin parser only." = "請選擇 macOS 基礎鍵盤佈局。QWERTY 以外的英數佈局是為了拼音排列使用者而準備的。";
|
||||
"Choose the phonetic layout for Mandarin parser." = "請指定普通話/國音分析器所使用的注音排列。";
|
||||
"Choose your desired user data folder path. Will be omitted if invalid." = "請在此指定您想指定的使用者語彙檔案目錄。無效值會被忽略。";
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.8.5</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2851</string>
|
||||
<string>2852</string>
|
||||
<key>UpdateInfoEndpoint</key>
|
||||
<string>https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist</string>
|
||||
<key>UpdateInfoSite</key>
|
||||
|
|
|
@ -1272,7 +1272,7 @@
|
|||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
|
@ -1312,7 +1312,7 @@
|
|||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
|
@ -1351,7 +1351,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
|
@ -1404,7 +1404,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
|
@ -1539,7 +1539,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1600,7 +1600,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
|
@ -1648,7 +1648,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
|
@ -1694,7 +1694,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 2851;
|
||||
CURRENT_PROJECT_VERSION = 2852;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
|
|
Loading…
Reference in New Issue