3

在检查了许多主题之后,我仍然无法弄清楚:使用静态 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。

为什么 ?

长话短说,以防止在文档的多个部分中对同一字符串进行多次定义(这将防止在我的整个应用程序中进行一次编辑)。

考虑这个例子,其中定义的冗余是安静显式的:

//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

当然,在安静密集且大的项目中更有意义,其中字符串将用于不同的方法,并且在您使用许多相似的本地化字符串的上下文中。

4

2 回答 2

5

通常这应该都在你的实现文件中:

static NSString* myString = nil;

@implementation myClass

+ (void)initialize
{
    myString = NSLocalizedString(@"min", nil);
}

- (NSString *)aMethod
{
    return myString;
}

@end
于 2013-10-15T10:54:10.170 回答
1

还有另一种方法,您可以在不使用上述初始化方法的情况下编写相同的方法:-

static NSString* mystring=nil;
-(NSString*)aMethod
{
    mystring = NSLocalizedString(@"min", nil);
    return mystring;
}
于 2013-10-15T12:14:31.943 回答