apportable - изображения ресурсов недоступны, если они были локализованы
При портировании приложения iOS на Android с помощью apportable ресурсы в приложении недоступны (они не загружаются во время выполнения), если они локализованы (разные версии для разных языков):
Добавьте локализованное изображение в ваш проект (разные версии изображения для разных языков) через Xcode - apportable загрузит их в пакет.apk в качестве ресурсов в папках, зависящих от языка. Например:
assets/en.lproj/image.png (generic english version) assets/zh-Hans.lproj/image.png (simplified chinese version) assets/zh-Hant.lproj/image.png (traditional chinese version)
Попытка загрузить изображение:
UIImage *image = [UIImage imageNamed:imageName]; // This works under iOS but not under apportable
это возвращает ноль, если изображение было локализовано, как описано выше.
1 ответ
Решение
Ниже приведен временный обходной путь, который работает:
Utils.h:
#if defined(ANDROID) && defined(WORKAROUND_APPORTABLE_LOCALIZED_IMAGES)
#define LOCALIZEDIMAGE LocalizedUIImage
@interface LocalizedUIImage : UIImage
+(UIImage *)imageNamed:(NSString *)imageName;
@end
#else
#define LOCALIZEDIMAGE UIImage
#endif
Utils.m:
#if defined(ANDROID) && defined(WORKAROUND_APPORTABLE_LOCALIZED_IMAGES)
#import <Foundation/Foundation.h>
@implementation LocalizedUIImage
+(UIImage *)imageNamed:(NSString *)imageName {
UIImage *image = nil;
if ([imageName rangeOfString:@"/"].location == NSNotFound) {
NSLocale *locale = [NSLocale currentLocale];
NSString *localeId = [locale localeIdentifier];
NSString *localizedImageName = [[localeId stringByAppendingString:@".lproj/"] stringByAppendingString:imageName];
image = [UIImage imageNamed:localizedImageName];
if (image == nil) { // Retry for a generic language version (ie: en rather than en_US )
NSUInteger hyphenatedLocale = [localeId rangeOfString:@"_"].location;
if (hyphenatedLocale != NSNotFound) {
NSString *localizedImageName = [[[localeId substringToIndex:hyphenatedLocale] stringByAppendingString:@".lproj/"] stringByAppendingString:imageName];
image = [UIImage imageNamed:localizedImageName];
}
}
}
if (image == nil)
image = [UIImage imageNamed:imageName];
return image;
}
@end
#endif
Использовать по:
UIImage *image = [LOCALIZEDIMAGE imageNamed:imageName];