2013-02-25 12 views
12

(Ci sono domande simili, alcune hanno dato risposte che ho provato e trovato non funzionano.) Altri non hanno avuto risposta, presumo perché i querent non fornisci tutti i dettagli che sto per.)Storyboard + localizzazione base + file .strings non localizza in fase di esecuzione

Ho iniziato con uno storyboard che ha funzionato bene per la mia app; le stringhe che contiene sono in inglese. Volevo aggiungere una localizzazione francese. Ho fatto questo:

  • Aggiunto una localizzazione di base, che ha trasferito MainStoryboard.storyboarden.lproj-Base.lproj.
  • Aggiunta una localizzazione francese, che ha clonato InfoPlist.strings (inglese) e MainStoryboard.storyboard (Base) in fr.lproj.
  • Modificato un paio di stringhe (titoli di segmenti in un UISegmentedControl) nel francese MainStoryboard.storyboard.
  • Nel simulatore, impostare la lingua sul francese.
  • Ha eseguito l'applicazione da Xcode.

Risultato: questo ha funzionato; le mie stringhe modificate sono state visualizzate nell'applicazione in esecuzione.

Ma io voglio essere tutto elegante. Voglio fare la localizzazione francese usando un file .strings. (Non è solo una questione di essere di fantasia, la localizzazione francese sarà girato a traduttori non tecnici, che non ci si può aspettare di padroneggiare Interface Builder.) Quindi:

  • Selezionato la base MainStoryboard.storyboard nel progetto Xcode navigatore.
  • Nella finestra di ispezione File, in Localizzazione, è stata modificata la localizzazione francese da "Interface Builder Cocoa Touch Storyboard" a "Stringhe localizzabili".
  • Avviso Xcode accettato che lo storyboard francese verrà scartato in favore di un file .strings, che appare nell'editor Assistant.
  • Fatto le stesse due modifiche; non c'è dubbio che siano le stringhe sbagliate, perché sono tutte commentate come IBUISegmentedControl...segmentTitles; e il testo dell'etichetta non è visualizzato altrove nel file .strings.
  • Eliminata la copia (funzionante) esistente dell'app dal simulatore.
  • Ran l'app.

Risultato: La visualizzazione utilizza la base (in origine inglese) la localizzazione, invece di caricare le stringhe francesi.

Questo non è soddisfacente. Ho provato a eliminare l'app dal simulatore e persino a eliminare la cartella dei dati derivati. Il bug persiste.

Come ho detto, non posso trasformare un file .storyboard in un traduttore non tecnico. Come posso convincere iOS ad accettare le localizzazioni dello storyboard da un file .strings?

+0

Conversione storyboard Layout Auto ha nessun effetto. – user698970

+0

Una risposta a un'altra domanda simile suggeriva di eseguire ibtool sullo storyboard di base e usarlo come starter per il file .strings invece di quello fornito da Interface Builder. I due file sono identici. – user698970

+0

Ecco un'altra variabile: lo storyboard ha molte scene non raggiungibili: non sono il controller iniziale e non hanno alcun passaggio che lo porti a termine. (Non è mia intenzione, dovrò parlare con lo sviluppatore che ha pensato che fosse una buona idea.) Potrebbe interferire con la localizzazione .strings? – user698970

risposta

6

Ho avuto lo stesso problema con il mio UISegmentedControl s. Si scopre che c'è un bug in iOS 6: la localizzazione dello storyboard .strings non funzionerà sul testo UISegmentedControl e sui segnaposto UISearchBar. Vedi questo openradar: http://openradar.appspot.com/radar?id=2159402

Hai provato a localizzare altri elementi come UILabel s? Questo dovrebbe funzionare

+0

Ho avuto lo stesso problema, con solo UISearchBar non localizzato, mentre tutte le altre cose funzionavano. La soluzione descritta da Susan Sabaria di seguito è una buona soluzione per questo bug che si estende facilmente anche ai titoli degli scope. – ecotax

8

Ecco come ho risolto:

in viewDidLoad:

[self.segmentedControl setTitle:NSLocalizedString(@"Title", @"Your localize comment") forSegmentAtIndex:0]; 

Si può fare lo stesso per il segnaposto di ricerca:

[self.searchBar setPlaceholder:NSLocalizedString(@"Your string placeholder", @"Your comment for localizers")]; 

Poi basta creare un file Localizable.strings e funzionerà.

0

Per le persone in via di sviluppo per iOS 7 o superiore e la ricerca per il formato .strings per una barra di ricerca, questo è come si dovrebbe tradurre il campo placeholder ad esempio:

/* Class = "UISearchBar"; normalTitle = "Search for Places"; ObjectID = "F3d-Ir-fni"; */ 
"F3d-Ir-fni.placeholder" = "Nach Orten suchen"; 
Problemi correlati