xcode – 故事板/ XIB和本地化最佳实践

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];
        }        
    }    
}

在你的viewDidLoad中调用函数:像这样:

[[self class] replaceTextWithLocalizedTextInSubviewsForView:self.view];

当我们想要的是本地化的标签时,它节省了大量的工作声明和连接IBOutlets.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...