Cocoa:了解当前选择的键盘布局/输入语言

时间:2009-04-23 13:44:56

标签: cocoa layout input

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

我正在玩NSInputManager,但无法实现任何目标。

[NSInputManager currentInputManager]

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

[[NSInputManager currentInputManager] localizedInputManagerName]

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

有什么想法吗?感谢。

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

[NSDistributedNotificationCenter defaultCenter]

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

1 个答案:

答案 0 :(得分:13)

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

也就是说,您可以使用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.