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.