Ist es möglich, die Zeichenfolgen eines lokalisierten Storyboards zu aktualisieren?


226

Ich habe einen Teil meiner Anwendung lokalisiert, indem ich ein base.lproj-Storyboard und 3 String-Dateien dafür erstellt habe. Es war vor einem Monat und danach habe ich der App einen neuen Ansichts-Controller hinzugefügt, aber die Schaltflächen und Beschriftungen dieses Controllers werden nicht in Zeichenfolgendateien angezeigt

Ist es möglich, diese 3 an das Storyboard angehängten String-Dateien zu aktualisieren, oder muss ich mithilfe von NSLocalizableString und Localizable.strings programmgesteuert neue String-Übersetzungen hinzufügen?


Antworten:


264

Es gibt zwei Möglichkeiten:

Option 1

Xcode kann die Datei "neu laden", indem die Datei entweder in einen Dateityp [Interface Builder Cocoa Touch Storyboard] oder einen Dateityp [Localizable Strings] konvertiert wird .

  1. Wählen Sie Ihre Basis-Storyboard-Datei im Projektnavigator aus
  2. Suchen Sie den Abschnitt Lokalisierung im Dateiinspektor
  3. Wenn es sich bei Ihrer Datei derzeit um eine [lokalisierbare Zeichenfolge] handelt, ändern Sie sie in [Cocoa Touch Storyboard des Interface Builder] oder umgekehrt.
  4. Xcode sollte Ihr Storyboard auf die aktuelle Version konvertiert haben und dabei Ihre alten Lokalisierungsbemühungen beibehalten. Hier können Sie die Datei auf den ursprünglichen Dateityp zurücksetzen, wenn Sie möchten.

Option 2

Verwenden Sie ibtool, um die Zeichenfolgen in Ihrem Storyboard zu extrahieren.

  1. Öffnen Sie die Terminal-Anwendung

  2. Suchen Sie Ihr Base.lproj-Verzeichnis

  3. Verwenden Sie diese Zeile, um die Zeichenfolgen zu extrahieren:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. Nachdem ibtool die Zeichenfolgen in file_name.strings extrahiert hat, können Sie sie kopieren und in Ihre ursprüngliche .strings-Datei einfügen

Besuchen Sie für weitere Informationen: https://conyac.cc/business/columns/localization_guide_ios


1
Ich habe Option 1 ausprobiert, aber das Ändern des Dateityps von [Localizable Strings] in [Interface Builder Cocoa Touch Storyboard] führt immer zu einem Absturz von Xcode 5.0.1. Der Grund könnte sein, dass ich - da mir die oben genannten Möglichkeiten nicht bekannt waren - die Storyboard-Lokalisierungsdateien zuvor von Hand bearbeitet habe.
Reinhard Männer

16
Option 1 funktioniert. Sie müssen jedoch von "Lokalisierbar ..." zu "Schnittstelle ..." und dann wieder zurück wechseln!
João Nunes

3
Option 1 funktioniert bei Verwendung von XCode 6.0.1 nicht. Beim Versuch, meine .strings-Datei in .interfacebuilder zu konvertieren, fragt XCode, ob die Dateien konvertiert werden sollen. Die Dateien werden im Dateisystem erstellt, die Zeichenfolgendateien bleiben jedoch erhalten und enthalten die alten Werte.
Bouncing Bit

53
Für mich hat Option 1 alle bereits übersetzten Zeichenfolgen durch englische ersetzt. Ich musste die Übersetzung noch einmal hinzufügen.
Mihail Velikov

5
Option 1 scheint in Xcode 7 sehr instabil zu sein. Manchmal funktioniert es, manchmal nicht. Manchmal werden einige meiner bereits übersetzten Zeichenfolgen zufällig wieder durch englische Versionen ersetzt.
Adam Johns

76

Schauen Sie sich BartyCrouch an , es löst Ihr Problem perfekt. Außerdem ist es Open Source , wird aktiv gewartet und kann einfach installiert und in Ihr Projekt integriert werden.


Installieren Sie BartyCrouch über Homebrew :

brew install bartycrouch

Alternativ können Sie es auch über Mint installieren :

mint install Flinesoft/BartyCrouch

Aktualisieren Sie Ihre Storyboards / XIBs Strings-Dateien schrittweise:

$ bartycrouch update

Dies wird genau das tun, wonach Sie gesucht haben.


