diff --git a/Source/Base.lproj/preferences.xib b/Source/Base.lproj/preferences.xib
index f5922a7b..8d6483fd 100644
--- a/Source/Base.lproj/preferences.xib
+++ b/Source/Base.lproj/preferences.xib
@@ -11,6 +11,7 @@
+
@@ -106,6 +107,9 @@
+
+
+
diff --git a/Source/PreferencesModule.swift b/Source/PreferencesModule.swift
index ba583745..cd6267df 100644
--- a/Source/PreferencesModule.swift
+++ b/Source/PreferencesModule.swift
@@ -13,6 +13,7 @@ private let kBasisKeyboardLayoutPreferenceKey = "BasisKeyboardLayout" // alphan
private let kFunctionKeyKeyboardLayoutPreferenceKey = "FunctionKeyKeyboardLayout" // alphanumeric ("ASCII") input basi
private let kFunctionKeyKeyboardLayoutOverrideIncludeShiftKey = "FunctionKeyKeyboardLayoutOverrideIncludeShift" // whether include shif
private let kCandidateListTextSizeKey = "CandidateListTextSize"
+private let kAppleLanguagesPreferencesKey = "AppleLanguages"
private let kSelectPhraseAfterCursorAsCandidatePreferenceKey = "SelectPhraseAfterCursorAsCandidate"
private let kUseHorizontalCandidateListPreferenceKey = "UseHorizontalCandidateList"
private let kComposingBufferSizePreferenceKey = "ComposingBufferSize"
@@ -172,6 +173,7 @@ struct ComposingBufferSize {
defaults.removeObject(forKey: kFunctionKeyKeyboardLayoutPreferenceKey)
defaults.removeObject(forKey: kFunctionKeyKeyboardLayoutOverrideIncludeShiftKey)
defaults.removeObject(forKey: kCandidateListTextSizeKey)
+ defaults.removeObject(forKey: kAppleLanguagesPreferencesKey)
defaults.removeObject(forKey: kSelectPhraseAfterCursorAsCandidatePreferenceKey)
defaults.removeObject(forKey: kUseHorizontalCandidateListPreferenceKey)
defaults.removeObject(forKey: kComposingBufferSizePreferenceKey)
@@ -189,6 +191,9 @@ struct ComposingBufferSize {
defaults.removeObject(forKey: kMaxCandidateLength)
defaults.removeObject(forKey: kShouldNotFartInLieuOfBeep)
}
+
+ @UserDefault(key: kAppleLanguagesPreferencesKey, defaultValue: [])
+ @objc static var appleLanguages: Array
@UserDefault(key: kKeyboardLayoutPreferenceKey, defaultValue: 0)
@objc static var keyboardLayout: Int
diff --git a/Source/PreferencesWindowController.swift b/Source/PreferencesWindowController.swift
index d2f41522..0da4c332 100644
--- a/Source/PreferencesWindowController.swift
+++ b/Source/PreferencesWindowController.swift
@@ -22,11 +22,40 @@ extension RangeReplaceableCollection where Element: Hashable {
// the "InputMethodServerPreferencesWindowControllerClass" in Info.plist.
@objc(PreferencesWindowController) class PreferencesWindowController: NSWindowController {
@IBOutlet weak var fontSizePopUpButton: NSPopUpButton!
+ @IBOutlet weak var uiLanguageButton: NSPopUpButton!
@IBOutlet weak var basisKeyboardLayoutButton: NSPopUpButton!
@IBOutlet weak var selectionKeyComboBox: NSComboBox!
@IBOutlet weak var clickedWhetherIMEShouldNotFartToggle: NSButton!
+
+ var currentLanguageSelectItem: NSMenuItem? = nil
override func awakeFromNib() {
+ let languages = ["auto", "en-US", "zh-CN", "zh-TW", "ja-JP"]
+ var autoSelectItem: NSMenuItem? = nil
+ var chosenLanguageItem: NSMenuItem? = nil
+ uiLanguageButton.menu?.removeAllItems()
+
+ let appleLanguages = Preferences.appleLanguages
+ for language in languages {
+ let menuItem = NSMenuItem()
+ menuItem.title = NSLocalizedString(language, comment: "")
+ menuItem.representedObject = language
+
+ if language == "auto" {
+ autoSelectItem = menuItem
+ }
+
+ if !appleLanguages.isEmpty {
+ if appleLanguages[0] == language {
+ chosenLanguageItem = menuItem
+ }
+ }
+ uiLanguageButton.menu?.addItem(menuItem)
+ }
+
+ currentLanguageSelectItem = chosenLanguageItem ?? autoSelectItem
+ uiLanguageButton.select(currentLanguageSelectItem)
+
let list = TISCreateInputSourceList(nil, true).takeRetainedValue() as! [TISInputSource]
var usKeyboardLayoutItem: NSMenuItem? = nil
var chosenItem: NSMenuItem? = nil
@@ -124,6 +153,25 @@ extension RangeReplaceableCollection where Element: Hashable {
Preferences.basisKeyboardLayout = sourceID
}
}
+
+ @IBAction func updateUiLanguageAction(_ sender: Any) {
+ if let selectItem = uiLanguageButton.selectedItem {
+ if currentLanguageSelectItem == selectItem {
+ return
+ }
+ }
+ if let language = uiLanguageButton.selectedItem?.representedObject as? String {
+ if (language != "auto") {
+ Preferences.appleLanguages = [language]
+ }
+ else {
+ UserDefaults.standard.removeObject(forKey: "AppleLanguages")
+ }
+
+ NSLog("vChewing App self-terminated due to UI language change.")
+ NSApplication.shared.terminate(nil)
+ }
+ }
@IBAction func clickedWhetherIMEShouldNotFartToggleAction(_ sender: Any) {
clsSFX.beep()