iOS故事板本地化字符串在UILabel子类上不起作用

5
我正在使用新的iOS功能来翻译故事板(http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/chapters/InternationalizeYourApp/InternationalizeYourApp/InternationalizeYourApp.html)。
这种解决方案的问题是,它无法与我的UILabel子类一起使用。
以下是我UILabel子类的代码:
.h:
#import <UIKit/UIKit.h>
@interface LabelThinText : UILabel
- (void)awakeFromNib;
-(id)initWithFrame:(CGRect)frame;
@end

.m :

@implementation LabelThinText

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self setFont:[UIFont fontWithName:@"Raleway-Light" size:[[self font] pointSize]]];
}

-(id)initWithFrame:(CGRect)frame
{
    id result = [super initWithFrame:frame];
    if (result) {
        [self setFont:[UIFont fontWithName:@"Raleway-Light" size:[[self font] pointSize]]];
    }
    return result;
}

@end    

我想我还需要一些东西才能从我的Storyboard.strings文件中获得自动翻译。

有没有人有主意?

谢谢!


你可以下载我的测试项目:https://github.com/arn00s/iOS_BaseLocalization 只需将设备语言从英文切换到法文,就能看到差异。 - Arnaud
3个回答

1
遇到了同样的问题,这是我解决它的方法:
放弃你的自定义类,创建一个UILabel类别,在你的情况下是UILabel+ThinText:
- (void) setThinText:(BOOL)thinText
{
    if (thinText) {
        [self setFont:[UIFont fontWithName:@"Raleway-Light" size:[[self font] pointSize]]];
    }
}

在你的故事板中,选择标签,选择Identity Inspector,并添加以下用户定义运行时属性

Keypath: thinText - Type: Boolean - Value: checked


1
我遇到了同样的问题,原因也是在标签中设置自定义字体。我的解决方案比较通用,我的自定义字体类似于Helvetica,所以我在IB中使用Helvetica Neue作为占位符字体。UILabel子类将其转换为我的自定义字体,保留字体大小和粗细,因此我可以通过IB控制所有这些内容。
这使得我对翻译错误(我认为这是一个错误)的解决方法更加容易。在viewDidLoad中,我递归遍历所有视图,并映射所有UILabel字体,如果它们与占位符字体匹配,对于我的情况,UIButton也是如此。
你是否已经提交了错误报告?

1
我没有提交错误报告,但我向苹果请求了技术支持。他们告诉我他们需要和一位工程师详细地了解情况(一个月前)。现在仍在等待答复... - Arnaud
3
我有类似的问题。请在你收到苹果公司的回复后更新。 - Michael Mangold
仍然有问题。奇怪的是,在连接设备(包括模拟器)的Xcode构建中可以正常工作。但分发的构建无法本地化。 - JLundell

0

我也遇到了这个问题。我通过在每个ViewController中设置自定义字体来解决它。让我给你举个例子:

 CustomViewController.h
@interface CustonViewController

@property (strong, nonatomic) IBOutlet UILabel* someLabel;

@end

CustomViewController.m文件中

- (void)viewDidLoad
{
  [self setUoFonts];
}

- (void)setUpFonts
{
    self.someLabel.font = [UIFont fontWithName:@"AmaticSC-Regular" size:self.someLabel.font.pointSize];  
}

就是这样!你将拥有你的翻译和自定义字体。

记得从StoryBoard中删除自定义类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接