PrefUI // Massive reconstruction.
- Also synchronize localizable.strings across distros.
This commit is contained in:
parent
3ac259471a
commit
97d2c94754
|
@ -15,62 +15,75 @@ extension PrefUITabs {
|
|||
var ssPaneIdentifier: SSPreferences.PaneIdentifier { .init(rawValue: rawValue) }
|
||||
}
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPage: View {
|
||||
@State var tabType: PrefUITabs
|
||||
var body: some View {
|
||||
switch tabType {
|
||||
case .tabGeneral: VwrPrefPaneGeneral()
|
||||
case .tabCandidates: VwrPrefPaneCandidates()
|
||||
case .tabBehavior: VwrPrefPaneBehavior()
|
||||
case .tabOutput: VwrPrefPaneOutput()
|
||||
case .tabDictionary: VwrPrefPaneDictionary()
|
||||
case .tabPhrases: VwrPrefPanePhrases()
|
||||
case .tabCassette: VwrPrefPaneCassette()
|
||||
case .tabKeyboard: VwrPrefPaneKeyboard()
|
||||
case .tabDevZone, .tabExperience: VwrPrefPaneDevZone()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
class CtlPrefUI {
|
||||
var controller = PreferencesWindowController(
|
||||
panes: [
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabGeneral.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabGeneral.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabGeneral.icon
|
||||
) { VwrPrefPaneGeneral() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabCandidates.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabCandidates.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabCandidates.icon
|
||||
) { VwrPrefPaneExperience() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabBehavior.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabBehavior.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabBehavior.icon
|
||||
) { VwrPrefPaneExperience() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabOutput.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabOutput.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabOutput.icon
|
||||
) { VwrPrefPaneExperience() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabDictionary.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabDictionary.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabDictionary.icon
|
||||
) { VwrPrefPaneDictionary() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabPhrases.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabPhrases.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabPhrases.icon
|
||||
) { VwrPrefPanePhrases() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabCassette.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabCassette.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabCassette.icon
|
||||
) { VwrPrefPaneCassette() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabKeyboard.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabKeyboard.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabKeyboard.icon
|
||||
) { VwrPrefPaneKeyboard() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabDevZone.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabDevZone.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabDevZone.icon
|
||||
) { VwrPrefPaneDevZone() },
|
||||
SSPreferences.Pane(
|
||||
identifier: PrefUITabs.tabExperience.ssPaneIdentifier,
|
||||
title: PrefUITabs.tabExperience.i18nTitle,
|
||||
toolbarIcon: PrefUITabs.tabExperience.icon
|
||||
) { VwrPrefPaneExperience() },
|
||||
],
|
||||
panes: {
|
||||
var result = [PreferencePaneConvertible]()
|
||||
PrefUITabs.allCases.forEach { neta in
|
||||
if [.tabDevZone, .tabExperience].contains(neta) { return }
|
||||
let item: PreferencePaneConvertible = SSPreferences.Pane(
|
||||
identifier: SSPreferences.PaneIdentifier(rawValue: neta.rawValue),
|
||||
title: neta.i18nTitle, toolbarIcon: neta.icon,
|
||||
contentView: { VwrPrefPage(tabType: neta) }
|
||||
)
|
||||
result.append(item)
|
||||
}
|
||||
return result
|
||||
}(),
|
||||
style: .toolbarItems
|
||||
)
|
||||
|
||||
static let shared = CtlPrefUI()
|
||||
static let sentenceSeparator: String = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return ""
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return ""
|
||||
} else {
|
||||
return " "
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
static let contentMaxHeight: Double = 490
|
||||
static let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 500
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
public extension View {
|
||||
func prefDescriptionWidthLimited() -> some View {
|
||||
frame(maxWidth: CtlPrefUI.contentWidth * 0.8, alignment: .leading)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,28 +12,18 @@ import SwiftExtension
|
|||
import SwiftUI
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPaneExperience: View {
|
||||
@State private var selCursorPosition =
|
||||
UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseRearCursorMode.rawValue) ? 1 : 0
|
||||
@State private var selPushCursorAfterSelection = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kMoveCursorAfterSelectingCandidate.rawValue)
|
||||
struct VwrPrefPaneBehavior: View {
|
||||
@State private var selChooseCandidateUsingSpace = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kChooseCandidateUsingSpace.rawValue)
|
||||
@State private var selKeyBehaviorShiftTab =
|
||||
UserDefaults.standard.bool(forKey: UserDef.kSpecifyShiftTabKeyBehavior.rawValue) ? 1 : 0
|
||||
@State private var selKeyBehaviorShiftSpace =
|
||||
UserDefaults.standard.bool(
|
||||
forKey: UserDef.kSpecifyShiftSpaceKeyBehavior.rawValue) ? 1 : 0
|
||||
@State private var selKeyBehaviorSpaceForCallingCandidate = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kChooseCandidateUsingSpace.rawValue)
|
||||
@State private var selKeyBehaviorESCForClearingTheBuffer = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kEscToCleanInputBuffer.rawValue)
|
||||
@State private var selEnableSCPCTypingMode = UserDefaults.standard.bool(forKey: UserDef.kUseSCPCTypingMode.rawValue)
|
||||
@State private var selAutoCorrectReadingCombination = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kAutoCorrectReadingCombination.rawValue)
|
||||
@State private var selAlsoConfirmAssociatedCandidatesByEnter = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kAlsoConfirmAssociatedCandidatesByEnter.rawValue)
|
||||
@State private var selKeepReadingUponCompositionError = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kKeepReadingUponCompositionError.rawValue)
|
||||
@State private var selTogglingAlphanumericalModeWithLShift = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kTogglingAlphanumericalModeWithLShift.rawValue)
|
||||
@State private var selTogglingAlphanumericalModeWithRShift = UserDefaults.standard.bool(
|
||||
|
@ -44,8 +34,6 @@ struct VwrPrefPaneExperience: View {
|
|||
forKey: UserDef.kSpecifyIntonationKeyBehavior.rawValue)
|
||||
@State private var selSpecifyShiftBackSpaceKeyBehavior = UserDefaults.standard.integer(
|
||||
forKey: UserDef.kSpecifyShiftBackSpaceKeyBehavior.rawValue)
|
||||
@State private var selTrimUnfinishedReadingsOnCommit = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kTrimUnfinishedReadingsOnCommit.rawValue)
|
||||
@State private var selAlwaysShowTooltipTextsHorizontally = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kAlwaysShowTooltipTextsHorizontally.rawValue)
|
||||
@State private var selShowNotificationsWhenTogglingCapsLock = UserDefaults.standard.bool(
|
||||
|
@ -53,20 +41,6 @@ struct VwrPrefPaneExperience: View {
|
|||
@State private var selShareAlphanumericalModeStatusAcrossClients = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShareAlphanumericalModeStatusAcrossClients.rawValue)
|
||||
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var macOSMontereyOrLaterDetected: Bool {
|
||||
if #available(macOS 12, *) {
|
||||
return true
|
||||
|
@ -76,45 +50,50 @@ struct VwrPrefPaneExperience: View {
|
|||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
VStack {
|
||||
_VSpacer(minHeight: 24)
|
||||
Text(
|
||||
"\u{2022} "
|
||||
+ NSLocalizedString(
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.",
|
||||
comment: ""
|
||||
) + "\n\u{2022} "
|
||||
+ NSLocalizedString(
|
||||
"Note: The “Delete ⌫” key on Mac keyboard is named as “BackSpace ⌫” here in order to distinguish the real “Delete ⌦” key from full-sized desktop keyboards. If you want to use the real “Delete ⌦” key on a Mac keyboard with no numpad equipped, you have to press “Fn+⌫” instead.",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
.preferenceDescription()
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}.frame(maxWidth: contentWidth)
|
||||
SSPreferences.Container(contentWidth: contentWidth) {
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Cursor Selection:")) }) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selCursorPosition.onChange {
|
||||
PrefMgr.shared.useRearCursorMode = (selCursorPosition == 1) ? true : false
|
||||
}
|
||||
) {
|
||||
Text(LocalizedStringKey("in front of the phrase (like macOS built-in Zhuyin IME)")).tag(0)
|
||||
Text(LocalizedStringKey("at the rear of the phrase (like Microsoft New Phonetic)")).tag(1)
|
||||
}
|
||||
.labelsHidden()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose the cursor position where you want to list possible candidates."))
|
||||
.preferenceDescription()
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
SSPreferences.Section(title: "Space:".localized, bottomDivider: true) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Push the cursor in front of the phrase after selection"),
|
||||
isOn: $selPushCursorAfterSelection.onChange {
|
||||
PrefMgr.shared.moveCursorAfterSelectingCandidate = selPushCursorAfterSelection
|
||||
LocalizedStringKey("Enable Space key for calling candidate window"),
|
||||
isOn: $selChooseCandidateUsingSpace.onChange {
|
||||
PrefMgr.shared.chooseCandidateUsingSpace = selChooseCandidateUsingSpace
|
||||
}
|
||||
).controlSize(.small)
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"If disabled, this will insert space instead."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Shift+BackSpace:")) }) {
|
||||
SSPreferences.Section(title: "ESC:".localized, bottomDivider: true) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Use ESC key to clear the entire input buffer"),
|
||||
isOn: $selKeyBehaviorESCForClearingTheBuffer.onChange {
|
||||
PrefMgr.shared.escToCleanInputBuffer = selKeyBehaviorESCForClearingTheBuffer
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Enter:".localized, bottomDivider: true) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Allow using Enter key to confirm associated candidate selection"),
|
||||
isOn: $selAlsoConfirmAssociatedCandidatesByEnter.onChange {
|
||||
PrefMgr.shared.alsoConfirmAssociatedCandidatesByEnter = selAlsoConfirmAssociatedCandidatesByEnter
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"Otherwise, only the candidate keys are allowed to confirm associates."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Shift+BackSpace:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selSpecifyShiftBackSpaceKeyBehavior.onChange {
|
||||
|
@ -128,9 +107,9 @@ struct VwrPrefPaneExperience: View {
|
|||
.labelsHidden()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Disassembling process does not work with non-phonetic reading keys."))
|
||||
.preferenceDescription()
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "(Shift+)Tab:") {
|
||||
SSPreferences.Section(title: "(Shift+)Tab:", bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selKeyBehaviorShiftTab.onChange {
|
||||
|
@ -144,9 +123,9 @@ struct VwrPrefPaneExperience: View {
|
|||
.horizontalRadioGroupLayout()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose the behavior of (Shift+)Tab key in the candidate window."))
|
||||
.preferenceDescription()
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("(Shift+)Space:")) }) {
|
||||
SSPreferences.Section(title: "(Shift+)Space:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selKeyBehaviorShiftSpace.onChange {
|
||||
|
@ -159,9 +138,9 @@ struct VwrPrefPaneExperience: View {
|
|||
.labelsHidden()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose the behavior of (Shift+)Space key with candidates."))
|
||||
.preferenceDescription()
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Shift+Letter:")) }) {
|
||||
SSPreferences.Section(title: "Shift+Letter:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selUpperCaseLetterKeyBehavior.onChange {
|
||||
|
@ -175,9 +154,9 @@ struct VwrPrefPaneExperience: View {
|
|||
.labelsHidden()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose the behavior of Shift+Letter key with letter inputs."))
|
||||
.preferenceDescription()
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Intonation Key:")) }) {
|
||||
SSPreferences.Section(title: "Intonation Key:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selSpecifyIntonationKeyBehavior.onChange {
|
||||
|
@ -191,9 +170,9 @@ struct VwrPrefPaneExperience: View {
|
|||
.labelsHidden()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Specify the behavior of intonation key when syllable composer is empty."))
|
||||
.preferenceDescription()
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Shift:") {
|
||||
SSPreferences.Section(title: "Shift:", bottomDivider: true) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Toggle alphanumerical mode with Left-Shift"),
|
||||
isOn: $selTogglingAlphanumericalModeWithLShift.onChange {
|
||||
|
@ -214,60 +193,23 @@ struct VwrPrefPaneExperience: View {
|
|||
).disabled(
|
||||
!PrefMgr.shared.togglingAlphanumericalModeWithRShift && !PrefMgr.shared.togglingAlphanumericalModeWithLShift
|
||||
)
|
||||
Text(
|
||||
"This feature requires macOS 10.15 and above.".localized + CtlPrefUI.sentenceSeparator
|
||||
+ "It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable.".localized
|
||||
).preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Caps Lock:") {
|
||||
SSPreferences.Section(title: "Caps Lock:", bottomDivider: true) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Show notifications when toggling Caps Lock"),
|
||||
isOn: $selShowNotificationsWhenTogglingCapsLock.onChange {
|
||||
PrefMgr.shared.showNotificationsWhenTogglingCapsLock = selShowNotificationsWhenTogglingCapsLock
|
||||
}
|
||||
).disabled(!macOSMontereyOrLaterDetected)
|
||||
Text(
|
||||
"This feature requires macOS 10.15 and above.".localized
|
||||
).preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Misc Settings:")) }) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Enable Space key for calling candidate window"),
|
||||
isOn: $selKeyBehaviorSpaceForCallingCandidate.onChange {
|
||||
PrefMgr.shared.chooseCandidateUsingSpace = selKeyBehaviorSpaceForCallingCandidate
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Use ESC key to clear the entire input buffer"),
|
||||
isOn: $selKeyBehaviorESCForClearingTheBuffer.onChange {
|
||||
PrefMgr.shared.escToCleanInputBuffer = selKeyBehaviorESCForClearingTheBuffer
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Automatically correct reading combinations when typing"),
|
||||
isOn: $selAutoCorrectReadingCombination.onChange {
|
||||
PrefMgr.shared.autoCorrectReadingCombination = selAutoCorrectReadingCombination
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Allow using Enter key to confirm associated candidate selection"),
|
||||
isOn: $selAlsoConfirmAssociatedCandidatesByEnter.onChange {
|
||||
PrefMgr.shared.alsoConfirmAssociatedCandidatesByEnter = selAlsoConfirmAssociatedCandidatesByEnter
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Allow backspace-editing miscomposed readings"),
|
||||
isOn: $selKeepReadingUponCompositionError.onChange {
|
||||
PrefMgr.shared.keepReadingUponCompositionError = selKeepReadingUponCompositionError
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Trim unfinished readings / strokes on commit"),
|
||||
isOn: $selTrimUnfinishedReadingsOnCommit.onChange {
|
||||
PrefMgr.shared.trimUnfinishedReadingsOnCommit = selTrimUnfinishedReadingsOnCommit
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Emulating select-candidate-per-character mode"),
|
||||
isOn: $selEnableSCPCTypingMode.onChange {
|
||||
PrefMgr.shared.useSCPCTypingMode = selEnableSCPCTypingMode
|
||||
}
|
||||
)
|
||||
Text(LocalizedStringKey("An accommodation for elder computer users."))
|
||||
.preferenceDescription()
|
||||
SSPreferences.Section(title: "Misc Settings:".localized) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Always show tooltip texts horizontally"),
|
||||
isOn: $selAlwaysShowTooltipTextsHorizontally.onChange {
|
||||
|
@ -278,17 +220,17 @@ struct VwrPrefPaneExperience: View {
|
|||
LocalizedStringKey(
|
||||
"Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English."
|
||||
)
|
||||
).preferenceDescription()
|
||||
).preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
@available(macOS 11.0, *)
|
||||
struct VwrPrefPaneExperience_Previews: PreviewProvider {
|
||||
struct VwrPrefPaneBehavior_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
VwrPrefPaneExperience()
|
||||
VwrPrefPaneBehavior()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,268 @@
|
|||
// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
|
||||
// ====================
|
||||
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
|
||||
// ... with NTL restriction stating that:
|
||||
// No trademark license is granted to use the trade names, trademarks, service
|
||||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import Shared
|
||||
import SSPreferences
|
||||
import SwiftExtension
|
||||
import SwiftUI
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPaneCandidates: View {
|
||||
@State private var selCandidateUIFontSize = UserDefaults.standard.integer(
|
||||
forKey: UserDef.kCandidateListTextSize.rawValue)
|
||||
@State private var selEnableHorizontalCandidateLayout = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseHorizontalCandidateList.rawValue)
|
||||
@State private var selShowReverseLookupInCandidateUI = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShowReverseLookupInCandidateUI.rawValue)
|
||||
@State private var selCursorPosition =
|
||||
UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseRearCursorMode.rawValue) ? 1 : 0
|
||||
@State private var selPushCursorAfterSelection = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kMoveCursorAfterSelectingCandidate.rawValue)
|
||||
@State private var selUseFixecCandidateOrderOnSelection: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseFixecCandidateOrderOnSelection.rawValue)
|
||||
@State private var selConsolidateContextOnCandidateSelection: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kConsolidateContextOnCandidateSelection.rawValue)
|
||||
@State private var selUseIMKCandidateWindow: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseIMKCandidateWindow.rawValue)
|
||||
@State private var selHandleDefaultCandidateFontsByLangIdentifier: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kHandleDefaultCandidateFontsByLangIdentifier.rawValue)
|
||||
@State private var selAllowBoostingSingleKanjiAsUserPhrase: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kAllowBoostingSingleKanjiAsUserPhrase.rawValue)
|
||||
|
||||
var isMontereyOrAbove: Bool = {
|
||||
if #available(macOS 12.0, *) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}()
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
SSPreferences.Section(title: "Selection Keys:".localized, bottomDivider: true) {
|
||||
VwrPrefPaneCandidates_SelectionKeys()
|
||||
}
|
||||
SSPreferences.Section(title: "Candidate Layout:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selEnableHorizontalCandidateLayout.onChange {
|
||||
PrefMgr.shared.useHorizontalCandidateList = selEnableHorizontalCandidateLayout
|
||||
}
|
||||
) {
|
||||
Text(LocalizedStringKey("Vertical")).tag(false)
|
||||
Text(LocalizedStringKey("Horizontal")).tag(true)
|
||||
}
|
||||
.labelsHidden()
|
||||
.horizontalRadioGroupLayout()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose your preferred layout of the candidate window."))
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Candidate Size:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selCandidateUIFontSize.onChange {
|
||||
PrefMgr.shared.candidateListTextSize = Double(selCandidateUIFontSize)
|
||||
}
|
||||
) {
|
||||
Group {
|
||||
Text("12").tag(12)
|
||||
Text("14").tag(14)
|
||||
Text("16").tag(16)
|
||||
Text("17").tag(17)
|
||||
Text("18").tag(18)
|
||||
Text("20").tag(20)
|
||||
Text("22").tag(22)
|
||||
Text("24").tag(24)
|
||||
}
|
||||
Group {
|
||||
Text("32").tag(32)
|
||||
Text("64").tag(64)
|
||||
Text("96").tag(96)
|
||||
}
|
||||
}
|
||||
.labelsHidden()
|
||||
.frame(width: 120.0)
|
||||
Text(LocalizedStringKey("Choose candidate font size for better visual clarity."))
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Cursor Selection:".localized, bottomDivider: true) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selCursorPosition.onChange {
|
||||
PrefMgr.shared.useRearCursorMode = (selCursorPosition == 1) ? true : false
|
||||
}
|
||||
) {
|
||||
Text(LocalizedStringKey("in front of the phrase (like macOS built-in Zhuyin IME)")).tag(0)
|
||||
Text(LocalizedStringKey("at the rear of the phrase (like Microsoft New Phonetic)")).tag(1)
|
||||
}
|
||||
.labelsHidden()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose the cursor position where you want to list possible candidates."))
|
||||
.preferenceDescription()
|
||||
Toggle(
|
||||
LocalizedStringKey("Push the cursor in front of the phrase after selection"),
|
||||
isOn: $selPushCursorAfterSelection.onChange {
|
||||
PrefMgr.shared.moveCursorAfterSelectingCandidate = selPushCursorAfterSelection
|
||||
}
|
||||
).controlSize(.small)
|
||||
}
|
||||
SSPreferences.Section(title: "Misc Settings:".localized, bottomDivider: true) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Show available reverse-lookup results in candidate window"),
|
||||
isOn: $selShowReverseLookupInCandidateUI.onChange {
|
||||
PrefMgr.shared.showReverseLookupInCandidateUI = selShowReverseLookupInCandidateUI
|
||||
}
|
||||
)
|
||||
.disabled(PrefMgr.shared.useIMKCandidateWindow)
|
||||
Text(
|
||||
"This only works with Tadokoro candidate window.".localized
|
||||
+ CtlPrefUI.sentenceSeparator
|
||||
+ "The lookup results are supplied by the CIN cassette module.".localized
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
Toggle(
|
||||
LocalizedStringKey("Always use fixed listing order in candidate window"),
|
||||
isOn: $selUseFixecCandidateOrderOnSelection.onChange {
|
||||
PrefMgr.shared.useFixecCandidateOrderOnSelection = selUseFixecCandidateOrderOnSelection
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"This will stop user override model from affecting how candidates get sorted."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
Toggle(
|
||||
LocalizedStringKey("Consolidate the context on confirming candidate selection"),
|
||||
isOn: $selConsolidateContextOnCandidateSelection.onChange {
|
||||
PrefMgr.shared.consolidateContextOnCandidateSelection = selConsolidateContextOnCandidateSelection
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(title: "Experimental:".localized) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Use IMK Candidate Window instead of Tadokoro"),
|
||||
isOn: $selUseIMKCandidateWindow.onChange {
|
||||
PrefMgr.shared.useIMKCandidateWindow = selUseIMKCandidateWindow
|
||||
NSLog("vChewing App self-terminated due to enabling / disabling IMK candidate window.")
|
||||
NSApp.terminate(nil)
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey("⚠︎ This will reboot the vChewing IME.")
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
if isMontereyOrAbove {
|
||||
Toggle(
|
||||
LocalizedStringKey("Use .langIdentifier to handle UI fonts in candidate window"),
|
||||
isOn: $selHandleDefaultCandidateFontsByLangIdentifier.onChange {
|
||||
PrefMgr.shared.handleDefaultCandidateFontsByLangIdentifier =
|
||||
selHandleDefaultCandidateFontsByLangIdentifier
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"This only works with Tadokoro candidate window."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
Toggle(
|
||||
LocalizedStringKey("Allow boosting / excluding a candidate of single kanji"),
|
||||
isOn: $selAllowBoostingSingleKanjiAsUserPhrase.onChange {
|
||||
PrefMgr.shared.allowBoostingSingleKanjiAsUserPhrase = selAllowBoostingSingleKanjiAsUserPhrase
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight)
|
||||
}
|
||||
}
|
||||
|
||||
@available(macOS 11.0, *)
|
||||
struct VwrPrefPaneCandidates_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
VwrPrefPaneCandidates()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Selection Key Preferences (View)
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
private struct VwrPrefPaneCandidates_SelectionKeys: View {
|
||||
@State private var selSelectionKeysList = CandidateKey.suggestions
|
||||
@State private var selSelectionKeys =
|
||||
UserDefaults.standard.string(forKey: UserDef.kCandidateKeys.rawValue) ?? CandidateKey.defaultKeys
|
||||
|
||||
var body: some View {
|
||||
ComboBox(
|
||||
items: CandidateKey.suggestions,
|
||||
text: $selSelectionKeys.onChange {
|
||||
let value = selSelectionKeys
|
||||
let keys: String = value.trimmingCharacters(in: .whitespacesAndNewlines).deduplicated
|
||||
if keys.isEmpty {
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
return
|
||||
}
|
||||
// Start Error Handling.
|
||||
if let errorResult = CandidateKey.validate(keys: keys) {
|
||||
IMEApp.buzz()
|
||||
if let window = CtlPrefUI.shared.controller.window {
|
||||
let alert = NSAlert(error: NSLocalizedString("Invalid Selection Keys.", comment: ""))
|
||||
alert.informativeText = errorResult
|
||||
alert.beginSheetModal(for: window) { _ in
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
}
|
||||
} else {
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
}
|
||||
} else {
|
||||
PrefMgr.shared.candidateKeys = keys
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
return
|
||||
}
|
||||
}
|
||||
).frame(width: 180).disabled(PrefMgr.shared.useIMKCandidateWindow)
|
||||
if PrefMgr.shared.useIMKCandidateWindow {
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
} else {
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"Choose or hit Enter to confim your prefered keys for selecting candidates."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,23 +29,9 @@ struct VwrPrefPaneCassette: View {
|
|||
|
||||
private static let dlgOpenFile = NSOpenPanel()
|
||||
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: contentWidth) {
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
// MARK: - Cassette Data Path Management
|
||||
|
||||
SSPreferences.Section(title: "", bottomDivider: true) {
|
||||
|
@ -169,14 +155,14 @@ struct VwrPrefPaneCassette: View {
|
|||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode."
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,28 +13,6 @@ import SwiftUI
|
|||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPaneDevZone: View {
|
||||
@State private var selUseIMKCandidateWindow: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseIMKCandidateWindow.rawValue)
|
||||
@State private var selHandleDefaultCandidateFontsByLangIdentifier: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kHandleDefaultCandidateFontsByLangIdentifier.rawValue)
|
||||
@State private var selPhraseReplacementEnabled: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kPhraseReplacementEnabled.rawValue
|
||||
)
|
||||
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var isMontereyOrAbove: Bool = {
|
||||
if #available(macOS 12.0, *) {
|
||||
return true
|
||||
|
@ -44,7 +22,7 @@ struct VwrPrefPaneDevZone: View {
|
|||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: contentWidth) {
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
SSPreferences.Section(title: "", bottomDivider: true) {
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
|
@ -52,52 +30,13 @@ struct VwrPrefPaneDevZone: View {
|
|||
)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
Divider()
|
||||
Toggle(
|
||||
LocalizedStringKey("Use IMK Candidate Window instead of Tadokoro (will reboot the IME)"),
|
||||
isOn: $selUseIMKCandidateWindow.onChange {
|
||||
PrefMgr.shared.useIMKCandidateWindow = selUseIMKCandidateWindow
|
||||
NSLog("vChewing App self-terminated due to enabling / disabling IMK candidate window.")
|
||||
NSApp.terminate(nil)
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
Toggle(
|
||||
LocalizedStringKey("Use .langIdentifier to handle UI fonts in candidate window"),
|
||||
isOn: $selHandleDefaultCandidateFontsByLangIdentifier.onChange {
|
||||
PrefMgr.shared.handleDefaultCandidateFontsByLangIdentifier =
|
||||
selHandleDefaultCandidateFontsByLangIdentifier
|
||||
}
|
||||
)
|
||||
.disabled(!isMontereyOrAbove)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"This only works with Tadokoro candidate window."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
HStack {
|
||||
Toggle(
|
||||
LocalizedStringKey("Enable phrase replacement table"),
|
||||
isOn: $selPhraseReplacementEnabled.onChange {
|
||||
PrefMgr.shared.phraseReplacementEnabled = selPhraseReplacementEnabled
|
||||
}
|
||||
)
|
||||
Text("Nothing for now.")
|
||||
}
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"This will batch-replace specified candidates."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,37 +27,18 @@ struct VwrPrefPaneDictionary: View {
|
|||
@State private var selEnableCNS11643: Bool = UserDefaults.standard.bool(forKey: UserDef.kCNS11643Enabled.rawValue)
|
||||
@State private var selEnableSymbolInputSupport: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kSymbolInputEnabled.rawValue)
|
||||
@State private var selAllowBoostingSingleKanjiAsUserPhrase: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kAllowBoostingSingleKanjiAsUserPhrase.rawValue)
|
||||
@State private var selFetchSuggestionsFromUserOverrideModel: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kFetchSuggestionsFromUserOverrideModel.rawValue)
|
||||
@State private var selUseFixecCandidateOrderOnSelection: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseFixecCandidateOrderOnSelection.rawValue)
|
||||
@State private var selConsolidateContextOnCandidateSelection: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kConsolidateContextOnCandidateSelection.rawValue)
|
||||
@State private var selHardenVerticalPunctuations: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kHardenVerticalPunctuations.rawValue)
|
||||
@State private var selPhraseReplacementEnabled: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kPhraseReplacementEnabled.rawValue
|
||||
)
|
||||
|
||||
private static let dlgOpenPath = NSOpenPanel()
|
||||
private static let dlgOpenFile = NSOpenPanel()
|
||||
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: contentWidth) {
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
// MARK: - User Data Folder Path Management
|
||||
|
||||
SSPreferences.Section(title: "", bottomDivider: true) {
|
||||
|
@ -126,6 +107,12 @@ struct VwrPrefPaneDictionary: View {
|
|||
}
|
||||
}
|
||||
).controlSize(.small)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either."
|
||||
)
|
||||
)
|
||||
.preferenceDescription()
|
||||
}
|
||||
Divider()
|
||||
Group {
|
||||
|
@ -141,7 +128,7 @@ struct VwrPrefPaneDictionary: View {
|
|||
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
.preferenceDescription()
|
||||
Toggle(
|
||||
LocalizedStringKey("Only load factory language models if needed"),
|
||||
isOn: $selOnlyLoadFactoryLangModelsIfNeeded.onChange {
|
||||
|
@ -162,56 +149,28 @@ struct VwrPrefPaneDictionary: View {
|
|||
LMMgr.setSymbolEnabled(PrefMgr.shared.symbolInputEnabled)
|
||||
}
|
||||
)
|
||||
}
|
||||
// Divider()
|
||||
Group {
|
||||
Toggle(
|
||||
LocalizedStringKey("Allow boosting / excluding a candidate of single kanji"),
|
||||
isOn: $selAllowBoostingSingleKanjiAsUserPhrase.onChange {
|
||||
PrefMgr.shared.allowBoostingSingleKanjiAsUserPhrase = selAllowBoostingSingleKanjiAsUserPhrase
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Applying typing suggestions from half-life user override model"),
|
||||
isOn: $selFetchSuggestionsFromUserOverrideModel.onChange {
|
||||
PrefMgr.shared.fetchSuggestionsFromUserOverrideModel = selFetchSuggestionsFromUserOverrideModel
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Always use fixed listing order in candidate window"),
|
||||
isOn: $selUseFixecCandidateOrderOnSelection.onChange {
|
||||
PrefMgr.shared.useFixecCandidateOrderOnSelection = selUseFixecCandidateOrderOnSelection
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Consolidate the context on confirming candidate selection"),
|
||||
isOn: $selConsolidateContextOnCandidateSelection.onChange {
|
||||
PrefMgr.shared.consolidateContextOnCandidateSelection = selConsolidateContextOnCandidateSelection
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is."
|
||||
)
|
||||
"The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu.".localized
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
.preferenceDescription()
|
||||
Toggle(
|
||||
LocalizedStringKey("Harden vertical punctuations during vertical typing (not recommended)"),
|
||||
isOn: $selHardenVerticalPunctuations.onChange {
|
||||
PrefMgr.shared.hardenVerticalPunctuations = selHardenVerticalPunctuations
|
||||
LocalizedStringKey("Enable phrase replacement table"),
|
||||
isOn: $selPhraseReplacementEnabled.onChange {
|
||||
PrefMgr.shared.phraseReplacementEnabled = selPhraseReplacementEnabled
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().fixedSize(horizontal: false, vertical: true)
|
||||
Text("This will batch-replace specified candidates.".localized).preferenceDescription()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,8 +13,6 @@ import SwiftUI
|
|||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPaneGeneral: View {
|
||||
@State private var selCandidateUIFontSize = UserDefaults.standard.integer(
|
||||
forKey: UserDef.kCandidateListTextSize.rawValue)
|
||||
@State private var selUILanguage: [String] =
|
||||
Shared.arrSupportedLocales.contains(
|
||||
((UserDefaults.standard.object(forKey: UserDef.kAppleLanguages.rawValue) == nil)
|
||||
|
@ -22,69 +20,40 @@ struct VwrPrefPaneGeneral: View {
|
|||
? ((UserDefaults.standard.object(forKey: UserDef.kAppleLanguages.rawValue) == nil)
|
||||
? ["auto"] : UserDefaults.standard.array(forKey: UserDef.kAppleLanguages.rawValue) as? [String] ?? ["auto"])
|
||||
: ["auto"]
|
||||
@State private var selEnableHorizontalCandidateLayout = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kUseHorizontalCandidateList.rawValue)
|
||||
@State private var selEnableKanjiConvToKangXi = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kChineseConversionEnabled.rawValue)
|
||||
@State private var selEnableKanjiConvToJIS = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue)
|
||||
@State private var selAutoCorrectReadingCombination = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kAutoCorrectReadingCombination.rawValue)
|
||||
@State private var selShowHanyuPinyinInCompositionBuffer = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShowHanyuPinyinInCompositionBuffer.rawValue)
|
||||
@State private var selInlineDumpPinyinInLieuOfZhuyin = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kInlineDumpPinyinInLieuOfZhuyin.rawValue)
|
||||
@State private var selKeepReadingUponCompositionError = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kKeepReadingUponCompositionError.rawValue)
|
||||
@State private var selClassicHaninKeyboardSymbolModeShortcutEnabled = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kClassicHaninKeyboardSymbolModeShortcutEnabled.rawValue)
|
||||
@State private var selEnableSCPCTypingMode = UserDefaults.standard.bool(forKey: UserDef.kUseSCPCTypingMode.rawValue)
|
||||
@State private var selEnableFartSuppressor = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShouldNotFartInLieuOfBeep.rawValue)
|
||||
@State private var selEnableAutoUpdateCheck = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kCheckUpdateAutomatically.rawValue)
|
||||
@State private var selEnableDebugMode = UserDefaults.standard.bool(forKey: UserDef.kIsDebugModeEnabled.rawValue)
|
||||
@State private var selShowReverseLookupInCandidateUI = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShowReverseLookupInCandidateUI.rawValue)
|
||||
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: contentWidth) {
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Candidate Size:")) }) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selCandidateUIFontSize.onChange {
|
||||
PrefMgr.shared.candidateListTextSize = Double(selCandidateUIFontSize)
|
||||
}
|
||||
) {
|
||||
Group {
|
||||
Text("12").tag(12)
|
||||
Text("14").tag(14)
|
||||
Text("16").tag(16)
|
||||
Text("17").tag(17)
|
||||
Text("18").tag(18)
|
||||
Text("20").tag(20)
|
||||
Text("22").tag(22)
|
||||
Text("24").tag(24)
|
||||
}
|
||||
Group {
|
||||
Text("32").tag(32)
|
||||
Text("64").tag(64)
|
||||
Text("96").tag(96)
|
||||
}
|
||||
}
|
||||
.labelsHidden()
|
||||
.frame(width: 120.0)
|
||||
Text(LocalizedStringKey("Choose candidate font size for better visual clarity."))
|
||||
.preferenceDescription()
|
||||
}
|
||||
VStack {
|
||||
_VSpacer(minHeight: 24)
|
||||
Text(
|
||||
"\u{2022} "
|
||||
+ NSLocalizedString(
|
||||
"Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu.",
|
||||
comment: ""
|
||||
) + "\n\u{2022} "
|
||||
+ NSLocalizedString(
|
||||
"Note: The “Delete ⌫” key on Mac keyboard is named as “BackSpace ⌫” here in order to distinguish the real “Delete ⌦” key from full-sized desktop keyboards. If you want to use the real “Delete ⌦” key on a Mac keyboard with no numpad equipped, you have to press “Fn+⌫” instead.",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
.preferenceDescription()
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}.frame(maxWidth: CtlPrefUI.contentWidth)
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("UI Language:")) }) {
|
||||
Picker(
|
||||
LocalizedStringKey("Follow OS settings"),
|
||||
|
@ -113,47 +82,14 @@ struct VwrPrefPaneGeneral: View {
|
|||
}
|
||||
.labelsHidden()
|
||||
.frame(width: 180.0)
|
||||
|
||||
Text(LocalizedStringKey("Change user interface language (will reboot the IME)."))
|
||||
.preferenceDescription()
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Candidate Layout:")) }) {
|
||||
Picker(
|
||||
"",
|
||||
selection: $selEnableHorizontalCandidateLayout.onChange {
|
||||
PrefMgr.shared.useHorizontalCandidateList = selEnableHorizontalCandidateLayout
|
||||
}
|
||||
) {
|
||||
Text(LocalizedStringKey("Vertical")).tag(false)
|
||||
Text(LocalizedStringKey("Horizontal")).tag(true)
|
||||
}
|
||||
.labelsHidden()
|
||||
.horizontalRadioGroupLayout()
|
||||
.pickerStyle(RadioGroupPickerStyle())
|
||||
Text(LocalizedStringKey("Choose your preferred layout of the candidate window."))
|
||||
.preferenceDescription()
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Typing Settings:")) }) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Show available reverse-lookup results in candidate window"),
|
||||
isOn: $selShowReverseLookupInCandidateUI.onChange {
|
||||
PrefMgr.shared.showReverseLookupInCandidateUI = selShowReverseLookupInCandidateUI
|
||||
}
|
||||
)
|
||||
.controlSize(.small)
|
||||
.disabled(PrefMgr.shared.useIMKCandidateWindow)
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Output Settings:")) }) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Auto-convert traditional Chinese glyphs to KangXi characters"),
|
||||
isOn: $selEnableKanjiConvToKangXi.onChange {
|
||||
PrefMgr.shared.chineseConversionEnabled = selEnableKanjiConvToKangXi
|
||||
selEnableKanjiConvToJIS = PrefMgr.shared.shiftJISShinjitaiOutputEnabled
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Auto-convert traditional Chinese glyphs to JIS Shinjitai characters"),
|
||||
isOn: $selEnableKanjiConvToJIS.onChange {
|
||||
PrefMgr.shared.shiftJISShinjitaiOutputEnabled = selEnableKanjiConvToJIS
|
||||
selEnableKanjiConvToKangXi = PrefMgr.shared.chineseConversionEnabled
|
||||
LocalizedStringKey("Automatically correct reading combinations when typing"),
|
||||
isOn: $selAutoCorrectReadingCombination.onChange {
|
||||
PrefMgr.shared.autoCorrectReadingCombination = selAutoCorrectReadingCombination
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
|
@ -163,11 +99,26 @@ struct VwrPrefPaneGeneral: View {
|
|||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter"),
|
||||
isOn: $selInlineDumpPinyinInLieuOfZhuyin.onChange {
|
||||
PrefMgr.shared.inlineDumpPinyinInLieuOfZhuyin = selInlineDumpPinyinInLieuOfZhuyin
|
||||
LocalizedStringKey("Allow backspace-editing miscomposed readings"),
|
||||
isOn: $selKeepReadingUponCompositionError.onChange {
|
||||
PrefMgr.shared.keepReadingUponCompositionError = selKeepReadingUponCompositionError
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Also use “\\” or “¥” key for Hanin Keyboard Symbol Input"),
|
||||
isOn: $selClassicHaninKeyboardSymbolModeShortcutEnabled.onChange {
|
||||
PrefMgr.shared.classicHaninKeyboardSymbolModeShortcutEnabled
|
||||
= selClassicHaninKeyboardSymbolModeShortcutEnabled
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Emulating select-candidate-per-character mode"),
|
||||
isOn: $selEnableSCPCTypingMode.onChange {
|
||||
PrefMgr.shared.useSCPCTypingMode = selEnableSCPCTypingMode
|
||||
}
|
||||
)
|
||||
Text(LocalizedStringKey("An accommodation for elder computer users."))
|
||||
.preferenceDescription()
|
||||
if Date.isTodayTheDate(from: 0401) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Stop farting (when typed phonetic combination is invalid, etc.)"),
|
||||
|
@ -225,7 +176,7 @@ struct VwrPrefPaneGeneral: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,28 +21,11 @@ struct VwrPrefPaneKeyboard: View {
|
|||
UserDefaults.standard.string(forKey: UserDef.kAlphanumericalKeyboardLayout.rawValue)
|
||||
?? PrefMgr.shared.alphanumericalKeyboardLayout
|
||||
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: contentWidth) {
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Selection Keys:")) }) {
|
||||
VwrPrefPaneKeyboard_SelectionKeys()
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Quick Setup:")) }) {
|
||||
HStack {
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
SSPreferences.Section(title: "Quick Setup:".localized) {
|
||||
HStack(alignment: .top) {
|
||||
Button {
|
||||
PrefMgr.shared.keyboardParser = 0
|
||||
selKeyboardParser = PrefMgr.shared.keyboardParser
|
||||
|
@ -67,7 +50,7 @@ struct VwrPrefPaneKeyboard: View {
|
|||
} label: {
|
||||
Text("↻A")
|
||||
}
|
||||
}
|
||||
}.controlSize(.small)
|
||||
}
|
||||
SSPreferences.Section(label: { Text(LocalizedStringKey("Phonetic Parser:")) }) {
|
||||
HStack {
|
||||
|
@ -153,60 +136,7 @@ struct VwrPrefPaneKeyboard: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
private struct VwrPrefPaneKeyboard_SelectionKeys: View {
|
||||
@State private var selSelectionKeysList = CandidateKey.suggestions
|
||||
@State private var selSelectionKeys =
|
||||
UserDefaults.standard.string(forKey: UserDef.kCandidateKeys.rawValue) ?? CandidateKey.defaultKeys
|
||||
|
||||
var body: some View {
|
||||
ComboBox(
|
||||
items: CandidateKey.suggestions,
|
||||
text: $selSelectionKeys.onChange {
|
||||
let value = selSelectionKeys
|
||||
let keys: String = value.trimmingCharacters(in: .whitespacesAndNewlines).deduplicated
|
||||
if keys.isEmpty {
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
return
|
||||
}
|
||||
// Start Error Handling.
|
||||
if let errorResult = CandidateKey.validate(keys: keys) {
|
||||
IMEApp.buzz()
|
||||
if let window = CtlPrefUI.shared.controller.window {
|
||||
let alert = NSAlert(error: NSLocalizedString("Invalid Selection Keys.", comment: ""))
|
||||
alert.informativeText = errorResult
|
||||
alert.beginSheetModal(for: window) { _ in
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
}
|
||||
} else {
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
}
|
||||
} else {
|
||||
PrefMgr.shared.candidateKeys = keys
|
||||
selSelectionKeys = PrefMgr.shared.candidateKeys
|
||||
return
|
||||
}
|
||||
}
|
||||
).frame(width: 180).disabled(PrefMgr.shared.useIMKCandidateWindow)
|
||||
if PrefMgr.shared.useIMKCandidateWindow {
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759."
|
||||
)
|
||||
)
|
||||
.preferenceDescription()
|
||||
} else {
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"Choose or hit Enter to confim your prefered keys for selecting candidates."
|
||||
)
|
||||
)
|
||||
.preferenceDescription()
|
||||
}
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
|
||||
// ====================
|
||||
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
|
||||
// ... with NTL restriction stating that:
|
||||
// No trademark license is granted to use the trade names, trademarks, service
|
||||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import Shared
|
||||
import SSPreferences
|
||||
import SwiftExtension
|
||||
import SwiftUI
|
||||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPaneOutput: View {
|
||||
@State private var selEnableKanjiConvToKangXi = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kChineseConversionEnabled.rawValue)
|
||||
@State private var selEnableKanjiConvToJIS = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kShiftJISShinjitaiOutputEnabled.rawValue)
|
||||
@State private var selInlineDumpPinyinInLieuOfZhuyin = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kInlineDumpPinyinInLieuOfZhuyin.rawValue)
|
||||
@State private var selTrimUnfinishedReadingsOnCommit = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kTrimUnfinishedReadingsOnCommit.rawValue)
|
||||
@State private var selHardenVerticalPunctuations: Bool = UserDefaults.standard.bool(
|
||||
forKey: UserDef.kHardenVerticalPunctuations.rawValue)
|
||||
|
||||
var macOSMontereyOrLaterDetected: Bool {
|
||||
if #available(macOS 12, *) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
SSPreferences.Container(contentWidth: CtlPrefUI.contentWidth) {
|
||||
SSPreferences.Section(title: "Output Settings:".localized) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Auto-convert traditional Chinese glyphs to KangXi characters"),
|
||||
isOn: $selEnableKanjiConvToKangXi.onChange {
|
||||
PrefMgr.shared.chineseConversionEnabled = selEnableKanjiConvToKangXi
|
||||
selEnableKanjiConvToJIS = PrefMgr.shared.shiftJISShinjitaiOutputEnabled
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Auto-convert traditional Chinese glyphs to JIS Shinjitai characters"),
|
||||
isOn: $selEnableKanjiConvToJIS.onChange {
|
||||
PrefMgr.shared.shiftJISShinjitaiOutputEnabled = selEnableKanjiConvToJIS
|
||||
selEnableKanjiConvToKangXi = PrefMgr.shared.chineseConversionEnabled
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter"),
|
||||
isOn: $selInlineDumpPinyinInLieuOfZhuyin.onChange {
|
||||
PrefMgr.shared.inlineDumpPinyinInLieuOfZhuyin = selInlineDumpPinyinInLieuOfZhuyin
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Trim unfinished readings / strokes on commit"),
|
||||
isOn: $selTrimUnfinishedReadingsOnCommit.onChange {
|
||||
PrefMgr.shared.trimUnfinishedReadingsOnCommit = selTrimUnfinishedReadingsOnCommit
|
||||
}
|
||||
)
|
||||
Toggle(
|
||||
LocalizedStringKey("Harden vertical punctuations during vertical typing (not recommended)"),
|
||||
isOn: $selHardenVerticalPunctuations.onChange {
|
||||
PrefMgr.shared.hardenVerticalPunctuations = selHardenVerticalPunctuations
|
||||
}
|
||||
)
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal."
|
||||
)
|
||||
)
|
||||
.preferenceDescription().prefDescriptionWidthLimited()
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
@available(macOS 11.0, *)
|
||||
struct VwrPrefPaneOutput_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
VwrPrefPaneOutput()
|
||||
}
|
||||
}
|
|
@ -14,20 +14,6 @@ import SwiftUI
|
|||
|
||||
@available(macOS 10.15, *)
|
||||
struct VwrPrefPanePhrases: View {
|
||||
private let contentMaxHeight: Double = 490
|
||||
private let contentWidth: Double = {
|
||||
switch PrefMgr.shared.appleLanguages[0] {
|
||||
case "ja":
|
||||
return 520
|
||||
default:
|
||||
if PrefMgr.shared.appleLanguages[0].contains("zh-Han") {
|
||||
return 480
|
||||
} else {
|
||||
return 580
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
var isMontereyOrAbove: Bool = {
|
||||
if #available(macOS 12.0, *) {
|
||||
return true
|
||||
|
@ -39,12 +25,12 @@ struct VwrPrefPanePhrases: View {
|
|||
ScrollView {
|
||||
VStack {
|
||||
VwrPhraseEditorUI(delegate: LMMgr.shared, window: CtlPrefUI.shared.controller.window)
|
||||
.frame(width: contentWidth + 28, height: 445)
|
||||
.frame(width: CtlPrefUI.contentWidth + 28, height: 445)
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
.frame(maxHeight: contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
.frame(maxHeight: CtlPrefUI.contentMaxHeight).fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -137,6 +137,17 @@
|
|||
"Hold ⇧ to choose associates." = "Hold ⇧ to choose associates.";
|
||||
"Dachen Trad." = "Dachen Trad.";
|
||||
"Eten Trad." = "Eten Trad.";
|
||||
"User phrase folder path is not customizable in macOS 10.9 - 10.12." = "User phrase folder path is not customizable in macOS 10.9 - 10.12.";
|
||||
"Please use “defaults write” terminal command to modify this String value:" = "Please use “defaults write” terminal command to modify this String value:";
|
||||
"Please manually enter the identifier(s)." = "Please manually enter the identifier(s).";
|
||||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature.";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759.";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "Also toggle alphanumerical mode with Left-Shift";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "Completely disable using Shift key to toggle alphanumerical mode";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.";
|
||||
"Typing Style:" = "Typing Style:";
|
||||
|
||||
// The followings are the category names used in the Symbol menu.
|
||||
"catCommonSymbols" = "CommonSymbols";
|
||||
|
@ -166,13 +177,16 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)Space:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759.";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." ;
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal.";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ This may hinder the walking algorithm from giving appropriate results.";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ This will reboot the vChewing IME.";
|
||||
"All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file.";
|
||||
"Allow backspace-editing miscomposed readings" = "Allow backspace-editing miscomposed readings";
|
||||
"Allow boosting / excluding a candidate of single kanji" = "Allow boosting / excluding a candidate of single kanji";
|
||||
"Allow using Enter key to confirm associated candidate selection" = "Allow using Enter key to confirm associated candidate selection";
|
||||
"Alphanumerical Layout:" = "Alphanumerical Layout:";
|
||||
"Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "Also use “\\” or “¥” key for Hanin Keyboard Symbol Input";
|
||||
"Always drop the previous reading" = "Always drop the previous reading";
|
||||
"Always show tooltip texts horizontally" = "Always show tooltip texts horizontally";
|
||||
"Always type intonations to the inline composition buffer" = "Always type intonations to the inline composition buffer";
|
||||
|
@ -222,6 +236,7 @@
|
|||
"Disable forced conversion for cassette outputs" = "Disable forced conversion for cassette outputs";
|
||||
"Disassemble the previous reading, dropping its intonation" = "Disassemble the previous reading, dropping its intonation";
|
||||
"Disassembling process does not work with non-phonetic reading keys." = "Disassembling process does not work with non-phonetic reading keys.";
|
||||
"Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either." = "Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either.";
|
||||
"Edit…" = "Edit…";
|
||||
"Emulating select-candidate-per-character mode" = "Emulating select-candidate-per-character mode";
|
||||
"Enable cassette mode, suppressing phonabet input" = "Enable cassette mode, suppressing phonabet input";
|
||||
|
@ -234,11 +249,12 @@
|
|||
"Eten 26" = "Eten 26";
|
||||
"Eten Traditional" = "Eten Traditional";
|
||||
"Experience" = "Experience";
|
||||
"Experimental:" = "Experimental:";
|
||||
"Fake Seigyou" = "Fake Seigyou (Similar to JinYei)";
|
||||
"Follow OS settings" = "Follow OS settings";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is.";
|
||||
"for revolving candidates" = "for revolving candidates";
|
||||
"for revolving pages" = "for revolving pages";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is.";
|
||||
"General" = "General";
|
||||
"Hanyu Pinyin with Numeral Intonation" = "Hanyu Pinyin with Numeral Intonation";
|
||||
"Harden vertical punctuations during vertical typing (not recommended)" = "Harden vertical punctuations during vertical typing (not recommended)";
|
||||
|
@ -246,9 +262,12 @@
|
|||
"Hsu" = "Hsu";
|
||||
"Hualuo Pinyin with Numeral Intonation" = "Hualuo Pinyin with Numeral Intonation";
|
||||
"IBM" = "IBM";
|
||||
"If disabled, this will insert space instead." = "If disabled, this will insert space instead.";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes.";
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases." = "IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases.";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||
"Intonation Key:" = "Intonation Key:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable.";
|
||||
"Japanese" = "Japanese";
|
||||
"Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English." = "Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English.";
|
||||
"Keyboard Shortcuts:" = "Keyboard Shortcuts:";
|
||||
|
@ -260,12 +279,13 @@
|
|||
"Only enforce conversion in Traditional Chinese mode" = "Only enforce conversion in Traditional Chinese mode";
|
||||
"Only load factory language models if needed" = "Only load factory language models if needed";
|
||||
"Only override the intonation of the previous reading if different" = "Only override the intonation of the previous reading if different";
|
||||
"Otherwise, only the candidate keys are allowed to confirm associates." = "Otherwise, only the candidate keys are allowed to confirm associates.";
|
||||
"Output Settings:" = "Output Settings:";
|
||||
"Override the previous reading's intonation with candidate-reset" = "Override the previous reading's intonation with candidate-reset";
|
||||
"Path invalid or file access error." = "Path invalid or file access error.";
|
||||
"Phonetic Parser:" = "Phonetic Parser:";
|
||||
"Please reconfigure the cassette path to a valid one before enabling this mode." = "Please reconfigure the cassette path to a valid one before enabling this mode.";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.";
|
||||
"Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu.";
|
||||
"Push the cursor in front of the phrase after selection" = "Push the cursor in front of the phrase after selection";
|
||||
"Quick Setup:" = "Quick Setup:";
|
||||
"Read external factory dictionary plists if possible" = "Read external factory dictionary plists if possible";
|
||||
|
@ -282,24 +302,29 @@
|
|||
"Simplified Chinese" = "Simplified Chinese";
|
||||
"Space to +revolve candidates, Shift+Space to +revolve pages" = "Space to +revolve candidates, Shift+Space to +revolve pages";
|
||||
"Space to +revolve pages, Shift+Space to +revolve candidates" = "Space to +revolve pages, Shift+Space to +revolve candidates";
|
||||
"Space:" = "Space:";
|
||||
"Specify the behavior of intonation key when syllable composer is empty." = "Specify the behavior of intonation key when syllable composer is empty.";
|
||||
"Starlight" = "Starlight";
|
||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode." = "This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode.";
|
||||
"The lookup results are supplied by the CIN cassette module." = "The lookup results are supplied by the CIN cassette module.";
|
||||
"The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu." = "The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu.";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode." = "This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode.";
|
||||
"This feature requires macOS 10.15 and above." = "This feature requires macOS 10.15 and above.";
|
||||
"This only works with Tadokoro candidate window." = "This only works with Tadokoro candidate window.";
|
||||
"This will batch-replace specified candidates." = "This will batch-replace specified candidates.";
|
||||
"This will stop user override model from affecting how candidates get sorted." = "This will stop user override model from affecting how candidates get sorted.";
|
||||
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "This will use the plist files deployed by the “make install” command from libvChewing-Data if possible.";
|
||||
"Toggle alphanumerical mode with Left-Shift" = "Toggle alphanumerical mode with Left-Shift";
|
||||
"Toggle alphanumerical mode with Right-Shift" = "Toggle alphanumerical mode with Right-Shift";
|
||||
"Traditional Chinese" = "Traditional Chinese";
|
||||
"Trim unfinished readings / strokes on commit" = "Trim unfinished readings / strokes on commit";
|
||||
"Type them into inline composition buffer" = "Type them into inline composition buffer";
|
||||
"Typing Style:" = "Typing Style:";
|
||||
"Typing Settings:" = "Typing Settings:";
|
||||
"UI Language:" = "UI Language:";
|
||||
"Universal Pinyin with Numeral Intonation" = "Universal Pinyin with Numeral Intonation";
|
||||
"Use .langIdentifier to handle UI fonts in candidate window" = "Use .langIdentifier to handle UI fonts in candidate window";
|
||||
"Use ESC key to clear the entire input buffer" = "Use ESC key to clear the entire input buffer";
|
||||
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "Use IMK Candidate Window instead of Tadokoro (will reboot the IME)";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "Use IMK Candidate Window instead of Tadokoro";
|
||||
"Vertical" = "Vertical";
|
||||
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected.";
|
||||
"Yale Pinyin with Numeral Intonation" = "Yale Pinyin with Numeral Intonation";
|
||||
|
|
|
@ -137,6 +137,17 @@
|
|||
"Hold ⇧ to choose associates." = "Hold ⇧ to choose associates.";
|
||||
"Dachen Trad." = "Dachen Trad.";
|
||||
"Eten Trad." = "Eten Trad.";
|
||||
"User phrase folder path is not customizable in macOS 10.9 - 10.12." = "User phrase folder path is not customizable in macOS 10.9 - 10.12.";
|
||||
"Please use “defaults write” terminal command to modify this String value:" = "Please use “defaults write” terminal command to modify this String value:";
|
||||
"Please manually enter the identifier(s)." = "Please manually enter the identifier(s).";
|
||||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature.";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759.";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "Also toggle alphanumerical mode with Left-Shift";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "Completely disable using Shift key to toggle alphanumerical mode";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.";
|
||||
"Typing Style:" = "Typing Style:";
|
||||
|
||||
// The followings are the category names used in the Symbol menu.
|
||||
"catCommonSymbols" = "CommonSymbols";
|
||||
|
@ -166,13 +177,16 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)Space:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759.";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." ;
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal.";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ This may hinder the walking algorithm from giving appropriate results.";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ This will reboot the vChewing IME.";
|
||||
"All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file.";
|
||||
"Allow backspace-editing miscomposed readings" = "Allow backspace-editing miscomposed readings";
|
||||
"Allow boosting / excluding a candidate of single kanji" = "Allow boosting / excluding a candidate of single kanji";
|
||||
"Allow using Enter key to confirm associated candidate selection" = "Allow using Enter key to confirm associated candidate selection";
|
||||
"Alphanumerical Layout:" = "Alphanumerical Layout:";
|
||||
"Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "Also use “\\” or “¥” key for Hanin Keyboard Symbol Input";
|
||||
"Always drop the previous reading" = "Always drop the previous reading";
|
||||
"Always show tooltip texts horizontally" = "Always show tooltip texts horizontally";
|
||||
"Always type intonations to the inline composition buffer" = "Always type intonations to the inline composition buffer";
|
||||
|
@ -222,6 +236,7 @@
|
|||
"Disable forced conversion for cassette outputs" = "Disable forced conversion for cassette outputs";
|
||||
"Disassemble the previous reading, dropping its intonation" = "Disassemble the previous reading, dropping its intonation";
|
||||
"Disassembling process does not work with non-phonetic reading keys." = "Disassembling process does not work with non-phonetic reading keys.";
|
||||
"Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either." = "Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either.";
|
||||
"Edit…" = "Edit…";
|
||||
"Emulating select-candidate-per-character mode" = "Emulating select-candidate-per-character mode";
|
||||
"Enable cassette mode, suppressing phonabet input" = "Enable cassette mode, suppressing phonabet input";
|
||||
|
@ -234,11 +249,12 @@
|
|||
"Eten 26" = "Eten 26";
|
||||
"Eten Traditional" = "Eten Traditional";
|
||||
"Experience" = "Experience";
|
||||
"Experimental:" = "Experimental:";
|
||||
"Fake Seigyou" = "Fake Seigyou (Similar to JinYei)";
|
||||
"Follow OS settings" = "Follow OS settings";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is.";
|
||||
"for revolving candidates" = "for revolving candidates";
|
||||
"for revolving pages" = "for revolving pages";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is.";
|
||||
"General" = "General";
|
||||
"Hanyu Pinyin with Numeral Intonation" = "Hanyu Pinyin with Numeral Intonation";
|
||||
"Harden vertical punctuations during vertical typing (not recommended)" = "Harden vertical punctuations during vertical typing (not recommended)";
|
||||
|
@ -246,9 +262,12 @@
|
|||
"Hsu" = "Hsu";
|
||||
"Hualuo Pinyin with Numeral Intonation" = "Hualuo Pinyin with Numeral Intonation";
|
||||
"IBM" = "IBM";
|
||||
"If disabled, this will insert space instead." = "If disabled, this will insert space instead.";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes.";
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases." = "IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases.";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||
"Intonation Key:" = "Intonation Key:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable.";
|
||||
"Japanese" = "Japanese";
|
||||
"Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English." = "Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English.";
|
||||
"Keyboard Shortcuts:" = "Keyboard Shortcuts:";
|
||||
|
@ -260,12 +279,13 @@
|
|||
"Only enforce conversion in Traditional Chinese mode" = "Only enforce conversion in Traditional Chinese mode";
|
||||
"Only load factory language models if needed" = "Only load factory language models if needed";
|
||||
"Only override the intonation of the previous reading if different" = "Only override the intonation of the previous reading if different";
|
||||
"Otherwise, only the candidate keys are allowed to confirm associates." = "Otherwise, only the candidate keys are allowed to confirm associates.";
|
||||
"Output Settings:" = "Output Settings:";
|
||||
"Override the previous reading's intonation with candidate-reset" = "Override the previous reading's intonation with candidate-reset";
|
||||
"Path invalid or file access error." = "Path invalid or file access error.";
|
||||
"Phonetic Parser:" = "Phonetic Parser:";
|
||||
"Please reconfigure the cassette path to a valid one before enabling this mode." = "Please reconfigure the cassette path to a valid one before enabling this mode.";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.";
|
||||
"Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu.";
|
||||
"Push the cursor in front of the phrase after selection" = "Push the cursor in front of the phrase after selection";
|
||||
"Quick Setup:" = "Quick Setup:";
|
||||
"Read external factory dictionary plists if possible" = "Read external factory dictionary plists if possible";
|
||||
|
@ -282,24 +302,29 @@
|
|||
"Simplified Chinese" = "Simplified Chinese";
|
||||
"Space to +revolve candidates, Shift+Space to +revolve pages" = "Space to +revolve candidates, Shift+Space to +revolve pages";
|
||||
"Space to +revolve pages, Shift+Space to +revolve candidates" = "Space to +revolve pages, Shift+Space to +revolve candidates";
|
||||
"Space:" = "Space:";
|
||||
"Specify the behavior of intonation key when syllable composer is empty." = "Specify the behavior of intonation key when syllable composer is empty.";
|
||||
"Starlight" = "Starlight";
|
||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode." = "This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode.";
|
||||
"The lookup results are supplied by the CIN cassette module." = "The lookup results are supplied by the CIN cassette module.";
|
||||
"The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu." = "The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu.";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode." = "This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode.";
|
||||
"This feature requires macOS 10.15 and above." = "This feature requires macOS 10.15 and above.";
|
||||
"This only works with Tadokoro candidate window." = "This only works with Tadokoro candidate window.";
|
||||
"This will batch-replace specified candidates." = "This will batch-replace specified candidates.";
|
||||
"This will stop user override model from affecting how candidates get sorted." = "This will stop user override model from affecting how candidates get sorted.";
|
||||
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "This will use the plist files deployed by the “make install” command from libvChewing-Data if possible.";
|
||||
"Toggle alphanumerical mode with Left-Shift" = "Toggle alphanumerical mode with Left-Shift";
|
||||
"Toggle alphanumerical mode with Right-Shift" = "Toggle alphanumerical mode with Right-Shift";
|
||||
"Traditional Chinese" = "Traditional Chinese";
|
||||
"Trim unfinished readings / strokes on commit" = "Trim unfinished readings / strokes on commit";
|
||||
"Type them into inline composition buffer" = "Type them into inline composition buffer";
|
||||
"Typing Style:" = "Typing Style:";
|
||||
"Typing Settings:" = "Typing Settings:";
|
||||
"UI Language:" = "UI Language:";
|
||||
"Universal Pinyin with Numeral Intonation" = "Universal Pinyin with Numeral Intonation";
|
||||
"Use .langIdentifier to handle UI fonts in candidate window" = "Use .langIdentifier to handle UI fonts in candidate window";
|
||||
"Use ESC key to clear the entire input buffer" = "Use ESC key to clear the entire input buffer";
|
||||
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "Use IMK Candidate Window instead of Tadokoro (will reboot the IME)";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "Use IMK Candidate Window instead of Tadokoro";
|
||||
"Vertical" = "Vertical";
|
||||
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected.";
|
||||
"Yale Pinyin with Numeral Intonation" = "Yale Pinyin with Numeral Intonation";
|
||||
|
|
|
@ -137,6 +137,18 @@
|
|||
"Hold ⇧ to choose associates." = "⇧を押しながら連想候補を選択。";
|
||||
"Dachen Trad." = "大千伝統";
|
||||
"Eten Trad." = "倚天伝統";
|
||||
"User phrase folder path is not customizable in macOS 10.9 - 10.12." = "macOS 10.9 - 10.12 でのユーザー辞書フォルダの変更は不可能。";
|
||||
"Please use “defaults write” terminal command to modify this String value:" = "ターミナルコマンド「defaults write」で下記の String 値のご設定を:";
|
||||
"Please manually enter the identifier(s)." = "ご自分で唯一識別子(Bundle Identifier)のご入力を。";
|
||||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "システムの支障の話ですが、macOS 10.9 (恐らく 10.10 - 10.12 も) には下記のバグはございます:入力アプリは自分のファイル操作パネルをアクセススロと、その入力アプリだけでなく、あれから入力アプリの触り合おうとした全ての客体アプリも「無限のカタマリ」その無反応な状態になってしまいます。その場合、SSH でこのパソコンで「killall vChewing」そのターミナルコマンドを実行すれば、及ぼされた客体アプリの反応は戻ります。そのため、開発側は上記のシステムバージョンに応じて、自身のファイルパネルアクセスを全て禁止としました。";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ この機能は IMK 候補陳列ウィンドウにサポートされておりません。\nApple Developer Relations に按鍵番号 #FB11300759 を教えながらクレームしてください。";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "左側の Shift キーでも英数入力モードの切り替え";
|
||||
"Candidate Layout:" = "入力候補陳列の仕様";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "Shift キーの英数入力モードの切り替え機能を徹底的に禁ず";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "マウスホイールでこのページをご覧ください。キーに関する取扱説明のアクセスはメニューに。";
|
||||
"Typing Style:" = "入力習慣:";
|
||||
|
||||
// The followings are the category names used in the Symbol menu.
|
||||
"catCommonSymbols" = "常用";
|
||||
|
@ -166,13 +178,16 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)Space:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ この機能は IMK 候補陳列ウィンドウにサポートされておりません。\nApple Developer Relations に案件番号 #FB11300759 を教えながらクレームしてください。";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ この機能は IMK 候補陳列ウィンドウにサポートされておりません。\nApple Developer Relations に案件番号 #FB11300759 を持ってクレームを。";
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 該当の組版用フォントには縦書き(引用符・括弧)変換機能が備えていない限り、この機能を使う甲斐がある。一旦使うと、入力した全ての引用符・括弧は永遠的に縦書きの様式になる。例え入力を受けているアプリ(例えばワープロソフとなど)の書写方向は横書きと変えたとしても、これらの入力済みの引用符・括弧は全て縦書きの見た目であり、削除してから入力し直す必要になる。";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ ウォーキング算法に差し支えてしまい、正しくない結果が出る恐れがある。";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ これで威注音入力アプリを再起動。";
|
||||
"All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "これをチェックしないと、全ての筆画は ASCII キーネームで入力緩衝列で表示してしまうことになる。CIN ファイルの「%keyname」というところで筆画の定義はできる。";
|
||||
"Allow backspace-editing miscomposed readings" = "効かぬ音読みを BackSpace で再編集";
|
||||
"Allow boosting / excluding a candidate of single kanji" = "即排除/即最優先にできる候補の文字数の最低限は1字とする";
|
||||
"Allow using Enter key to confirm associated candidate selection" = "Enter キーを連想語彙候補の確認のために使う";
|
||||
"Alphanumerical Layout:" = "英数キーボード:";
|
||||
"Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "「\\」・「¥」キーでも漢音キーボード符号入力";
|
||||
"Always drop the previous reading" = "カーソルの後部の音読みを常に削除する";
|
||||
"Always show tooltip texts horizontally" = "ヒントを常に横書きにする";
|
||||
"Always type intonations to the inline composition buffer" = "常に入力緩衝列に音調を入力する";
|
||||
|
@ -189,7 +204,7 @@
|
|||
"Automatically correct reading combinations when typing" = "入力中で打ち間違った発音組み合わせを自動的に訂正する";
|
||||
"Automatically reload user data files if changes detected" = "ユーザー辞書データの変更を自動検出し、自動的に再読込";
|
||||
"Basic Keyboard Layout:" = "基礎キーボード:";
|
||||
"Candidate Layout:" = "入力候補陳列の仕様";
|
||||
"Candidate Layout:" = "候補陳列の仕様";
|
||||
"Candidate Size:" = "候補文字の字号:";
|
||||
"Cassette mode is similar to the CIN support of the Yahoo Kimo IME, allowing users to use their own CIN tables to implement their stroked-based input schema (e.g. Wubi, Cangjie, Boshiamy, etc.) as a plan-B in vChewing IME. However, since vChewing won't compromise its phonabet input mode experience for this cassette mode, users might not feel comfortable enough comparing to their experiences with RIME (recommended) or OpenVanilla (deprecated)." = "カセットモードは、CIN ファイルを用いて、(五筆や倉頡や嘸蝦米などのような)筆画入力を機能拡張できるモードである。ですが、単なる予備機能として提供したもののため、使いやすいかどうか、RIME や OpenVanilla などに比べられないかもしれん。";
|
||||
"Cassette" = "カセ設定";
|
||||
|
@ -222,6 +237,7 @@
|
|||
"Disable forced conversion for cassette outputs" = "カセットモードによる漢字出力の簡繁転換を行わずにする";
|
||||
"Disassemble the previous reading, dropping its intonation" = "カーソルの後部の音読みを解き、その音調を除く";
|
||||
"Disassembling process does not work with non-phonetic reading keys." = "実の意味の音読みだけを解くことができる。";
|
||||
"Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either." = "セキュリティ上の懸念から、いかなるシェルスクリプトの実装も計画していません。App Sandbox の実装が無い場合には、関連する UserDefaults を容易に改ざんできることから、悪意のあるシェルスクリプトが実行される恐れがあり、従ってシステム全体に脆弱性を持つことは疑う余地がありません。威注音入力アプリの公式発行版は Sandbox 処理済みであり、そしてその処理をしたアプリ自身は「外部のシェルコマンドの実行」はできません。";
|
||||
"Edit…" = "編集…";
|
||||
"Emulating select-candidate-per-character mode" = "漢字1つづつ全候補選択入力モード";
|
||||
"Enable cassette mode, suppressing phonabet input" = "カセットモードを起用(注音入力はこのモードで使えぬ)";
|
||||
|
@ -234,11 +250,12 @@
|
|||
"Eten 26" = "倚天形忘れ配列 (26 キー)";
|
||||
"Eten Traditional" = "倚天伝統配列";
|
||||
"Experience" = "体験設定";
|
||||
"Experimental:" = "まだ試験段階:";
|
||||
"Fake Seigyou" = "偽精業配列";
|
||||
"Follow OS settings" = "システム設定に準ず";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "例えば、入力緩衝列には「章太炎」という節点があり、その範囲は [0,3) である。もし、「太」を「泰」にしたいのなら、今回の作業範囲は [1,2) で、「章太炎」の範囲と重ねてしまう。この場合、もし、事前強固措置がなければ、今回の作業でこの単語は「張泰言」のような望ましくない変換結果になってしまう。事前強固措置があるからこそ、「章泰炎」のような正確な作業結果の保証である。";
|
||||
"for revolving candidates" = "候補文字そのもの";
|
||||
"for revolving pages" = "候補陳列ページ";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "例えば、入力緩衝列には「章太炎」という節点があり、その範囲は [0,3) である。もし、「太」を「泰」にしたいのなら、今回の作業範囲は [1,2) で、「章太炎」の範囲と重ねてしまう。この場合、もし、事前強固措置がなければ、今回の作業でこの単語は「張泰言」のような望ましくない変換結果になってしまう。事前強固措置があるからこそ、「章泰炎」のような正確な作業結果の保証である。";
|
||||
"General" = "全般設定";
|
||||
"Hanyu Pinyin with Numeral Intonation" = "漢語弁音 (ローマ字+数字音調)";
|
||||
"Harden vertical punctuations during vertical typing (not recommended)" = "縦書きの時に、引用符・括弧などを強制的に縦書き文字と変換する(不推奨)";
|
||||
|
@ -246,9 +263,12 @@
|
|||
"Hsu" = "許氏国音自然配列";
|
||||
"Hualuo Pinyin with Numeral Intonation" = "中華ローマ弁音 (ローマ字+数字音調)";
|
||||
"IBM" = "IBM 配列";
|
||||
"If disabled, this will insert space instead." = "未チェックの場合、スペースを挿入。";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "未チェックの場合、ESC キーはまず未完成の音読/筆画を消す。\n未完成の音読/筆画がない場合、全緩衝列をそのまま送り出す。";
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases." = "IMK 候補陳列ウィンドウは、Apple の未公開のAPIを「bridging-header」という強引的な手段で引き出して利用した機能である。現時点で macOS 10.14 Mojave から macOS 13 Ventura まで利用可能であるが、その後の新しい macOS との互換性の話はまだ早い。";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "単語の前で // macOS 内蔵注音入力のやり方";
|
||||
"Intonation Key:" = "音調キー:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "この機能の利用する NSEvent は、macOS 内蔵の入力アプリ共用モジュール「InputMethodKit」から提供した NSEvent のみであり、その NSEvent 文脈関係で「Shift キーは1回押したかどうか」と判断することはできる。この事実に疑いを持つ者は、本アプリのソースコードを審査するか、あるいは本アプリを逆向工程(分解工学, いわゆる「Reverse-Engineering」)するがよい。";
|
||||
"Japanese" = "和語";
|
||||
"Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English." = "縦書き入力の場合、ヒントにはキーの名前は常に符号で表示する。";
|
||||
"Keyboard Shortcuts:" = "ショートカット:";
|
||||
|
@ -260,12 +280,13 @@
|
|||
"Only enforce conversion in Traditional Chinese mode" = "繁体モードだけの場合、カセットモードの漢字出力転換を";
|
||||
"Only load factory language models if needed" = "必要性を判断してから内蔵辞書を読み込む";
|
||||
"Only override the intonation of the previous reading if different" = "カーソルの後部の音読みの異なる音調だけを上書きする";
|
||||
"Otherwise, only the candidate keys are allowed to confirm associates." = "未チェックの場合、連想候補を選べられるのは言選りキーのみ。";
|
||||
"Output Settings:" = "出力設定:";
|
||||
"Override the previous reading's intonation with candidate-reset" = "カーソルの後部の音読みの音調を上書きし、候補選択状態を戻す";
|
||||
"Path invalid or file access error." = "ファイルアクセス失敗、或いはご指定したファイル位置情報は使えぬ。";
|
||||
"Phonetic Parser:" = "注音配列:";
|
||||
"Please reconfigure the cassette path to a valid one before enabling this mode." = "カセットファイルを正しくご指定してから、このモードのご使用を。";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "マウスホイールでこのページをご覧ください。キーに関する取扱説明のアクセスはメニューに。";
|
||||
"Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu." = "マウスホイールでページをご覧ください。キーに関する取扱説明のアクセスはメニューに。";
|
||||
"Push the cursor in front of the phrase after selection" = "候補選択の直後、すぐカーソルを単語の向こうに推し進める";
|
||||
"Quick Setup:" = "直接設定:";
|
||||
"Read external factory dictionary plists if possible" = "なるべく(内蔵辞書より)外部の公式辞書ファイルを利用";
|
||||
|
@ -282,24 +303,29 @@
|
|||
"Simplified Chinese" = "簡体中国語";
|
||||
"Space to +revolve candidates, Shift+Space to +revolve pages" = "Shift+Space で次のページ、Space で次の候補文字を";
|
||||
"Space to +revolve pages, Shift+Space to +revolve candidates" = "Space で次のページ、Shift+Space で次の候補文字を";
|
||||
"Space:" = "Space:";
|
||||
"Specify the behavior of intonation key when syllable composer is empty." = "音読組立緩衝列が空かされた時の音調キーの行為をご指定ください。";
|
||||
"Starlight" = "星光配列";
|
||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "マナーモード // 外すと入力間違った時に変な声が出る";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode." = "この転換はカセットモードだけに使える転換であり、転換結果はこの設定と入力モード次第である。";
|
||||
"The lookup results are supplied by the CIN cassette module." = "逆引参照の結果は CIN カセットモジュールから提供。";
|
||||
"The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu." = "臨時記憶モジュールは文字の通り「臨時的」の記憶をし、そして「你/他/妳/她/祢/衪/它/牠/再/在」以外の「1漢字のユニグラム」を記憶しません。記録は六日間どんどん忘れてしまいます。入力アプリのメニューから全ての記録を消すことはできます。";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode." = "この転換はカセットモードだけに使える転換であり、転換結果はこの設定と入力モード次第である。";
|
||||
"This feature requires macOS 10.15 and above." = "この機能の稼働には macOS 10.15 以降のシステムが必要である。";
|
||||
"This only works with Tadokoro candidate window." = "これは田所候補陳列ウィンドウだけに効ける機能である。";
|
||||
"This will batch-replace specified candidates." = "指定された候補そのものを置き換える";
|
||||
"This will stop user override model from affecting how candidates get sorted." = "これで臨時記憶モジュールは候補陳列の順番に影響を与えなくなる。";
|
||||
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "これで libvChewing-Data の make install にて設置した公式辞書ファイルを優先的に用いる。";
|
||||
"Toggle alphanumerical mode with Left-Shift" = "左側の Shift キーで英数入力モードの切り替え";
|
||||
"Toggle alphanumerical mode with Right-Shift" = "右側の Shift キーで英数入力モードの切り替え";
|
||||
"Traditional Chinese" = "繁体中国語";
|
||||
"Trim unfinished readings / strokes on commit" = "送り出す緩衝列内容から未完成な音読み/筆組みを除く";
|
||||
"Type them into inline composition buffer" = "入力緩衝列にローマ字入力";
|
||||
"Typing Style:" = "入力習慣:";
|
||||
"Typing Settings:" = "入力設定:";
|
||||
"UI Language:" = "表示用言語:";
|
||||
"Universal Pinyin with Numeral Intonation" = "汎用弁音 (ローマ字+数字音調)";
|
||||
"Use .langIdentifier to handle UI fonts in candidate window" = "「.langIdentifier」を使って候補陳列ウィンドウのフォントを取り扱う";
|
||||
"Use ESC key to clear the entire input buffer" = "ESC キーで入力緩衝列を消す";
|
||||
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "IMK 候補陳列ウィンドウを起用(入力アプリは自動的に再起動)";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "IMK 候補陳列ウィンドウを起用";
|
||||
"Vertical" = "縦型陳列";
|
||||
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:これからの新機能テストのために作ったページですから、\nここで陳列されている諸機能は予想通り動けるだと思わないでください。";
|
||||
"Yale Pinyin with Numeral Intonation" = "イェール弁音 (ローマ字+数字音調)";
|
||||
|
|
|
@ -137,6 +137,17 @@
|
|||
"Hold ⇧ to choose associates." = "摁住⇧以选取联想词。";
|
||||
"Dachen Trad." = "大千传统";
|
||||
"Eten Trad." = "倚天传统";
|
||||
"User phrase folder path is not customizable in macOS 10.9 - 10.12." = "在 macOS 10.9 - 10.12 系统下无法自订使用者辞典目录。";
|
||||
"Please use “defaults write” terminal command to modify this String value:" = "请使用「defaults write」终端指令以修改 String 资料值:";
|
||||
"Please manually enter the identifier(s)." = "请手动键入唯一标帜(Bundle Identifier)。";
|
||||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "已知 macOS 10.9 有此故障:当一个输入法尝试存取自身的档案操作视窗的时候,不只输入法,而且连其接下来所尝试挂接的所有的客体应用,都会陷入无限僵死状态,只能用 SSH 连到这台电脑上执行「killall vChewing」才可以解除僵死。因为我们怀疑 macOS 10.10 至 10.12 也在受影响的范围内,所以威注音对这些版本的系统禁用了自身的档案操作视窗存取。";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/带尾部斜杠的资料夹路径/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/不带尾部斜杠的档案路径\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ 该功能因 IMK 选字窗自身缺陷而无法实作。\n请携 Radar 编号 #FB11300759 找 Apple Developer Relations 投诉。";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "也允许使用左侧的 Shift 键盘切换英数输入模式";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "彻底禁止使用 Shift 键切换英数模式";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "请利用滑鼠滚轮检视该页面。也请洽输入法选单内的热键指南。";
|
||||
"Typing Style:" = "输入风格:";
|
||||
|
||||
// The followings are the category names used in the Symbol menu.
|
||||
"catCommonSymbols" = "常用";
|
||||
|
@ -166,13 +177,16 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)空格键:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ 该功能因 IMK 选字窗自身缺陷而无法实作。\n请携 Radar 编号 #FB11300759 找 Apple Developer Relations 投诉。";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ 该功能因 IMK 选字窗自身缺陷而无法实作。\n请携 Radar 编号 #FB11300759 找 Apple Developer Relations 投诉。";
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 该功能当且仅当目前的排版字型不支援纵排标点动态显示转义的情况下才有用。一旦使用了,所有敲出去的标点都会被永久转换为静态纵排标点:哪怕当前编辑器的排版模式已经改成横排,这些已经输入的标点也都还是纵排标点字符。";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ 这可能会妨碍爬轨函式,使其无法给出正确的结果。";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ 这将重启威注音输入法。";
|
||||
"All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "不启用该选项的话,在组字区内的字根将会以原始键盘按键名称来显示。所有关于字根的定义,均请洽 CIN 磁带档案内的「%keyname」章节。";
|
||||
"Allow backspace-editing miscomposed readings" = "允许对无效的读音使用 BackSpace 编辑";
|
||||
"Allow boosting / excluding a candidate of single kanji" = "将可以就地升权/排除的候选字词的最短词长设为单个汉字";
|
||||
"Allow using Enter key to confirm associated candidate selection" = "允许使用 Enter 确认当前选中的联想词";
|
||||
"Alphanumerical Layout:" = "英数键盘布局:";
|
||||
"Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "亦使用「\\」或「¥」键启用汉音键盘符号模式";
|
||||
"Always drop the previous reading" = "始终剔除游标正后方的字音";
|
||||
"Always show tooltip texts horizontally" = "始终使用横排来显示工具提示视窗";
|
||||
"Always type intonations to the inline composition buffer" = "始终在内文组字区内键入声调符号";
|
||||
|
@ -222,6 +236,7 @@
|
|||
"Disable forced conversion for cassette outputs" = "对磁带模式禁用繁简转换";
|
||||
"Disassemble the previous reading, dropping its intonation" = "析构游标正后方的字音,且剔除其声调";
|
||||
"Disassembling process does not work with non-phonetic reading keys." = "析构行为仅针对组字器内「身为汉字读音」的读音索引单元有效。";
|
||||
"Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either." = "出于与资讯安全有关的考量,此处不提供任何与终端机脚本执行有关的功能。一款尚未经过 App Sandbox 沙箱处理的输入法,若提供了这种功能,便会带来系统层面上的资安缺陷:与该功能有关的 UserDefaults 可被任意篡改、以执行恶意脚本。官方发行的威注音有经过沙箱处理,且经过该处理的 App 没有权限执行任何外部终端机指令。";
|
||||
"Edit…" = "编辑…";
|
||||
"Emulating select-candidate-per-character mode" = "模拟 90 年代前期注音逐字选字输入风格";
|
||||
"Enable cassette mode, suppressing phonabet input" = "启用磁带模式,会停用注音输入";
|
||||
|
@ -234,11 +249,12 @@
|
|||
"Eten 26" = "倚天忘形排列 (26 键)";
|
||||
"Eten Traditional" = "倚天传统排列";
|
||||
"Experience" = "体验设定";
|
||||
"Experimental:" = "实验性:";
|
||||
"Fake Seigyou" = "伪精业排列";
|
||||
"Follow OS settings" = "依系统设定";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "打比方说,你敲了「章太炎」,你想将「太」改成「泰」。这个操作的作业索引范围是开闭区间 [1,2),会切到「章太炎」这个节点的所在索引范围 [0,3)。如果没有事前巩固处理的话,这个词会在你选字之后变成诸如「张泰言」这种你不想要的自动选字结果。当且仅当你启用了这个巩固功能的前提下,你选字之后的结果才会是「章泰炎」这种你想要的结果。";
|
||||
"for revolving candidates" = "轮替候选字";
|
||||
"for revolving pages" = "轮替页面";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "打比方说,你敲了「章太炎」,你想将「太」改成「泰」。这个操作的作业索引范围是开闭区间 [1,2),会切到「章太炎」这个节点的所在索引范围 [0,3)。如果没有事前巩固处理的话,这个词会在你选字之后变成诸如「张泰言」这种你不想要的自动选字结果。当且仅当你启用了这个巩固功能的前提下,你选字之后的结果才会是「章泰炎」这种你想要的结果。";
|
||||
"General" = "通用设定";
|
||||
"Hanyu Pinyin with Numeral Intonation" = "汉语拼音+数字标调";
|
||||
"Harden vertical punctuations during vertical typing (not recommended)" = "在纵排书写时,强制转换标点为纵排形式(不推荐)";
|
||||
|
@ -246,9 +262,12 @@
|
|||
"Hsu" = "许氏国音自然排列";
|
||||
"Hualuo Pinyin with Numeral Intonation" = "华罗拼音+数字标调";
|
||||
"IBM" = "IBM 排列";
|
||||
"If disabled, this will insert space instead." = "取消勾选的话,该按键会插入空格。";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "若取消勾选,则 ESC 键会先尝试清除未组成的读音/字根;\n如果没有未组成的读音/字根的话,则会递交当前组字区的内容。";
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases." = "IMK 选字窗依赖于 Apple 的私有 API,而且是借由桥接档案头强制曝露的方法使用的。目前,该功能仅在 macOS 10.14 Mojave 至 macOS 13 Ventura 系统内有测试过可用性。至于在未来的 macOS 发行版当中是否可用,则需要另行测试、才能下结论。";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "将游标置于词语前方 // macOS 内建注音风格";
|
||||
"Intonation Key:" = "声调键:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "该功能只需要对借由 macOS 内建的输入法框架传来的 NSEvent 做上下文分析,自然没有「向使用者寻求系统全局键盘事件监听权限」之必要。您可自行审视敝输入法的原始程式码仓库、或对敝输入法逆向工程,以自行证实此处所言之真假。";
|
||||
"Japanese" = "和语";
|
||||
"Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English." = "纵排输入的情况下,工具提示内的按键名称会以符号显示。";
|
||||
"Keyboard Shortcuts:" = "键盘热键:";
|
||||
|
@ -260,12 +279,13 @@
|
|||
"Only enforce conversion in Traditional Chinese mode" = "仅在繁体模式转换至繁体";
|
||||
"Only load factory language models if needed" = "按需载入简繁体模式的原厂辞典资料";
|
||||
"Only override the intonation of the previous reading if different" = "仅在键入的声调与游标正后方的字音不同时,尝试覆写";
|
||||
"Otherwise, only the candidate keys are allowed to confirm associates." = "不勾选这一项的话,就只能用选字键来选取联想词。";
|
||||
"Output Settings:" = "输出设定:";
|
||||
"Override the previous reading's intonation with candidate-reset" = "尝试对游标正后方的字音覆写声调,且重设其选字状态";
|
||||
"Path invalid or file access error." = "档案存取失败,或者路径不合规。";
|
||||
"Phonetic Parser:" = "注音排列:";
|
||||
"Please reconfigure the cassette path to a valid one before enabling this mode." = "在启用该模式之前,请事先正确设定磁带档案路径。";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "请利用滑鼠滚轮检视该页面。也请洽输入法选单内的热键指南。";
|
||||
"Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu." = "请利用滑鼠滚轮检视页面。也请洽输入法选单内的热键指南。";
|
||||
"Push the cursor in front of the phrase after selection" = "在选字后将游标置于该字词的前方";
|
||||
"Quick Setup:" = "直接设定:";
|
||||
"Read external factory dictionary plists if possible" = "尽量使用外置原厂辞典 plist 档案";
|
||||
|
@ -282,24 +302,29 @@
|
|||
"Simplified Chinese" = "简体中文";
|
||||
"Space to +revolve candidates, Shift+Space to +revolve pages" = "Shift+空格键 换下一页,空格键 换选下一个候选字";
|
||||
"Space to +revolve pages, Shift+Space to +revolve candidates" = "空格键 换下一页,Shift+空格键 换选下一个候选字";
|
||||
"Space:" = "空格键:";
|
||||
"Specify the behavior of intonation key when syllable composer is empty." = "指定声调键(在注拼槽为「空」状态时)的行为。";
|
||||
"Starlight" = "星光排列";
|
||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "廉耻模式 // 取消勾选的话,敲错字时会有异音";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode." = "该转换仅对磁带模式有影响,会将键入的内容根据该选项与当前的简繁体模式来转换。";
|
||||
"The lookup results are supplied by the CIN cassette module." = "反查结果取自 CIN 磁带模组。";
|
||||
"The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu." = "半衰记忆模组仅持有临时记忆之功能,且不会记忆以这几个汉字以外的汉字组成的(单个汉字的)单元图:「你/他/妳/她/祢/衪/它/牠/再/在」。每一笔记录都会在六天之内逐渐变得彻底失效。您可以借由输入法选单清除全部的记忆记录。";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode." = "该转换仅对磁带模式有影响,会将键入的内容根据该选项与当前的简繁体模式来转换。";
|
||||
"This feature requires macOS 10.15 and above." = "该功能要求系统版本至少 macOS 10.15。";
|
||||
"This only works with Tadokoro candidate window." = "该方法仅对田所选字窗起作用。";
|
||||
"This will batch-replace specified candidates." = "这将会对指定的候选字词进行整词取代。";
|
||||
"This will stop user override model from affecting how candidates get sorted." = "这将阻止半衰记忆模组影响候选字词的陈列顺序。";
|
||||
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "这将会优先使用由 libvChewing-Data 的 make install 部署的原厂辞典档案。";
|
||||
"Toggle alphanumerical mode with Left-Shift" = "允许使用左侧的 Shift 键盘切换英数输入模式";
|
||||
"Toggle alphanumerical mode with Right-Shift" = "允许使用右侧的 Shift 键盘切换英数输入模式";
|
||||
"Traditional Chinese" = "繁体中文";
|
||||
"Trim unfinished readings / strokes on commit" = "在递交时清理未完成拼写的读音或字根";
|
||||
"Type them into inline composition buffer" = "直接键入内文组字区";
|
||||
"Typing Style:" = "输入风格:";
|
||||
"Typing Settings:" = "敲字设定:";
|
||||
"UI Language:" = "介面语言:";
|
||||
"Universal Pinyin with Numeral Intonation" = "通用拼音+数字标调";
|
||||
"Use .langIdentifier to handle UI fonts in candidate window" = "使用 .langIdentifier 来管理选字窗的预设介面字型";
|
||||
"Use ESC key to clear the entire input buffer" = "敲 ESC 键以清空整个组字缓冲区";
|
||||
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "启用与 macOS 内建输入法相同的 IMK 选字窗(会自动重启输入法)";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "启用与 macOS 内建输入法相同的 IMK 选字窗";
|
||||
"Vertical" = "纵向布局";
|
||||
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:该页面仅作未来功能测试所用。\n在此列出的功能并非处于完全可用之状态。";
|
||||
"Yale Pinyin with Numeral Intonation" = "耶鲁拼音+数字标调";
|
||||
|
|
|
@ -137,6 +137,17 @@
|
|||
"Hold ⇧ to choose associates." = "摁住⇧以選取聯想詞。";
|
||||
"Dachen Trad." = "大千傳統";
|
||||
"Eten Trad." = "倚天傳統";
|
||||
"User phrase folder path is not customizable in macOS 10.9 - 10.12." = "在 macOS 10.9 - 10.12 系統下無法自訂使用者辭典目錄。";
|
||||
"Please use “defaults write” terminal command to modify this String value:" = "請使用「defaults write」終端指令以修改 String 資料值:";
|
||||
"Please manually enter the identifier(s)." = "請手動鍵入唯一標幟(Bundle Identifier)。";
|
||||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "已知 macOS 10.9 有此故障:當一個輸入法嘗試存取自身的檔案操作視窗的時候,不只輸入法,而且連其接下來所嘗試掛接的所有的客體應用,都會陷入無限僵死狀態,只能用 SSH 連到這台電腦上執行「killall vChewing」才可以解除僵死。因為我們懷疑 macOS 10.10 至 10.12 也在受影響的範圍內,所以威注音對這些版本的系統禁用了自身的檔案操作視窗存取。";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/帶尾部斜槓的資料夾路徑/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/不帶尾部斜槓的檔案路徑\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ 該功能因 IMK 選字窗自身缺陷而無法實作。\n請攜 Radar 編號 #FB11300759 找 Apple Developer Relations 投訴。";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "也允許使用左側的 Shift 鍵盤切換英數輸入模式";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "徹底禁止使用 Shift 鍵切換英數模式";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "請利用滑鼠滾輪檢視該頁面。也請洽輸入法選單內的熱鍵指南。";
|
||||
"Typing Style:" = "輸入風格:";
|
||||
|
||||
// The followings are the category names used in the Symbol menu.
|
||||
"catCommonSymbols" = "常用";
|
||||
|
@ -166,13 +177,16 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)空格鍵:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ 該功能因 IMK 選字窗自身缺陷而無法實作。\n請攜 Radar 編號 #FB11300759 找 Apple Developer Relations 投訴。";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ 該功能因 IMK 選字窗自身缺陷而無法實作。\n請攜 Radar 編號 #FB11300759 找 Apple Developer Relations 投訴。";
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 該功能當且僅當目前的排版字型不支援縱排標點動態顯示轉義的情況下才有用。一旦使用了,所有敲出去的標點都會被永久轉換為靜態縱排標點:哪怕當前編輯器的排版模式已經改成橫排,這些已經輸入的標點也都還是縱排標點字符。";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ 這可能會妨礙爬軌函式,使其無法給出正確的結果。";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ 這將重啟威注音輸入法。";
|
||||
"All strokes in the composition buffer will be shown as ASCII keyboard characters unless this option is enabled. Stroke is definable in the “%keyname” section of the CIN file." = "不啟用該選項的話,在組字區內的字根將會以原始鍵盤按鍵名稱來顯示。所有關於字根的定義,均請洽 CIN 磁帶檔案內的「%keyname」章節。";
|
||||
"Allow backspace-editing miscomposed readings" = "允許對無效的讀音使用 BackSpace 編輯";
|
||||
"Allow boosting / excluding a candidate of single kanji" = "將可以就地升權/排除的候選字詞的最短詞長設為單個漢字";
|
||||
"Allow using Enter key to confirm associated candidate selection" = "允許使用 Enter 確認當前選中的聯想詞";
|
||||
"Alphanumerical Layout:" = "英數鍵盤佈局:";
|
||||
"Also use “\\” or “¥” key for Hanin Keyboard Symbol Input" = "亦使用「\\」或「¥」鍵啟用漢音鍵盤符號模式";
|
||||
"Always drop the previous reading" = "始終剔除游標正後方的字音";
|
||||
"Always show tooltip texts horizontally" = "始終使用橫排來顯示工具提示視窗";
|
||||
"Always type intonations to the inline composition buffer" = "始終在內文組字區內鍵入聲調符號";
|
||||
|
@ -222,6 +236,7 @@
|
|||
"Disable forced conversion for cassette outputs" = "對磁帶模式禁用繁簡轉換";
|
||||
"Disassemble the previous reading, dropping its intonation" = "析構游標正後方的字音,且剔除其聲調";
|
||||
"Disassembling process does not work with non-phonetic reading keys." = "析構行為僅針對組字器內「身為漢字讀音」的讀音索引單元有效。";
|
||||
"Due to security concerns, we don't consider implementing anything related to shell script execution here. An input method doing this without implementing App Sandbox will definitely have system-wide vulnerabilities, considering that its related UserDefaults are easily tamperable to execute malicious shell scripts. Official releases of vChewing is Sandboxed, and a Sandboxed app is not allowed to execute an external shell command, either." = "出於與資訊安全有關的考量,此處不提供任何與終端機腳本執行有關的功能。一款尚未經過 App Sandbox 沙箱處理的輸入法,若提供了這種功能,便會帶來系統層面上的資安缺陷:與該功能有關的 UserDefaults 可被任意篡改、以執行惡意腳本。官方發行的威注音有經過沙箱處理,且經過該處理的 App 沒有權限執行任何外部終端機指令。";
|
||||
"Edit…" = "編輯…";
|
||||
"Emulating select-candidate-per-character mode" = "模擬 90 年代前期注音逐字選字輸入風格";
|
||||
"Enable cassette mode, suppressing phonabet input" = "啟用磁帶模式,會停用注音輸入";
|
||||
|
@ -234,11 +249,12 @@
|
|||
"Eten 26" = "倚天忘形排列 (26 鍵)";
|
||||
"Eten Traditional" = "倚天傳統排列";
|
||||
"Experience" = "體驗設定";
|
||||
"Experimental:" = "實驗性:";
|
||||
"Fake Seigyou" = "偽精業排列";
|
||||
"Follow OS settings" = "依系統設定";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "打比方說,你敲了「章太炎」,你想將「太」改成「泰」。這個操作的作業索引範圍是開閉區間 [1,2),會切到「章太炎」這個節點的所在索引範圍 [0,3)。如果沒有事前鞏固處理的話,這個詞會在你選字之後變成諸如「張泰言」這種你不想要的自動選字結果。當且僅當你啟用了這個鞏固功能的前提下,你選字之後的結果才會是「章泰炎」這種你想要的結果。";
|
||||
"for revolving candidates" = "輪替候選字";
|
||||
"for revolving pages" = "輪替頁面";
|
||||
"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "打比方說,你敲了「章太炎」,你想將「太」改成「泰」。這個操作的作業索引範圍是開閉區間 [1,2),會切到「章太炎」這個節點的所在索引範圍 [0,3)。如果沒有事前鞏固處理的話,這個詞會在你選字之後變成諸如「張泰言」這種你不想要的自動選字結果。當且僅當你啟用了這個鞏固功能的前提下,你選字之後的結果才會是「章泰炎」這種你想要的結果。";
|
||||
"General" = "通用設定";
|
||||
"Hanyu Pinyin with Numeral Intonation" = "漢語拼音+數字標調";
|
||||
"Harden vertical punctuations during vertical typing (not recommended)" = "在縱排書寫時,強制轉換標點為縱排形式(不推薦)";
|
||||
|
@ -246,9 +262,12 @@
|
|||
"Hsu" = "許氏國音自然排列";
|
||||
"Hualuo Pinyin with Numeral Intonation" = "華羅拼音+數字標調";
|
||||
"IBM" = "IBM 排列";
|
||||
"If disabled, this will insert space instead." = "取消勾選的話,該按鍵會插入空格。";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "若取消勾選,則 ESC 鍵會先嘗試清除未組成的讀音/字根;\n如果沒有未組成的讀音/字根的話,則會遞交當前組字區的內容。";
|
||||
"IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases." = "IMK 選字窗依賴於 Apple 的私有 API,而且是藉由橋接檔案頭強制曝露的方法使用的。目前,該功能僅在 macOS 10.14 Mojave 至 macOS 13 Ventura 系統內有測試過可用性。至於在未來的 macOS 發行版當中是否可用,則需要另行測試、才能下結論。";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "將游標置於詞語前方 // macOS 內建注音風格";
|
||||
"Intonation Key:" = "聲調鍵:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "該功能只需要對藉由 macOS 內建的輸入法框架傳來的 NSEvent 做上下文分析,自然沒有「向使用者尋求系統全局鍵盤事件監聽權限」之必要。您可自行審視敝輸入法的原始程式碼倉庫、或對敝輸入法逆向工程,以自行證實此處所言之真假。";
|
||||
"Japanese" = "和語";
|
||||
"Key names in tooltip will be shown as symbols when the tooltip is vertical. However, this option will be ignored since tooltip will always be horizontal if the UI language is English." = "縱排輸入的情況下,工具提示內的按鍵名稱會以符號顯示。";
|
||||
"Keyboard Shortcuts:" = "鍵盤熱鍵:";
|
||||
|
@ -260,12 +279,13 @@
|
|||
"Only enforce conversion in Traditional Chinese mode" = "僅在繁體模式轉換至繁體";
|
||||
"Only load factory language models if needed" = "按需載入簡繁體模式的原廠辭典資料";
|
||||
"Only override the intonation of the previous reading if different" = "僅在鍵入的聲調與游標正後方的字音不同時,嘗試覆寫";
|
||||
"Otherwise, only the candidate keys are allowed to confirm associates." = "不勾選這一項的話,就只能用選字鍵來選取聯想詞。";
|
||||
"Output Settings:" = "輸出設定:";
|
||||
"Override the previous reading's intonation with candidate-reset" = "嘗試對游標正後方的字音覆寫聲調,且重設其選字狀態";
|
||||
"Path invalid or file access error." = "檔案存取失敗,或者路徑不合規。";
|
||||
"Phonetic Parser:" = "注音排列:";
|
||||
"Please reconfigure the cassette path to a valid one before enabling this mode." = "在啟用該模式之前,請事先正確設定磁帶檔案路徑。";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "請利用滑鼠滾輪檢視該頁面。也請洽輸入法選單內的熱鍵指南。";
|
||||
"Please use mouse wheel to scroll each page if needed. The CheatSheet is available in the IME menu." = "請利用滑鼠滾輪檢視頁面。也請洽輸入法選單內的熱鍵指南。";
|
||||
"Push the cursor in front of the phrase after selection" = "在選字後將游標置於該字詞的前方";
|
||||
"Quick Setup:" = "直接設定:";
|
||||
"Read external factory dictionary plists if possible" = "盡量使用外置原廠辭典 plist 檔案";
|
||||
|
@ -282,24 +302,29 @@
|
|||
"Simplified Chinese" = "簡體中文";
|
||||
"Space to +revolve candidates, Shift+Space to +revolve pages" = "Shift+空格鍵 換下一頁,空格鍵 換選下一個候選字";
|
||||
"Space to +revolve pages, Shift+Space to +revolve candidates" = "空格鍵 換下一頁,Shift+空格鍵 換選下一個候選字";
|
||||
"Space:" = "空格鍵:";
|
||||
"Specify the behavior of intonation key when syllable composer is empty." = "指定聲調鍵(在注拼槽為「空」狀態時)的行為。";
|
||||
"Starlight" = "星光排列";
|
||||
"Stop farting (when typed phonetic combination is invalid, etc.)" = "廉恥模式 // 取消勾選的話,敲錯字時會有異音";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode." = "該轉換僅對磁帶模式有影響,會將鍵入的內容根據該選項與當前的簡繁體模式來轉換。";
|
||||
"The lookup results are supplied by the CIN cassette module." = "反查結果取自 CIN 磁帶模組。";
|
||||
"The user override model only possesses memories temporarily. It won't memorize those unigrams consisting of only one Chinese character, except “你/他/妳/她/祢/衪/它/牠/再/在”. Each memory record gradually becomes ineffective within approximately less than 6 days. You can erase all memory records through the input method menu." = "半衰記憶模組僅持有臨時記憶之功能,且不會記憶以這幾個漢字以外的漢字組成的(單個漢字的)單元圖:「你/他/妳/她/祢/衪/它/牠/再/在」。每一筆記錄都會在六天之內逐漸變得徹底失效。您可以藉由輸入法選單清除全部的記憶記錄。";
|
||||
"This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode." = "該轉換僅對磁帶模式有影響,會將鍵入的內容根據該選項與當前的簡繁體模式來轉換。";
|
||||
"This feature requires macOS 10.15 and above." = "該功能要求系統版本至少 macOS 10.15。";
|
||||
"This only works with Tadokoro candidate window." = "該方法僅對田所選字窗起作用。";
|
||||
"This will batch-replace specified candidates." = "這將會對指定的候選字詞進行整詞取代。";
|
||||
"This will stop user override model from affecting how candidates get sorted." = "這將阻止半衰記憶模組影響候選字詞的陳列順序。";
|
||||
"This will use the plist files deployed by the “make install” command from libvChewing-Data if possible." = "這將會優先使用由 libvChewing-Data 的 make install 部署的原廠辭典檔案。";
|
||||
"Toggle alphanumerical mode with Left-Shift" = "允許使用左側的 Shift 鍵盤切換英數輸入模式";
|
||||
"Toggle alphanumerical mode with Right-Shift" = "允許使用右側的 Shift 鍵盤切換英數輸入模式";
|
||||
"Traditional Chinese" = "繁體中文";
|
||||
"Trim unfinished readings / strokes on commit" = "在遞交時清理未完成拼寫的讀音或字根";
|
||||
"Type them into inline composition buffer" = "直接鍵入內文組字區";
|
||||
"Typing Style:" = "輸入風格:";
|
||||
"Typing Settings:" = "敲字設定:";
|
||||
"UI Language:" = "介面語言:";
|
||||
"Universal Pinyin with Numeral Intonation" = "通用拼音+數字標調";
|
||||
"Use .langIdentifier to handle UI fonts in candidate window" = "使用 .langIdentifier 來管理選字窗的預設介面字型";
|
||||
"Use ESC key to clear the entire input buffer" = "敲 ESC 鍵以清空整個組字緩衝區";
|
||||
"Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" = "啟用與 macOS 內建輸入法相同的 IMK 選字窗(會自動重啟輸入法)";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "啟用與 macOS 內建輸入法相同的 IMK 選字窗";
|
||||
"Vertical" = "縱向佈局";
|
||||
"Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:該頁面僅作未來功能測試所用。\n在此列出的功能並非處於完全可用之狀態。";
|
||||
"Yale Pinyin with Numeral Intonation" = "耶魯拼音+數字標調";
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
|
@ -1292,7 +1291,7 @@
|
|||
<rect key="frame" x="-2" y="0.0" width="409" height="42"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" id="j8q-IY-UF1" userLabel="lblCassetteChineseConversionDescription">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<string key="title">This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode.</string>
|
||||
<string key="title">This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode.</string>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
|
@ -1784,7 +1783,7 @@
|
|||
<rect key="frame" x="0.0" y="80" width="538" height="360"/>
|
||||
<clipView key="contentView" drawsBackground="NO" id="x8s-wo-bxi">
|
||||
<rect key="frame" x="0.0" y="0.0" width="538" height="360"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textView wantsLayer="YES" importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsUndo="YES" smartInsertDelete="YES" id="kSG-dz-P2N">
|
||||
<rect key="frame" x="0.0" y="0.0" width="538" height="360"/>
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
"Iai-0X-nxi.title" = "Choose your desired cassette file path. Will be omitted if invalid.";
|
||||
"iRg-wx-Nx2.title" = "Change UI font size of candidate window for a better visual clarity.";
|
||||
"iWy-Nw-QKB.title" = "Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter";
|
||||
"j8q-IY-UF1.title" = "This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance to this setting and your current input mode.";
|
||||
"j8q-IY-UF1.title" = "This conversion only affects the cassette module, converting typed contents to either Simplified Chinese or Traditional Chinese in accordance with this setting and your current input mode.";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
|
||||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
|
@ -107,7 +107,7 @@
|
|||
"s7u-Fm-dVg.title" = "Revolving Pages";
|
||||
"shc-Nu-UsM.title" = "Show notifications when toggling Caps Lock";
|
||||
"SzF-FL-sVO.title" = "Show translated strokes in composition buffer";
|
||||
"tglDevZoneIMKCandidate.title" = "Use IMK Candidate Window instead of Tadokoro (will reboot the IME)";
|
||||
"tglDevZoneIMKCandidate.title" = "Use IMK Candidate Window instead of Tadokoro";
|
||||
"tglTrimUnfinishedReadingsOnCommit.title" = "Trim unfinished readings / strokes on commit";
|
||||
"TXr-FF-ehw.title" = "Traditional Chinese";
|
||||
"ueU-Rz-a1C.title" = "Choose the behavior of (Shift+)Tab key in the candidate window.";
|
||||
|
|
|
@ -55,7 +55,6 @@
|
|||
5BA9FD0F27FEDB6B002DE248 /* VwrPrefPaneGeneral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0A27FEDB6B002DE248 /* VwrPrefPaneGeneral.swift */; };
|
||||
5BA9FD1027FEDB6B002DE248 /* VwrPrefPaneKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0B27FEDB6B002DE248 /* VwrPrefPaneKeyboard.swift */; };
|
||||
5BA9FD1127FEDB6B002DE248 /* CtlPrefUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0C27FEDB6B002DE248 /* CtlPrefUI.swift */; };
|
||||
5BA9FD1227FEDB6B002DE248 /* VwrPrefPaneExperience.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0D27FEDB6B002DE248 /* VwrPrefPaneExperience.swift */; };
|
||||
5BA9FD1327FEDB6B002DE248 /* VwrPrefPaneDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9FD0E27FEDB6B002DE248 /* VwrPrefPaneDictionary.swift */; };
|
||||
5BAD0CD527D701F6003D127F /* vChewingKeyLayout.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5B30F11227BA568800484E24 /* vChewingKeyLayout.bundle */; };
|
||||
5BAEFAD028012565001F42C9 /* LMMgr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BAEFACF28012565001F42C9 /* LMMgr.swift */; };
|
||||
|
@ -101,6 +100,9 @@
|
|||
5BEDB723283B4C250078EB25 /* data-cht.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB720283B4AEA0078EB25 /* data-cht.plist */; };
|
||||
5BEDB724283B4C250078EB25 /* data-symbols.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71E283B4AEA0078EB25 /* data-symbols.plist */; };
|
||||
5BEDB725283B4C250078EB25 /* data-chs.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5BEDB71C283B4AEA0078EB25 /* data-chs.plist */; };
|
||||
5BF018F9299923BD00248CDD /* VwrPrefPaneBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF018F8299923BD00248CDD /* VwrPrefPaneBehavior.swift */; };
|
||||
5BF018FB299923C000248CDD /* VwrPrefPaneOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF018FA299923C000248CDD /* VwrPrefPaneOutput.swift */; };
|
||||
5BF018FD299923C200248CDD /* VwrPrefPaneCandidates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF018FC299923C100248CDD /* VwrPrefPaneCandidates.swift */; };
|
||||
5BF56F9828C39A2700DD6839 /* IMEState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF56F9728C39A2700DD6839 /* IMEState.swift */; };
|
||||
5BF56F9A28C39D1800DD6839 /* IMEStateData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF56F9928C39D1800DD6839 /* IMEStateData.swift */; };
|
||||
5BF9DA2728840E6200DBD48E /* template-usersymbolphrases.txt in Resources */ = {isa = PBXBuildFile; fileRef = 5BF9DA2228840E6200DBD48E /* template-usersymbolphrases.txt */; };
|
||||
|
@ -249,7 +251,6 @@
|
|||
5BA9FD0A27FEDB6B002DE248 /* VwrPrefPaneGeneral.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = VwrPrefPaneGeneral.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||
5BA9FD0B27FEDB6B002DE248 /* VwrPrefPaneKeyboard.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = VwrPrefPaneKeyboard.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||
5BA9FD0C27FEDB6B002DE248 /* CtlPrefUI.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = CtlPrefUI.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||
5BA9FD0D27FEDB6B002DE248 /* VwrPrefPaneExperience.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = VwrPrefPaneExperience.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||
5BA9FD0E27FEDB6B002DE248 /* VwrPrefPaneDictionary.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = VwrPrefPaneDictionary.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||
5BAEFACF28012565001F42C9 /* LMMgr.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = LMMgr.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
|
||||
5BB1D7F32999027200EA8D2C /* PrefUITabs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefUITabs.swift; sourceTree = "<group>"; };
|
||||
|
@ -298,6 +299,9 @@
|
|||
5BEDB71E283B4AEA0078EB25 /* data-symbols.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "data-symbols.plist"; path = "Data/data-symbols.plist"; sourceTree = "<group>"; };
|
||||
5BEDB71F283B4AEA0078EB25 /* data-zhuyinwen.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "data-zhuyinwen.plist"; path = "Data/data-zhuyinwen.plist"; sourceTree = "<group>"; };
|
||||
5BEDB720283B4AEA0078EB25 /* data-cht.plist */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = "data-cht.plist"; path = "Data/data-cht.plist"; sourceTree = "<group>"; };
|
||||
5BF018F8299923BD00248CDD /* VwrPrefPaneBehavior.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VwrPrefPaneBehavior.swift; sourceTree = "<group>"; };
|
||||
5BF018FA299923C000248CDD /* VwrPrefPaneOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VwrPrefPaneOutput.swift; sourceTree = "<group>"; };
|
||||
5BF018FC299923C100248CDD /* VwrPrefPaneCandidates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VwrPrefPaneCandidates.swift; sourceTree = "<group>"; };
|
||||
5BF255CD28B2694E003ECB60 /* vChewing-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "vChewing-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
5BF4A44628E5820C002AF9C5 /* vChewingInstaller.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vChewingInstaller.entitlements; sourceTree = "<group>"; };
|
||||
5BF56F9728C39A2700DD6839 /* IMEState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMEState.swift; sourceTree = "<group>"; };
|
||||
|
@ -527,13 +531,15 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
5BA9FD0C27FEDB6B002DE248 /* CtlPrefUI.swift */,
|
||||
5B2E009328FD1E8100E78D6E /* VwrPrefPaneCassette.swift */,
|
||||
5B78EE0C28A562B4009456C1 /* VwrPrefPaneDevZone.swift */,
|
||||
5BA9FD0E27FEDB6B002DE248 /* VwrPrefPaneDictionary.swift */,
|
||||
5BA9FD0D27FEDB6B002DE248 /* VwrPrefPaneExperience.swift */,
|
||||
5BA9FD0A27FEDB6B002DE248 /* VwrPrefPaneGeneral.swift */,
|
||||
5BA9FD0B27FEDB6B002DE248 /* VwrPrefPaneKeyboard.swift */,
|
||||
5BF018FC299923C100248CDD /* VwrPrefPaneCandidates.swift */,
|
||||
5BF018F8299923BD00248CDD /* VwrPrefPaneBehavior.swift */,
|
||||
5BF018FA299923C000248CDD /* VwrPrefPaneOutput.swift */,
|
||||
5BA9FD0E27FEDB6B002DE248 /* VwrPrefPaneDictionary.swift */,
|
||||
5B69938B293B811F0057CB8E /* VwrPrefPanePhrases.swift */,
|
||||
5B2E009328FD1E8100E78D6E /* VwrPrefPaneCassette.swift */,
|
||||
5BA9FD0B27FEDB6B002DE248 /* VwrPrefPaneKeyboard.swift */,
|
||||
5B78EE0C28A562B4009456C1 /* VwrPrefPaneDevZone.swift */,
|
||||
);
|
||||
path = PrefUI;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1085,11 +1091,11 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5BF018FD299923C200248CDD /* VwrPrefPaneCandidates.swift in Sources */,
|
||||
5B963CA828D5DB1400DCEE88 /* PrefMgr_Core.swift in Sources */,
|
||||
D427F76C278CA2B0004A2160 /* AppDelegate.swift in Sources */,
|
||||
5B7F225D2808501000DDD3CB /* InputHandler_HandleInput.swift in Sources */,
|
||||
5B660A8628F64A8800E5E4F6 /* SymbolMenuDefaultData.swift in Sources */,
|
||||
5BA9FD1227FEDB6B002DE248 /* VwrPrefPaneExperience.swift in Sources */,
|
||||
5BF56F9828C39A2700DD6839 /* IMEState.swift in Sources */,
|
||||
5B62A33D27AE7CC100A19448 /* CtlAboutWindow.swift in Sources */,
|
||||
D47B92C027972AD100458394 /* main.swift in Sources */,
|
||||
|
@ -1117,11 +1123,13 @@
|
|||
5BA9FD1127FEDB6B002DE248 /* CtlPrefUI.swift in Sources */,
|
||||
5B8457A12871ADBE00C93B01 /* ChineseConverterBridge.swift in Sources */,
|
||||
5BA9FD1327FEDB6B002DE248 /* VwrPrefPaneDictionary.swift in Sources */,
|
||||
5BF018F9299923BD00248CDD /* VwrPrefPaneBehavior.swift in Sources */,
|
||||
5BFDF011289635C100417BBC /* IMKCandidatesImpl.swift in Sources */,
|
||||
5BB802DA27FABA8300CF1C19 /* SessionCtl_Menu.swift in Sources */,
|
||||
5B2E009428FD1E8100E78D6E /* VwrPrefPaneCassette.swift in Sources */,
|
||||
5BE377A0288FED8D0037365B /* InputHandler_HandleComposition.swift in Sources */,
|
||||
5B00FA0C28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift in Sources */,
|
||||
5BF018FB299923C000248CDD /* VwrPrefPaneOutput.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue