从故事板本地化属性的UITextView

我正在使用故事板,并有一个视图,我已经分类了一些UITextViews。

我的问题是,我正在使用ibtool --generate-strings-file从故事板中为本地化提取string,然后在另一个故事板文件上使用ibtool -write来应用翻译后的string。

当我使用ibtool任何具有归属文本的UITextView都被ibtool --generate-strings-file命令忽略,并从结果string文件中省略。

是否有可能从故事板提取本地化的属性文本?

在Xcode 6.1上,最好的方法是将文本视图的属性文本复制到“BASE”RTF文本中(例如使用TextEdit或直接从XCode> New File> ressources> RTF)。

通过TextEdit的方式,你需要将你的文本导入到你的项目中。 很明显,如果你已经通过Xcode完成了,没有什么可导入的。

那么只要你使用utilies面板find“本地化…”button,将为您做的事情。

导入正确的版本只是做(在viewWillAppear例如),

  NSURL *url = [[NSBundle mainBundle] URLForResource:[fileName stringByDeletingPathExtension] withExtension:[fileName pathExtension]]; NSError *error; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithFileURL:url options:@{NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType} documentAttributes:nil error:&error]; [_originalMessage setAttributedText:attributedString]; 

我最终得出结论,在现在的版本中不能使用ibtool来完成。

相反,我让文本视图是纯文本视图,并使用我的子类,parsing其文本属性,所以我可以做一个NSMutableAttributedString并设置所需的属性。

这使我能够使用ibtool来提取string,并仍然有一个归属的ibtool

从故事板本地化归因文本是没有意义的,因为您需要知道在翻译后应用属性的位置。 单词的顺序可能已经改变了,例如你可能会指定一些蓝色的粗体文本,这可能不再有意义。

当然,你仍然可以通过代码来完成,你可以将你的string分割成多个,然后单独定位。 然后,您可以指定setAttributes:range:以便您知道正确的属性将始终应用于string的正确范围。

这是一个解决方法,我发现它非常有用:只需使用翻译的TextView创build一个ViewController。 详细(这里我只是把翻译成英文):

1)创build一个新的控制器与“新文件” – >“与Xib的UIViewController”。 将其命名为“AttributedTranslated”,并使用Interface Builder将其replace为带有正在翻译的属性文本的TextView。

2)在您的主控制器.m文件中,写下以下方法:

 - (BOOL)isEng { return [[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"en"]; } 

3)在.h文件中定义一个“AttributedTranslated”对象和一个View

 IBOutlet UIView *attrView; AttributedTranslated *attr; 

4)在主控制器的xib文件(或故事板)上,创build一个仅包含属性textView(以原始语言)的视图,并将其链接到“attrView”。

5)在你viewDidLoad做如下的事情:

 if ([self isEng]) { desc = [[Description alloc] init]; [attrView addSubview:attr.view]; } 

也许这不是最好的办法,但它确实允许人们轻松地在Interface Builder中翻译属性文本!