ich eigentlich über eine andere Idee dachte, wie man ändere die Sprache in deinen Apps ui, zwingt dich aber dazu, 1. setze alle Strings manuell ein 2. stelle eine Methode (Benachrichtigung) zur Verfügung, die alle UI-Elemente aktualisiert, wenn sich die Spracheinstellung geändert hat. Die Idee basiert auf der gleichen Methode, die iOS verwendet, um die lokalisierte Version eines Strings zu finden. Als Voraussetzung müssen Sie also ein Bundle (z. B. AppNameStrings.bundle) mit der Ordnerstruktur language_id.lproj angeben, wobei language_id der Bezeichner für die Sprachen ist, die Sie bereitstellen möchten. Sie können ein solches Bundle erstellen, indem Sie ein Setuppaket erstellen, es im Finder öffnen und die Datei root.plist löschen. Als nächstes benötigen Sie eine Funktion, mit der Sie aus Ihrem Bündel lesen können. Hier sind zwei Methoden, mit denen ich lokalisierte Strings lesen kann. Setzen Sie die folgenden Methoden in Ihrer GlobalDefinitions.h Datei
#ifdef __OBJC__
NSBundle *yourNameBundle(void);
NSString *YourNameLocalized(NSString *stringToken, NSString *language);
#endif
und dieser Code in Ihre GlobalDefinitions.m Datei
NSBundle *yourNameBundle(void) {
static NSBundle* bundle = nil;
if (!bundle) {
NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"];
bundle = [NSBundle bundleWithPath:path];
}
return bundle;
}
NSString *YourNameLocalized(NSString *stringToken, NSString *language) {
if (yourNameBundle()) {
return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language];
} else {
return stringToken;
}
}
Sie haben eine Kategorie NSBundle schaffen für
[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]
als die Standardmethode verfehlt den Sprachparameter. In Ihrer Methode öffnen Sie die entsprechende Datei language.lproj/Root.strings und scannen sie nach dem StringToken. Wenn Sie es nicht finden können, geben Sie das Token selbst zurück, andernfalls die Textzeichenfolge. Wenn Sie eine lokalisierte Version eines Textes benötigen, schreiben Sie z. label.text = YourNameLocalized (@ "Token", [self provideLanguageIdentifier); und du bist fertig. Ich habe es bisher noch nicht gemacht aber es sollte funktionieren.
Ich denke, dieser Beitrag ist ein guter Ausgangspunkt: http: // Stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-zu-verwenden-eine-spezifische Sprache –
Ich denke, dass Sie die Sprache nur Ihrer Anwendung ohne das Gerät nicht ändern können. –
@VineeshTP Sie können die Spracheinstellungen für das Gerät und den Simulator während der Entwicklung ändern. Schau dir meine Antwort an. – Abizern