2012-04-06 18 views
18

La aplicación en la que estoy trabajando admite 3 idiomas: inglés, francés y alemán.iOS: cómo obtener el idioma actual de la aplicación

¿Cómo puedo obtener el idioma actual de la aplicación (NO el idioma del dispositivo)?

El problema es que tengo que obtener el idioma actual de la aplicación para enviarlo con una solicitud al servidor y la respuesta debe estar en el idioma correcto. El idioma del dispositivo es inútil porque si el usuario cambia el idioma del sistema operativo a italiano, la aplicación se está ejecutando en inglés y necesito enviar inglés al servidor.

Gracias

+0

¿Cómo elige el usuario el idioma de la aplicación? –

+0

Desde su propia configuración, agregue la lista de idiomas que admite. – Elsammak

Respuesta

34

lo que siempre hago:

agregar una entrada de cadena en los archivos Localizable.strings. Siempre uso la clave "lang"="de"; (o "lang"="en", etc.).

A continuación, puede utilizarlo en su NSURLRequest mediante la adición de la lengua sobre NSLocalizedString(@"lang", @"")

Con ese método tiene control absoluto lo que va a ser enviado a usted backend.

+0

Sí, solución simple :) Gracias. – gpopov

+1

Lo uso porque [[NSBundle mainBundle] preferredLocalizations] no es confiable. – zeiteisen

0

El idioma de la aplicación cambiará cuando el usuario cambie el idioma del dispositivo y puede obtenerlo del NSUserDefaults (le mostraré cómo si lo desea) a menos que haya una opción para cambiar el idioma dentro de la aplicación, entonces puede fácil guardar el idioma actual utilizado y enviarlo al servidor cuando lo desee.

12

Usted puede utilizar el método de la clase preferredLocalizations NSBundle:

NSString *currentLocalization = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]; 
+4

¿Esto realmente funciona? Tengo una aplicación que admite inglés (en) y sueco (sv) y si configuro el simulador para usar alemán, el valor anterior se convierte en "de". –

26

La respuesta aceptada es una solución.

En cuanto a las preferencias de idioma en el propio dispositivo, que tienen la

[NSLocale preferredLanguages] 

que le dará una serie ordenada de los idiomas preferidos como se define en la configuración general del sistema.

El marco Cocoa Touch tendrá en cuenta esta lista de idiomas preferidos al cargar los recursos de localización de la aplicación y filtrarlos según las traducciones que proporcione en el paquete.

Esta lista filtrada y ordenada de idiomas localizados puede ser obtenida con

[[NSBundle mainBundle] preferredLocalizations] 

Sus peticiones del servidor debe coincidir con el primer valor en esta matriz o que tendrá una falta de correspondencia entre el lenguaje datos de aplicaciones y servidores.

+3

Esto definitivamente parece ser la forma correcta de hacerlo ... ¡debería ser la respuesta aceptada! – Accatyyc

+0

buen trabajo @mgcm Definitivamente el camino correcto a seguir – Mikael

Cuestiones relacionadas