我为我的故事板(英语,阿拉伯语)创建了本地化,并且我执行了更改(切换)应用程序的功能。语言(本地)如果我手动重新启动(重新启动)应用程序并且我的视图翻转正确 - 如果阿拉伯语和左 - 右 - 如果英语也是如此,那么它的工作是否完美,但如何在不重新启动我的应用程序的情况下更改故事板本地手动?
我用这个函数来改变语言
String body = msgs[i].getMessageBody();
提前感谢。
答案 0 :(得分:2)
这是你可以做的。但是这段代码在Obj-C中。
为NSBundle创建一个类别类,如下所示:
#import "NSBundle+ForceLocalization.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 (ForceLocalization)
+(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
在此之后,只需致电:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects: langCode, nil]
forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
[NSBundle setLanguage: langCode];
您需要再次为当前屏幕重新加载UI。如果您继续使用另一个控制器,您将看到更新后的语言。
答案 1 :(得分:0)
我今天正在寻找相同的答案但我无法找到它,但我使用了这段代码
let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
UIApplication.shared.keyWindow?.rootViewController = vc
重新加载主视图控制器,它做了一些如何重新启动应用程序,虽然连接到故事板的视图存在一些问题,我从superView中删除了它们...