Как использовать genstrings для нескольких каталогов?
У меня есть каталог, в котором много подкаталогов. у этих субдиров иногда даже есть субдиры. есть исходные файлы внутри.
Как я могу использовать genstrings для просмотра всех этих dirs и subdirs?
Скажем, я подключился к корневому корню в терминале, а затем наберу следующее:
genstrings -o en.lproj *.m
Как я могу сейчас рассказать обо всех этих каталогах? Или мне нужно добавить много относительных путей, разделенных запятой? как?
Ответы
Ответ 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
Если вложенные папки не слишком много, это будет работать отлично.