Nice programing

여러 디렉토리에서 genstring을 사용하는 방법은 무엇입니까?

nicepro 2020. 12. 9. 21:43
반응형

여러 디렉토리에서 genstring을 사용하는 방법은 무엇입니까?


많은 하위 디렉터리가있는 디렉터리가 있습니다. 이러한 하위 디렉터리에는 때때로 하위 디렉터리도 있습니다. 내부에 소스 파일이 있습니다.

이 모든 디렉토리와 하위 디렉토리를 탐색하기 위해 어떻게 genstring을 사용할 수 있습니까?

터미널의 루트 디렉토리로 cd하고 다음을 입력한다고 가정 해 보겠습니다.

genstrings -o en.lproj *.m

이 모든 디렉토리를 조사하라고 지금 어떻게 말할 수 있습니까? 아니면 쉼표로 구분 된 많은 상대 경로를 추가해야합니까? 어떻게?


한 가지 방법은 다음과 같습니다.

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

xargs는 shell-foo의 멋진 덩어리입니다. 표준 입력의 문자열을 가져와 다음 함수의 인수로 변환합니다. 그러면 현재 디렉토리 아래의 모든 .m 파일로 genstrings 명령이 채워집니다.

이 답변은 사용 된 경로의 공백을 처리하므로 더 강력합니다. 소스 파일을 처리 할 때 파일을 건너 뛰지 않도록하려면 사용해야합니다.

편집 : 주석 및 기타 답변에서 언급했듯이 * .m을 인용해야합니다.


이유는 정확히 모르겠지만 브라이언의 명령이 저에게 효과가 없었습니다. 이것은 :

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

편집 : 글쎄, 내가 이것을 처음 썼을 때 나는 서둘러서 작동하는 것이 필요했습니다. 위에서 받아 들여진 대답을 사용할 때 저에게 발생했던 문제는 "* .m"을 인용해야한다는 것입니다 (호기심이 많은 사람은 Brian King의 대답에 대한 주석에서 왜 이런 경우인지에 대한 설명을 찾을 수 있습니다). 가장 좋은 해결책은 적절한 비트를 인용하여 원래 답변을 사용하는 것입니다.

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

어떤 이유로 든 여전히 누군가에게 도움이 될 수 있도록 위의 원래 답장을 그대로 두겠습니다.


이것은 나를 위해 작동합니다.

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

Brian과 Uberhamster에게 감사합니다.


누군가 그것을 눈치 챘거나 옵션이 나중에 왔는지 확실하지 않지만 이제 -a옵션이 있습니다. 젠 스트링. 위의 옵션 중 어느 것도 나를 위해 일하지 않았습니다. 아래는 내 솔루션입니다.

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

다음과 같이 genstrings 명령에 다른 경로를 추가했습니다.

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

.. 잘 됐어요!

Btw. genstrings에 대한 편리한 점입니다. 앱 개발을 계속할 때 genstrings에는 지역화 된 문자열 파일에 새 문자열을 추가하는 -a 스위치가 있습니다.


.mm 파일에 많은 코드가 있으므로 다음을 사용해야합니다.

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

또는 다음과 같은 기타 변형

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

아무도 Objective-C와 Swift로 솔루션을 게시하지 않았기 때문에 어떻게하는지 공유하고 싶습니다.

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

이것을 사용하면 지역화 가능한 문자열 파일이 swift 및 objective-c 파일의 문자열로 대체됩니다.

편집 : cd모든 하위 디렉터리가있는 디렉터리로 이동해야합니다.


다음은 이전 답변을 개선하여 .h 및 .m 파일을 모두 찾습니다.

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

일부 폴더의 이름에 공백이있는 폴더 구조에 대한 문자열 파일을 생성하는 데 문제가있었습니다.

이 사이트에서 좋은 해결책을 찾았습니다 : http://riveroften.com/generate-localizable-strings-file-with-genstrings/

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

빠른

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

같은 폴더에 파일이 필요한 경우

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

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

그러면 현재 디렉토리의 모든 .m 파일로 genstrings 명령이 채워집니다. 프로젝트의 어느 곳에서나 사용할 수있는 Localizable.string 파일에 NSLocalizedString () "key / context"를 만듭니다.


이 시도

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

하위 폴더가 너무 많지 않으면 완벽하게 작동합니다.

참고 URL : https://stackoverflow.com/questions/2744401/how-to-use-genstrings-across-multiple-directories

반응형