Abh*_*eet 0 macos cocoa objective-c
在我的应用程序中,我想在某个地方用英语显示一些消息。为此,无论用户选择何种本地化,都必须始终从 English.lproj/Localizable.strings 文件中读取消息。我现在不能为此目的使用 NSLocalizedString 方法,因为它总是返回本地化的字符串。请建议一种从默认(或开发)本地化资源文件中读取字符串的方法。
您将不得不手动执行此操作,如下所示:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
所以,这就是正在发生的事情。
@"Localizable"如果碰巧传入默认为nil{table}.strings里面的路径en.lprojnil如果文件不存在则返回.strings文件是旧式的 plist 格式,所以我们可以使用这个 plist 解析器NSDictionary为我们构建它NSDictionary回报,就回来nilnil如果找不到键,可能会返回)读取和反序列化位可能很昂贵,因此我建议将适当的信息缓存在某个属性中。
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |