2016-10-14 8 views
2

私はストーリーボード(英語、アラビア語)のローカリゼーションを作成しましたが、私はアプリケーションを変更(切り替え)しました。私はアプリを手動で再起動せずにローカルのストーリーボードを変更することはできますか?即座にプログラムをリロードする

私は言語

func setLocale(langCode:String){ 

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

} 

を変更するには、この機能を使用するには、事前にありがとうございます。

+0

[ios swiftでのローカライゼーションの可能な重複。どのように私は実行時にアプリケーション言語を変更することができます](http://stackoverflow.com/questions/35425788/localization-in-ios-swift-how-can-i-change-application-language-at-run-time) – MwcsMac

+0

私はNSLocalizedStringとストーリーボードのローカリゼーションを使用しているので、ラベルのみを変更したくないので、アラビア語の場合は右寄り、英語の場合は左寄せにする必要があるため、バンドルをリロードする必要があります。私は多くのアプリがそれをしたのを見た。新しい言語を選択するとすぐに、選択した言語でアプリを起動します。 – Diyaa

+0

この要点を確認してください:https://gist.github.com/afshin-hoseini/a46f431fbe6bb20fde8e8ed675e81018 – Afshin

答えて

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をリロードする必要があります。別のコントローラに行くと、更新された言語が表示されます。

+0

あなたのコメントをありがとう、私は以前Obj-Cで動作しませんでした。 – Diyaa

関連する問題