[英]iOS storyBoard localization is not working without restart of the application
我想更改應用程序的語言。 我用英語和印地語為 Main.strings 創建了兩個文件。 還有用於印地語和英語的 Localizable.strings。 這是我更改語言的方法:
LocalizationSystem.sharedInstance.setLanguage(languageCode: "hi")
UIView.appearance().semanticContentAttribute = .forceLeftToRight
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SwipeViewController")as! SwipeViewController
let navigationController = UINavigationController(rootViewController: vc)
navigationController.modalPresentationStyle = .overFullScreen
UIApplication.shared.keyWindow?.rootViewController = navigationController
這是 LocalizationSystem 類
class LocalizationSystem : NSObject {
var bundle: Bundle!
class var sharedInstance: LocalizationSystem {
struct Singleton {
static let instance: LocalizationSystem = LocalizationSystem()
}
return Singleton.instance
}
override init() {
super.init()
bundle = Bundle.main
}
func localizedStringForKey(key:String, comment:String) -> String {
return bundle.localizedString(forKey: key, value: comment, table: nil)
}
func localizedImagePathForImg(imagename:String, type:String) -> String {
guard let imagePath = bundle.path(forResource: imagename, ofType: type) else {
return ""
}
return imagePath
}
func setLanguage(languageCode:String) {
var appleLanguages = UserDefaults.standard.object(forKey: "AppleLanguages") as! [String]
appleLanguages.remove(at: 0)
appleLanguages.insert(languageCode, at: 0)
UserDefaults.standard.set(appleLanguages, forKey: "AppleLanguages")
UserDefaults.standard.synchronize() //needs restrat
if let languageDirectoryPath = Bundle.main.path(forResource: languageCode, ofType: "lproj") {
bundle = Bundle.init(path: languageDirectoryPath)
} else {
resetLocalization()
}
}
func resetLocalization() {
bundle = Bundle.main
}
func getLanguage() -> String {
let appleLanguages = UserDefaults.standard.object(forKey: "AppleLanguages") as! [String]
let preferredLanguage = appleLanguages[0]
if preferredLanguage.contains("-") {
let array = preferredLanguage.components(separatedBy: "-")
return array[0]
}
return preferredLanguage
}
}
Localizable.strings
文件正在更改,但Main.Strings
文件不會在不重新啟動應用程序的情況下更改。
我不知道我在這里缺少什么。
提前致謝
試試這個可能會幫助你:
if LocalizationSystem.sharedInstance.getLanguage() == "en" {
Bundle.main.path(forResource: "en", ofType: "lproj")
} else if LocalizationSystem.sharedInstance.getLanguage() == "hi" {
Bundle.main.path(forResource: "hi", ofType: "lproj")
}
並且您可以向您的應用程序添加更多語言並在它們之間切換,而無需重新啟動應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.