我正在将iOS项目翻译成葡萄牙语,我创建了一个pt.lproj / Localizable.strings文件,并在源代码中添加了NSLocalizedString()。一切正常!有一个小问题 - XIB文件中的字符串不会被翻译......我知道这是设计的。
我已经看到ibtool命令可用于从名为x的XIB文件中删除字符串并将其放入名为x.strings的文件中...但我的问题是,有没有办法从中拉出字符串所有的xib文件并将它们全部放入一个.strings文件中(例如Localizable.strings?或者甚至另一个名为XIBs.strings的文件会好吗?)
答案 0 :(得分:10)
如何翻译xib文件有两种选择。一种是将UI元素连接到出口,并使用NSLocalizedString
宏在viewDidLoad方法中设置字符串。
第二个选项是为您的应用支持的每种语言提供单独的xib。您不必手动创建它们,您可以使用ibtool
命令(我假设您的源语言是英语,目标是葡萄牙语):
ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib
要收集项目中找到的字符串,您可以使用genstrings
命令 - 但我建议使用此python script来收集所有字符串 - 当您需要添加/删除字符串时,它可以很好地处理这种情况到您的应用程序,而无需翻译和/或手动合并所有以前的字符串
修改强>
哦,我发现article我从
中学到了这个技巧答案 1 :(得分:3)
我做了一个类别:
@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 ... blah blah),但这对于UILabel和孩子来说都是有用的。
可能性能方面不是很好但是能胜任。
答案 2 :(得分:0)
这将取决于应用程序和本地化的数量,但通常我更喜欢单独的.xib文件,因为布局可能会更改。将本地化文件放在pt.lproj /.
中