2011-12-01 2 views
12

Sto traducendo un progetto iOS in portoghese e ho creato un file pt.lproj/Localizable.strings e ho aggiunto NSLocalizedString() nel codice sorgente. Funziona tutto! Con un piccolo problema - le stringhe all'interno dei file XIB non vengono tradotte ... So che questo è comunque di progettazione.File localizable.strings per iOS per file XIB?

Ho visto che il comando ibtool può essere usato per estrarre stringhe da un file XIB chiamato x e inserirlo in un file chiamato x.strings ... ma la mia domanda è, c'è un modo per tirare le stringhe da TUTTI i file xib e li metti tutti in un file .strings (es. Localizable.strings? o anche un altro chiamato XIBs.strings andrebbe bene?)

risposta

10

Hai due opzioni su come tradurre file xib. Uno è collegare gli elementi dell'interfaccia utente alle prese e impostare le stringhe nel metodo viewDidLoad utilizzando i macro NSLocalizedString.

La seconda opzione è fornire uno xib separato per ogni lingua supportata dall'app. Non è necessario creare manualmente, è possibile utilizzare il comando ibtool (presumo la tua lingua di partenza è l'inglese e la destinazione è portoghese):

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

Raccogliere stringhe trovate nel vostro progetto è possibile utilizzare il comando genstrings - tuttavia mi consiglia di utilizzare questo python script di raccogliere tutte le corde - si può ben gestire la situazione quando si ha bisogno per aggiungere/rimuovere le stringhe per la vostra applicazione senza dover tradurre e/o manualmente unire tutte le stringhe precedenti

Modifica

Oh ho trovato il article che ho imparato questo trucco da

+0

Ok, quindi non c'è un modo super semplice per farlo! Penso che avrò intenzione di fare il percorso IBOutlets, visto che ci sono circa 40 file di pennini, ma alcune stringhe sono condivise tra loro (e vogliamo circa 10 lingue alla fine quindi sarà a lungo termine che penso!) Immagino di sì passeremo attraverso i NIB e ci assicureremo che le etichette ecc. possano contenere un po 'più di testo per altre lingue (altrimenti il ​​layout sarà identico)! Comunque, grazie per l'aiuto!! – Javawag

0

Dipenderà dall'app e dal numero di localizzazioni, ma in generale preferisco file .xib separati, perché il layout potrebbe cambiare. Metti i file localizzati in pt.lproj /.

3

ho fatto una categoria per fare questo:

@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)]; 
     } 
    }]; 
} 

Poi, nel vostro punto di vista:

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self localise]; 
} 

Avrai bisogno di aggiungere il supporto per altri elementi dell'interfaccia utente (textField.placeholder = NSLocal .. .blah blah), ma farà lo stesso con UILabel e i bambini.

Probabilmente non è un ottimo rendimento, ma fa il lavoro.