Подтвердить что ты не робот

Как использовать genstrings для нескольких каталогов?

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

Как я могу использовать genstrings для просмотра всех этих dirs и subdirs?

Скажем, я подключился к корневому корню в терминале, а затем наберу следующее:

genstrings -o en.lproj *.m

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

4b9b3361

Ответ 1

Один из методов:

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

Благодаря Брайану и Уберхамстеру.

Ответ 4

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

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

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

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

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

Ответ 5

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

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

.. и все получилось отлично!

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

Ответ 6

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

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

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

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

Ответ 7

Следующее улучшает предыдущие ответы, это найдет файлы .h и .m:

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

Ответ 8

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

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

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

Ответ 9

найти./-name "*.m" -print0 | xargs -0 genstrings -o en.lproj

Это заполнит вашу команду genstrings любым .m файлом в текущем каталоге. Затем создайте ключ/контекст NSLocalizedString() в файле Localizable.string, который можно использовать где угодно в проекте.

Ответ 10

Swift

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

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

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

Ответ 11

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

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

Используя этот файл локализуемых строк, вы будете заменены строками из файлов быстрого и Objective-C.

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

Ответ 12

Попробуйте это

genstrings -o English.lproj ./Classes/*.m ./Classes/*.h ./Classes/subclass/*.m

Если вложенные папки не слишком много, это будет работать отлично.