私は(他のすべてと同様に)NSLocalizedString
アプリのローカライズに使用しています。
残念ながら、いくつかの「欠点」があります(必ずしもNSLocalizedString自体の障害ではありません)。
- Xcodeの文字列のオートコンプリートはありません。これにより、エラーが発生しやすくなるだけでなく、作業が面倒になります。
- 同等の文字列がすでに存在することを知らなかっただけで、文字列を再定義してしまう可能性があります(つまり、「パスワードを入力してください」対「最初にパスワードを入力してください」)。
- オートコンプリートの問題と同様に、コメント文字列を「記憶」/コピーして貼り付ける必要があります。そうしない
genstring
と、1つの文字列に複数のコメントが表示されます。 genstring
一部の文字列をローカライズした後で使用する場合は、古いローカライズを失わないように注意する必要があります。- 同じ文字列がプロジェクト全体に散らばっています。たとえば、
NSLocalizedString(@"Abort", @"Cancel action")
どこでも使用している場合NSLocalizedString(@"Cancel", @"Cancel action")
、コードの整合性を高めるために、コードレビューで文字列の名前を変更するように求められます。
私が行うこと(そして、SOでのいくつかの検索の後に、多くの人がこれを行うと思った)は、すべてのローカライズコードstrings.h
を含む個別のファイルを用意すること#define
です。例えば
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
これは基本的に、コード補完、変数名を変更するための単一の場所(したがってgenstringは不要)、および自動リファクタリングのための一意のキーワードを提供します。ただし、これは、#define
本質的に構造化されていない(つまり、LocString.Common.Cancelなどの)ステートメントの集合全体を犠牲にすることになります。
ですから、これはいくらかうまく機能しますが、あなたのプロジェクトでどのようにそれを行うのかと思っていました。NSLocalizedStringの使用を簡略化する他のアプローチはありますか?それをカプセル化するフレームワークさえあるのでしょうか?