web-dev-qa-db-fra.com

Comment utiliser genstrings sur plusieurs annuaires?

J'ai un répertoire, qui a beaucoup de sous-répertoires. ces sous-répertoires ont parfois même des sous-répertoires. il y a des fichiers source à l'intérieur.

Comment pourrais-je utiliser genstrings pour parcourir tous ces répertoires et sous-répertoires?

Disons que je cd à mon répertoire racine dans Terminal, et que je taperais ceci:

genstrings -o en.lproj *.m

Comment pourrais-je lui dire maintenant d'examiner tous ces répertoires? Ou devrais-je ajouter beaucoup de chemins relatifs séparés par des virgules? Comment?

57
dontWatchMyProfile

Une méthode serait:

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

xargs est un beau morceau de Shell-foo. Il faudra des chaînes en standard et les convertir en arguments pour la fonction suivante. Cela peuplera votre commande genstrings avec chaque fichier .m sous le répertoire en cours.

Cette réponse manipule des espaces dans le chemin utilisé afin qu'il soit plus robuste. Vous devriez l'utiliser pour éviter de sauter des fichiers lors du traitement de vos fichiers source.

Edit: comme indiqué dans les commentaires et dans d’autres réponses, il convient de citer * .m.

95
Brian King

Je ne sais pas exactement pourquoi, mais le commandement de Brian n'a pas fonctionné pour moi. Cela a:

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

EDIT: Eh bien, quand j’ai écrit ce texte, j’étais pressé et j’avais besoin de quelque chose qui fonctionne. Le problème qui me posait lorsque j'utilisais la réponse acceptée ci-dessus était qu'il fallait citer "* .m" (et les curieux peuvent trouver une explication de la raison pour laquelle c'est le cas dans les commentaires sur la réponse de Brian King). Je pense que la meilleure solution consiste à utiliser cette réponse originale avec le bit approprié cité, qui se lirait alors:

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

Je laisse cependant ma réponse originale intacte ci-dessus, au cas où cela aiderait toujours quelqu'un pour une raison quelconque.

88
Jonathan Zhan

Cela fonctionne pour moi: 

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

Merci à Brian et Uberhamster. 

17
SEG

Je ne suis pas sûr que quelqu'un l'ait remarqué ou que l'option soit venue plus tard, mais il existe maintenant une option -a qui est genstrings. Aucune des options ci-dessus n'a fonctionné pour moi. Ci-dessous ma solution.

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

Cela affichera également le nom des fichiers lus.

Bien que la commande ci-dessus fonctionne bien, ce n'était pas exactement pour moi, car dans mon dossier de projet, de nombreux fichiers se trouvent dans un dossier mais ne sont pas inclus dans le projet xcode. J'ai donc créé une liste de fichiers utilisés dans mon projet en analysant le fichier pbxproj. Ajout de la liste dans filelist.txt et activation de la commande ci-dessous

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

Je viens d'ajouter un autre chemin à la commande genstrings, comme ceci:

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

..et ça a bien fonctionné!

Btw. une chose pratique sur genstrings. Lorsque vous continuez à développer votre application, genstrings dispose d'un commutateur -a qui ajoute de nouvelles chaînes au fichier de chaîne localisé.

3
Emmanuel Ay

J'ai beaucoup de code dans les fichiers .mm alors je dois utiliser:

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

ou d'autres variantes, telles que

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

Ce qui suit améliore les réponses précédentes, ceci trouvera les fichiers .h et .m:

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

Étant donné que personne n’a mis en ligne de solution à la fois avec Objective-C et Swift, je pensais que je partagerais comment je le fais. 

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

En utilisant ceci, votre fichier de chaînes localisables sera remplacé par des chaînes des fichiers Swift et objective-c.

Edit: Vous devez cd dans le répertoire avec tous vos sous-répertoires. 

2
Matt

Rapide 

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

Si vous avez besoin du fichier dans le même dossier

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

J'ai eu des problèmes pour générer le fichier de chaînes de caractères pour une structure de dossiers où certains des dossiers avaient des espaces dans leurs noms.

J'ai trouvé une solution intéressante sur ce site: http://riveroften.com/generate-localizable-strings-file-with-genstrings/

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

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

Cela peuplera votre commande genstrings avec chaque fichier .m dans le répertoire en cours. Créez ensuite la "clé/contexte" NSLocalizedString () dans le fichier Localizable.string, qui peut être utilisé n’importe où dans le projet. 

0
sudhakkar k