Um Ihre Storyboards / XIBs Strings-Dateien im Laufe der Zeit auf dem neuesten Stand zu halten, empfehle ich dringend, ein Build-Skript hinzuzufügen (Anweisungen zum Hinzufügen eines Build-Skripts finden Sie hier ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Zusätzlich zur schrittweisen Aktualisierung Ihrer Storyboards / XIBs-Strings-Dateien wird dadurch auch sichergestellt, dass Ihre Localizable.stringsDateien mit neu hinzugefügten Schlüsseln im Code aktualisiert bleibenNSLocalizedString und Warnungen für doppelte Schlüssel oder leere Werte angezeigt werden.

Weitere Informationen finden Sie unter BartyCrouch auf GitHub oder in diesem ausführlichen Artikel .


1
Beeindruckend! Dieses Tool ist einfach unglaublich. Das braucht mehr Upvotes!
Ph1lb4

1
schönes Tool - kein manuelles Kopieren / Einfügen neuer Label-Texte mehr in * .strings-Dateien (... und Vergessen der Übersetzung eines neuen Labels wie zuvor) ... Vielen Dank!
iKK

Gibt es einen ähnlichen Pod für OBJC-Projekte?
Rickrvo

2
Dies ist die Antwort, nach der wir suchen. Dies sollte die akzeptierte Antwort sein.
Juanjo

3
Ich verstehe nicht warum nach 6 Jahren, seit diese Frage gestellt wurde und diese lückenhafte Lösung immer noch erforderlich ist, damit dies in Xcode funktioniert. Apple hätte daran arbeiten sollen.
Huggie

57

Sie können Ihrer Lokalisierungsdatei manuell einen Schlüssel hinzufügen. Sie finden das Schlüsselobjekt, indem Sie es im Storyboard-Editor auswählen. Werfen wir einen Blick Object-IDin den Identitätsinspektor. Es sieht so aus"nwc-b2-19c"

Aktualisieren Sie Ihre Lokalisierung oder fügen Sie eine Übersetzung hinzu. Zum Beispiel :

"nwc-b2-19c.title" = "Translated title";

8
denke, es ist der weniger riskante Ansatz
Nicolas Manzini

Einige der Objekt-IDs werden jedoch nicht in der .string-Datei angezeigt. Weil sie nicht verbunden sind. Was kann ich dann tun?
Mihir Oza

Gibt es eine Möglichkeit, es über einen Namen und nicht nur über die automatisch generierte ID auszuwählen?
Cocoseis

Für ein UILabel ist es: "YeB-ap-Wkw.text" = "Mein Etikettentext";
Ioopl

30

Dieser ist nicht jedermanns Sache, erfordert jedoch keine zusätzlichen Werkzeuge im Terminal und ist für kleine manuelle Änderungen einfach. (Berücksichtigen Sie dies nicht, wenn Sie Ihren Prozess automatisieren möchten.)

Schritt 0: Einrichtung der Storyboard-Sprache

  • Basis (mit englischen Texten)
  • Englisch (lokalisierbare Zeichenfolgendatei existiert nicht, da die Basisdatei Englisch ist)
  • andere Sprachen (lokalisierbare Zeichenfolgendateien)

Basiskonfiguration

Dieser Schritt wird nur einmal ausgeführt.

Wenn ich jetzt etwas zum Storyboard hinzufüge, mache ich Folgendes

Schritt 1: Fügen Sie die englische lokalisierbare Zeichenfolgendatei hinzu

Englisch hinzufügen

Markieren Sie einfach die englische Werbebuchung.

Dadurch wird eine völlig neue englisch lokalisierbare Zeichenfolgendatei mit allen Zeilen erstellt

Schritt 2: Kopieren Sie die neuen Werbebuchungen in die anderen Sprachdateien

und übersetze sie

Schritt 3: Deaktivieren Sie Englisch und entfernen Sie die entsprechende lokalisierbare Zeichenfolgendatei

Die Datei wurde nur benötigt, um die neuen Werbebuchungen abzurufen

Dies ist ein einfacher und schneller Vorgang, alles wird im Storyboard-Editor erledigt

Bearbeiten:

Dieser Prozess funktioniert sehr gut mit kleinen Storyboards. Zum Beispiel habe ich ein auf Registerkarten basierendes Projekt und für jede Registerkarte ein Storyboard.

Suchen Sie nach "Storyboard-Referenz", um Tutorials zu finden.

Gutes Beispiel: Storyboard-Referenz in Xcode, wo sollen wir sie verwenden?

Jedes kleine Storyboard muss also nur wenige Zeichenfolgen lokalisieren.


großartig! Haben Sie auch eine Idee gefunden, wie Sie gelöschte Elemente entfernen können?
Tobe

@Tobe Wenn Sie Ihr Storyboard wie oben vorgeschlagen aufteilen, ist es wirklich einfach, die nicht mehr verwendeten Zeichenfolgen zu erkennen.
Gerd Castan

15

Schließlich bestand meine Lösung darin, die vorherigen Übersetzungen (rudimentär, aber effektiv) zu kopieren und in eine neue Datei einzufügen, die durch Deaktivieren und Aktivieren des Kontrollkästchens Lokalisierungssprache erstellt wurde.

Dies wäre in einigen Fällen wie meinem nützlich, wenn Sie nur einen oder zwei Texte ändern müssen.


Würde dies die IDs und dergleichen die ganze Zeit bewahren? Ich habe einen Test gemacht und es schien zu funktionieren, aber es könnte eine Katastrophe sein, wenn sich die ID ändert.
ullstrm

Ich denke schon, ich habe das oft ohne Probleme gemacht.
jpl850

1
IDs werden zugewiesen, wenn Sie die UI-Elemente gelöscht haben. Sie sind unabhängig von der Lokalisierung, da sie vom Storyboard zugewiesen werden. Es wird also keine Auswirkung auf IDs geben.
iBug

Danke iBug für die Erklärung =)
jpl850

