2016-11-26 2 views
2

Я создаю приложение, которое позволяет пользователям проверять местное время в любом месте по всему миру. Информация извлекается с помощью API Google, и все работает хорошо, но для достижения наилучших результатов мне нужно указать язык, который я хотел бы использовать.Определить текущий язык ввода

Очевидно, что в моем случае имеет смысл установить нужный язык для пользователя, который используется при вводе имени города. На iPhone это очень легко сделать, но я не могу понять, как я могу получить этот код языка на macOS. Может ли кто-нибудь помочь мне, пожалуйста?

Update

После консультации с Лео, я сейчас нахожусь на стадии, когда я получаю вход тока с помощью углеродного каркаса.

let source = TISCopyCurrentKeyboardInputSource().takeUnretainedValue() 
let lang = TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages).assumingMemoryBound(to: NSArray.self).pointee 

Проблема заключается в том, что TISGetInputSourceProperty() возвращает UnsafeMutableRawPointer. И я не могу найти способ конвертировать его в нечто читаемое. Я предполагаю, что это NSArray, но мне не удастся его преобразовать. Может кто-нибудь помочь, пожалуйста?

+0

Вы хотите знать предпочитаемый язык в языке и область предпочтений? – Willeke

+0

Свойство CFString. –

ответ

0

Carbon имеет TISCopyCurrentKeyboardInputSource(), который дает вам текущий язык.

TISInputSourceRef source = TISCopyCurrentKeyboardInputSource(); TISGetInputSourceProperty (источник, kTISPropertyInputSourceLanguages));

Существует также распределенное уведомление kTISNotifySelectedKeyboardInputSourceChanged, чтобы определить, когда язык изменяется.

Для быстрой простоты использования подумайте о создании обертки Objective C, которая возвращает строковое значение вышеуказанного API.

+0

Нет, это не работает. Если я наберу «Париж» или «Привет», он отобразит «und» в качестве языка. Было бы лучше просто получить доступ к текущему языку ввода на клавиатуре ... Для длинной строки ваше решение работает, но в моем случае пользователи будут искать города, поэтому будет напечатано только короткое имя. –

+0

У Carbon есть 'TISCopyCurrentKeyboardInputSource', который дает вам текущий язык. Также существует рассылаемое уведомление 'kTISNotifySelectedKeyboardInputSourceChanged', чтобы определить, когда язык изменяется. –

+0

Спасибо. Я пробовал этот метод, и похоже, что он работает. Однако он возвращает UnsafeMutableRawPointer, и я не могу найти способ его правильно прочитать. Вы можете проверить мой обновленный ответ –

Смежные вопросы