1.6.3 // HotKey Switches, etc. Merge Gitee PR!38 from upd/1.6.3
This commit is contained in:
commit
9cde097c59
|
@ -1 +1 @@
|
||||||
Subproject commit 5560b6d252259f624cd614dfec84b1cfe2e83ec4
|
Subproject commit 924c8f4156edf2f034b45f5f06d488e5e81d351c
|
|
@ -83,12 +83,8 @@ class InputState {
|
||||||
// MARK: -
|
// MARK: -
|
||||||
|
|
||||||
/// Represents that the composing buffer is empty.
|
/// Represents that the composing buffer is empty.
|
||||||
class EmptyIgnoringPreviousState: InputState {
|
class EmptyIgnoringPreviousState: Empty {
|
||||||
var composingBuffer: String {
|
override var description: String {
|
||||||
""
|
|
||||||
}
|
|
||||||
|
|
||||||
var description: String {
|
|
||||||
"<InputState.EmptyIgnoringPreviousState>"
|
"<InputState.EmptyIgnoringPreviousState>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ protocol KeyHandlerDelegate {
|
||||||
|
|
||||||
class KeyHandler {
|
class KeyHandler {
|
||||||
let kEpsilon: Double = 0.000001
|
let kEpsilon: Double = 0.000001
|
||||||
|
let kMaxComposingBufferNeedsToWalkSize: Int = 10
|
||||||
var _composer: Tekkon.Composer = .init()
|
var _composer: Tekkon.Composer = .init()
|
||||||
var _inputMode: String = ""
|
var _inputMode: String = ""
|
||||||
var _languageModel: vChewing.LMInstantiator = .init()
|
var _languageModel: vChewing.LMInstantiator = .init()
|
||||||
|
@ -111,10 +112,21 @@ class KeyHandler {
|
||||||
// Retrieve the most likely grid, i.e. a Maximum Likelihood Estimation
|
// Retrieve the most likely grid, i.e. a Maximum Likelihood Estimation
|
||||||
// of the best possible Mandarin characters given the input syllables,
|
// of the best possible Mandarin characters given the input syllables,
|
||||||
// using the Viterbi algorithm implemented in the Megrez library.
|
// using the Viterbi algorithm implemented in the Megrez library.
|
||||||
// The walk() traces the grid to the end, hence no need to use .reversed() here.
|
// The walk() traces the grid to the end.
|
||||||
_walkedNodes = _builder.walk(
|
_walkedNodes = _builder.walk()
|
||||||
at: _builder.grid.width, nodesLimit: 10, balanced: mgrPrefs.useScoreBalancing
|
|
||||||
)
|
// if DEBUG mode is enabled, a GraphViz file is written to kGraphVizOutputfile.
|
||||||
|
if mgrPrefs.isDebugModeEnabled {
|
||||||
|
let result = _builder.grid.dumpDOT
|
||||||
|
do {
|
||||||
|
try result.write(
|
||||||
|
toFile: "/private/var/tmp/vChewing-visualization.dot",
|
||||||
|
atomically: true, encoding: .utf8
|
||||||
|
)
|
||||||
|
} catch {
|
||||||
|
IME.prtDebugIntel("Failed from writing dumpDOT results.")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var popOverflowComposingTextAndWalk: String {
|
var popOverflowComposingTextAndWalk: String {
|
||||||
|
@ -128,7 +140,7 @@ class KeyHandler {
|
||||||
|
|
||||||
var poppedText = ""
|
var poppedText = ""
|
||||||
if _builder.grid.width > mgrPrefs.composingBufferSize {
|
if _builder.grid.width > mgrPrefs.composingBufferSize {
|
||||||
if _walkedNodes.count > 0 {
|
if !_walkedNodes.isEmpty {
|
||||||
let anchor: Megrez.NodeAnchor = _walkedNodes[0]
|
let anchor: Megrez.NodeAnchor = _walkedNodes[0]
|
||||||
if let theNode = anchor.node {
|
if let theNode = anchor.node {
|
||||||
poppedText = theNode.currentKeyValue.value
|
poppedText = theNode.currentKeyValue.value
|
||||||
|
@ -148,8 +160,8 @@ class KeyHandler {
|
||||||
return arrResult
|
return arrResult
|
||||||
}
|
}
|
||||||
|
|
||||||
func fixNode(value: String) {
|
func fixNode(value: String, respectCursorPushing: Bool = true) {
|
||||||
let cursorIndex: Int = actualCandidateCursorIndex
|
let cursorIndex = min(actualCandidateCursorIndex + (mgrPrefs.useRearCursorMode ? 1 : 0), builderLength)
|
||||||
let selectedNode: Megrez.NodeAnchor = _builder.grid.fixNodeSelectedCandidate(
|
let selectedNode: Megrez.NodeAnchor = _builder.grid.fixNodeSelectedCandidate(
|
||||||
location: cursorIndex, value: value
|
location: cursorIndex, value: value
|
||||||
)
|
)
|
||||||
|
@ -182,7 +194,7 @@ class KeyHandler {
|
||||||
}
|
}
|
||||||
walk()
|
walk()
|
||||||
|
|
||||||
if mgrPrefs.moveCursorAfterSelectingCandidate {
|
if mgrPrefs.moveCursorAfterSelectingCandidate, respectCursorPushing {
|
||||||
var nextPosition = 0
|
var nextPosition = 0
|
||||||
for node in _walkedNodes {
|
for node in _walkedNodes {
|
||||||
if nextPosition >= cursorIndex { break }
|
if nextPosition >= cursorIndex { break }
|
||||||
|
@ -232,7 +244,7 @@ class KeyHandler {
|
||||||
IME.prtDebugIntel(
|
IME.prtDebugIntel(
|
||||||
"UOM: Suggestion retrieved, overriding the node score of the selected candidate.")
|
"UOM: Suggestion retrieved, overriding the node score of the selected candidate.")
|
||||||
_builder.grid.overrideNodeScoreForSelectedCandidate(
|
_builder.grid.overrideNodeScoreForSelectedCandidate(
|
||||||
location: actualCandidateCursorIndex,
|
location: min(actualCandidateCursorIndex + (mgrPrefs.useRearCursorMode ? 1 : 0), builderLength),
|
||||||
value: overrideValue,
|
value: overrideValue,
|
||||||
overridingScore: findHighestScore(nodes: rawNodes, epsilon: kEpsilon)
|
overridingScore: findHighestScore(nodes: rawNodes, epsilon: kEpsilon)
|
||||||
)
|
)
|
||||||
|
@ -297,10 +309,9 @@ class KeyHandler {
|
||||||
|
|
||||||
var rawNodes: [Megrez.NodeAnchor] {
|
var rawNodes: [Megrez.NodeAnchor] {
|
||||||
/// 警告:不要對游標前置風格使用 nodesCrossing,否則會導致游標行為與 macOS 內建注音輸入法不一致。
|
/// 警告:不要對游標前置風格使用 nodesCrossing,否則會導致游標行為與 macOS 內建注音輸入法不一致。
|
||||||
/// 微軟新注音輸入法的游標後置風格也是不允許 nodeCrossing 的,但目前 Megrez 暫時缺乏對該特性的支援。
|
/// 微軟新注音輸入法的游標後置風格也是不允許 nodeCrossing 的。
|
||||||
/// 所以暫時只能將威注音的游標後置風格描述成「跟 Windows 版雅虎奇摩注音一致」。
|
mgrPrefs.useRearCursorMode
|
||||||
mgrPrefs.setRearCursorMode
|
? _builder.grid.nodesBeginningAt(location: actualCandidateCursorIndex)
|
||||||
? _builder.grid.nodesCrossingOrEndingAt(location: actualCandidateCursorIndex)
|
|
||||||
: _builder.grid.nodesEndingAt(location: actualCandidateCursorIndex)
|
: _builder.grid.nodesEndingAt(location: actualCandidateCursorIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -310,10 +310,12 @@ extension KeyHandler {
|
||||||
if mgrPrefs.useSCPCTypingMode {
|
if mgrPrefs.useSCPCTypingMode {
|
||||||
var punctuationNamePrefix = ""
|
var punctuationNamePrefix = ""
|
||||||
|
|
||||||
if input.isOptionHold {
|
if input.isOptionHold && !input.isControlHold {
|
||||||
punctuationNamePrefix = "_alt_punctuation_"
|
punctuationNamePrefix = "_alt_punctuation_"
|
||||||
} else if input.isControlHold {
|
} else if input.isControlHold && !input.isOptionHold {
|
||||||
punctuationNamePrefix = "_ctrl_punctuation_"
|
punctuationNamePrefix = "_ctrl_punctuation_"
|
||||||
|
} else if input.isControlHold && input.isOptionHold {
|
||||||
|
punctuationNamePrefix = "_alt_ctrl_punctuation_"
|
||||||
} else if mgrPrefs.halfWidthPunctuationEnabled {
|
} else if mgrPrefs.halfWidthPunctuationEnabled {
|
||||||
punctuationNamePrefix = "_half_punctuation_"
|
punctuationNamePrefix = "_half_punctuation_"
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
// MARK: - § Handle Input with States.
|
// MARK: - § Handle Input with States.
|
||||||
|
|
||||||
|
@ -237,11 +238,11 @@ extension KeyHandler {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Calling candidate window using Space or Down or PageUp / PageDn.
|
// MARK: Calling candidate window using Up / Down or PageUp / PageDn.
|
||||||
|
|
||||||
if let currentState = state as? InputState.NotEmpty, _composer.isEmpty,
|
if let currentState = state as? InputState.NotEmpty, _composer.isEmpty,
|
||||||
input.isExtraChooseCandidateKey || input.isExtraChooseCandidateKeyReverse || input.isSpace
|
input.isExtraChooseCandidateKey || input.isExtraChooseCandidateKeyReverse || input.isSpace
|
||||||
|| input.isPageDown || input.isPageUp || input.isTab
|
|| input.isPageDown || input.isPageUp || (input.isTab && mgrPrefs.specifyShiftTabKeyBehavior)
|
||||||
|| (input.useVerticalMode && (input.isVerticalModeOnlyChooseCandidateKey))
|
|| (input.useVerticalMode && (input.isVerticalModeOnlyChooseCandidateKey))
|
||||||
{
|
{
|
||||||
if input.isSpace {
|
if input.isSpace {
|
||||||
|
@ -275,6 +276,14 @@ extension KeyHandler {
|
||||||
|
|
||||||
if input.isESC { return handleEsc(state: state, stateCallback: stateCallback, errorCallback: errorCallback) }
|
if input.isESC { return handleEsc(state: state, stateCallback: stateCallback, errorCallback: errorCallback) }
|
||||||
|
|
||||||
|
// MARK: Tab
|
||||||
|
|
||||||
|
if input.isTab {
|
||||||
|
return handleTab(
|
||||||
|
state: state, isShiftHold: input.isShiftHold, stateCallback: stateCallback, errorCallback: errorCallback
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: Cursor backward
|
// MARK: Cursor backward
|
||||||
|
|
||||||
if input.isCursorBackward || input.emacsKey == vChewingEmacsKey.backward {
|
if input.isCursorBackward || input.emacsKey == vChewingEmacsKey.backward {
|
||||||
|
@ -382,10 +391,12 @@ extension KeyHandler {
|
||||||
|
|
||||||
var punctuationNamePrefix = ""
|
var punctuationNamePrefix = ""
|
||||||
|
|
||||||
if input.isOptionHold {
|
if input.isOptionHold && !input.isControlHold {
|
||||||
punctuationNamePrefix = "_alt_punctuation_"
|
punctuationNamePrefix = "_alt_punctuation_"
|
||||||
} else if input.isControlHold {
|
} else if input.isControlHold && !input.isOptionHold {
|
||||||
punctuationNamePrefix = "_ctrl_punctuation_"
|
punctuationNamePrefix = "_ctrl_punctuation_"
|
||||||
|
} else if input.isControlHold && input.isOptionHold {
|
||||||
|
punctuationNamePrefix = "_alt_ctrl_punctuation_"
|
||||||
} else if mgrPrefs.halfWidthPunctuationEnabled {
|
} else if mgrPrefs.halfWidthPunctuationEnabled {
|
||||||
punctuationNamePrefix = "_half_punctuation_"
|
punctuationNamePrefix = "_half_punctuation_"
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -35,19 +35,27 @@ extension KeyHandler {
|
||||||
|
|
||||||
var actualCandidateCursorIndex: Int {
|
var actualCandidateCursorIndex: Int {
|
||||||
var cursorIndex = builderCursorIndex
|
var cursorIndex = builderCursorIndex
|
||||||
// Windows Yahoo Kimo IME style, phrase is *at the rear of* the cursor.
|
switch mgrPrefs.useRearCursorMode {
|
||||||
// (i.e. the cursor is always *before* the phrase.)
|
case false:
|
||||||
// This is different from MS Phonetics IME style ...
|
do {
|
||||||
// ... since Windows Yahoo Kimo allows "node crossing".
|
// macOS built-in Zhuyin style.
|
||||||
if (mgrPrefs.setRearCursorMode
|
// (i.e. the cursor is always in front of the phrase.)
|
||||||
&& (cursorIndex < builderLength))
|
// No crossing.
|
||||||
|| cursorIndex == 0
|
switch cursorIndex {
|
||||||
{
|
case 0: cursorIndex = 1
|
||||||
if cursorIndex == 0, !mgrPrefs.setRearCursorMode {
|
default: break
|
||||||
cursorIndex += keyLengthAtIndexZero
|
}
|
||||||
} else {
|
}
|
||||||
cursorIndex += 1
|
case true:
|
||||||
}
|
do {
|
||||||
|
// Microsoft new phonetics style.
|
||||||
|
// (i.e. the cursor is always at the rear of the phrase.)
|
||||||
|
// No crossing.
|
||||||
|
switch cursorIndex {
|
||||||
|
case builderLength: cursorIndex -= 1
|
||||||
|
default: break
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return cursorIndex
|
return cursorIndex
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ extension KeyHandler {
|
||||||
|
|
||||||
func buildCandidate(
|
func buildCandidate(
|
||||||
state currentState: InputState.NotEmpty,
|
state currentState: InputState.NotEmpty,
|
||||||
useVerticalMode: Bool
|
useVerticalMode: Bool = false
|
||||||
) -> InputState.ChoosingCandidate {
|
) -> InputState.ChoosingCandidate {
|
||||||
InputState.ChoosingCandidate(
|
InputState.ChoosingCandidate(
|
||||||
composingBuffer: currentState.composingBuffer,
|
composingBuffer: currentState.composingBuffer,
|
||||||
|
@ -590,4 +590,105 @@ extension KeyHandler {
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - 處理 Tab 按鍵行為
|
||||||
|
|
||||||
|
func handleTab(
|
||||||
|
state: InputState,
|
||||||
|
isShiftHold: Bool,
|
||||||
|
stateCallback: @escaping (InputState) -> Void,
|
||||||
|
errorCallback: @escaping () -> Void
|
||||||
|
) -> Bool {
|
||||||
|
guard let state = state as? InputState.Inputting else {
|
||||||
|
guard state is InputState.Empty else {
|
||||||
|
IME.prtDebugIntel("6044F081")
|
||||||
|
errorCallback()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// 不妨礙使用者平時輸入 Tab 的需求。
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
guard _composer.isEmpty else {
|
||||||
|
IME.prtDebugIntel("A2DAF7BC")
|
||||||
|
errorCallback()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 此處僅借用該函數生成結果內的某個物件,不用糾結「是否縱排輸入」。
|
||||||
|
let candidates = buildCandidate(state: state).candidates
|
||||||
|
guard !candidates.isEmpty else {
|
||||||
|
IME.prtDebugIntel("3378A6DF")
|
||||||
|
errorCallback()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var length = 0
|
||||||
|
var currentAnchor = Megrez.NodeAnchor()
|
||||||
|
let cursorIndex = min(
|
||||||
|
actualCandidateCursorIndex + (mgrPrefs.useRearCursorMode ? 1 : 0), builderLength
|
||||||
|
)
|
||||||
|
for anchor in _walkedNodes {
|
||||||
|
length += anchor.spanningLength
|
||||||
|
if length >= cursorIndex {
|
||||||
|
currentAnchor = anchor
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let currentNode = currentAnchor.node else {
|
||||||
|
IME.prtDebugIntel("4F2DEC2F")
|
||||||
|
errorCallback()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
let currentValue = currentNode.currentKeyValue.value
|
||||||
|
|
||||||
|
var currentIndex = 0
|
||||||
|
if currentNode.score < currentNode.kSelectedCandidateScore {
|
||||||
|
// Once the user never select a candidate for the node,
|
||||||
|
// we start from the first candidate, so the user has a
|
||||||
|
// chance to use the unigram with two or more characters
|
||||||
|
// when type the tab key for the first time.
|
||||||
|
//
|
||||||
|
// In other words, if a user type two BPMF readings,
|
||||||
|
// but the score of seeing them as two unigrams is higher
|
||||||
|
// than a phrase with two characters, the user can just
|
||||||
|
// use the longer phrase by tapping the tab key.
|
||||||
|
if candidates[0] == currentValue {
|
||||||
|
// If the first candidate is the value of the
|
||||||
|
// current node, we use next one.
|
||||||
|
if isShiftHold {
|
||||||
|
currentIndex = candidates.count - 1
|
||||||
|
} else {
|
||||||
|
currentIndex = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for candidate in candidates {
|
||||||
|
if candidate == currentValue {
|
||||||
|
if isShiftHold {
|
||||||
|
if currentIndex == 0 {
|
||||||
|
currentIndex = candidates.count - 1
|
||||||
|
} else {
|
||||||
|
currentIndex -= 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
currentIndex += 1
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
currentIndex += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if currentIndex >= candidates.count {
|
||||||
|
currentIndex = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fixNode(value: candidates[currentIndex], respectCursorPushing: false)
|
||||||
|
|
||||||
|
stateCallback(buildInputtingState)
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -719,6 +719,10 @@ public struct Tekkon {
|
||||||
consonant.selfReplace("ㄒ", "ㄕ")
|
consonant.selfReplace("ㄒ", "ㄕ")
|
||||||
}
|
}
|
||||||
if vowel == "ㄜ", semivowel.isEmpty { consonant.selfReplace("ㄑ", "ㄔ") }
|
if vowel == "ㄜ", semivowel.isEmpty { consonant.selfReplace("ㄑ", "ㄔ") }
|
||||||
|
if consonant == "ㄏ", semivowel.isEmpty, vowel.isEmpty {
|
||||||
|
consonant = ""
|
||||||
|
vowel = "ㄛ"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 後置修正
|
// 後置修正
|
||||||
|
|
|
@ -308,7 +308,9 @@ extension ctlInputMethod {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if let previous = previous as? InputState.NotEmpty {
|
if let previous = previous as? InputState.NotEmpty,
|
||||||
|
!(state is InputState.EmptyIgnoringPreviousState)
|
||||||
|
{
|
||||||
commit(text: previous.composingBuffer, client: client)
|
commit(text: previous.composingBuffer, client: client)
|
||||||
}
|
}
|
||||||
client.setMarkedText(
|
client.setMarkedText(
|
||||||
|
@ -694,7 +696,7 @@ extension ctlInputMethod: ctlCandidateDelegate {
|
||||||
|
|
||||||
if let state = state as? InputState.ChoosingCandidate {
|
if let state = state as? InputState.ChoosingCandidate {
|
||||||
let selectedValue = state.candidates[Int(index)]
|
let selectedValue = state.candidates[Int(index)]
|
||||||
keyHandler.fixNode(value: selectedValue)
|
keyHandler.fixNode(value: selectedValue, respectCursorPushing: true)
|
||||||
|
|
||||||
let inputting = keyHandler.buildInputtingState
|
let inputting = keyHandler.buildInputtingState
|
||||||
|
|
||||||
|
|
|
@ -44,21 +44,21 @@ extension ctlInputMethod {
|
||||||
|
|
||||||
let useSCPCTypingModeItem = menu.addItem(
|
let useSCPCTypingModeItem = menu.addItem(
|
||||||
withTitle: NSLocalizedString("Per-Char Select Mode", comment: ""),
|
withTitle: NSLocalizedString("Per-Char Select Mode", comment: ""),
|
||||||
action: #selector(toggleSCPCTypingMode(_:)), keyEquivalent: "P"
|
action: #selector(toggleSCPCTypingMode(_:)), keyEquivalent: mgrPrefs.usingHotKeySCPC ? "P" : ""
|
||||||
)
|
)
|
||||||
useSCPCTypingModeItem.keyEquivalentModifierMask = [.command, .control]
|
useSCPCTypingModeItem.keyEquivalentModifierMask = [.command, .control]
|
||||||
useSCPCTypingModeItem.state = mgrPrefs.useSCPCTypingMode.state
|
useSCPCTypingModeItem.state = mgrPrefs.useSCPCTypingMode.state
|
||||||
|
|
||||||
let userAssociatedPhrasesItem = menu.addItem(
|
let userAssociatedPhrasesItem = menu.addItem(
|
||||||
withTitle: NSLocalizedString("Per-Char Associated Phrases", comment: ""),
|
withTitle: NSLocalizedString("Per-Char Associated Phrases", comment: ""),
|
||||||
action: #selector(toggleAssociatedPhrasesEnabled(_:)), keyEquivalent: "O"
|
action: #selector(toggleAssociatedPhrasesEnabled(_:)), keyEquivalent: mgrPrefs.usingHotKeyAssociates ? "O" : ""
|
||||||
)
|
)
|
||||||
userAssociatedPhrasesItem.keyEquivalentModifierMask = [.command, .control]
|
userAssociatedPhrasesItem.keyEquivalentModifierMask = [.command, .control]
|
||||||
userAssociatedPhrasesItem.state = mgrPrefs.associatedPhrasesEnabled.state
|
userAssociatedPhrasesItem.state = mgrPrefs.associatedPhrasesEnabled.state
|
||||||
|
|
||||||
let useCNS11643SupportItem = menu.addItem(
|
let useCNS11643SupportItem = menu.addItem(
|
||||||
withTitle: NSLocalizedString("CNS11643 Mode", comment: ""),
|
withTitle: NSLocalizedString("CNS11643 Mode", comment: ""),
|
||||||
action: #selector(toggleCNS11643Enabled(_:)), keyEquivalent: "L"
|
action: #selector(toggleCNS11643Enabled(_:)), keyEquivalent: mgrPrefs.usingHotKeyCNS ? "L" : ""
|
||||||
)
|
)
|
||||||
useCNS11643SupportItem.keyEquivalentModifierMask = [.command, .control]
|
useCNS11643SupportItem.keyEquivalentModifierMask = [.command, .control]
|
||||||
useCNS11643SupportItem.state = mgrPrefs.cns11643Enabled.state
|
useCNS11643SupportItem.state = mgrPrefs.cns11643Enabled.state
|
||||||
|
@ -66,14 +66,14 @@ extension ctlInputMethod {
|
||||||
if IME.getInputMode() == InputMode.imeModeCHT {
|
if IME.getInputMode() == InputMode.imeModeCHT {
|
||||||
let chineseConversionItem = menu.addItem(
|
let chineseConversionItem = menu.addItem(
|
||||||
withTitle: NSLocalizedString("Force KangXi Writing", comment: ""),
|
withTitle: NSLocalizedString("Force KangXi Writing", comment: ""),
|
||||||
action: #selector(toggleChineseConverter(_:)), keyEquivalent: "K"
|
action: #selector(toggleChineseConverter(_:)), keyEquivalent: mgrPrefs.usingHotKeyKangXi ? "K" : ""
|
||||||
)
|
)
|
||||||
chineseConversionItem.keyEquivalentModifierMask = [.command, .control]
|
chineseConversionItem.keyEquivalentModifierMask = [.command, .control]
|
||||||
chineseConversionItem.state = mgrPrefs.chineseConversionEnabled.state
|
chineseConversionItem.state = mgrPrefs.chineseConversionEnabled.state
|
||||||
|
|
||||||
let shiftJISConversionItem = menu.addItem(
|
let shiftJISConversionItem = menu.addItem(
|
||||||
withTitle: NSLocalizedString("JIS Shinjitai Output", comment: ""),
|
withTitle: NSLocalizedString("JIS Shinjitai Output", comment: ""),
|
||||||
action: #selector(toggleShiftJISShinjitaiOutput(_:)), keyEquivalent: "J"
|
action: #selector(toggleShiftJISShinjitaiOutput(_:)), keyEquivalent: mgrPrefs.usingHotKeyJIS ? "J" : ""
|
||||||
)
|
)
|
||||||
shiftJISConversionItem.keyEquivalentModifierMask = [.command, .control]
|
shiftJISConversionItem.keyEquivalentModifierMask = [.command, .control]
|
||||||
shiftJISConversionItem.state = mgrPrefs.shiftJISShinjitaiOutputEnabled.state
|
shiftJISConversionItem.state = mgrPrefs.shiftJISShinjitaiOutputEnabled.state
|
||||||
|
@ -81,7 +81,7 @@ extension ctlInputMethod {
|
||||||
|
|
||||||
let halfWidthPunctuationItem = menu.addItem(
|
let halfWidthPunctuationItem = menu.addItem(
|
||||||
withTitle: NSLocalizedString("Half-Width Punctuation Mode", comment: ""),
|
withTitle: NSLocalizedString("Half-Width Punctuation Mode", comment: ""),
|
||||||
action: #selector(toggleHalfWidthPunctuation(_:)), keyEquivalent: "H"
|
action: #selector(toggleHalfWidthPunctuation(_:)), keyEquivalent: mgrPrefs.usingHotKeyHalfWidthASCII ? "H" : ""
|
||||||
)
|
)
|
||||||
halfWidthPunctuationItem.keyEquivalentModifierMask = [.command, .control]
|
halfWidthPunctuationItem.keyEquivalentModifierMask = [.command, .control]
|
||||||
halfWidthPunctuationItem.state = mgrPrefs.halfWidthPunctuationEnabled.state
|
halfWidthPunctuationItem.state = mgrPrefs.halfWidthPunctuationEnabled.state
|
||||||
|
|
|
@ -28,7 +28,6 @@ import Cocoa
|
||||||
|
|
||||||
struct UserDef {
|
struct UserDef {
|
||||||
static let kIsDebugModeEnabled = "_DebugMode"
|
static let kIsDebugModeEnabled = "_DebugMode"
|
||||||
static let kUseScoreBalancing = "UseScoreBalancing"
|
|
||||||
static let kMostRecentInputMode = "MostRecentInputMode"
|
static let kMostRecentInputMode = "MostRecentInputMode"
|
||||||
static let kUserDataFolderSpecified = "UserDataFolderSpecified"
|
static let kUserDataFolderSpecified = "UserDataFolderSpecified"
|
||||||
static let kCheckUpdateAutomatically = "CheckUpdateAutomatically"
|
static let kCheckUpdateAutomatically = "CheckUpdateAutomatically"
|
||||||
|
@ -38,7 +37,7 @@ struct UserDef {
|
||||||
static let kCandidateListTextSize = "CandidateListTextSize"
|
static let kCandidateListTextSize = "CandidateListTextSize"
|
||||||
static let kAppleLanguages = "AppleLanguages"
|
static let kAppleLanguages = "AppleLanguages"
|
||||||
static let kShouldAutoReloadUserDataFiles = "ShouldAutoReloadUserDataFiles"
|
static let kShouldAutoReloadUserDataFiles = "ShouldAutoReloadUserDataFiles"
|
||||||
static let kSetRearCursorMode = "SetRearCursorMode"
|
static let kuseRearCursorMode = "useRearCursorMode"
|
||||||
static let kUseHorizontalCandidateList = "UseHorizontalCandidateList"
|
static let kUseHorizontalCandidateList = "UseHorizontalCandidateList"
|
||||||
static let kComposingBufferSize = "ComposingBufferSize"
|
static let kComposingBufferSize = "ComposingBufferSize"
|
||||||
static let kChooseCandidateUsingSpace = "ChooseCandidateUsingSpace"
|
static let kChooseCandidateUsingSpace = "ChooseCandidateUsingSpace"
|
||||||
|
@ -63,6 +62,13 @@ struct UserDef {
|
||||||
|
|
||||||
static let kAssociatedPhrasesEnabled = "AssociatedPhrasesEnabled"
|
static let kAssociatedPhrasesEnabled = "AssociatedPhrasesEnabled"
|
||||||
static let kPhraseReplacementEnabled = "PhraseReplacementEnabled"
|
static let kPhraseReplacementEnabled = "PhraseReplacementEnabled"
|
||||||
|
|
||||||
|
static let kUsingHotKeySCPC = "UsingHotKeySCPC"
|
||||||
|
static let kUsingHotKeyAssociates = "UsingHotKeyAssociates"
|
||||||
|
static let kUsingHotKeyCNS = "UsingHotKeyCNS"
|
||||||
|
static let kUsingHotKeyKangXi = "UsingHotKeyKangXi"
|
||||||
|
static let kUsingHotKeyJIS = "UsingHotKeyJIS"
|
||||||
|
static let kUsingHotKeyHalfWidthASCII = "UsingHotKeyHalfWidthASCII"
|
||||||
}
|
}
|
||||||
|
|
||||||
private let kDefaultCandidateListTextSize: CGFloat = 18
|
private let kDefaultCandidateListTextSize: CGFloat = 18
|
||||||
|
@ -76,8 +82,8 @@ private let kMaxCandidateListTextSize: CGFloat = 196
|
||||||
// will start to sputter beyond 12 such is the algorithmatic complexity
|
// will start to sputter beyond 12 such is the algorithmatic complexity
|
||||||
// of the Viterbi algorithm used in the builder library (at O(N^2))
|
// of the Viterbi algorithm used in the builder library (at O(N^2))
|
||||||
private let kDefaultComposingBufferSize = 20
|
private let kDefaultComposingBufferSize = 20
|
||||||
private let kMinComposingBufferSize = 4
|
private let kMinComposingBufferSize = 10
|
||||||
private let kMaxComposingBufferSize = 30
|
private let kMaxComposingBufferSize = 40
|
||||||
|
|
||||||
private let kDefaultKeys = "123456789"
|
private let kDefaultKeys = "123456789"
|
||||||
|
|
||||||
|
@ -217,49 +223,8 @@ enum MandarinParser: Int {
|
||||||
// MARK: -
|
// MARK: -
|
||||||
|
|
||||||
public enum mgrPrefs {
|
public enum mgrPrefs {
|
||||||
static var allKeys: [String] {
|
|
||||||
[
|
|
||||||
UserDef.kIsDebugModeEnabled,
|
|
||||||
UserDef.kUseScoreBalancing,
|
|
||||||
UserDef.kMostRecentInputMode,
|
|
||||||
UserDef.kUserDataFolderSpecified,
|
|
||||||
UserDef.kMandarinParser,
|
|
||||||
UserDef.kBasicKeyboardLayout,
|
|
||||||
UserDef.kShowPageButtonsInCandidateWindow,
|
|
||||||
UserDef.kCandidateListTextSize,
|
|
||||||
UserDef.kAppleLanguages,
|
|
||||||
UserDef.kShouldAutoReloadUserDataFiles,
|
|
||||||
UserDef.kSetRearCursorMode,
|
|
||||||
UserDef.kUseHorizontalCandidateList,
|
|
||||||
UserDef.kComposingBufferSize,
|
|
||||||
UserDef.kChooseCandidateUsingSpace,
|
|
||||||
UserDef.kCNS11643Enabled,
|
|
||||||
UserDef.kSymbolInputEnabled,
|
|
||||||
UserDef.kChineseConversionEnabled,
|
|
||||||
UserDef.kShiftJISShinjitaiOutputEnabled,
|
|
||||||
UserDef.kHalfWidthPunctuationEnabled,
|
|
||||||
UserDef.kSpecifyShiftTabKeyBehavior,
|
|
||||||
UserDef.kSpecifyShiftSpaceKeyBehavior,
|
|
||||||
UserDef.kEscToCleanInputBuffer,
|
|
||||||
UserDef.kCandidateTextFontName,
|
|
||||||
UserDef.kCandidateKeyLabelFontName,
|
|
||||||
UserDef.kCandidateKeys,
|
|
||||||
UserDef.kMoveCursorAfterSelectingCandidate,
|
|
||||||
UserDef.kPhraseReplacementEnabled,
|
|
||||||
UserDef.kUseSCPCTypingMode,
|
|
||||||
UserDef.kMaxCandidateLength,
|
|
||||||
UserDef.kShouldNotFartInLieuOfBeep,
|
|
||||||
UserDef.kShowHanyuPinyinInCompositionBuffer,
|
|
||||||
UserDef.kInlineDumpPinyinInLieuOfZhuyin,
|
|
||||||
UserDef.kAssociatedPhrasesEnabled,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - 既然 Preferences Module 的預設屬性不自動寫入 plist,那這邊就先寫入了。
|
|
||||||
|
|
||||||
public static func setMissingDefaults() {
|
public static func setMissingDefaults() {
|
||||||
UserDefaults.standard.setDefault(mgrPrefs.isDebugModeEnabled, forKey: UserDef.kIsDebugModeEnabled)
|
UserDefaults.standard.setDefault(mgrPrefs.isDebugModeEnabled, forKey: UserDef.kIsDebugModeEnabled)
|
||||||
UserDefaults.standard.setDefault(mgrPrefs.useScoreBalancing, forKey: UserDef.kUseScoreBalancing)
|
|
||||||
UserDefaults.standard.setDefault(mgrPrefs.mostRecentInputMode, forKey: UserDef.kMostRecentInputMode)
|
UserDefaults.standard.setDefault(mgrPrefs.mostRecentInputMode, forKey: UserDef.kMostRecentInputMode)
|
||||||
UserDefaults.standard.setDefault(mgrPrefs.checkUpdateAutomatically, forKey: UserDef.kCheckUpdateAutomatically)
|
UserDefaults.standard.setDefault(mgrPrefs.checkUpdateAutomatically, forKey: UserDef.kCheckUpdateAutomatically)
|
||||||
UserDefaults.standard.setDefault(
|
UserDefaults.standard.setDefault(
|
||||||
|
@ -280,7 +245,7 @@ public enum mgrPrefs {
|
||||||
UserDefaults.standard.setDefault(mgrPrefs.useSCPCTypingMode, forKey: UserDef.kUseSCPCTypingMode)
|
UserDefaults.standard.setDefault(mgrPrefs.useSCPCTypingMode, forKey: UserDef.kUseSCPCTypingMode)
|
||||||
UserDefaults.standard.setDefault(mgrPrefs.associatedPhrasesEnabled, forKey: UserDef.kAssociatedPhrasesEnabled)
|
UserDefaults.standard.setDefault(mgrPrefs.associatedPhrasesEnabled, forKey: UserDef.kAssociatedPhrasesEnabled)
|
||||||
UserDefaults.standard.setDefault(
|
UserDefaults.standard.setDefault(
|
||||||
mgrPrefs.setRearCursorMode, forKey: UserDef.kSetRearCursorMode
|
mgrPrefs.useRearCursorMode, forKey: UserDef.kuseRearCursorMode
|
||||||
)
|
)
|
||||||
UserDefaults.standard.setDefault(
|
UserDefaults.standard.setDefault(
|
||||||
mgrPrefs.moveCursorAfterSelectingCandidate, forKey: UserDef.kMoveCursorAfterSelectingCandidate
|
mgrPrefs.moveCursorAfterSelectingCandidate, forKey: UserDef.kMoveCursorAfterSelectingCandidate
|
||||||
|
@ -302,15 +267,19 @@ public enum mgrPrefs {
|
||||||
mgrPrefs.inlineDumpPinyinInLieuOfZhuyin, forKey: UserDef.kInlineDumpPinyinInLieuOfZhuyin
|
mgrPrefs.inlineDumpPinyinInLieuOfZhuyin, forKey: UserDef.kInlineDumpPinyinInLieuOfZhuyin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
UserDefaults.standard.setDefault(mgrPrefs.usingHotKeySCPC, forKey: UserDef.kUsingHotKeySCPC)
|
||||||
|
UserDefaults.standard.setDefault(mgrPrefs.usingHotKeyAssociates, forKey: UserDef.kUsingHotKeyAssociates)
|
||||||
|
UserDefaults.standard.setDefault(mgrPrefs.usingHotKeyCNS, forKey: UserDef.kUsingHotKeyCNS)
|
||||||
|
UserDefaults.standard.setDefault(mgrPrefs.usingHotKeyKangXi, forKey: UserDef.kUsingHotKeyKangXi)
|
||||||
|
UserDefaults.standard.setDefault(mgrPrefs.usingHotKeyJIS, forKey: UserDef.kUsingHotKeyJIS)
|
||||||
|
UserDefaults.standard.setDefault(mgrPrefs.usingHotKeyHalfWidthASCII, forKey: UserDef.kUsingHotKeyHalfWidthASCII)
|
||||||
|
|
||||||
UserDefaults.standard.synchronize()
|
UserDefaults.standard.synchronize()
|
||||||
}
|
}
|
||||||
|
|
||||||
@UserDefault(key: UserDef.kIsDebugModeEnabled, defaultValue: false)
|
@UserDefault(key: UserDef.kIsDebugModeEnabled, defaultValue: false)
|
||||||
static var isDebugModeEnabled: Bool
|
static var isDebugModeEnabled: Bool
|
||||||
|
|
||||||
@UserDefault(key: UserDef.kUseScoreBalancing, defaultValue: false)
|
|
||||||
static var useScoreBalancing: Bool
|
|
||||||
|
|
||||||
@UserDefault(key: UserDef.kMostRecentInputMode, defaultValue: "")
|
@UserDefault(key: UserDef.kMostRecentInputMode, defaultValue: "")
|
||||||
static var mostRecentInputMode: String
|
static var mostRecentInputMode: String
|
||||||
|
|
||||||
|
@ -353,8 +322,8 @@ public enum mgrPrefs {
|
||||||
@UserDefault(key: UserDef.kShouldAutoReloadUserDataFiles, defaultValue: true)
|
@UserDefault(key: UserDef.kShouldAutoReloadUserDataFiles, defaultValue: true)
|
||||||
static var shouldAutoReloadUserDataFiles: Bool
|
static var shouldAutoReloadUserDataFiles: Bool
|
||||||
|
|
||||||
@UserDefault(key: UserDef.kSetRearCursorMode, defaultValue: false)
|
@UserDefault(key: UserDef.kuseRearCursorMode, defaultValue: false)
|
||||||
static var setRearCursorMode: Bool
|
static var useRearCursorMode: Bool
|
||||||
|
|
||||||
@UserDefault(key: UserDef.kMoveCursorAfterSelectingCandidate, defaultValue: true)
|
@UserDefault(key: UserDef.kMoveCursorAfterSelectingCandidate, defaultValue: true)
|
||||||
static var moveCursorAfterSelectingCandidate: Bool
|
static var moveCursorAfterSelectingCandidate: Bool
|
||||||
|
@ -554,4 +523,24 @@ public enum mgrPrefs {
|
||||||
UserDefaults.standard.set(associatedPhrasesEnabled, forKey: UserDef.kAssociatedPhrasesEnabled)
|
UserDefaults.standard.set(associatedPhrasesEnabled, forKey: UserDef.kAssociatedPhrasesEnabled)
|
||||||
return associatedPhrasesEnabled
|
return associatedPhrasesEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Keyboard HotKey Enable / Disable
|
||||||
|
|
||||||
|
@UserDefault(key: UserDef.kUsingHotKeySCPC, defaultValue: true)
|
||||||
|
static var usingHotKeySCPC: Bool
|
||||||
|
|
||||||
|
@UserDefault(key: UserDef.kUsingHotKeyAssociates, defaultValue: true)
|
||||||
|
static var usingHotKeyAssociates: Bool
|
||||||
|
|
||||||
|
@UserDefault(key: UserDef.kUsingHotKeyCNS, defaultValue: true)
|
||||||
|
static var usingHotKeyCNS: Bool
|
||||||
|
|
||||||
|
@UserDefault(key: UserDef.kUsingHotKeyKangXi, defaultValue: true)
|
||||||
|
static var usingHotKeyKangXi: Bool
|
||||||
|
|
||||||
|
@UserDefault(key: UserDef.kUsingHotKeyJIS, defaultValue: true)
|
||||||
|
static var usingHotKeyJIS: Bool
|
||||||
|
|
||||||
|
@UserDefault(key: UserDef.kUsingHotKeyHalfWidthASCII, defaultValue: true)
|
||||||
|
static var usingHotKeyHalfWidthASCII: Bool
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,14 +80,10 @@ extension vChewing {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if allowConsolidation {
|
|
||||||
LMConsolidator.fixEOF(path: path)
|
|
||||||
LMConsolidator.consolidate(path: path, pragma: true)
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let rawData = try Data(contentsOf: URL(fileURLWithPath: path))
|
let rawData = try Data(contentsOf: URL(fileURLWithPath: path))
|
||||||
let rawPlist = try PropertyListSerialization.propertyList(from: rawData, format: nil) as! [String: [Data]]
|
let rawPlist: [String: [Data]] =
|
||||||
|
try PropertyListSerialization.propertyList(from: rawData, format: nil) as? [String: [Data]] ?? .init()
|
||||||
rangeMap = rawPlist
|
rangeMap = rawPlist
|
||||||
} catch {
|
} catch {
|
||||||
IME.prtDebugIntel("↑ Exception happened when reading plist file at: \(path).")
|
IME.prtDebugIntel("↑ Exception happened when reading plist file at: \(path).")
|
||||||
|
|
|
@ -47,20 +47,9 @@ extension vChewing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct KeyObservationPair: Equatable {
|
struct KeyObservationPair {
|
||||||
var key: String
|
var key: String
|
||||||
var observation: Observation
|
var observation: Observation
|
||||||
|
|
||||||
var hashValue: Int { key.hashValue }
|
|
||||||
|
|
||||||
init(key: String, observation: Observation) {
|
|
||||||
self.key = key
|
|
||||||
self.observation = observation
|
|
||||||
}
|
|
||||||
|
|
||||||
static func == (lhs: KeyObservationPair, rhs: KeyObservationPair) -> Bool {
|
|
||||||
lhs.key == rhs.key
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Main
|
// MARK: - Main
|
||||||
|
@ -72,10 +61,7 @@ extension vChewing {
|
||||||
let kDecayThreshold: Double = 1.0 / 1_048_576.0
|
let kDecayThreshold: Double = 1.0 / 1_048_576.0
|
||||||
|
|
||||||
public init(capacity: Int = 500, decayConstant: Double = 5400.0) {
|
public init(capacity: Int = 500, decayConstant: Double = 5400.0) {
|
||||||
mutCapacity = abs(capacity) // Ensures that this value is always > 0.
|
mutCapacity = max(capacity, 1) // Ensures that this integer value is always > 0.
|
||||||
if mutCapacity == 0 {
|
|
||||||
mutCapacity = 1
|
|
||||||
}
|
|
||||||
mutDecayExponent = log(0.5) / decayConstant
|
mutDecayExponent = log(0.5) / decayConstant
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,10 +143,7 @@ extension vChewing {
|
||||||
lambda: Double
|
lambda: Double
|
||||||
) -> Double {
|
) -> Double {
|
||||||
let decay = exp((timestamp - eventTimestamp) * lambda)
|
let decay = exp((timestamp - eventTimestamp) * lambda)
|
||||||
if decay < kDecayThreshold {
|
if decay < kDecayThreshold { return 0.0 }
|
||||||
return 0.0
|
|
||||||
}
|
|
||||||
|
|
||||||
let prob = Double(eventCount) / Double(totalCount)
|
let prob = Double(eventCount) / Double(totalCount)
|
||||||
return prob * decay
|
return prob * decay
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
extension Megrez {
|
extension Megrez {
|
||||||
/// 分節讀音槽。
|
/// 分節讀音槽。
|
||||||
public class BlockReadingBuilder {
|
public class BlockReadingBuilder {
|
||||||
/// 該分節讀音曹內可以允許的最大詞長。
|
/// 給被丟掉的節點路徑施加的負權重。
|
||||||
private var mutMaximumBuildSpanLength = 10
|
private let kDroppedPathScore: Double = -999
|
||||||
/// 該分節讀音槽的游標位置。
|
/// 該分節讀音槽的游標位置。
|
||||||
private var mutCursorIndex: Int = 0
|
private var mutCursorIndex: Int = 0
|
||||||
/// 該分節讀音槽的讀音陣列。
|
/// 該分節讀音槽的讀音陣列。
|
||||||
|
@ -37,6 +37,8 @@ extension Megrez {
|
||||||
/// 該分節讀音槽所使用的語言模型。
|
/// 該分節讀音槽所使用的語言模型。
|
||||||
private var mutLM: LanguageModel
|
private var mutLM: LanguageModel
|
||||||
|
|
||||||
|
/// 公開該分節讀音槽內可以允許的最大詞長。
|
||||||
|
public var maxBuildSpanLength: Int { mutGrid.maxBuildSpanLength }
|
||||||
/// 公開:多字讀音鍵當中用以分割漢字讀音的記號,預設為空。
|
/// 公開:多字讀音鍵當中用以分割漢字讀音的記號,預設為空。
|
||||||
public var joinSeparator: String = ""
|
public var joinSeparator: String = ""
|
||||||
/// 公開:該分節讀音槽的游標位置。
|
/// 公開:該分節讀音槽的游標位置。
|
||||||
|
@ -55,11 +57,11 @@ extension Megrez {
|
||||||
/// 分節讀音槽。
|
/// 分節讀音槽。
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - lm: 語言模型。可以是任何基於 Megrez.LanguageModel 的衍生型別。
|
/// - lm: 語言模型。可以是任何基於 Megrez.LanguageModel 的衍生型別。
|
||||||
/// - length: 指定該分節讀音曹內可以允許的最大詞長,預設為 10 字。
|
/// - length: 指定該分節讀音槽內可以允許的最大詞長,預設為 10 字。
|
||||||
/// - separator: 多字讀音鍵當中用以分割漢字讀音的記號,預設為空。
|
/// - separator: 多字讀音鍵當中用以分割漢字讀音的記號,預設為空。
|
||||||
public init(lm: LanguageModel, length: Int = 10, separator: String = "") {
|
public init(lm: LanguageModel, length: Int = 10, separator: String = "") {
|
||||||
mutLM = lm
|
mutLM = lm
|
||||||
mutMaximumBuildSpanLength = length
|
mutGrid = .init(spanLength: abs(length)) // 防呆
|
||||||
joinSeparator = separator
|
joinSeparator = separator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +114,7 @@ extension Megrez {
|
||||||
/// 用於輸入法組字區長度上限處理:
|
/// 用於輸入法組字區長度上限處理:
|
||||||
/// 將該位置要溢出的敲字內容遞交之後、再執行這個函數。
|
/// 將該位置要溢出的敲字內容遞交之後、再執行這個函數。
|
||||||
@discardableResult public func removeHeadReadings(count: Int) -> Bool {
|
@discardableResult public func removeHeadReadings(count: Int) -> Bool {
|
||||||
|
let count = abs(count) // 防呆
|
||||||
if count > length {
|
if count > length {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -120,8 +123,10 @@ extension Megrez {
|
||||||
if mutCursorIndex > 0 {
|
if mutCursorIndex > 0 {
|
||||||
mutCursorIndex -= 1
|
mutCursorIndex -= 1
|
||||||
}
|
}
|
||||||
mutReadings.removeFirst()
|
if !mutReadings.isEmpty {
|
||||||
mutGrid.shrinkGridByOneAt(location: 0)
|
mutReadings.removeFirst()
|
||||||
|
mutGrid.shrinkGridByOneAt(location: 0)
|
||||||
|
}
|
||||||
build()
|
build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,23 +136,22 @@ extension Megrez {
|
||||||
// MARK: - Walker
|
// MARK: - Walker
|
||||||
|
|
||||||
/// 對已給定的軌格按照給定的位置與條件進行正向爬軌。
|
/// 對已給定的軌格按照給定的位置與條件進行正向爬軌。
|
||||||
///
|
|
||||||
/// 其實就是將反向爬軌的結果顛倒順序再給出來而已,省得使用者自己再顛倒一遍。
|
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - at: 開始爬軌的位置。
|
/// - at: 開始爬軌的位置。
|
||||||
/// - score: 給定累計權重,非必填參數。預設值為 0。
|
/// - score: 給定累計權重,非必填參數。預設值為 0。
|
||||||
/// - nodesLimit: 限定最多只爬多少個節點。
|
/// - joinedPhrase: 用以統計累計長詞的內部參數,請勿主動使用。
|
||||||
/// - balanced: 啟用平衡權重,在節點權重的基礎上根據節點幅位長度來加權。
|
/// - longPhrases: 用以統計累計長詞的內部參數,請勿主動使用。
|
||||||
public func walk(
|
public func walk(
|
||||||
at location: Int,
|
at location: Int = 0,
|
||||||
score accumulatedScore: Double = 0.0,
|
score accumulatedScore: Double = 0.0,
|
||||||
nodesLimit: Int = 0,
|
joinedPhrase: String = "",
|
||||||
balanced: Bool = false
|
longPhrases: [String] = .init()
|
||||||
) -> [NodeAnchor] {
|
) -> [NodeAnchor] {
|
||||||
Array(
|
let newLocation = (mutGrid.width) - abs(location) // 防呆
|
||||||
|
return Array(
|
||||||
reverseWalk(
|
reverseWalk(
|
||||||
at: location, score: accumulatedScore,
|
at: newLocation, score: accumulatedScore,
|
||||||
nodesLimit: nodesLimit, balanced: balanced
|
joinedPhrase: joinedPhrase, longPhrases: longPhrases
|
||||||
).reversed())
|
).reversed())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,91 +159,125 @@ extension Megrez {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - at: 開始爬軌的位置。
|
/// - at: 開始爬軌的位置。
|
||||||
/// - score: 給定累計權重,非必填參數。預設值為 0。
|
/// - score: 給定累計權重,非必填參數。預設值為 0。
|
||||||
/// - nodesLimit: 限定最多只爬多少個節點。
|
/// - joinedPhrase: 用以統計累計長詞的內部參數,請勿主動使用。
|
||||||
/// - balanced: 啟用平衡權重,在節點權重的基礎上根據節點幅位長度來加權。
|
/// - longPhrases: 用以統計累計長詞的內部參數,請勿主動使用。
|
||||||
public func reverseWalk(
|
public func reverseWalk(
|
||||||
at location: Int,
|
at location: Int,
|
||||||
score accumulatedScore: Double = 0.0,
|
score accumulatedScore: Double = 0.0,
|
||||||
nodesLimit: Int = 0,
|
joinedPhrase: String = "",
|
||||||
balanced: Bool = false
|
longPhrases: [String] = .init()
|
||||||
) -> [NodeAnchor] {
|
) -> [NodeAnchor] {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
if location == 0 || location > mutGrid.width {
|
if location == 0 || location > mutGrid.width {
|
||||||
return [] as [NodeAnchor]
|
return .init()
|
||||||
}
|
}
|
||||||
|
|
||||||
var paths: [[NodeAnchor]] = []
|
var paths = [[NodeAnchor]]()
|
||||||
var nodes: [NodeAnchor] = mutGrid.nodesEndingAt(location: location)
|
var nodes = mutGrid.nodesEndingAt(location: location)
|
||||||
|
|
||||||
if balanced {
|
nodes = nodes.stableSorted {
|
||||||
nodes.sort {
|
$0.scoreForSort > $1.scoreForSort
|
||||||
$0.balancedScore > $1.balancedScore
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i, n) in nodes.enumerated() {
|
if let nodeOfNodeZero = nodes[0].node, nodeOfNodeZero.score >= nodeOfNodeZero.kSelectedCandidateScore {
|
||||||
// 只檢查前 X 個 NodeAnchor 是否有 node。
|
// 在使用者有選過候選字詞的情況下,摒棄非依此據而成的節點路徑。
|
||||||
// 這裡有 abs 是為了防止有白癡填負數。
|
var nodeZero = nodes[0]
|
||||||
if abs(nodesLimit) > 0, i == abs(nodesLimit) {
|
nodeZero.accumulatedScore = accumulatedScore + nodeOfNodeZero.score
|
||||||
break
|
var path: [NodeAnchor] = reverseWalk(at: location - nodeZero.spanningLength, score: nodeZero.accumulatedScore)
|
||||||
}
|
path.insert(nodeZero, at: 0)
|
||||||
|
|
||||||
var n = n
|
|
||||||
guard let nNode = n.node else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
n.accumulatedScore = accumulatedScore + nNode.score
|
|
||||||
|
|
||||||
// 利用幅位長度來決定權重。
|
|
||||||
// 這樣一來,例:「再見」比「在」與「見」的權重更高。
|
|
||||||
if balanced {
|
|
||||||
n.accumulatedScore += n.additionalWeights
|
|
||||||
}
|
|
||||||
|
|
||||||
var path: [NodeAnchor] = reverseWalk(
|
|
||||||
at: location - n.spanningLength,
|
|
||||||
score: n.accumulatedScore
|
|
||||||
)
|
|
||||||
|
|
||||||
path.insert(n, at: 0)
|
|
||||||
|
|
||||||
paths.append(path)
|
paths.append(path)
|
||||||
|
} else if !longPhrases.isEmpty {
|
||||||
// 始終使用固定的候選字詞
|
var path = [NodeAnchor]()
|
||||||
if balanced, nNode.score >= 0 {
|
for theAnchor in nodes {
|
||||||
break
|
guard let theNode = theAnchor.node else { continue }
|
||||||
}
|
var theAnchor = theAnchor
|
||||||
}
|
let joinedValue = theNode.currentKeyValue.value + joinedPhrase
|
||||||
|
// 如果只是一堆單漢字的節點組成了同樣的長詞的話,直接棄用這個節點路徑。
|
||||||
if !paths.isEmpty {
|
// 打比方說「八/月/中/秋/山/林/涼」與「八月/中秋/山林/涼」在使用者來看
|
||||||
if var result = paths.first {
|
// 是「結果等價」的,那就扔掉前者。
|
||||||
for value in paths {
|
if longPhrases.contains(joinedValue) {
|
||||||
if let vLast = value.last, let rLast = result.last {
|
theAnchor.accumulatedScore = kDroppedPathScore
|
||||||
if vLast.accumulatedScore > rLast.accumulatedScore {
|
path.insert(theAnchor, at: 0)
|
||||||
result = value
|
paths.append(path)
|
||||||
}
|
continue
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result
|
theAnchor.accumulatedScore = accumulatedScore + theNode.score
|
||||||
|
if joinedValue.count >= longPhrases[0].count {
|
||||||
|
path = reverseWalk(
|
||||||
|
at: location - theAnchor.spanningLength, score: theAnchor.accumulatedScore, joinedPhrase: "",
|
||||||
|
longPhrases: .init()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
path = reverseWalk(
|
||||||
|
at: location - theAnchor.spanningLength, score: theAnchor.accumulatedScore, joinedPhrase: joinedValue,
|
||||||
|
longPhrases: longPhrases
|
||||||
|
)
|
||||||
|
}
|
||||||
|
path.insert(theAnchor, at: 0)
|
||||||
|
paths.append(path)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 看看當前格位有沒有更長的候選字詞。
|
||||||
|
var longPhrases = [String]()
|
||||||
|
for theAnchor in nodes {
|
||||||
|
guard let theNode = theAnchor.node else { continue }
|
||||||
|
if theAnchor.spanningLength > 1 {
|
||||||
|
longPhrases.append(theNode.currentKeyValue.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
longPhrases = longPhrases.stableSorted {
|
||||||
|
$0.count > $1.count
|
||||||
|
}
|
||||||
|
for theAnchor in nodes {
|
||||||
|
var theAnchor = theAnchor
|
||||||
|
guard let theNode = theAnchor.node else { continue }
|
||||||
|
theAnchor.accumulatedScore = accumulatedScore + theNode.score
|
||||||
|
var path = [NodeAnchor]()
|
||||||
|
if theAnchor.spanningLength > 1 {
|
||||||
|
path = reverseWalk(
|
||||||
|
at: location - theAnchor.spanningLength, score: theAnchor.accumulatedScore, joinedPhrase: "",
|
||||||
|
longPhrases: .init()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
path = reverseWalk(
|
||||||
|
at: location - theAnchor.spanningLength, score: theAnchor.accumulatedScore,
|
||||||
|
joinedPhrase: theNode.currentKeyValue.value, longPhrases: longPhrases
|
||||||
|
)
|
||||||
|
}
|
||||||
|
path.insert(theAnchor, at: 0)
|
||||||
|
paths.append(path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [] as [NodeAnchor]
|
|
||||||
|
guard !paths.isEmpty else {
|
||||||
|
return .init()
|
||||||
|
}
|
||||||
|
|
||||||
|
var result: [NodeAnchor] = paths[0]
|
||||||
|
for neta in paths {
|
||||||
|
if neta.last!.accumulatedScore > result.last!.accumulatedScore {
|
||||||
|
result = neta
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Private functions
|
// MARK: - Private functions
|
||||||
|
|
||||||
private func build() {
|
private func build() {
|
||||||
let itrBegin: Int =
|
let itrBegin: Int =
|
||||||
(mutCursorIndex < mutMaximumBuildSpanLength) ? 0 : mutCursorIndex - mutMaximumBuildSpanLength
|
(mutCursorIndex < maxBuildSpanLength) ? 0 : mutCursorIndex - maxBuildSpanLength
|
||||||
let itrEnd: Int = min(mutCursorIndex + mutMaximumBuildSpanLength, mutReadings.count)
|
let itrEnd: Int = min(mutCursorIndex + maxBuildSpanLength, mutReadings.count)
|
||||||
|
|
||||||
for p in itrBegin..<itrEnd {
|
for p in itrBegin..<itrEnd {
|
||||||
for q in 1..<mutMaximumBuildSpanLength {
|
for q in 1..<maxBuildSpanLength {
|
||||||
if p + q > itrEnd {
|
if p + q > itrEnd {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
let strSlice = mutReadings[p..<(p + q)]
|
let arrSlice = mutReadings[p..<(p + q)]
|
||||||
let combinedReading: String = join(slice: strSlice, separator: joinSeparator)
|
let combinedReading: String = join(slice: arrSlice, separator: joinSeparator)
|
||||||
|
|
||||||
if !mutGrid.hasMatchedNode(location: p, spanningLength: q, key: combinedReading) {
|
if !mutGrid.hasMatchedNode(location: p, spanningLength: q, key: combinedReading) {
|
||||||
let unigrams: [Unigram] = mutLM.unigramsFor(key: combinedReading)
|
let unigrams: [Unigram] = mutLM.unigramsFor(key: combinedReading)
|
||||||
|
@ -252,12 +290,35 @@ extension Megrez {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func join(slice strSlice: ArraySlice<String>, separator: String) -> String {
|
private func join(slice arrSlice: ArraySlice<String>, separator: String) -> String {
|
||||||
var arrResult: [String] = []
|
var arrResult: [String] = []
|
||||||
for value in strSlice {
|
for value in arrSlice {
|
||||||
arrResult.append(value)
|
arrResult.append(value)
|
||||||
}
|
}
|
||||||
return arrResult.joined(separator: separator)
|
return arrResult.joined(separator: separator)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Stable Sort Extension
|
||||||
|
|
||||||
|
// Reference: https://stackoverflow.com/a/50545761/4162914
|
||||||
|
|
||||||
|
extension Sequence {
|
||||||
|
/// Return a stable-sorted collection.
|
||||||
|
///
|
||||||
|
/// - Parameter areInIncreasingOrder: Return nil when two element are equal.
|
||||||
|
/// - Returns: The sorted collection.
|
||||||
|
func stableSorted(
|
||||||
|
by areInIncreasingOrder: (Element, Element) throws -> Bool
|
||||||
|
)
|
||||||
|
rethrows -> [Element]
|
||||||
|
{
|
||||||
|
try enumerated()
|
||||||
|
.sorted { a, b -> Bool in
|
||||||
|
try areInIncreasingOrder(a.element, b.element)
|
||||||
|
|| (a.offset < b.offset && !areInIncreasingOrder(b.element, a.element))
|
||||||
|
}
|
||||||
|
.map(\.element)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -29,16 +29,23 @@ extension Megrez {
|
||||||
/// 幅位陣列。
|
/// 幅位陣列。
|
||||||
private var mutSpans: [Megrez.Span]
|
private var mutSpans: [Megrez.Span]
|
||||||
|
|
||||||
|
/// 該幅位內可以允許的最大詞長。
|
||||||
|
private var mutMaxBuildSpanLength = 10
|
||||||
|
|
||||||
|
/// 公開:該幅位內可以允許的最大詞長。
|
||||||
|
public var maxBuildSpanLength: Int { mutMaxBuildSpanLength }
|
||||||
|
|
||||||
/// 軌格的寬度,也就是其內的幅位陣列當中的幅位數量。
|
/// 軌格的寬度,也就是其內的幅位陣列當中的幅位數量。
|
||||||
var width: Int { mutSpans.count }
|
var width: Int { mutSpans.count }
|
||||||
|
|
||||||
public init() {
|
public init(spanLength: Int = 10) {
|
||||||
|
mutMaxBuildSpanLength = spanLength
|
||||||
mutSpans = [Megrez.Span]()
|
mutSpans = [Megrez.Span]()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 自我清空該軌格的內容。
|
/// 自我清空該軌格的內容。
|
||||||
public func clear() {
|
public func clear() {
|
||||||
mutSpans = [Megrez.Span]()
|
mutSpans.removeAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 往該軌格的指定位置插入指定幅位長度的指定節點。
|
/// 往該軌格的指定位置插入指定幅位長度的指定節點。
|
||||||
|
@ -47,6 +54,8 @@ extension Megrez {
|
||||||
/// - location: 位置。
|
/// - location: 位置。
|
||||||
/// - spanningLength: 給定的幅位長度。
|
/// - spanningLength: 給定的幅位長度。
|
||||||
public func insertNode(node: Node, location: Int, spanningLength: Int) {
|
public func insertNode(node: Node, location: Int, spanningLength: Int) {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
|
let spanningLength = abs(spanningLength) // 防呆
|
||||||
if location >= mutSpans.count {
|
if location >= mutSpans.count {
|
||||||
let diff = location - mutSpans.count + 1
|
let diff = location - mutSpans.count + 1
|
||||||
for _ in 0..<diff {
|
for _ in 0..<diff {
|
||||||
|
@ -62,24 +71,26 @@ extension Megrez {
|
||||||
/// - spanningLength: 給定的幅位長度。
|
/// - spanningLength: 給定的幅位長度。
|
||||||
/// - key: 索引鍵。
|
/// - key: 索引鍵。
|
||||||
public func hasMatchedNode(location: Int, spanningLength: Int, key: String) -> Bool {
|
public func hasMatchedNode(location: Int, spanningLength: Int, key: String) -> Bool {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
|
let spanningLength = abs(spanningLength) // 防呆
|
||||||
if location > mutSpans.count {
|
if location > mutSpans.count {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
let n = mutSpans[location].node(length: spanningLength)
|
let n = mutSpans[location].node(length: spanningLength)
|
||||||
return n == nil ? false : key == n?.key
|
return n != nil && key == n?.key
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 在該軌格的指定位置擴增一個幅位。
|
/// 在該軌格的指定位置擴增一個幅位。
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - location: 位置。
|
/// - location: 位置。
|
||||||
public func expandGridByOneAt(location: Int) {
|
public func expandGridByOneAt(location: Int) {
|
||||||
// 這裡加入 abs 完全是一個防呆設計
|
let location = abs(location) // 防呆
|
||||||
mutSpans.insert(Span(), at: abs(location))
|
mutSpans.insert(Span(), at: location)
|
||||||
if location != 0, abs(location) != mutSpans.count {
|
if location != 0, location != mutSpans.count {
|
||||||
for i in 0..<abs(location) {
|
for i in 0..<location {
|
||||||
// zaps overlapping spans
|
// zaps overlapping spans
|
||||||
mutSpans[i].removeNodeOfLengthGreaterThan(abs(location) - i)
|
mutSpans[i].removeNodeOfLengthGreaterThan(location - i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,6 +99,7 @@ extension Megrez {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - location: 位置。
|
/// - location: 位置。
|
||||||
public func shrinkGridByOneAt(location: Int) {
|
public func shrinkGridByOneAt(location: Int) {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
if location >= mutSpans.count {
|
if location >= mutSpans.count {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -99,11 +111,35 @@ extension Megrez {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 給定位置,枚舉出所有在這個位置開始的節點。
|
||||||
|
/// - Parameters:
|
||||||
|
/// - location: 位置。
|
||||||
|
public func nodesBeginningAt(location: Int) -> [NodeAnchor] {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
|
var results = [NodeAnchor]()
|
||||||
|
if location < mutSpans.count { // 此時 mutSpans 必然不為空
|
||||||
|
let span = mutSpans[location]
|
||||||
|
for i in 1...maxBuildSpanLength {
|
||||||
|
if let np = span.node(length: i) {
|
||||||
|
results.append(
|
||||||
|
NodeAnchor(
|
||||||
|
node: np,
|
||||||
|
location: location,
|
||||||
|
spanningLength: i
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
|
||||||
/// 給定位置,枚舉出所有在這個位置結尾的節點。
|
/// 給定位置,枚舉出所有在這個位置結尾的節點。
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - location: 位置。
|
/// - location: 位置。
|
||||||
public func nodesEndingAt(location: Int) -> [NodeAnchor] {
|
public func nodesEndingAt(location: Int) -> [NodeAnchor] {
|
||||||
var results: [NodeAnchor] = []
|
let location = abs(location) // 防呆
|
||||||
|
var results = [NodeAnchor]()
|
||||||
if !mutSpans.isEmpty, location <= mutSpans.count {
|
if !mutSpans.isEmpty, location <= mutSpans.count {
|
||||||
for i in 0..<location {
|
for i in 0..<location {
|
||||||
let span = mutSpans[i]
|
let span = mutSpans[i]
|
||||||
|
@ -127,7 +163,8 @@ extension Megrez {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - location: 位置。
|
/// - location: 位置。
|
||||||
public func nodesCrossingOrEndingAt(location: Int) -> [NodeAnchor] {
|
public func nodesCrossingOrEndingAt(location: Int) -> [NodeAnchor] {
|
||||||
var results: [NodeAnchor] = []
|
let location = abs(location) // 防呆
|
||||||
|
var results = [NodeAnchor]()
|
||||||
if !mutSpans.isEmpty, location <= mutSpans.count {
|
if !mutSpans.isEmpty, location <= mutSpans.count {
|
||||||
for i in 0..<location {
|
for i in 0..<location {
|
||||||
let span = mutSpans[i]
|
let span = mutSpans[i]
|
||||||
|
@ -157,6 +194,7 @@ extension Megrez {
|
||||||
/// - location: 位置。
|
/// - location: 位置。
|
||||||
/// - value: 給定字串。
|
/// - value: 給定字串。
|
||||||
@discardableResult public func fixNodeSelectedCandidate(location: Int, value: String) -> NodeAnchor {
|
@discardableResult public func fixNodeSelectedCandidate(location: Int, value: String) -> NodeAnchor {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
var node = NodeAnchor()
|
var node = NodeAnchor()
|
||||||
for nodeAnchor in nodesCrossingOrEndingAt(location: location) {
|
for nodeAnchor in nodesCrossingOrEndingAt(location: location) {
|
||||||
guard let theNode = nodeAnchor.node else {
|
guard let theNode = nodeAnchor.node else {
|
||||||
|
@ -182,6 +220,7 @@ extension Megrez {
|
||||||
/// - value: 給定字串。
|
/// - value: 給定字串。
|
||||||
/// - overridingScore: 給定權重數值。
|
/// - overridingScore: 給定權重數值。
|
||||||
public func overrideNodeScoreForSelectedCandidate(location: Int, value: String, overridingScore: Double) {
|
public func overrideNodeScoreForSelectedCandidate(location: Int, value: String, overridingScore: Double) {
|
||||||
|
let location = abs(location) // 防呆
|
||||||
for nodeAnchor in nodesCrossingOrEndingAt(location: location) {
|
for nodeAnchor in nodesCrossingOrEndingAt(location: location) {
|
||||||
guard let theNode = nodeAnchor.node else {
|
guard let theNode = nodeAnchor.node else {
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -52,19 +52,9 @@ extension Megrez {
|
||||||
return stream
|
return stream
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 獲取加權量。
|
/// 獲取用來比較的權重。
|
||||||
public var additionalWeights: Double {
|
public var scoreForSort: Double {
|
||||||
(Double(spanningLength) - 1) * 0.75
|
node?.score ?? 0
|
||||||
}
|
|
||||||
|
|
||||||
/// 獲取平衡權重。
|
|
||||||
public var balancedScore: Double {
|
|
||||||
(node?.score ?? 0) + additionalWeights
|
|
||||||
}
|
|
||||||
|
|
||||||
/// 獲取平衡累計權重。
|
|
||||||
public var balancedAccumulatedScore: Double {
|
|
||||||
accumulatedScore + additionalWeights
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ extension Megrez {
|
||||||
/// - node: 節點。
|
/// - node: 節點。
|
||||||
/// - length: 給定的節點長度。
|
/// - length: 給定的節點長度。
|
||||||
mutating func insert(node: Node, length: Int) {
|
mutating func insert(node: Node, length: Int) {
|
||||||
|
let length = abs(length) // 防呆
|
||||||
mutLengthNodeMap[length] = node
|
mutLengthNodeMap[length] = node
|
||||||
if length > mutMaximumLength {
|
if length > mutMaximumLength {
|
||||||
mutMaximumLength = length
|
mutMaximumLength = length
|
||||||
|
@ -57,6 +58,7 @@ extension Megrez {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - length: 給定的節點長度。
|
/// - length: 給定的節點長度。
|
||||||
mutating func removeNodeOfLengthGreaterThan(_ length: Int) {
|
mutating func removeNodeOfLengthGreaterThan(_ length: Int) {
|
||||||
|
let length = abs(length) // 防呆
|
||||||
if length > mutMaximumLength { return }
|
if length > mutMaximumLength { return }
|
||||||
var max = 0
|
var max = 0
|
||||||
var removalList: [Int: Megrez.Node] = [:]
|
var removalList: [Int: Megrez.Node] = [:]
|
||||||
|
@ -79,7 +81,7 @@ extension Megrez {
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - length: 給定的節點長度。
|
/// - length: 給定的節點長度。
|
||||||
public func node(length: Int) -> Node? {
|
public func node(length: Int) -> Node? {
|
||||||
mutLengthNodeMap[length]
|
mutLengthNodeMap[abs(length)] // 防呆
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ extension Megrez {
|
||||||
/// 用來登記「當前選中的單元圖」的索引值的變數。
|
/// 用來登記「當前選中的單元圖」的索引值的變數。
|
||||||
private var mutSelectedUnigramIndex: Int = 0
|
private var mutSelectedUnigramIndex: Int = 0
|
||||||
/// 用來登記要施加給「『被標記為選中狀態』的候選字詞」的複寫權重的數值。
|
/// 用來登記要施加給「『被標記為選中狀態』的候選字詞」的複寫權重的數值。
|
||||||
private let kSelectedCandidateScore: Double = 99
|
public let kSelectedCandidateScore: Double = 99
|
||||||
/// 將當前節點列印成一個字串。
|
/// 將當前節點列印成一個字串。
|
||||||
public var description: String {
|
public var description: String {
|
||||||
"(node,key:\(mutKey),fixed:\(mutCandidateFixed ? "true" : "false"),selected:\(mutSelectedUnigramIndex),\(mutUnigrams))"
|
"(node,key:\(mutKey),fixed:\(mutCandidateFixed ? "true" : "false"),selected:\(mutSelectedUnigramIndex),\(mutUnigrams))"
|
||||||
|
@ -84,7 +84,7 @@ extension Megrez {
|
||||||
$0.score > $1.score
|
$0.score > $1.score
|
||||||
}
|
}
|
||||||
|
|
||||||
if mutUnigrams.count > 0 {
|
if !mutUnigrams.isEmpty {
|
||||||
mutScore = mutUnigrams[0].score
|
mutScore = mutUnigrams[0].score
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,6 +133,7 @@ extension Megrez {
|
||||||
/// - index: 索引位置。
|
/// - index: 索引位置。
|
||||||
/// - fix: 是否將當前解點標記為「候選詞已鎖定」的狀態。
|
/// - fix: 是否將當前解點標記為「候選詞已鎖定」的狀態。
|
||||||
public func selectCandidateAt(index: Int = 0, fix: Bool = false) {
|
public func selectCandidateAt(index: Int = 0, fix: Bool = false) {
|
||||||
|
let index = abs(index)
|
||||||
mutSelectedUnigramIndex = index >= mutUnigrams.count ? 0 : index
|
mutSelectedUnigramIndex = index >= mutUnigrams.count ? 0 : index
|
||||||
mutCandidateFixed = fix
|
mutCandidateFixed = fix
|
||||||
mutScore = kSelectedCandidateScore
|
mutScore = kSelectedCandidateScore
|
||||||
|
@ -152,6 +153,7 @@ extension Megrez {
|
||||||
/// - index: 索引位置。
|
/// - index: 索引位置。
|
||||||
/// - score: 給定權重條件。
|
/// - score: 給定權重條件。
|
||||||
public func selectFloatingCandidateAt(index: Int, score: Double) {
|
public func selectFloatingCandidateAt(index: Int, score: Double) {
|
||||||
|
let index = abs(index) // 防呆
|
||||||
mutSelectedUnigramIndex = index >= mutUnigrams.count ? 0 : index
|
mutSelectedUnigramIndex = index >= mutUnigrams.count ? 0 : index
|
||||||
mutCandidateFixed = false
|
mutCandidateFixed = false
|
||||||
mutScore = score
|
mutScore = score
|
||||||
|
|
|
@ -34,10 +34,16 @@ public class clsSFX: NSObject, NSSoundDelegate {
|
||||||
|
|
||||||
private var currentBeep: NSSound?
|
private var currentBeep: NSSound?
|
||||||
private func beep() {
|
private func beep() {
|
||||||
|
let defaultVolume: Float = 0.4
|
||||||
// Stop existing beep
|
// Stop existing beep
|
||||||
if let beep = currentBeep {
|
if let beep = currentBeep {
|
||||||
if beep.isPlaying {
|
if beep.isPlaying {
|
||||||
|
for i in 1..<30 {
|
||||||
|
beep.volume = (defaultVolume / Float(i))
|
||||||
|
usleep(1000)
|
||||||
|
}
|
||||||
beep.stop()
|
beep.stop()
|
||||||
|
beep.volume = defaultVolume
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Create a new beep sound if possible
|
// Create a new beep sound if possible
|
||||||
|
@ -54,7 +60,7 @@ public class clsSFX: NSObject, NSSoundDelegate {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
beep.delegate = self
|
beep.delegate = self
|
||||||
beep.volume = 0.4
|
beep.volume = defaultVolume
|
||||||
beep.play()
|
beep.play()
|
||||||
currentBeep = beep
|
currentBeep = beep
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,19 +85,19 @@
|
||||||
"Apple Chewing - Dachen" = "Apple Chewing - Dachen";
|
"Apple Chewing - Dachen" = "Apple Chewing - Dachen";
|
||||||
"Apple Chewing - Eten Traditional" = "Apple Chewing - Eten Traditional";
|
"Apple Chewing - Eten Traditional" = "Apple Chewing - Eten Traditional";
|
||||||
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional.";
|
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional.";
|
||||||
"at anyplace else (like Windows Yahoo KeyKey)" = "at anyplace else (like Windows Yahoo KeyKey)";
|
"at the rear of the phrase (like Microsoft New Phonetic)" = "at the rear of the phrase (like Microsoft New Phonetic)";
|
||||||
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "Auto-convert traditional Chinese glyphs to JIS Shinjitai characters";
|
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "Auto-convert traditional Chinese glyphs to JIS Shinjitai characters";
|
||||||
"Auto-convert traditional Chinese glyphs to KangXi characters" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
"Auto-convert traditional Chinese glyphs to KangXi characters" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
||||||
"Automatically reload user data files if changes detected" = "Automatically reload user data files if changes detected";
|
"Automatically reload user data files if changes detected" = "Automatically reload user data files if changes detected";
|
||||||
"Balance the score according to candidate length" = "Balance the score according to candidate length";
|
|
||||||
"Basic Keyboard Layout:" = "Basic Keyboard Layout:";
|
"Basic Keyboard Layout:" = "Basic Keyboard Layout:";
|
||||||
|
"Buffer Limit:" = "Buffer Limit:";
|
||||||
"Candidate Layout:" = "Candidate Layout:";
|
"Candidate Layout:" = "Candidate Layout:";
|
||||||
"Candidate Size:" = "Candidate Size:";
|
"Candidate Size:" = "Candidate Size:";
|
||||||
"Change user interface language (will reboot the IME)." = "Change user interface language (will reboot the IME).";
|
"Change user interface language (will reboot the IME)." = "Change user interface language (will reboot the IME).";
|
||||||
"Check for updates automatically" = "Check for updates automatically";
|
"Check for updates automatically" = "Check for updates automatically";
|
||||||
"Choose candidate font size for better visual clarity." = "Choose candidate font size for better visual clarity.";
|
"Choose candidate font size for better visual clarity." = "Choose candidate font size for better visual clarity.";
|
||||||
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "Choose or hit Enter to confim your prefered keys for selecting candidates.";
|
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "Choose or hit Enter to confim your prefered keys for selecting candidates.";
|
||||||
"Choose the behavior of (Shift+)Space key in the candidate window." = "Choose the behavior of (Shift+)Space key in the candidate window.";
|
"Choose the behavior of (Shift+)Space key with candidates." = "Choose the behavior of (Shift+)Space key with candidates.";
|
||||||
"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+)Tab key in the candidate window." = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||||
"Choose the cursor position where you want to list possible candidates." = "Choose the cursor position where you want to list possible candidates.";
|
"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 basic keyboard layout." = "Choose the macOS-level basic keyboard layout.";
|
"Choose the macOS-level basic keyboard layout." = "Choose the macOS-level basic keyboard layout.";
|
||||||
|
@ -130,6 +130,7 @@
|
||||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||||
"Japanese" = "Japanese";
|
"Japanese" = "Japanese";
|
||||||
"Keyboard" = "Keyboard";
|
"Keyboard" = "Keyboard";
|
||||||
|
"Keyboard Shortcuts:" = "Keyboard Shortcuts:";
|
||||||
"Misc Settings:" = "Misc Settings:";
|
"Misc Settings:" = "Misc Settings:";
|
||||||
"MiTAC" = "MiTAC";
|
"MiTAC" = "MiTAC";
|
||||||
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only.";
|
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only.";
|
||||||
|
@ -145,6 +146,7 @@
|
||||||
"Space & ESC Key:" = "Space & ESC Key:";
|
"Space & ESC Key:" = "Space & ESC Key:";
|
||||||
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
||||||
"Space to +cycle pages, Shift+Space to +cycle candidates" = "Space to +cycle pages, Shift+Space to +cycle candidates";
|
"Space to +cycle pages, Shift+Space to +cycle candidates" = "Space to +cycle pages, Shift+Space to +cycle candidates";
|
||||||
|
"Specify the maximum characters allowed in the composition buffer." = "Specify the maximum characters allowed in the composition buffer.";
|
||||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
"Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
||||||
"Traditional Chinese" = "Traditional Chinese";
|
"Traditional Chinese" = "Traditional Chinese";
|
||||||
"Typing Style:" = "Typing Style:";
|
"Typing Style:" = "Typing Style:";
|
||||||
|
|
|
@ -85,19 +85,19 @@
|
||||||
"Apple Chewing - Dachen" = "Apple Chewing - Dachen";
|
"Apple Chewing - Dachen" = "Apple Chewing - Dachen";
|
||||||
"Apple Chewing - Eten Traditional" = "Apple Chewing - Eten Traditional";
|
"Apple Chewing - Eten Traditional" = "Apple Chewing - Eten Traditional";
|
||||||
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional.";
|
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional.";
|
||||||
"at anyplace else (like Windows Yahoo KeyKey)" = "at anyplace else (like Windows Yahoo KeyKey)";
|
"at the rear of the phrase (like Microsoft New Phonetic)" = "at the rear of the phrase (like Microsoft New Phonetic)";
|
||||||
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "Auto-convert traditional Chinese glyphs to JIS Shinjitai characters";
|
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "Auto-convert traditional Chinese glyphs to JIS Shinjitai characters";
|
||||||
"Auto-convert traditional Chinese glyphs to KangXi characters" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
"Auto-convert traditional Chinese glyphs to KangXi characters" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
||||||
"Automatically reload user data files if changes detected" = "Automatically reload user data files if changes detected";
|
"Automatically reload user data files if changes detected" = "Automatically reload user data files if changes detected";
|
||||||
"Balance the score according to candidate length" = "Balance the score according to candidate length";
|
|
||||||
"Basic Keyboard Layout:" = "Basic Keyboard Layout:";
|
"Basic Keyboard Layout:" = "Basic Keyboard Layout:";
|
||||||
|
"Buffer Limit:" = "Buffer Limit:";
|
||||||
"Candidate Layout:" = "Candidate Layout:";
|
"Candidate Layout:" = "Candidate Layout:";
|
||||||
"Candidate Size:" = "Candidate Size:";
|
"Candidate Size:" = "Candidate Size:";
|
||||||
"Change user interface language (will reboot the IME)." = "Change user interface language (will reboot the IME).";
|
"Change user interface language (will reboot the IME)." = "Change user interface language (will reboot the IME).";
|
||||||
"Check for updates automatically" = "Check for updates automatically";
|
"Check for updates automatically" = "Check for updates automatically";
|
||||||
"Choose candidate font size for better visual clarity." = "Choose candidate font size for better visual clarity.";
|
"Choose candidate font size for better visual clarity." = "Choose candidate font size for better visual clarity.";
|
||||||
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "Choose or hit Enter to confim your prefered keys for selecting candidates.";
|
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "Choose or hit Enter to confim your prefered keys for selecting candidates.";
|
||||||
"Choose the behavior of (Shift+)Space key in the candidate window." = "Choose the behavior of (Shift+)Space key in the candidate window.";
|
"Choose the behavior of (Shift+)Space key with candidates." = "Choose the behavior of (Shift+)Space key with candidates.";
|
||||||
"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+)Tab key in the candidate window." = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||||
"Choose the cursor position where you want to list possible candidates." = "Choose the cursor position where you want to list possible candidates.";
|
"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 basic keyboard layout." = "Choose the macOS-level basic keyboard layout.";
|
"Choose the macOS-level basic keyboard layout." = "Choose the macOS-level basic keyboard layout.";
|
||||||
|
@ -130,6 +130,7 @@
|
||||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||||
"Japanese" = "Japanese";
|
"Japanese" = "Japanese";
|
||||||
"Keyboard" = "Keyboard";
|
"Keyboard" = "Keyboard";
|
||||||
|
"Keyboard Shortcuts:" = "Keyboard Shortcuts:";
|
||||||
"Misc Settings:" = "Misc Settings:";
|
"Misc Settings:" = "Misc Settings:";
|
||||||
"MiTAC" = "MiTAC";
|
"MiTAC" = "MiTAC";
|
||||||
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only.";
|
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only.";
|
||||||
|
@ -145,6 +146,7 @@
|
||||||
"Space & ESC Key:" = "Space & ESC Key:";
|
"Space & ESC Key:" = "Space & ESC Key:";
|
||||||
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
||||||
"Space to +cycle pages, Shift+Space to +cycle candidates" = "Space to +cycle pages, Shift+Space to +cycle candidates";
|
"Space to +cycle pages, Shift+Space to +cycle candidates" = "Space to +cycle pages, Shift+Space to +cycle candidates";
|
||||||
|
"Specify the maximum characters allowed in the composition buffer." = "Specify the maximum characters allowed in the composition buffer.";
|
||||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
"Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
||||||
"Traditional Chinese" = "Traditional Chinese";
|
"Traditional Chinese" = "Traditional Chinese";
|
||||||
"Typing Style:" = "Typing Style:";
|
"Typing Style:" = "Typing Style:";
|
||||||
|
|
|
@ -85,19 +85,19 @@
|
||||||
"Apple Chewing - Dachen" = "Apple 大千注音キーボード";
|
"Apple Chewing - Dachen" = "Apple 大千注音キーボード";
|
||||||
"Apple Chewing - Eten Traditional" = "Apple 倚天傳統キーボード";
|
"Apple Chewing - Eten Traditional" = "Apple 倚天傳統キーボード";
|
||||||
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple 動態注音キーボード (大千と倚天伝統) を使うには、共通語分析器の配列を大千と設定すべきである。";
|
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple 動態注音キーボード (大千と倚天伝統) を使うには、共通語分析器の配列を大千と設定すべきである。";
|
||||||
"at anyplace else (like Windows Yahoo KeyKey)" = "単語の中・後で // Windows Yahoo KeyKey のやり方";
|
"at the rear of the phrase (like Microsoft New Phonetic)" = "単語の後で // Microsoft 新注音入力のやり方";
|
||||||
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "入力した繁体字を日文 JIS 新字体と自動変換";
|
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "入力した繁体字を日文 JIS 新字体と自動変換";
|
||||||
"Auto-convert traditional Chinese glyphs to KangXi characters" = "入力した繁体字を康熙字体と自動変換";
|
"Auto-convert traditional Chinese glyphs to KangXi characters" = "入力した繁体字を康熙字体と自動変換";
|
||||||
"Automatically reload user data files if changes detected" = "ユーザー辞書データの変更を自動検出し、自動的に再読込";
|
"Automatically reload user data files if changes detected" = "ユーザー辞書データの変更を自動検出し、自動的に再読込";
|
||||||
"Balance the score according to candidate length" = "候補文字の長さによる重みの調整";
|
|
||||||
"Basic Keyboard Layout:" = "基礎キーボード:";
|
"Basic Keyboard Layout:" = "基礎キーボード:";
|
||||||
|
"Buffer Limit:" = "緩衝列の容量:";
|
||||||
"Candidate Layout:" = "入力候補陳列の仕様";
|
"Candidate Layout:" = "入力候補陳列の仕様";
|
||||||
"Candidate Size:" = "候補文字の字号:";
|
"Candidate Size:" = "候補文字の字号:";
|
||||||
"Change user interface language (will reboot the IME)." = "アプリ表示用言語をご指定下さい、そして入力アプリは自動的に再起動。";
|
"Change user interface language (will reboot the IME)." = "アプリ表示用言語をご指定下さい、そして入力アプリは自動的に再起動。";
|
||||||
"Check for updates automatically" = "アプリの更新通知を受く";
|
"Check for updates automatically" = "アプリの更新通知を受く";
|
||||||
"Choose candidate font size for better visual clarity." = "入力候補陳列の候補文字の字号をご指定ください。";
|
"Choose candidate font size for better visual clarity." = "入力候補陳列の候補文字の字号をご指定ください。";
|
||||||
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "お好きなる言選り用キー陣列をご指定ください。新しい組み合わせは Enter で効かす。";
|
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "お好きなる言選り用キー陣列をご指定ください。新しい組み合わせは Enter で効かす。";
|
||||||
"Choose the behavior of (Shift+)Space key in the candidate window." = "入力候補陳列での (Shift+)Space キーの輪番切替対象をご指定ください。";
|
"Choose the behavior of (Shift+)Space key with candidates." = "入力候補についての (Shift+)Space キーの輪番切替対象をご指定ください。";
|
||||||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "入力候補陳列での (Shift+)Tab キーの輪番切替対象をご指定ください。";
|
"Choose the behavior of (Shift+)Tab key in the candidate window." = "入力候補陳列での (Shift+)Tab キーの輪番切替対象をご指定ください。";
|
||||||
"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 basic keyboard layout." = "macOS 基礎キーボード配置をご指定ください。";
|
"Choose the macOS-level basic keyboard layout." = "macOS 基礎キーボード配置をご指定ください。";
|
||||||
|
@ -130,6 +130,7 @@
|
||||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "単語の前で // macOS 内蔵注音入力のやり方";
|
"in front of the phrase (like macOS built-in Zhuyin IME)" = "単語の前で // macOS 内蔵注音入力のやり方";
|
||||||
"Japanese" = "和語";
|
"Japanese" = "和語";
|
||||||
"Keyboard" = "配列設定";
|
"Keyboard" = "配列設定";
|
||||||
|
"Keyboard Shortcuts:" = "ショートカット:";
|
||||||
"Misc Settings:" = "他の設定:";
|
"Misc Settings:" = "他の設定:";
|
||||||
"MiTAC" = "神通配列";
|
"MiTAC" = "神通配列";
|
||||||
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外の英数キーボードは漢語弁音以外の配列に不適用。";
|
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外の英数キーボードは漢語弁音以外の配列に不適用。";
|
||||||
|
@ -145,6 +146,7 @@
|
||||||
"Space & ESC Key:" = "ESC と Space:";
|
"Space & ESC Key:" = "ESC と Space:";
|
||||||
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+Space で次のページ、Space で次の候補文字を";
|
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+Space で次のページ、Space で次の候補文字を";
|
||||||
"Space to +cycle pages, Shift+Space to +cycle candidates" = "Space で次のページ、Shift+Space で次の候補文字を";
|
"Space to +cycle pages, Shift+Space to +cycle candidates" = "Space で次のページ、Shift+Space で次の候補文字を";
|
||||||
|
"Specify the maximum characters allowed in the composition buffer." = "緩衝列に入れる文字の数の上限をご指定ください。";
|
||||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "マナーモード // 外すと入力間違った時に変な声が出る";
|
"Stop farting (when typed phonetic combination is invalid, etc.)" = "マナーモード // 外すと入力間違った時に変な声が出る";
|
||||||
"Traditional Chinese" = "繁体中国語";
|
"Traditional Chinese" = "繁体中国語";
|
||||||
"Typing Style:" = "入力習慣:";
|
"Typing Style:" = "入力習慣:";
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"Not Now" = "以后再说";
|
"Not Now" = "以后再说";
|
||||||
"Visit Website" = "前往网站";
|
"Visit Website" = "前往网站";
|
||||||
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "目前使用的威注音官方版本是 %1$@ (%2$@),网路上有更新版本 %3$@ (%4$@) 可供下载。是否要前往威注音网站下载新版来安装?%5$@";
|
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "目前使用的威注音官方版本是 %1$@ (%2$@),网路上有更新版本 %3$@ (%4$@) 可供下载。是否要前往威注音网站下载新版来安装?%5$@";
|
||||||
"Force KangXi Writing" = "康熙繁体字模式";
|
"Force KangXi Writing" = "康熙正体字模式";
|
||||||
"NotificationSwitchON" = "✔ 已启用";
|
"NotificationSwitchON" = "✔ 已启用";
|
||||||
"NotificationSwitchOFF" = "✘ 已停用";
|
"NotificationSwitchOFF" = "✘ 已停用";
|
||||||
"Edit User Phrases…" = "编辑自订语汇…";
|
"Edit User Phrases…" = "编辑自订语汇…";
|
||||||
|
@ -85,19 +85,19 @@
|
||||||
"Apple Chewing - Dachen" = "Apple 大千注音键盘排列";
|
"Apple Chewing - Dachen" = "Apple 大千注音键盘排列";
|
||||||
"Apple Chewing - Eten Traditional" = "Apple 倚天传统键盘排列";
|
"Apple Chewing - Eten Traditional" = "Apple 倚天传统键盘排列";
|
||||||
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple 动态注音键盘布局(大千与倚天)要求普通话/国音分析器得配置为大千排列。";
|
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple 动态注音键盘布局(大千与倚天)要求普通话/国音分析器得配置为大千排列。";
|
||||||
"at anyplace else (like Windows Yahoo KeyKey)" = "将游标置于词语中后方 // Windows 奇摩注音风格";
|
"at the rear of the phrase (like Microsoft New Phonetic)" = "将游标置于词语后方 // Windows 微软新注音风格";
|
||||||
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "自动将繁体中文字转为日文 JIS 新字体";
|
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "自动将繁体中文字转为日文 JIS 新字体";
|
||||||
"Auto-convert traditional Chinese glyphs to KangXi characters" = "自动将繁体中文字转为康熙正体字";
|
"Auto-convert traditional Chinese glyphs to KangXi characters" = "自动将繁体中文字转为康熙正体字";
|
||||||
"Automatically reload user data files if changes detected" = "自动检测并载入使用者语汇档案变更";
|
"Automatically reload user data files if changes detected" = "自动检测并载入使用者语汇档案变更";
|
||||||
"Balance the score according to candidate length" = "按候选字词的长度调整权重";
|
|
||||||
"Basic Keyboard Layout:" = "基础键盘布局:";
|
"Basic Keyboard Layout:" = "基础键盘布局:";
|
||||||
|
"Buffer Limit:" = "组字区容量:";
|
||||||
"Candidate Layout:" = "候选字窗布局:";
|
"Candidate Layout:" = "候选字窗布局:";
|
||||||
"Candidate Size:" = "候选字窗字号:";
|
"Candidate Size:" = "候选字窗字号:";
|
||||||
"Change user interface language (will reboot the IME)." = "变更输入法介面语言,会自动重启输入法。";
|
"Change user interface language (will reboot the IME)." = "变更输入法介面语言,会自动重启输入法。";
|
||||||
"Check for updates automatically" = "自动检查软体更新";
|
"Check for updates automatically" = "自动检查软体更新";
|
||||||
"Choose candidate font size for better visual clarity." = "变更候选字窗的字型大小。";
|
"Choose candidate font size for better visual clarity." = "变更候选字窗的字型大小。";
|
||||||
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "请选择您所偏好的用来选字的按键组合。自订组合需敲 Enter 键生效。";
|
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "请选择您所偏好的用来选字的按键组合。自订组合需敲 Enter 键生效。";
|
||||||
"Choose the behavior of (Shift+)Space key in the candidate window." = "指定 (Shift+)空格键 在选字窗内的轮替操作对象。";
|
"Choose the behavior of (Shift+)Space key with candidates." = "指定 (Shift+)空格键 对候选字词而言的轮替操作对象。";
|
||||||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "指定 (Shift+)Tab 在选字窗内的轮替操作对象。";
|
"Choose the behavior of (Shift+)Tab key in the candidate window." = "指定 (Shift+)Tab 在选字窗内的轮替操作对象。";
|
||||||
"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 basic keyboard layout." = "请选择 macOS 基础键盘布局。";
|
"Choose the macOS-level basic keyboard layout." = "请选择 macOS 基础键盘布局。";
|
||||||
|
@ -131,6 +131,7 @@
|
||||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "将游标置于词语前方 // macOS 内建注音风格";
|
"in front of the phrase (like macOS built-in Zhuyin IME)" = "将游标置于词语前方 // macOS 内建注音风格";
|
||||||
"Japanese" = "和语";
|
"Japanese" = "和语";
|
||||||
"Keyboard" = "键盘";
|
"Keyboard" = "键盘";
|
||||||
|
"Keyboard Shortcuts:" = "键盘快捷键:";
|
||||||
"Misc Settings:" = "杂项:";
|
"Misc Settings:" = "杂项:";
|
||||||
"MiTAC" = "神通排列";
|
"MiTAC" = "神通排列";
|
||||||
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外的英数布局是为了汉语拼音排列使用者而准备的。";
|
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外的英数布局是为了汉语拼音排列使用者而准备的。";
|
||||||
|
@ -146,6 +147,7 @@
|
||||||
"Space & ESC Key:" = "ESC 与空格键:";
|
"Space & ESC Key:" = "ESC 与空格键:";
|
||||||
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+空格键 换下一页,空格键 换选下一个后选字";
|
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+空格键 换下一页,空格键 换选下一个后选字";
|
||||||
"Space to +cycle pages, Shift+Space to +cycle candidates" = "空格键 换下一页,Shift+空格键 换选下一个后选字";
|
"Space to +cycle pages, Shift+Space to +cycle candidates" = "空格键 换下一页,Shift+空格键 换选下一个后选字";
|
||||||
|
"Specify the maximum characters allowed in the composition buffer." = "请指定组字缓冲区内的文字数的上限。";
|
||||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "廉耻模式 // 取消勾选的话,敲错字时会有异音";
|
"Stop farting (when typed phonetic combination is invalid, etc.)" = "廉耻模式 // 取消勾选的话,敲错字时会有异音";
|
||||||
"Traditional Chinese" = "繁体中文";
|
"Traditional Chinese" = "繁体中文";
|
||||||
"Typing Style:" = "输入风格:";
|
"Typing Style:" = "输入风格:";
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"Not Now" = "以後再說";
|
"Not Now" = "以後再說";
|
||||||
"Visit Website" = "前往網站";
|
"Visit Website" = "前往網站";
|
||||||
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "目前使用的威注音官方版本是 %1$@ (%2$@),網路上有更新版本 %3$@ (%4$@) 可供下載。是否要前往威注音網站下載新版來安裝?%5$@";
|
"You're currently using vChewing %@ (%@), a new version %@ (%@) is now available. Do you want to visit vChewing's website to download the version?%@" = "目前使用的威注音官方版本是 %1$@ (%2$@),網路上有更新版本 %3$@ (%4$@) 可供下載。是否要前往威注音網站下載新版來安裝?%5$@";
|
||||||
"Force KangXi Writing" = "康熙繁體字模式";
|
"Force KangXi Writing" = "康熙正體字模式";
|
||||||
"NotificationSwitchON" = "✔ 已啟用";
|
"NotificationSwitchON" = "✔ 已啟用";
|
||||||
"NotificationSwitchOFF" = "✘ 已停用";
|
"NotificationSwitchOFF" = "✘ 已停用";
|
||||||
"Edit User Phrases…" = "編輯自訂語彙…";
|
"Edit User Phrases…" = "編輯自訂語彙…";
|
||||||
|
@ -85,19 +85,19 @@
|
||||||
"Apple Chewing - Dachen" = "Apple 大千注音鍵盤佈局";
|
"Apple Chewing - Dachen" = "Apple 大千注音鍵盤佈局";
|
||||||
"Apple Chewing - Eten Traditional" = "Apple 倚天傳統鍵盤佈局";
|
"Apple Chewing - Eten Traditional" = "Apple 倚天傳統鍵盤佈局";
|
||||||
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple 動態注音鍵盤佈局(大千與倚天)要求普通話/國音分析器得配置為大千排列。";
|
"Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional." = "Apple 動態注音鍵盤佈局(大千與倚天)要求普通話/國音分析器得配置為大千排列。";
|
||||||
"at anyplace else (like Windows Yahoo KeyKey)" = "將游標置於詞語中後方 // Windows 奇摩注音風格";
|
"at the rear of the phrase (like Microsoft New Phonetic)" = "將游標置於詞語後方 // Windows 微軟新注音風格";
|
||||||
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "自動將繁體中文字轉為日文 JIS 新字體";
|
"Auto-convert traditional Chinese glyphs to JIS Shinjitai characters" = "自動將繁體中文字轉為日文 JIS 新字體";
|
||||||
"Auto-convert traditional Chinese glyphs to KangXi characters" = "自動將繁體中文字轉為康熙正體字";
|
"Auto-convert traditional Chinese glyphs to KangXi characters" = "自動將繁體中文字轉為康熙正體字";
|
||||||
"Automatically reload user data files if changes detected" = "自動檢測並載入使用者語彙檔案變更";
|
"Automatically reload user data files if changes detected" = "自動檢測並載入使用者語彙檔案變更";
|
||||||
"Balance the score according to candidate length" = "按候選字詞的長度調整權重";
|
|
||||||
"Basic Keyboard Layout:" = "基礎鍵盤佈局:";
|
"Basic Keyboard Layout:" = "基礎鍵盤佈局:";
|
||||||
|
"Buffer Limit:" = "組字區容量:";
|
||||||
"Candidate Layout:" = "候選字窗佈局:";
|
"Candidate Layout:" = "候選字窗佈局:";
|
||||||
"Candidate Size:" = "候選字窗字號:";
|
"Candidate Size:" = "候選字窗字號:";
|
||||||
"Change user interface language (will reboot the IME)." = "變更輸入法介面語言,會自動重啟輸入法。";
|
"Change user interface language (will reboot the IME)." = "變更輸入法介面語言,會自動重啟輸入法。";
|
||||||
"Check for updates automatically" = "自動檢查軟體更新";
|
"Check for updates automatically" = "自動檢查軟體更新";
|
||||||
"Choose candidate font size for better visual clarity." = "變更候選字窗的字型大小。";
|
"Choose candidate font size for better visual clarity." = "變更候選字窗的字型大小。";
|
||||||
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "請選擇您所偏好的用來選字的按鍵組合。自訂組合需敲 Enter 鍵生效。";
|
"Choose or hit Enter to confim your prefered keys for selecting candidates." = "請選擇您所偏好的用來選字的按鍵組合。自訂組合需敲 Enter 鍵生效。";
|
||||||
"Choose the behavior of (Shift+)Space key in the candidate window." = "指定 (Shift+)空格鍵 在選字窗內的輪替操作對象。";
|
"Choose the behavior of (Shift+)Space key with candidates." = "指定 (Shift+)空格鍵 對候選字詞而言的輪替操作對象。";
|
||||||
"Choose the behavior of (Shift+)Tab key in the candidate window." = "指定 (Shift+)Tab 在選字窗內的輪替操作對象。";
|
"Choose the behavior of (Shift+)Tab key in the candidate window." = "指定 (Shift+)Tab 在選字窗內的輪替操作對象。";
|
||||||
"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 basic keyboard layout." = "請選擇 macOS 基礎鍵盤佈局。";
|
"Choose the macOS-level basic keyboard layout." = "請選擇 macOS 基礎鍵盤佈局。";
|
||||||
|
@ -130,6 +130,7 @@
|
||||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "將游標置於詞語前方 // macOS 內建注音風格";
|
"in front of the phrase (like macOS built-in Zhuyin IME)" = "將游標置於詞語前方 // macOS 內建注音風格";
|
||||||
"Japanese" = "和語";
|
"Japanese" = "和語";
|
||||||
"Keyboard" = "鍵盤";
|
"Keyboard" = "鍵盤";
|
||||||
|
"Keyboard Shortcuts:" = "鍵盤快速鍵:";
|
||||||
"Misc Settings:" = "雜項:";
|
"Misc Settings:" = "雜項:";
|
||||||
"MiTAC" = "神通排列";
|
"MiTAC" = "神通排列";
|
||||||
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外的英數佈局是為了漢語拼音排列使用者而準備的。";
|
"Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外的英數佈局是為了漢語拼音排列使用者而準備的。";
|
||||||
|
@ -145,6 +146,7 @@
|
||||||
"Space & ESC Key:" = "ESC 與空格鍵:";
|
"Space & ESC Key:" = "ESC 與空格鍵:";
|
||||||
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+空格鍵 換下一頁,空格鍵 換選下一個後選字";
|
"Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+空格鍵 換下一頁,空格鍵 換選下一個後選字";
|
||||||
"Space to +cycle pages, Shift+Space to +cycle candidates" = "空格鍵 換下一頁,Shift+空格鍵 換選下一個後選字";
|
"Space to +cycle pages, Shift+Space to +cycle candidates" = "空格鍵 換下一頁,Shift+空格鍵 換選下一個後選字";
|
||||||
|
"Specify the maximum characters allowed in the composition buffer." = "請指定組字緩衝區內的文字數的上限。";
|
||||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "廉恥模式 // 取消勾選的話,敲錯字時會有異音";
|
"Stop farting (when typed phonetic combination is invalid, etc.)" = "廉恥模式 // 取消勾選的話,敲錯字時會有異音";
|
||||||
"Traditional Chinese" = "繁體中文";
|
"Traditional Chinese" = "繁體中文";
|
||||||
"Typing Style:" = "輸入風格:";
|
"Typing Style:" = "輸入風格:";
|
||||||
|
|
|
@ -52,8 +52,7 @@ private class HorizontalCandidateView: NSView {
|
||||||
var result = NSSize.zero
|
var result = NSSize.zero
|
||||||
|
|
||||||
if !elementWidths.isEmpty {
|
if !elementWidths.isEmpty {
|
||||||
result.width = elementWidths.reduce(0, +)
|
result.width = elementWidths.reduce(0, +) + CGFloat(elementWidths.count)
|
||||||
result.width += CGFloat(elementWidths.count)
|
|
||||||
result.height = candidateTextHeight + cellPadding
|
result.height = candidateTextHeight + cellPadding
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
@ -78,7 +77,7 @@ private class HorizontalCandidateView: NSView {
|
||||||
if cellWidth < cellHeight * 1.35 {
|
if cellWidth < cellHeight * 1.35 {
|
||||||
cellWidth = cellHeight * 1.35
|
cellWidth = cellHeight * 1.35
|
||||||
}
|
}
|
||||||
newWidths.append(cellWidth)
|
newWidths.append(round(cellWidth))
|
||||||
}
|
}
|
||||||
elementWidths = newWidths
|
elementWidths = newWidths
|
||||||
}
|
}
|
||||||
|
@ -113,7 +112,7 @@ private class HorizontalCandidateView: NSView {
|
||||||
keyLabelWidth = ceil(labelFontSize)
|
keyLabelWidth = ceil(labelFontSize)
|
||||||
keyLabelHeight = ceil(labelFontSize * 2)
|
keyLabelHeight = ceil(labelFontSize * 2)
|
||||||
candidateTextHeight = ceil(candidateFontSize * 1.20)
|
candidateTextHeight = ceil(candidateFontSize * 1.20)
|
||||||
cellPadding = ceil(biggestSize / 2.0)
|
cellPadding = ceil(biggestSize / 4.0) * 2
|
||||||
}
|
}
|
||||||
|
|
||||||
override func draw(_: NSRect) {
|
override func draw(_: NSRect) {
|
||||||
|
@ -129,8 +128,8 @@ private class HorizontalCandidateView: NSView {
|
||||||
)
|
)
|
||||||
|
|
||||||
var accuWidth: CGFloat = 0
|
var accuWidth: CGFloat = 0
|
||||||
for index in 0..<elementWidths.count {
|
for (index, elementWidth) in elementWidths.enumerated() {
|
||||||
let currentWidth = elementWidths[index]
|
let currentWidth = elementWidth
|
||||||
let rctCandidateArea = NSRect(
|
let rctCandidateArea = NSRect(
|
||||||
x: accuWidth, y: 0.0, width: currentWidth + 1.0,
|
x: accuWidth, y: 0.0, width: currentWidth + 1.0,
|
||||||
height: candidateTextHeight + cellPadding
|
height: candidateTextHeight + cellPadding
|
||||||
|
@ -140,7 +139,7 @@ private class HorizontalCandidateView: NSView {
|
||||||
height: keyLabelHeight * 2.0
|
height: keyLabelHeight * 2.0
|
||||||
)
|
)
|
||||||
let rctCandidatePhrase = NSRect(
|
let rctCandidatePhrase = NSRect(
|
||||||
x: accuWidth + keyLabelWidth - 1, y: cellPadding / 2,
|
x: accuWidth + keyLabelWidth - 1, y: cellPadding / 2 - 1,
|
||||||
width: currentWidth - keyLabelWidth,
|
width: currentWidth - keyLabelWidth,
|
||||||
height: candidateTextHeight
|
height: candidateTextHeight
|
||||||
)
|
)
|
||||||
|
@ -203,8 +202,8 @@ private class HorizontalCandidateView: NSView {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var accuWidth: CGFloat = 0.0
|
var accuWidth: CGFloat = 0.0
|
||||||
for index in 0..<elementWidths.count {
|
for (index, elementWidth) in elementWidths.enumerated() {
|
||||||
let currentWidth = elementWidths[index]
|
let currentWidth = elementWidth
|
||||||
|
|
||||||
if location.x >= accuWidth, location.x <= accuWidth + currentWidth {
|
if location.x >= accuWidth, location.x <= accuWidth + currentWidth {
|
||||||
return UInt(index)
|
return UInt(index)
|
||||||
|
@ -248,7 +247,7 @@ public class ctlCandidateHorizontal: ctlCandidate {
|
||||||
private var candidateView: HorizontalCandidateView
|
private var candidateView: HorizontalCandidateView
|
||||||
private var prevPageButton: NSButton
|
private var prevPageButton: NSButton
|
||||||
private var nextPageButton: NSButton
|
private var nextPageButton: NSButton
|
||||||
private var currentPage: UInt = 0
|
private var currentPageIndex: UInt = 0
|
||||||
|
|
||||||
public init() {
|
public init() {
|
||||||
var contentRect = NSRect(x: 128.0, y: 128.0, width: 0.0, height: 0.0)
|
var contentRect = NSRect(x: 128.0, y: 128.0, width: 0.0, height: 0.0)
|
||||||
|
@ -266,7 +265,7 @@ public class ctlCandidateHorizontal: ctlCandidate {
|
||||||
|
|
||||||
candidateView.wantsLayer = true
|
candidateView.wantsLayer = true
|
||||||
candidateView.layer?.borderColor =
|
candidateView.layer?.borderColor =
|
||||||
NSColor.selectedMenuItemTextColor.withAlphaComponent(0.30).cgColor
|
NSColor.selectedMenuItemTextColor.withAlphaComponent(0.10).cgColor
|
||||||
candidateView.layer?.borderWidth = 1.0
|
candidateView.layer?.borderWidth = 1.0
|
||||||
if #available(macOS 10.13, *) {
|
if #available(macOS 10.13, *) {
|
||||||
candidateView.layer?.cornerRadius = 6.0
|
candidateView.layer?.cornerRadius = 6.0
|
||||||
|
@ -325,14 +324,15 @@ public class ctlCandidateHorizontal: ctlCandidate {
|
||||||
|
|
||||||
override public func reloadData() {
|
override public func reloadData() {
|
||||||
candidateView.highlightedIndex = 0
|
candidateView.highlightedIndex = 0
|
||||||
currentPage = 0
|
currentPageIndex = 0
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
}
|
}
|
||||||
|
|
||||||
override public func showNextPage() -> Bool {
|
override public func showNextPage() -> Bool {
|
||||||
guard delegate != nil else { return false }
|
guard delegate != nil else { return false }
|
||||||
if pageCount == 1 { return highlightNextCandidate() }
|
if pageCount == 1 { return highlightNextCandidate() }
|
||||||
currentPage = (currentPage + 1 >= pageCount) ? 0 : currentPage + 1
|
if currentPageIndex + 1 >= pageCount { clsSFX.beep() }
|
||||||
|
currentPageIndex = (currentPageIndex + 1 >= pageCount) ? 0 : currentPageIndex + 1
|
||||||
candidateView.highlightedIndex = 0
|
candidateView.highlightedIndex = 0
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
return true
|
return true
|
||||||
|
@ -341,7 +341,8 @@ public class ctlCandidateHorizontal: ctlCandidate {
|
||||||
override public func showPreviousPage() -> Bool {
|
override public func showPreviousPage() -> Bool {
|
||||||
guard delegate != nil else { return false }
|
guard delegate != nil else { return false }
|
||||||
if pageCount == 1 { return highlightPreviousCandidate() }
|
if pageCount == 1 { return highlightPreviousCandidate() }
|
||||||
currentPage = (currentPage == 0) ? pageCount - 1 : currentPage - 1
|
if currentPageIndex == 0 { clsSFX.beep() }
|
||||||
|
currentPageIndex = (currentPageIndex == 0) ? pageCount - 1 : currentPageIndex - 1
|
||||||
candidateView.highlightedIndex = 0
|
candidateView.highlightedIndex = 0
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
return true
|
return true
|
||||||
|
@ -368,13 +369,13 @@ public class ctlCandidateHorizontal: ctlCandidate {
|
||||||
return UInt.max
|
return UInt.max
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = currentPage * UInt(keyLabels.count) + index
|
let result = currentPageIndex * UInt(keyLabels.count) + index
|
||||||
return result < delegate.candidateCountForController(self) ? result : UInt.max
|
return result < delegate.candidateCountForController(self) ? result : UInt.max
|
||||||
}
|
}
|
||||||
|
|
||||||
override public var selectedCandidateIndex: UInt {
|
override public var selectedCandidateIndex: UInt {
|
||||||
get {
|
get {
|
||||||
currentPage * UInt(keyLabels.count) + candidateView.highlightedIndex
|
currentPageIndex * UInt(keyLabels.count) + candidateView.highlightedIndex
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
guard let delegate = delegate else {
|
guard let delegate = delegate else {
|
||||||
|
@ -382,7 +383,7 @@ public class ctlCandidateHorizontal: ctlCandidate {
|
||||||
}
|
}
|
||||||
let keyLabelCount = UInt(keyLabels.count)
|
let keyLabelCount = UInt(keyLabels.count)
|
||||||
if newValue < delegate.candidateCountForController(self) {
|
if newValue < delegate.candidateCountForController(self) {
|
||||||
currentPage = newValue / keyLabelCount
|
currentPageIndex = newValue / keyLabelCount
|
||||||
candidateView.highlightedIndex = newValue % keyLabelCount
|
candidateView.highlightedIndex = newValue % keyLabelCount
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
}
|
}
|
||||||
|
@ -410,7 +411,7 @@ extension ctlCandidateHorizontal {
|
||||||
let count = delegate.candidateCountForController(self)
|
let count = delegate.candidateCountForController(self)
|
||||||
let keyLabelCount = UInt(keyLabels.count)
|
let keyLabelCount = UInt(keyLabels.count)
|
||||||
|
|
||||||
let begin = currentPage * keyLabelCount
|
let begin = currentPageIndex * keyLabelCount
|
||||||
for index in begin..<min(begin + keyLabelCount, count) {
|
for index in begin..<min(begin + keyLabelCount, count) {
|
||||||
let candidate = delegate.ctlCandidate(self, candidateAtIndex: index)
|
let candidate = delegate.ctlCandidate(self, candidateAtIndex: index)
|
||||||
candidates.append(candidate)
|
candidates.append(candidate)
|
||||||
|
|
|
@ -86,7 +86,7 @@ private class VerticalCandidateView: NSView {
|
||||||
}
|
}
|
||||||
elementWidths = newWidths
|
elementWidths = newWidths
|
||||||
elementHeights = newHeights
|
elementHeights = newHeights
|
||||||
windowWidth = calculatedWindowWidth + cellPadding
|
windowWidth = round(calculatedWindowWidth + cellPadding) // 防止邊框粗細不一
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(setKeyLabelFont:candidateFont:)
|
@objc(setKeyLabelFont:candidateFont:)
|
||||||
|
@ -119,7 +119,7 @@ private class VerticalCandidateView: NSView {
|
||||||
keyLabelWidth = ceil(labelFontSize)
|
keyLabelWidth = ceil(labelFontSize)
|
||||||
keyLabelHeight = ceil(labelFontSize * 2)
|
keyLabelHeight = ceil(labelFontSize * 2)
|
||||||
candidateTextHeight = ceil(candidateFontSize * 1.20)
|
candidateTextHeight = ceil(candidateFontSize * 1.20)
|
||||||
cellPadding = ceil(biggestSize / 2.0)
|
cellPadding = ceil(biggestSize / 4.0) * 2
|
||||||
}
|
}
|
||||||
|
|
||||||
override func draw(_: NSRect) {
|
override func draw(_: NSRect) {
|
||||||
|
@ -135,8 +135,8 @@ private class VerticalCandidateView: NSView {
|
||||||
)
|
)
|
||||||
|
|
||||||
var accuHeight: CGFloat = 0
|
var accuHeight: CGFloat = 0
|
||||||
for index in 0..<elementHeights.count {
|
for (index, elementHeight) in elementHeights.enumerated() {
|
||||||
let currentHeight = elementHeights[index]
|
let currentHeight = elementHeight
|
||||||
let rctCandidateArea = NSRect(
|
let rctCandidateArea = NSRect(
|
||||||
x: 0.0, y: accuHeight, width: windowWidth, height: candidateTextHeight + cellPadding
|
x: 0.0, y: accuHeight, width: windowWidth, height: candidateTextHeight + cellPadding
|
||||||
)
|
)
|
||||||
|
@ -207,8 +207,8 @@ private class VerticalCandidateView: NSView {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var accuHeight: CGFloat = 0.0
|
var accuHeight: CGFloat = 0.0
|
||||||
for index in 0..<elementHeights.count {
|
for (index, elementHeight) in elementHeights.enumerated() {
|
||||||
let currentHeight = elementHeights[index]
|
let currentHeight = elementHeight
|
||||||
|
|
||||||
if location.y >= accuHeight, location.y <= accuHeight + currentHeight {
|
if location.y >= accuHeight, location.y <= accuHeight + currentHeight {
|
||||||
return UInt(index)
|
return UInt(index)
|
||||||
|
@ -252,7 +252,7 @@ public class ctlCandidateVertical: ctlCandidate {
|
||||||
private var candidateView: VerticalCandidateView
|
private var candidateView: VerticalCandidateView
|
||||||
private var prevPageButton: NSButton
|
private var prevPageButton: NSButton
|
||||||
private var nextPageButton: NSButton
|
private var nextPageButton: NSButton
|
||||||
private var currentPage: UInt = 0
|
private var currentPageIndex: UInt = 0
|
||||||
|
|
||||||
public init() {
|
public init() {
|
||||||
var contentRect = NSRect(x: 128.0, y: 128.0, width: 0.0, height: 0.0)
|
var contentRect = NSRect(x: 128.0, y: 128.0, width: 0.0, height: 0.0)
|
||||||
|
@ -270,7 +270,7 @@ public class ctlCandidateVertical: ctlCandidate {
|
||||||
|
|
||||||
candidateView.wantsLayer = true
|
candidateView.wantsLayer = true
|
||||||
candidateView.layer?.borderColor =
|
candidateView.layer?.borderColor =
|
||||||
NSColor.selectedMenuItemTextColor.withAlphaComponent(0.30).cgColor
|
NSColor.selectedMenuItemTextColor.withAlphaComponent(0.10).cgColor
|
||||||
candidateView.layer?.borderWidth = 1.0
|
candidateView.layer?.borderWidth = 1.0
|
||||||
if #available(macOS 10.13, *) {
|
if #available(macOS 10.13, *) {
|
||||||
candidateView.layer?.cornerRadius = 6.0
|
candidateView.layer?.cornerRadius = 6.0
|
||||||
|
@ -329,14 +329,15 @@ public class ctlCandidateVertical: ctlCandidate {
|
||||||
|
|
||||||
override public func reloadData() {
|
override public func reloadData() {
|
||||||
candidateView.highlightedIndex = 0
|
candidateView.highlightedIndex = 0
|
||||||
currentPage = 0
|
currentPageIndex = 0
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
}
|
}
|
||||||
|
|
||||||
override public func showNextPage() -> Bool {
|
override public func showNextPage() -> Bool {
|
||||||
guard delegate != nil else { return false }
|
guard delegate != nil else { return false }
|
||||||
if pageCount == 1 { return highlightNextCandidate() }
|
if pageCount == 1 { return highlightNextCandidate() }
|
||||||
currentPage = (currentPage + 1 >= pageCount) ? 0 : currentPage + 1
|
if currentPageIndex + 1 >= pageCount { clsSFX.beep() }
|
||||||
|
currentPageIndex = (currentPageIndex + 1 >= pageCount) ? 0 : currentPageIndex + 1
|
||||||
candidateView.highlightedIndex = 0
|
candidateView.highlightedIndex = 0
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
return true
|
return true
|
||||||
|
@ -345,7 +346,8 @@ public class ctlCandidateVertical: ctlCandidate {
|
||||||
override public func showPreviousPage() -> Bool {
|
override public func showPreviousPage() -> Bool {
|
||||||
guard delegate != nil else { return false }
|
guard delegate != nil else { return false }
|
||||||
if pageCount == 1 { return highlightPreviousCandidate() }
|
if pageCount == 1 { return highlightPreviousCandidate() }
|
||||||
currentPage = (currentPage == 0) ? pageCount - 1 : currentPage - 1
|
if currentPageIndex == 0 { clsSFX.beep() }
|
||||||
|
currentPageIndex = (currentPageIndex == 0) ? pageCount - 1 : currentPageIndex - 1
|
||||||
candidateView.highlightedIndex = 0
|
candidateView.highlightedIndex = 0
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
return true
|
return true
|
||||||
|
@ -372,13 +374,13 @@ public class ctlCandidateVertical: ctlCandidate {
|
||||||
return UInt.max
|
return UInt.max
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = currentPage * UInt(keyLabels.count) + index
|
let result = currentPageIndex * UInt(keyLabels.count) + index
|
||||||
return result < delegate.candidateCountForController(self) ? result : UInt.max
|
return result < delegate.candidateCountForController(self) ? result : UInt.max
|
||||||
}
|
}
|
||||||
|
|
||||||
override public var selectedCandidateIndex: UInt {
|
override public var selectedCandidateIndex: UInt {
|
||||||
get {
|
get {
|
||||||
currentPage * UInt(keyLabels.count) + candidateView.highlightedIndex
|
currentPageIndex * UInt(keyLabels.count) + candidateView.highlightedIndex
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
guard let delegate = delegate else {
|
guard let delegate = delegate else {
|
||||||
|
@ -386,7 +388,7 @@ public class ctlCandidateVertical: ctlCandidate {
|
||||||
}
|
}
|
||||||
let keyLabelCount = UInt(keyLabels.count)
|
let keyLabelCount = UInt(keyLabels.count)
|
||||||
if newValue < delegate.candidateCountForController(self) {
|
if newValue < delegate.candidateCountForController(self) {
|
||||||
currentPage = newValue / keyLabelCount
|
currentPageIndex = newValue / keyLabelCount
|
||||||
candidateView.highlightedIndex = newValue % keyLabelCount
|
candidateView.highlightedIndex = newValue % keyLabelCount
|
||||||
layoutCandidateView()
|
layoutCandidateView()
|
||||||
}
|
}
|
||||||
|
@ -414,7 +416,7 @@ extension ctlCandidateVertical {
|
||||||
let count = delegate.candidateCountForController(self)
|
let count = delegate.candidateCountForController(self)
|
||||||
let keyLabelCount = UInt(keyLabels.count)
|
let keyLabelCount = UInt(keyLabels.count)
|
||||||
|
|
||||||
let begin = currentPage * keyLabelCount
|
let begin = currentPageIndex * keyLabelCount
|
||||||
for index in begin..<min(begin + keyLabelCount, count) {
|
for index in begin..<min(begin + keyLabelCount, count) {
|
||||||
let candidate = delegate.ctlCandidate(self, candidateAtIndex: index)
|
let candidate = delegate.ctlCandidate(self, candidateAtIndex: index)
|
||||||
candidates.append(candidate)
|
candidates.append(candidate)
|
||||||
|
|
|
@ -35,8 +35,6 @@ struct suiPrefPaneDictionary: View {
|
||||||
@State private var selEnableCNS11643: Bool = UserDefaults.standard.bool(forKey: UserDef.kCNS11643Enabled)
|
@State private var selEnableCNS11643: Bool = UserDefaults.standard.bool(forKey: UserDef.kCNS11643Enabled)
|
||||||
@State private var selEnableSymbolInputSupport: Bool = UserDefaults.standard.bool(
|
@State private var selEnableSymbolInputSupport: Bool = UserDefaults.standard.bool(
|
||||||
forKey: UserDef.kSymbolInputEnabled)
|
forKey: UserDef.kSymbolInputEnabled)
|
||||||
@State private var selUseScoreBalancing: Bool = UserDefaults.standard.bool(
|
|
||||||
forKey: UserDef.kUseScoreBalancing)
|
|
||||||
private let contentWidth: Double = {
|
private let contentWidth: Double = {
|
||||||
switch mgrPrefs.appleLanguages[0] {
|
switch mgrPrefs.appleLanguages[0] {
|
||||||
case "ja":
|
case "ja":
|
||||||
|
@ -128,13 +126,6 @@ struct suiPrefPaneDictionary: View {
|
||||||
mgrPrefs.symbolInputEnabled = value
|
mgrPrefs.symbolInputEnabled = value
|
||||||
mgrLangModel.setSymbolEnabled(value)
|
mgrLangModel.setSymbolEnabled(value)
|
||||||
}
|
}
|
||||||
Toggle(
|
|
||||||
LocalizedStringKey("Balance the score according to candidate length"),
|
|
||||||
isOn: $selUseScoreBalancing
|
|
||||||
)
|
|
||||||
.onChange(of: selUseScoreBalancing) { value in
|
|
||||||
mgrPrefs.useScoreBalancing = value
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ struct suiPrefPaneExperience: View {
|
||||||
(UserDefaults.standard.string(forKey: UserDef.kCandidateKeys) ?? mgrPrefs.defaultCandidateKeys) as String
|
(UserDefaults.standard.string(forKey: UserDef.kCandidateKeys) ?? mgrPrefs.defaultCandidateKeys) as String
|
||||||
@State private var selCursorPosition =
|
@State private var selCursorPosition =
|
||||||
UserDefaults.standard.bool(
|
UserDefaults.standard.bool(
|
||||||
forKey: UserDef.kSetRearCursorMode) ? 1 : 0
|
forKey: UserDef.kuseRearCursorMode) ? 1 : 0
|
||||||
@State private var selPushCursorAfterSelection = UserDefaults.standard.bool(
|
@State private var selPushCursorAfterSelection = UserDefaults.standard.bool(
|
||||||
forKey: UserDef.kMoveCursorAfterSelectingCandidate)
|
forKey: UserDef.kMoveCursorAfterSelectingCandidate)
|
||||||
@State private var selKeyBehaviorShiftTab =
|
@State private var selKeyBehaviorShiftTab =
|
||||||
|
@ -45,6 +45,7 @@ struct suiPrefPaneExperience: View {
|
||||||
@State private var selKeyBehaviorESCForClearingTheBuffer = UserDefaults.standard.bool(
|
@State private var selKeyBehaviorESCForClearingTheBuffer = UserDefaults.standard.bool(
|
||||||
forKey: UserDef.kEscToCleanInputBuffer)
|
forKey: UserDef.kEscToCleanInputBuffer)
|
||||||
@State private var selEnableSCPCTypingMode = UserDefaults.standard.bool(forKey: UserDef.kUseSCPCTypingMode)
|
@State private var selEnableSCPCTypingMode = UserDefaults.standard.bool(forKey: UserDef.kUseSCPCTypingMode)
|
||||||
|
@State private var selComposingBufferSize = UserDefaults.standard.integer(forKey: UserDef.kComposingBufferSize)
|
||||||
private let contentWidth: Double = {
|
private let contentWidth: Double = {
|
||||||
switch mgrPrefs.appleLanguages[0] {
|
switch mgrPrefs.appleLanguages[0] {
|
||||||
case "ja":
|
case "ja":
|
||||||
|
@ -88,12 +89,30 @@ struct suiPrefPaneExperience: View {
|
||||||
)
|
)
|
||||||
.preferenceDescription()
|
.preferenceDescription()
|
||||||
}
|
}
|
||||||
|
Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Buffer Limit:")) }) {
|
||||||
|
Picker("", selection: $selComposingBufferSize) {
|
||||||
|
Text("10").tag(10)
|
||||||
|
Text("15").tag(15)
|
||||||
|
Text("20").tag(20)
|
||||||
|
Text("25").tag(25)
|
||||||
|
Text("30").tag(30)
|
||||||
|
Text("35").tag(35)
|
||||||
|
Text("40").tag(40)
|
||||||
|
}.onChange(of: selComposingBufferSize) { value in
|
||||||
|
mgrPrefs.composingBufferSize = value
|
||||||
|
}
|
||||||
|
.labelsHidden()
|
||||||
|
.horizontalRadioGroupLayout()
|
||||||
|
.pickerStyle(RadioGroupPickerStyle())
|
||||||
|
Text(LocalizedStringKey("Specify the maximum characters allowed in the composition buffer."))
|
||||||
|
.preferenceDescription()
|
||||||
|
}
|
||||||
Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Cursor Selection:")) }) {
|
Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Cursor Selection:")) }) {
|
||||||
Picker("", selection: $selCursorPosition) {
|
Picker("", selection: $selCursorPosition) {
|
||||||
Text(LocalizedStringKey("in front of the phrase (like macOS built-in Zhuyin IME)")).tag(0)
|
Text(LocalizedStringKey("in front of the phrase (like macOS built-in Zhuyin IME)")).tag(0)
|
||||||
Text(LocalizedStringKey("at anyplace else (like Windows Yahoo KeyKey)")).tag(1)
|
Text(LocalizedStringKey("at the rear of the phrase (like Microsoft New Phonetic)")).tag(1)
|
||||||
}.onChange(of: selCursorPosition) { value in
|
}.onChange(of: selCursorPosition) { value in
|
||||||
mgrPrefs.setRearCursorMode = (value == 1) ? true : false
|
mgrPrefs.useRearCursorMode = (value == 1) ? true : false
|
||||||
}
|
}
|
||||||
.labelsHidden()
|
.labelsHidden()
|
||||||
.pickerStyle(RadioGroupPickerStyle())
|
.pickerStyle(RadioGroupPickerStyle())
|
||||||
|
@ -128,7 +147,7 @@ struct suiPrefPaneExperience: View {
|
||||||
}
|
}
|
||||||
.labelsHidden()
|
.labelsHidden()
|
||||||
.pickerStyle(RadioGroupPickerStyle())
|
.pickerStyle(RadioGroupPickerStyle())
|
||||||
Text(LocalizedStringKey("Choose the behavior of (Shift+)Space key in the candidate window."))
|
Text(LocalizedStringKey("Choose the behavior of (Shift+)Space key with candidates."))
|
||||||
.preferenceDescription()
|
.preferenceDescription()
|
||||||
}
|
}
|
||||||
Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Space & ESC Key:")) }) {
|
Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Space & ESC Key:")) }) {
|
||||||
|
|
|
@ -29,6 +29,15 @@ struct suiPrefPaneKeyboard: View {
|
||||||
@State private var selMandarinParser = UserDefaults.standard.integer(forKey: UserDef.kMandarinParser)
|
@State private var selMandarinParser = UserDefaults.standard.integer(forKey: UserDef.kMandarinParser)
|
||||||
@State private var selBasicKeyboardLayout: String =
|
@State private var selBasicKeyboardLayout: String =
|
||||||
UserDefaults.standard.string(forKey: UserDef.kBasicKeyboardLayout) ?? mgrPrefs.basicKeyboardLayout
|
UserDefaults.standard.string(forKey: UserDef.kBasicKeyboardLayout) ?? mgrPrefs.basicKeyboardLayout
|
||||||
|
|
||||||
|
@State private var selUsingHotKeySCPC = UserDefaults.standard.bool(forKey: UserDef.kUsingHotKeySCPC)
|
||||||
|
@State private var selUsingHotKeyAssociates = UserDefaults.standard.bool(forKey: UserDef.kUsingHotKeyAssociates)
|
||||||
|
@State private var selUsingHotKeyCNS = UserDefaults.standard.bool(forKey: UserDef.kUsingHotKeyCNS)
|
||||||
|
@State private var selUsingHotKeyKangXi = UserDefaults.standard.bool(forKey: UserDef.kUsingHotKeyKangXi)
|
||||||
|
@State private var selUsingHotKeyJIS = UserDefaults.standard.bool(forKey: UserDef.kUsingHotKeyJIS)
|
||||||
|
@State private var selUsingHotKeyHalfWidthASCII = UserDefaults.standard.bool(
|
||||||
|
forKey: UserDef.kUsingHotKeyHalfWidthASCII)
|
||||||
|
|
||||||
private let contentWidth: Double = {
|
private let contentWidth: Double = {
|
||||||
switch mgrPrefs.appleLanguages[0] {
|
switch mgrPrefs.appleLanguages[0] {
|
||||||
case "ja":
|
case "ja":
|
||||||
|
@ -122,6 +131,50 @@ struct suiPrefPaneKeyboard: View {
|
||||||
Text(LocalizedStringKey("Choose the macOS-level basic keyboard layout."))
|
Text(LocalizedStringKey("Choose the macOS-level basic keyboard layout."))
|
||||||
.preferenceDescription()
|
.preferenceDescription()
|
||||||
}
|
}
|
||||||
|
Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Keyboard Shortcuts:")) }) {
|
||||||
|
Toggle(
|
||||||
|
LocalizedStringKey("Per-Char Select Mode"),
|
||||||
|
isOn: $selUsingHotKeySCPC
|
||||||
|
).onChange(of: selUsingHotKeySCPC) { value in
|
||||||
|
mgrPrefs.usingHotKeySCPC = value
|
||||||
|
selUsingHotKeySCPC = value
|
||||||
|
}
|
||||||
|
Toggle(
|
||||||
|
LocalizedStringKey("Per-Char Associated Phrases"),
|
||||||
|
isOn: $selUsingHotKeyAssociates
|
||||||
|
).onChange(of: selUsingHotKeyAssociates) { value in
|
||||||
|
mgrPrefs.usingHotKeyAssociates = value
|
||||||
|
selUsingHotKeyAssociates = value
|
||||||
|
}
|
||||||
|
Toggle(
|
||||||
|
LocalizedStringKey("CNS11643 Mode"),
|
||||||
|
isOn: $selUsingHotKeyCNS
|
||||||
|
).onChange(of: selUsingHotKeyCNS) { value in
|
||||||
|
mgrPrefs.usingHotKeyCNS = value
|
||||||
|
selUsingHotKeyCNS = value
|
||||||
|
}
|
||||||
|
Toggle(
|
||||||
|
LocalizedStringKey("Force KangXi Writing"),
|
||||||
|
isOn: $selUsingHotKeyKangXi
|
||||||
|
).onChange(of: selUsingHotKeyKangXi) { value in
|
||||||
|
mgrPrefs.usingHotKeyKangXi = value
|
||||||
|
selUsingHotKeyKangXi = value
|
||||||
|
}
|
||||||
|
Toggle(
|
||||||
|
LocalizedStringKey("JIS Shinjitai Output"),
|
||||||
|
isOn: $selUsingHotKeyJIS
|
||||||
|
).onChange(of: selUsingHotKeyJIS) { value in
|
||||||
|
mgrPrefs.usingHotKeyJIS = value
|
||||||
|
selUsingHotKeyJIS = value
|
||||||
|
}
|
||||||
|
Toggle(
|
||||||
|
LocalizedStringKey("Half-Width Punctuation Mode"),
|
||||||
|
isOn: $selUsingHotKeyHalfWidthASCII
|
||||||
|
).onChange(of: selUsingHotKeyHalfWidthASCII) { value in
|
||||||
|
mgrPrefs.usingHotKeyHalfWidthASCII = value
|
||||||
|
selUsingHotKeyHalfWidthASCII = value
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Divider()
|
Divider()
|
||||||
Preferences.Container(contentWidth: contentWidth) {
|
Preferences.Container(contentWidth: contentWidth) {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -351,10 +350,7 @@
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField autoresizesSubviews="NO" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IpX-f7-rTL">
|
<textField autoresizesSubviews="NO" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IpX-f7-rTL">
|
||||||
<rect key="frame" x="18" y="360" width="317" height="16"/>
|
<rect key="frame" x="18" y="361" width="317" height="15"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="height" constant="16" id="0OB-uY-HxG"/>
|
|
||||||
</constraints>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Choose which keys you prefer for selecting candidates." id="2pS-nv-te4">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Choose which keys you prefer for selecting candidates." id="2pS-nv-te4">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -362,9 +358,9 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uHU-aL-du7">
|
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uHU-aL-du7">
|
||||||
<rect key="frame" x="128" y="329" width="150" height="25"/>
|
<rect key="frame" x="128" y="331" width="150" height="24"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="147" id="WdR-Sg-xvh"/>
|
<constraint firstAttribute="width" constant="147" id="Luo-hb-kcY"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="jQC-12-UuK">
|
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="jQC-12-UuK">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
@ -381,7 +377,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</comboBox>
|
</comboBox>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ETa-09-qWI">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ETa-09-qWI">
|
||||||
<rect key="frame" x="31" y="334" width="91" height="15"/>
|
<rect key="frame" x="31" y="335" width="91" height="15"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Selection Keys:" id="FnD-oH-El5">
|
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Selection Keys:" id="FnD-oH-El5">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -389,7 +385,7 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
||||||
<rect key="frame" x="18" y="310" width="403" height="15"/>
|
<rect key="frame" x="18" y="289" width="403" height="15"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the cursor position where you want to list possible candidates." id="14">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the cursor position where you want to list possible candidates." id="14">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -397,7 +393,7 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<matrix verticalHuggingPriority="751" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
<matrix verticalHuggingPriority="751" tag="1" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
||||||
<rect key="frame" x="33" y="264" width="402" height="38"/>
|
<rect key="frame" x="33" y="243" width="402" height="38"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="cellSize" width="402" height="18"/>
|
<size key="cellSize" width="402" height="18"/>
|
||||||
<size key="intercellSpacing" width="4" height="2"/>
|
<size key="intercellSpacing" width="4" height="2"/>
|
||||||
|
@ -411,7 +407,7 @@
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<buttonCell type="radio" title="Cursor at anyplace else (like Windows Yahoo KeyKey)" imagePosition="left" alignment="left" controlSize="small" tag="1" inset="2" id="17">
|
<buttonCell type="radio" title="Cursor at the rear of the phrase (like Microsoft New Phonetic)" imagePosition="left" alignment="left" controlSize="small" tag="1" inset="2" id="17">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
|
@ -422,10 +418,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</matrix>
|
</matrix>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7z2-DD-c58">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7z2-DD-c58">
|
||||||
<rect key="frame" x="33" y="240.5" width="392" height="17"/>
|
<rect key="frame" x="33" y="223.5" width="318" height="16"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="height" constant="16" id="0iq-1M-a8l"/>
|
|
||||||
</constraints>
|
|
||||||
<buttonCell key="cell" type="check" title="Push the cursor in front of the phrase after selection" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="RUG-ls-KyA">
|
<buttonCell key="cell" type="check" title="Push the cursor in front of the phrase after selection" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="RUG-ls-KyA">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
@ -435,9 +428,9 @@
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n7q-ew-DYu">
|
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n7q-ew-DYu">
|
||||||
<rect key="frame" x="33" y="172" width="386" height="38"/>
|
<rect key="frame" x="33" y="174" width="352" height="18"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="cellSize" width="386" height="18"/>
|
<size key="cellSize" width="174" height="18"/>
|
||||||
<size key="intercellSpacing" width="4" height="2"/>
|
<size key="intercellSpacing" width="4" height="2"/>
|
||||||
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="6Hs-cH-sbg">
|
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="6Hs-cH-sbg">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
@ -449,6 +442,8 @@
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
<buttonCell type="radio" title="Cycling Pages" imagePosition="left" alignment="left" controlSize="small" tag="1" inset="2" id="s7u-Fm-dVg">
|
<buttonCell type="radio" title="Cycling Pages" imagePosition="left" alignment="left" controlSize="small" tag="1" inset="2" id="s7u-Fm-dVg">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
@ -460,7 +455,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</matrix>
|
</matrix>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TMn-LX-3Ub">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TMn-LX-3Ub">
|
||||||
<rect key="frame" x="18" y="217" width="369" height="15"/>
|
<rect key="frame" x="18" y="199" width="369" height="15"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of (Shift+)Tab key in the candidate window." id="ueU-Rz-a1C">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of (Shift+)Tab key in the candidate window." id="ueU-Rz-a1C">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -468,7 +463,7 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YkJ-lr-EP6">
|
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YkJ-lr-EP6">
|
||||||
<rect key="frame" x="33" y="104" width="386" height="38"/>
|
<rect key="frame" x="33" y="106" width="386" height="38"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="cellSize" width="386" height="18"/>
|
<size key="cellSize" width="386" height="18"/>
|
||||||
<size key="intercellSpacing" width="4" height="2"/>
|
<size key="intercellSpacing" width="4" height="2"/>
|
||||||
|
@ -493,18 +488,15 @@
|
||||||
</connections>
|
</connections>
|
||||||
</matrix>
|
</matrix>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J0f-Aw-dxC">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J0f-Aw-dxC">
|
||||||
<rect key="frame" x="18" y="149" width="383" height="15"/>
|
<rect key="frame" x="18" y="151" width="336" height="15"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of (Shift+)Space key in the candidate window." id="Pg5-G9-pY5">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Choose the behavior of (Shift+)Space key with candidates." id="Pg5-G9-pY5">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bE0-Lq-Pj7">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bE0-Lq-Pj7">
|
||||||
<rect key="frame" x="19" y="57.5" width="266" height="17"/>
|
<rect key="frame" x="19" y="61.5" width="266" height="16"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="height" constant="16" id="pOO-rh-Jhh"/>
|
|
||||||
</constraints>
|
|
||||||
<buttonCell key="cell" type="check" title="Use ESC key to clear the entire input buffer" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="f2j-xD-4xK">
|
<buttonCell key="cell" type="check" title="Use ESC key to clear the entire input buffer" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="f2j-xD-4xK">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
@ -514,7 +506,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="109">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="109">
|
||||||
<rect key="frame" x="19" y="79.5" width="285" height="16"/>
|
<rect key="frame" x="19" y="82.5" width="285" height="16"/>
|
||||||
<buttonCell key="cell" type="check" title="Enable Space key for calling candidate window" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="110">
|
<buttonCell key="cell" type="check" title="Enable Space key for calling candidate window" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="110">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
@ -524,7 +516,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mzw-F2-aAQ">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mzw-F2-aAQ">
|
||||||
<rect key="frame" x="19" y="36.5" width="314" height="16"/>
|
<rect key="frame" x="19" y="40.5" width="295" height="16"/>
|
||||||
<buttonCell key="cell" type="check" title="Emulating select-candidate-per-character mode" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="ArK-Vk-OoT">
|
<buttonCell key="cell" type="check" title="Emulating select-candidate-per-character mode" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="ArK-Vk-OoT">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
@ -533,55 +525,120 @@
|
||||||
<binding destination="32" name="value" keyPath="values.UseSCPCTypingMode" id="PbD-wq-OsN"/>
|
<binding destination="32" name="value" keyPath="values.UseSCPCTypingMode" id="PbD-wq-OsN"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="d5f-bq-dRQ">
|
||||||
|
<rect key="frame" x="26" y="312" width="74" height="15"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Buffer Limit:" id="xibLabelBufferLimit">
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JG6-RM-ZdJ">
|
||||||
|
<rect key="frame" x="106" y="312" width="297" height="15"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<size key="cellSize" width="39" height="15"/>
|
||||||
|
<size key="intercellSpacing" width="4" height="2"/>
|
||||||
|
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="YLE-4b-HX3">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<cells>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="10" imagePosition="left" alignment="left" controlSize="small" state="on" tag="10" inset="2" id="QIi-jM-Mcm">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="15" imagePosition="left" alignment="left" controlSize="small" tag="15" inset="2" id="3ZE-2c-qjN">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="20" imagePosition="left" alignment="left" controlSize="small" tag="20" inset="2" id="FJI-A2-q4K">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="25" imagePosition="left" alignment="left" controlSize="small" tag="25" inset="2" id="cBE-ve-Cs5">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="30" imagePosition="left" alignment="left" controlSize="small" tag="30" inset="2" id="1YY-sv-ibi">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="35" imagePosition="left" alignment="left" controlSize="small" tag="35" inset="2" id="mx7-hu-Yzy">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<buttonCell type="radio" title="40" imagePosition="left" alignment="left" controlSize="small" tag="40" inset="2" id="qMD-KO-AMu">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</column>
|
||||||
|
</cells>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="selectedTag" keyPath="values.ComposingBufferSize" id="DLu-Gr-ghB"/>
|
||||||
|
</connections>
|
||||||
|
</matrix>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="trailing" secondItem="15" secondAttribute="trailing" constant="10" id="3Ut-Lb-g5c"/>
|
<constraint firstItem="J0f-Aw-dxC" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="0e8-Vm-lW9"/>
|
||||||
<constraint firstItem="IpX-f7-rTL" firstAttribute="leading" secondItem="13" secondAttribute="leading" id="68K-st-tIp"/>
|
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="BM3-Hc-NoJ"/>
|
||||||
<constraint firstItem="J0f-Aw-dxC" firstAttribute="leading" secondItem="109" secondAttribute="leading" id="6Qs-pM-62E"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="109" secondAttribute="trailing" constant="20" symbolic="YES" id="BZF-Di-Nvo"/>
|
||||||
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="leading" secondItem="mzw-F2-aAQ" secondAttribute="leading" id="8lg-dI-ZNC"/>
|
<constraint firstItem="JG6-RM-ZdJ" firstAttribute="leading" secondItem="d5f-bq-dRQ" secondAttribute="trailing" constant="8" symbolic="YES" id="Bir-Dn-WJU"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="7z2-DD-c58" secondAttribute="trailing" constant="20" symbolic="YES" id="Avc-pt-eoO"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="mzw-F2-aAQ" secondAttribute="trailing" constant="20" symbolic="YES" id="E0Z-4p-exf"/>
|
||||||
<constraint firstItem="uHU-aL-du7" firstAttribute="top" secondItem="IpX-f7-rTL" secondAttribute="bottom" constant="8" symbolic="YES" id="DOO-LN-cUd"/>
|
<constraint firstItem="JG6-RM-ZdJ" firstAttribute="top" secondItem="uHU-aL-du7" secondAttribute="bottom" constant="8" id="FDe-8M-v2o"/>
|
||||||
<constraint firstItem="IpX-f7-rTL" firstAttribute="top" secondItem="Zaa-dP-WdF" secondAttribute="top" constant="15" id="EsV-t1-bC1"/>
|
<constraint firstItem="YkJ-lr-EP6" firstAttribute="top" secondItem="J0f-Aw-dxC" secondAttribute="bottom" constant="7" id="FyK-PK-b8k"/>
|
||||||
<constraint firstItem="J0f-Aw-dxC" firstAttribute="top" secondItem="n7q-ew-DYu" secondAttribute="bottom" constant="8" symbolic="YES" id="FUN-Sk-18I"/>
|
<constraint firstItem="109" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="GNN-BI-mtv"/>
|
||||||
<constraint firstItem="109" firstAttribute="leading" secondItem="bE0-Lq-Pj7" secondAttribute="leading" id="Inc-F1-iRQ"/>
|
<constraint firstItem="ETa-09-qWI" firstAttribute="top" secondItem="IpX-f7-rTL" secondAttribute="bottom" constant="11" id="HBB-jl-lam"/>
|
||||||
<constraint firstItem="ETa-09-qWI" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="KmP-py-Qqz"/>
|
<constraint firstItem="IpX-f7-rTL" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="HLO-fb-ikL"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bE0-Lq-Pj7" secondAttribute="trailing" constant="20" symbolic="YES" id="LYR-cD-DqP"/>
|
<constraint firstItem="7z2-DD-c58" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="4" id="ITw-bi-amp"/>
|
||||||
<constraint firstItem="n7q-ew-DYu" firstAttribute="top" secondItem="TMn-LX-3Ub" secondAttribute="bottom" constant="7" id="MIE-v4-sXo"/>
|
<constraint firstItem="IpX-f7-rTL" firstAttribute="top" secondItem="Zaa-dP-WdF" secondAttribute="top" constant="15" id="IfF-zm-H4h"/>
|
||||||
<constraint firstItem="IpX-f7-rTL" firstAttribute="centerX" secondItem="mzw-F2-aAQ" secondAttribute="centerX" id="MeB-I9-I3J"/>
|
<constraint firstItem="n7q-ew-DYu" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="JU9-if-dHu"/>
|
||||||
<constraint firstItem="TMn-LX-3Ub" firstAttribute="top" secondItem="7z2-DD-c58" secondAttribute="bottom" constant="9" id="Nhp-Ij-CJM"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bE0-Lq-Pj7" secondAttribute="trailing" constant="20" symbolic="YES" id="LEr-dZ-tQl"/>
|
||||||
<constraint firstItem="n7q-ew-DYu" firstAttribute="leading" secondItem="YkJ-lr-EP6" secondAttribute="leading" id="RJq-WW-QIV"/>
|
<constraint firstItem="15" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="LSC-8Z-t3E"/>
|
||||||
<constraint firstItem="mzw-F2-aAQ" firstAttribute="top" secondItem="bE0-Lq-Pj7" secondAttribute="bottom" constant="6" symbolic="YES" id="Rfg-V4-SqR"/>
|
<constraint firstItem="13" firstAttribute="top" secondItem="d5f-bq-dRQ" secondAttribute="bottom" constant="8" symbolic="YES" id="MnA-i7-XHq"/>
|
||||||
<constraint firstItem="IpX-f7-rTL" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="T9R-Wl-QmL"/>
|
<constraint firstItem="uHU-aL-du7" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="trailing" constant="8" symbolic="YES" id="PU2-ef-oes"/>
|
||||||
<constraint firstItem="7z2-DD-c58" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="7" id="UW2-Dc-Ev7"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="IpX-f7-rTL" secondAttribute="trailing" constant="20" symbolic="YES" id="TJm-ok-omx"/>
|
||||||
<constraint firstItem="uHU-aL-du7" firstAttribute="baseline" secondItem="ETa-09-qWI" secondAttribute="firstBaseline" id="Up0-Zu-yer"/>
|
<constraint firstItem="J0f-Aw-dxC" firstAttribute="top" secondItem="n7q-ew-DYu" secondAttribute="bottom" constant="8" symbolic="YES" id="Tzp-5r-i3c"/>
|
||||||
<constraint firstItem="n7q-ew-DYu" firstAttribute="trailing" secondItem="YkJ-lr-EP6" secondAttribute="trailing" id="UqO-Qb-eH0"/>
|
<constraint firstItem="15" firstAttribute="top" secondItem="13" secondAttribute="bottom" constant="8" symbolic="YES" id="UIa-Ix-lhI"/>
|
||||||
<constraint firstItem="13" firstAttribute="trailing" secondItem="n7q-ew-DYu" secondAttribute="trailing" id="W6s-pA-kti"/>
|
<constraint firstItem="uHU-aL-du7" firstAttribute="top" secondItem="IpX-f7-rTL" secondAttribute="bottom" constant="8" symbolic="YES" id="ULh-hH-xKC"/>
|
||||||
<constraint firstItem="uHU-aL-du7" firstAttribute="leading" secondItem="ETa-09-qWI" secondAttribute="trailing" constant="8" symbolic="YES" id="cPM-bP-Gwf"/>
|
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="top" secondItem="109" secondAttribute="bottom" constant="6" symbolic="YES" id="UWL-D9-CwK"/>
|
||||||
<constraint firstItem="15" firstAttribute="leading" secondItem="n7q-ew-DYu" secondAttribute="leading" id="dTu-VM-Mex"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="TMn-LX-3Ub" secondAttribute="trailing" constant="20" symbolic="YES" id="WrM-BI-Qka"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="13" secondAttribute="trailing" constant="20" symbolic="YES" id="eFx-fp-hkw"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="13" secondAttribute="trailing" constant="20" symbolic="YES" id="XNq-db-VNS"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="J0f-Aw-dxC" secondAttribute="trailing" constant="46" id="frg-ba-K1N"/>
|
<constraint firstItem="mzw-F2-aAQ" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="Xz6-OP-PgW"/>
|
||||||
<constraint firstItem="15" firstAttribute="top" secondItem="13" secondAttribute="bottom" constant="8" symbolic="YES" id="hS6-Vg-wWW"/>
|
<constraint firstItem="d5f-bq-dRQ" firstAttribute="top" secondItem="ETa-09-qWI" secondAttribute="bottom" constant="8" symbolic="YES" id="Y1x-Yb-mxp"/>
|
||||||
<constraint firstItem="YkJ-lr-EP6" firstAttribute="top" secondItem="J0f-Aw-dxC" secondAttribute="bottom" constant="7" id="jlj-Bh-CE9"/>
|
<constraint firstItem="13" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="eGk-LL-U7g"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="109" secondAttribute="trailing" constant="20" symbolic="YES" id="mZE-TB-4fR"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="7z2-DD-c58" secondAttribute="trailing" constant="20" symbolic="YES" id="fIY-vJ-kPu"/>
|
||||||
<constraint firstItem="7z2-DD-c58" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="mzw-F2-aAQ" secondAttribute="trailing" id="nal-v8-hEc"/>
|
<constraint firstItem="mzw-F2-aAQ" firstAttribute="top" secondItem="bE0-Lq-Pj7" secondAttribute="bottom" constant="6" symbolic="YES" id="fws-AB-eRF"/>
|
||||||
<constraint firstItem="13" firstAttribute="leading" secondItem="TMn-LX-3Ub" secondAttribute="leading" id="pKo-EY-LzQ"/>
|
<constraint firstItem="d5f-bq-dRQ" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="28" id="g7m-wb-cHq"/>
|
||||||
<constraint firstItem="ETa-09-qWI" firstAttribute="leading" secondItem="15" secondAttribute="leading" id="pKq-I6-9MX"/>
|
<constraint firstItem="109" firstAttribute="top" secondItem="YkJ-lr-EP6" secondAttribute="bottom" constant="8" symbolic="YES" id="i6t-Qo-A6f"/>
|
||||||
<constraint firstItem="13" firstAttribute="top" secondItem="uHU-aL-du7" secondAttribute="bottom" constant="8" symbolic="YES" id="pXY-Vl-fF3"/>
|
<constraint firstItem="7z2-DD-c58" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="34" id="jn0-am-4VT"/>
|
||||||
<constraint firstItem="TMn-LX-3Ub" firstAttribute="leading" secondItem="J0f-Aw-dxC" secondAttribute="leading" id="rjf-KH-R1M"/>
|
<constraint firstItem="ETa-09-qWI" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="jxy-LV-cNN"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="mzw-F2-aAQ" secondAttribute="bottom" constant="36.5" id="rll-uD-kgj"/>
|
<constraint firstItem="TMn-LX-3Ub" firstAttribute="top" secondItem="7z2-DD-c58" secondAttribute="bottom" constant="10" id="lN4-F5-Rso"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="TMn-LX-3Ub" secondAttribute="trailing" constant="20" symbolic="YES" id="skq-dq-2tr"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="J0f-Aw-dxC" secondAttribute="trailing" constant="20" symbolic="YES" id="m7V-aO-sWq"/>
|
||||||
<constraint firstItem="bE0-Lq-Pj7" firstAttribute="top" secondItem="109" secondAttribute="bottom" constant="6" symbolic="YES" id="ss5-S5-eA2"/>
|
<constraint firstItem="TMn-LX-3Ub" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="20" symbolic="YES" id="n41-fp-yIM"/>
|
||||||
<constraint firstItem="ETa-09-qWI" firstAttribute="top" secondItem="IpX-f7-rTL" secondAttribute="bottom" constant="11" id="vc8-1e-YLx"/>
|
<constraint firstItem="YkJ-lr-EP6" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="33" id="oeV-di-jPe"/>
|
||||||
<constraint firstItem="7z2-DD-c58" firstAttribute="leading" secondItem="Zaa-dP-WdF" secondAttribute="leading" constant="34" id="wwj-Hl-v4k"/>
|
<constraint firstItem="n7q-ew-DYu" firstAttribute="top" secondItem="TMn-LX-3Ub" secondAttribute="bottom" constant="7" id="w3R-Ed-yWK"/>
|
||||||
<constraint firstItem="109" firstAttribute="top" secondItem="YkJ-lr-EP6" secondAttribute="bottom" constant="9.5" id="yI5-hF-d78"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="E1l-m8-xgb" firstAttribute="top" secondItem="bZr-iP-F6T" secondAttribute="top" constant="5" id="6G1-ic-qOE"/>
|
<constraint firstAttribute="bottom" secondItem="E1l-m8-xgb" secondAttribute="bottom" constant="14" id="AAY-z7-YD8"/>
|
||||||
<constraint firstItem="E1l-m8-xgb" firstAttribute="leading" secondItem="bZr-iP-F6T" secondAttribute="leading" constant="9" id="CWs-nE-zc4"/>
|
<constraint firstItem="E1l-m8-xgb" firstAttribute="leading" secondItem="bZr-iP-F6T" secondAttribute="leading" constant="9" id="S6O-b1-iXi"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="E1l-m8-xgb" secondAttribute="trailing" constant="9" id="w21-Zs-a85"/>
|
<constraint firstAttribute="trailing" secondItem="E1l-m8-xgb" secondAttribute="trailing" constant="9" id="ejr-Js-PVs"/>
|
||||||
|
<constraint firstItem="E1l-m8-xgb" firstAttribute="top" secondItem="bZr-iP-F6T" secondAttribute="top" constant="5" id="fyM-Iy-WOj"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
|
@ -691,25 +748,10 @@
|
||||||
<binding destination="32" name="value" keyPath="values.CNS11643Enabled" id="Pbx-Gt-upm"/>
|
<binding destination="32" name="value" keyPath="values.CNS11643Enabled" id="Pbx-Gt-upm"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O2c-HS-d9s" userLabel="chkCNSSupport">
|
|
||||||
<rect key="frame" x="19" y="229.5" width="406" height="17"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="height" constant="16" id="g8o-4X-IR5"/>
|
|
||||||
</constraints>
|
|
||||||
<buttonCell key="cell" type="check" title="Balance the score according to candidate length" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="Wh1-iz-pwM">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="cellTitle"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="toggleCNSSupport:" target="-2" id="S0T-uD-fde"/>
|
|
||||||
<binding destination="32" name="value" keyPath="values.UseScoreBalancing" id="mnq-pX-2PH"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="s7t-Kk-EPu" firstAttribute="bottom" secondItem="MPN-np-SbT" secondAttribute="bottom" id="0Fo-ya-hQ9"/>
|
<constraint firstItem="s7t-Kk-EPu" firstAttribute="bottom" secondItem="MPN-np-SbT" secondAttribute="bottom" id="0Fo-ya-hQ9"/>
|
||||||
<constraint firstItem="O4B-Z2-XYi" firstAttribute="trailing" secondItem="Yaj-QY-7xV" secondAttribute="trailing" id="2VU-kM-5xJ"/>
|
<constraint firstItem="O4B-Z2-XYi" firstAttribute="trailing" secondItem="Yaj-QY-7xV" secondAttribute="trailing" id="2VU-kM-5xJ"/>
|
||||||
<constraint firstItem="Yaj-QY-7xV" firstAttribute="trailing" secondItem="O2c-HS-d9s" secondAttribute="trailing" id="4Ma-Ni-LJP"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="FUV-qx-xkC" secondAttribute="trailing" constant="20" symbolic="YES" id="6QR-tj-5cH"/>
|
<constraint firstAttribute="trailing" secondItem="FUV-qx-xkC" secondAttribute="trailing" constant="20" symbolic="YES" id="6QR-tj-5cH"/>
|
||||||
<constraint firstItem="O4B-Z2-XYi" firstAttribute="top" secondItem="p7V-IN-OTr" secondAttribute="bottom" constant="6" id="6tf-H0-CKc"/>
|
<constraint firstItem="O4B-Z2-XYi" firstAttribute="top" secondItem="p7V-IN-OTr" secondAttribute="bottom" constant="6" id="6tf-H0-CKc"/>
|
||||||
<constraint firstItem="s7t-Kk-EPu" firstAttribute="leading" secondItem="MPN-np-SbT" secondAttribute="trailing" constant="-376" id="9at-E8-Bt1"/>
|
<constraint firstItem="s7t-Kk-EPu" firstAttribute="leading" secondItem="MPN-np-SbT" secondAttribute="trailing" constant="-376" id="9at-E8-Bt1"/>
|
||||||
|
@ -721,11 +763,9 @@
|
||||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="top" secondItem="s7t-Kk-EPu" secondAttribute="bottom" constant="15" id="PyP-N9-MWb"/>
|
<constraint firstItem="p7V-IN-OTr" firstAttribute="top" secondItem="s7t-Kk-EPu" secondAttribute="bottom" constant="15" id="PyP-N9-MWb"/>
|
||||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="leading" secondItem="s7t-Kk-EPu" secondAttribute="leading" id="QMQ-hR-c5W"/>
|
<constraint firstItem="p7V-IN-OTr" firstAttribute="leading" secondItem="s7t-Kk-EPu" secondAttribute="leading" id="QMQ-hR-c5W"/>
|
||||||
<constraint firstItem="FUV-qx-xkC" firstAttribute="leading" secondItem="MPN-np-SbT" secondAttribute="leading" constant="-346" id="Zet-wH-kmC"/>
|
<constraint firstItem="FUV-qx-xkC" firstAttribute="leading" secondItem="MPN-np-SbT" secondAttribute="leading" constant="-346" id="Zet-wH-kmC"/>
|
||||||
<constraint firstItem="O2c-HS-d9s" firstAttribute="top" secondItem="Yaj-QY-7xV" secondAttribute="bottom" constant="6" symbolic="YES" id="cBe-nI-2F7"/>
|
|
||||||
<constraint firstItem="jXe-xz-9Sd" firstAttribute="leading" secondItem="MPN-np-SbT" secondAttribute="trailing" constant="-1" id="cYQ-Rx-tuG"/>
|
<constraint firstItem="jXe-xz-9Sd" firstAttribute="leading" secondItem="MPN-np-SbT" secondAttribute="trailing" constant="-1" id="cYQ-Rx-tuG"/>
|
||||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="leading" secondItem="O4B-Z2-XYi" secondAttribute="leading" id="dm5-TK-PRw"/>
|
<constraint firstItem="p7V-IN-OTr" firstAttribute="leading" secondItem="O4B-Z2-XYi" secondAttribute="leading" id="dm5-TK-PRw"/>
|
||||||
<constraint firstItem="O4B-Z2-XYi" firstAttribute="leading" secondItem="Yaj-QY-7xV" secondAttribute="leading" id="qHY-fz-P9H"/>
|
<constraint firstItem="O4B-Z2-XYi" firstAttribute="leading" secondItem="Yaj-QY-7xV" secondAttribute="leading" id="qHY-fz-P9H"/>
|
||||||
<constraint firstItem="Yaj-QY-7xV" firstAttribute="leading" secondItem="O2c-HS-d9s" secondAttribute="leading" id="tap-dN-5Nu"/>
|
|
||||||
<constraint firstItem="p7V-IN-OTr" firstAttribute="trailing" secondItem="jXe-xz-9Sd" secondAttribute="trailing" id="uuG-Bg-2Vi"/>
|
<constraint firstItem="p7V-IN-OTr" firstAttribute="trailing" secondItem="jXe-xz-9Sd" secondAttribute="trailing" id="uuG-Bg-2Vi"/>
|
||||||
<constraint firstItem="s7t-Kk-EPu" firstAttribute="trailing" secondItem="FUV-qx-xkC" secondAttribute="trailing" constant="-60" id="vIO-x1-7Q2"/>
|
<constraint firstItem="s7t-Kk-EPu" firstAttribute="trailing" secondItem="FUV-qx-xkC" secondAttribute="trailing" constant="-60" id="vIO-x1-7Q2"/>
|
||||||
<constraint firstItem="jXe-xz-9Sd" firstAttribute="baseline" secondItem="MPN-np-SbT" secondAttribute="baseline" id="wys-ML-2Q2"/>
|
<constraint firstItem="jXe-xz-9Sd" firstAttribute="baseline" secondItem="MPN-np-SbT" secondAttribute="baseline" id="wys-ML-2Q2"/>
|
||||||
|
@ -748,13 +788,13 @@
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<box title="Keyboard Layout" translatesAutoresizingMaskIntoConstraints="NO" id="Wvt-HE-LOv">
|
<box title="Keyboard Layout" translatesAutoresizingMaskIntoConstraints="NO" id="Wvt-HE-LOv">
|
||||||
<rect key="frame" x="6" y="10" width="451" height="409"/>
|
<rect key="frame" x="6" y="198" width="451" height="221"/>
|
||||||
<view key="contentView" id="mE9-SY-ijS">
|
<view key="contentView" id="mE9-SY-ijS">
|
||||||
<rect key="frame" x="3" y="3" width="445" height="391"/>
|
<rect key="frame" x="3" y="3" width="445" height="203"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="onD-QP-KPf">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="onD-QP-KPf">
|
||||||
<rect key="frame" x="18" y="361" width="345" height="15"/>
|
<rect key="frame" x="18" y="173" width="345" height="15"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="242" id="7Fg-39-CRo"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="242" id="7Fg-39-CRo"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
@ -765,7 +805,7 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hab-1o-1kS">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hab-1o-1kS">
|
||||||
<rect key="frame" x="18" y="253" width="409" height="37"/>
|
<rect key="frame" x="18" y="65" width="409" height="37"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="37" id="DuE-Bj-q43"/>
|
<constraint firstAttribute="height" constant="37" id="DuE-Bj-q43"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
@ -777,7 +817,7 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11">
|
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="11">
|
||||||
<rect key="frame" x="18" y="334" width="86" height="17"/>
|
<rect key="frame" x="18" y="146" width="86" height="17"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="17" id="3Lz-Gj-jiD"/>
|
<constraint firstAttribute="height" constant="17" id="3Lz-Gj-jiD"/>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="82" id="Vfj-gd-B0r"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="82" id="Vfj-gd-B0r"/>
|
||||||
|
@ -789,7 +829,7 @@
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
|
||||||
<rect key="frame" x="107" y="328" width="277" height="26"/>
|
<rect key="frame" x="107" y="140" width="277" height="26"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="270" id="s83-aB-x7j"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="270" id="s83-aB-x7j"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
@ -820,7 +860,7 @@
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124">
|
||||||
<rect key="frame" x="107" y="300" width="277" height="26"/>
|
<rect key="frame" x="107" y="112" width="277" height="26"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="21" id="MHr-9M-m65"/>
|
<constraint firstAttribute="height" constant="21" id="MHr-9M-m65"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
@ -834,7 +874,7 @@
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="125">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="125">
|
||||||
<rect key="frame" x="18" y="308" width="86" height="15"/>
|
<rect key="frame" x="18" y="120" width="86" height="15"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Basic Layout:" id="126">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Basic Layout:" id="126">
|
||||||
<font key="font" metaFont="cellTitle"/>
|
<font key="font" metaFont="cellTitle"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -864,9 +904,99 @@
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
|
<box fixedFrame="YES" title="Keyboard Shortcuts" translatesAutoresizingMaskIntoConstraints="NO" id="xibKeyboardShortcuts">
|
||||||
|
<rect key="frame" x="6" y="10" width="451" height="184"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<view key="contentView" id="rZK-cU-6Y0">
|
||||||
|
<rect key="frame" x="3" y="3" width="445" height="166"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qAe-7E-PPO" userLabel="UsingHotKeySCPC">
|
||||||
|
<rect key="frame" x="19" y="138.5" width="406" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Per-Char Select Mode" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="xibUsingHotKeySCPC">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="value" keyPath="values.UsingHotKeySCPC" id="Bda-2Q-cWF"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LeH-0u-c97" userLabel="UsingHotKeyAssociates">
|
||||||
|
<rect key="frame" x="19" y="117.5" width="406" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Per-Char Associated Phrases" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="xibUsingHotKeyAssociates">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="value" keyPath="values.UsingHotKeyAssociates" id="knj-hU-irv"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OwI-YY-9pZ" userLabel="UsingHotKeyCNS">
|
||||||
|
<rect key="frame" x="19" y="96.5" width="406" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="CNS11643 Mode" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="xibUsingHotKeyCNS">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="value" keyPath="values.UsingHotKeyCNS" id="TDq-V9-Ojp"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eNN-a4-bj8" userLabel="UsingHotKeyKangXi">
|
||||||
|
<rect key="frame" x="19" y="75.5" width="406" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Force KangXi Writing" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="xibUsingHotKeyKangXi">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="value" keyPath="values.UsingHotKeyKangXi" id="gy4-ge-8R1"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AMy-dJ-qCK" userLabel="UsingHotKeyJIS">
|
||||||
|
<rect key="frame" x="19" y="54.5" width="406" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="JIS Shinjitai Output" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="xibUsingHotKeyJIS">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="value" keyPath="values.UsingHotKeyJIS" id="RBH-UU-T8y"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Dsq-el-pj8" userLabel="UsingHotKeyHalfWidthASCII">
|
||||||
|
<rect key="frame" x="19" y="33.5" width="406" height="16"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Half-Width Punctuation Mode" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="xibUsingHotKeyHalfWidthASCII">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="32" name="value" keyPath="values.UsingHotKeyHalfWidthASCII" id="Bwk-BZ-dX5"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="Dsq-el-pj8" firstAttribute="top" secondItem="AMy-dJ-qCK" secondAttribute="bottom" constant="6" symbolic="YES" id="0J0-wy-BA0"/>
|
||||||
|
<constraint firstItem="AMy-dJ-qCK" firstAttribute="top" secondItem="eNN-a4-bj8" secondAttribute="bottom" constant="6" symbolic="YES" id="0mV-hQ-FOz"/>
|
||||||
|
<constraint firstItem="OwI-YY-9pZ" firstAttribute="trailing" secondItem="eNN-a4-bj8" secondAttribute="trailing" id="2b4-sC-KTr"/>
|
||||||
|
<constraint firstItem="eNN-a4-bj8" firstAttribute="centerY" secondItem="rZK-cU-6Y0" secondAttribute="centerY" id="8Ux-vD-PZ9"/>
|
||||||
|
<constraint firstItem="qAe-7E-PPO" firstAttribute="leading" secondItem="LeH-0u-c97" secondAttribute="leading" id="ApK-f6-5DU"/>
|
||||||
|
<constraint firstItem="qAe-7E-PPO" firstAttribute="trailing" secondItem="LeH-0u-c97" secondAttribute="trailing" id="ERV-uG-xmS"/>
|
||||||
|
<constraint firstItem="AMy-dJ-qCK" firstAttribute="leading" secondItem="Dsq-el-pj8" secondAttribute="leading" id="KVZ-bV-wd0"/>
|
||||||
|
<constraint firstItem="qAe-7E-PPO" firstAttribute="leading" secondItem="rZK-cU-6Y0" secondAttribute="leading" constant="20" symbolic="YES" id="KdT-pB-fkI"/>
|
||||||
|
<constraint firstItem="OwI-YY-9pZ" firstAttribute="top" secondItem="LeH-0u-c97" secondAttribute="bottom" constant="6" symbolic="YES" id="LVw-1O-jqY"/>
|
||||||
|
<constraint firstItem="LeH-0u-c97" firstAttribute="top" secondItem="qAe-7E-PPO" secondAttribute="bottom" constant="6" symbolic="YES" id="Lny-6z-dUo"/>
|
||||||
|
<constraint firstItem="LeH-0u-c97" firstAttribute="leading" secondItem="OwI-YY-9pZ" secondAttribute="leading" id="NqS-74-MvJ"/>
|
||||||
|
<constraint firstItem="eNN-a4-bj8" firstAttribute="trailing" secondItem="AMy-dJ-qCK" secondAttribute="trailing" id="UOq-a5-ve5"/>
|
||||||
|
<constraint firstItem="LeH-0u-c97" firstAttribute="trailing" secondItem="OwI-YY-9pZ" secondAttribute="trailing" id="VXD-Q0-Srz"/>
|
||||||
|
<constraint firstItem="AMy-dJ-qCK" firstAttribute="trailing" secondItem="Dsq-el-pj8" secondAttribute="trailing" id="iLB-X2-YmS"/>
|
||||||
|
<constraint firstItem="eNN-a4-bj8" firstAttribute="leading" secondItem="AMy-dJ-qCK" secondAttribute="leading" id="m1a-0D-ynq"/>
|
||||||
|
<constraint firstItem="eNN-a4-bj8" firstAttribute="top" secondItem="OwI-YY-9pZ" secondAttribute="bottom" constant="6" symbolic="YES" id="m7Y-ZA-TO6"/>
|
||||||
|
<constraint firstItem="OwI-YY-9pZ" firstAttribute="leading" secondItem="eNN-a4-bj8" secondAttribute="leading" id="oiD-6a-yTH"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="qAe-7E-PPO" secondAttribute="trailing" constant="20" symbolic="YES" id="vlT-hN-v8l"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</box>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="bottom" secondItem="Wvt-HE-LOv" secondAttribute="bottom" constant="14" id="Qmp-GR-eW4"/>
|
<constraint firstAttribute="bottom" secondItem="Wvt-HE-LOv" secondAttribute="bottom" constant="202" id="Qmp-GR-eW4"/>
|
||||||
<constraint firstItem="Wvt-HE-LOv" firstAttribute="leading" secondItem="FxL-ZG-Eue" secondAttribute="leading" constant="9" id="gBD-pe-hba"/>
|
<constraint firstItem="Wvt-HE-LOv" firstAttribute="leading" secondItem="FxL-ZG-Eue" secondAttribute="leading" constant="9" id="gBD-pe-hba"/>
|
||||||
<constraint firstItem="Wvt-HE-LOv" firstAttribute="top" secondItem="FxL-ZG-Eue" secondAttribute="top" constant="5" id="mpD-ld-a8z"/>
|
<constraint firstItem="Wvt-HE-LOv" firstAttribute="top" secondItem="FxL-ZG-Eue" secondAttribute="top" constant="5" id="mpD-ld-a8z"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="Wvt-HE-LOv" secondAttribute="trailing" constant="9" id="v0g-ad-cjW"/>
|
<constraint firstAttribute="trailing" secondItem="Wvt-HE-LOv" secondAttribute="trailing" constant="9" id="v0g-ad-cjW"/>
|
||||||
|
|
|
@ -1,252 +1,91 @@
|
||||||
|
|
||||||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
|
||||||
"1.title" = "vChewing Preferences";
|
"1.title" = "vChewing Preferences";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
|
||||||
"sZx-18-8dO.title" = "Debug Mode";
|
"sZx-18-8dO.title" = "Debug Mode";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
|
||||||
"5.title" = "OtherViews";
|
"5.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */
|
|
||||||
"6.title" = "Microsoft, Dachen, Wang, etc.";
|
"6.title" = "Microsoft, Dachen, Wang, etc.";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */
|
|
||||||
"7.title" = "ETen";
|
"7.title" = "ETen";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hsu"; ObjectID = "8"; */
|
|
||||||
"8.title" = "Hsu";
|
"8.title" = "Hsu";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen26"; ObjectID = "9"; */
|
|
||||||
"9.title" = "ETen26";
|
"9.title" = "ETen26";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hanyu Pinyin with Numeral Intonation"; ObjectID = "10"; */
|
|
||||||
"10.title" = "Hanyu Pinyin with Numeral Intonation";
|
"10.title" = "Hanyu Pinyin with Numeral Intonation";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "BPMF Parser:"; ObjectID = "12"; */
|
|
||||||
"12.title" = "BPMF Parser:";
|
"12.title" = "BPMF Parser:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */
|
|
||||||
"14.title" = "Choose the cursor position where you want to list possible candidates.";
|
"14.title" = "Choose the cursor position where you want to list possible candidates.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */
|
|
||||||
"16.title" = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)";
|
"16.title" = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||||
|
"17.title" = "Cursor at the rear of the phrase (like Microsoft New Phonetic)";
|
||||||
/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */
|
|
||||||
"17.title" = "Cursor at anyplace else (like Windows Yahoo KeyKey)";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */
|
|
||||||
"18.title" = "Radio";
|
"18.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "20"; */
|
|
||||||
"20.title" = "Radio";
|
"20.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Horizontal"; ObjectID = "21"; */
|
|
||||||
"21.title" = "Horizontal";
|
"21.title" = "Horizontal";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Vertical"; ObjectID = "22"; */
|
|
||||||
"22.title" = "Vertical";
|
"22.title" = "Vertical";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show page buttons in candidate list"; ObjectID = "shc-Nu-UsM"; */
|
|
||||||
"shc-Nu-UsM.title" = "Show page buttons in candidate list";
|
"shc-Nu-UsM.title" = "Show page buttons in candidate list";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate List Layout:"; ObjectID = "24"; */
|
|
||||||
"24.title" = "Candidate List Layout:";
|
"24.title" = "Candidate List Layout:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate UI font size:"; ObjectID = "29"; */
|
|
||||||
"29.title" = "Candidate UI font size:";
|
"29.title" = "Candidate UI font size:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "92"; */
|
|
||||||
"92.title" = "OtherViews";
|
"92.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "12"; ObjectID = "93"; */
|
|
||||||
"93.title" = "12";
|
"93.title" = "12";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "14"; ObjectID = "94"; */
|
|
||||||
"94.title" = "14";
|
"94.title" = "14";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "16"; ObjectID = "95"; */
|
|
||||||
"95.title" = "16";
|
"95.title" = "16";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "18"; ObjectID = "96"; */
|
|
||||||
"96.title" = "18";
|
"96.title" = "18";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "24"; ObjectID = "98"; */
|
|
||||||
"98.title" = "24";
|
"98.title" = "24";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "32"; ObjectID = "99"; */
|
|
||||||
"99.title" = "32";
|
"99.title" = "32";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "64"; ObjectID = "100"; */
|
|
||||||
"100.title" = "64";
|
"100.title" = "64";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "96"; ObjectID = "101"; */
|
|
||||||
"101.title" = "96";
|
"101.title" = "96";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable Space key for calling candidate window"; ObjectID = "110"; */
|
|
||||||
"110.title" = "Enable Space key for calling candidate window";
|
"110.title" = "Enable Space key for calling candidate window";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Basic Layout:"; ObjectID = "126"; */
|
|
||||||
"126.title" = "Basic Layout:";
|
"126.title" = "Basic Layout:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "128"; */
|
|
||||||
"128.title" = "OtherViews";
|
"128.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "IBM"; ObjectID = "137"; */
|
|
||||||
"137.title" = "IBM";
|
"137.title" = "IBM";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */
|
|
||||||
"7fV-x8-WHQ.title" = "MiTAC";
|
"7fV-x8-WHQ.title" = "MiTAC";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */
|
|
||||||
"27F-8T-FkQ.title" = "Fake Seigyou (similar to JinYei)";
|
"27F-8T-FkQ.title" = "Fake Seigyou (similar to JinYei)";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */
|
|
||||||
"1AW-xf-c2f.label" = "Keyboard";
|
"1AW-xf-c2f.label" = "Keyboard";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "General Settings"; ObjectID = "2Y6-Am-WM1"; */
|
|
||||||
"2Y6-Am-WM1.title" = "General Settings";
|
"2Y6-Am-WM1.title" = "General Settings";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
|
||||||
"2pS-nv-te4.title" = "Choose which keys you prefer for selecting candidates.";
|
"2pS-nv-te4.title" = "Choose which keys you prefer for selecting candidates.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
|
||||||
"62u-jY-BRh.title" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
"62u-jY-BRh.title" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
|
||||||
"9DS-Rc-TXq.title" = "UI language setting:";
|
"9DS-Rc-TXq.title" = "UI language setting:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Emulating select-candidate-per-character mode"; ObjectID = "ArK-Vk-OoT"; */
|
|
||||||
"ArK-Vk-OoT.title" = "Emulating select-candidate-per-character mode";
|
"ArK-Vk-OoT.title" = "Emulating select-candidate-per-character mode";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
|
||||||
"BSK-bH-Gct.title" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
"BSK-bH-Gct.title" = "Auto-convert traditional Chinese glyphs to KangXi characters";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "eia-1F-Do0"; */
|
|
||||||
"eia-1F-Do0.title" = "Auto-convert traditional Chinese glyphs to JIS Shinjitai characters";
|
"eia-1F-Do0.title" = "Auto-convert traditional Chinese glyphs to JIS Shinjitai characters";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Advanced Settings"; ObjectID = "E1l-m8-xgb"; */
|
|
||||||
"E1l-m8-xgb.title" = "Advanced Settings";
|
"E1l-m8-xgb.title" = "Advanced Settings";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "English"; ObjectID = "FSG-lN-CJO"; */
|
|
||||||
"FSG-lN-CJO.title" = "English";
|
"FSG-lN-CJO.title" = "English";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Selection Keys:"; ObjectID = "FnD-oH-El5"; */
|
|
||||||
"FnD-oH-El5.title" = "Selection Keys:";
|
"FnD-oH-El5.title" = "Selection Keys:";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
|
||||||
"GlJ-Ns-9eE.title" = "Auto-Select";
|
"GlJ-Ns-9eE.title" = "Auto-Select";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
|
||||||
"QUQ-oY-4Hc.label" = "General";
|
"QUQ-oY-4Hc.label" = "General";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */
|
|
||||||
"RQ6-MS-m4C.title" = "Choose your preferred keyboard layout and phonetic parser.";
|
"RQ6-MS-m4C.title" = "Choose your preferred keyboard layout and phonetic parser.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */
|
|
||||||
"RUG-ls-KyA.title" = "Push the cursor in front of the phrase after selection";
|
"RUG-ls-KyA.title" = "Push the cursor in front of the phrase after selection";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */
|
|
||||||
"TXr-FF-ehw.title" = "Traditional Chinese";
|
"TXr-FF-ehw.title" = "Traditional Chinese";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Output Settings"; ObjectID = "Uyz-xL-TVN"; */
|
|
||||||
"Uyz-xL-TVN.title" = "Output Settings";
|
"Uyz-xL-TVN.title" = "Output Settings";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable CNS11643 Support (2022-04-27)"; ObjectID = "W24-T4-cg0"; */
|
|
||||||
"W24-T4-cg0.title" = "Enable CNS11643 Support (2022-04-27)";
|
"W24-T4-cg0.title" = "Enable CNS11643 Support (2022-04-27)";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Keyboard Layout"; ObjectID = "Wvt-HE-LOv"; */
|
|
||||||
"Wvt-HE-LOv.title" = "Keyboard Layout";
|
"Wvt-HE-LOv.title" = "Keyboard Layout";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Check for updates automatically"; ObjectID = "Z9t-P0-BLF"; */
|
|
||||||
"Z9t-P0-BLF.title" = "Check for updates automatically";
|
"Z9t-P0-BLF.title" = "Check for updates automatically";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change user interface language (will reboot the IME)."; ObjectID = "ZEv-Q2-mYL"; */
|
|
||||||
"ZEv-Q2-mYL.title" = "Change user interface language (will reboot the IME).";
|
"ZEv-Q2-mYL.title" = "Change user interface language (will reboot the IME).";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Simplified Chinese"; ObjectID = "akC-2g-ybz"; */
|
|
||||||
"akC-2g-ybz.title" = "Simplified Chinese";
|
"akC-2g-ybz.title" = "Simplified Chinese";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use ESC key to clear the entire input buffer"; ObjectID = "f2j-xD-4xK"; */
|
|
||||||
"f2j-xD-4xK.title" = "Use ESC key to clear the entire input buffer";
|
"f2j-xD-4xK.title" = "Use ESC key to clear the entire input buffer";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */
|
|
||||||
"f8i-69-zxm.title" = "Automatically reload user data files if changes detected";
|
"f8i-69-zxm.title" = "Automatically reload user data files if changes detected";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
|
||||||
"iRg-wx-Nx2.title" = "Change UI font size of candidate window for a better visual clarity.";
|
"iRg-wx-Nx2.title" = "Change UI font size of candidate window for a better visual clarity.";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[1] = "Item 2"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
|
||||||
"rVQ-Hx-cGi.title" = "Japanese";
|
"rVQ-Hx-cGi.title" = "Japanese";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Dictionary and Language Models"; ObjectID = "cf2-se-PDO"; */
|
|
||||||
"cf2-se-PDO.title" = "Dictionary and Language Models";
|
"cf2-se-PDO.title" = "Dictionary and Language Models";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred layout of the candidate window."; ObjectID = "xC5-yV-1W1"; */
|
|
||||||
"xC5-yV-1W1.title" = "Choose your preferred layout of the candidate window.";
|
"xC5-yV-1W1.title" = "Choose your preferred layout of the candidate window.";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */
|
|
||||||
"xrE-8T-WKO.label" = "Advanced";
|
"xrE-8T-WKO.label" = "Advanced";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Dictionary"; ObjectID = "2iG-Ic-gbl"; */
|
|
||||||
"2iG-Ic-gbl.label" = "Dictionary";
|
"2iG-Ic-gbl.label" = "Dictionary";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional."; ObjectID = "wQ9-px-b07"; */
|
|
||||||
"wQ9-px-b07.title" = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional.";
|
"wQ9-px-b07.title" = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional.";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Tab key in the candidate window."; ObjectID = "ueU-Rz-a1C"; */
|
|
||||||
"ueU-Rz-a1C.title" = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
"ueU-Rz-a1C.title" = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Pages"; ObjectID = "s7u-Fm-dVg"; */
|
|
||||||
"s7u-Fm-dVg.title" = "Cycling Pages";
|
"s7u-Fm-dVg.title" = "Cycling Pages";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Candidates"; ObjectID = "FVC-br-H57"; */
|
|
||||||
"FVC-br-H57.title" = "Cycling Candidates";
|
"FVC-br-H57.title" = "Cycling Candidates";
|
||||||
|
"Pg5-G9-pY5.title" = "Choose the behavior of (Shift+)Space key with candidates.";
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Space key in the candidate window."; ObjectID = "Pg5-G9-pY5"; */
|
|
||||||
"Pg5-G9-pY5.title" = "Choose the behavior of (Shift+)Space key in the candidate window.";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle pages, Shift+Space to +cycle candidates"; ObjectID = "XqL-rf-X6d"; */
|
|
||||||
"XqL-rf-X6d.title" = "Space to +cycle pages, Shift+Space to +cycle candidates";
|
"XqL-rf-X6d.title" = "Space to +cycle pages, Shift+Space to +cycle candidates";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle candidates, Shift+Space to +cycle pages"; ObjectID = "dIN-TZ-67g"; */
|
|
||||||
"dIN-TZ-67g.title" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
"dIN-TZ-67g.title" = "Space to +cycle candidates, Shift+Space to +cycle pages";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable symbol input support (incl. certain emoji symbols)"; ObjectID = "hSv-LJ-Cq3"; */
|
|
||||||
"hSv-LJ-Cq3.title" = "Enable symbol input support (incl. certain emoji symbols)";
|
"hSv-LJ-Cq3.title" = "Enable symbol input support (incl. certain emoji symbols)";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your desired user data folder path. Will be omitted if invalid."; ObjectID = "wN3-k3-b2a"; */
|
|
||||||
"wN3-k3-b2a.title" = "Choose your desired user data folder path. Will be omitted if invalid.";
|
"wN3-k3-b2a.title" = "Choose your desired user data folder path. Will be omitted if invalid.";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show Hanyu-Pinyin in the inline composition buffer"; ObjectID = "wFR-zX-M8H"; */
|
|
||||||
"wFR-zX-M8H.title" = "Show Hanyu-Pinyin in the inline composition buffer";
|
"wFR-zX-M8H.title" = "Show Hanyu-Pinyin in the inline composition buffer";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Output Hanyu-Pinyin in lieu of Zhuyin when Ctrl(+Alt)+CMD+Enter"; ObjectID = "iWy-Nw-QKB"; */
|
|
||||||
"iWy-Nw-QKB.title" = "Output Hanyu-Pinyin in lieu of Zhuyin when Ctrl(+Alt)+CMD+Enter";
|
"iWy-Nw-QKB.title" = "Output Hanyu-Pinyin in lieu of Zhuyin when Ctrl(+Alt)+CMD+Enter";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Dachen 26 (libChewing)"; ObjectID = "xjP-r7-GaK"; */
|
|
||||||
"xjP-r7-GaK.title" = "Dachen 26 (libChewing)";
|
"xjP-r7-GaK.title" = "Dachen 26 (libChewing)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Secondary Pinyin with Numeral Intonation"; ObjectID = "Parser11"; */
|
|
||||||
"Parser11.title" = "Secondary Pinyin with Numeral Intonation";
|
"Parser11.title" = "Secondary Pinyin with Numeral Intonation";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Yale Pinyin with Numeral Intonation"; ObjectID = "Parser12"; */
|
|
||||||
"Parser12.title" = "Yale Pinyin with Numeral Intonation";
|
"Parser12.title" = "Yale Pinyin with Numeral Intonation";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hualuo Pinyin with Numeral Intonation"; ObjectID = "Parser13"; */
|
|
||||||
"Parser13.title" = "Hualuo Pinyin with Numeral Intonation";
|
"Parser13.title" = "Hualuo Pinyin with Numeral Intonation";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Universal Pinyin with Numeral Intonation"; ObjectID = "Parser14"; */
|
|
||||||
"Parser14.title" = "Universal Pinyin with Numeral Intonation";
|
"Parser14.title" = "Universal Pinyin with Numeral Intonation";
|
||||||
|
"xibKeyboardShortcuts.title" = "Keyboard Shortcuts";
|
||||||
/* Class = "NSButtonCell"; title = "Balance the score according to candidate length"; ObjectID = "Wh1-iz-pwM"; */
|
"xibUsingHotKeySCPC.title" = "Per-Char Select Mode";
|
||||||
"Wh1-iz-pwM.title" = "Balance the score according to candidate length";
|
"xibUsingHotKeyAssociates.title" = "Per-Char Associated Phrases";
|
||||||
|
"xibUsingHotKeyCNS.title" = "CNS11643 Mode";
|
||||||
|
"xibUsingHotKeyKangXi.title" = "Force KangXi Writing";
|
||||||
|
"xibUsingHotKeyJIS.title" = "JIS Shinjitai Output";
|
||||||
|
"xibUsingHotKeyHalfWidthASCII.title" = "Half-Width Punctuation Mode";
|
||||||
|
"xibLabelBufferLimit.title" = "Buffer Limit:";
|
||||||
|
|
|
@ -1,252 +1,91 @@
|
||||||
|
|
||||||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
|
||||||
"1.title" = "威注音アプリ機能設定";
|
"1.title" = "威注音アプリ機能設定";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
|
||||||
"sZx-18-8dO.title" = "欠陥辿着モード";
|
"sZx-18-8dO.title" = "欠陥辿着モード";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
|
||||||
"5.title" = "OtherViews";
|
"5.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */
|
|
||||||
"6.title" = "大千配列(Microsoft 標準・王安など)";
|
"6.title" = "大千配列(Microsoft 標準・王安など)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */
|
|
||||||
"7.title" = "倚天伝統配列";
|
"7.title" = "倚天伝統配列";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hsu"; ObjectID = "8"; */
|
|
||||||
"8.title" = "許氏国音自然配列";
|
"8.title" = "許氏国音自然配列";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen26"; ObjectID = "9"; */
|
|
||||||
"9.title" = "倚天形忘れ配列 (26キー)";
|
"9.title" = "倚天形忘れ配列 (26キー)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hanyu Pinyin with Numeral Intonation"; ObjectID = "10"; */
|
|
||||||
"10.title" = "漢語弁音(ローマ字+数字音調)";
|
"10.title" = "漢語弁音(ローマ字+数字音調)";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "BPMF Parser:"; ObjectID = "12"; */
|
|
||||||
"12.title" = "注音配列:";
|
"12.title" = "注音配列:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */
|
|
||||||
"14.title" = "カーソルはどこで入力候補を呼び出すかとご選択ください:";
|
"14.title" = "カーソルはどこで入力候補を呼び出すかとご選択ください:";
|
||||||
|
"16.title" = "単語の前で // macOS 内蔵注音入力のやり方";
|
||||||
/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */
|
"17.title" = "単語の後で // Microsoft 新注音入力のやり方";
|
||||||
"16.title" = "単語の前で // macOS 内蔵注音入力の入力スタイル";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */
|
|
||||||
"17.title" = "単語の中・後で // Windows Yahoo KeyKey の入力スタイル";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */
|
|
||||||
"18.title" = "Radio";
|
"18.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "20"; */
|
|
||||||
"20.title" = "Radio";
|
"20.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Horizontal"; ObjectID = "21"; */
|
|
||||||
"21.title" = "横型陳列";
|
"21.title" = "横型陳列";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Vertical"; ObjectID = "22"; */
|
|
||||||
"22.title" = "縦型陳列";
|
"22.title" = "縦型陳列";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show page buttons in candidate list"; ObjectID = "shc-Nu-UsM"; */
|
|
||||||
"shc-Nu-UsM.title" = "ページボタンを表示";
|
"shc-Nu-UsM.title" = "ページボタンを表示";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate List Layout:"; ObjectID = "24"; */
|
|
||||||
"24.title" = "入力候補陳列の仕様:";
|
"24.title" = "入力候補陳列の仕様:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate UI font size:"; ObjectID = "29"; */
|
|
||||||
"29.title" = "候補文字の字号:";
|
"29.title" = "候補文字の字号:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "92"; */
|
|
||||||
"92.title" = "OtherViews";
|
"92.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "12"; ObjectID = "93"; */
|
|
||||||
"93.title" = "12";
|
"93.title" = "12";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "14"; ObjectID = "94"; */
|
|
||||||
"94.title" = "14";
|
"94.title" = "14";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "16"; ObjectID = "95"; */
|
|
||||||
"95.title" = "16";
|
"95.title" = "16";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "18"; ObjectID = "96"; */
|
|
||||||
"96.title" = "18";
|
"96.title" = "18";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "24"; ObjectID = "98"; */
|
|
||||||
"98.title" = "24";
|
"98.title" = "24";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "32"; ObjectID = "99"; */
|
|
||||||
"99.title" = "32";
|
"99.title" = "32";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "64"; ObjectID = "100"; */
|
|
||||||
"100.title" = "64";
|
"100.title" = "64";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "96"; ObjectID = "101"; */
|
|
||||||
"101.title" = "96";
|
"101.title" = "96";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable Space key for calling candidate window"; ObjectID = "110"; */
|
|
||||||
"110.title" = "Space キーで入力候補を呼び出す";
|
"110.title" = "Space キーで入力候補を呼び出す";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Basic Layout:"; ObjectID = "126"; */
|
|
||||||
"126.title" = "基礎キーボード:";
|
"126.title" = "基礎キーボード:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "128"; */
|
|
||||||
"128.title" = "OtherViews";
|
"128.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "IBM"; ObjectID = "137"; */
|
|
||||||
"137.title" = "IBM 配列";
|
"137.title" = "IBM 配列";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */
|
|
||||||
"7fV-x8-WHQ.title" = "神通配列";
|
"7fV-x8-WHQ.title" = "神通配列";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */
|
|
||||||
"27F-8T-FkQ.title" = "偽精業配列";
|
"27F-8T-FkQ.title" = "偽精業配列";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */
|
|
||||||
"1AW-xf-c2f.label" = "キーボード";
|
"1AW-xf-c2f.label" = "キーボード";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "General Settings"; ObjectID = "2Y6-Am-WM1"; */
|
|
||||||
"2Y6-Am-WM1.title" = "全般設定";
|
"2Y6-Am-WM1.title" = "全般設定";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
|
||||||
"2pS-nv-te4.title" = "お好きなる言選り用キー陣列をお選びください。";
|
"2pS-nv-te4.title" = "お好きなる言選り用キー陣列をお選びください。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
|
||||||
"62u-jY-BRh.title" = "マナーモード // 外すと入力間違の時に変な音が出る";
|
"62u-jY-BRh.title" = "マナーモード // 外すと入力間違の時に変な音が出る";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
|
||||||
"9DS-Rc-TXq.title" = "アプリ表示用言語:";
|
"9DS-Rc-TXq.title" = "アプリ表示用言語:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Emulating select-candidate-per-character mode"; ObjectID = "ArK-Vk-OoT"; */
|
|
||||||
"ArK-Vk-OoT.title" = "漢字1つづつ全候補選択入力モード";
|
"ArK-Vk-OoT.title" = "漢字1つづつ全候補選択入力モード";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
|
||||||
"BSK-bH-Gct.title" = "入力した繁体字を康熙字体と自動変換";
|
"BSK-bH-Gct.title" = "入力した繁体字を康熙字体と自動変換";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "eia-1F-Do0"; */
|
|
||||||
"eia-1F-Do0.title" = "入力した繁体字を日文 JIS 新字体と自動変換";
|
"eia-1F-Do0.title" = "入力した繁体字を日文 JIS 新字体と自動変換";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Advanced Settings"; ObjectID = "E1l-m8-xgb"; */
|
|
||||||
"E1l-m8-xgb.title" = "詳細設定";
|
"E1l-m8-xgb.title" = "詳細設定";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "English"; ObjectID = "FSG-lN-CJO"; */
|
|
||||||
"FSG-lN-CJO.title" = "英語";
|
"FSG-lN-CJO.title" = "英語";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Selection Keys:"; ObjectID = "FnD-oH-El5"; */
|
|
||||||
"FnD-oH-El5.title" = "言選り用キー:";
|
"FnD-oH-El5.title" = "言選り用キー:";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
|
||||||
"GlJ-Ns-9eE.title" = "システム設定に準ずる";
|
"GlJ-Ns-9eE.title" = "システム設定に準ずる";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
|
||||||
"QUQ-oY-4Hc.label" = "全般";
|
"QUQ-oY-4Hc.label" = "全般";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */
|
|
||||||
"RQ6-MS-m4C.title" = "お好きなるキーボードとそれに相応しい注音配列をお選びください。";
|
"RQ6-MS-m4C.title" = "お好きなるキーボードとそれに相応しい注音配列をお選びください。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */
|
|
||||||
"RUG-ls-KyA.title" = "候補選択の直後、すぐカーソルを単語の向こうに推す";
|
"RUG-ls-KyA.title" = "候補選択の直後、すぐカーソルを単語の向こうに推す";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */
|
|
||||||
"TXr-FF-ehw.title" = "繁体中国語";
|
"TXr-FF-ehw.title" = "繁体中国語";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Output Settings"; ObjectID = "Uyz-xL-TVN"; */
|
|
||||||
"Uyz-xL-TVN.title" = "出力設定";
|
"Uyz-xL-TVN.title" = "出力設定";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable CNS11643 Support (2022-04-27)"; ObjectID = "W24-T4-cg0"; */
|
|
||||||
"W24-T4-cg0.title" = "全字庫モード // 入力可能の漢字数倍増 (2022-04-27)";
|
"W24-T4-cg0.title" = "全字庫モード // 入力可能の漢字数倍増 (2022-04-27)";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Keyboard Layout"; ObjectID = "Wvt-HE-LOv"; */
|
|
||||||
"Wvt-HE-LOv.title" = "キーボード";
|
"Wvt-HE-LOv.title" = "キーボード";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Check for updates automatically"; ObjectID = "Z9t-P0-BLF"; */
|
|
||||||
"Z9t-P0-BLF.title" = "アプリの更新通知を受く";
|
"Z9t-P0-BLF.title" = "アプリの更新通知を受く";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change user interface language (will reboot the IME)."; ObjectID = "ZEv-Q2-mYL"; */
|
|
||||||
"ZEv-Q2-mYL.title" = "アプリ表示用言語をご指定ください、そして入力アプリは自動的に再起動。";
|
"ZEv-Q2-mYL.title" = "アプリ表示用言語をご指定ください、そして入力アプリは自動的に再起動。";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Simplified Chinese"; ObjectID = "akC-2g-ybz"; */
|
|
||||||
"akC-2g-ybz.title" = "簡体中国語";
|
"akC-2g-ybz.title" = "簡体中国語";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use ESC key to clear entire input buffer"; ObjectID = "f2j-xD-4xK"; */
|
|
||||||
"f2j-xD-4xK.title" = "ESC キーで入力緩衝列を消す";
|
"f2j-xD-4xK.title" = "ESC キーで入力緩衝列を消す";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */
|
|
||||||
"f8i-69-zxm.title" = "変更されたユーザー辞書データを自動的に再読込";
|
"f8i-69-zxm.title" = "変更されたユーザー辞書データを自動的に再読込";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
|
||||||
"iRg-wx-Nx2.title" = "入力候補陣列の候補文字の字号をご指定ください。";
|
"iRg-wx-Nx2.title" = "入力候補陣列の候補文字の字号をご指定ください。";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[1] = "Item 2"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
|
||||||
"rVQ-Hx-cGi.title" = "和語";
|
"rVQ-Hx-cGi.title" = "和語";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Dictionary and Language Models"; ObjectID = "cf2-se-PDO"; */
|
|
||||||
"cf2-se-PDO.title" = "辞書と言語モデル";
|
"cf2-se-PDO.title" = "辞書と言語モデル";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred layout of the candidate window."; ObjectID = "xC5-yV-1W1"; */
|
|
||||||
"xC5-yV-1W1.title" = "入力候補陳列の仕様をご指定ください。";
|
"xC5-yV-1W1.title" = "入力候補陳列の仕様をご指定ください。";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */
|
|
||||||
"xrE-8T-WKO.label" = "詳細";
|
"xrE-8T-WKO.label" = "詳細";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Dictionary"; ObjectID = "2iG-Ic-gbl"; */
|
|
||||||
"2iG-Ic-gbl.label" = "辞書";
|
"2iG-Ic-gbl.label" = "辞書";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional."; ObjectID = "wQ9-px-b07"; */
|
|
||||||
"wQ9-px-b07.title" = "Apple 動態注音キーボード (大千と倚天伝統) を使うには、共通語分析器の注音配列を大千と設定すべきである。";
|
"wQ9-px-b07.title" = "Apple 動態注音キーボード (大千と倚天伝統) を使うには、共通語分析器の注音配列を大千と設定すべきである。";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Tab key in the candidate window."; ObjectID = "ueU-Rz-a1C"; */
|
|
||||||
"ueU-Rz-a1C.title" = "入力候補陳列での (Shift+)Tab キーの輪番切替対象をご指定ください。";
|
"ueU-Rz-a1C.title" = "入力候補陳列での (Shift+)Tab キーの輪番切替対象をご指定ください。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Pages"; ObjectID = "s7u-Fm-dVg"; */
|
|
||||||
"s7u-Fm-dVg.title" = "ページ";
|
"s7u-Fm-dVg.title" = "ページ";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Candidates"; ObjectID = "FVC-br-H57"; */
|
|
||||||
"FVC-br-H57.title" = "候補文字そのもの";
|
"FVC-br-H57.title" = "候補文字そのもの";
|
||||||
|
"Pg5-G9-pY5.title" = "入力候補についての (Shift+)Space キーの輪番切替対象をご指定ください。";
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Space key in the candidate window."; ObjectID = "Pg5-G9-pY5"; */
|
|
||||||
"Pg5-G9-pY5.title" = "入力候補陳列での (Shift+)Space キーの輪番切替対象をご指定ください。";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle pages, Shift+Space to +cycle candidates"; ObjectID = "XqL-rf-X6d"; */
|
|
||||||
"XqL-rf-X6d.title" = "Space で次のページ、Shift+Space で次の候補文字を";
|
"XqL-rf-X6d.title" = "Space で次のページ、Shift+Space で次の候補文字を";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle candidates, Shift+Space to +cycle pages"; ObjectID = "dIN-TZ-67g"; */
|
|
||||||
"dIN-TZ-67g.title" = "Shift+Space で次のページ、Space で次の候補文字を";
|
"dIN-TZ-67g.title" = "Shift+Space で次のページ、Space で次の候補文字を";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable symbol input support (incl. certain emoji symbols)"; ObjectID = "hSv-LJ-Cq3"; */
|
|
||||||
"hSv-LJ-Cq3.title" = "僅かなる絵文字も含む符号入力サポートを起用";
|
"hSv-LJ-Cq3.title" = "僅かなる絵文字も含む符号入力サポートを起用";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your desired user data folder path. Will be omitted if invalid."; ObjectID = "wN3-k3-b2a"; */
|
|
||||||
"wN3-k3-b2a.title" = "欲しがるユーザー辞書保存先をご指定ください。無効の保存先設定は効かぬ。";
|
"wN3-k3-b2a.title" = "欲しがるユーザー辞書保存先をご指定ください。無効の保存先設定は効かぬ。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show Hanyu-Pinyin in the inline composition buffer"; ObjectID = "wFR-zX-M8H"; */
|
|
||||||
"wFR-zX-M8H.title" = "弁音合併入力(入力緩衝列で代わりに漢語弁音の音読み)";
|
"wFR-zX-M8H.title" = "弁音合併入力(入力緩衝列で代わりに漢語弁音の音読み)";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Output Hanyu-Pinyin in lieu of Zhuyin when Ctrl(+Alt)+CMD+Enter"; ObjectID = "iWy-Nw-QKB"; */
|
|
||||||
"iWy-Nw-QKB.title" = "Ctrl(+Alt)+CMD+Enter で出すのを漢語弁音と変換";
|
"iWy-Nw-QKB.title" = "Ctrl(+Alt)+CMD+Enter で出すのを漢語弁音と変換";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Dachen 26 (libChewing)"; ObjectID = "xjP-r7-GaK"; */
|
|
||||||
"xjP-r7-GaK.title" = "酷音大千 26 キー配列";
|
"xjP-r7-GaK.title" = "酷音大千 26 キー配列";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Secondary Pinyin with Numeral Intonation"; ObjectID = "Parser11"; */
|
|
||||||
"Parser11.title" = "国音二式 (ローマ字+数字音調)";
|
"Parser11.title" = "国音二式 (ローマ字+数字音調)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Yale Pinyin with Numeral Intonation"; ObjectID = "Parser12"; */
|
|
||||||
"Parser12.title" = "イェール弁音 (ローマ字+数字音調)";
|
"Parser12.title" = "イェール弁音 (ローマ字+数字音調)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hualuo Pinyin with Numeral Intonation"; ObjectID = "Parser13"; */
|
|
||||||
"Parser13.title" = "中華ローマ弁音 (ローマ字+数字音調)";
|
"Parser13.title" = "中華ローマ弁音 (ローマ字+数字音調)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Universal Pinyin with Numeral Intonation"; ObjectID = "Parser14"; */
|
|
||||||
"Parser14.title" = "汎用弁音 (ローマ字+数字音調)";
|
"Parser14.title" = "汎用弁音 (ローマ字+数字音調)";
|
||||||
|
"xibKeyboardShortcuts.title" = "ショートカット";
|
||||||
/* Class = "NSButtonCell"; title = "Balance the score according to candidate length"; ObjectID = "Wh1-iz-pwM"; */
|
"xibUsingHotKeySCPC.title" = "全候補入力モード";
|
||||||
"Wh1-iz-pwM.title" = "候補文字の長さによる重みの調整";
|
"xibUsingHotKeyAssociates.title" = "全候補入力で連想語彙";
|
||||||
|
"xibUsingHotKeyCNS.title" = "全字庫モード";
|
||||||
|
"xibUsingHotKeyKangXi.title" = "康熙文字変換モード";
|
||||||
|
"xibUsingHotKeyJIS.title" = "JIS 新字体モード";
|
||||||
|
"xibUsingHotKeyHalfWidthASCII.title" = "半角句読モード";
|
||||||
|
"xibLabelBufferLimit.title" = "緩衝列の容量:";
|
||||||
|
|
|
@ -1,252 +1,91 @@
|
||||||
|
|
||||||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
|
||||||
"1.title" = "威注音偏好设定";
|
"1.title" = "威注音偏好设定";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
|
||||||
"sZx-18-8dO.title" = "侦错模式";
|
"sZx-18-8dO.title" = "侦错模式";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
|
||||||
"5.title" = "OtherViews";
|
"5.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */
|
|
||||||
"6.title" = "微软/大千/王安/国乔/零壹/仲鼎";
|
"6.title" = "微软/大千/王安/国乔/零壹/仲鼎";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */
|
|
||||||
"7.title" = "倚天传统";
|
"7.title" = "倚天传统";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hsu"; ObjectID = "8"; */
|
|
||||||
"8.title" = "许氏(国音&自然)";
|
"8.title" = "许氏(国音&自然)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen26"; ObjectID = "9"; */
|
|
||||||
"9.title" = "倚天二十六键";
|
"9.title" = "倚天二十六键";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hanyu Pinyin with Numeral Intonation"; ObjectID = "10"; */
|
|
||||||
"10.title" = "汉语拼音+数字标调";
|
"10.title" = "汉语拼音+数字标调";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "BPMF Parser:"; ObjectID = "12"; */
|
|
||||||
"12.title" = "基础键盘布局:";
|
"12.title" = "基础键盘布局:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */
|
|
||||||
"14.title" = "用以触发选字的光标相对位置:";
|
"14.title" = "用以触发选字的光标相对位置:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */
|
|
||||||
"16.title" = "光标置于词语前方 // macOS 内建注音风格";
|
"16.title" = "光标置于词语前方 // macOS 内建注音风格";
|
||||||
|
"17.title" = "光标置于词语后方 // Windows 微软新注音风格";
|
||||||
/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */
|
|
||||||
"17.title" = "光标置于词语中后方 // Windows 奇摩注音风格";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */
|
|
||||||
"18.title" = "Radio";
|
"18.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "20"; */
|
|
||||||
"20.title" = "Radio";
|
"20.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Horizontal"; ObjectID = "21"; */
|
|
||||||
"21.title" = "横向布局";
|
"21.title" = "横向布局";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Vertical"; ObjectID = "22"; */
|
|
||||||
"22.title" = "纵向布局";
|
"22.title" = "纵向布局";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show page buttons in candidate list"; ObjectID = "shc-Nu-UsM"; */
|
|
||||||
"shc-Nu-UsM.title" = "在选字窗内显示翻页按钮";
|
"shc-Nu-UsM.title" = "在选字窗内显示翻页按钮";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate List Layout:"; ObjectID = "24"; */
|
|
||||||
"24.title" = "候选字窗布局:";
|
"24.title" = "候选字窗布局:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate UI font size:"; ObjectID = "29"; */
|
|
||||||
"29.title" = "字型大小设定:";
|
"29.title" = "字型大小设定:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "92"; */
|
|
||||||
"92.title" = "OtherViews";
|
"92.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "12"; ObjectID = "93"; */
|
|
||||||
"93.title" = "12";
|
"93.title" = "12";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "14"; ObjectID = "94"; */
|
|
||||||
"94.title" = "14";
|
"94.title" = "14";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "16"; ObjectID = "95"; */
|
|
||||||
"95.title" = "16";
|
"95.title" = "16";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "18"; ObjectID = "96"; */
|
|
||||||
"96.title" = "18";
|
"96.title" = "18";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "24"; ObjectID = "98"; */
|
|
||||||
"98.title" = "24";
|
"98.title" = "24";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "32"; ObjectID = "99"; */
|
|
||||||
"99.title" = "32";
|
"99.title" = "32";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "64"; ObjectID = "100"; */
|
|
||||||
"100.title" = "64";
|
"100.title" = "64";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "96"; ObjectID = "101"; */
|
|
||||||
"101.title" = "96";
|
"101.title" = "96";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable Space key for calling candidate window"; ObjectID = "110"; */
|
|
||||||
"110.title" = "敲空格键以选字";
|
"110.title" = "敲空格键以选字";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Basic Layout:"; ObjectID = "126"; */
|
|
||||||
"126.title" = "英数键盘布局:";
|
"126.title" = "英数键盘布局:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "128"; */
|
|
||||||
"128.title" = "OtherViews";
|
"128.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "IBM"; ObjectID = "137"; */
|
|
||||||
"137.title" = "IBM";
|
"137.title" = "IBM";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */
|
|
||||||
"7fV-x8-WHQ.title" = "神通";
|
"7fV-x8-WHQ.title" = "神通";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */
|
|
||||||
"27F-8T-FkQ.title" = "伪精业";
|
"27F-8T-FkQ.title" = "伪精业";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */
|
|
||||||
"1AW-xf-c2f.label" = "键盘";
|
"1AW-xf-c2f.label" = "键盘";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "General Settings"; ObjectID = "2Y6-Am-WM1"; */
|
|
||||||
"2Y6-Am-WM1.title" = "一般设定";
|
"2Y6-Am-WM1.title" = "一般设定";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
|
||||||
"2pS-nv-te4.title" = "选择您所偏好的用来选字的按键组合。";
|
"2pS-nv-te4.title" = "选择您所偏好的用来选字的按键组合。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
|
||||||
"62u-jY-BRh.title" = "廉耻模式 // 取消勾选的话,敲错字时会有异音";
|
"62u-jY-BRh.title" = "廉耻模式 // 取消勾选的话,敲错字时会有异音";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
|
||||||
"9DS-Rc-TXq.title" = "接口语言设定:";
|
"9DS-Rc-TXq.title" = "接口语言设定:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Emulating select-candidate-per-character mode"; ObjectID = "ArK-Vk-OoT"; */
|
|
||||||
"ArK-Vk-OoT.title" = "仿真 90 年代前期注音逐字选字输入风格";
|
"ArK-Vk-OoT.title" = "仿真 90 年代前期注音逐字选字输入风格";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
|
||||||
"BSK-bH-Gct.title" = "自动将繁体中文字转换为康熙正体字";
|
"BSK-bH-Gct.title" = "自动将繁体中文字转换为康熙正体字";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "eia-1F-Do0"; */
|
|
||||||
"eia-1F-Do0.title" = "自动将繁体中文字转换为日本简化字(JIS 新字体)";
|
"eia-1F-Do0.title" = "自动将繁体中文字转换为日本简化字(JIS 新字体)";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Advanced Settings"; ObjectID = "E1l-m8-xgb"; */
|
|
||||||
"E1l-m8-xgb.title" = "进阶设定";
|
"E1l-m8-xgb.title" = "进阶设定";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "English"; ObjectID = "FSG-lN-CJO"; */
|
|
||||||
"FSG-lN-CJO.title" = "英文";
|
"FSG-lN-CJO.title" = "英文";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Selection Keys:"; ObjectID = "FnD-oH-El5"; */
|
|
||||||
"FnD-oH-El5.title" = "选字键:";
|
"FnD-oH-El5.title" = "选字键:";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
|
||||||
"GlJ-Ns-9eE.title" = "自动选择";
|
"GlJ-Ns-9eE.title" = "自动选择";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
|
||||||
"QUQ-oY-4Hc.label" = "一般";
|
"QUQ-oY-4Hc.label" = "一般";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */
|
|
||||||
"RQ6-MS-m4C.title" = "选择您所偏好的系统键盘布局与注音分析器排列。";
|
"RQ6-MS-m4C.title" = "选择您所偏好的系统键盘布局与注音分析器排列。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */
|
|
||||||
"RUG-ls-KyA.title" = "在选字后将光标置于该字词的前方";
|
"RUG-ls-KyA.title" = "在选字后将光标置于该字词的前方";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */
|
|
||||||
"TXr-FF-ehw.title" = "繁体中文";
|
"TXr-FF-ehw.title" = "繁体中文";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Output Settings"; ObjectID = "Uyz-xL-TVN"; */
|
|
||||||
"Uyz-xL-TVN.title" = "输出设定";
|
"Uyz-xL-TVN.title" = "输出设定";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable CNS11643 Support (2022-04-27)"; ObjectID = "W24-T4-cg0"; */
|
|
||||||
"W24-T4-cg0.title" = "启用 CNS11643 全字库支援 (2022-04-27)";
|
"W24-T4-cg0.title" = "启用 CNS11643 全字库支援 (2022-04-27)";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Keyboard Layout"; ObjectID = "Wvt-HE-LOv"; */
|
|
||||||
"Wvt-HE-LOv.title" = "键盘布局";
|
"Wvt-HE-LOv.title" = "键盘布局";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Check for updates automatically"; ObjectID = "Z9t-P0-BLF"; */
|
|
||||||
"Z9t-P0-BLF.title" = "自动检查软件更新";
|
"Z9t-P0-BLF.title" = "自动检查软件更新";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change user interface language (will reboot the IME)."; ObjectID = "ZEv-Q2-mYL"; */
|
|
||||||
"ZEv-Q2-mYL.title" = "变更使用者接口语言,会自动重新启动输入法。";
|
"ZEv-Q2-mYL.title" = "变更使用者接口语言,会自动重新启动输入法。";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Simplified Chinese"; ObjectID = "akC-2g-ybz"; */
|
|
||||||
"akC-2g-ybz.title" = "简体中文";
|
"akC-2g-ybz.title" = "简体中文";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use ESC key to clear entire input buffer"; ObjectID = "f2j-xD-4xK"; */
|
|
||||||
"f2j-xD-4xK.title" = "敲 ESC 键以清空整个输入缓冲区";
|
"f2j-xD-4xK.title" = "敲 ESC 键以清空整个输入缓冲区";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */
|
|
||||||
"f8i-69-zxm.title" = "自动重新加载变更过的使用者资料内容";
|
"f8i-69-zxm.title" = "自动重新加载变更过的使用者资料内容";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
|
||||||
"iRg-wx-Nx2.title" = "变更候选字窗的字型大小。";
|
"iRg-wx-Nx2.title" = "变更候选字窗的字型大小。";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[1] = "Item 2"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
|
||||||
"rVQ-Hx-cGi.title" = "和语";
|
"rVQ-Hx-cGi.title" = "和语";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Dictionary and Language Models"; ObjectID = "cf2-se-PDO"; */
|
|
||||||
"cf2-se-PDO.title" = "辞典&語言模型";
|
"cf2-se-PDO.title" = "辞典&語言模型";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred layout of the candidate window."; ObjectID = "xC5-yV-1W1"; */
|
|
||||||
"xC5-yV-1W1.title" = "选择您所偏好的候选字窗布局。";
|
"xC5-yV-1W1.title" = "选择您所偏好的候选字窗布局。";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */
|
|
||||||
"xrE-8T-WKO.label" = "进阶";
|
"xrE-8T-WKO.label" = "进阶";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Dictionary"; ObjectID = "2iG-Ic-gbl"; */
|
|
||||||
"2iG-Ic-gbl.label" = "辞典";
|
"2iG-Ic-gbl.label" = "辞典";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional."; ObjectID = "wQ9-px-b07"; */
|
|
||||||
"wQ9-px-b07.title" = "Apple 动态注音键盘布局(大千与倚天)要求普通话/国音分析器的注音排列得配置为大千排列。";
|
"wQ9-px-b07.title" = "Apple 动态注音键盘布局(大千与倚天)要求普通话/国音分析器的注音排列得配置为大千排列。";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Tab key in the candidate window."; ObjectID = "ueU-Rz-a1C"; */
|
|
||||||
"ueU-Rz-a1C.title" = "指定 (Shift+)Tab 热键在选字窗内的轮替操作对象。";
|
"ueU-Rz-a1C.title" = "指定 (Shift+)Tab 热键在选字窗内的轮替操作对象。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Pages"; ObjectID = "s7u-Fm-dVg"; */
|
|
||||||
"s7u-Fm-dVg.title" = "轮替页面";
|
"s7u-Fm-dVg.title" = "轮替页面";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Candidates"; ObjectID = "FVC-br-H57"; */
|
|
||||||
"FVC-br-H57.title" = "轮替候选字";
|
"FVC-br-H57.title" = "轮替候选字";
|
||||||
|
"Pg5-G9-pY5.title" = "指定 (Shift+)Space 热键对候选字词而言的轮替操作对象。";
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Space key in the candidate window."; ObjectID = "Pg5-G9-pY5"; */
|
|
||||||
"Pg5-G9-pY5.title" = "指定 (Shift+)Space 热键在选字窗内的轮替操作对象。";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle pages, Shift+Space to +cycle candidates"; ObjectID = "XqL-rf-X6d"; */
|
|
||||||
"XqL-rf-X6d.title" = "Space 换下一页,Shift+Space 换选下一个候选字。";
|
"XqL-rf-X6d.title" = "Space 换下一页,Shift+Space 换选下一个候选字。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle candidates, Shift+Space to +cycle pages"; ObjectID = "dIN-TZ-67g"; */
|
|
||||||
"dIN-TZ-67g.title" = "Shift+Space 换下一页,Space 换选下一个候选字。";
|
"dIN-TZ-67g.title" = "Shift+Space 换下一页,Space 换选下一个候选字。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable symbol input support (incl. certain emoji symbols)"; ObjectID = "hSv-LJ-Cq3"; */
|
|
||||||
"hSv-LJ-Cq3.title" = "启用包括少许绘文字在内的符号输入支援";
|
"hSv-LJ-Cq3.title" = "启用包括少许绘文字在内的符号输入支援";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your desired user data folder path. Will be omitted if invalid."; ObjectID = "wN3-k3-b2a"; */
|
|
||||||
"wN3-k3-b2a.title" = "请在此指定您想指定的使用者语汇档案目录。无效值会被忽略。";
|
"wN3-k3-b2a.title" = "请在此指定您想指定的使用者语汇档案目录。无效值会被忽略。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show Hanyu-Pinyin in the inline composition buffer"; ObjectID = "wFR-zX-M8H"; */
|
|
||||||
"wFR-zX-M8H.title" = "拼音并击模式(组字区内看到的是汉语拼音)";
|
"wFR-zX-M8H.title" = "拼音并击模式(组字区内看到的是汉语拼音)";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Output Hanyu-Pinyin in lieu of Zhuyin when Ctrl(+Alt)+CMD+Enter"; ObjectID = "iWy-Nw-QKB"; */
|
|
||||||
"iWy-Nw-QKB.title" = "Ctrl(+Alt)+CMD+Enter 输出汉语拼音而非注音";
|
"iWy-Nw-QKB.title" = "Ctrl(+Alt)+CMD+Enter 输出汉语拼音而非注音";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Dachen 26 (libChewing)"; ObjectID = "xjP-r7-GaK"; */
|
|
||||||
"xjP-r7-GaK.title" = "酷音大千二十六键";
|
"xjP-r7-GaK.title" = "酷音大千二十六键";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Secondary Pinyin with Numeral Intonation"; ObjectID = "Parser11"; */
|
|
||||||
"Parser11.title" = "国音二式+数字标调";
|
"Parser11.title" = "国音二式+数字标调";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Yale Pinyin with Numeral Intonation"; ObjectID = "Parser12"; */
|
|
||||||
"Parser12.title" = "耶鲁拼音+数字标调";
|
"Parser12.title" = "耶鲁拼音+数字标调";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hualuo Pinyin with Numeral Intonation"; ObjectID = "Parser13"; */
|
|
||||||
"Parser13.title" = "华罗拼音+数字标调";
|
"Parser13.title" = "华罗拼音+数字标调";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Universal Pinyin with Numeral Intonation"; ObjectID = "Parser14"; */
|
|
||||||
"Parser14.title" = "通用拼音+数字标调";
|
"Parser14.title" = "通用拼音+数字标调";
|
||||||
|
"xibKeyboardShortcuts.title" = "键盘快捷键";
|
||||||
/* Class = "NSButtonCell"; title = "Balance the score according to candidate length"; ObjectID = "Wh1-iz-pwM"; */
|
"xibUsingHotKeySCPC.title" = "模拟逐字选字输入";
|
||||||
"Wh1-iz-pwM.title" = "按候选字词的长度调整权重";
|
"xibUsingHotKeyAssociates.title" = "逐字选字联想模式";
|
||||||
|
"xibUsingHotKeyCNS.title" = "全字库模式";
|
||||||
|
"xibUsingHotKeyKangXi.title" = "康熙正体字模式";
|
||||||
|
"xibUsingHotKeyJIS.title" = "JIS 新字体模式";
|
||||||
|
"xibUsingHotKeyHalfWidthASCII.title" = "半形标点模式";
|
||||||
|
"xibLabelBufferLimit.title" = "组字区容量:";
|
||||||
|
|
|
@ -1,252 +1,91 @@
|
||||||
|
|
||||||
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
|
|
||||||
"1.title" = "威注音偏好設定";
|
"1.title" = "威注音偏好設定";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug Mode"; ObjectID = "sZx-18-8dO"; */
|
|
||||||
"sZx-18-8dO.title" = "偵錯模式";
|
"sZx-18-8dO.title" = "偵錯模式";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
|
|
||||||
"5.title" = "OtherViews";
|
"5.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */
|
|
||||||
"6.title" = "微軟/大千/王安/國喬/零壹/仲鼎";
|
"6.title" = "微軟/大千/王安/國喬/零壹/仲鼎";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */
|
|
||||||
"7.title" = "倚天傳統";
|
"7.title" = "倚天傳統";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hsu"; ObjectID = "8"; */
|
|
||||||
"8.title" = "許氏(國音&自然)";
|
"8.title" = "許氏(國音&自然)";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "ETen26"; ObjectID = "9"; */
|
|
||||||
"9.title" = "倚天二十六鍵";
|
"9.title" = "倚天二十六鍵";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hanyu Pinyin with Numeral Intonation"; ObjectID = "10"; */
|
|
||||||
"10.title" = "漢語拼音+數字標調";
|
"10.title" = "漢語拼音+數字標調";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "BPMF Parser:"; ObjectID = "12"; */
|
|
||||||
"12.title" = "注音排列:";
|
"12.title" = "注音排列:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */
|
|
||||||
"14.title" = "用以觸發選字的游標相對位置:";
|
"14.title" = "用以觸發選字的游標相對位置:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */
|
|
||||||
"16.title" = "游標置於詞語前方 // macOS 內建注音風格";
|
"16.title" = "游標置於詞語前方 // macOS 內建注音風格";
|
||||||
|
"17.title" = "游標置於詞語後方 // Windows 微軟新注音風格";
|
||||||
/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */
|
|
||||||
"17.title" = "游標置於詞語中後方 // Windows 奇摩注音風格";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */
|
|
||||||
"18.title" = "Radio";
|
"18.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "20"; */
|
|
||||||
"20.title" = "Radio";
|
"20.title" = "Radio";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Horizontal"; ObjectID = "21"; */
|
|
||||||
"21.title" = "橫向佈局";
|
"21.title" = "橫向佈局";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Vertical"; ObjectID = "22"; */
|
|
||||||
"22.title" = "縱向佈局";
|
"22.title" = "縱向佈局";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show page buttons in candidate list"; ObjectID = "shc-Nu-UsM"; */
|
|
||||||
"shc-Nu-UsM.title" = "在選字窗內顯示翻頁按鈕";
|
"shc-Nu-UsM.title" = "在選字窗內顯示翻頁按鈕";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate List Layout:"; ObjectID = "24"; */
|
|
||||||
"24.title" = "候選字窗佈局:";
|
"24.title" = "候選字窗佈局:";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Candidate UI font size:"; ObjectID = "29"; */
|
|
||||||
"29.title" = "字型大小設定:";
|
"29.title" = "字型大小設定:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "92"; */
|
|
||||||
"92.title" = "OtherViews";
|
"92.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "12"; ObjectID = "93"; */
|
|
||||||
"93.title" = "12";
|
"93.title" = "12";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "14"; ObjectID = "94"; */
|
|
||||||
"94.title" = "14";
|
"94.title" = "14";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "16"; ObjectID = "95"; */
|
|
||||||
"95.title" = "16";
|
"95.title" = "16";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "18"; ObjectID = "96"; */
|
|
||||||
"96.title" = "18";
|
"96.title" = "18";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "24"; ObjectID = "98"; */
|
|
||||||
"98.title" = "24";
|
"98.title" = "24";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "32"; ObjectID = "99"; */
|
|
||||||
"99.title" = "32";
|
"99.title" = "32";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "64"; ObjectID = "100"; */
|
|
||||||
"100.title" = "64";
|
"100.title" = "64";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "96"; ObjectID = "101"; */
|
|
||||||
"101.title" = "96";
|
"101.title" = "96";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable Space key for calling candidate window"; ObjectID = "110"; */
|
|
||||||
"110.title" = "敲空格鍵以選字";
|
"110.title" = "敲空格鍵以選字";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Basic Layout:"; ObjectID = "126"; */
|
|
||||||
"126.title" = "基礎鍵盤佈局:";
|
"126.title" = "基礎鍵盤佈局:";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "128"; */
|
|
||||||
"128.title" = "OtherViews";
|
"128.title" = "OtherViews";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "IBM"; ObjectID = "137"; */
|
|
||||||
"137.title" = "IBM";
|
"137.title" = "IBM";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "MiTAC"; ObjectID = "7fV-x8-WHQ"; */
|
|
||||||
"7fV-x8-WHQ.title" = "神通";
|
"7fV-x8-WHQ.title" = "神通";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Fake Seigyou"; ObjectID = "27F-8T-FkQ"; */
|
|
||||||
"27F-8T-FkQ.title" = "偽精業";
|
"27F-8T-FkQ.title" = "偽精業";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */
|
|
||||||
"1AW-xf-c2f.label" = "鍵盤";
|
"1AW-xf-c2f.label" = "鍵盤";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "General Settings"; ObjectID = "2Y6-Am-WM1"; */
|
|
||||||
"2Y6-Am-WM1.title" = "一般設定";
|
"2Y6-Am-WM1.title" = "一般設定";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
|
|
||||||
"2pS-nv-te4.title" = "選擇您所偏好的用來選字的按鍵組合。";
|
"2pS-nv-te4.title" = "選擇您所偏好的用來選字的按鍵組合。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
|
|
||||||
"62u-jY-BRh.title" = "廉恥模式 // 取消勾選的話,敲錯字時會有異音";
|
"62u-jY-BRh.title" = "廉恥模式 // 取消勾選的話,敲錯字時會有異音";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
|
|
||||||
"9DS-Rc-TXq.title" = "介面語言設定:";
|
"9DS-Rc-TXq.title" = "介面語言設定:";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Emulating select-candidate-per-character mode"; ObjectID = "ArK-Vk-OoT"; */
|
|
||||||
"ArK-Vk-OoT.title" = "模擬 90 年代前期注音逐字選字輸入風格";
|
"ArK-Vk-OoT.title" = "模擬 90 年代前期注音逐字選字輸入風格";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
|
|
||||||
"BSK-bH-Gct.title" = "自動將繁體中文字轉換為康熙正體字";
|
"BSK-bH-Gct.title" = "自動將繁體中文字轉換為康熙正體字";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "eia-1F-Do0"; */
|
|
||||||
"eia-1F-Do0.title" = "自動將繁體中文字轉換為日本簡化字(JIS 新字體)";
|
"eia-1F-Do0.title" = "自動將繁體中文字轉換為日本簡化字(JIS 新字體)";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Advanced Settings"; ObjectID = "E1l-m8-xgb"; */
|
|
||||||
"E1l-m8-xgb.title" = "進階設定";
|
"E1l-m8-xgb.title" = "進階設定";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "English"; ObjectID = "FSG-lN-CJO"; */
|
|
||||||
"FSG-lN-CJO.title" = "英文";
|
"FSG-lN-CJO.title" = "英文";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Selection Keys:"; ObjectID = "FnD-oH-El5"; */
|
|
||||||
"FnD-oH-El5.title" = "選字鍵:";
|
"FnD-oH-El5.title" = "選字鍵:";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
|
|
||||||
"GlJ-Ns-9eE.title" = "自動選擇";
|
"GlJ-Ns-9eE.title" = "自動選擇";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
|
|
||||||
"QUQ-oY-4Hc.label" = "一般";
|
"QUQ-oY-4Hc.label" = "一般";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */
|
|
||||||
"RQ6-MS-m4C.title" = "選擇您所偏好的系統鍵盤佈局與注音分析器排列。";
|
"RQ6-MS-m4C.title" = "選擇您所偏好的系統鍵盤佈局與注音分析器排列。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */
|
|
||||||
"RUG-ls-KyA.title" = "在選字後將游標置於該字詞的前方";
|
"RUG-ls-KyA.title" = "在選字後將游標置於該字詞的前方";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */
|
|
||||||
"TXr-FF-ehw.title" = "繁體中文";
|
"TXr-FF-ehw.title" = "繁體中文";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Output Settings"; ObjectID = "Uyz-xL-TVN"; */
|
|
||||||
"Uyz-xL-TVN.title" = "輸出設定";
|
"Uyz-xL-TVN.title" = "輸出設定";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable CNS11643 Support (2022-04-27)"; ObjectID = "W24-T4-cg0"; */
|
|
||||||
"W24-T4-cg0.title" = "啟用 CNS11643 全字庫支援 (2022-04-27)";
|
"W24-T4-cg0.title" = "啟用 CNS11643 全字庫支援 (2022-04-27)";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Keyboard Layout"; ObjectID = "Wvt-HE-LOv"; */
|
|
||||||
"Wvt-HE-LOv.title" = "鍵盤佈局";
|
"Wvt-HE-LOv.title" = "鍵盤佈局";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Check for updates automatically"; ObjectID = "Z9t-P0-BLF"; */
|
|
||||||
"Z9t-P0-BLF.title" = "自動檢查軟體更新";
|
"Z9t-P0-BLF.title" = "自動檢查軟體更新";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change user interface language (will reboot the IME)."; ObjectID = "ZEv-Q2-mYL"; */
|
|
||||||
"ZEv-Q2-mYL.title" = "變更使用者介面語言,會自動重新啟動輸入法。";
|
"ZEv-Q2-mYL.title" = "變更使用者介面語言,會自動重新啟動輸入法。";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Simplified Chinese"; ObjectID = "akC-2g-ybz"; */
|
|
||||||
"akC-2g-ybz.title" = "簡體中文";
|
"akC-2g-ybz.title" = "簡體中文";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use ESC key to clear entire input buffer"; ObjectID = "f2j-xD-4xK"; */
|
|
||||||
"f2j-xD-4xK.title" = "敲 ESC 鍵以清空整個輸入緩衝區";
|
"f2j-xD-4xK.title" = "敲 ESC 鍵以清空整個輸入緩衝區";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */
|
|
||||||
"f8i-69-zxm.title" = "自動重新載入變更過的使用者數據內容";
|
"f8i-69-zxm.title" = "自動重新載入變更過的使用者數據內容";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
|
|
||||||
"iRg-wx-Nx2.title" = "變更候選字窗的字型大小。";
|
"iRg-wx-Nx2.title" = "變更候選字窗的字型大小。";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[1] = "Item 2"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||||
|
|
||||||
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
|
|
||||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
|
|
||||||
"rVQ-Hx-cGi.title" = "和語";
|
"rVQ-Hx-cGi.title" = "和語";
|
||||||
|
|
||||||
/* Class = "NSBox"; title = "Dictionary and Language Models"; ObjectID = "cf2-se-PDO"; */
|
|
||||||
"cf2-se-PDO.title" = "辭典&語言模型";
|
"cf2-se-PDO.title" = "辭典&語言模型";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your preferred layout of the candidate window."; ObjectID = "xC5-yV-1W1"; */
|
|
||||||
"xC5-yV-1W1.title" = "選擇您所偏好的候選字窗佈局。";
|
"xC5-yV-1W1.title" = "選擇您所偏好的候選字窗佈局。";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */
|
|
||||||
"xrE-8T-WKO.label" = "進階";
|
"xrE-8T-WKO.label" = "進階";
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Dictionary"; ObjectID = "2iG-Ic-gbl"; */
|
|
||||||
"2iG-Ic-gbl.label" = "辭典";
|
"2iG-Ic-gbl.label" = "辭典";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional."; ObjectID = "wQ9-px-b07"; */
|
|
||||||
"wQ9-px-b07.title" = "Apple 動態注音鍵盤佈局(大千與倚天)要求普通話/國音分析器的注音排列得配置為大千排列。";
|
"wQ9-px-b07.title" = "Apple 動態注音鍵盤佈局(大千與倚天)要求普通話/國音分析器的注音排列得配置為大千排列。";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Tab key in the candidate window."; ObjectID = "ueU-Rz-a1C"; */
|
|
||||||
"ueU-Rz-a1C.title" = "指定 (Shift+)Tab 熱鍵在選字窗內的輪替操作對象。";
|
"ueU-Rz-a1C.title" = "指定 (Shift+)Tab 熱鍵在選字窗內的輪替操作對象。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Pages"; ObjectID = "s7u-Fm-dVg"; */
|
|
||||||
"s7u-Fm-dVg.title" = "輪替頁面";
|
"s7u-Fm-dVg.title" = "輪替頁面";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cycling Candidates"; ObjectID = "FVC-br-H57"; */
|
|
||||||
"FVC-br-H57.title" = "輪替候選字";
|
"FVC-br-H57.title" = "輪替候選字";
|
||||||
|
"Pg5-G9-pY5.title" = "指定 (Shift+)Space 熱鍵對候選字詞而言的輪替操作對象。";
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose the behavior of (Shift+)Space key in the candidate window."; ObjectID = "Pg5-G9-pY5"; */
|
|
||||||
"Pg5-G9-pY5.title" = "指定 (Shift+)Space 熱鍵在選字窗內的輪替操作對象。";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle pages, Shift+Space to +cycle candidates"; ObjectID = "XqL-rf-X6d"; */
|
|
||||||
"XqL-rf-X6d.title" = "Space 換下一頁,Shift+Space 換選下一個候選字";
|
"XqL-rf-X6d.title" = "Space 換下一頁,Shift+Space 換選下一個候選字";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Space to +cycle candidates, Shift+Space to +cycle pages"; ObjectID = "dIN-TZ-67g"; */
|
|
||||||
"dIN-TZ-67g.title" = "Shift+Space 換下一頁,Space 換選下一個候選字";
|
"dIN-TZ-67g.title" = "Shift+Space 換下一頁,Space 換選下一個候選字";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Enable symbol input support (incl. certain emoji symbols)"; ObjectID = "hSv-LJ-Cq3"; */
|
|
||||||
"hSv-LJ-Cq3.title" = "啟用包括少許繪文字在內的符號輸入支援";
|
"hSv-LJ-Cq3.title" = "啟用包括少許繪文字在內的符號輸入支援";
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Choose your desired user data folder path. Will be omitted if invalid."; ObjectID = "wN3-k3-b2a"; */
|
|
||||||
"wN3-k3-b2a.title" = "請在此指定您想指定的使用者語彙檔案目錄。無效值會被忽略。";
|
"wN3-k3-b2a.title" = "請在此指定您想指定的使用者語彙檔案目錄。無效值會被忽略。";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Show Hanyu-Pinyin in the inline composition buffer"; ObjectID = "wFR-zX-M8H"; */
|
|
||||||
"wFR-zX-M8H.title" = "拼音並擊模式(組字區內看到的是漢語拼音)";
|
"wFR-zX-M8H.title" = "拼音並擊模式(組字區內看到的是漢語拼音)";
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Output Hanyu-Pinyin in lieu of Zhuyin when Ctrl(+Alt)+CMD+Enter"; ObjectID = "iWy-Nw-QKB"; */
|
|
||||||
"iWy-Nw-QKB.title" = "Ctrl(+Alt)+CMD+Enter 輸出漢語拼音而非注音";
|
"iWy-Nw-QKB.title" = "Ctrl(+Alt)+CMD+Enter 輸出漢語拼音而非注音";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Dachen 26 (libChewing)"; ObjectID = "xjP-r7-GaK"; */
|
|
||||||
"xjP-r7-GaK.title" = "酷音大千二十六鍵";
|
"xjP-r7-GaK.title" = "酷音大千二十六鍵";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Secondary Pinyin with Numeral Intonation"; ObjectID = "Parser11"; */
|
|
||||||
"Parser11.title" = "國音二式+數字標調";
|
"Parser11.title" = "國音二式+數字標調";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Yale Pinyin with Numeral Intonation"; ObjectID = "Parser12"; */
|
|
||||||
"Parser12.title" = "耶魯拼音+數字標調";
|
"Parser12.title" = "耶魯拼音+數字標調";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hualuo Pinyin with Numeral Intonation"; ObjectID = "Parser13"; */
|
|
||||||
"Parser13.title" = "華羅拼音+數字標調";
|
"Parser13.title" = "華羅拼音+數字標調";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Universal Pinyin with Numeral Intonation"; ObjectID = "Parser14"; */
|
|
||||||
"Parser14.title" = "通用拼音+數字標調";
|
"Parser14.title" = "通用拼音+數字標調";
|
||||||
|
"xibKeyboardShortcuts.title" = "鍵盤快速鍵";
|
||||||
/* Class = "NSButtonCell"; title = "Balance the score according to candidate length"; ObjectID = "Wh1-iz-pwM"; */
|
"xibUsingHotKeySCPC.title" = "模擬逐字選字輸入";
|
||||||
"Wh1-iz-pwM.title" = "按候選字詞的長度調整權重";
|
"xibUsingHotKeyAssociates.title" = "逐字選字聯想模式";
|
||||||
|
"xibUsingHotKeyCNS.title" = "全字庫模式";
|
||||||
|
"xibUsingHotKeyKangXi.title" = "康熙正體字模式";
|
||||||
|
"xibUsingHotKeyJIS.title" = "JIS 新字體模式";
|
||||||
|
"xibUsingHotKeyHalfWidthASCII.title" = "半形標點模式";
|
||||||
|
"xibLabelBufferLimit.title" = "組字區容量:";
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.6.2</string>
|
<string>1.6.3</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1962</string>
|
<string>1963</string>
|
||||||
<key>UpdateInfoEndpoint</key>
|
<key>UpdateInfoEndpoint</key>
|
||||||
<string>https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist</string>
|
<string>https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist</string>
|
||||||
<key>UpdateInfoSite</key>
|
<key>UpdateInfoSite</key>
|
||||||
|
|
|
@ -726,7 +726,7 @@
|
||||||
<key>USE_HFS+_COMPRESSION</key>
|
<key>USE_HFS+_COMPRESSION</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>VERSION</key>
|
<key>VERSION</key>
|
||||||
<string>1.6.2</string>
|
<string>1.6.3</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>TYPE</key>
|
<key>TYPE</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
|
|
|
@ -1296,7 +1296,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1962;
|
CURRENT_PROJECT_VERSION = 1963;
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
@ -1319,7 +1319,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||||
MARKETING_VERSION = 1.6.2;
|
MARKETING_VERSION = 1.6.3;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
||||||
|
@ -1352,7 +1352,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1962;
|
CURRENT_PROJECT_VERSION = 1963;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
@ -1371,7 +1371,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||||
MARKETING_VERSION = 1.6.2;
|
MARKETING_VERSION = 1.6.3;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor;
|
||||||
|
@ -1486,7 +1486,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1962;
|
CURRENT_PROJECT_VERSION = 1963;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
@ -1521,7 +1521,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||||
MARKETING_VERSION = 1.6.2;
|
MARKETING_VERSION = 1.6.3;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
@ -1553,7 +1553,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1962;
|
CURRENT_PROJECT_VERSION = 1963;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
|
@ -1583,7 +1583,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||||
MARKETING_VERSION = 1.6.2;
|
MARKETING_VERSION = 1.6.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
@ -1666,7 +1666,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1962;
|
CURRENT_PROJECT_VERSION = 1963;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
@ -1691,7 +1691,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||||
MARKETING_VERSION = 1.6.2;
|
MARKETING_VERSION = 1.6.3;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
@ -1718,7 +1718,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1962;
|
CURRENT_PROJECT_VERSION = 1963;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
@ -1738,7 +1738,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
MACOSX_DEPLOYMENT_TARGET = 10.11.5;
|
||||||
MARKETING_VERSION = 1.6.2;
|
MARKETING_VERSION = 1.6.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|
Loading…
Reference in New Issue