Подтвердить что ты не робот

NSLocalizedString с быстрой переменной

Я пытаюсь локализовать свое приложение, используя 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")

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

4b9b3361

Ответ 1

Вы можете использовать параметры формата sprintf в NSLocalizedString, поэтому ваш пример может выглядеть следующим образом:

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

Ответ 2

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

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

Ответ 3

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

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

Чтобы использовать его для локализации в коде, выполните:

self.descriptionView.text = "Description".localized

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

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

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

введите описание изображения здесь введите описание изображения здесь

Надеюсь, что это поможет!

Ответ 4

Вот расширение, которое я использую в String, оно добавляет функцию localizeWithFormat с переменными аргументами,

extension String:{

     func localizeWithFormat(arguments: CVarArg...) -> String{
        return String(format: self.localized, arguments: arguments)        
     }

     var localized: String{
         return Bundle.main.localizedString(forKey: self, value: nil, table: "StandardLocalizations")
     }
}

Использование:

let siriCalendarText = "AnyCalendar"
let localizedText = "LTo use Siri with my app, please set %@ as the default list on your device reminders settings".localizeWithFormat(arguments: siriCalendarTitle)

Только будьте осторожны, чтобы не использовать те же имена функций и свойств, которые есть у String. Я обычно использую трехбуквенный префикс для всех моих функций фреймворка.

Ответ 5

Я попробовал вышеуказанные решения, однако код ниже работал для меня

SWIFT 4

extension String {

    /// Fetches a localized String
    ///
    /// - Returns: return value(String) for key
    public func localized() -> String {
        let path = Bundle.main.path(forResource: "en", ofType: "lproj")
        let bundle = Bundle(path: path!)
        return (bundle?.localizedString(forKey: self, value: nil, table: nil))!
    }


    /// Fetches a localised String Arguments
    ///
    /// - Parameter arguments: parameters to be added in a string
    /// - Returns: localized string
    public func localized(with arguments: [CVarArg]) -> String {
        return String(format: self.localized(), locale: nil, arguments: arguments)
    }

}

// variable in a class
 let tcAndPPMessage = "By_signing_up_or_logging_in,_you_agree_to_our"
                                     .localized(with: [tAndc, pp, signin])

// Localization File String
"By_signing_up_or_logging_in,_you_agree_to_our" = "By signing up or logging in, you agree to our \"%@\" and \"%@\" \nAlready have an Account? \"%@\"";

Ответ 6

Я создал extension до 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)