iphone - strings - xcode base internationalization




iOS-Lokalisierung-Aktualisierung von Localizable.strings mit nur neuen Zeichenfolgen (3)

Kasse BartyCrouch , löst es perfekt Ihr Problem. Außerdem ist es Open Source , wird aktiv gewartet und kann problemlos in Ihr Projekt integriert und integriert werden.

Installieren Sie BartyCrouch über Homebrew :

$ brew install bartycrouch

Aktualisieren Sie Ihre Localizable.strings Dateien inkrementell :

$ bartycrouch code -p "/path/to/code/directory" -l "/directory/containing/Localizables" -a

Dies wird genau das tun, was Sie gesucht haben.

Um Ihre Localizable.strings Dateien im Laufe der Zeit zu aktualisieren, empfehle ich dringend, ein Build-Skript hinzuzufügen (Anweisungen zum Hinzufügen eines Build-Skripts here ):

if which bartycrouch > /dev/null; then
    # Incrementally update all Storyboards/XIBs strings files
    bartycrouch interfaces -p "$PROJECT_DIR"

    # Add new keys to Localizable.strings files from NSLocalizedString in code
    bartycrouch code -p "$PROJECT_DIR" -l "$PROJECT_DIR" -a -s
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Zusätzlich zur schrittweisen Aktualisierung Ihrer Localizable.strings Dateien wird auch sichergestellt, dass Ihre Storyboards / XIBs Strings-Dateien mit neu hinzugefügten Schlüsseln aktualisiert werden .

Stellen Sie sicher, BartyCrouch auf BartyCrouch für zusätzliche Informationen zu überprüfen.

Ich habe Google und StackOverflow durchsucht und habe immer noch keine klare Antwort auf eine einfache und automatisierte Art, dies zu tun, aber hier ist das Szenario:

  1. Ich habe eine App mit 1000 Strings in en, fr, de, es, es lokalisiert.
  2. Ich erstelle ein neues Feature, das 10 deutlich neue NSLocalizedString() Schlüssel erzeugt.
  3. Ich möchte nur diese 10 neuen Zeichenfolgen an die Enden der Dateien angehängt:
    • en.lproj / Localizable.strings
    • fr.lproj / Localizable.strings
    • es.lproj / Localizable.strings
    • de.lproj / Localizable.strings
    • it.lproj / Localizable.strings

genstrings ruft alle 1010 verschiedenen Strings ab. Das ist ein Schmerz, denn ich muss diese "10 Nadeln" jedes Mal, wenn ich ein Update mache, "im Heuhaufen nadeln".

UPDATE 19-SEP-2014 - XCode 6 - Apple hat endlich die Unterstützung für den XLIFF-Export und -Import Ihrer .strings-Dateien veröffentlicht. Was ist neu in XCode 6? Lokalisierung

Linguan (v1.1.3), während es die meiste Zeit ein schönes Werkzeug ist, beginnt es im anderen Sinne ein Werkzeug zu sein. Es führt die Änderungen zusammen, aber einige Zeichenfolgen stimmen beim Zusammenführen nicht richtig überein, so dass jedes Mal, wenn eine Scan-Quelle erstellt wird, 100 neue doppelte Schlüssel sowie die 10 Zeichenfolgen erstellt werden, sodass ich mehr Arbeit mache.

FileMerge Wie unten vorgeschlagen, versuchen Sie einen Unterschied zwischen alten und neuen Versionen der genstrings Ausgabedateien zu machen. Die genstrings Ausgabe hat die Strings alphabetisch sortiert, so dass 10 Strings, die über 1000 verstreut sind, bedeuten, dass 200 Unterschiede zu überprüfen sind. es /*...*/ die /*...*/ und die "..." = "..." und sagt, dass die ... aktualisiert wurde. Es wurde nicht aktualisiert, sondern nur an einen neuen Speicherort in der Datei verschoben. Mehr und mehr sieht es so aus, als würde ich ein benutzerdefiniertes Tool schreiben müssen.

