Cambiar el idioma de la aplicación iOS sin reiniciar el dispositivo

Hice la localización para mi aplicación de iOS. Debido a la order del cliente, necesito hacer una modificación, es decir, los idiomas de la aplicación deberían cambiar por la acción del button. Mi localización previa funciona según el idioma del dispositivo. Ahora tengo que modificar la aplicación para cambiar el idioma sin reiniciar el dispositivo.

No puede cambiar el idioma del dispositivo en su aplicación, pero puede cambiarlo solo para su aplicación cambiando la propiedad NSUserDefaults en NSUserDefaults . Tenga en count sin embargo, creo que esto todavía requiere reiniciar la aplicación en sí, pero no requiere reiniciar el dispositivo.

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

Aquí hay otra pregunta similar que también puede ayudarlo

Cree LocalizeHelper.h

 #import <Foundation/Foundation.h> // some macros (optional, but makes life easy) // Use "LocalizedString(key)" the same way you would use "NSLocalizedString(key,comment)" #define LocalizedString(key) [[LocalizeHelper shanetworkingLocalSystem] localizedStringForKey:(key)] // "language" can be (for american english): "en", "en-US", "english". Analogous for other languages. #define LocalizationSetLanguage(language) [[LocalizeHelper shanetworkingLocalSystem] setLanguage:(language)] @interface LocalizeHelper : NSObject // a singleton: + (LocalizeHelper*) shanetworkingLocalSystem; // this gets the string localized: - (NSString*) localizedStringForKey:(NSString*) key; //set a new language: - (void) setLanguage:(NSString*) lang; @end 

y en el file .m

 // LocalizeHelper.m #import "LocalizeHelper.h" // Singleton static LocalizeHelper* SingleLocalSystem = nil; // my Bundle (not the main bundle!) static NSBundle* myBundle = nil; @implementation LocalizeHelper //------------------------------------------------------------- // allways return the same singleton //------------------------------------------------------------- + (LocalizeHelper*) shanetworkingLocalSystem { // lazy instantiation if (SingleLocalSystem == nil) { SingleLocalSystem = [[LocalizeHelper alloc] init]; } return SingleLocalSystem; } //------------------------------------------------------------- // initiating //------------------------------------------------------------- - (id) init { self = [super init]; if (self) { // use systems main bundle as default bundle myBundle = [NSBundle mainBundle]; } return self; } //------------------------------------------------------------- // translate a string //------------------------------------------------------------- // you can use this macro: // LocalizedString(@"Text"); - (NSString*) localizedStringForKey:(NSString*) key { // this is almost exactly what is done when calling the macro NSLocalizedString(@"Text",@"comment") // the difference is: here we do not use the systems main bundle, but a bundle // we selected manually before (see "setLanguage") return [myBundle localizedStringForKey:key value:@"" table:nil]; } //------------------------------------------------------------- // set a new language //------------------------------------------------------------- // you can use this macro: // LocalizationSetLanguage(@"German") or LocalizationSetLanguage(@"de"); - (void) setLanguage:(NSString*) lang { // path to this languages bundle NSString *path = [[NSBundle mainBundle] pathForResource:lang ofType:@"lproj" ]; if (path == nil) { // there is no bundle for that language // use main bundle instead myBundle = [NSBundle mainBundle]; } else { // use this bundle as my bundle from now on: myBundle = [NSBundle bundleWithPath:path]; // to be absolutely shure (this is probably unnecessary): if (myBundle == nil) { myBundle = [NSBundle mainBundle]; } } } @end 

Para establecer el uso del idioma

  LocalizationSetLanguage(@"ar"); 

Para get valores usar

self.Mylabel.text = LocalizedString (@ "rent");

Para cada idioma que desee admitir, necesita un file llamado Localizable.strings. Esto funciona exactamente como se describe en la documentation de Apples para la localización.

 // TABS "buy" = "شراء"; "rent" = "إيجار"; "addListing" = "إضافة إعلان" ; "calculator" = "دلالي" ; "news" = "أخبار" ;