diff --git a/Source/Data b/Source/Data index 2d0c040a..8199254d 160000 --- a/Source/Data +++ b/Source/Data @@ -1 +1 @@ -Subproject commit 2d0c040a95621f382a13664667fa5d1c43d172ee +Subproject commit 8199254d3abbf63e3b7535bbc975f8519a2d6834 diff --git a/Source/Modules/ControllerModules/InputState.swift b/Source/Modules/ControllerModules/InputState.swift index 02a58250..25a9de19 100644 --- a/Source/Modules/ControllerModules/InputState.swift +++ b/Source/Modules/ControllerModules/InputState.swift @@ -237,7 +237,7 @@ class InputState: NSObject { ) return String( format: NSLocalizedString( - "\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude.", comment: "" + "\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude.", comment: "" ), text ) } @@ -246,7 +246,7 @@ class InputState: NSObject { ) TooltipController.textColor = NSColor.white return String( - format: NSLocalizedString("\"%@\" selected. ↩ to add user phrase.", comment: ""), + format: NSLocalizedString("\"%@\" selected. ENTER to add user phrase.", comment: ""), text ) } diff --git a/Source/Modules/ControllerModules/KeyHandler.h b/Source/Modules/ControllerModules/KeyHandler.h index 1c40ce61..020bad09 100644 --- a/Source/Modules/ControllerModules/KeyHandler.h +++ b/Source/Modules/ControllerModules/KeyHandler.h @@ -40,8 +40,8 @@ struct BufferStatePackage { NSString *composedText; NSInteger cursorIndex; - NSString *resultOfBefore; - NSString *resultOfAfter; + NSString *resultOfRear; + NSString *resultOfFront; }; @class KeyHandler; @@ -74,12 +74,13 @@ struct BufferStatePackage - (BOOL)isPrintable:(UniChar)charCode; - (NSArray *)buildAssociatePhraseArrayWithKey:(NSString *)key; - (NSArray *)getCandidatesArray; +- (NSInteger)getKeyLengthAtIndexZero; - (NSInteger)getBuilderCursorIndex; - (NSInteger)getBuilderLength; - (NSInteger)getPackagedCursorIndex; - (NSString *)getComposedText; - (NSString *)getCompositionFromPhoneticReadingBuffer; -- (NSString *)getStrLocationResult:(BOOL)isAfter NS_SWIFT_NAME(getStrLocationResult(isAfter:)); +- (NSString *)getStrLocationResult:(BOOL)isFront NS_SWIFT_NAME(getStrLocationResult(isFront:)); - (NSString *)getSyllableCompositionFromPhoneticReadingBuffer; - (void)clearPhoneticReadingBuffer; - (void)combinePhoneticReadingBufferKey:(UniChar)charCode; diff --git a/Source/Modules/ControllerModules/KeyHandler.mm b/Source/Modules/ControllerModules/KeyHandler.mm index 88d8a974..256d4168 100644 --- a/Source/Modules/ControllerModules/KeyHandler.mm +++ b/Source/Modules/ControllerModules/KeyHandler.mm @@ -46,8 +46,8 @@ static const double kEpsilon = 0.000001; NSString *packagedComposedText; NSInteger packagedCursorIndex; -NSString *packagedResultOfBefore; -NSString *packagedResultOfAfter; +NSString *packagedResultOfRear; +NSString *packagedResultOfFront; // NON-SWIFTIFIABLE static double FindHighestScore(const std::vector &nodes, double epsilon) @@ -233,8 +233,8 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; size_t readingCursorIndex = 0; size_t builderCursorIndex = [self getBuilderCursorIndex]; - NSString *resultOfBefore = @""; - NSString *resultOfAfter = @""; + NSString *resultOfRear = @""; + NSString *resultOfFront = @""; for (std::vector::iterator wi = _walkedNodes.begin(), we = _walkedNodes.end(); wi != we; ++wi) @@ -282,19 +282,19 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; } if (builderCursorIndex == 0) { - resultOfBefore = + resultOfFront = [NSString stringWithUTF8String:_builder->readings()[builderCursorIndex].c_str()]; } else if (builderCursorIndex >= _builder->readings().size()) { - resultOfAfter = [NSString + resultOfRear = [NSString stringWithUTF8String:_builder->readings()[_builder->readings().size() - 1].c_str()]; } else { - resultOfBefore = + resultOfFront = [NSString stringWithUTF8String:_builder->readings()[builderCursorIndex].c_str()]; - resultOfAfter = + resultOfRear = [NSString stringWithUTF8String:_builder->readings()[builderCursorIndex - 1].c_str()]; } } @@ -314,17 +314,17 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; packagedComposedText = composedText; packagedCursorIndex = cursorIndex; - packagedResultOfBefore = resultOfBefore; - packagedResultOfAfter = resultOfAfter; + packagedResultOfRear = resultOfRear; + packagedResultOfFront = resultOfFront; } // NON-SWIFTIFIABLE DUE TO VARIABLE AVAILABLE ACCESSIBILITY RANGE. -- (NSString *)getStrLocationResult:(BOOL)isAfter +- (NSString *)getStrLocationResult:(BOOL)isFront { - if (isAfter) - return packagedResultOfAfter; + if (isFront) + return packagedResultOfFront; else - return packagedResultOfBefore; + return packagedResultOfRear; } // NON-SWIFTIFIABLE DUE TO VARIABLE AVAILABLE ACCESSIBILITY RANGE. @@ -555,8 +555,6 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; - (void)dealWithOverrideModelSuggestions { - // 讓 grid 知道目前的游標候選字判定是前置還是後置 - _builder->grid().setHaninInputEnabled(!mgrPrefs.selectPhraseAfterCursorAsCandidate); // 這一整段都太 C++ 且只出現一次,就整個端過來了。 // 拆開封裝的話,只會把問題搞得更麻煩而已。 std::string overrideValue = (mgrPrefs.useSCPCTypingMode) @@ -567,7 +565,9 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; if (!overrideValue.empty()) { NSInteger cursorIndex = [self getActualCandidateCursorIndex]; - std::vector nodes = _builder->grid().nodesCrossingOrEndingAt(cursorIndex); + std::vector nodes = mgrPrefs.setRearCursorMode + ? _builder->grid().nodesCrossingOrEndingAt(cursorIndex) + : _builder->grid().nodesEndingAt(cursorIndex); double highestScore = FindHighestScore(nodes, kEpsilon); _builder->grid().overrideNodeScoreForSelectedCandidate(cursorIndex, overrideValue, static_cast(highestScore)); @@ -601,13 +601,12 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; - (NSArray *)getCandidatesArray { - // 讓 grid 知道目前的游標候選字判定是前置還是後置 - _builder->grid().setHaninInputEnabled(!mgrPrefs.selectPhraseAfterCursorAsCandidate); - NSMutableArray *candidatesArray = [[NSMutableArray alloc] init]; NSInteger cursorIndex = [self getActualCandidateCursorIndex]; - std::vector nodes = _builder->grid().nodesCrossingOrEndingAt(cursorIndex); + std::vector nodes = mgrPrefs.setRearCursorMode + ? _builder->grid().nodesCrossingOrEndingAt(cursorIndex) + : _builder->grid().nodesEndingAt(cursorIndex); // sort the nodes, so that longer nodes (representing longer phrases) are placed at the top of the candidate list stable_sort(nodes.begin(), nodes.end(), NodeAnchorDescendingSorter()); @@ -623,6 +622,11 @@ static NSString *const kGraphVizOutputfile = @"/tmp/vChewing-visualization.dot"; return candidatesArray; } +- (NSInteger)getKeyLengthAtIndexZero +{ + return [NSString stringWithUTF8String:_walkedNodes[0].node->currentKeyValue().value.c_str()].length; +} + #pragma mark - 威注音認為有必要單獨拿出來處理的部分,交給 Swift 則有些困難。 - (BOOL)isPrintable:(UniChar)charCode diff --git a/Source/Modules/ControllerModules/KeyHandler_Misc.swift b/Source/Modules/ControllerModules/KeyHandler_Misc.swift index 9228d065..5b79ed19 100644 --- a/Source/Modules/ControllerModules/KeyHandler_Misc.swift +++ b/Source/Modules/ControllerModules/KeyHandler_Misc.swift @@ -35,13 +35,19 @@ import Cocoa func getActualCandidateCursorIndex() -> Int { var cursorIndex = getBuilderCursorIndex() - // MS Phonetics IME style, phrase is *after* the cursor. + // Windows Yahoo Kimo IME style, phrase is *at the rear of* the cursor. // (i.e. the cursor is always *before* the phrase.) - if (mgrPrefs.selectPhraseAfterCursorAsCandidate + // This is different from MS Phonetics IME style ... + // ... since Windows Yahoo Kimo allows "node crossing". + if (mgrPrefs.setRearCursorMode && (cursorIndex < getBuilderLength())) || cursorIndex == 0 { - cursorIndex += 1 + if cursorIndex == 0 && !mgrPrefs.setRearCursorMode { + cursorIndex += getKeyLengthAtIndexZero() + } else { + cursorIndex += 1 + } } return cursorIndex } diff --git a/Source/Modules/ControllerModules/KeyHandler_States.swift b/Source/Modules/ControllerModules/KeyHandler_States.swift index 06258158..d531b770 100644 --- a/Source/Modules/ControllerModules/KeyHandler_States.swift +++ b/Source/Modules/ControllerModules/KeyHandler_States.swift @@ -37,28 +37,38 @@ import Cocoa // 獲取封裝好的資料 let composedText = getComposedText() let packagedCursorIndex = UInt(getPackagedCursorIndex()) - let resultOfBefore = getStrLocationResult(isAfter: false) - let resultOfAfter = getStrLocationResult(isAfter: true) + let resultOfRear = getStrLocationResult(isFront: false) + let resultOfFront = getStrLocationResult(isFront: true) // 初期化狀態 let newState = InputState.Inputting(composingBuffer: composedText, cursorIndex: packagedCursorIndex) // 組建提示文本 var tooltip = "" - if resultOfBefore == "", resultOfAfter != "" { - tooltip = String(format: NSLocalizedString("Cursor is after \"%@\".", comment: ""), resultOfAfter) - } - if resultOfBefore != "", resultOfAfter == "" { - tooltip = String(format: NSLocalizedString("Cursor is before \"%@\".", comment: ""), resultOfBefore) - } - if resultOfBefore != "", resultOfAfter != "" { + + // 如果在用特定的模式的話,則始終顯示對應的提示。 + // TODO: 該功能無法正常運作,暫時註釋掉。 + // if ctlInputMethod.currentKeyHandler.inputMode == InputMode.imeModeCHT { + // if mgrPrefs.chineseConversionEnabled && !mgrPrefs.shiftJISShinjitaiOutputEnabled { + // tooltip = String( + // format: "%@%@%@", NSLocalizedString("Force KangXi Writing", comment: ""), "\n", + // NSLocalizedString("NotificationSwitchON", comment: "")) + // } else if mgrPrefs.shiftJISShinjitaiOutputEnabled { + // tooltip = String( + // format: "%@%@%@", NSLocalizedString("JIS Shinjitai Output", comment: ""), "\n", + // NSLocalizedString("NotificationSwitchON", comment: "")) + // } + // } + + // 備註:因為目前的輸入法已經有了 NSString Emoji 支援,所以這個工具提示可能不會出現了。 + // 姑且留下來用作萬一時的偵錯用途。 + if resultOfRear != "" || resultOfFront != "" { tooltip = String( format: NSLocalizedString("Cursor is between \"%@\" and \"%@\".", comment: ""), - resultOfAfter, resultOfBefore + resultOfFront, resultOfRear ) } - // 給新狀態安插配置好的提示文本、且送出新狀態 newState.tooltip = tooltip return newState } diff --git a/Source/Modules/IMEModules/mgrPrefs.swift b/Source/Modules/IMEModules/mgrPrefs.swift index f3c602dc..6c75b4b6 100644 --- a/Source/Modules/IMEModules/mgrPrefs.swift +++ b/Source/Modules/IMEModules/mgrPrefs.swift @@ -37,7 +37,7 @@ struct UserDef { static let kCandidateListTextSize = "CandidateListTextSize" static let kAppleLanguages = "AppleLanguages" static let kShouldAutoReloadUserDataFiles = "ShouldAutoReloadUserDataFiles" - static let kSelectPhraseAfterCursorAsCandidate = "SelectPhraseAfterCursorAsCandidate" + static let kSetRearCursorMode = "SetRearCursorMode" static let kUseHorizontalCandidateList = "UseHorizontalCandidateList" static let kComposingBufferSize = "ComposingBufferSize" static let kChooseCandidateUsingSpace = "ChooseCandidateUsingSpace" @@ -210,7 +210,7 @@ public class mgrPrefs: NSObject { UserDef.kCandidateListTextSize, UserDef.kAppleLanguages, UserDef.kShouldAutoReloadUserDataFiles, - UserDef.kSelectPhraseAfterCursorAsCandidate, + UserDef.kSetRearCursorMode, UserDef.kUseHorizontalCandidateList, UserDef.kComposingBufferSize, UserDef.kChooseCandidateUsingSpace, @@ -258,7 +258,7 @@ public class mgrPrefs: NSObject { UserDefaults.standard.setDefault(mgrPrefs.useSCPCTypingMode, forKey: UserDef.kUseSCPCTypingMode) UserDefaults.standard.setDefault(mgrPrefs.associatedPhrasesEnabled, forKey: UserDef.kAssociatedPhrasesEnabled) UserDefaults.standard.setDefault( - mgrPrefs.selectPhraseAfterCursorAsCandidate, forKey: UserDef.kSelectPhraseAfterCursorAsCandidate + mgrPrefs.setRearCursorMode, forKey: UserDef.kSetRearCursorMode ) UserDefaults.standard.setDefault( mgrPrefs.moveCursorAfterSelectingCandidate, forKey: UserDef.kMoveCursorAfterSelectingCandidate @@ -322,8 +322,8 @@ public class mgrPrefs: NSObject { @UserDefault(key: UserDef.kShouldAutoReloadUserDataFiles, defaultValue: true) @objc static var shouldAutoReloadUserDataFiles: Bool - @UserDefault(key: UserDef.kSelectPhraseAfterCursorAsCandidate, defaultValue: false) - @objc static var selectPhraseAfterCursorAsCandidate: Bool + @UserDefault(key: UserDef.kSetRearCursorMode, defaultValue: false) + @objc static var setRearCursorMode: Bool @UserDefault(key: UserDef.kMoveCursorAfterSelectingCandidate, defaultValue: true) @objc static var moveCursorAfterSelectingCandidate: Bool diff --git a/Source/Modules/LanguageParsers/Gramambular/Grid.h b/Source/Modules/LanguageParsers/Gramambular/Grid.h index 52b3e7da..5a39fe7a 100644 --- a/Source/Modules/LanguageParsers/Gramambular/Grid.h +++ b/Source/Modules/LanguageParsers/Gramambular/Grid.h @@ -44,9 +44,6 @@ class Grid void insertNode(const Node &node, size_t location, size_t spanningLength); bool hasNodeAtLocationSpanningLengthMatchingKey(size_t location, size_t spanningLength, const std::string &key); - void setHaninInputEnabled(bool enabled); - bool HaninInputEnabled(); - void expandGridByOneAtLocation(size_t location); void shrinkGridByOneAtLocation(size_t location); @@ -119,19 +116,8 @@ class Grid protected: std::vector m_spans; - bool m_bolHaninEnabled; }; -inline void Grid::setHaninInputEnabled(bool enabled) -{ - m_bolHaninEnabled = enabled; -} - -inline bool Grid::HaninInputEnabled() -{ - return m_bolHaninEnabled; -} - inline void Grid::clear() { m_spans.clear(); @@ -206,6 +192,7 @@ inline size_t Grid::width() const return m_spans.size(); } +// macOS 10.6 開始的內建注音的游標前置選字風格 inline std::vector Grid::nodesEndingAt(size_t location) { std::vector result; @@ -234,6 +221,8 @@ inline std::vector Grid::nodesEndingAt(size_t location) return result; } +// Windows 版奇摩注音輸入法的游標後置的選字風格。 +// 與微軟新注音相異的是,這個風格允許在詞的中間叫出候選字窗。 inline std::vector Grid::nodesCrossingOrEndingAt(size_t location) { std::vector result; @@ -248,9 +237,7 @@ inline std::vector Grid::nodesCrossingOrEndingAt(size_t location) { for (size_t j = 1, m = span.maximumLength(); j <= m; j++) { - // 左半是漢音模式,已經自威注音 1.5.2 版開始解決了可以在詞中間叫出候選字的問題。 - // TODO: 右半是微軟新注音模式,仍有可以在詞中間叫出候選字的問題。 - if (((i + j != location) && m_bolHaninEnabled) || ((i + j < location) && !m_bolHaninEnabled)) + if (i + j < location) { continue; } diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index dc635a2f..f7f17571 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -26,8 +26,8 @@ "Half-Width Punctuation Mode" = "Half-Width Punctuation Mode"; "\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase."; "\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase."; -"\"%@\" selected. ↩ to add user phrase." = "\"%@\" selected. ↩ to add user phrase."; -"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude."; +"\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase."; +"\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude." = "\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude."; "Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…"; "Use Phrase Replacement" = "Use Phrase Replacement"; "Candidates keys cannot be empty." = "Candidates keys cannot be empty."; @@ -56,8 +56,6 @@ "Symbol & Emoji Input" = "Symbol & Emoji Input"; "Edit User Symbol & Emoji Data…" = "Edit User Symbol & Emoji Data…"; "Choose your desired user data folder." = "Choose your desired user data folder."; -"Cursor is after \"%@\"." = "Cursor is after \"%@\"."; -"Cursor is before \"%@\"." = "Cursor is before \"%@\"."; "Cursor is between \"%@\" and \"%@\"." = "Cursor is between \"%@\" and \"%@\"."; // The followings are the category names used in the Symbol menu. @@ -129,7 +127,7 @@ "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only."; "Output Settings:" = "Output Settings:"; "Phonetic Parser:" = "Phonetic Parser:"; -"Push the cursor to the front of the phrase after selection" = "Push the cursor to the front of the phrase after selection"; +"Push the cursor in front of the phrase after selection" = "Push the cursor in front of the phrase after selection"; "Selection Keys:" = "Selection Keys:"; "Show page buttons in candidate window" = "Show page buttons in candidate window"; "Simplified Chinese" = "Simplified Chinese"; @@ -137,8 +135,8 @@ "Space to +cycle candidates, Shift+Space to +cycle pages" = "Space to +cycle candidates, Shift+Space to +cycle pages"; "Space to +cycle pages, Shift+Space to +cycle candidates" = "Space to +cycle pages, Shift+Space to +cycle candidates"; "Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)"; -"to the front of the phrase (like Matsushita Hanin IME)" = "to the front of the phrase (like Matsushita Hanin IME)"; -"to the rear of the phrase (like MS New-Phonetic IME)" = "to the rear of the phrase (like MS New-Phonetic IME)"; +"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)"; +"at anyplace else (like Windows Yahoo KeyKey)" = "at anyplace else (like Windows Yahoo KeyKey)"; "Traditional Chinese" = "Traditional Chinese"; "Typing Style:" = "Typing Style:"; "UI Language:" = "UI Language:"; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index dc635a2f..f7f17571 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -26,8 +26,8 @@ "Half-Width Punctuation Mode" = "Half-Width Punctuation Mode"; "\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase."; "\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase."; -"\"%@\" selected. ↩ to add user phrase." = "\"%@\" selected. ↩ to add user phrase."; -"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude."; +"\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase."; +"\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude." = "\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude."; "Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…"; "Use Phrase Replacement" = "Use Phrase Replacement"; "Candidates keys cannot be empty." = "Candidates keys cannot be empty."; @@ -56,8 +56,6 @@ "Symbol & Emoji Input" = "Symbol & Emoji Input"; "Edit User Symbol & Emoji Data…" = "Edit User Symbol & Emoji Data…"; "Choose your desired user data folder." = "Choose your desired user data folder."; -"Cursor is after \"%@\"." = "Cursor is after \"%@\"."; -"Cursor is before \"%@\"." = "Cursor is before \"%@\"."; "Cursor is between \"%@\" and \"%@\"." = "Cursor is between \"%@\" and \"%@\"."; // The followings are the category names used in the Symbol menu. @@ -129,7 +127,7 @@ "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only."; "Output Settings:" = "Output Settings:"; "Phonetic Parser:" = "Phonetic Parser:"; -"Push the cursor to the front of the phrase after selection" = "Push the cursor to the front of the phrase after selection"; +"Push the cursor in front of the phrase after selection" = "Push the cursor in front of the phrase after selection"; "Selection Keys:" = "Selection Keys:"; "Show page buttons in candidate window" = "Show page buttons in candidate window"; "Simplified Chinese" = "Simplified Chinese"; @@ -137,8 +135,8 @@ "Space to +cycle candidates, Shift+Space to +cycle pages" = "Space to +cycle candidates, Shift+Space to +cycle pages"; "Space to +cycle pages, Shift+Space to +cycle candidates" = "Space to +cycle pages, Shift+Space to +cycle candidates"; "Stop farting (when typed phonetic combination is invalid, etc.)" = "Stop farting (when typed phonetic combination is invalid, etc.)"; -"to the front of the phrase (like Matsushita Hanin IME)" = "to the front of the phrase (like Matsushita Hanin IME)"; -"to the rear of the phrase (like MS New-Phonetic IME)" = "to the rear of the phrase (like MS New-Phonetic IME)"; +"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)"; +"at anyplace else (like Windows Yahoo KeyKey)" = "at anyplace else (like Windows Yahoo KeyKey)"; "Traditional Chinese" = "Traditional Chinese"; "Typing Style:" = "Typing Style:"; "UI Language:" = "UI Language:"; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index 89663856..1f515508 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -26,8 +26,8 @@ "Half-Width Punctuation Mode" = "半角句読モード"; "\"%@\" length must ≥ 2 for a user phrase." = "「%@」もう1つ文字のお選びを。"; "\"%@\" length should ≤ %d for a user phrase." = "「%@」文字数過剰で登録不可、%d 文字以内にして下さい。"; -"\"%@\" selected. ↩ to add user phrase." = "「%@」を ↩ で辞書に登録。"; -"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "「%@」は既存語彙:↩ で最優先にし;⇧⌘↩ で排除。"; +"\"%@\" selected. ENTER to add user phrase." = "「%@」を ENTER で辞書に登録。"; +"\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude." = "「%@」は既存語彙:ENTER で最優先にし;\n SHIFT+CMD+ENTER で排除。"; "Edit Phrase Replacement Table…" = "言葉置換表を編集…"; "Use Phrase Replacement" = "言葉置換機能"; "Candidates keys cannot be empty." = "言選り用キー陣列に何かキーをご登録ください。"; @@ -56,8 +56,6 @@ "Symbol & Emoji Input" = "符号&絵文字入力"; "Edit User Symbol & Emoji Data…" = "ユーザー符号&絵文字辞書を編集…"; "Choose your desired user data folder." = "欲しがるユーザー辞書フォルダをお選びください。"; -"Cursor is after \"%@\"." = "カーソルは「%@」の後に。"; -"Cursor is before \"%@\"." = "カーソル「%@」の前に。"; "Cursor is between \"%@\" and \"%@\"." = "カーソルは「%@」と「%@」に間れ。"; // The followings are the category names used in the Symbol menu. @@ -129,7 +127,7 @@ "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外の英数キーボードは漢語弁音以外の配列に不適用。"; "Output Settings:" = "出力設定:"; "Phonetic Parser:" = "注音配列:"; -"Push the cursor to the front of the phrase after selection" = "候補選択の直後、すぐカーソルを単語の向こうに推し進める"; +"Push the cursor in front of the phrase after selection" = "候補選択の直後、すぐカーソルを単語の向こうに推し進める"; "Selection Keys:" = "言選り用キー:"; "Show page buttons in candidate window" = "入力候補陳列の側にページボタンを表示"; "Simplified Chinese" = "簡体中国語"; @@ -137,8 +135,8 @@ "Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+Space で次のページ、Space で次の候補文字を"; "Space to +cycle pages, Shift+Space to +cycle candidates" = "Space で次のページ、Shift+Space で次の候補文字を"; "Stop farting (when typed phonetic combination is invalid, etc.)" = "マナーモード // 外すと入力間違った時に変な声が出る"; -"to the front of the phrase (like Matsushita Hanin IME)" = "単語の前で // パナソニック漢音のやり方"; -"to the rear of the phrase (like MS New-Phonetic IME)" = "単語の後で // Microsoft 新注音のやり方"; +"in front of the phrase (like macOS built-in Zhuyin IME)" = "単語の前で // macOS 内蔵注音入力のやり方"; +"at anyplace else (like Windows Yahoo KeyKey)" = "単語の中・後で // Windows Yahoo KeyKey のやり方"; "Traditional Chinese" = "繁体中国語"; "Typing Style:" = "入力習慣:"; "UI Language:" = "表示用言語:"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index dc745a2d..a83c8d68 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -26,8 +26,8 @@ "Half-Width Punctuation Mode" = "半角标点模式"; "\"%@\" length must ≥ 2 for a user phrase." = "「%@」字数不足以自订语汇。"; "\"%@\" length should ≤ %d for a user phrase." = "「%@」字数超过 %d、无法自订。"; -"\"%@\" selected. ↩ to add user phrase." = "「%@」敲 Enter 添入自订语汇。"; -"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "「%@」已存在:敲 ↩ 以升权;敲 ⇧⌘↩ 以排除。"; +"\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自订语汇。"; +"\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude." = "「%@」已存在:敲 Enter 以升权;\n 敲 Shift+CMD+Enter 以排除。"; "Edit Phrase Replacement Table…" = "编辑语汇置换表…"; "Use Phrase Replacement" = "使用语汇置换"; "Candidates keys cannot be empty." = "您必须指定选字键。"; @@ -56,8 +56,6 @@ "Symbol & Emoji Input" = "符号&绘文字输入"; "Edit User Symbol & Emoji Data…" = "编辑自订符号&绘文字资料…"; "Choose your desired user data folder." = "请选择您想指定的使用者语汇档案目录。"; -"Cursor is after \"%@\"." = "游标在「%@」之后。"; -"Cursor is before \"%@\"." = "游标在「%@」之前。"; "Cursor is between \"%@\" and \"%@\"." = "游标介于「%@」与「%@」之间。"; // The followings are the category names used in the Symbol menu. @@ -129,7 +127,7 @@ "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外的英数布局是为了汉语拼音排列使用者而准备的。"; "Output Settings:" = "输出设定:"; "Phonetic Parser:" = "注音排列:"; -"Push the cursor to the front of the phrase after selection" = "在选字后将游标置于该字词的前方"; +"Push the cursor in front of the phrase after selection" = "在选字后将游标置于该字词的前方"; "Selection Keys:" = "选字键:"; "Show page buttons in candidate window" = "在选字窗内显示翻页按钮"; "Simplified Chinese" = "简体中文"; @@ -137,8 +135,8 @@ "Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+空格键 换下一页,空格键 换选下一个后选字"; "Space to +cycle pages, Shift+Space to +cycle candidates" = "空格键 换下一页,Shift+空格键 换选下一个后选字"; "Stop farting (when typed phonetic combination is invalid, etc.)" = "廉耻模式 // 取消勾选的话,敲错字时会有异音"; -"to the front of the phrase (like Matsushita Hanin IME)" = "将游标置于词语前方 // 松下汉音风格"; -"to the rear of the phrase (like MS New-Phonetic IME)" = "将游标置于词语后方 // 微软新注音风格"; +"in front of the phrase (like macOS built-in Zhuyin IME)" = "将游标置于词语前方 // macOS 内建注音风格"; +"at anyplace else (like Windows Yahoo KeyKey)" = "将游标置于词语中后方 // Windows 奇摩注音风格"; "Traditional Chinese" = "繁体中文"; "Typing Style:" = "输入风格:"; "UI Language:" = "介面语言:"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index 42073f9d..f300f1ee 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -26,8 +26,8 @@ "Half-Width Punctuation Mode" = "半形標點模式"; "\"%@\" length must ≥ 2 for a user phrase." = "「%@」字數不足以自訂語彙。"; "\"%@\" length should ≤ %d for a user phrase." = "「%@」字數超過 %d、無法自訂。"; -"\"%@\" selected. ↩ to add user phrase." = "「%@」敲 Enter 添入自訂語彙。"; -"\"%@\" already exists: ↩ to boost, ⇧⌘↩ to exclude." = "「%@」已存在:敲 ↩ 以升權;敲 ⇧⌘↩ 以排除。"; +"\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自訂語彙。"; +"\"%@\" already exists: ENTER to boost, \n SHIFT+CMD+ENTER to exclude." = "「%@」已存在:敲 Enter 以升權;\n 敲 Shift+CMD+Enter 以排除。"; "Edit Phrase Replacement Table…" = "編輯語彙置換表…"; "Use Phrase Replacement" = "使用語彙置換"; "Candidates keys cannot be empty." = "您必須指定選字鍵。"; @@ -56,8 +56,6 @@ "Symbol & Emoji Input" = "符號&繪文字輸入"; "Edit User Symbol & Emoji Data…" = "編輯自訂符號&繪文字資料…"; "Choose your desired user data folder." = "請選擇您想指定的使用者語彙檔案目錄。"; -"Cursor is after \"%@\"." = "游標在「%@」之後。"; -"Cursor is before \"%@\"." = "游標在「%@」之前。"; "Cursor is between \"%@\" and \"%@\"." = "游標介於「%@」與「%@」之間。"; // The followings are the category names used in the Symbol menu. @@ -129,7 +127,7 @@ "Non-QWERTY alphanumeral keyboard layouts are for Hanyu Pinyin parser only." = "QWERTY 以外的英數佈局是為了漢語拼音排列使用者而準備的。"; "Output Settings:" = "輸出設定:"; "Phonetic Parser:" = "注音排列:"; -"Push the cursor to the front of the phrase after selection" = "在選字後將游標置於該字詞的前方"; +"Push the cursor in front of the phrase after selection" = "在選字後將游標置於該字詞的前方"; "Selection Keys:" = "選字鍵:"; "Show page buttons in candidate window" = "在選字窗內顯示翻頁按鈕"; "Simplified Chinese" = "簡體中文"; @@ -137,8 +135,8 @@ "Space to +cycle candidates, Shift+Space to +cycle pages" = "Shift+空格鍵 換下一頁,空格鍵 換選下一個後選字"; "Space to +cycle pages, Shift+Space to +cycle candidates" = "空格鍵 換下一頁,Shift+空格鍵 換選下一個後選字"; "Stop farting (when typed phonetic combination is invalid, etc.)" = "廉恥模式 // 取消勾選的話,敲錯字時會有異音"; -"to the front of the phrase (like Matsushita Hanin IME)" = "將游標置於詞語前方 // 松下漢音風格"; -"to the rear of the phrase (like MS New-Phonetic IME)" = "將游標置於詞語後方 // 微軟新注音風格"; +"in front of the phrase (like macOS built-in Zhuyin IME)" = "將游標置於詞語前方 // macOS 內建注音風格"; +"at anyplace else (like Windows Yahoo KeyKey)" = "將游標置於詞語中後方 // Windows 奇摩注音風格"; "Traditional Chinese" = "繁體中文"; "Typing Style:" = "輸入風格:"; "UI Language:" = "介面語言:"; diff --git a/Source/UI/PrefUI/suiPrefPaneExperience.swift b/Source/UI/PrefUI/suiPrefPaneExperience.swift index 8113b549..02a495fb 100644 --- a/Source/UI/PrefUI/suiPrefPaneExperience.swift +++ b/Source/UI/PrefUI/suiPrefPaneExperience.swift @@ -32,7 +32,7 @@ struct suiPrefPaneExperience: View { (UserDefaults.standard.string(forKey: UserDef.kCandidateKeys) ?? mgrPrefs.defaultCandidateKeys) as String @State private var selCursorPosition = UserDefaults.standard.bool( - forKey: UserDef.kSelectPhraseAfterCursorAsCandidate) ? 1 : 0 + forKey: UserDef.kSetRearCursorMode) ? 1 : 0 @State private var selPushCursorAfterSelection = UserDefaults.standard.bool( forKey: UserDef.kMoveCursorAfterSelectingCandidate) @State private var selKeyBehaviorShiftTab = @@ -90,17 +90,17 @@ struct suiPrefPaneExperience: View { } Preferences.Section(bottomDivider: true, label: { Text(LocalizedStringKey("Cursor Selection:")) }) { Picker("", selection: $selCursorPosition) { - Text(LocalizedStringKey("to the front of the phrase (like Matsushita Hanin IME)")).tag(0) - Text(LocalizedStringKey("to the rear of the phrase (like MS New-Phonetic IME)")).tag(1) + Text(LocalizedStringKey("in front of the phrase (like macOS built-in Zhuyin IME)")).tag(0) + Text(LocalizedStringKey("at anyplace else (like Windows Yahoo KeyKey)")).tag(1) }.onChange(of: selCursorPosition) { value in - mgrPrefs.selectPhraseAfterCursorAsCandidate = (value == 1) ? true : false + mgrPrefs.setRearCursorMode = (value == 1) ? true : false } .labelsHidden() .pickerStyle(RadioGroupPickerStyle()) Text(LocalizedStringKey("Choose the cursor position where you want to list possible candidates.")) .preferenceDescription() Toggle( - LocalizedStringKey("Push the cursor to the front of the phrase after selection"), + LocalizedStringKey("Push the cursor in front of the phrase after selection"), isOn: $selPushCursorAfterSelection ).onChange(of: selPushCursorAfterSelection) { value in mgrPrefs.moveCursorAfterSelectingCandidate = value diff --git a/Source/UI/PrefUI/suiPrefPaneGeneral.swift b/Source/UI/PrefUI/suiPrefPaneGeneral.swift index 822cf8e2..2615d8a3 100644 --- a/Source/UI/PrefUI/suiPrefPaneGeneral.swift +++ b/Source/UI/PrefUI/suiPrefPaneGeneral.swift @@ -130,12 +130,22 @@ struct suiPrefPaneGeneral: View { isOn: $selEnableKanjiConvToKangXi ).onChange(of: selEnableKanjiConvToKangXi) { value in mgrPrefs.chineseConversionEnabled = value + selEnableKanjiConvToKangXi = value + if value { + mgrPrefs.shiftJISShinjitaiOutputEnabled = !value + selEnableKanjiConvToJIS = !value + } } Toggle( LocalizedStringKey("Auto-convert traditional Chinese glyphs to JIS Shinjitai characters"), isOn: $selEnableKanjiConvToJIS ).onChange(of: selEnableKanjiConvToJIS) { value in mgrPrefs.shiftJISShinjitaiOutputEnabled = value + selEnableKanjiConvToJIS = value + if value { + mgrPrefs.chineseConversionEnabled = !value + selEnableKanjiConvToKangXi = !value + } } Toggle( LocalizedStringKey("Stop farting (when typed phonetic combination is invalid, etc.)"), diff --git a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib index 7c56403c..54548cc0 100644 --- a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib +++ b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib @@ -1,8 +1,7 @@ - + - - + @@ -379,11 +378,11 @@ - + - + @@ -398,7 +397,7 @@ - + diff --git a/Source/WindowNIBs/en.lproj/frmPrefWindow.strings b/Source/WindowNIBs/en.lproj/frmPrefWindow.strings index 4e07de6c..cdb7a9f6 100644 --- a/Source/WindowNIBs/en.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/en.lproj/frmPrefWindow.strings @@ -29,11 +29,11 @@ /* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */ "14.title" = "Choose the cursor position where you want to list possible candidates."; -/* Class = "NSButtonCell"; title = "Cursor to the front of the phrase (like Matsushita Hanin IME)"; ObjectID = "16"; */ -"16.title" = "Cursor to the front of the phrase (like Matsushita Hanin IME)"; +/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */ +"16.title" = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; -/* Class = "NSButtonCell"; title = "Cursor to the rear of the phrase (like MS New-Phonetic IME)"; ObjectID = "17"; */ -"17.title" = "Cursor to the rear of the phrase (like MS New-Phonetic IME)"; +/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */ +"17.title" = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; /* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */ "18.title" = "Radio"; @@ -143,8 +143,8 @@ /* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */ "RQ6-MS-m4C.title" = "Choose your preferred keyboard layout and phonetic parser."; -/* Class = "NSButtonCell"; title = "Push the cursor to the front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ -"RUG-ls-KyA.title" = "Push the cursor to the front of the phrase after selection"; +/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ +"RUG-ls-KyA.title" = "Push the cursor in front of the phrase after selection"; /* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */ "TXr-FF-ehw.title" = "Traditional Chinese"; diff --git a/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings b/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings index bb3f1699..44fb5fb7 100644 --- a/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings @@ -29,11 +29,11 @@ /* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */ "14.title" = "カーソルはどこで入力候補を呼び出すかとご選択ください:"; -/* Class = "NSButtonCell"; title = "Cursor to the front of the phrase (like Matsushita Hanin IME)"; ObjectID = "16"; */ -"16.title" = "単語の前で // パナソニック漢音の入力スタイル"; +/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */ +"16.title" = "単語の前で // macOS 内蔵注音入力の入力スタイル"; -/* Class = "NSButtonCell"; title = "Cursor to the rear of the phrase (like MS New-Phonetic IME)"; ObjectID = "17"; */ -"17.title" = "単語の後で // Microsoft 新注音の入力スタイル"; +/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */ +"17.title" = "単語の中・後で // Windows Yahoo KeyKey の入力スタイル"; /* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */ "18.title" = "Radio"; @@ -143,7 +143,7 @@ /* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */ "RQ6-MS-m4C.title" = "お好きなるキーボードとそれに相応しい注音配列をお選びください。"; -/* Class = "NSButtonCell"; title = "Push the cursor to the front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ +/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ "RUG-ls-KyA.title" = "候補選択の直後、すぐカーソルを単語の向こうに推す"; /* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */ diff --git a/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings b/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings index ba660e97..dcacae51 100644 --- a/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings @@ -29,11 +29,11 @@ /* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */ "14.title" = "用以触发选字的光标相对位置:"; -/* Class = "NSButtonCell"; title = "Cursor to the front of the phrase (like Matsushita Hanin IME)"; ObjectID = "16"; */ -"16.title" = "光标置于词语前方 // 松下汉音风格"; +/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */ +"16.title" = "光标置于词语前方 // macOS 内建注音风格"; -/* Class = "NSButtonCell"; title = "Cursor to the rear of the phrase (like MS New-Phonetic IME)"; ObjectID = "17"; */ -"17.title" = "光标置于词语后方 // 微软新注音风格"; +/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */ +"17.title" = "光标置于词语中后方 // Windows 奇摩注音风格"; /* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */ "18.title" = "Radio"; @@ -143,7 +143,7 @@ /* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */ "RQ6-MS-m4C.title" = "选择您所偏好的系统键盘布局与注音分析器排列。"; -/* Class = "NSButtonCell"; title = "Push the cursor to the front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ +/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ "RUG-ls-KyA.title" = "在选字后将光标置于该字词的前方"; /* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */ diff --git a/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings b/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings index c1174921..7f33d2f9 100644 --- a/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings @@ -29,11 +29,11 @@ /* Class = "NSTextFieldCell"; title = "Choose the cursor position where you want to list possible candidates."; ObjectID = "14"; */ "14.title" = "用以觸發選字的游標相對位置:"; -/* Class = "NSButtonCell"; title = "Cursor to the front of the phrase (like Matsushita Hanin IME)"; ObjectID = "16"; */ -"16.title" = "游標置於詞語前方 // 松下漢音風格"; +/* Class = "NSButtonCell"; title = "Cursor in front of the phrase (like macOS built-in Zhuyin IME)"; ObjectID = "16"; */ +"16.title" = "游標置於詞語前方 // macOS 內建注音風格"; -/* Class = "NSButtonCell"; title = "Cursor to the rear of the phrase (like MS New-Phonetic IME)"; ObjectID = "17"; */ -"17.title" = "游標置於詞語後方 // 微軟新注音風格"; +/* Class = "NSButtonCell"; title = "Cursor at anyplace else (like Windows Yahoo KeyKey)"; ObjectID = "17"; */ +"17.title" = "游標置於詞語中後方 // Windows 奇摩注音風格"; /* Class = "NSButtonCell"; title = "Radio"; ObjectID = "18"; */ "18.title" = "Radio"; @@ -143,7 +143,7 @@ /* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout and phonetic parser."; ObjectID = "RQ6-MS-m4C"; */ "RQ6-MS-m4C.title" = "選擇您所偏好的系統鍵盤佈局與注音分析器排列。"; -/* Class = "NSButtonCell"; title = "Push the cursor to the front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ +/* Class = "NSButtonCell"; title = "Push the cursor in front of the phrase after selection"; ObjectID = "RUG-ls-KyA"; */ "RUG-ls-KyA.title" = "在選字後將游標置於該字詞的前方"; /* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */ diff --git a/Update-Info.plist b/Update-Info.plist index 03971dfc..e6ac22a9 100644 --- a/Update-Info.plist +++ b/Update-Info.plist @@ -3,9 +3,9 @@ CFBundleShortVersionString - 1.5.2 + 1.5.3 CFBundleVersion - 1952 + 1953 UpdateInfoEndpoint https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist UpdateInfoSite diff --git a/vChewing.pkgproj b/vChewing.pkgproj index 26725464..8bb06404 100644 --- a/vChewing.pkgproj +++ b/vChewing.pkgproj @@ -726,7 +726,7 @@ USE_HFS+_COMPRESSION VERSION - 1.5.2 + 1.5.3 TYPE 0 diff --git a/vChewing.xcodeproj/project.pbxproj b/vChewing.xcodeproj/project.pbxproj index aa061f9f..f97b5b51 100644 --- a/vChewing.xcodeproj/project.pbxproj +++ b/vChewing.xcodeproj/project.pbxproj @@ -389,9 +389,9 @@ 5B4D47B627C9186900220DDC /* InstantiatedModels */ = { isa = PBXGroup; children = ( + 5B62A32B27AE78B000A19448 /* CNSLM.h */, 5B8F43ED27C9BC220069AC27 /* SymbolLM.h */, 5B7111C727DEF9FF00444310 /* UserSymbolLM.h */, - 5B62A32B27AE78B000A19448 /* CNSLM.h */, ); path = InstantiatedModels; sourceTree = ""; @@ -399,10 +399,10 @@ 5B62A30127AE732800A19448 /* 3rdParty */ = { isa = PBXGroup; children = ( - 5BA9FD8C28006BA7002DE248 /* VDKComboBox */, 5B707CE627D9F43E0099EF99 /* OpenCCBridge */, 5B62A30227AE733500A19448 /* OVMandarin */, 5BA9FCEA27FED652002DE248 /* SindreSorhus */, + 5BA9FD8C28006BA7002DE248 /* VDKComboBox */, ); path = 3rdParty; sourceTree = ""; @@ -428,14 +428,14 @@ isa = PBXGroup; children = ( 5B11328827B94CFB00E58451 /* AppleKeyboardConverter.swift */, - D461B791279DAC010070E734 /* InputState.swift */, D456576D279E4F7B00DF6BC9 /* InputHandler.swift */, - D4E569DA27A34CC100AC2CEF /* KeyHandler.h */, - D4E569DB27A34CC100AC2CEF /* KeyHandler.mm */, - 5B7F225C2808501000DDD3CB /* KeyHandler_HandleInput.swift */, + D461B791279DAC010070E734 /* InputState.swift */, 5B782EC3280C243C007276DE /* KeyHandler_HandleCandidate.swift */, + 5B7F225C2808501000DDD3CB /* KeyHandler_HandleInput.swift */, 5B61B0C9280BEFD4002E3CFA /* KeyHandler_Misc.swift */, 5B3133BE280B229700A4A505 /* KeyHandler_States.swift */, + D4E569DA27A34CC100AC2CEF /* KeyHandler.h */, + D4E569DB27A34CC100AC2CEF /* KeyHandler.mm */, 6ACC3D3E27914F2400F1B140 /* KeyValueBlobReader.cpp */, 6ACC3D3C27914AAB00F1B140 /* KeyValueBlobReader.h */, 5B62A33727AE79CD00A19448 /* NSStringUtils.swift */, @@ -447,8 +447,8 @@ 5B62A32027AE752000A19448 /* Headers */ = { isa = PBXGroup; children = ( - 6A0D4EF615FC0DA600ABF4B3 /* vChewing-Prefix.pch */, D427A9BF25ED28CC005D43E0 /* vChewing-Bridging-Header.h */, + 6A0D4EF615FC0DA600ABF4B3 /* vChewing-Prefix.pch */, ); path = Headers; sourceTree = ""; @@ -467,8 +467,8 @@ isa = PBXGroup; children = ( 5BDC1CF927FDF1310052C2B9 /* apiUpdate.swift */, - D4A13D5927A59D5C003BE359 /* ctlInputMethod.swift */, 5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */, + D4A13D5927A59D5C003BE359 /* ctlInputMethod.swift */, 5B5E535127EF261400C6AA1E /* IME.swift */, 5B62A33127AE792F00A19448 /* InputSourceHelper.swift */, 5B62A33527AE795800A19448 /* mgrPrefs.swift */, @@ -487,13 +487,13 @@ 5B62A32427AE757300A19448 /* LangModelRelated */ = { isa = PBXGroup; children = ( - D41355D9278E6D17005E5CBD /* LMInstantiator.mm */, + 5B62A32527AE758000A19448 /* SubLanguageModels */, D41355DA278E6D17005E5CBD /* LMInstantiator.h */, - D41355D6278D7409005E5CBD /* mgrLangModel.h */, + D41355D9278E6D17005E5CBD /* LMInstantiator.mm */, D495583A27A5C6C4006ADE1C /* mgrLangModel_Privates.h */, + D41355D6278D7409005E5CBD /* mgrLangModel.h */, D41355D7278D7409005E5CBD /* mgrLangModel.mm */, 5BAEFACF28012565001F42C9 /* mgrLangModel.swift */, - 5B62A32527AE758000A19448 /* SubLanguageModels */, ); path = LangModelRelated; sourceTree = ""; @@ -502,20 +502,20 @@ isa = PBXGroup; children = ( 5B4D47B627C9186900220DDC /* InstantiatedModels */, + D47D73AB27A6CAE600255A50 /* AssociatedPhrases.h */, + D47D73AA27A6CAE600255A50 /* AssociatedPhrases.mm */, 5B62A32C27AE78B000A19448 /* CoreLM.h */, 5B62A32D27AE78B000A19448 /* CoreLM.mm */, - D41355DC278EA3ED005E5CBD /* UserPhrasesLM.mm */, - D41355DD278EA3ED005E5CBD /* UserPhrasesLM.h */, 6ACC3D422793701600F1B140 /* ParselessLM.cpp */, 6ACC3D432793701600F1B140 /* ParselessLM.h */, 6ACC3D402793701600F1B140 /* ParselessPhraseDB.cpp */, 6ACC3D412793701600F1B140 /* ParselessPhraseDB.h */, - D44FB74B2792189A003C80A6 /* PhraseReplacementMap.mm */, D44FB74C2792189A003C80A6 /* PhraseReplacementMap.h */, + D44FB74B2792189A003C80A6 /* PhraseReplacementMap.mm */, D47F7DD2278C1263002F9DD7 /* UserOverrideModel.cpp */, D47F7DD1278C1263002F9DD7 /* UserOverrideModel.h */, - D47D73AA27A6CAE600255A50 /* AssociatedPhrases.mm */, - D47D73AB27A6CAE600255A50 /* AssociatedPhrases.h */, + D41355DD278EA3ED005E5CBD /* UserPhrasesLM.h */, + D41355DC278EA3ED005E5CBD /* UserPhrasesLM.mm */, ); path = SubLanguageModels; sourceTree = ""; @@ -537,9 +537,9 @@ isa = PBXGroup; children = ( 5B62A33E27AE7CD900A19448 /* CandidateUI */, + 5B62A34427AE7CD900A19448 /* NotifierUI */, 5BA9FD0927FED9F3002DE248 /* PrefUI */, 5B62A34227AE7CD900A19448 /* TooltipUI */, - 5B62A34427AE7CD900A19448 /* NotifierUI */, ); path = UI; sourceTree = ""; @@ -681,10 +681,10 @@ 5BBBB76E27AED70B0023B93A /* MenuIcons */ = { isa = PBXGroup; children = ( - 5BBBB76F27AED70B0023B93A /* MenuIcon-TCVIM@2x.png */, - 5BBBB77027AED70B0023B93A /* MenuIcon-SCVIM@2x.png */, 5BBBB77127AED70B0023B93A /* MenuIcon-SCVIM.png */, + 5BBBB77027AED70B0023B93A /* MenuIcon-SCVIM@2x.png */, 5BBBB77227AED70B0023B93A /* MenuIcon-TCVIM.png */, + 5BBBB76F27AED70B0023B93A /* MenuIcon-TCVIM@2x.png */, ); name = MenuIcons; path = Source/Resources/MenuIcons; @@ -825,13 +825,13 @@ 5BBBB77827AEDB330023B93A /* Resources */, D4F0BBE0279AF8B30071253C /* AppDelegate.swift */, D4F0BBDE279AF1AF0071253C /* ArchiveUtil.swift */, + D4F0BBE2279B08900071253C /* Chronosphere.h */, + D4F0BBE3279B08900071253C /* Chronosphere.m */, 6ACA41F215FC1D9000935EF6 /* Installer-Info.plist */, 6ACA41F315FC1D9000935EF6 /* Installer-Prefix.pch */, 5BC0AACA27F58472002D33E9 /* pkgPostInstall.sh */, 5BC0AAC927F58472002D33E9 /* pkgPreInstall.sh */, 6A93050C279877FF00D370DA /* vChewingInstaller-Bridging-Header.h */, - D4F0BBE2279B08900071253C /* Chronosphere.h */, - D4F0BBE3279B08900071253C /* Chronosphere.m */, ); path = Installer; sourceTree = ""; @@ -1324,7 +1324,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1952; + CURRENT_PROJECT_VERSION = 1953; DEBUG_INFORMATION_FORMAT = dwarf; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -1347,7 +1347,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.5.2; + MARKETING_VERSION = 1.5.3; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor; @@ -1380,7 +1380,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1952; + CURRENT_PROJECT_VERSION = 1953; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1399,7 +1399,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.5.2; + MARKETING_VERSION = 1.5.3; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor; @@ -1513,7 +1513,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1952; + CURRENT_PROJECT_VERSION = 1953; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1548,7 +1548,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.5.2; + MARKETING_VERSION = 1.5.3; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1580,7 +1580,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1952; + CURRENT_PROJECT_VERSION = 1953; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = ""; @@ -1610,7 +1610,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.5.2; + MARKETING_VERSION = 1.5.3; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1693,7 +1693,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1952; + CURRENT_PROJECT_VERSION = 1953; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -1718,7 +1718,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.5.2; + MARKETING_VERSION = 1.5.3; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1745,7 +1745,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1952; + CURRENT_PROJECT_VERSION = 1953; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1765,7 +1765,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.11.5; - MARKETING_VERSION = 1.5.2; + MARKETING_VERSION = 1.5.3; PRODUCT_BUNDLE_IDENTIFIER = "org.atelierInmu.vChewing.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "";