2016-11-26 2 views
2

Je construis une application qui permet aux utilisateurs de vérifier l'heure locale partout dans le monde. L'information est récupérée en utilisant les API Google et tout fonctionne bien, mais pour de meilleurs résultats, je dois spécifier la langue que je voudrais utiliser.Détecter la langue d'entrée actuelle

Évidemment, dans mon cas, il est logique de définir la langue désirée à celle utilisée par l'utilisateur lors de la saisie d'un nom de ville. Sur iPhone c'est super facile à faire, mais je n'arrive pas à comprendre comment je pourrais obtenir ce code de langue sur macOS. Quelqu'un pourrait-il m'aider, s'il vous plaît?

Mise à jour

Après un conseil de Leo Je suis maintenant au stade où je reçois l'entrée en cours avec l'aide du cadre de carbone.

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

Le problème est que TISGetInputSourceProperty() retourne un UnsafeMutableRawPointer. Et je ne peux pas trouver un moyen de le convertir en quelque chose de lisible. Je suppose que c'est un NSArray, mais je n'ai pas de chance d'essayer de le convertir. Quelqu'un peut-il aider s'il vous plaît?

+0

Voulez-vous connaître la langue preferred dans les préférences de langue et de la région? – Willeke

+0

La propriété est CFString. –

Répondre

0

Carbon a TISCopyCurrentKeyboardInputSource() qui vous donne la langue actuelle.

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

Il existe également la notification distribuée kTISNotifySelectedKeyboardInputSourceChanged pour déterminer quand la langue change.

Pour une facilité d'utilisation rapide, envisagez de créer un wrapper Objective C qui renvoie une valeur de chaîne de l'API ci-dessus.

+0

Non, cela ne fonctionne pas. Si je tape "Paris" ou "Bonjour" il affiche "und" comme langue. Il serait vraiment mieux d'avoir juste accès à la langue d'entrée actuelle du clavier .... Pour une chaîne longue votre solution fonctionne, mais dans mon cas, les utilisateurs vont chercher des villes, donc seul le nom court sera tapé. –

+0

Carbon a 'TISCopyCurrentKeyboardInputSource' qui vous donne la langue actuelle. Il y a aussi la notification distribuée 'kTISNotifySelectedKeyboardInputSourceChanged' pour déterminer quand la langue change. –

+0

Merci. J'ai essayé cette méthode et on dirait que ça marche. Cependant, il renvoie UnsafeMutableRawPointer et je n'arrive pas à trouver un moyen de le lire correctement. Vous pouvez vérifier ma réponse mise à jour –