14

Ich denke, der beste Weg ist die Verwendung integrierter Export / Import-Lokalisierungen:

  1. Wählen Sie im Projektnavigator Ihren Projektordner
  2. Wählen Sie Editor> Zur Lokalisierung exportieren.
  3. Alle Übersetzungen, die an ihren Plätzen verbleiben, und XCode fügen automatisch fehlende Zeichenfolgen hinzu. Darüber hinaus können Sie vor dem Import .xliff im XLIFF-Editor bearbeiten (z. B. online - http://xliff.brightec.co.uk ), und dies müssen Sie dann nicht in XCode tun.
  4. dann Editor> Lokalisierungen importieren und gespeicherte .xliff-Datei auswählen.

PS Wenn Sie nicht im XLIFF-Editor bearbeiten möchten und Schritt 3 übersprungen haben, kann XCode keine neuen Zeichenfolgen speichern. Öffnen Sie in diesem Fall .xliff im XLIFF-Editor, speichern Sie es ohne Änderungen erneut und importieren Sie eine neue Datei.


1
+1 Einfache und korrekte Arbeitsweise mit der Lokalisierung. Darüber hinaus ist es bevorzugt, Apple
Jurasic

1
Mit Xcode 7.3.1 habe ich in einem bereits lokalisierten Beispielprojekt eine Beschriftung (von "einem Text" in "einen Basistext") geändert und eine neue Beschriftung hinzugefügt. Ich exportierte zur Lokalisierung, berührte die .xliff-Datei (ohne Änderung) und importierte sie erneut. In der Datei Main.strings wurde die Kommentarzeile für die geänderte Bezeichnung aktualisiert /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, die neue Bezeichnung wird jedoch NICHT in der Datei Main.strings erstellt. Dann habe ich die .xliff-Datei bearbeitet, um eine Übersetzung für das neue Label hinzuzufügen. Ich habe es wieder importiert. Das neue Label wird jetzt in die Datei Main.strings eingefügt.
Dienstag,

+1, aber ich habe einen Fehler entdeckt. Wenn Sie neue Elemente hinzufügen, befinden sie sich nicht in einer exportierten Datei (wie duthen sagt). Wenn ich jedoch direkt danach einen Export durchführe (ohne Änderungen am Storyboard), sind überraschenderweise alle hinzugefügten Elemente enthalten. Also zweimal exportieren. Der zweite enthält alle neuen Elemente. Danke Apple!
Viktor Kucera

6

Wenn Sie in Ihr Storyboard klicken, z. B. Main.storyboard ... Auf der rechten Seite sehen Sie das Lokalisierungsmenü (siehe beigefügtes Bild). Wenn Sie eine Linguage deaktivieren und erneut aktivieren, wird die Datei erneut generiert. Normalerweise kopiere ich den Inhalt, generiere die Datei erneut und füge dann den Inhalt ein, den ich kopiert habe und der bereits übersetzt wurde.

Auf diese Weise aktualisiere ich das Wörterbuch.

Geben Sie hier die Bildbeschreibung ein


Wenn Sie mit Xcode 10 Git verwenden, werden die Unterschiede hervorgehoben!
Ricardo Ruiz Romero

Ja, es ist möglich ... jetzt ist meine Datei größer als an diesem Datum und ich füge sie mit der Repository-Version zusammen, nachdem ich sie erneut generiert habe.
J. Fdez

5

Ich habe dort ein riesiges Storyboard mit vielen Strings. Zwei Sprachen basieren auf Englisch und einem weiteren Arabisch. Die Aufgabe bestand darin, dem Storyboard einige Felder und Beschriftungen hinzuzufügen und diese ohne Skripte und NSLocalizableStrings zu lokalisieren.

Für mich hat als nächstes geholfen:

Erstens : Stellen Sie sicher, dass Sie Git haben, um unerwartete Änderungen zu verhindern.

  1. Gehen Sie in xcode zum Zielbildschirm und drücken Sie Editor-> Export For Localization.... Speichern Sie die Datei ar.xliff irgendwo.
  2. Laden Sie XLIFF Edtior herunter .
  3. Öffnen Sie die Datei ar.xliff und nehmen Sie die Änderungen vor.
  4. Importieren Sie diese Datei in xcode. Getan! Sie haben die Storyboard-Zeichenfolgendatei aktualisiert.

Damit dies funktioniert, wählen Sie zuerst das Projekt oder Ziel im Xcode-Projekteditor aus.
Chuck Boris

4

Es gibt eine App, ein Befehlszeilentool von Apple namens AppleGlot , das die inkrementelle Lokalisierung unterstützt. Ich habe es noch nicht ausprobiert, aber es sieht genauso aus wie das Tool, nach dem Sie gesucht haben (vor einiger Zeit).


Das appleglotTool arbeitet mit endgültigen Anwendungspaketen. Es ist ein völlig anderer Ansatz für Übersetzungsanwendungen.
Flovdis

1
Stimmt etwas mit einem "anderen Ansatz" nicht, oder was verursacht die Ablehnung?
Bis zum

Sie müssen jetzt AppleGlot in diesem Link suchen.
NSDeveloper

4

Hier ist ein Skript, mit dem Sie Zeichenfolgen aus Storyboards und Xibs extrahieren und mit vorhandenen Übersetzungen zusammenführen können.

Um das Skript beim Erstellen eines Projekts automatisch auszuführen, legen Sie das Skript in Ihrem Projektstammverzeichnis ab und fügen Sie einer Zielerstellungsphase in Ihren Projekteinstellungen eine Phase " Skript ausführen" mit der folgenden Zeile hinzu.

./mergegenstrings.py PathToSourceDir

Sie können das Skript auch manuell auf dem Terminal ausführen, wenn Sie möchten.

Das Skript wird ausgeführt, ibtoolwährend Tha Leang antwortete. Es wird auch ausgeführt genstrings, um Zeichenfolgen zu extrahieren und zusammenzuführen, die NSLocalizedStringin Ihrem Quellcode markiert sind . Das Skript basiert auf einem Skript in diesem Beitrag , das Zeichenfolgen nach dem Ausführen zusammenführt genstrings.


Können Sie weitere Informationen zur Verwendung geben?
user023

1
Ich habe dem Kern einen Kommentar hinzugefügt. Ich hoffe es hilft. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya

Danke, funktioniert perfekt für mich. Wenn jemand Probleme mit Berechtigungen hat, kann dies hilfreich sein: stackoverflow.com/questions/9850936/…
iCode

Dieses Skript funktioniert gut für Storyboard Main.strings-Dateien, scheint aber meine Localizable.strings-Übersetzungen in Xcode 7 zu überschreiben.
Adam Johns

3

Der einfachste und weniger riskante Ansatz besteht darin, einfach die Objekt-ID aus dem Storyboard zu kopieren und einen neuen Schlüssel für den Schlüssel in der lokalisierten Datei hinzuzufügen, wie im folgenden Beispiel dargestellt:

1: Kopieren Sie die Objekt-ID wie folgt aus dem Storyboard für die Komponente:

Geben Sie hier die Bildbeschreibung ein

2: Fügen Sie einen neuen Schlüssel in die lokalisierte Datei wie folgt hinzu:

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

Hinweis: Dies ist ein weniger riskanter Ansatz, wenn Sie nur wenige Komponenten aktualisieren möchten. Andernfalls können Sie eine lokalisierte Datei für das Storyboard neu erstellen.


Danke für deine Antwort!!!!!. Ich muss eine Frage stellen: In meinen Projekten habe ich keinen Ausgang für einige der Beschriftungen, Schaltflächen ... erstellt. Wenn ich objectID für diese Schaltflächen und Beschriftungen verwende, reicht dies aus?
Harikarthick K

3

Xlifftool ist als Mac-App verfügbar und funktioniert gut. Es zeigt alle übersetzbaren Zeichenfolgen und Objekte aus info.plist, lokalisierbaren Zeichenfolgen und dem Storyboard.

Laden Sie es hier für den Mac herunter: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Schritt 1: Wählen Sie in Xcode Ihren Projektordner im Projektnavigator aus. Wählen Sie dann Editor / Export für Lokalisierung ...

Ihre übersetzbaren Zeichenfolgen werden in einer xliff-Datei in der Sprache enthalten sein, die Sie für die Lokalisierung in Xcode ausgewählt haben.

Schritt 2: Öffnen Sie diese Datei mit xlifftool und übersetzen oder aktualisieren Sie Ihre Übersetzungen, die dort zuvor durchgeführt wurden.

Schritt 3: Laden Sie dann mit Editor / Import Localizations wieder in Ihr Projekt hoch ...


Eine weitere Alternative für macOS ist Loca Studio . Ähnlich wie bei Xlifftool kann die App das Ergebnis des Xcode-Aktionseditors -> Zur Lokalisierung exportieren öffnen. Es verfügt über einige erweiterte Filter- und Suchfunktionen sowie automatische QS-Prüfungen. (vollständige Offenlegung: Ich bin der Hauptentwickler).
guru_meditator

0

Dies ist meine einfache Möglichkeit, neuen Text von Storyboard oder XIB auf Lokalisierungszeichenfolge zu aktualisieren

1- Verwenden Sie dieses Skript http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- Wählen Sie Ihre Lokalisierungszeichenfolge aus , die Sie aktualisieren möchten, und wechseln Sie Ihre Sprachzeichenfolge von "Lokalisierungszeichenfolge" zu "Interface Builder Storyboard".

3- schalte es zurück :)

