XIB文件的iOS Localizable.strings文件?

我正在翻译一个iOS项目到葡萄牙语,我已经创build了一个pt.lproj / Localizable.strings文件,并且已经将NSLocalizedString()添加到源代码中。 这一切工作! 有一个小问题 – 在XIB文件中的string不会被翻译…我知道这是devise虽然。

我已经看到ibtool命令可以用来从一个名为x的XIB文件翻译string,并把它放到一个名为x.strings的文件中……但是我的问题是,有没有办法从所有的xib文件并把它们放在一个.strings文件(例如Localizable.strings?或者甚至是另一个叫做XIBs.strings的文件都可以?)

你有两个select如何翻译xib文件。 一个是你将用户界面元素连接到sockets,并使用NSLocalizedStringmacros在你的viewDidLoad方法中设置你的string。

第二个选项是为您的应用程序支持的每种语言提供一个单独的xib。 您不必手动创build它们,您可以使用ibtool命令(我假设您的源语言是英语,目标是葡萄牙语):

 ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib 

要收集在你的项目中find的string,你可以使用genstrings命令 – 但是我build议使用这个python脚本来收集所有的string – 它可以很好地处理情况,当你需要添加/删除string到您的应用程序,而不必翻译和/或手动合并所有以前的string

编辑

哦,我发现我从这个技巧中学到了这篇文章

我做了一个类别来做到这一点:

 @implementation UIView (Localise) - (void)localise { [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { [view localise]; if ([view isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)view; [label setText:NSLocalizedString(label.text, nil)]; } }]; } 

然后在你的看法:

 - (void)awakeFromNib { [super awakeFromNib]; [self localise]; } 

你需要添加对其他UI元素的支持(textField.placeholder = NSLocal …等等等等),但是这会为UILabel和子节点做好准备。

可能不是很好的performance,但做的工作。

这将取决于应用程序和本地化的数量,但通常我更喜欢单独的.xib文件,因为布局可能会改变。 把本地化的文件放在pt.lproj /中。