我正在创建一个使用2种语言的阿拉伯语和英语的应用程序。我已设法将布局更改为阿拉伯语的RTL和英语的普通。我还添加了阿拉伯语和英语的Localizable.strings文件。
当选择英语时,应用程序选择英语和普通布局显示,并在第一次或每次重启时启动应用程序时显示阿拉伯语和RTL布局。
它不会在运行时获取阿拉伯语或英语Localizable.strings文件。有没有办法做到这一点。
答案 0 :(得分:2)
您可以更改从
中读取的当前捆绑包extension String {
func localizedStr(language:String) -> String {
let path = Bundle.main.path(forResource: language, ofType: "lproj")
let bundleName = Bundle(path: path!)
return NSLocalizedString(self, tableName: nil, bundle: bundleName!, value: "", comment: "")
}
}
在此处查看演示local
答案 1 :(得分:0)
尝试以下代码......它 可能会帮助你解决问题。
第1步
extension String {
/// Returns the localized string value
public var localized: String {
if let bundleName:String = UserDefaults.standard.value(forKey: "USER_LANG") as? String {
let path = Bundle.main.path(forResource: bundleName, ofType: "lproj")
let bundle = Bundle.init(path: path!)
return localize(withBundle: bundle!)
} else {
return localize(withBundle: Bundle.main)
}
}
public func localize(withBundle bundle: Bundle) -> String
{
return NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "")
}
}
第2步
示例
// Strore Base bundleName when english button is clicked
UserDefaults.standard.set("Base", forKey: "USER_LANG")
// Strore fr(short from of french) bundleName when french button is clicked
UserDefaults.standard.set("fr", forKey: "USER_LANG")
第3步
用法
"lbl_name"="name";
// name will convert in French and English too
"lbl_name".localized
谢谢!!!