私は(他のすべての人と同じように)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の使用を簡素化する他のアプローチはありますか?それをカプセル化するフレームワークさえあるのでしょうか?