我写了一个简单的类别,用IB来处理本地化。
头文件看起来像这样。
@interface UIView (Localization)
@property (nonatomic, strong) NSString *mainTextKey;
@property (nonatomic, strong) NSString *secondaryTextKey;
- (void)updateMainText;
- (void)updateSecondaryText;
@end
实施
@implementation UIView (Localization)
- (NSString *)mainTextKey{
return objc_getAssociatedObject(self, @selector(mainTextKey));
}
- (void)setMainTextKey:(NSString *)mainTextKey{
objc_setAssociatedObject(self, @selector(mainTextKey), mainTextKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self updateMainText];
}
- (NSString *)secondaryTextKey{
return objc_getAssociatedObject(self, @selector(secondaryTextKey));
}
- (void)setSecondaryTextKey:(NSString *)secondaryTextKey{
objc_setAssociatedObject(self, @selector(secondaryTextKey), secondaryTextKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self updateSecondaryText];
}
- (void)updateMainText{
//handle all cases one by one
if([self isKindOfClass:[UILabel class]]){
UILabel *label = (UILabel *)self;
label.text= NSLocalizedString(self.mainTextKey, nil) ;
}else if ([self isKindOfClass:[UIButton class]]){
UIButton *btn = (UIButton *)self;
[btn setTitle:NSLocalizedString(self.mainTextKey, nil) forState:UIControlStateNormal];
}
}
- (void)updateSecondaryText{
//handle all cases one by one
}
@end
基本用法:
- 创建一个UIView元素一样的UIButton或UIlable
- 指定对键 “mainTextKey” 你的字符串键内UserDefinedAttributes或 “secondaryTextKey” 。
- 运行该应用程序,它会从你的字符串文件中加载正确的文本。
这是没有任何证明的书面阅读,原谅任何愚蠢的错误。
对于一个没有经验的iOS开发人员来说,实现国际化似乎有点复杂......但是在阅读文档和尝试一个简单的测试应用程序之后,它可能会变得更加清晰:)谢谢您的答案! –
Jacky,我有一个问题给你......如果我想从一开始就开始一个新的应用程序并将其国际化,是否需要“手动”或者我可以告诉Xcode以“国际化”应用?我对单视图应用程序有一定的经验,Xcode为你准备了nib文件和其他东西,我想知道我是否能告诉Xcode以一种可以轻松国际化的方式准备项目。我希望我的问题是非常清楚的。 –
我已经看到有可能告诉Xcode国际化资源,所以我试图国际化xxx-info.plist文件,但代码无法编译,因为它确实不要在en.lproj目录中查找它,而是在基本目录中......我想我必须在理解如何正确管理这些东西之前仔细阅读文档..也许info.plist文件不需要是国际.. –