これはあなたができる方法です。しかし、このコードは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をリロードする必要があります。別のコントローラに行くと、更新された言語が表示されます。
[ios swiftでのローカライゼーションの可能な重複。どのように私は実行時にアプリケーション言語を変更することができます](http://stackoverflow.com/questions/35425788/localization-in-ios-swift-how-can-i-change-application-language-at-run-time) – MwcsMac
私はNSLocalizedStringとストーリーボードのローカリゼーションを使用しているので、ラベルのみを変更したくないので、アラビア語の場合は右寄り、英語の場合は左寄せにする必要があるため、バンドルをリロードする必要があります。私は多くのアプリがそれをしたのを見た。新しい言語を選択するとすぐに、選択した言語でアプリを起動します。 – Diyaa
この要点を確認してください:https://gist.github.com/afshin-hoseini/a46f431fbe6bb20fde8e8ed675e81018 – Afshin