2016-11-26 8 views
2

Ich erstelle eine App, mit der Benutzer die Ortszeit überall auf der Welt überprüfen können. Die Informationen werden mithilfe von Google APIs abgerufen und alle funktionieren gut, aber um die besten Ergebnisse zu erzielen, muss ich die Sprache angeben, die ich verwenden möchte.Ermitteln der aktuellen Eingabesprache

Offensichtlich ist es in meinem Fall sinnvoll, die Sprache festzulegen, die der Benutzer beim Eingeben eines Städtenamens verwendet hat. Auf dem iPhone ist das kinderleicht, aber ich kann nicht herausfinden, wie ich diesen Sprachcode auf macOS bekommen kann. Könnte mir bitte jemand helfen?

aktualisieren

Nach einer Beratung von Leo ich jetzt auf der Bühne bin, wenn ich mit Hilfe von Kohlenstoff Rahmen der aktuellen Eingabe bin immer.

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

Das Problem ist, dass TISGetInputSourceProperty() eine UnsafeMutableRawPointer zurückgibt. Und ich kann keinen Weg finden, es in etwas Lesbares umzuwandeln. Ich nehme an, es ist ein NSArray, aber ich habe kein Glück zu versuchen, es zu konvertieren. Kann mir bitte jemand helfen?

+0

Haben Sie die gewünschte Sprache in der Sprache und Region Präferenzen wissen? – Willeke

+0

Die Eigenschaft ist CFString. –

Antwort

0

Carbon hat TISCopyCurrentKeyboardInputSource(), die Ihnen die aktuelle Sprache gibt.

TISInputSourceRef source = TISCopyCurrentKeyboardInputSource(); TISGetInputSourceProperty (Quelle, kTISPropertyInputSourceLanguages));

Es gibt auch die kTISNotifySelectedKeyboardInputSourceChanged verteilte Benachrichtigung, um festzustellen, wenn sich die Sprache ändert.

Für die schnelle Benutzerfreundlichkeit sollten Sie einen Objective-C-Wrapper erstellen, der einen Zeichenfolgenwert der obigen API zurückgibt.

+0

Nein, das funktioniert nicht. Wenn ich "Paris" oder "Hello" eintippe, wird "und" als Sprache angezeigt. Es wäre wirklich besser, nur auf die aktuelle Eingabesprache der Tastatur zugreifen zu können ... Für eine lange Zeichenfolge funktioniert Ihre Lösung, aber in meinem Fall werden die Benutzer nach Städten suchen, daher wird nur der kurze Name eingegeben. –

+0

Carbon hat 'TISCopyCurrentKeyboardInputSource', was Ihnen die aktuelle Sprache gibt. Es gibt auch die verteilte Benachrichtigung "kTISNotifySelectedKeyboardInputSourceChanged", um festzustellen, wann sich die Sprache ändert. –

+0

Danke. Ich habe diese Methode ausprobiert und es sieht so aus, als ob es funktioniert. Es gibt jedoch UnsafeMutableRawPointer zurück und ich finde keine Möglichkeit, es richtig zu lesen. Sie können überprüfen, meine aktualisierte Antwort –

Verwandte Themen