         self.tisInputSource = tisInputSource
         id = InputSource.getProperty(tisInputSource, kTISPropertyInputSourceID)!
         name = InputSource.getProperty(tisInputSource, kTISPropertyLocalizedName)!
+
+        let langs: Array<String> = InputSource.getProperty(tisInputSource, kTISPropertyInputSourceLanguages)!
+        isCJK = langs.contains(where: { $0 == "ko" || $0 == "ja" || $0.hasPrefix("zh") })
 
         let imageURL: URL? = InputSource.getProperty(tisInputSource, kTISPropertyIconImageURL)
         if imageURL != nil {

    }

    func select() {
        let langs = InputSource.getProperty(tisInputSource, kTISPropertyInputSourceLanguages)! as Array<String>

        if langs.contains(where: { $0 == "ko" || $0 == "ja" || $0.hasPrefix("zh") }) {
            // Workaround for TIS CJK layout bug:
            // FIXME: when it's CJK, select English first and then return
            print("CJK")
        } else {
            TISSelectInputSource(tisInputSource)
        }
    }


    let tisInputSource: TISInputSource
    let id: String
    let name: String
    let isCJK: Bool

    var icon: NSImage? = nil

