!20 1.4.7b // Maintenance.

Merge pull request !20 from ShikiSuen/upd/1.4.7b
This commit is contained in:
ShikiSuen 2022-04-06 14:48:52 +00:00 committed by Gitee
commit dcc2f7ee97
29 changed files with 159 additions and 301 deletions

BIN
Installer/InstallerBg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

View File

@ -1,3 +1,4 @@
"vChewing Input Method" = "vChewing Input Method";
"Upgrade" = "Accept & Upgrade";
"Cancel" = "Cancel";
"Cannot activate the input method." = "Cannot activate the input method.";

View File

@ -1,3 +1,4 @@
"vChewing Input Method" = "威注音入力アプリ";
"Upgrade" = "承認と更新";
"Cancel" = "取消";
"Cannot activate the input method." = "入力アプリ、起動失敗。";

View File

@ -1,3 +1,4 @@
"vChewing Input Method" = "威注音输入法";
"Upgrade" = "接受并升级";
"Cancel" = "取消";
"Cannot activate the input method." = "无法启用输入法。";

View File

@ -1,3 +1,4 @@
"vChewing Input Method" = "威注音輸入法";
"Upgrade" = "接受並升級";
"Cancel" = "取消";
"Cannot activate the input method." = "無法啟用輸入法。";

View File

@ -1,18 +1,20 @@
#!/bin/sh
loggedInUser=$(stat -f%Su /dev/console)
TARGET='vChewing'
login_user=`/usr/bin/stat -f%Su /dev/console`
# First, copy the wrongfully installed contents to the right location:
cp -r /Library/Input\ Methods/vChewing.app /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/ || true
cp -r /Library/Keyboard\ Layouts/vChewing* /Users/$(stat -f%Su /dev/console)/Library/Keyboard\ Layouts/ || true
chown "$loggedInUser" /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app || true
chown "$loggedInUser" /Users/$(stat -f%Su /dev/console)/Library/Keyboard\ Layouts/vChewing* || true
cp -r /Library/Input\ Methods/"${TARGET}".app /Users/"${login_user}"/Library/Input\ Methods/ || true
cp -r /Library/Keyboard\ Layouts/"${TARGET}"* /Users/"${login_user}"/Library/Keyboard\ Layouts/ || true
chown "${login_user}" /Users/"${login_user}"/Library/Input\ Methods/"${TARGET}".app || true
chown "${login_user}" /Users/"${login_user}"/Library/Keyboard\ Layouts/"${TARGET}"* || true
sleep 1
# Second, clean the wrongfully installed contents:
rm -rf /Library/Input\ Methods/vChewing.app || true
rm -rf /Library/Keyboard\ Layouts/vChewing* || true
rm -rf /Library/Input\ Methods/"${TARGET}".app || true
rm -rf /Library/Keyboard\ Layouts/"${TARGET}"* || true
sleep 1
# Finally, register the input method:
/Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing install --all || true
/Users/"${login_user}"/Library/Input\ Methods/"${TARGET}".app/Contents/MacOS/"${TARGET}" install --all || true

View File

@ -1,9 +1,8 @@
#!/bin/sh
loggedInUser=$(stat -f%Su /dev/console)
killall vChewing || true
if [ "$loggedInUser" = root ]; then
if [ "${login_user}" = root ]; then
rm -rf /Library/Input\ Methods/vChewing.app || true
rm -rf /Library/Keyboard\ Layouts/vChewingKeyLayout.bundle || true
rm -rf /Library/Keyboard\ Layouts/vChewing\ Dachen.keylayout || true

View File

@ -1,9 +1,11 @@
注意事项:
一、macOS 10.x-11.x 系统有 Bug、令该安装程式无法自动将安装目标设为当前使用者资料夹。如果您在 macOS 12 Monterey 之前的系统安装该输入法的话,请务必「手动」将安装目的地设为当前使用者资料夹。否则,当您今后(在升级系统之后)升级输入法的时候,可能会出现各种混乱情况。下述终端指令可修复这类混乱情况:
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
该指令会将任何安装到错误位置的档案全部删除。
一、macOS 10.x-11.x 系统有 Bug、令该安装程式无法自动将安装目标设为当前使用者资料夹。如果您在 macOS 12 Monterey 之前的系统安装该输入法的话,请务必「手动」将安装目的地设为当前使用者资料夹。否则,当您今后(在升级系统之后)升级输入法的时候,可能会出现各种混乱情况。下述 sudo 指令会将任何安装到错误位置的档案全部移除。如果不用 sudo 的话,反而会将安装到正确位置的输入法档案给移除掉,所以请认真使用:
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
二、安装完毕之后,如果输入法无法正常使用的话,请重新登入即可。
三、终端部署指令(不限作业系统版本):
installer -pkg ~/Downloads/vChewing-macOS-?.?.?-unsigned.pkg -target CurrentUserHomeDirectory
顺颂时祺
威注音输入法

