ディレクトリがあり、そこには多くのサブディレクトリがあります。これらのサブディレクトリにはサブディレクトリがある場合もあります。内部にソースファイルがあります。
Genstringsを使用して、これらすべてのディレクトリとサブディレクトリを移動するにはどうすればよいですか?
ターミナルのルートディレクトリにcdして、次のように入力するとします。
genstrings -o en.lproj *.m
これらのすべてのディレクトリを調べるようにするにはどうすればよいでしょうか?または、コンマで区切られた多数の相対パスを追加する必要がありますか?どうやって?
1つの方法は次のとおりです。
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」を引用する必要があることでした(そして、好奇心の強い人は、ブライアンキングの答えに関するコメントでなぜこれが当てはまるかについての説明を見つけることができます)。最善の解決策は、適切なビットを引用した元の回答を使用することであり、それは次のようになります。
find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
しかし、何らかの理由で誰にも役立つ場合に備えて、上記の元の返信をそのまま残しています。
これは私のために働く:
find ./ -name \*.m -print0 | xargs -0 genstrings -o en.lproj
ブライアンとウーバーハムスターに感謝します。
誰かが気付いたのか、オプションが後で出たのかはわかりませんが、今は-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
次のように、genstringsコマンドに別のパスを追加しました。
genstrings -o en.lproj *.m Classes/*.m
..そしてそれはうまくいきました!
ところでgenstringsについての便利なこと。アプリの開発を続けると、genstringsには、ローカライズされた文字列ファイルに新しい文字列を追加する-aスイッチがあります。
Objective-CとSwiftの両方を使用したソリューションは誰も投稿していないため、その方法を共有します。
find ./ -name "*.Swift" -print0 -or -name "*.m" -print0 | xargs -0 genstrings -o en.lproj
これを使用すると、ローカライズ可能な文字列ファイルがSwiftおよびObjective-Cファイルの両方の文字列に置き換えられます。
編集:すべてのサブディレクトリを含むディレクトリにcd
する必要があります。
私は.mmファイルに多くのコードがあるので、使用する必要があります:
find . -name \*.m -or -name \*.mm | xargs genstrings
または他のバリアント、など
find . -name \*.m -or -name \*.mm | xargs -0 genstrings -o en.lproj
以下は、以前の回答を改善します。これにより、.hファイルと.mファイルの両方が見つかります。
find ./ -name *.h -print0 -o -name *.m -print0 | xargs -0 genstrings -o en.lproj
Swift
find ./ -name \*.Swift -print0 | xargs -0 genstrings -o .en.lproj
同じフォルダーにファイルが必要な場合
find ./ -name \*.Swift -print0 | xargs -0 genstrings -o .
一部のフォルダーの名前にスペースが含まれているフォルダー構造の文字列ファイルの生成に問題がありました。
このサイトで素敵なソリューションを見つけました: http://riveroften.com/generate-localizable-strings-file-with-genstrings/
find . -name "*.m" -print0 | xargs -0 genstrings -o "en.lproj"
find ./ -name "* .m" -print0 | xargs -0 genstrings -o en.lproj
これにより、genstringsコマンドに現在のディレクトリのすべての.mファイルが入力されます。 Localizable.stringファイルにNSLocalizedString() "key/context"を作成するよりも、プロジェクト内の任意の場所で使用できます。