【问题标题】:Cocoa: Learn currently selected keyboard layout / input languageCocoa:学习当前选择的键盘布局/输入语言
【发布时间】:2014-07-24 10:20:15
【问题描述】:

如何学习当前选择的键盘布局/输入语言?

我在玩 NSInputManager,但什么都做不了。

[NSInputManager currentInputManager]

返回 (null)(与 %@ 一起报告),因此

[[NSInputManager currentInputManager] localizedInputManagerName]

最好只取回所用语言的两个字母缩写,如 EN 或 FR,但菜单栏中显示的键盘布局名称也可以。

有什么想法吗?谢谢。

编辑:我还发现 AppleSelectedInputSourcesChangedNotification 被发布到

[NSDistributedNotificationCenter defaultCenter]

当用户更改布局时,没有关于新选择布局的信息“附加”到此通知。

【问题讨论】:

    标签: cocoa layout input


    【解决方案1】:

    语言组合的键盘布局通常是一对多的,因此虽然您可以获得当前所选键盘布局的本地化名称(或更一般地说,输入源),但该源可用于输入文本许多语言。为什么要这样做?

    也就是说,您可以使用Text Input Source Services 获取有关当前文本输入源的信息。例如:

      TISInputSourceRef source = TISCopyCurrentKeyboardInputSource();
      NSLog(@"languages: %@",
            TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages));
      NSLog(@"localized name: %@",
            TISGetInputSourceProperty(source, kTISPropertyLocalizedName));
    

    给我:

    2009-04-23 14:30:17.581 sample[30688:10b] languages: (
        en,
        ca,
        da,
        de,
        es,
        eu,
        fr,
        ga,
        gl,
        gv,
        id,
        it,
        kw,
        ms,
        nb,
        nl,
        nn,
        om,
        pt,
        so,
        sq,
        sv,
        sw
    )
    2009-04-23 14:30:17.584 sample[30688:10b] localized name: U.S.
    

    【讨论】:

    • 我也尝试过使用这些,但无法编译。你添加了什么框架和什么#imports? :-) 另外,你认为这只有 Carbon 才有可能吗?
    • #import <Carbon/Carbon.h> (或 #include 也可以,因为 Carbon 标头包含保护)。然后您需要在 Xcode 中将 Carbon 框架添加到您的项目中(或者如果您正在编译,请使用 -framework Carbon)。请注意,虽然这在技术上是“Carbon”和“HIToolbox”,但它是 Carbon 和 Cocoa 都与之通信的低级 Carbon,它支持 64 位应用程序并且不会很快消失,所以不要感觉自己用不上。
    • 给出错误:ld: symbol(s) not found for architecture x86_64
    • 这对我有帮助。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2014-02-24
    • 1970-01-01
    • 2015-03-01
    • 2021-10-21
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多