我正在尝试使用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中做到这一点?非常感谢你。
答案 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文件中声明不同语言的字符串(例如:阿拉伯语和英语)
希望会有所帮助!
答案 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)
我创建了一个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)