带有swift变量的NSLocalizedString

时间:2014-10-09 11:45:48

标签: ios swift localization nslocalizedstring xliff

我正在尝试使用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中做到这一点?非常感谢你。

7 个答案:

答案 0 :(得分:107)

您可以在sprintf中使用NSLocalizedString格式参数,因此您的示例可能如下所示:

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

答案 1 :(得分:87)

WWDC2014的会话#412"使用Xcode 6"进行本地化。 Swift的正确方法如下:

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

答案 2 :(得分:18)

我已经按照创建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文件中声明不同语言的字符串(例如:阿拉伯语和英语)

enter image description here enter image description here

希望会有所帮助!

答案 3 :(得分:2)

这是我在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相同的函数和属性名称。我通常对所有框架功能使用3个字母的前缀。

答案 4 :(得分:2)

我尝试了上述解决方案,但是下面的代码对我有用

SWIFT 4

TLS

答案 5 :(得分:0)

我为 UILabel 编写了相同的函数

extension UILabel {
    
    func setLocalizedText(key: String) {
        self.text = key.localized
    }
    
    func setLocalizedText(key: String, arguments: [CVarArg]) {
        self.text = String(format: key.localized, arguments: arguments)
    }
}

如果您愿意,也可以将此 localized 属性移至 UILabel

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

我的本​​地化

"hi_n" = "Hi, %@!";

像这样使用它们:

self.greetingLabel.setLocalizedText(key: "hi_n", arguments: [self.viewModel.account!.firstName])
// Shows this on the screen -> Hi, StackOverflow!

答案 6 :(得分:-3)

我创建了一个extensionString,因为我有stringslocalized

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)