2009-06-05 17 views
7

Ho un'applicazione per iPhone che dispone di un pulsante per modificare la lingua di visualizzazione in fase di esecuzione. Ho esaminato NSLocalizedString() che restituirà le stringhe appropriate in base alle preferenze del sistema. Quali sono le mie opzioni piuttosto che codificare tutte le stringhe di visualizzazione e tornare in base alla selezione della lingua dell'utente in fase di esecuzione? Qualsiasi suggerimento sarà molto apprezzato.Modifica della lingua per NSLocalizedString() in fase di esecuzione

+0

Vedi http://stackoverflow.com/question s/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – Elliot

risposta

1

La "Esperienza utente" corretta consente all'utente di selezionare la propria lingua tramite il pannello delle preferenze di sistema; non la tua app (o il pannello delle impostazioni della tua app, ecc.). Non c'è modo di ignorare questa per-app e non vorresti che nessuna app modificasse le impostazioni del sistema.

+5

Non sono d'accordo. Per i giochi TV, preferisco il giapponese perché gioco ai giochi giapponesi fin dall'infanzia. Ma mi piace usare la mia lingua madre per altre app. – AechoLiu

+0

La nostra app potrebbe non supportare le preferenze di sistema in diversi paesi in cui è stata introdotta, quindi ignorare EN e DE sarebbe una vittoria per molti clienti che hanno un'altra lingua diversa da default = EN. –

+0

Presume che l'app non stia visualizzando più lingue contemporaneamente. –

5

Utilizzare per impostare la lingua ordine con la forza

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"de",..., nil] forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

quindi utilizzare

NSLocalizedString(); 

per mostrare stringa localizzata ...

15

Sulla base del palo da parte dell'utente "object2.0", ho messo insieme alcuni esempi di codice puoi usare nella tua applicazione per cambiare al volo la lingua dell'interfaccia utente.

La classe localizzazione principale che fa il lavoro duro:

-(NSString *) localized:(NSString *) key 
{ 
    GameInfo *gameInfo = [GameInfo sharedInstance]; 

    // langCode should be set as a global variable somewhere 
    NSString *path = [[NSBundle mainBundle] pathForResource:langCode ofType:@"lproj"]; 

    NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
    return [languageBundle localizedStringForKey:key value:@"" table:nil]; 
} 

Supponendo di avere questa funzione in una classe globale chiamato utils, chiamare questa funzione con il seguente codice (ad esempio per l'uscita la parola "Impostazioni" .

NSLog([utils localized:@"Settings"]); 

Per cambiare la lingua:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:langCode, nil] forKey:@"AppleLanguages"]; 
+0

bel riassunto :) BTW, possiamo ottenere anche langCode da NSUserDefaults, se salviamo la lingua selezionata su NSUserDefaults dopo che l'utente ha cambiato la lingua al volo. (non so se questa operazione è un'operazione costosa, però) – aslisabanci

+0

@CheckSmith perché "ofType: @" lproj "? Spesso creo Localizable.strings – onmyway133

Problemi correlati