いくつかのトピックをチェックした後でも、まだ何かを理解できません: 静的な NSLocalizedString を使用する (最善の) 方法は何ですか。つまり、NSLocalizedString を静的に割り当てて簡単にアクセスする方法です。
理想的には、私はそのようなことをしたいと思います(コンパイルされず、Initializer element is not a compile-time constant
エラーが発生します):
//Somewhere in my header
static NSString* mystring = NSLocalizedString(@"min", nil); //Error : "Initializer element is not a compile-time constant"
@implementation myClass
(NSString*)aMethod
{
return myString;
}
@end
NSLocalizedString が によって定義されたマクロであることは知っていますが、#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
それ
はあまり役に立ちません :S.
なんで ?
簡単に言えば、ドキュメントの複数の部分で同じ文字列が複数定義されるのを防ぐためです (これにより、アプリ全体でワンストローク編集ができなくなります)。
定義の冗長性が quiet explicit である例を考えてみましょう:
//MyDelegate.h
@property IBoutlet NSTextField* myTextField;
//MyDelegate.m
@implementation MyDelegate.m
@synthetize myTextField;
-(void)setTextFieldToDefaultValue
{
[myTextField setStringValue:NSLocalizedString(@"Name",@"This field is used to write one's name");
}
-(BOOL)isTextFieldStringDefault:(NSString*)myString
{
return [[myTextField stringValue] isEqual:NSLocalizedString(@"Name",@"This field is used to write one's name")];
}
@end
もちろん、文字列がさまざまな方法で使用される静かで密集した大規模なプロジェクトや、類似したローカライズされた文字列を多数使用するコンテキストでは、より理にかなっています。