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)"
объявить строки в строковых файлах для разных языков (например : арабский и английский)
надеюсь будет помогать!
Я создал 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)