[英]How can I use different array based on the device language?
在我的应用程序中,我有3个数组,一个数组用于基本语言(英语),另外两个数组用于本地化。 是否可以根据用户设备上设置的语言选择特定的阵列? 例如,如果设备设置为使用德语,则我要使用德语翻译的短语。
这是我创建的变量
var enQuotes:[String] = []
var itQuotes:[String] = []
var deQuotes:[String] = []
这是从文件中获取引号的方法
enQuotes = quotes_en.getEnQuotes()
itQuotes = quotes_it.getItQuotes()
deQuotes = quotes_de.getDeQuotes()
这是我用来设置随机短语的代码
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let firstTouch = touches.first {
let hitView = self.view.hitTest(firstTouch.location(in: self.view), with: event)
if hitView === backgroundView {
let randomArray = Int(arc4random_uniform(UInt32(enQuotes.count)))
phraseLbl.text = (enQuotes[randomArray])
print("touch is inside")
} else {
print("touch is outside")
}
}
}
将引号存储为应用程序中的本地化属性列表资源“ Quotes.plist”。 例如,英文版看起来像
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>First Quote</string>
<string>Second Quote</string>
<string>Third Quote</string>
</array>
</plist>
为每种受支持的语言添加本地化。
在运行时,使用Bundle.url(forResource:withExtension:)
方法找到属性列表,这将根据用户的语言设置自动选择正确的版本。 然后读取数据并将其反序列化为字符串数组:
let url = Bundle.main.url(forResource: "Quotes", withExtension: "plist")!
let data = try! Data(contentsOf: url)
let quotes = try! PropertyListDecoder().decode([String].self, from: data)
(在这里可以接受强制展开和强制尝试,因为任何失败都将指示需要修复的编程错误 。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.