NSLocalizedString с переменной swift

Я пытаюсь локализовать свое приложение с помощью NSLocalizedString. Когда я импортирую файл XLIFF, большинство работает как шарм, но что-то не так, и некоторая строка не локализована. Я заметил, что проблема заключается в том, что NSLocalizedString содержит что-то переменное внутри, например:

NSLocalizedString(" - (count) Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare")

или

NSLocalizedString("Notifica per (medicina!) della prescrizione (prescription!)nMemo: (memoTextView.text)", comment: "Messaggio della Local Notification")

возможно, это не правильный синтаксис для такого рода вещей. Кто-то может объяснить мне, как это сделать в Swift? Большое спасибо.

4 ответов


можно использовать sprintf параметры формата в пределах NSLocalizedString, Так что ваш пример может выглядеть так:

let myString = String(format: NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)

в сеансе #412 WWDC2014 "локализация с помощью Xcode 6" правильным способом для этого в Swift является следующее:

String.localizedStringWithFormat(
    NSLocalizedString(" - %d Notifica",
    comment: "sottotitolo prescrizione per le notifiche al singolare"),
    count)

я следовал подходу создания расширения для строки, поскольку у меня есть много строк для локализации.

extension String {
    var localized: String {
        return NSLocalizedString(self, comment:"")
    }
}

использовать его для локализации в код:

self.descriptionView.text = "Description".localized

для строк с динамическими переменными следуйте:

self.entryTimeLabel.text = "\("Doors-open-at".localized) \(event.eventStartTime)"

объявить строки в строковых файлах для разных языков (например : арабский и английский)

enter image description here enter image description here

надеюсь будет помогать!


Я создал extension to String так как у меня было много strings на localized.

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }
}

например:

let myValue = 10
let anotherValue = "another value"

let localizedStr = "This string is localized: \(myValue) \(anotherValue)".localized
print(localizedStr)