Forzar localizar imágenes o elementos de image.

Al igual que en esta pregunta, cómo forzar a NSLocalizedString a usar un lenguaje específico

Puedo forzar localizar por este método.

Archivo de cabecera

@interface NSBundle (Language) +(void)setLanguage:(NSString*)language; @end 

Implementación

 #import <objc/runtime.h> static const char _bundle=0; @interface BundleEx : NSBundle @end @implementation BundleEx -(NSString*)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName { NSBundle* bundle=objc_getAssociatedObject(self, &_bundle); return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName]; } @end @implementation NSBundle (Language) +(void)setLanguage:(NSString*)language { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^ { object_setClass([NSBundle mainBundle],[BundleEx class]); }); objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath: [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end 

Después de eso, necesito localizar la image y como resultado, me gusta esto. Localizar catálogos de activos

El problema es cuando cambio la localización mediante progtwigción, nunca cambia la image.

  [NSBundle setLanguage:@"en"]; 

Solo se modifica mi cadena. Como lo hago yo He intentado con imágenes y imágenes normales en activos como este. Pero no funciona a less que realmente cambie el idioma de mi teléfono en la configuration. Pero necesito cambiar / forzar la localización mediante progtwigción y la image debe cambiarse (no solo text). ¿Puedo saber cómo hacerlo?

introduzca la descripción de la imagen aquí

Sé que es una pregunta antigua pero que todavía contesto para reference futura.


Asegúrate de configurar el idioma de tu aplicación en main.m, funciona como un encanto para las imágenes.

OBS: no usa xcassets.

Me gusta esto:

 int main(int argc, char * argv[]) { @autoreleasepool { NSString *language = <Get Your Language from somewhere> // I user NSUserDefaults for that if (language == nil) { // Gets the device current language language = [[[[NSBundle mainBundle] prefernetworkingLocalizations] objectAtIndex:0] substringToIndex:2]; } [NSBundle setLanguage:language]; return UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class])); } } 

Además, tengo este método en la implementación de BundleEx. No es necesario para las imágenes localizadas, pero lo necesitaba para las templates .html que tenía, por ejemplo.

 - (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext { NSBundle *bundle = objc_getAssociatedObject(self, &_bundle); NSString *pathName = [bundle pathForResource:name ofType:ext]; return pathName ?: [super pathForResource:name ofType:ext]; } 
    Intereting Posts