2012-01-03 10 views
5

Sto lavorando a un'app con supporto multilingue. Come ci si potrebbe aspettare, di tanto in tanto si carica alcuni file pennino utilizzando un codice come questo:Caricamento manuale di un diverso pennino localizzato in iOs

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil]; 

L'applicazione verrà quindi caricare la versione XI ter localizzata corrispondente dalla cartella languange. Ora, mi chiedo se è possibile caricare manualmente il file pennino localizzato. Ad esempio, invece di caricare il CustomController, il caricamento del inglese/francese/tedesco/ecc versione del CustomController.

C'è un modo per ottenerlo?

Grazie per il vostro aiuto in anticipo!

P.S. So che questo non può essere il modo corretto di cambiare la lingua in un app iPhone/iPad, ma questo non è la mia decisione

[modifica successiva] Questo sembra un po 'strano e come un hack, ma sembra lavorare (caricare il pennino tedesco):

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 
NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

ho trovato qui la punta: http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

Essa non si sente del tutto giusto, però, mi chiedo se ci sono altre soluzioni troppo. Per i principianti, ho la sensazione che ciò causerà problemi con le versioni precedenti di iOs, poiché la cartella della lingua aveva una convenzione di denominazione diversa

+1

Controlla se questo può aiutarti: http://stackoverflow.com/questions/598020/objective-c-cocoa-internationalization-with-nibs-is-that-really-a-good-idea – Peres

+0

Lo fa, Ma non in questo caso. Ho alcune idee su come ottenere un simile effetto senza usare pennini localizzati. Sfortunatamente, l'app li usa proprio ora e l'idea è di farlo al più presto, senza dover fare molta riscrittura/ripensamento dell'app. Se potessi caricare manualmente gli xibs localizzati, sarebbe davvero facile convertirlo – BBog

+0

Ma stiamo parlando di farlo in fuga?Ad esempio, ho i pennini per l'inglese UK, quindi vado alle impostazioni e cambio la lingua in frens e cambierebbe solo ?? – Peres

risposta

17

Quindi, proprio come ho detto nella modifica, questo è quello che ho trovato come soluzione:

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

E se è necessario caricare un testo in un'etichetta localizzato

NSString* path= [[NSBundle mainBundle] pathForResource:[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0] ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

someLabel.text = [languageBundle localizedStringForKey:@"textKey" value:@"" table:nil];  

Maggiori informazioni qui: http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

A chi può interessare, questo metodo solleva una serie di problemi. Per i principianti, qualcosa che potrebbe interessare tutti: è necessario che ogni risorsa utilizzata da uno xib localizzato sia localizzata. Se carico un nuovo xib localizzato usando questo metodo, e che xib contiene un'immagine regolare non localizzata, non verrà mostrato fino a quando non sarà localizzato. Gli altri problemi sono più particolari e sono collegati al modo in cui si recuperano i dati localizzati.

Alla fine, non penso che lo userò, perché per l'applicazione corrente è troppo problematico, ma potrebbe rivelarsi utile in futuro.

Problemi correlati