Mor*_*ess 20 xcode localization xib
在正式推荐的方法进行XIB /故事板的定位是创造的.xib和.storyboard文件内xx.lproj(其中xx是两个字母的语言ID)为您想支持的每个本地化.
这会产生一个问题,因为您有多个文件在很多情况下共享相同的UI,这些文件很容易发生变化.如果您想为一个视图重新设计UI,则必须多次执行(更糟糕的是,如果您在xib中输入了可本地化的字符串值).这与DRY原则背道而驰.
NSLocalizedString()在您需要的地方打电话似乎更有效率,只需使用一个XIB或Storyboard进行一次基本本地化.
那么,为什么(不)我创建本地化的XIB/Storyboard文件?
Les*_*ary 40
您可以在UILabel,UIButton等上创建一个类别,如下所示:
#import "UILabel+Localization.h"
@implementation UILabel (Localization)
- (void)setLocalizeKey:(NSString*)key
{
self.text = NSLocalizedString(key, nil);
}
@end
Run Code Online (Sandbox Code Playgroud)
然后在你的xib文件上使用用户定义的运行时属性将UILabel(或UIButton等)链接到Localizable.strings文件中保存的密钥

这样,您可以将所有字符串放在一个文件中,而不必为每种语言创建单独的xib.
Fla*_*lax 27
对于仅更改文本标签,我做了类似的事情
+(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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad: 这样调用此函数:
[[self class] replaceTextWithLocalizedTextInSubviewsForView:self.view];
当你想要的只是本地化标签时,它为我节省了许多声明和连接IBOutlets的工作.
| 归档时间: |
|
| 查看次数: |
7427 次 |
| 最近记录: |