2013-03-13 12 views
5

Sono interessato a consentire ai miei utenti di scegliere la lingua/locale in cui la mia app appare. Ho capito come caricare il pacchetto giusto, scegliere i file di stringhe corretti, ecc. Tuttavia, alcuni elementi del sistema mi sembrano ancora non avere controllo Commuta i controlli, ad esempio.iOS: esiste un modo per simulare le impostazioni locali dell'utente?

C'è un modo per me di dire al sistema che questa app dovrebbe ora comportarsi in una lingua specifica, piuttosto che le attuali impostazioni di sistema dell'utente?

+1

Whoa-whoo. 'method_setImplementation (class_getInstanceMethod ([classe NSLocale], @selector (currentLocale)), (IMP) spoofedImpl);'? –

+2

Un modo per farlo senza swizzling? – Mike

+0

Hai provato a creare una categoria per NSLocale per restituire le impostazioni locali di tua scelta per i metodi di classe? –

risposta

5

Il modo meno hacky è via NSUserDefaults: La locale è determinata dal AppleLocale (l'ID impostazioni come una stringa) e la lingua è determinata dalla prima partita AppleLanguages (una matrice di linguaggio ID); la tua app può ignorare queste impostazioni predefinite per la tua app solo. Per verificare se è stato sostituito dalla tua app, puoi usare qualcosa come [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]. Per rimuovere l'override, utilizzare -removeObjectForKey:.

In qualunque modo lo si faccia, probabilmente si dovrà fare relaunch the app quando si cambiano le lingue; Le app OS X e iOS non sono progettate per cambiare lingua in fase di esecuzione (su OS X, solo le app appena avviate vedono il cambio di lingua, mentre su iOS il sistema uccide tutte le app per cambiare lingua).

Ho aggiunto questa funzione per semplificare lo sviluppo di linguaggi di commutazione/sviluppo; Non ho idea se questo avrà esito negativo nel processo di revisione dell'App Store.

+0

Grazie a @tc. Sembra che questo sia probabilmente qualcosa di cui stare lontano, ma apprezzo l'opzione dettagliata. – Mike

Problemi correlati