2017-05-09 37 views
1

我需要多語言工具在我的應用程序。我可以使用本地化字符串更改語言,但如果不重新啓動應用程序,故事板文本不會更改。我還爲需要更改文本對齊方式的用戶添加了阿拉伯語言,如果我重新啓動應用程序,這也可以正常工作。我想改變應用程序的語言,無需重新啓動應用程序

我使用AppleLanguages用戶默認鍵更改語言和動態文本本地化字符串。

+0

爲100%確定我通過的appDelegate –

+0

@jitendra tanwar設置rootViewControll重裝視圖控制器。你找到最終的解決方案嗎?請幫我 –

+0

是的,我通過的langauge變化重裝rootview控制器解決了這個問題。如果你想改變故事板本身的語言,那麼請確認是否新加入的視圖(標籤,按鈕等)存在於其他語言的故事板的字符串的文件或沒有。由於我們需要手動添加在項目中添加多種語言後添加的所有視圖(標籤,按鈕等)。 –

回答

0

客觀C:

+(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); 
} 

對於斯威夫特:

class func setLanguage(_ language: String) { 
var onceToken: Int 
if (onceToken == 0) { 
     /* TODO: move below code to a static variable initializer (dispatch_once is deprecated) */ 
    object_setClass(Bundle.main, BundleEx.self) 
} 
    onceToken = 1 
objc_setAssociatedObject(Bundle.main, bundle, language ? Bundle(path: Bundle.main.path(forResource: language, ofType: "lproj")) : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
} 

添加上述方法,只是通過要轉換的語言。

如果已經添加ja.lproj然後發送「JA」作爲一個參數去上面的方法。

這將轉換情節提要語言沒有重新啓動。

希望它有幫助。

+0

什麼是bundleEx –

相關問題