Ios 动态编程本地化故事板
我的应用程序允许用户更改国家,所以如果他们更改为泰国,我应该更新我的故事板等的语言。 P/S:我看到很多人说,如果你重新启动应用程序,你会没事的,但这确实是我想要防止的用户体验问题。 以下是我当前的尝试,它适用于通过编程创建/修改/定义的文本,但不会更新故事板上的文本:Ios 动态编程本地化故事板,ios,swift,Ios,Swift,我的应用程序允许用户更改国家,所以如果他们更改为泰国,我应该更新我的故事板等的语言。 P/S:我看到很多人说,如果你重新启动应用程序,你会没事的,但这确实是我想要防止的用户体验问题。 以下是我当前的尝试,它适用于通过编程创建/修改/定义的文本,但不会更新故事板上的文本: import UIKit class LocalizationHelper: NSObject { static var bundle: NSBundle? static let sharedInstance =
import UIKit
class LocalizationHelper: NSObject {
static var bundle: NSBundle?
static let sharedInstance = LocalizationHelper()
func localizedStringForKey(key: String, comment: String) -> String {
return (LocalizationHelper.bundle?.localizedStringForKey(key, value: comment, table: nil))!
}
func setLanguage(language: String) {
NSUserDefaults.standardUserDefaults().setObject(language, forKey: "LocalizedStringUserDefaultsKey")
NSUserDefaults.standardUserDefaults().synchronize()
if let path = NSBundle.mainBundle().pathForResource(language, ofType: "lproj") {
print(language)
print(language)
LocalizationHelper.bundle = NSBundle(path: path)
print(LocalizationHelper.bundle)
} else {
NSUserDefaults.standardUserDefaults().setObject("Base", forKey: "LocalizedStringUserDefaultsKey")
NSUserDefaults.standardUserDefaults().synchronize()
LocalizationHelper.bundle = NSBundle.mainBundle()
}
}
}
打印语句结果为
Optional(NSBundle </var/mobile/Containers/Bundle/Application/91776A02-BADA-4EC9-A451-45A453B84C83/Appname.app/th.lproj> (not yet loaded))
这有什么关系吗?
为了记录在案,我引用了这个
p/S:我的Main.storyboard库中也有Main.stringThai,只是它们只有在我更改系统语言时才会更新:我相信您已经为storyboard中的每个UI组件定义了插座。您只需调用NSLocalizedString即可将其本地化: 另一个选项是为每种支持的语言提供多个故事板。一旦用户更改国家/地区,根据支持的语言选择正确的故事板。大概是这样的:
let storyboard = UIStoryboard(name: "MainStoryboard_English", bundle: nil)
很抱歉,我只有一个故事板,也就是说,我需要在我的选项卡栏控制器项中创建每个outlet,包括文本,并在每个视图中更新它们。因此,我也在避免这样做
let storyboard = UIStoryboard(name: "MainStoryboard_English", bundle: nil)