XIB / Storyboard本地化的
officially recommended method是为您要支持的每个本地化的xx.lproj(其中xx是双字母语言ID)创建.xib和.storyboard文件.
这会产生一个问题,因为您有多个文件在许多情况下共享相同的UI,容易发生变化.如果您想重新设计一个视图的UI,则必须多次执行(更糟糕的是,如果您在xib本身中输入了可本地化的字符串值).这违反了DRY原则.
调用需要它的NSLocalizedString()似乎更有效率,只需使用一个XIB或Storyboard进行一个本地化.
那么,为什么(不)我创建本地化的XIB / Storyboard文件?
解决方法
为了更改文本标签,我做了这样的事情
+(void) replaceTextWithLocalizedTextInSubviewsForView:(UIView*)view { for (UIView* v in view.subviews) { if (v.subviews.count > 0) { [self replaceTextWithLocalizedTextInSubviewsForView:v]; } if ([v isKindOfClass:[UILabel class]]) { UILabel* l = (UILabel*)v; l.text = NSLocalizedString(l.text,nil); [l sizeToFit]; } if ([v isKindOfClass:[UIButton class]]) { UIButton* b = (UIButton*)v; [b setTitle:NSLocalizedString(b.titleLabel.text,nil) forState:UIControlStateNormal]; } } }
[[self class] replaceTextWithLocalizedTextInSubviewsForView:self.view];
当我们想要的是本地化的标签时,它节省了大量的工作声明和连接IBOutlets.