Вам нужно будет сделать это вручную, например:
- (NSString *)englishLocalizedStringForKey:(NSString *)key inTable:(NSString *)table {
if (table == nil) {
table = @"Localizable";
}
NSString *path = [[NSBundle mainBundle] pathForResource:table
ofType:@"strings"
inDirectory:nil
forLocalization:@"en"];
if (path == nil) {
return nil;
}
NSData *data = [NSData dataWithContentsOfFile:path];
id plist = [NSPropertyListSerialization propertyListWithData:data
options:0
format:NULL
error:NULL];
if (![plist isKindOfClass:[NSDictionary class]]) {
return nil;
}
return [plist objectForKey:key];
}
Итак, вот что происходит.
- Получите имя таблицы (строкифайл) из параметров, по умолчанию
@"Localizable"
, если вы случайно передали nil
- Найдите путь
{table}.strings
внутри папки en.lproj
- , верните
nil
, еслифайл не существует - чтение файла в виде большого двоичного объекта данных
- попытка декодировать большой двоичный объект в виде списка свойств.Это работает, потому что файлы
.strings
имеют старый формат plist, поэтому мы можем использовать этот анализатор plist, чтобы встроить его в NSDictionary
для нас - , если мы не получили
NSDictionary
назад, return nil
- вернуть то, что словарь имеет для ключа запроса (может вернуть
nil
, если ключ не может быть найден)
Бит чтения и десериализации можетпотенциально может быть дорогим, поэтому я бы рекомендовал кэшировать соответствующую информацию в каком-либо свойстве