View File

@ -1,9 +1,11 @@
注意事項:
一、macOS 10.x-11.x 系統有 Bug、令該安裝程式無法自動將安裝目標設為當前使用者資料夾。如果您在 macOS 12 Monterey 之前的系統安裝該輸入法的話,請務必「手動」將安裝目的地設為當前使用者資料夾。否則,當您今後(在升級系統之後)升級輸入法的時候,可能會出現各種混亂情況。下述終端指令可修復這類混亂情況:
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
該指令會將任何安裝到錯誤位置的檔案全部刪除。
一、macOS 10.x-11.x 系統有 Bug、令該安裝程式無法自動將安裝目標設為當前使用者資料夾。如果您在 macOS 12 Monterey 之前的系統安裝該輸入法的話,請務必「手動」將安裝目的地設為當前使用者資料夾。否則,當您今後(在升級系統之後)升級輸入法的時候,可能會出現各種混亂情況。下述 sudo 指令會將任何安裝到錯誤位置的檔案全部移除。如果不用 sudo 的話,反而會將安裝到正確位置的輸入法檔案給移除掉,所以請認真使用:
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
二、安裝完畢之後,如果輸入法無法正常使用的話,請重新登入即可。
三、終端部署指令(不限作業系統版本):
installer -pkg ~/Downloads/vChewing-macOS-?.?.?-unsigned.pkg -target CurrentUserHomeDirectory
順頌時祺
威注音輸入法

View File

@ -1,9 +1,11 @@
Notice:
1. Due to a bug in macOS 10.x and 11.x, if you are trying to install this input method on macOS releases earlier than macOS 12 Monterey, PLEASE manually choose the install target to the user folder. Otherwise, there will be problems when you are trying to install this input method to later versions when your OS gets upgraded to macOS 12 Monterey or later. The following terminal command can solve such probelems by removing all incorrectly-installed files (must use sudo to avoid the removal of the correctly-installled files):
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
Due to a bug in macOS 10.x and 11.x, if you are trying to install this input method on macOS releases earlier than macOS 12 Monterey, PLEASE manually choose the install target to the user folder. Otherwise, there will be problems when you are trying to install this input method to later versions when your OS gets upgraded to macOS 12 Monterey or later.
2. Feel free to logout and re-login if the input method doesn't work after installation.
The following terminal command can solve such probelems by removing all incorrectly-installed files:
3. IT maintainers can also use this terminal deploy command, regardless the macOS version:
installer -pkg ~/Downloads/vChewing-macOS-?.?.?-unsigned.pkg -target CurrentUserHomeDirectory
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
Also, feel free to logout and re-login if the input method doesn't work after installation.
Warm Regards,
vChewing Input Method

View File

@ -1,11 +1,12 @@
ご注意:
 macOS 12 Monterey 以前の OSmacOS 10.x-11.xのバグのため、macOS 10.x-11.x でインストールする場合、この入力アプリ必ずご自分でユーザーフォルダをインストール先と設定してください。然もないと、いずれ macOS 12 にアップデートし、この入力アプリのもっと新しいバージョンをインストールする時に、予測できない支障が生ずる恐れがあります。下記のターミナル指令を(必ず下記のまま sudo で)実行すれば、この様な支障を解決することができます:
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
⚠︎ 間違ったところへ実装したファイルだけは消されますが、もし sudo 使わずに実行すると、逆に正しく実装されたファイルは消されます。
macOS 12 Monterey 以前の OSmacOS 10.x-11.xのバグのため、macOS 10.x-11.x でインストールする場合、この入力アプリ必ずご自分でユーザーフォルダをインストール先と設定してください。然もないと、いずれ macOS 12 にアップデートし、この入力アプリのもっと新しいバージョンをインストールする時に、予測できない支障が生ずる恐れがあります。下記のターミナル指令を実行すれば、この様な支障を解決することができます:
● そして、インストール直後、入力アプリがうまく使えない場合、再ログインすれば済ませることです。
sudo /Users/$(stat -f%Su /dev/console)/Library/Input\ Methods/vChewing.app/Contents/MacOS/vChewing uninstall
これで、間違ったところへ実装したファイルだけは消されます。
そして、インストール直後、入力アプリがうまく使えない場合、再ログインすれば済ませることです。
 あと、IT 担当者は、Terminal で実装したい場合、OS バージョンを問わずに、下記の指令をご参考ください:
installer -pkg ~/Downloads/vChewing-macOS-?.?.?-unsigned.pkg -target CurrentUserHomeDirectory
よろしくお願いいたします。
威注音入力アプリ

@ -1 +1 @@
Subproject commit 2c734867fe31b592c69a5b8f30008c4902800233
Subproject commit 29182ac2c5088e36842adc3b32a3ccbfbb2ae762

