2013-03-13 3 views
5

Ich bin daran interessiert, meinen Benutzern zu erlauben, die Sprache/das Gebietsschema zu wählen, in dem meine App ihnen erscheint. Ich habe herausgefunden, wie man das richtige Bündel lädt, die richtigen Zeichenfolgendateien usw. Jedoch scheinen einige Systemeinzelteile noch keine Kontrolle über haben. Zum Beispiel Schalter.iOS: Gibt es eine Möglichkeit, das Gebietsschema des Benutzers zu fälschen?

Gibt es eine Möglichkeit für mich, dem System mitzuteilen, dass sich diese App jetzt in einer bestimmten Sprache und nicht in der aktuellen Systemeinstellung des Benutzers verhält?

+1

Whoa-Whoo. 'method_setImplementation (class_getInstanceMethod ([NSLocale-Klasse], @selector (currentLocale)), (IMP) spoofedImpl);'? –

+2

Jeder Weg, um es ohne swizzling zu tun? – Mike

+0

Haben Sie versucht, eine Kategorie für NSLocale zu erstellen, um das von Ihnen gewählte Gebietsschema für die Klassenmethoden zurückzugeben? –

Antwort

5

Der am wenigsten hacky Weg ist über NSUserDefaults: Die locale durch AppleLocale (die Lokalisierungs-ID als String) bestimmt werden, und die Sprache wird durch das erste Spiel in AppleLanguages (ein Array von Sprach-IDs) bestimmt wird; Ihre App kann diese Standardeinstellungen für Ihre App nur überschreiben. Um zu überprüfen, ob es von Ihrer App überschrieben wird, können Sie etwas wie [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"] verwenden. Verwenden Sie zum Entfernen der Überschreibung -removeObjectForKey:.

Unabhängig davon, wie Sie es tun, müssen Sie wahrscheinlich relaunch the app beim Sprachenwechsel; OS X- und iOS-Apps sind einfach nicht dafür ausgelegt, die Sprache zur Laufzeit zu ändern (unter OS X sehen nur neu gestartete Apps die Sprachänderung; bei iOS werden alle Apps zum Ändern der Sprache vom System entfernt).

Ich habe diese Funktion hinzugefügt, um das Wechseln von Sprachen für Entwicklung/Test zu erleichtern; Ich habe keine Ahnung, ob dies den App Store-Überprüfungsprozess nicht bestehen wird.

+0

Danke @tc. Es klingt so, als wäre das etwas, von dem man sich fernhalten sollte, aber ich schätze die detaillierte Option. – Mike

Verwandte Themen