2016-05-27 24 views
0

Ich arbeite an einer App, die mehrere Sprachen unterstützt. Alles geht gut. Aber ich muss die Sprache während der Laufzeit ändern.
ich es so mache -Wie aktualisiert man localizable.strings oder NSLocalizedString (Schlüssel, Kommentar) ios während der Laufzeit

NSArray* languages = [NSArray arrayWithObjects:@"es",@"en" nil]; 
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Es gut funktioniert.

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Diese zeigt die richtige Sprache. Die App ändert jedoch ihre Sprache erst, nachdem sie neu gestartet wurde.

Gibt es eine Möglichkeit, localizable.strings-Datei oder NSLocalizedString (Schlüssel, Kommentar) zu aktualisieren? Oder eine andere Möglichkeit, es ohne Neustart zu tun?

+0

https://github.com/maximbilan/ios_language_manager können Sie dies mit dieser Lösung tun. –

Antwort

0

Um die Sprache der App während der Laufzeit zu ändern, habe ich das manuell gemacht, indem ich zwei verschiedene Storyboards erstellt habe. Ich speicherte die Spracheinstellung in NSUserDefaults, aber nicht mit dem Schlüssel AppleLanguages und nannte dann AppDelegate's didFinishLaunchingWithOptions Methode, Storyboard auszuwählen.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainEnglish" bundle:nil]; 
UINavigationController *navigationcontroller=[[UINavigationController alloc]init]; 
RegistorViewController *registor=[storyboard instantiateViewControllerWithIdentifier:@"Registor"]; 
[self.window setRootViewController:navigationcontroller]; 
[self.window makeKeyAndVisible]; 
[navigationvontroller pushViewController:registor animated:NO]; 
3

Dies wurde schon oft hier auf StackOverflow (Suche nach Dingen wie iOS change language at runtime) gefragt.

Sie können die Sprache nicht zur Laufzeit ändern, wenn Sie NSLocalizedString verwenden. Wenn Sie das wirklich brauchen, müssen Sie stattdessen ein benutzerdefiniertes Lokalisierungssystem verwenden. Besser noch: Tu das einfach nicht: Es ist unerwartet. Schließlich kann der Benutzer seine bevorzugten Sprachen (und ihre Reihenfolge) in den Systemeinstellungen festlegen.

Someone even asked an Apple engineer und dies ist die Antwort:

In der Regel sollten Sie nicht die Sprache iOS-System ändern (über die Verwendung der AppleLanguages ​​pref Schlüssel) aus Ihrer Anwendung. Dies widerspricht dem grundlegenden iOS-Benutzermodell für das Wechseln zwischen Sprachen in der App "Einstellungen" und verwendet einen nicht dokumentierten Präferenzschlüssel. Das bedeutet, dass sich der Schlüsselname zu einem späteren Zeitpunkt ändern könnte, wodurch Ihre Anwendung beschädigt wird.

Wenn Sie in Ihrer Anwendung die Sprache wechseln möchten, können Sie die Ressourcendateien in Ihrem Bundle manuell laden. Sie können NSBundle: pathForResource: ofType: inDirectory: forLocalization verwenden: Beachten Sie jedoch, dass Ihre Anwendung für das Laden lokalisierter Daten verantwortlich ist.

+0

danke für die Antwort. Ich hatte zwei Storyboards für zwei verschiedene Sprachen separat erstellt und entsprechend aufgerufen. –