动态本地化对象,直接使用。
假设您有一些正在动态提供本地化数据
{
"en": "Hello",
"en-GB": "Good day",
"en-US": "Howdy",
"fr": "Bonjour"
}
从这些数据中创建一个 ZCRLocalizedObject
ZCRLocalizedObject *object = ZCRLocalize(localizedData);
然后检索本地化值
// Device language set to 'British English'
object.localizedObject; // @"Good day"
您可以使用不同的特定性值来指定本地化的确切工作方式。
要求语言和区域完全匹配,否则返回 nil。
NSDictionary *localizedData = @{@"en-GB": @"The colour",
@"en": @"The color"};
ZCRLocalizedObject *object = ZCRLocalize(localizedData);
object = object.withSpecificity(ZCRLocalizationSpecificityExact);
// Device set to 'English'
object.localizedObject; // nil
// Device set to 'British English'
object.localizedObject; // @"The colour"
检查精确匹配,然后基于根语言和任何其他存在的区域进行匹配,在返回 nil 之前。
NSDictionary *localizedData = @{@"en": @"The color"};
ZCRLocalizedObject *object = ZCRLocalize(localizedData);
object = object.withSpecificity(ZCRLocalizationSpecificityLanguage);
// Device set to 'British English'
object.localizedObject; // @"The color"
检查精确匹配,然后检查语言匹配,然后按照首选顺序遍历所有可能的语言,以同样的模式找到匹配项(精确匹配和语言匹配),在返回 nil 之前。这是 ZCRLocalize()
的默认特定性。
NSDictionary *localizedData = @{@"fr": @"La couleur"};
ZCRLocalizedObject *object = ZCRLocalize(localizedData);
// Device set to 'French' then 'English'
object.localizedObject; // @"La couleur"
您可以在创建 ZCRLocalizedObject 时指定首选语言。如果没有提供请求的语言,将使用设备上最近使用的语言。
NSDictionary *localizedData = @{@"en", @"The color",
@"fr": @"La couleur"};
object = ZCRLocalize(localizedData).inLanguage(@"fr");
// Device set to 'English'
object.localizedObject; // @"La couleur"
请注意,虽然 ZCRLocalizedObject 会尽力满足您的语言请求,但它仍然使用其特定性来确定匹配项。
如果您不希望在找不到匹配项时返回 nil,可以向 ZCRLocalizedObject 指定一个默认值。
NSDictionary *localizedData = @{@"en", @"The color"};
object = ZCRLocalize(localizedData).withSpecificity(ZCRLocalizationSpecificityLanguage)
object = object.withDefault(@"Unknown!").inLanguage(@"fr");
object.localizedObject; // @"Unknown!"
ZCRLocalizedObject 是 NSProxy 的子类,并将许多方法defer到其 localizedObject 属性。
这意味着您可以这样操作...
NSDictionary *localizedData = @{@"en": @"ALL CAPS?"};
NSString *string = [(id)ZCRLocalize(localizedData) lowercaseString];
// Device set to 'English'
string; // @"all caps?"
或者甚至...
NSDictionary *localizedData = @{@"en": @"Hello",
@"fr": @"Bonjour"};
id object = ZCRLocalize(localizedData);
// Device set to 'English'
[object isEqual:@"Hello"]; // YES
请注意,根据配置,localizedObject 可能为 nil,这会导致代理在调用未知方法时引发异常。因此,除非提供了默认值或确定可以找到匹配的本地化项,否则在转换代理并发送消息之前,建议先检查 localizedObject 是否为 nil。
“ZCRLocalizedObject”采用MIT许可证。更多详情请参阅LICENSE文件。