View File

@ -28,33 +28,66 @@ import Cocoa
// Use KeyCodes as much as possible since its recognition won't be affected by macOS Base Keyboard Layouts.
// KeyCodes: https://eastmanreference.com/complete-list-of-applescript-key-codes
// Also: HIToolbox.framework/Versions/A/Headers/Events.h
@objc enum KeyCode: UInt16 {
case none = 0
case space = 49
case backSpace = 51
case esc = 53
case tab = 48
case enterLF = 76
case enterCR = 36
case up = 126
case down = 125
case left = 123
case right = 124
case pageUp = 116
case pageDown = 121
case home = 115
case end = 119
case delete = 117
case leftShift = 56
case rightShift = 60
case capsLock = 57
case symbolMenuPhysicalKey = 50
case kNone = 0
case kCarriageReturn = 36 // Renamed from "kReturn" to avoid nomenclatural confusions.
case kTab = 48
case kSpace = 49
case kSymbolMenuPhysicalKey = 50 // vChewing Specific
case kBackSpace = 51 // Renamed from "kDelete" to avoid nomenclatural confusions.
case kEscape = 53
case kCommand = 55
case kShift = 56
case kCapsLock = 57
case kOption = 58
case kControl = 59
case kRightShift = 60
case kRightOption = 61
case kRightControl = 62
case kFunction = 63
case kF17 = 64
case kVolumeUp = 72
case kVolumeDown = 73
case kMute = 74
case kLineFeed = 76 // Another keyCode to identify the Enter Key.
case kF18 = 79
case kF19 = 80
case kF20 = 90
case kF5 = 96
case kF6 = 97
case kF7 = 98
case kF3 = 99
case kF8 = 100
case kF9 = 101
case kF11 = 103
case kF13 = 105
case kF16 = 106
case kF14 = 107
case kF10 = 109
case kF12 = 111
case kF15 = 113
case kHelp = 114
case kHome = 115
case kPageUp = 116
case kWindowDelete = 117 // Renamed from "kForwardDelete" to avoid nomenclatural confusions.
case kF4 = 118
case kEnd = 119
case kF2 = 120
case kPageDown = 121
case kF1 = 122
case kLeftArrow = 123
case kRightArrow = 124
case kDownArrow = 125
case kUpArrow = 126
}
// CharCodes: https://theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
enum CharCode: UInt /*16*/ {
case yajuusenpai = 1_145_141_919_810_893
// - CharCode is not reliable at all. KeyCode is the most accurate. KeyCode doesn't give a phuque about the character sent through macOS keyboard layouts but only focuses on which physical key is pressed.
case yajuusenpai = 114_514_19_19_810_893
// CharCode is not reliable at all. KeyCode is the most appropriate choice due to its accuracy.
// KeyCode doesn't give a phuque about the character sent through macOS keyboard layouts ...
// ... but only focuses on which physical key is pressed.
}
class keyParser: NSObject {
@ -82,19 +115,20 @@ class keyParser: NSObject {
inputTextIgnoringModifiers ?? inputText)
self.inputText = inputText
self.inputTextIgnoringModifiers = inputTextIgnoringModifiers
self.keyCode = keyCode
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
self.flags = flags
self.isFlagChanged = false
useVerticalMode = isVerticalMode
self.keyCode = keyCode
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
emacsKey = EmacsKeyHelper.detect(
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: flags)
cursorForwardKey = useVerticalMode ? .down : .right
cursorBackwardKey = useVerticalMode ? .up : .left
extraChooseCandidateKey = useVerticalMode ? .left : .down
extraChooseCandidateKeyReverse = useVerticalMode ? .right : .up
absorbedArrowKey = useVerticalMode ? .right : .up
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .none
// Define Arrow Keys
cursorForwardKey = useVerticalMode ? .kDownArrow : .kRightArrow
cursorBackwardKey = useVerticalMode ? .kUpArrow : .kLeftArrow
extraChooseCandidateKey = useVerticalMode ? .kLeftArrow : .kDownArrow
extraChooseCandidateKeyReverse = useVerticalMode ? .kRightArrow : .kUpArrow
absorbedArrowKey = useVerticalMode ? .kRightArrow : .kUpArrow
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .kNone
super.init()
}
@ -115,13 +149,14 @@ class keyParser: NSObject {
}()
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
emacsKey = EmacsKeyHelper.detect(
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: event.modifierFlags)
cursorForwardKey = useVerticalMode ? .down : .right
cursorBackwardKey = useVerticalMode ? .up : .left
extraChooseCandidateKey = useVerticalMode ? .left : .down
extraChooseCandidateKeyReverse = useVerticalMode ? .right : .up
absorbedArrowKey = useVerticalMode ? .right : .up
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .none
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: flags)
// Define Arrow Keys in the same way above.
cursorForwardKey = useVerticalMode ? .kDownArrow : .kRightArrow
cursorBackwardKey = useVerticalMode ? .kUpArrow : .kLeftArrow
extraChooseCandidateKey = useVerticalMode ? .kLeftArrow : .kDownArrow
extraChooseCandidateKeyReverse = useVerticalMode ? .kRightArrow : .kUpArrow
absorbedArrowKey = useVerticalMode ? .kRightArrow : .kUpArrow
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .kNone
super.init()
}
@ -174,64 +209,64 @@ class keyParser: NSObject {
guard let code = KeyCode(rawValue: keyCode) else {
return false
}
return code.rawValue != KeyCode.none.rawValue
return code.rawValue != KeyCode.kNone.rawValue
}
@objc var isTab: Bool {
KeyCode(rawValue: keyCode) == KeyCode.tab
KeyCode(rawValue: keyCode) == KeyCode.kTab
}
@objc var isEnter: Bool {
(KeyCode(rawValue: keyCode) == KeyCode.enterCR)
|| (KeyCode(rawValue: keyCode) == KeyCode.enterLF)
(KeyCode(rawValue: keyCode) == KeyCode.kCarriageReturn)
|| (KeyCode(rawValue: keyCode) == KeyCode.kLineFeed)
}
@objc var isUp: Bool {
KeyCode(rawValue: keyCode) == KeyCode.up
KeyCode(rawValue: keyCode) == KeyCode.kUpArrow
}
@objc var isDown: Bool {
KeyCode(rawValue: keyCode) == KeyCode.down
KeyCode(rawValue: keyCode) == KeyCode.kDownArrow
}
@objc var isLeft: Bool {
KeyCode(rawValue: keyCode) == KeyCode.left
KeyCode(rawValue: keyCode) == KeyCode.kLeftArrow
}
@objc var isRight: Bool {
KeyCode(rawValue: keyCode) == KeyCode.right
KeyCode(rawValue: keyCode) == KeyCode.kRightArrow
}
@objc var isPageUp: Bool {
KeyCode(rawValue: keyCode) == KeyCode.pageUp
KeyCode(rawValue: keyCode) == KeyCode.kPageUp
}
@objc var isPageDown: Bool {
KeyCode(rawValue: keyCode) == KeyCode.pageDown
KeyCode(rawValue: keyCode) == KeyCode.kPageDown
}
@objc var isSpace: Bool {
KeyCode(rawValue: keyCode) == KeyCode.space
KeyCode(rawValue: keyCode) == KeyCode.kSpace
}
@objc var isBackSpace: Bool {
KeyCode(rawValue: keyCode) == KeyCode.backSpace
KeyCode(rawValue: keyCode) == KeyCode.kBackSpace
}
@objc var isESC: Bool {
KeyCode(rawValue: keyCode) == KeyCode.esc
KeyCode(rawValue: keyCode) == KeyCode.kEscape
}
@objc var isHome: Bool {
KeyCode(rawValue: keyCode) == KeyCode.home
KeyCode(rawValue: keyCode) == KeyCode.kHome
}
@objc var isEnd: Bool {
KeyCode(rawValue: keyCode) == KeyCode.end
KeyCode(rawValue: keyCode) == KeyCode.kEnd
}
@objc var isDelete: Bool {
KeyCode(rawValue: keyCode) == KeyCode.delete
KeyCode(rawValue: keyCode) == KeyCode.kWindowDelete
}
@objc var isCursorBackward: Bool {
@ -266,7 +301,7 @@ class keyParser: NSObject {
@objc var isSymbolMenuPhysicalKey: Bool {
// KeyCode macOS Apple
// ![input isShift] 使 Shift
KeyCode(rawValue: keyCode) == KeyCode.symbolMenuPhysicalKey
KeyCode(rawValue: keyCode) == KeyCode.kSymbolMenuPhysicalKey
}
}

View File

@ -51,8 +51,8 @@
"zh-Hant" = "Traditional Chinese";
"ja" = "Japanese";
"Alphanumerical Input Mode" = "Alphanumerical Input Mode";
"Apple Zhuyin Bopomofo" = "Apple Zhuyin Bopomofo (Standard)";
"Apple Zhuyin Eten" = "Apple Zhuyin Eten";
"Apple Zhuyin Bopomofo (Dachen)" = "Apple Zhuyin Bopomofo (Standard)";
"Apple Zhuyin Eten (Traditional)" = "Apple Zhuyin Eten (Traditional)";
"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.";

View File

@ -51,8 +51,8 @@
"zh-Hant" = "Traditional Chinese";
"ja" = "Japanese";
"Alphanumerical Input Mode" = "Alphanumerical Input Mode";
"Apple Zhuyin Bopomofo" = "Apple Zhuyin Bopomofo (Standard)";
"Apple Zhuyin Eten" = "Apple Zhuyin Eten";
"Apple Zhuyin Bopomofo (Dachen)" = "Apple Zhuyin Bopomofo (Standard)";
"Apple Zhuyin Eten (Traditional)" = "Apple Zhuyin Eten (Traditional)";
"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.";

View File

@ -51,8 +51,8 @@
"zh-Hant" = "繁體中国語";
"ja" = "和語";
"Alphanumerical Input Mode" = "英数入力モード";
"Apple Zhuyin Bopomofo" = "Apple 注音ボポモフォ(大千標準)";
"Apple Zhuyin Eten" = "Apple 注音ボポモフォ(倚天伝統)";
"Apple Zhuyin Bopomofo (Dachen)" = "Apple 注音ボポモフォ(大千標準)";
"Apple Zhuyin Eten (Traditional)" = "Apple 注音ボポモフォ(倚天伝統)";
"Symbol & Emoji Input" = "符号&絵文字入力";
"Edit User Symbol & Emoji Data…" = "ユーザー符号&絵文字辞書を編集…";
"Choose your desired user data folder." = "欲しがるユーザー辞書フォルダをお選びください。";

View File

@ -51,8 +51,8 @@
"zh-Hant" = "繁体中文";
"ja" = "和文";
"Alphanumerical Input Mode" = "原生英数输入模式";
"Apple Zhuyin Bopomofo" = "Apple 标准注音键盘布局";
"Apple Zhuyin Eten" = "Apple 倚天注音键盘布局";
"Apple Zhuyin Bopomofo (Dachen)" = "Apple 标准注音键盘布局 (大千)";
"Apple Zhuyin Eten (Traditional)" = "Apple 倚天注音键盘布局 (传统)";
"Symbol & Emoji Input" = "符号&绘文字输入";
"Edit User Symbol & Emoji Data…" = "编辑自订符号&绘文字资料…";
"Choose your desired user data folder." = "请选择您想指定的使用者语汇档案目录。";

View File

@ -51,8 +51,8 @@
"zh-Hant" = "繁體中文";
"ja" = "和文";
"Alphanumerical Input Mode" = "原生英數輸入模式";
"Apple Zhuyin Bopomofo" = "Apple 標準注音鍵盤佈局";
"Apple Zhuyin Eten" = "Apple 倚天注音鍵盤佈局";
"Apple Zhuyin Bopomofo (Dachen)" = "Apple 標準注音鍵盤佈局 (大千)";
"Apple Zhuyin Eten (Traditional)" = "Apple 倚天注音鍵盤佈局 (傳統)";
"Symbol & Emoji Input" = "符號&繪文字輸入";
"Edit User Symbol & Emoji Data…" = "編輯自訂符號&繪文字資料…";
"Choose your desired user data folder." = "請選擇您想指定的使用者語彙檔案目錄。";

View File

@ -89,14 +89,14 @@ extension RangeReplaceableCollection where Element: Hashable {
let itmAppleZhuyinBopomofo = NSMenuItem()
itmAppleZhuyinBopomofo.title = String(
format: NSLocalizedString("Apple Zhuyin Bopomofo", comment: ""))
format: NSLocalizedString("Apple Zhuyin Bopomofo (Dachen)", comment: ""))
itmAppleZhuyinBopomofo.representedObject = String(
"com.apple.keylayout.ZhuyinBopomofo")
basisKeyboardLayoutButton.menu?.addItem(itmAppleZhuyinBopomofo)
let itmAppleZhuyinEten = NSMenuItem()
itmAppleZhuyinEten.title = String(
format: NSLocalizedString("Apple Zhuyin Eten", comment: ""))
format: NSLocalizedString("Apple Zhuyin Eten (Traditional)", comment: ""))
itmAppleZhuyinEten.representedObject = String("com.apple.keylayout.ZhuyinEten")
basisKeyboardLayoutButton.menu?.addItem(itmAppleZhuyinEten)

