考虑以下情况:
如果在当前语言环境的Localizable.string中找不到关键字,有没有办法让这个宏加载特定语言的字符串?
答案 0 :(得分:1)
NSLocalizedStringWithDefaultValue
函数可能就是您所需要的 - 使用它可以指定案例的默认值,如果找不到给定键的本地化。
答案 1 :(得分:1)
我遇到了同样的问题。我虽然它会使用开发语言字符串文件中的字符串,如果它找不到用户语言的本地化字符串,但显然不是。
我最终创建了自己的函数来获取本地化的字符串。
@interface Localization : NSObject {
NSBundle* fallbackBundle;
}
- (NSString*) localizedStringForKey:(NSString*)key;
@end
@implementation Localization
- (id)init {
if (self = [super init]) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
fallbackBundle = [[NSBundle bundleWithPath:path] retain];
}
return self;
}
- (void)dealloc {
[fallbackBundle release];
[super dealloc];
}
- (NSString*) localizedStringForKey:(NSString*)key {
NSString* result = [[NSBundle mainBundle] localizedStringForKey:key value:@"!#€NOTFOUND%&/" table:nil];
if (result == nil || [result isEqualToString:@"!#€NOTFOUND%&/"]) {
result = [fallbackBundle localizedStringForKey:key value:nil table:nil];
}
if (result == nil) {
result = key;
}
return result;
}
@end
你可以创建一个这样的单例,并且具有类似于调用localizedStringForKey的NSLocalizedString的宏,或者如果你愿意,可以使用类似于这些行的东西。
答案 2 :(得分:0)
通过提供NSLocalizedString函数的第二个参数,如果在Localizable.string中找不到关键字,则可以指定将使用的字符串。
这就是你想要的吗?