genstringsコンソール ツールを使用して.stringsファイルを作成しない場合、NSBundle のlocalizedStringForKey:value:table:メソッドを直接呼び出すよりも、 NSLocalizedStringマクロを使用する利点はありますか?
これらのマクロは、同じ NSBundle メソッドを呼び出します。では、これらのマクロの唯一の目的はgenstringsのサポートですか?
genstringsコンソール ツールを使用して.stringsファイルを作成しない場合、NSBundle のlocalizedStringForKey:value:table:メソッドを直接呼び出すよりも、 NSLocalizedStringマクロを使用する利点はありますか?
これらのマクロは、同じ NSBundle メソッドを呼び出します。では、これらのマクロの唯一の目的はgenstringsのサポートですか?
NSLocalizedString
定義を見ると:
#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
コメントの指定も可能にしながら、デフォルトの引数NSLocalizedString
で呼び出すだけであることが明らかになります(これは.によって無視されます)。localizedStringForKey:
localizedStringForKey:
したがって、localizedStringForKey:
次の用途に適しています。
複数の文字列テーブルの処理。
翻訳が見つからない場合のカスタム戻り値の指定 ( value
arg)。
NSLocalizedString
それどころか:
最も単純な (最も一般的な?) ケース (1 つの文字列テーブルのみ) により適しています。
よりコンパクトです。
コンテキスト コメントを指定できます。
いつどちらを使用するのですか?
IMO、最大の基準は、複数の文字列テーブルがあるかどうかです。localizedStringForKey:
そうでない場合は、 を使用する必要がありますNSLocalizedString
。
お役に立てれば。
また、入力が短くなり、読みやすくなります。基礎となるメソッド呼び出し (非標準の文字列ファイルなど、私はかなり頻繁に使用します) を使用する必要がある場合もありますが、通常NSLocalizedString()
ははるかに便利です。監査も簡単です (この例については、find_nonlocalizedを参照してください)。