View File

@ -1,189 +0,0 @@
/* Class = "NSWindow"; title = "vChewing Preferences"; ObjectID = "1"; */
"1.title" = "vChewing Preferences";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "5"; */
"5.title" = "OtherViews";
/* Class = "NSMenuItem"; title = "Standard"; ObjectID = "6"; */
"6.title" = "Standard";
/* Class = "NSMenuItem"; title = "ETen"; ObjectID = "7"; */
"7.title" = "ETen";
/* Class = "NSMenuItem"; title = "Hsu"; ObjectID = "8"; */
"8.title" = "Hsu";
/* Class = "NSMenuItem"; title = "ETen26"; ObjectID = "9"; */
"9.title" = "ETen26";
/* Class = "NSMenuItem"; title = "Hanyu Pinyin"; ObjectID = "10"; */
"10.title" = "Hanyu Pinyin";
/* Class = "NSTextFieldCell"; title = "Bopomofo:"; ObjectID = "12"; */
"12.title" = "Bopomofo:";
/* 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 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 = "Radio"; ObjectID = "18"; */
"18.title" = "Radio";
/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "20"; */
"20.title" = "Radio";
/* Class = "NSButtonCell"; title = "Horizontal"; ObjectID = "21"; */
"21.title" = "Horizontal";
/* Class = "NSButtonCell"; title = "Vertical"; ObjectID = "22"; */
"22.title" = "Vertical";
/* Class = "NSTextFieldCell"; title = "Candidate List Layout:"; ObjectID = "24"; */
"24.title" = "Candidate List Layout:";
/* Class = "NSTextFieldCell"; title = "Candidate UI font size:"; ObjectID = "29"; */
"29.title" = "Candidate UI font size:";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "92"; */
"92.title" = "OtherViews";
/* Class = "NSMenuItem"; title = "12"; ObjectID = "93"; */
"93.title" = "12";
/* Class = "NSMenuItem"; title = "14"; ObjectID = "94"; */
"94.title" = "14";
/* Class = "NSMenuItem"; title = "16"; ObjectID = "95"; */
"95.title" = "16";
/* Class = "NSMenuItem"; title = "18"; ObjectID = "96"; */
"96.title" = "18";
/* Class = "NSMenuItem"; title = "24"; ObjectID = "98"; */
"98.title" = "24";
/* Class = "NSMenuItem"; title = "32"; ObjectID = "99"; */
"99.title" = "32";
/* Class = "NSMenuItem"; title = "64"; ObjectID = "100"; */
"100.title" = "64";
/* Class = "NSMenuItem"; title = "96"; ObjectID = "101"; */
"101.title" = "96";
/* Class = "NSButtonCell"; title = "Enable SPACE key for calling candidate window"; ObjectID = "110"; */
"110.title" = "Enable SPACE key for calling candidate window";
/* Class = "NSTextFieldCell"; title = "Alphanumeric:"; ObjectID = "126"; */
"126.title" = "Alphanumeric:";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "128"; */
"128.title" = "OtherViews";
/* Class = "NSMenuItem"; title = "IBM"; ObjectID = "137"; */
"137.title" = "IBM";
/* Class = "NSTabViewItem"; label = "Keyboard"; ObjectID = "1AW-xf-c2f"; */
"1AW-xf-c2f.label" = "Keyboard";
/* Class = "NSBox"; title = "General Settings"; ObjectID = "2Y6-Am-WM1"; */
"2Y6-Am-WM1.title" = "General Settings";
/* Class = "NSTextFieldCell"; title = "Choose which keys you prefer for selecting candidates."; ObjectID = "2pS-nv-te4"; */
"2pS-nv-te4.title" = "Choose which keys you prefer for selecting candidates.";
/* Class = "NSButtonCell"; title = "Stop farting (when typed phonetic combination is invalid, etc.)"; ObjectID = "62u-jY-BRh"; */
"62u-jY-BRh.title" = "Stop farting (when typed phonetic combination is invalid, etc.)";
/* Class = "NSTextFieldCell"; title = "UI language setting:"; ObjectID = "9DS-Rc-TXq"; */
"9DS-Rc-TXq.title" = "UI language setting:";
/* Class = "NSButtonCell"; title = "Emulating select-candidate-per-character mode"; ObjectID = "ArK-Vk-OoT"; */
"ArK-Vk-OoT.title" = "Emulating select-candidate-per-character mode";
/* Class = "NSButtonCell"; title = "Auto-convert traditional Chinese glyphs to KangXi characters"; ObjectID = "BSK-bH-Gct"; */
"BSK-bH-Gct.title" = "Auto-convert traditional Chinese glyphs to KangXi characters";
/* Class = "NSBox"; title = "Advanced Settings"; ObjectID = "E1l-m8-xgb"; */
"E1l-m8-xgb.title" = "Advanced Settings";
/* Class = "NSMenuItem"; title = "English"; ObjectID = "FSG-lN-CJO"; */
"FSG-lN-CJO.title" = "English";
/* Class = "NSTextFieldCell"; title = "Selection Keys:"; ObjectID = "FnD-oH-El5"; */
"FnD-oH-El5.title" = "Selection Keys:";
/* Class = "NSMenuItem"; title = "Auto-Select"; ObjectID = "GlJ-Ns-9eE"; */
"GlJ-Ns-9eE.title" = "Auto-Select";
/* Class = "NSButtonCell"; title = "Sort entries when reloading user phrases and excluded phrases list"; ObjectID = "Li3-Yg-SOC"; */
"Li3-Yg-SOC.title" = "Sort entries when reloading user phrases and excluded phrases list";
/* Class = "NSTabViewItem"; label = "General"; ObjectID = "QUQ-oY-4Hc"; */
"QUQ-oY-4Hc.label" = "General";
/* Class = "NSTextFieldCell"; title = "Choose your preferred keyboard layout."; ObjectID = "RQ6-MS-m4C"; */
"RQ6-MS-m4C.title" = "Choose your preferred keyboard layout.";
/* Class = "NSMenuItem"; title = "Traditional Chinese"; ObjectID = "TXr-FF-ehw"; */
"TXr-FF-ehw.title" = "Traditional Chinese";
/* Class = "NSBox"; title = "Output Settings"; ObjectID = "Uyz-xL-TVN"; */
"Uyz-xL-TVN.title" = "Output Settings";
/* Class = "NSButtonCell"; title = "Enable CNS11643 Support (2022-01-07)"; ObjectID = "W24-T4-cg0"; */
"W24-T4-cg0.title" = "Enable CNS11643 Support (2022-01-07)";
/* Class = "NSBox"; title = "Keyboard Layout"; ObjectID = "Wvt-HE-LOv"; */
"Wvt-HE-LOv.title" = "Keyboard Layout";
/* Class = "NSButtonCell"; title = "Check for updates automatically"; ObjectID = "Z9t-P0-BLF"; */
"Z9t-P0-BLF.title" = "Check for updates automatically";
/* Class = "NSTextFieldCell"; title = "Change user interface language (will reboot the IME)."; ObjectID = "ZEv-Q2-mYL"; */
"ZEv-Q2-mYL.title" = "Change user interface language (will reboot the IME).";
/* Class = "NSMenuItem"; title = "Simplified Chinese"; ObjectID = "akC-2g-ybz"; */
"akC-2g-ybz.title" = "Simplified Chinese";
/* Class = "NSButtonCell"; title = "Use ESC key to clear entire input buffer"; ObjectID = "f2j-xD-4xK"; */
"f2j-xD-4xK.title" = "Use ESC key to clear entire input buffer";
/* Class = "NSButtonCell"; title = "Automatically reload user data files if changes detected"; ObjectID = "f8i-69-zxm"; */
"f8i-69-zxm.title" = "Automatically reload user data files if changes detected";
/* Class = "NSTextFieldCell"; title = "Change UI font size of candidate window for a better visual clarity."; ObjectID = "iRg-wx-Nx2"; */
"iRg-wx-Nx2.title" = "Change UI font size of candidate window for a better visual clarity.";
/* Class = "NSTextFieldCell"; title = "Define your preferred action when user data files reload."; ObjectID = "j48-5a-cEs"; */
"j48-5a-cEs.title" = "Define your preferred action when user data files reload.";
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[0] = "Item 1"; ObjectID = "jQC-12-UuK"; */
"jQC-12-UuK.ibShadowedObjectValues[0]" = "Item 1";
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[1] = "Item 2"; ObjectID = "jQC-12-UuK"; */
"jQC-12-UuK.ibShadowedObjectValues[1]" = "Item 2";
/* Class = "NSComboBoxCell"; jQC-12-UuK.ibShadowedObjectValues[2] = "Item 3"; ObjectID = "jQC-12-UuK"; */
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
/* Class = "NSButtonCell"; title = "Sort entries when reloading the phrase replacement map"; ObjectID = "o60-vW-i1B"; */
"o60-vW-i1B.title" = "Sort entries when reloading the phrase replacement map";
/* Class = "NSMenuItem"; title = "Japanese"; ObjectID = "rVQ-Hx-cGi"; */
"rVQ-Hx-cGi.title" = "Japanese";
/* Class = "NSBox"; title = "Dictionary Settings"; ObjectID = "s4r-ji-vbr"; */
"s4r-ji-vbr.title" = "Dictionary Settings";
/* Class = "NSTextFieldCell"; title = "Choose your preferred layout of the candidate window."; ObjectID = "xC5-yV-1W1"; */
"xC5-yV-1W1.title" = "Choose your preferred layout of the candidate window.";
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "xrE-8T-WKO"; */
"xrE-8T-WKO.label" = "Advanced";

