2010-08-02 21 views
9

Quiero obtener el idioma actual de iphone seleccionado. Si usa "NSLocale", siempre devuelve el mismo idioma. Parece que este no es el que eliges dentro de la configuración de iphone.NSLocale siempre devuelve en_US

NSLocale * locale = [NSLocale currentLocale]; 
NSString * localLanguage = [locale objectForKey:NSLocaleLanguageCode]; 
NSLog (@"Language : %@", localLanguage); // Returns always : "en_US" 

¿Cómo obtener el idioma actual?

+0

esto devuelve "Formato Región" en lugar de la lengua. – Raptor

+1

También estoy teniendo el mismo problema que el tuyo. Intentó todo tipo de métodos, incluso eliminar Xcode y simuladores y reinstalar, pero no funcionó. Esto me sucede después de usar Xcode 6.1. Antes de eso, todo funciona bien. ¿Has arreglado esto? ¿Cuál es la razón detrás de esto? – S1U

+2

s1u, consulte la respuesta a continuación. Hay un error en Xcode 6.1 – user3099609

Respuesta

-1

Trate [[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleLanguageCode]

+0

que tampoco funciona: devuelve "en_US". Parece que Apple siempre devuelve el idioma inicial del iPhone pero no el que seleccionó el usuario. – hhamm

+0

El caso es que NSLocaleLanguageCode no debería retornar en_US sino solo. - [NSLocale localeIdentifier] sería el que devolverá en_US. Esto es un poco extraño. Tal vez intente CFLocale API? Lamentablemente, no tengo iDevice a mano para probarlo yo mismo. ¿Tal vez alguien más puede ver si funciona en el suyo? – SteamTrout

16

La respuesta es comprobar el idioma preferido:

NSString *preferredLang = [[NSLocale preferredLanguages] objectAtIndex:0]; 
3

Locales encapsulan información sobre las convenciones y normas lingüísticas, culturales y tecnológicos. Su código devuelve la información de "Formato de región", si se establece "China", devolverá "zh". Configuración | General | Internacional | Región Formato

Consulte "NSLocale Class Reference" para obtener más información.

+0

Esto es correcto, debe marcarse como tal – qwzybug

2

Para añadir a lo que sugirió SteamTrout:

para obtener su lenguaje para responder a los cambios en los ajustes del iPhone que vas a querer usar autoupdatingCurrentLocale: https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/NSLocale_Class/Reference/Reference.html#//apple_ref/occ/clm/NSLocale/autoupdatingCurrentLocale

Si se lee de cerca en la referencia currentLocale verá que este valor no se actualizará desde el panel de configuración: https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/NSLocale_Class/Reference/Reference.html#//apple_ref/occ/clm/NSLocale/currentLocale

7

esta pregunta es antiguo, pero la razón es nueva ya que la actualización a Xcode 6.1
Debido a un error, el simulador de iOS8 [NSLocale currentLocale] siempre devuelve "en_US". Sin embargo, está bien en el dispositivo. Por lo tanto, recomiendo hacer una prueba en un dispositivo real antes de golpear su cabeza contra la pared con frustración.


Fuentes: https://stackoverflow.com/a/26510914/3099609
https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html#//apple_ref/doc/uid/TP40001051-CH4-DontLinkElementID_23

+1

¡Gracias! Mi cabeza está solo parcialmente dañada. – chockenberry

Cuestiones relacionadas