Как я могу использовать другой массив в зависимости от языка устройства? - PullRequest
0 голосов
/ 12 сентября 2018

В моем приложении у меня есть 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")
        }
    }
}

1 Ответ

0 голосов
/ 12 сентября 2018

Храните цитаты как локализованный список свойств ресурса "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)

(Принудительное развертывание и принудительные попытки здесь допустимы, поскольку любой сбой может указывать на программную ошибку который должен быть исправлен.)

...