View File

@ -747,7 +747,7 @@
<key>BACKGROUND</key>
<dict>
<key>ALIGNMENT</key>
<integer>6</integer>
<integer>0</integer>
<key>APPAREANCES</key>
<dict>
<key>DARK_AQUA</key>
@ -771,11 +771,11 @@
<key>LIGHT_AQUA</key>
<dict>
<key>ALIGNMENT</key>
<integer>6</integer>
<integer>0</integer>
<key>BACKGROUND_PATH</key>
<dict>
<key>PATH</key>
<string>Source/Resources/Images/Images.xcassets/AppIcon.appiconset/128X128.png</string>
<string>Installer/InstallerBg.png</string>
<key>PATH_TYPE</key>
<integer>1</integer>
</dict>
@ -784,13 +784,13 @@
<key>LAYOUT_DIRECTION</key>
<integer>0</integer>
<key>SCALING</key>
<integer>2</integer>
<integer>1</integer>
</dict>
</dict>
<key>BACKGROUND_PATH</key>
<dict>
<key>PATH</key>
<string>Source/Resources/Images/Images.xcassets/AppIcon.appiconset/128X128.png</string>
<string>Installer/InstallerBg.png</string>
<key>PATH_TYPE</key>
<integer>1</integer>
</dict>
@ -799,7 +799,7 @@
<key>LAYOUT_DIRECTION</key>
<integer>0</integer>
<key>SCALING</key>
<integer>2</integer>
<integer>1</integer>
<key>SHARED_SETTINGS_FOR_ALL_APPAREANCES</key>
<true/>
</dict>

