2016-12-20 1 views
0

Gibt es eine Möglichkeit, das Systemsprachenänderungsereignis unter OS X zu erkennen?Erkennung der Systemsprachenänderung OS X

Ich habe versucht, auf dem developer.apple.com zu suchen, aber ohne Ergebnisse.

Ich suche eine Lösung für C++/Obj-C.

+0

Was meinst du mit ändern? Wenn Sie die Systemsprache erkennen können, sollten Sie sie beim Starten von allem, was Sie gerade machen, einfach abfragen können, wie es die meisten Anwendungen tun. –

+0

Durch Änderung ich bedeute den Moment, wenn Benutzer es ändert. Ich möchte das Gebietsschema in meiner App "on the fly" ändern, nachdem dieses Ereignis eintritt. – ars

Antwort

1

Wenn Sie in Objective-C/Swift arbeiten sind, können Sie NSDistributedNotificationCenter verwenden für die Sprachänderungsbenachrichtigungen zu sehen:

// You are not required to register self -- this can be any object, and the selector name can be anything taking one argument. 
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(languageChanged:) name:@"AppleLanguagePreferencesChangedNotification" object:nil]; 

Sie languageChanged: nennen können, was auch immer Sie möchten, dass, solange das Verfahren dauert ein NSNotification Objekt:

- (void)languageChanged:(NSNotification *)notification { 
    // New preferred language. 
    NSString *language = [[NSLocale preferredLanguages] firstObject]; 
} 

Werfen Sie einen Blick auf die NSDistributedNotificationCenter docs für weitere Informationen.

+1

Zu Referenzzwecken war das Ermitteln des spezifischen Benachrichtigungsnamens relativ einfach. Wenn Sie einen Beobachter für einen Benachrichtigungsnamen "nil" und ein Objekt "nil" registrieren, erhalten Sie _alle_ Benachrichtigungen, die auf 'NSDistributedNotificationCenter' gepostet wurden. Wenn Sie alle Benachrichtigungen protokollieren, die Sie erhalten, können Sie einfach die gewünschte Aktion ausführen (z. B. in die Systemeinstellungen wechseln und die bevorzugte Sprache ändern) und dann in Ihrem Protokoll nach dem Namen suchen. –