it-swarm.com.de

Wie verwende ich Genstrings in mehreren Verzeichnissen?

Ich habe ein Verzeichnis, das viele Unterverzeichnisse hat. diese Subdirs haben manchmal sogar Subdirs. darin befinden sich Quelldateien.

Wie kann ich Genstrings verwenden, um all diese Verzeichnisse und Unterverzeichnisse durchzugehen?

Nehmen wir an, ich würde in mein Hauptverzeichnis in Terminal cd wechseln und dann Folgendes eingeben:

genstrings -o en.lproj *.m

Wie könnte ich es jetzt sagen, in all diese Verzeichnisse zu schauen? Oder müsste ich viele relative Pfade durch Kommas getrennt eingeben? Wie?

57

Eine Methode wäre:

find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj

xargs ist ein schöner Teil von Shell-foo. Es nimmt Strings in standard in und konvertiert sie in Argumente für die nächste Funktion. Damit wird Ihr genstrings-Befehl mit jeder .m-Datei unterhalb des aktuellen Verzeichnisses aufgefüllt.

Diese Antwort behandelt Leerzeichen im verwendeten Pfad, sodass sie robuster ist. Sie sollten es verwenden, um zu vermeiden, dass Dateien bei der Verarbeitung Ihrer Quelldateien übersprungen werden.

Bearbeiten: Wie in den Kommentaren und in anderen Antworten gesagt, sollte * .m zitiert werden.

95
Brian King

Ich weiß nicht genau warum, aber Brians Befehl funktionierte nicht für mich. Dies tat:

find . -name \*.m | xargs genstrings -o en.lproj

EDIT: ... Nun, als ich das ursprünglich geschrieben habe, hatte ich es eilig und brauchte nur etwas, das funktionierte. Das Problem, das bei der Verwendung der akzeptierten Antwort für mich auftrat, war, dass "* .m" zitiert werden muss (und der Neugierige kann eine Erklärung finden, warum dies in den Kommentaren zu Brian Kings Antwort der Fall ist). Ich denke, die beste Lösung ist, diese ursprüngliche Antwort mit dem entsprechenden Anführungszeichen zu verwenden, das dann lauten würde:

find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj

Ich lasse meine ursprüngliche Antwort jedoch unangetastet, falls sie dennoch jemandem aus irgendeinem Grund weiterhilft.

88
Jonathan Zhan

Das funktioniert für mich: 

find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj

Danke an Brian und Uberhamster. 

17
SEG

Nicht sicher, ob jemand es bemerkt hat oder die Option später kam, aber jetzt gibt es eine -a-Option in Genstrings. Keine der obigen Optionen hat für mich funktioniert. Unten ist meine Lösung.

find ./ -name "*.m" -exec echo {} \; -exec genstrings -a -o en.lproj {} \;

Dadurch wird auch der Name der gelesenen Dateien gedruckt.

Obwohl der obige Befehl gut funktioniert, war er nicht genau für mich, da sich in meinem Projektordner viele Dateien befinden, die in einem Ordner liegen, aber nicht im Xcode-Projekt enthalten sind. Also habe ich eine Liste der Dateien erstellt, die in meinem Projekt verwendet werden, indem die pbxproj-Datei analysiert wird. Die Liste wurde in filelist.txt hinzugefügt und unter dem Befehl ausgelöst

while read f; do find ./ -name "$f" -exec echo {} \; -exec genstrings -a -o en.lproj {} \; ; done < filelist.txt
4
Ashishail

Ich habe gerade einen weiteren Pfad zu dem Befehl genstrings hinzugefügt:

genstrings -o en.lproj *.m Classes/*.m

..und es hat gut geklappt!

Übrigens eine praktische Sache über Genstrings. Wenn Sie Ihre App weiterentwickeln, verfügt genstrings über einen Schalter -a, der neue Zeichenfolgen an die lokalisierte Zeichenfolgendatei anfügt.

3
Emmanuel Ay

Ich habe eine Menge Code in .mm-Dateien, daher muss ich Folgendes verwenden:

find . -name \*.m -or -name \*.mm | xargs genstrings

oder andere Varianten, wie z

find . -name \*.m -or -name \*.mm | xargs -0 genstrings -o en.lproj
3
Rok Jarc

Die folgenden Verbesserungen gegenüber den früheren Antworten wurden gefunden. H- und .m-Dateien werden gefunden:

find ./ -name *.h -print0 -o -name *.m -print0 | xargs -0 genstrings -o en.lproj
2
cbartel

Da niemand mit Objective-C und Swift eine Lösung gepostet hat, würde ich sagen, wie ich das mache. 

find ./ -name "*.Swift" -print0 -or -name "*.m" -print0 | xargs -0 genstrings -o en.lproj

Auf diese Weise wird Ihre lokalisierbare Zeichenfolge-Datei durch Zeichenfolgen aus den Dateien Swift und Objective-c ersetzt.

Bearbeiten Sie: Sie müssen cd in das Verzeichnis mit all Ihren Unterverzeichnissen eingeben. 

2
Matt

Schnell 

find ./ -name \*.Swift -print0 | xargs -0 genstrings -o .en.lproj

Wenn Sie die Datei in demselben Ordner benötigen

find ./ -name \*.Swift -print0 | xargs -0 genstrings -o .
1
anoop4real

Ich hatte Probleme beim Generieren der String-Datei für eine Ordnerstruktur, in der einige Ordner Leerzeichen in ihren Namen hatten.

Ich habe auf dieser Website eine Lösung von Nizza gefunden: http://riveroften.com/generate-localizable-strings-file-with-genstrings/

find . -name "*.m" -print0 | xargs -0 genstrings -o "en.lproj"
1
raliz

find ./ -name "* .m" -print0 | xargs -0 genstrings -o de.lproj

Dadurch wird Ihr genstrings-Befehl mit jeder .m-Datei im aktuellen Verzeichnis aufgefüllt. Dann erstellen Sie den NSLocalizedString () "key/context" in der Localizable.string-Datei, die an beliebiger Stelle im Projekt verwendet werden kann. 

0
sudhakkar k