View File

@ -132,7 +132,7 @@
5B04305627B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
5B04305727B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
5B04305827B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/frmAboutWindow.strings"; sourceTree = "<group>"; };
5B04305927B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings"; sourceTree = "<group>"; };
5B04305927B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = ja.lproj/frmPrefWindow.strings; sourceTree = "<group>"; };
5B04305B27B529D900CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/frmAboutWindow.strings"; sourceTree = "<group>"; };
5B04305C27B529D900CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
5B04305D27B529D900CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
@ -142,7 +142,7 @@
5B04306127B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
5B04306227B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
5B04306327B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/frmAboutWindow.strings; sourceTree = "<group>"; };
5B04306427B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Source/WindowNIBs/ja.lproj/frmPrefWindow.strings; sourceTree = "<group>"; };
5B04306427B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = "zh-Hans.lproj/frmPrefWindow.strings"; sourceTree = "<group>"; };
5B04306527B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/frmAboutWindow.strings; sourceTree = "<group>"; };
5B04306627B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
5B04306727B5312E00CB65BC /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = "<group>"; };
@ -185,8 +185,8 @@
5B7111C727DEF9FF00444310 /* UserSymbolLM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserSymbolLM.h; sourceTree = "<group>"; };
5B73FB5427B2BD6900E9BF49 /* PhraseEditor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "PhraseEditor-Info.plist"; path = "UserPhraseEditor/PhraseEditor-Info.plist"; sourceTree = SOURCE_ROOT; };
5B73FB5F27B2BE1300E9BF49 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
5B7BC4AF27AFFBE800F66C24 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Source/WindowNIBs/Base.lproj/frmPrefWindow.xib; sourceTree = "<group>"; };
5B7BC4B227AFFC0B00F66C24 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Source/WindowNIBs/en.lproj/frmPrefWindow.strings; sourceTree = "<group>"; };
5B7BC4AF27AFFBE800F66C24 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/frmPrefWindow.xib; sourceTree = "<group>"; };
5B7BC4B227AFFC0B00F66C24 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/frmPrefWindow.strings; sourceTree = "<group>"; };
5B8F43ED27C9BC220069AC27 /* SymbolLM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SymbolLM.h; sourceTree = "<group>"; };
5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ctlInputMethod_Menu.swift; sourceTree = "<group>"; };
5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = "<group>"; };
@ -214,7 +214,7 @@
5BD05C6527B2BBEF004C4F1D /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
5BDCBB4227B4F6C600D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MainMenu.strings"; sourceTree = "<group>"; };
5BDCBB4327B4F6C600D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/frmAboutWindow.strings"; sourceTree = "<group>"; };
5BDCBB4527B4F6C600D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings"; sourceTree = "<group>"; };
5BDCBB4527B4F6C600D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/frmPrefWindow.strings"; sourceTree = "<group>"; };
5BDCBB4727B4F6C600D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
5BDCBB4827B4F6C600D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = "<group>"; };
5BDCBB4927B4F6C700D0CC59 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
@ -412,6 +412,7 @@
children = (
D4A13D5927A59D5C003BE359 /* ctlInputMethod.swift */,
5BB802D927FABA8300CF1C19 /* ctlInputMethod_Menu.swift */,
5B5E535127EF261400C6AA1E /* IME.swift */,
5B62A33127AE792F00A19448 /* InputSourceHelper.swift */,
5B62A33527AE795800A19448 /* mgrPrefs.swift */,
);
@ -680,7 +681,6 @@
isa = PBXGroup;
children = (
D427F76B278CA1BA004A2160 /* AppDelegate.swift */,
5B5E535127EF261400C6AA1E /* IME.swift */,
D47B92BF27972AC800458394 /* main.swift */,
5B62A31F27AE74E900A19448 /* ControllerModules */,
5B62A32127AE755D00A19448 /* FileHandlers */,