【问题标题】:iOS Localizable.strings file for XIB files?XIB 文件的 iOS Localizable.strings 文件?
【发布时间】:2011-12-01 14:55:46
【问题描述】:

我正在将一个 iOS 项目翻译成葡萄牙语,并创建了一个 pt.lproj/Localizable.strings 文件,并将 NSLocalizedString() 添加到源代码中。这一切都有效!有一个小问题 - XIB 文件中的字符串没有被翻译...不过我知道这是设计使然。

我已经看到 ibtool 命令可用于从名为 x 的 XIB 文件中提取字符串并将其放入名为 x.strings 的文件中......但我的问题是,有没有办法从中提取字符串所有的 xib 文件并将它们全部放入一个 .strings 文件中(例如 Localizable.strings?或者甚至另一个名为 XIBs.strings 的文件都可以吗?)

【问题讨论】:

    标签: objective-c ios ipad localization localizable.strings


    【解决方案1】:

    您有两种选择如何翻译 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,我从中学到了这个技巧

    【讨论】:

    • 好的,没有超级简单的方法可以做到!我想我会做 IBOutlets 路线,因为大约有 40 个 nib 文件,但是它们之间共享一些字符串(我们最终需要大约 10 种语言,所以我认为从长远来看它会更好!)我想我'将通过NIB并确保标签等可以容纳更多其他语言的文本(否则布局将相同)!不管怎样,谢谢你的帮助!!
    【解决方案2】:

    我为此创建了一个类别:

    @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 和孩子们来说是有用的。

    在性能方面可能不是很好,但确实可以。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-11
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        • 1970-01-01
        相关资源
        最近更新 更多