[英]iOS Localizable.strings file for XIB files?
我正在将iOS项目翻译成葡萄牙语,我已经创建了一个pt.lproj / Localizable.strings文件,并且我已经在源代码中添加了NSLocalizedString()。 一切正常! 有一个小问题 - XIB文件中的字符串不会被翻译...我知道这是设计的。
我已经看到ibtool命令可用于从名为x的XIB文件中删除字符串并将其放入名为x.strings的文件中...但我的问题是,有没有办法从所有xib中提取字符串文件并将它们全部放入一个.strings文件中(例如Localizable.strings?或者甚至另一个名为XIBs.strings的文件会好吗?)
如何翻译xib文件有两种选择。 一种是将UI元素连接到出口,并使用NSLocalizedString
宏在viewDidLoad方法中设置字符串。
第二个选项是为您的应用支持的每种语言提供单独的xib。 您不必手动创建它们,您可以使用ibtool
命令(我假设您的源语言是英语,目标是葡萄牙语):
ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib
要收集项目中找到的字符串,您可以使用genstrings
命令 - 但我建议使用此python脚本来收集所有字符串 - 当您需要向应用程序添加/删除字符串而不必翻译和/或时,它可以很好地处理这种情况手动合并所有以前的字符串
编辑
哦,我发现了这篇文章 ,我从中学到了这个技巧
我做了一个类别来做到这一点:
@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和孩子来说都是有用的。
可能不是很好的表现,但做的工作。
它将取决于应用程序和本地化的数量,但通常我更喜欢单独的.xib文件,因为布局可能会更改。 将本地化文件放在pt.lproj /中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.