iOS の i18n/l10n 用のツールとプロセスに関するチュートリアルをいくつか読んだことがありますが、その内容に不愉快なほど驚いています。目的の C ファイルからユーザー向けの文字列を外部化する確実な方法はないようです。何か不足していますか?
問題の説明: 英語の文字列を .m ファイルに直接配置する傾向があり、Apple のドキュメントではこれを奨励しているようです。これは Android でも可能ですが、少なくとも Android では、外部化された文字列と外部化されていない文字列の間に明確な違いがあります。一方、iOS では、文字列を呼び出すコードは次のようになります。
NSLocalizedString(@"There was an error loading the image.", nil)
この場合、「画像の読み込み中にエラーが発生しました。」この文字列リソースのキーです。したがって、別の場所で同じ文字列を参照したい場合は、次のようなコードを再度記述する必要があります。
NSLocalizedString(@"There was an error loading the image.", nil)
しかし、これら 2 つの文字列のスペルが同じであることを確認する必要があり、それを確認するためのコンパイル時のチェックはありません。createErrorString というヘルパー関数を作成することもできますが、それは面白くありません。そして、「画像の読み込み中にエラーが発生しました」を置き換えることができました。「ERROR_IMAGE_LOAD」のようなより賢明なキーを使用しますが、それは一般的な慣行ではないようであり、Apple はこの賢明な動作を思いとどまらせているようです。ドキュメントの状態は次のとおりです。
「アプリケーションを開発する際の一般的な規則は、アプリケーションの開発に使用される言語の値と等しいキー名を使用することです。」
Apple は、ソース コードに完全な英語の文字列を入れることを推奨しているようです。だから私は、Apple の指示に逆らうよう同僚を説得しなければならない。
これらのユーザー向けの英語の文字列 (またはキー) をソース コードですべて取得したので、Apple には genstrings というツールが含まれています。翻訳用。アプリを 1 回だけローカライズする場合はこれでうまくいくかもしれませんが、当社ではローカライズは継続的な反復プロセスです。Apple のドキュメントで推奨されている内容を確認してください。
「その後の実行では、genstrings を実行する前に、現在の文字列ファイルのコピーを保存することをお勧めします。その後、新しいバージョンと古いバージョンを比較して、どの文字列がプロジェクトに追加 (または変更) されたかを判断できます。その後、次のことができます。これらのファイルを置き換えて再度ローカライズするのではなく、この情報を使用して、既にローカライズされたバージョンの文字列ファイルを更新してください。」
それはあまり良くないようです。Android と Windows8 では、ソース ツリーを 1 回国際化すると、その時点から、外部化された文字列はそれらが属する xml ファイルに所有されます。iOSでは、それらはソースコードで所有され(一種)、クレイジーなツールによって中間ファイル(またはそれですか?)に集計されます。Localizable.strings ファイルは中間ファイルですか、それとも git にコミットする必要がありますか? これについては、私の会社でまだ議論中です。
(そして、私が知る限り、これはほんの始まりにすぎません。ユーザー向けの文字列の 90% が存在する xib-land では、l10n の非効率なメカニズムも存在するようです。Wil Shipley の記事では、これについて詳しく説明しています。 .)
iOS で文字列を外部化する良い方法について何か提案はありますか? 私の主な質問は Objective-C 文字列に関するものですが、xib ファイルに関する回答も大歓迎です。ありがとう!