2012-04-19 15 views
10

Voglio convertire una stringa cirillica al suo equivalente latino più vicino. Per esempio. "матрешка" => "matreshka", "водка" => "vodka". Quindi, idealmente, voglio un metodo pronto per l'uso su NSString o da qualche altra parte che già conosce tutto degli alfabeti e può fare la conversazione.Traslitterazione/trasposizione dei caratteri nella NSString

Ma se tale funzionalità non è presente nelle API iOS allora sarò completamente soddisfatto qualcosa come tr il metodo di rubino che solo sostituisce i caratteri di una stringa utilizzando una semplice mappatura specificato come parametro.

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

risposta

19

O provare CFStringTransform funzione del CFMutableString con kCFStringTransformToLatin trasformare identificatore o fare una categoria NSString con semplice mappatura.

A cura del manifesto domanda: più precisamente dovrebbe essere:

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

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

3

Con Swift 4 e iOS 11, String ha un metodo chiamato applyingTransform(_:reverse:). applyingTransform(_:reverse:) ha la seguente dichiarazione:

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

Il seguente codice di giochi mostra come utilizzare applyingTransform(_:reverse:) al fine di traslitterare da cirillico ai caratteri latini:

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

In alternativa, se necessario, si possibile utilizzare la funzione 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 
Problemi correlati