これはバグか「機能」のどちらかだと思いますがgenstrings、誰かがこれに遭遇したか、答えを知っているかどうかを確認したかった. このためのレーダーを開くことを計画していました。
独自のローカリゼーション マクロを使用します。と呼びましょうCustomLocalizedString。私たちのコード ベースは非常に大きく、多くのサードパーティ ライブラリを使用しています。サードパーティのライブラリの大部分では、ローカライズされた文字列が存在する場合でも、それを望んでいません。ローカライズされた文字列を使用したい場合は、サードパーティのライブラリを変更してCustomLocalizedStringマクロを使用します。気にしない文字列はNSLocalizedString*マクロを使用しているため、これは問題ではないと考えられていました。
ローカリゼーションは基本的に、問題のあるいくつかの文字列にフラグを立て始めました。少し調べたところ、サードパーティのライブラリからのものであることがわかりました。さらに、存在しないはずの他の文字列も含めていることに気付きました (多数の文字列があります)。マルコを使った弦NSLocalizedString*です。
したがって、 の呼び出しgenstringsは次のようになります。
genstrings -o output -s CustomLocalizedString
実際にはxargsandfindを使用してファイル引数を作成するので、簡潔にするためにその部分を省略しています。出力に基づいて、と文字列のgenstrings両方をLocalizable.strings ファイルに入れるように見えます。NSLocalizedStringCustomLocalizedString
さらに確認するには、これでファイルを作成しました:
NSLocalizedString(@"Normal localized string macro", nil);
CustomLocalizedString(@"Custom localized string macro", nil);
そして走った:
genstrings -o out -s CustomLocalizedString localized_string.txt
出力は次のとおりです。
/* No comment provided by engineer. */
"Custom localized string macro" = "Custom localized string macro";
/* No comment provided by engineer. */
"Normal localized string macro" = "Normal localized string macro";
実行man genstringsすると、次のようになります。
-s routine
Substitutes routine for NSLocalizedString. For example, -s MyLocalString will catch calls to MyLocalString and MyLocalStringFromTable.
マクロが無視されるように聞こえNSLocalizedString*ますが、そうではありません。
findローカライズしたいサードパーティのライブラリのみを含めることができるように、すでに書き直したことに注意してください。サードパーティのライブラリは基本的にすべて 1 つのディレクトリにあります。CustomLocalizedStringチームには多くの開発者がいるので、サードパーティの lib ディレクトリを含めて、マクロのみを適切に使用できるようにするフラグまたは何かが不足していないかどうかを試してみたいと思います。そうしないと、誰かが私たちがどのように実行しているかを理解していないことが予測genstringsされ、ローカライズする必要のある文字列がリストに追加されていないために、ローカライズする必要がなかったことに突然気付くのが遅すぎますgenstrings find。