12

キリル文字列を最も近いラテン文字に音訳したいと思います。例:"матрешка"=> "matreshka"、"водка"=>"vodka"。したがって、理想的には、NSStringですぐに使用できるメソッド、またはアルファベットに関するすべてをすでに知っていて会話を実行できる他の場所が必要です。

しかし、そのような機能がiOS APIに存在しない場合は、パラメーターとして指定された単純なマッピングを使用して文字列内の文字を置き換えるだけのrubyのtrメソッドのようなものに完全に満足します。

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

3 に答える 3

19

CFStringTransform変換識別子を使用してCFMutableStringの関数を試すかkCFStringTransformToLatin、単純なマッピングを使用してNSStringカテゴリを作成します。

質問ポスターによって編集されました:より具体的には、次のようになります。

NSMutableString *buffer = [@"русский язык" mutableCopy];
CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer;
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false);
NSLog(@"%@", buffer); // outputs "russkij âzyk"
于 2012-04-19T12:43:12.213 に答える
6

発音区別符号やアクセントが必要ない場合は、CFStringTransform(bufferRef, NULL, kCFStringTransformStripCombiningMarks, false);

追加記事: http: //nshipster.com/cfstringtransform/

于 2013-03-11T12:56:48.563 に答える
6

Swift 5にStringは、と呼ばれるメソッドがありapplyingTransform(_:reverse:)ます。applyingTransform(_:reverse:)次の宣言があります。

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

次のPlaygroundコードはapplyingTransform(_:reverse:)、キリル文字からラテン文字に音訳するための使用方法を示しています。

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

別の方法として、CoreFoundationCFStringTransform(_:_:_:_:)関数を使用できます。

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
于 2017-08-24T00:45:51.753 に答える