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?
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.
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.
Cela fonctionne pour moi:
find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj
Merci à Brian et Uberhamster.
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
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é.
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
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
É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.
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 .
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"
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.