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
risposta
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.
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
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. –
Presume che l'app non stia visualizzando più lingue contemporaneamente. –
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 ...
Il trucco per usare un linguaggio specifico selezionandolo dalla app è forzare NSLocalizedString a utilizzare bundle specifico in base alla lingua selezionata,
qui è il post che ho scritto per questo http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
e qui è il codice di un campione app https://github.com/object2dot0/Advance-Localization-in-ios-apps
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"];
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
@CheckSmith perché "ofType: @" lproj "? Spesso creo Localizable.strings – onmyway133
- 1. Modifica implementazione/classe in fase di esecuzione
- 2. Come cambiare lingua in fase di esecuzione in java swing
- 3. Modifica oggetto iniettato in fase di esecuzione
- 4. Modifica proprietà log4j in fase di esecuzione
- 5. Modifica della lingua di sviluppo in Xcode
- 6. C# Crea e modifica classe in fase di esecuzione
- 7. Modifica parametro attributo personalizzato in fase di esecuzione
- 8. Modifica degli stili in fase di esecuzione in WPF
- 9. Modifica lingua app a livello di programmazione
- 10. Modifica del valore di una macro in fase di esecuzione
- 11. Forzare NSLocalizedString per utilizzare una lingua specifica utilizzando Swift
- 12. Modifica indirizzo endpoint WebService in fase di esecuzione
- 13. WPF - modifica dimensione carattere globale in fase di esecuzione
- 14. Modifica dei collegamenti Guice in fase di esecuzione
- 15. Modifica del colore delle righe JList in fase di esecuzione
- 16. Modifica codice groovy in fase di esecuzione nell'applicazione Grails
- 17. Modifica SpriteNode PhysicsBody Size in fase di esecuzione
- 18. modifica della lingua per i messaggi di errore di Subversion
- 19. Rileva modifica della variabile in fase di esecuzione in C/C++
- 20. Come cambiare lingua in fase di esecuzione senza problemi di layout
- 21. Modifica della "lingua preferita codifica" in Python 3 in Windows
- 22. Personalizzazione della barra di PowerPoint in fase di esecuzione
- 23. Ottieni binding IIS in fase di esecuzione
- 24. Rileva l'androide della mia app: versionCode in fase di esecuzione
- 25. Clojure: come scoprire l'arità della funzione in fase di esecuzione?
- 26. Macro per NSLocalizedString
- 27. esclusione in fase di esecuzione __setattr__
- 28. Modifica lingua di sistema C#
- 29. Modifica della variabile di ambiente di un processo in esecuzione
- 30. Modifica la mappa delle entità in un'altra tabella "sconosciuta" in fase di esecuzione
Vedi http://stackoverflow.com/question s/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – Elliot