I want to transliterate a cyrillic string to it\'s closest latin equivalent. E.g. \"матрешка\" => \"matreshka\", \"водка\" => \"vodka\". So ideally I want some ready to use meth
With Swift 5, String
has a method called applyingTransform(_:reverse:). applyingTransform(_:reverse:)
has the following declaration:
func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String?
The following Playground code shows how to use applyingTransform(_:reverse:)
in order to transliterate from cyrillic to latin characters:
import Foundation
let string = "матрешка"
let latinString = string.applyingTransform(StringTransform.toLatin, reverse: false)
let noDiacriticString = latinString?.applyingTransform(StringTransform.stripDiacritics, reverse: false)
print(latinString) // prints: Optional("matreška")
print(noDiacriticString) // prints: Optional("matreska")
As an alternative, you can use Core Foundation CFStringTransform(_:_:_:_:) function:
import Foundation
let mutableString = NSMutableString(string: "матрешка")
CFStringTransform(mutableString, nil, kCFStringTransformToLatin, false)
print(mutableString) // prints: matreška
CFStringTransform(mutableString, nil, kCFStringTransformStripDiacritics, false)
print(mutableString) // prints: matreska