2012-04-19 35 views
10

Tôi muốn chuyển ngữ chuỗi cyrillic thành chuỗi tương đương gần nhất của latin. Ví dụ. "матрешка" => "matreshka", "водка" => "vodka". Vì vậy, lý tưởng tôi muốn một số sẵn sàng để sử dụng phương pháp trên NSString hoặc ở một nơi khác mà đã biết tất cả mọi thứ về các bảng chữ cái và có thể làm cuộc trò chuyện.Chuyển ngữ/chuyển đổi các ký tự trong NSString

Nhưng nếu chức năng như vậy không tồn tại trong API iOS thì tôi sẽ hoàn toàn hài lòng với một phương pháp như phương pháp tr của ruby ​​chỉ thay thế các ký tự trong chuỗi bằng cách sử dụng ánh xạ đơn giản được chỉ định làm tham số.

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

Trả lời

19

Hoặc thử CFStringTransform chức năng của CFMutableString với kCFStringTransformToLatin chuyển đổi định danh hoặc thực hiện một loại với bản đồ đơn giản NSString.

Sửa bởi câu hỏi poster: đặc biệt hơn nó nên là:

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

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

3

Với Swift 4 và iOS 11, String có phương thức được gọi là applyingTransform(_:reverse:). applyingTransform(_:reverse:) có khai báo như sau:

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

Mã Sân chơi sau đây cho thấy làm thế nào để sử dụng applyingTransform(_:reverse:) để transliterate từ Cyrillic để ký tự Latin:

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

Là một thay thế, nếu cần thiết, bạn có thể sử dụng chức năng 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 
Các vấn đề liên quan