2013-02-25 9 views
12

(Es gibt ähnliche Fragen. Einige führten zu Antworten, die ich versucht habe und die nicht funktionierten. Andere haben keine Antworten, ich nehme an, weil die Fragen nicht Liefern so viele Details wie möglich.)Storyboard + Basislokalisierung + .strings Datei lokalisiert nicht zur Laufzeit

Ich begann mit einem Storyboard, das für meine App gut funktionierte; Die enthaltenen Strings sind in Englisch. Ich wollte eine französische Lokalisierung hinzufügen. Ich tat dies:

  • Added eine Basis-Lokalisierung, die MainStoryboard.storyboarden.lproj-Base.lproj übertragen.
  • Eine französische Lokalisierung hinzugefügt, die geklont InfoPlist.strings (Englisch) und MainStoryboard.storyboard (Base) in fr.lproj.
  • Geändert ein paar Strings (Titel von Segmenten in einem UISegmentedControl) in der Französisch MainStoryboard.storyboard.
  • Setzen Sie im Simulator die Sprache auf Französisch.
  • Lief die App von Xcode.

Ergebnis: Dies hat funktioniert; Meine geänderten Zeichenfolgen erschienen in der laufenden Anwendung.

Aber ich möchte alle Phantasie sein. Ich möchte die französische Lokalisierung mit einer .strings Datei machen. (Es ist nicht nur eine Frage des Seins Phantasie, die Französisch Lokalisierung auf nicht-technische Übersetzer übergeben werden, die nicht erwartet werden kann, Interface Builder zu meistern.) Also:

  • ausgewählt, um die Basis MainStoryboard.storyboard in dem Xcode-Projekt Navigator.
  • Im Dateiinspektor unter Lokalisierung wurde die französische Lokalisierung von "Interface Builder Cocoa Touch Storyboard" zu "Localizable Strings" geändert.
  • Akzeptierte Xcode-Warnung, dass das französische Storyboard verworfen wird zugunsten einer .strings Datei, die im Assistenten-Editor angezeigt wird.
  • Die gleichen zwei Bearbeitungen vorgenommen; Es gibt keine Frage, dass sie die falschen Zeichenfolgen sind, weil sie alle kommentiert sind als IBUISegmentedControl...segmentTitles; und der Beschriftungstext erscheint nicht irgendwo anders in der Datei .strings.
  • Die vorhandene (funktionierende) Kopie der App wurde aus dem Simulator gelöscht.
  • Lief die App.

Ergebnis: Die Ansicht verwendet die Basis (ursprünglich englisch) Lokalisierung, anstatt die Französisch-Strings zu laden.

Dies ist nicht zufriedenstellend. Ich habe versucht, die App aus dem Simulator zu löschen und sogar den Ordner für abgeleitete Daten zu löschen. Der Fehler bleibt bestehen.

Wie gesagt, ich kann eine .storyboard Datei nicht an einen nichttechnischen Übersetzer übergeben. Wie kann ich iOS dazu bringen, die Storyboard-Lokalisierung aus einer .strings Datei zu akzeptieren?

+0

die Storyboard Umstellung auf Auto-Layout hatte Kein Effekt. – user698970

+0

Eine Antwort auf eine andere ähnliche Frage schlug vor, ibtool auf dem Basis-Storyboard auszuführen und diese als Starter für die .strings-Datei anstelle des bereitgestellten Interface Builders zu verwenden. Die zwei Dateien sind identisch. – user698970

+0

Hier ist eine weitere Variable: Das Storyboard hat viele unerreichbare Szenen: Sie sind nicht der anfängliche Controller, und sie haben keine Segmente, die in sie führen. (Nicht mein Tun; ich muss mit dem Entwickler sprechen, der dachte, das sei eine gute Idee.) Könnte das die Lokalisierung von .strings beeinträchtigen? – user698970

Antwort

6

Ich hatte das gleiche Problem mit meinem UISegmentedControl s. Es stellt sich heraus, dass es einen Fehler in iOS 6 gibt: .strings Storyboard-Lokalisierung funktioniert nicht auf UISegmentedControl Text und auf UISearchBar Platzhalter. Sehen Sie diese Openradar: http://openradar.appspot.com/radar?id=2159402

Haben Sie versucht, andere Elemente wie UILabel s zu lokalisieren? Das sollte funktionieren.

+0

Ich hatte das gleiche Problem, nur eine UISearchBar wurde nicht lokalisiert, während alle anderen Sachen funktionierten. Die unten von Susan Sabaria beschriebene Lösung ist ein guter Workaround für diesen Fehler, der leicht auch auf Scope-Titel erweitert werden kann. – ecotax

8

Hier ist, wie ich es gelöst:

in viewDidLoad:

[self.segmentedControl setTitle:NSLocalizedString(@"Title", @"Your localize comment") forSegmentAtIndex:0]; 

Sie können für die Suche Platzhalter das Gleiche tun:

[self.searchBar setPlaceholder:NSLocalizedString(@"Your string placeholder", @"Your comment for localizers")]; 

Dann erstellen Sie einfach eine Datei Localizable.strings und es wird funktionieren.

0

Für Menschen, für die Entwicklung von iOS 7 oder höher und für eine Suchleiste für das .strings Format suchen, das ist, wie Sie das placeholder Feld zum Beispiel übersetzen sollen:

/* Class = "UISearchBar"; normalTitle = "Search for Places"; ObjectID = "F3d-Ir-fni"; */ 
"F3d-Ir-fni.placeholder" = "Nach Orten suchen"; 
Verwandte Themen