2016-11-26 14 views
2

私はユーザーが世界中のどこでも現地時間を確認できるようにするアプリを開発しています。情報はGoogle APIを使用して取得され、すべて正常に動作しますが、最良の結果を得るには、使用したい言語を指定する必要があります。現在の入力言語を検出する

明らかに、私の場合、都市名を入力するときに使用した言語に希望の言語を設定することは明らかです。 iPhoneでこれは簡単にやりやすいですが、私はどのようにこの言語コードをmacOSで得ることができないのか分かりません。誰でも私を助けてくれますか?私は私が炭素骨格の助けを借りて、現在の入力を取得しています段階で、今の私レオからのアドバイスに従い

更新

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

問題はTISGetInputSourceProperty()UnsafeMutableRawPointerを返すことです。そして私はそれを何か読めるものに変換する方法を見つけることができません。私はそれがNSArrayだと仮定しますが、私はそれを変換しようとする運がありません。誰か助けてもらえますか?

+0

あなたは言語と地域の好みでれる好ましい言語を知りたいですか? – Willeke

+0

このプロパティはCFStringです。 –

答えて

0

カーボンには現在の言語を示すTISCopyCurrentKeyboardInputSource()があります。

TISInputSourceRef source = TISCopyCurrentKeyboardInputSource(); TISGetInputSourceProperty(source、kTISPropertyInputSourceLanguages));

言語が変更される時期を決定するためのkTISNotifySelectedKeyboardInputSourceChanged分散通知もあります。

使いやすさを考慮して、上記のAPIの文字列値を返すObjective Cラッパーを作成することを検討してください。

+0

いいえ、これは動作しません。 「パリ」や「こんにちは」と入力すると、言語として「und」と表示されます。長い文字列の場合、ソリューションは機能しますが、私の場合、ユーザーは都市を検索するため、短い名前のみが入力されます。 –

+0

Carbonには現在の言語を提供する 'TISCopyCurrentKeyboardInputSource'があります。また、 'kTISNotifySelectedKeyboardInputSourceChanged'という分散通知があり、言語の変更時を決定します。 –

+0

ありがとうございます。私はこの方法を試して、それが動作しているように見えます。しかし、それはUnsafeMutableRawPointerを返し、私はそれを正しく読み取る方法を見つけることができません。私の更新された答えを確認することができます –