2011-12-01 36 views
12

我翻譯的是iOS項目成葡萄牙文和我創建了一個pt.lproj/Localizable.strings文件,我添加NSLocalizedString()到源代碼中。這一切正常!有一個小問題 - XIB文件中的字符串沒有被翻譯......我知道這是設計。用於XIB文件的iOS Localizable.strings文件?

我看到ibtool命令可以用來從一個名爲x的XIB文件中翻譯字符串並將其放入一個名爲x.strings的文件中......但是我的問題是,有沒有辦法將字符串從所有的xib文件,並將它們全部放入一個.strings文件(例如Localizable.strings?或甚至另一個稱爲XIBs.strings將罰款?)

回答

10

您有兩個選項如何翻譯xib文件。一種是你將UI元素連接到插座,並使用NSLocalizedString宏來設置你的viewDidLoad方法中的字符串。

第二個選項是爲您的應用程序支持的每種語言提供單獨的廈門國際銀行。您不必手動創建它們,你可以使用ibtool命令(我假設你的源語言是英語,目標是葡萄牙語):

ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib 

收集在你的項目,你可以使用genstrings命令出現的字符串 - 不過,我建議使用此python script收集您的所有字符串 - 它可以很好地處理這種情況,當你需要添加/刪除串到你的應用程序,而不需要轉換和/或手動合併以前的所有字符串

編輯

哦,我發現article,我從

+0

好的,所以沒有一個超級簡單的方法來做到這一點!我想我會去做IBOutlets的路線,因爲大約有40個筆尖文件,但是它們之間共享了一些字符串(最終我們最終需要10種語言,所以從長遠來看,我認爲它會更好!)我想我我們將通過NIBs並確保標籤等可以容納更多的其他語言的文本(否則佈局將是相同的)!無論如何,感謝您的幫助! – Javawag

0

瞭解這個把戲它取決於應用程序和本地化的數量,但一般來說我更喜歡單獨的.xib文件,因爲佈局可能會改變。把本地化的文件放在pt.lproj /中。

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等等),但是這對UILabel和孩子們來說就是個訣竅。

可能不是很好的表現明智,但做的工作。