gpt4 book ai didi

objective-c - Cocoa/Obj-c : How to fetch string from english localizable. 字符串,无论首选本地化如何

转载 作者:行者123 更新时间:2023-12-03 17:30:28 26 4
gpt4 key购买 nike

在我的应用程序中,我想在某个地方用英语显示一些消息。为此,要求始终从 English.lproj/Localized.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];
}

所以,这就是发生的事情。

  • 从参数中获取表(字符串文件)的名称,如果您碰巧传入了nil,则默认为@"Localizable"
  • en.lproj文件夹中查找{table}.strings的路径
  • 如果文件不存在,则返回nil
  • 将文件作为数据 block 读取
  • 尝试将 blob 解码为属性列表。这是可行的,因为 .strings 文件采用旧式 plist 格式,因此我们可以使用此 plist 解析器将其构建为 NSDictionary
  • 如果我们没有得到 NSDictionary 返回,则返回 nil
  • 返回字典中包含的请求 key 的任何内容(如果找不到 key ,可能返回nil)

读取和反序列化位可能会很昂贵,因此我建议在某处的属性中缓存适当的信息。

关于objective-c - Cocoa/Obj-c : How to fetch string from english localizable. 字符串,无论首选本地化如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7398143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com