Getan.

Geben Sie hier die Bildbeschreibung ein


Es ändert die Datei in Interface Builder Storyboard, aber dann nach 1 oder 2 Sekunden wieder auf Localizable Strings und keine Ergänzung zu Localizable Strings für neuen Ansichtstext
Mujahid Latif

@ MujahidLatif Ich benutze diesen Pod gerade, er ist wirklich nützlich für mich und kann Storyboard-Lokalisierungen und Localization.String aktualisieren, ebenso wie github.com/Flinesoft/BartyCrouch
Fadi Abuzant

0

Option 1
Xcode kann die Datei neu laden, indem die Datei entweder in einen [Interface Builder Cocoa Touch Storyboard]Dateityp oder einen [Localizable Strings]Dateityp konvertiert wird .

Wählen Sie Ihre Basis-Storyboard-Datei im Projektnavigator aus. Suchen Sie den Abschnitt Lokalisierung im Dateiinspektor . Wenn Ihre Datei derzeit eine ist [Localizable Strings], ändern Sie sie in [Interface Builder Cocoa Touch Storyboard]oder umgekehrt.
Xcode sollte Ihr Storyboard auf die aktuelle Version konvertiert haben und dabei Ihre alten Lokalisierungsbemühungen beibehalten. Hier können Sie die Datei auf den ursprünglichen Dateityp zurücksetzen, wenn Sie möchten.

Option 2
Verwenden Sie diese Optionibtool , um die Zeichenfolgen in Ihrem Storyboard zu extrahieren.

Öffnen Sie die Terminal-Anwendung.
Suchen Sie Ihr Base.lprojVerzeichnis.
Verwenden Sie diese Zeile, um die Zeichenfolgen zu extrahieren:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

Nachdem ibtool die Zeichenfolgen extrahiert hat file_name.strings, können Sie sie kopieren und in Ihre Originaldatei einfügen .strings.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.