BRLocalize 提供了一种方式,可以在分级的 JSON 文件中存储本地化字符串,然后在 NIB 文件中使用占位符字符串自动替换为它们的本地化值。
这是一个示例 JSON 字符串文件,strings.json
{
"login" : {
"title" : "Sign in"
}
}
现在您可以将它本地化,就像任何其他文件一样(例如,移动到 XX.lproj
目录,并在您的应用中包含 JSON 的本地化变体)。
如果您愿意,可以通过代码进行本地化。例如,您可能想要将 登录 视图控制器标题设置为 login.title
,如下所示
- (void)viewDidLoad {
[super viewDidLoad];
[self localizeWithAppStrings:[NSBundle appStrings]];
}
- (void)localizeWithAppStrings:(NSDictionary *)strings {
self.navigationItem.title = [strings stringForKeyPath:@"login.title"];
}
appStrings
方法是在 NSBundle
上作为扩展提供的,而 stringForKeyPath:
是在 NSDictionary
上作为扩展提供的。
BRLocalize 为 UI 相关代码提供了某些钩子,以使应用本地化字符串的过程更轻松。这些钩子依赖于 BRLocalizable
协议
@protocol BRLocalizable <NSObject>
/**
Localize the receiver with a given dictionary of strings.
@param strings The strings data, typically loaded via the application's standard JSON strings file.
*/
- (void)localizeWithAppStrings:(NSDictionary *)strings;
@end
提供了两个主要钩子
awakeFromNib
- 任何符合 BRLocalizable
的对象,当调用 awakeFromNib
时将调用 localizeWithAppStrings:
。willMoveToWindow:
- 任何符合 BRLocalizable
的 UIView
类,当调用 willMoveToWindow:
时将调用 localizeWithAppStrings:
。基于这些钩子,BRLocalize 提供了以下类的基于分类的实现,使它们符合 BRLocalizable
所有这些都使用了在 NSString
上提供的 localizedStringWithAppStrings:
方法,该方法查找形式为 {some.key.path}
的字符串,并将其替换为在 JSON 字符串文件中找到的 some.key.path
值。