繁体   English   中英

用于XIB文件的iOS Localizable.strings文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM