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,并使用NSLocalizedString
macros在你的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 /中。