I know the question is pretty old, but there is a solution to the problem that is still not resolved by Apple.
@implementation NSBundle (UIImagePickerControllerLocalizationFix) + (void) load { SEL const selector = @selector (localizedStringForKey:value:table:); Method const localizedStringMethod = class_getInstanceMethod (self, selector); NSString *(*originalImp) (NSBundle *, SEL, NSString *, NSString *, NSString *) = (typeof (originalImp)) method_getImplementation (localizedStringMethod); IMP const updatedImp = (typeof (updatedImp)) imp_implementationWithBlock (^(NSBundle *bundle, NSString *key, NSString *value, NSString *tableName) { NSString *const result = originalImp (bundle, selector, key, value, tableName); if ([key isEqualToString:@"VIDEO_TOO_LONG_TITLE"] && [result isEqualToString:key]) { static NSBundle *properLocalizationBundle = nil; static NSString *properLocalizationTable = nil; static dispatch_once_t onceToken; dispatch_once (&onceToken, ^{ NSString *const originalBundleName = bundle.infoDictionary [(NSString *) kCFBundleNameKey]; NSArray <NSBundle *> *const frameworkBundles = [NSBundle allFrameworks]; for (NSBundle *frameworkBundle in frameworkBundles) { NSString *const possibleTableName = [originalBundleName isEqualToString:tableName] ? frameworkBundle.infoDictionary [(NSString *) kCFBundleNameKey] : tableName; NSString *const localizedKey = originalImp (frameworkBundle, selector, key, value, possibleTableName); if (![localizedKey isEqualToString:key]) { properLocalizationBundle = frameworkBundle; properLocalizationTable = possibleTableName; break; } } if (!(properLocalizationBundle && properLocalizationTable)) {
source share