簡體   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