Me gustaría mostrar el idioma actual que usa la interfaz de usuario del dispositivo. ¿Qué código usaría?
Quiero esto como un NSString
formato completamente enunciado. (No @ "en_US")
EDITAR: Para aquellos que conducen, hay un montón de comentarios útiles aquí, ya que la respuesta ha evolucionado con los nuevos lanzamientos de iOS.
ios
objective-c
cocoa-touch
nslocale
Moshe
fuente
fuente
NSLocale
. Mira mi respuesta.[NSLocale preferredLanguages]
. solía estar separado por un guión bajo (pen_US
. ej. ), pero ahora se convirtió en un guión:en-US
NSLocale
tiene métodoscomponentsFromLocaleIdentifier:
ylocaleIdentifierFromComponents:
cuáles son probablemente la forma correcta de manejar el formato (potencialmente modificable).Respuestas:
Las soluciones proporcionadas en realidad devolverán la región actual del dispositivo, no el idioma seleccionado actualmente. Estos son a menudo uno y lo mismo. Sin embargo, si estoy en Norteamérica y configuro mi idioma en japonés, mi región seguirá siendo el inglés (Estados Unidos). Para recuperar el idioma seleccionado actualmente, puede hacer:
Esto devolverá un código de dos letras para el idioma seleccionado actualmente. "en" para inglés, "es" para español, "de" para alemán, etc. Para obtener más ejemplos, consulte esta entrada de Wikipedia (en particular, la columna 639-1):
Lista de códigos ISO 639-1
Entonces es una simple cuestión de convertir los códigos de dos letras a la cadena que le gustaría mostrar. Entonces, si es "en", muestra "Inglés".
Espero que esto ayude a alguien que busca diferenciar entre la región y el idioma seleccionado actualmente.
EDITAR
Vale la pena citar la información del encabezado de NSLocale.h:
Las personas interesadas en el lenguaje de la aplicación echan un vistazo a la respuesta de @ mindvision
fuente
NSLocale preferredLanguages
cambio. Si antes solo recibíasLa respuesta seleccionada devuelve el idioma actual del dispositivo, pero no el idioma real utilizado en la aplicación. Si no proporciona una localización en su aplicación para el idioma preferido del usuario, se utiliza la primera localización disponible, ordenada por el orden preferido del usuario.
Para descubrir el idioma actual seleccionado dentro de sus localizaciones use
Ejemplo:
Rápido:
fuente
Solución para iOS 9:
idioma = "en-US"
languageDic tendrá los componentes necesarios
countryCode = "US"
languageCode = "en"
fuente
Esto probablemente te dará lo que quieres:
Mostrará el nombre del idioma, en el idioma mismo. Por ejemplo:
fuente
Las respuestas aceptadas y las demás no tienen en cuenta que el idioma preferido puede ser otro idioma que el idioma del dispositivo .
El idioma del dispositivo es el idioma en el que se presentan los elementos del sistema operativo y las aplicaciones de Apple.
El idioma preferido es el idioma en el que al usuario le gustaría tener aplicaciones localizadas. Apple solo proporciona un conjunto limitado de traducciones. Si el idioma preferido es un idioma al que Apple tradujo sus aplicaciones, también será el idioma del dispositivo. Sin embargo, si el usuario prefiere un idioma para el que Apple no proporciona traducciones, el dispositivo no coincidirá con los idiomas preferidos . El idioma del dispositivo no estará en la primera posición en la lista de idiomas preferidos.
La siguiente función recorrerá la lista de idiomas preferidos y comprobará si hay una traducción en los marcos de Apple. El primer idioma en tener una traducción es el idioma del dispositivo. La función devolverá su código de idioma.
Esto funciona si la lista de idiomas preferidos es:
La lista de idiomas preferidos se puede editar en : Configuración.app -> General -> Idioma y región -> Orden de idioma preferido
Puede usar el código de idioma del dispositivo y traducirlo al nombre del idioma. Las siguientes líneas imprimirán el idioma del dispositivo en el idioma del dispositivo. Por ejemplo "Español" si el dispositivo está configurado en español.
fuente
NSBundle(forClass: UIView.self)
usted está tratando de proporcionar el idioma más específico para una vista determinada. Sin embargo, al usar esto me encontré con un problema en el que para la clase dada no se devolvió un idioma. Cambié la inicialización aNSBundle.mainBundle()
y me devolvieron el código de idioma esperado.mainBundle()
que parece ser la recomendada por Apple como se sugiere en la cabeceraNSLocale
,// note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information
.NSBundle.mainBundle()
devuelve su paquete de aplicaciones, mientras queNSBundle(forClass: UIView.self)
devuelve el paquete UIKit del sistema. El método descrito busca directorios en el paquete. su paquete de aplicaciones solo contendrá los correspondientes a los idiomas a los que desea localizar. para determinar el idioma del dispositivo, deberá verificar el paquete del sistema.NSLocale.preferredLanguages()
. i actualizado la respuesta a apoyar iOS 9 .yo uso esto
ignorar pérdida de memoria ..
y el resultado es
fuente
La traducción de códigos de idioma como en_US al inglés (Estados Unidos) es una función integrada
NSLocale
yNSLocale
no le importa de dónde obtiene los códigos de idioma. Entonces, realmente no hay razón para implementar su propia traducción como sugiere la respuesta aceptada.Impresiones: inglés, alemán, sueco
fuente
Incluso hay una mejor manera de obtener el idioma actual del dispositivo. Probémoslo con el siguiente código:
Sugerida por Abizern de aquí
fuente
Puedes usar el
displayNameForKey:value:
método deNSLocale
:Esto imprimirá:
Si especifica el mismo identificador de configuración regional para el método
initWithLocaleIdentifier:
y también eldisplayNameForKey:value:
método, le dará el nombre nativo del idioma. Descubrí que si elimina el código de país y usa justfr
anden
, también omitirá el país del nombre para mostrar (al menos en Mac OS X, no estoy seguro acerca de iOS).fuente
Rápido
Para obtener el idioma actual del dispositivo
Para obtener el idioma de la aplicación
Nota:
Obtiene el idioma que ha proporcionado en CFBundleDevelopmentRegion de info.plist
si CFBundleAllowMixedLocalizations es verdadero en info.plist, se devuelve el primer elemento de CFBundleLocalizations en info.plist
fuente
Traté de encontrar la solución correcta para mí. Cuando utilizo
Locale.preferredLanguages.first
se devolvió el idioma preferido de la configuración de su aplicación.Si desea conocer el idioma de la configuración del dispositivo del usuario, debe usar la siguiente cadena:
Swift 3
Para desenvolver y usar mira la línea de abajo:
fuente
Para obtener el idioma actual del dispositivo del usuario, use el siguiente código que funcionó para mí.
fuente
iOS13, Swift 5+, WWDC2019 https://developer.apple.com/videos/play/wwdc2019/403/
Los usuarios pueden seleccionar el idioma preferido de una aplicación independientemente del idioma del sistema operativo.
Puedes usar estos:
fuente
Para los desarrolladores de MonoTouch C #, use:
Nota: Sé que esta fue una pregunta de iOS, pero como soy desarrollador de MonoTouch, la respuesta en esta página me llevó en la dirección correcta y pensé que compartiría los resultados.
fuente
En
Swift
:fuente
Swift 3
fuente
Función simple Swift 3:
fuente
Si está buscando el código de idioma preferido ("en", "de", "es" ...) y el nombre del idioma preferido localizado (para la ubicación actual), aquí hay una extensión simple en Swift:
}
fuente
fuente
Si desea obtener solo el idioma aquí está mi respuesta sugerida:
En mi caso, solo quería el idioma regional, no la región regional.
Salida: si su idioma local es japonés y la región local es Japón, entonces:
langplusreg = ja-JP
langonly = ja
fuente
Respuesta de @amir en Swift:
fuente
Obviamente, las soluciones que se basan, por ejemplo, en
generalmente funciona bien y devuelve el idioma actual del dispositivo.
Pero podría ser engañoso en algunos casos:
Si la aplicación en la que desea obtener este valor ya ha cambiado el idioma, por ejemplo, con este tipo de código:
En este caso, [NSLocale preferredLanguages] en realidad devuelve el conjunto de idiomas preferido (y usado) en esta aplicación en particular, ¡no el idioma actual del dispositivo!
Y ... en este caso, la única forma de obtener correctamente el idioma actual del dispositivo actual (y no el establecido previamente en la aplicación), es borrar primero la clave @ "appleLanguages" en NSUserDefaults, de esta manera:
Entonces, [NSLocale preferredLanguages] ahora devuelve el valor correcto.
Espero que esto ayude.
fuente
Respuesta actualizada para Swift 4
fuente
NSLocale.preferredLanguages
debe devolver los preferidos del usuario sin tener en cuenta lo que admite el paquete.Para Swift 3.0, el siguiente código se puede utilizar para responder a su pregunta:
fuente
En Swift 4.2 y Xcode 10.1
fuente
De acuerdo con la documentación de Apple
fuente
Formato de dos letras. Apple usa el estándar ISO ISO-3166 .
fuente
Para Swift 3:
NSLocale.preferredLanguages [0] como cadena
fuente
A partir de iOS 9, si solo desea el código de idioma sin código de país, querrá este tipo de función auxiliar, ya que el idioma contendrá el código de país.
fuente
SWIFT-4
fuente
NSLocale.preferredLanguages
debe devolver los preferidos del usuario sin tener en cuenta lo que admite el paquete.