就像这个问题中所提到的,如何强制使用特定语言的NSLocalizedString
我可以通过以下方法来强制本地化。
头文件
@interface NSBundle (Language)
+(void)setLanguage:(NSString*)language;
@end
实现
#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
接下来,我需要对图像进行本地化处理,具体做法如下。 本地化资源目录
问题是当我通过编程方式更改本地化时,图像从未更改。
[NSBundle setLanguage:@"en"];
只有我的字符串被更改了,我该怎么办?我已经尝试过普通图片和像这样的资产中的图片。但是除非我真正在设置中更改手机语言,否则它不起作用。但我需要以编程方式更改/强制本地化,并且需要更改图像(不仅仅是文本)。请问我该如何做?
return
。我建议重新考虑你的方法,如果你仍然遇到问题,请创建一个新的问题并将其链接到这里,因为你的问题与原始问题无关。 - Otávio