Какао: выучить выбранную раскладку клавиатуры - PullRequest
5 голосов
/ 23 апреля 2009

Как узнать выбранную в настоящее время раскладку клавиатуры / язык ввода?

Я играл с NSInputManager, но ничего не смог достичь.

[NSInputManager currentInputManager]

возвращает (ноль) (как сообщается с% @) и, таким образом,

[[NSInputManager currentInputManager] localizedInputManagerName]

Было бы лучше, если бы я вернул двухбуквенное сокращение языка, такого как EN или FR, но имя раскладки клавиатуры, отображаемое в меню, также будет работать.

Есть идеи? Спасибо.

Редактировать: Я также узнал, что AppleSelectedInputSourcesChangedNotification отправляется в

[NSDistributedNotificationCenter defaultCenter]

когда пользователь меняет макет, однако информация о вновь выбранном макете «прикрепляется» к этому уведомлению.

1 Ответ

13 голосов
/ 23 апреля 2009

Раскладка клавиатуры для языковых комбинаций, как правило, однозначная, поэтому, хотя вы можете получить локализованное имя текущей выбранной раскладки клавиатуры (или, в более общем случае, источник ввода), источник можно использовать для ввода текста много языков. Почему вы хотите это сделать?

При этом вы можете получить информацию о текущем источнике ввода текста, используя Службы ввода текста . Например:

  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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...