localizeWithFormat and variadic arguments in Swift

前端 未结 3 796
甜味超标
甜味超标 2020-12-11 23:56

I am trying to create a String extension to do something like that

\"My name is %@. I am %d years old\".localizeWithFormat(\"John\", 30)

w

相关标签:
3条回答
  • 2020-12-12 00:14

    In Swift 3

    func localize(key: String, arguments: CVarArg...) -> String {
      return String(format: NSLocalizedString(key, comment: ""), arguments)
    }
    
    0 讨论(0)
  • 2020-12-12 00:19

    This should be pretty simple just change your parameters as follow:

    extension String {
        func localizeWithFormat(name:String,age:Int, comment:String = "") -> String {
            return String.localizedStringWithFormat( NSLocalizedString(self, comment: comment), name, age)
        }
    }
    
    "My name is %@. I am %d years old".localizeWithFormat("John", age: 30)  // "My name is John. I am 30 years old"
    

    init(format:locale:arguments:)

    extension String {
        func localizeWithFormat(args: CVarArgType...) -> String {
            return String(format: self, locale: nil, arguments: args)
        }
        func localizeWithFormat(local:NSLocale?, args: CVarArgType...) -> String {
            return String(format: self, locale: local, arguments: args)
        }
    }
    let myTest1 = "My name is %@. I am %d years old".localizeWithFormat(NSLocale.currentLocale(), args: "John",30)
    let myTest2 = "My name is %@. I am %d years old".localizeWithFormat("John",30)
    
    0 讨论(0)
  • 2020-12-12 00:24

    This allows localized string with variadic arguments:

    extension String {
          func localizedStringWithVariables(vars: CVarArgType...) -> String {
            return String(format: NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: ""), arguments: vars)
          }
    }
    

    Call using:

    "Hello, %@. Your surname is: %@.".localizedStringWithVariables("Neil", "Peart")
    
    0 讨论(0)
提交回复
热议问题