繁体   English   中英

如何根据设备语言使用不同的阵列?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM