2012-07-20 6 views
6

Ich möchte eine Option in meiner Anwendung haben, um meine Anwendungssprache zu ändern (nur Anwendungssprache nicht das ganze System), würden Sie mir bitte ein paar Tipps geben?Ändern der Anwendungsspracheinstellung in iOS nicht das gesamte Gerät

Vielen Dank im Voraus,

Ich weiß, über die Lokalisierung!

+0

Ich denke, dieser Beitrag ist ein guter Ausgangspunkt: http: // Stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-zu-verwenden-eine-spezifische Sprache –

+0

Ich denke, dass Sie die Sprache nur Ihrer Anwendung ohne das Gerät nicht ändern können. –

+0

@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

Antwort

2

Sie können dies tun, indem Sie benutzerdefinierte Build-Flags verwenden, die Sie von Xcode aus einrichten. Auf diese Weise können Sie eine Anwendung unter einer Lokalisierung ausführen, anstatt alle Einstellungen für das Gerät zu ändern.

Ich schrieb einen Blog-Post über sie bei http://abizern.org/2012/03/18/simple-localisation-testing/

Und es ist ein Beispiel-Projekt auf Github, dass Sie es in Aktion sehen verwenden können: https://github.com/Abizern/SimpleLocalisationTesting

+0

Ich habe die gleiche Frage, aber wie kann ich das finden -AppleLanguages ​​soryy Ich bin neu in iOS –

+0

Es ist nur eine der Flags, die Sie zur Laufzeit übergeben können. – Abizern

+1

Danke für die Dokumentation. Aber aus dieser Dokumentation ist nicht ganz klar, wie man es für newbs – User16119012

1

Ich habe benutzerdefinierte Lokalisierung von .plist gemacht gefüllt mit Array von Wörterbüchern gemacht. Gefällt mir:

kYes 
    en = @"Yes" 
    ru = @"Да" 
kNo 
    en = @"No" 
    ru = @"Нет" 

In meinem Projekt habe ich eine Singleton-Klasse zum Lesen dieser Strings erstellt. In Optionen wählt der Benutzer die gewünschte Sprache aus (bei der ersten Start-App wählen Sie die Sprache aus dem aktuellen Systemzustand oder legen die Standardsprache fest). Die ausgewählte Sprache muss in der Datei oder in den Einstellungen gespeichert werden, damit sie beim nächsten Start verwendet werden kann. In Singleton habe ich +getStringWithKey:. Also passiere ich @ "kYes" und bekomme String für die aktuelle Lokalisierung nur für App. Außerdem müssen Sie für das Projekt Standardlokalisierungsdateien hinzufügen, auch wenn sie leer sind. Andernfalls werden in iTunes alle von Ihnen unterstützten Sprachen nicht angezeigt.

1

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.

Verwandte Themen