Как использовать genstrings в нескольких каталогах? - PullRequest
58 голосов
/ 30 апреля 2010

У меня есть каталог, в котором много подкаталогов. у этих подкаталогов иногда даже есть подкаталоги. внутри находятся исходные файлы.

Как я могу использовать genstrings, чтобы пройти через все эти директории и субдиректории?

Допустим, я перехожу к своему корневому каталогу в Терминале, а затем набираю:

genstrings -o en.lproj *.m

Как мне теперь сказать, чтобы просмотреть все эти каталоги? Или мне нужно добавить много относительных путей через запятую? как?

Ответы [ 12 ]

97 голосов
/ 30 апреля 2010

Один метод будет:

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

xargs - хороший кусок shell-foo. Он будет принимать строки по стандарту in и преобразовывать их в аргументы для следующей функции. Это заполнит вашу команду genstrings каждым файлом .m под текущим каталогом.

Этот ответ изменяет пробелы в используемом пути, чтобы сделать его более надежным. Вы должны использовать его, чтобы не пропускать файлы при обработке исходных файлов.

Изменить: как сказано в комментариях и в других ответах, * .m должны быть указаны.

88 голосов
/ 18 августа 2010

Я не знаю точно, почему, но команда Брайана не сработала для меня. Это сделал:

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

EDIT: Ну, когда я изначально писал это, я спешил и просто нуждался в чем-то, что сработало. Проблема, которая возникала у меня при использовании принятого ответа выше, заключалась в том, что «* .m» нужно процитировать (и любопытный может найти объяснение, почему это так в комментариях к ответу Брайана Кинга). Я думаю, что лучшее решение - использовать этот оригинальный ответ с соответствующим цитируемым битом, который будет выглядеть следующим образом:

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

Я оставляю свой первоначальный ответ без изменений, на тот случай, если он по-прежнему помогает кому-либо по какой-либо причине.

17 голосов
/ 27 апреля 2012

Это работает для меня:

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

Спасибо Брайану и Уберхамстеру.

5 голосов
/ 01 августа 2014

Не уверен, если кто-то заметил это или опция появилась позже, но теперь есть опция -a - genstrings. Ни один из вышеперечисленных вариантов не работал для меня. Ниже мое решение.

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

Также будет напечатано имя прочитанных файлов.

Хотя приведенная выше команда работает нормально, она была не совсем для меня, поскольку в папке моего проекта есть много файлов, которые лежат в папке, но не включены в проект xcode. Поэтому я создал список файлов, используемых в моем проекте, путем анализа файла pbxproj. Добавил список в filelist.txt и запустил ниже команду

while read f; do find ./ -name "$f" -exec echo {} \; -exec genstrings -a -o en.lproj {} \; ; done < filelist.txt
3 голосов
/ 06 августа 2013

У меня много файлов в .mm файлах, поэтому я должен использовать:

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

или другие варианты, такие как

find . -name \*.m -or -name \*.mm | xargs -0 genstrings -o en.lproj
3 голосов
/ 23 января 2011

Я просто добавил еще один путь к команде genstrings, например:

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

.. и все заработало!

Btw. удобная вещь о генстрингах. Когда вы продолжаете разработку своего приложения, в genstrings есть ключ -a, который добавляет новые строки в файл локализованных строк.

2 голосов
/ 23 ноября 2017

Поскольку никто не опубликовал решение как с Objective-C, так и со Swift, я решил поделиться тем, как я это делаю.

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

При использовании этого файла локализуемые строки будут заменены строками из файлов swift и target-c.

Edit: Вам нужно cd в каталог со всеми вашими подкаталогами.

2 голосов
/ 27 июня 2013

В предыдущих ответах улучшено следующее: здесь будут найдены файлы .h и .m:

find ./ -name *.h -print0 -o -name *.m -print0 | xargs -0 genstrings -o en.lproj
1 голос
/ 20 апреля 2017

Свифт

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

Если вам нужен файл в той же папке

find ./ -name \*.swift -print0 | xargs -0 genstrings -o .
1 голос
/ 30 января 2013

У меня были проблемы при создании файла строк для структуры папок, где в некоторых папках были пробелы в именах.

На этом сайте я нашел хорошее решение: http://riveroften.com/generate-localizable-strings-file-with-genstrings/

find . -name "*.m" -print0 | xargs -0 genstrings -o "en.lproj"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...