2012-04-19 8 views
10

Quiero transcribir una cadena cirílica en su equivalente latino más cercano. P.ej. "матрешка" => "matreshka", "водка" => "vodka". Así que, idealmente, quiero algún método listo para usar en NSString o en otro lugar que ya sepa todo sobre los alfabetos y pueda hacer la conversación.Transliterar/transponer los caracteres en el NSString

Pero si dicha funcionalidad no existe en las API de iOS entonces seré totalmente feliz con algo como tr método de rubí que sólo reemplaza los caracteres de una cadena usando un mapeo sencillo especificado como un parámetro.

"баба".tr('абвгд', 'abvgd') 

Respuesta

19

O bien trata CFStringTransform función de CFMutableString con kCFStringTransformToLatin transformar identificador o hacer una categoría NSString con el mapeo simple.

Editado por la cuestión del cartel: más específicamente que debe ser:

NSMutableString *buffer = [@"русский язык" mutableCopy]; 
CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer; 
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false); 
NSLog(@"%@", buffer); // outputs "russkij âzyk" 
+1

Ай крас вчег !!) – korgx9

3

Con Swift 4 y iOS 11, String tiene un método llamado applyingTransform(_:reverse:). applyingTransform(_:reverse:) tiene la siguiente declaración:

func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String? 

El siguiente código de juegos muestra cómo utilizar applyingTransform(_:reverse:) con el fin de transcribir a partir cirílico a caracteres latinos:

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") 

Como alternativa, si es necesario, puede utilizar la función Core Foundation CFStringTransform(_:_:_:_:):

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 
Cuestiones relacionadas