MacHG + FileMerge auf einer Randnotiz, aus irgendeinem seltsamen Grund nicht gerne Diffs aus dem Repository mit der Arbeitskopie von Localizable.strings. Die linken und rechten Bereiche erscheinen leer. UPDATE: Stellt fest, dass Variationen in einigen Changesets als UTF-16 gespeichert sind und einige als UTF-8 damit verschraubt sind, ein korrektes Diff zu machen.

Bash Script + FileMerge Ich habe das folgende Skript geschrieben, um meine englische Referenzdatei nach jedem Hinzufügen neuer NSLocalizedString Einträge zu verwalten:

#LOCALISATION UPDATE SCRIPT
#
#This will create a temporary copy of the current 'en' reference file then generate the 
#latest reference file using the 'genstrings' tool. Finally forcing FileMerge to launch 
#and diff the changes.
#
#Last Updated: 2014-JAN-06
#Author(s): Josh Wilson

clear
#assuming this script is run from $SRCROOT

#Backup Existing 'en' reference
cp "en.lproj/Localizable.strings" "en.lproj/Localizable-src.strings"

#Scan source files for 'NSLocalizableString' macros
genstrings -q -u -o en.lproj Classes/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPad/*.{m,mm}
genstrings -q -u -a -o en.lproj Classes/iPhone/*.{m,mm}

#Force FileMerge to launch and diff the update (NOTE: piping to cat forces GUI to open)
opendiff "en.lproj/Localizable-src.strings" "en.lproj/Localizable.strings" | cat

#Cleanup up temporary file
rm "en.lproj/Localizable-src.strings"

Aber das aktualisiert nur die EN-Datei und mir fehlt eine Möglichkeit, die anderen Sprachdateien mit den neuen Schlüsseln zu aktualisieren. Dieser war gut für Fälle, in denen ich kein englisches Wort als Schlüssel habe und Genstrings bombardiert meine "welcome_message" = "Welcome!" mit "welcome_message" = "welcome_message"

POEditor http://poeditor.com/ . Dies ist ein Online-Tool und ein Abonnement nach 1000 Strings. Scheint gut zu funktionieren, aber es wäre gut, wenn es ein nicht auf Abonnements basierendes Tool gäbe.

Traducto Pro Scheint einen guten Job zu machen, mit XCode zu integrieren und die Strings zu extrahieren und die Dinge zusammenzufügen. Aber es ist unmöglich, etwas zurückzubekommen, bis es vollständig übersetzt ist, so dass Sie gezwungen werden, ihre Übersetzungsdienste zu nutzen.

Sicherlich wurde diese Funktionalität zuvor implementiert. Wie hält Apple seine Apps lokalisiert?

Script-Junkies, ich rufe dich an! Die iOS-Entwicklung läuft schon seit einiger Zeit und Lokalisierung ist üblich, sicherlich gibt es dafür mittlerweile eine ausgereifte Lösung?

Python-Skript update_strings.py : Stackoverflow schlug schließlich eine verwandte Frage und das Python-Skript in dieser Antwort vor Best Practice mit NSLocalizedString sieht vielversprechend aus ...

Getestet und in seiner aktuellen Form (31-MAI-2013) behandelt es keine mehrzeiligen Kommentare, wenn Sie doppelte Kommentare haben (erwartet einzeilige Kommentare).

Müsste nur die Regex ein wenig zwicken.


Sie können dieses Xcode-Plugin, das ich für OneSky entwickelt habe , ausprobieren , es zielt darauf ab, den Arbeitsablauf der Lokalisierung für iOS / Mac OSX-Entwickler zu verbessern.

Das String-Generierungsfeature des Plugins führt genstrings und ibtool --export-strings-file zu den ausgewählten Quell- / IB-Dateien, neue Dateien werden automatisch dem Projekt und dem Ziel hinzugefügt, neue Strings werden in bestehende Dateien mit Kommentaren eingebunden.

Es werden nur Strings für die Basissprache generiert / aktualisiert, aber Sie können andere Funktionen des Plugins nutzen, um den Übersetzungsexport und -import mit der für Crowdsource-Projekte kostenlosen OneSky-Plattform zu automatisieren.


wenn du die genstrings für die vorherige version hast, könnte nur ein "diff" zwischen neu und alt die tricks machen

EDIT: Am besten verwenden Sie vimdiff, um mit utf-16-Dateien umzugehen





translation