Я столкнулся с той же проблемой. Я хотел бы использовать строку из файла строк языка разработки, если он не может найти локализованную строку на языке пользователя, но, видимо, нет.
В результате я создал свою собственную функцию для получения локализованной строки.
@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
Вы можете сделать синглтон этого и есть макросы, подобные NSLocalizedString, которые требуют localizedStringForKey, или что-то вдоль этих линий, если вы будете.
Действительно я могу. Единственными аргументами являются: 1) Значение по умолчанию не может быть unicode из того, что говорят документы, и 2) у меня тогда были бы все мои «другие» локали, прекрасно разделенные в локализованных файлах, а один «по умолчанию» язык распространен как сумасшедший по всему коду , Я надеялся на более элегантное решение –
Это не идеальный, но все же работоспособный. Я буду считать его принятым. –