Frage

Ich habe eine App, die ich in eine Reihe verschiedener Sprachen übersetze.Das Problem besteht darin, dass die App in Australien einige andere Werte haben wird als in Neuseeland, die beide englischsprachige Länder sind.

Ich habe eine en_AU- und eine en_NZ-Sprachdatei erstellt, aber beide verwenden die standardmäßige englische Datei.Ich habe die englische Sprachdatei gelöscht, aber es passiert weiterhin ...

Irgendwelche Ideen, wie ich das zum Laufen bringen kann?

Danke schön,

--D

War es hilfreich?

Lösung

iPhone-Lokalisierungen (oder sind diese Lokalisierungen?) Keine Kenntnis der Region, die der Benutzer (dh UK, AUS, NZ) ist. Es gibt nur eine "englische" Sprachübersetzung standardmäßig zur Verfügung. Sie können jedoch mit den Dingen hacken, um es zu zwingen, eine andere Übersetzungseinstellung zu verwenden - ich habe dies gerade getan, um zwischen "Englisch" (US) und "EN_GB" (britisches Englisch) zu wählen.

in Ihrer main.m-Datei, ändern Sie es, so dass es so etwas wie folgt aussieht (in Ihre eigenen Tests für NZ oder Au)

generasacodicetagpre.

}

Hiermit wird die Benutzersprache (z. B. "EN") in die Sprache NSString und das Anwender-Gebietsgebiet (z. B. NZ, GB, AU) in das Gebietsschema-NSSstring in das Gebietsschema. Wenn sie (in meinem Fall) mit EN und GB übereinstimmen, setzen Sie die Standardeinstellungen für die Standardsprache des Sprache "En_gb", dann "EN_GB", dann "EN".

dann in Ihrer Anwendungsdelegierten Anwendung: didfinishlaunchingwithoptions-Methode Sie möchten, dass Sie diese NSUserDefaults-Einstellung entfernen möchten, die Sie gerade mit dem Code

eingestellt haben. generasacodicetagpre.

Es ist sicher, an diesem Punkt sicher zu entfernen, da die gesamte Bündel-Initialisierung abgeschlossen ist. Ihre App sollte jetzt eine Localization.Strings-Datei im Verzeichnis En_gb.lproj verwenden.

Es ist ein bisschen eine schreckliche, hackige Lösung, aber es funktioniert für mich.

Andere Tipps

Ich habe mir eine meiner Meinung nach leicht verbesserte Version von Rickerbhs akzeptierter Antwort ausgedacht.Als erstes muss man sich darüber im Klaren sein, dass Benutzerstandards in Domänen organisiert sind @"AppleLanguages" Der Schlüssel stammt nicht aus der Domäne der App, sondern von einer Domäne weiter oben in der Domänenhierarchie.Das bedeutet, dass es absolut sicher ist, es aus den Benutzereinstellungen zu entfernen:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"AppleLanguages"];

Nachdem Sie diesen Code aufgerufen haben, werden Sie diesen Aufruf bemerken [defaults objectForKey:@"AppleLanguages"] gibt immer noch einen Wert zurück.Also statt löschen @"AppleLanguages" Irgendwann später, was je nach Komplexität Ihrer App problematisch sein kann, möchten Sie das Gegenteil tun: löschen @"AppleLanguages" sofort.Im Wesentlichen wird es dadurch auf den Standardwert zurückgesetzt und alle vom System vorgenommenen Änderungen erfasst, wenn der Benutzer beispielsweise seine bevorzugte Sprache geändert hat.

Folgendes mache ich:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"AppleLanguages"];

NSMutableArray *appleLanguages = [[defaults objectForKey:@"AppleLanguages"] mutableCopy];
NSString *region = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
NSArray *languages = [appleLanguages filteredArrayUsingPredicateFormat:@"not (self contains '-')"];
for (NSString *language in languages) {
    NSString *languageAndRegion = [NSString stringWithFormat:@"%@-%@", language, region];
    [appleLanguages removeObject:languageAndRegion];
}
for (NSString *language in languages) {
    NSString *languageAndRegion = [NSString stringWithFormat:@"%@-%@", language, region];
    NSInteger index = [appleLanguages indexOfObject:language];
    [appleLanguages insertObject:languageAndRegion atIndex:index];
}
[defaults setObject:appleLanguages forKey:@"AppleLanguages"];

(Beachten Sie, dass filteredArrayUsingPredicateFormat: ist eine Erweiterungsmethode, die ich geschrieben habe.Es ist kein Hexenwerk, herauszufinden, was es tut oder wie es funktioniert.)

Dadurch werden Lokalisierungen für jede Sprache in der Liste in Kombination mit der Region des Benutzers erstellt.Z. B. wenn die ursprüngliche Liste war es en en-GB und die Region des Benutzers ist AU, erhalten wir es-AU es en-AU en en-GB.Beachten Sie, dass es-AU existiert nicht, aber es macht keinen Unterschied.Da die App keine zugehörigen Lokalisierungen oder Ressourcen findet, ignoriert sie diese einfach.

Apple dokumentiert diese fehlende iOS-Funktion hier.

wichtig: in ios, das bündel Schnittstellen nehmen keine Dialekt oder Skriptinformationen berücksichtigen, wann auf der Suche nach lokalisierten Ressourcen;nur Der Sprachbeschriftungscode ist berücksichtigt.Wenn also Ihr Projekt Inklusive sprachspezifischem Projekt Verzeichnisse mit einer Sprache und Region Designator, diese Verzeichnisse werden ignoriert.Die Bündelschnittstellen in Mac OS X Unterstützungsbereichsdesignatoren im sprachspezifischen Projekt Verzeichnisse.

Ich hatte die gleichen Probleme mit Deutsch und denkmal, dass ich die "richtige" Lösung fand.Der Fehler war, dass ursprünglich meine Basissprache nur "Deutsch (de)" war, als "Deutsche / Austria (de_at)" -Lokalisierungen hinzugefügt wurden, wurden die Dateien ignoriert.Bei der Änderung der Basissprache in "Deutsch / Deutschland (de_de)" wurden die österreichischen Übersetzungen nicht ignoriert.

Es ist erwähnenswert, dass Xcode sehr irreführend ist - Sie können Projekt (nicht Ziel), Info, Lokalisierungen gehen. Drücken Sie die + -Taste, die unter der Liste der Sprachenliste angezeigt wird, und scrollen Sie dann bis zum Ende der ListenlisteErscheint im Popup, bis Sie zu "Anderen" gelangen (mit rechten Pfeil daneben), eröffnet eine schöne große Liste, die regionale Varianten für Sprachen enthält.Diese regionalen Varianten funktionieren jedoch nicht auf dem iPhone - Sie bekommen nichts (wie von Apple dokumentiert und in einer anderen Antwort referenziert, die hier erscheint).Offensichtlich ist eine der oben aufgeführten codebasierten Lösungen erforderlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top