gpt4 book ai didi

ios - 以编程方式快速重新加载应用程序

转载 作者:可可西里 更新时间:2023-11-01 01:28:33 32 4
gpt4 key购买 nike

我为我的 Storyboard (英语、阿拉伯语)创建了本地化,并执行了更改(切换)应用程序的功能。语言(本地)如果我手动重新启动(重新启动)应用程序并且我的 View 在阿拉伯语中翻转右-左,如果英语也翻转左-右,它工作完美,但是我如何在不手动重启我的应用程序的情况下更改本地 Storyboard?。

我用这个函数来改变语言

 func setLocale(langCode:String){

NSUserDefaults.standardUserDefaults().setObject([langCode], forKey: "AppleLanguages")
NSUserDefaults.standardUserDefaults().synchronize()

}

提前致谢。

最佳答案

这就是您可以做的。然而这段代码在 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];

您需要重新加载当前屏幕的用户界面。如果您转到另一个 Controller ,您会看到更新后的语言。

关于ios - 以编程方式快速重新加载应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048604/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com