ZCRLocalizedObject 0.2.0

ZCRLocalizedObject 0.2.0

测试已测试
Lang语言 Obj-CObjective C
许可协议 MIT
发布最后发布2014年12月

Zach Radke维护。



  • 作者
  • Zach Radke

动态本地化对象,直接使用。

入门指南

假设您有一些正在动态提供本地化数据

{
  "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"

特定性

您可以使用不同的特定性值来指定本地化的确切工作方式。

ZCRLocalizationSpecificityExact

要求语言和区域完全匹配,否则返回 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" 

ZCRLocalizationSpecificityLanguage

检查精确匹配,然后基于根语言和任何其他存在的区域进行匹配,在返回 nil 之前。

NSDictionary *localizedData = @{@"en": @"The color"};

ZCRLocalizedObject *object = ZCRLocalize(localizedData);
object = object.withSpecificity(ZCRLocalizationSpecificityLanguage);

// Device set to 'British English'
object.localizedObject; // @"The color" 

ZCRLocalizationSpecificityMostRecent

检查精确匹配,然后检查语言匹配,然后按照首选顺序遍历所有可能的语言,以同样的模式找到匹配项(精确匹配和语言匹配),在返回 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。

安装

作者

张志远,[email protected]

许可证

“ZCRLocalizedObject”采用MIT许可证。更多详情请参阅LICENSE文件。