What's NSLocalizedString equivalent in Swift? What's NSLocalizedString equivalent in Swift? ios ios

What's NSLocalizedString equivalent in Swift?


I use next solution:

1) create extension:

extension String {    var localized: String {        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")    }}

2) in Localizable.strings file:

"Hi" = "Привет";

3) example of use:

myLabel.text = "Hi".localized

enjoy! ;)

--upd:--

for case with comments you can use this solution:

1) Extension:

extension String {    func localized(withComment:String) -> String {        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: withComment)    }}

2) in .strings file:

/* with !!! */"Hi" = "Привет!!!";

3) using:

myLabel.text = "Hi".localized(withComment: "with !!!")


The NSLocalizedString exists also in the Swift's world.

func NSLocalizedString(    key: String,    tableName: String? = default,    bundle: NSBundle = default,    value: String = default,    #comment: String) -> String

The tableName, bundle, and value parameters are marked with a default keyword which means we can omit these parameters while calling the function. In this case, their default values will be used.

This leads to a conclusion that the method call can be simplified to:

NSLocalizedString("key", comment: "comment")

Swift 5 - no change, still works like that.


A variation of the existing answers:

Swift 5.1:

extension String {    func localized(withComment comment: String? = nil) -> String {        return NSLocalizedString(self, comment: comment ?? "")    }}

You can then simply use it with or without comment:

"Goodbye".localized()"Hello".localized(withComment: "Simple greeting")

Please note that genstrings won't work with this solution.