2012-08-02 9 views
9

Ich habe derzeit eine semi-automated way, um meine Ansichten zu lokalisieren. Heute habe ich jedoch einen interessanten Abschnitt in IB gefunden, der darauf hindeutet, dass ich meine Ansichten aus dem Interface Builder heraus lokalisieren kann.Lokalisieren Sie eine Ansicht in einem Storyboard mit "Benutzerdefinierte Laufzeitattribute"

So können Sie in IB Laufzeitattribute für ein ausgewähltes Objekt im Identity Inspector definieren. Also für meine UILabel kann ich den text Schlüsselpfad meines Labels auf den String Hello World setzen.

Wenn ich jedoch die Type = Localized String und dann den Namen eines Schlüssels in meinem Localized.strings wähle, bekomme ich keine übersetzte Zeichenfolge, sondern nur den Wert (daher der Schlüssel), den ich in IB eingegeben habe.

Ich verstehe nicht, wie dieser Mechanismus funktionieren soll. Ich würde Liebe in der Lage sein, meine Ansichten so zu übersetzen, irgendwelche Ideen?

+1

Ich bin genau am selben Punkt. Hast du etwas dazu gefunden? –

Antwort

4

Die "benutzerdefinierten Laufzeitattribute" sind schlecht dokumentiert. Was ich aus einem Buch, das ich gelesen habe, in Erinnerung habe, ist, dass UDRA zuerst für die MacOSX-Programmierung implementiert wurde, daher könnte der Typ "lokalisierter String" eine Funktion sein, die momentan nicht vollständig in iOS unterstützt wird.

Die lustige Sache ist, dass er die Zeichenfolgen in der Storyboard-Vorschau (xCode 4.5.1) übersetzt, aber später in der kompilierten iOS-App, injiziert er nur die Schlüsselzeichenfolge.

Eine Lösung, über die ich gerade nachdenke, ist es, eine kleine Hilfsklasse zu erstellen, die die Titel-/Textzeichenfolgen der Ansichten von viewDidLoad auf ein Schlüsselwort wie "key" überprüft, z. "XYControllerTitleKey" und dann die NSLocalizedString-Methode.

+1

Downvoted, weil die Antwort nicht korrekt ist (zumindest in der aktuellen Version von Xcode): Der Typ "Localized String" bedeutet, dass das Laufzeitattribut im Gegensatz zur Verwendung eines einfachen "String" -Typs am Lokalisierungsprozess beteiligt ist. Sie können dies überprüfen, wenn Sie die Zeichenfolgendatei aus dem Storyboard generieren: Wenn Sie "String" verwenden, wird der Wert nicht in die generierte Zeichenfolgendatei eingeschlossen. Wenn Sie "Localized String" verwenden, wird es sein. –

+0

Wie in meinem anderen Kommentar erwähnt: Die Tools für den Lokalisierungsprozess kümmern sich um UDRA, die iOS-Runtime jedoch nicht. Der Wert für UDRA wird nicht aus der Datei .strings übernommen. –

1

Für mich, mit iOS 6, wenn Sie Ihre Zeichenfolgen von Ihrem Basis lokalisierten Storyboard erzeugen (indem Sie XCode generieren oder die ibtool --generate-strings-file verwenden, erhalten Sie automatisch generierte Strings, die wie folgt aussehen (sollte in MainStoryBoard.strings gehen, zum Beispiel) :

/* Class = "IBUITextField"; b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Event Name"; ObjectID = "b4a-O4-bNZ"; */ 
"b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Event Name"; 

Leider sei es schön, von dem Key Path sie identifiziert zu haben, aber zumindest haben Sie die Stelle, wo Ihre benutzerdefinierten Strings lokalisiert werden sollen

6

der Zweck der „lokalisiert. String "type" ermöglicht es Ihnen, einen Laufzeitattributwert zu definieren, der am lo beteiligt ist Kalkulationsvorgang (mit Base-Lokalisierung). Dies ist praktisch, wenn Sie beispielsweise ein benutzerdefiniertes Steuerelement definieren, es in das Storyboard aufnehmen und einer seiner Eigenschaften eine lokalisierbare Zeichenfolge zuweisen möchten. Dies funktioniert jedoch nur unter Mac OS, nicht unter iOS.

Sie können dies mit folgendem Experiment leicht bestätigen: Legen Sie ein UILabel/NSTextField in Ihr Storyboard und setzen Sie die Eigenschaft "text"/"stringValue" mit einem benutzerdefinierten Laufzeitattribut. Wenn Sie "String" als Typ des Attributs verwenden und die entsprechende Zeichenkettendatei generieren, können Sie sie nirgendwo in der Datei sehen. Im Gegensatz dazu, wenn Sie die Art ändern zu „Lokalisierte String“ und erzeugen Datei die Saiten Sie einen Eintrag wie folgt finden:

/* Class = "IBUILabel"; wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Localized value"; ObjectID = "wij-Kq-q92"; */ 
"wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Localized value"; 

Dann können Sie diesen Wert lokalisieren in der entsprechenden Sprache Strings-Datei. Auch dies funktioniert unter Mac OS, aber nicht unter iOS.

+0

funktioniert das weiterhin nur auf Mac OS und nicht auf iOS im Jahr 2016? – helloB

+0

Ich weiß es nicht, ich habe es in letzter Zeit nicht ausprobiert. Wie auch immer, Sie können es leicht mit dem in der Antwort beschriebenen Prozess überprüfen. Lassen Sie uns wissen, wenn Sie es tun :) –

+0

Ich war im Begriff, zurück zu überprüfen sagen, dass Laufzeitattribute sind eine bessere Option hier und arbeiten mit einem einfachen override von SetValue forKeyPath, so dass die Option, die ich mit gehe. Diese Antwort hat mich am meisten Weg dorthin: http://stackoverflow.com/questions/21870950/localized-string-with-interface-builder-user-defined-runtime-attributes – helloB

Verwandte Themen