2013-02-26 23 views
7

Xcode 4.6, iOS 6, SDK iOS bersaglio 6.1localizzazione Base + Storyboard + .strings -> nessuna localizzazione

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.storyboard da en.lproj a 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) in MainStoryboard.storyboard francese.
  • 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:

  • selezionata la MainStoryboard.storyboard base nel Xcode Progetto 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.

La conversione in Autolayout non ha avuto alcun effetto. L'eliminazione dell'app dal simulatore non ha avuto alcun effetto. L'eliminazione della directory dei prodotti derivati ​​non ha avuto alcun effetto. Un overflow dello stack ha suggerito di utilizzare ibtool per generare il file .strings anziché Xcode; i due file generati sono identici.

Questo non è soddisfacente. 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?

risposta

4

Spero che tu abbia già risolto. Ho avuto lo stesso problema (con traduzione in italiano) e ho risolto in questo modo:

1) File Localizable.string in it.lproj

2) utilizzare NSLocalizedString (@ "TEST", @ "commento ") metodo dove è necessario

3) aggiungi Localizable.string in Fasi di costruzione-> Copia risorsa bundle L'ultimo passaggio non è necessario in iOS 5.1.

ho risolto grazie alla risposta di Cocoanetics in [domanda]: Base internationalization and multiple storyboard not working right

5

Attivare la casella di controllo localizzazione inglese, utilizzando l'impostazione di localizzazione Strings:

Localization settings

pulire la vostra cartella di build (⌥⇧ ⌘K) e ricostruire.

+0

La pulizia della cartella di build ha risolto il problema per me. – Robert

1

Per aggiungere la risposta di Claymation a una build pulita, aiuta anche a eliminare l'app da iOS Simulator.

Potrebbe essere correlato a ciò John Hess's answer describes.

1

Dovevo convertire il mio file di stringhe in uno storyboard e poi tornare in un file di stringhe per farlo funzionare. Ridicolo. Apple potrebbe imparare una o due cose da Microsoft sulla creazione di strumenti di sviluppo più affidabili.

+0

È successo lo stesso per me. : 3 –