如何在不重启应用程序的情况下更改iOS9中应用程序的语言?

时间:2016-01-23 09:49:06

标签: ios9

当我在设备语言中单独更改应用程序的语言时,只有在我重新启动它时才会起作用。我根据Stack Overflow中的答案尝试了几次,如:

#import "NSBundle+Language.h"

#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

但未生效。

我在应用的设置屏幕中更改语言时发布了通知,收听通知的观看者将重新加载视图,但没有工作,语言没有更改。

1 个答案:

答案 0 :(得分:0)

您的代码适用于我的演示,只需设置另一种语言,然后重新加载可见的视图。