我正在探索如何使用CFStringTransform
希伯来语音译文本,但我遇到了一些不一致之处,其中应该以不同方式发音的字母以完全相同的方式书写,或者 Apple 算法未考虑到的特殊情况。
Kaf (כּ → K) vs Khaf (כ → Ḵ)
כִּי(“因为”)
let string = NSMutableString(string: "כִּי") CFStringTransform(string, nil, kCFStringTransformLatinHebrew, true) print(string) // prints "ki̇y"
שָׁכָחְתִּי(“我忘了”)
let string = NSMutableString(string: "שָׁכָחְתִּי") CFStringTransform(string, nil, kCFStringTransformLatinHebrew, true) print(string) // prints "şá̌káẖĕţi̇y" instead of "şá̌ḵáẖĕţi̇y"
כִּי 中的kaf在英语中的发音类似于 K,而שָׁכָֽחְתִּי中的 khaf 发音为loch或Bach,通常音译为 CH、KH 或 Ḵ。但是,这两个字母都音译为 K。
裴(פּ → P) vs费(פ → F)
פַּרְעֹה(“法老”)
let string = NSMutableString(string: "פַּרְעֹה") CFStringTransform(string, nil, kCFStringTransformLatinHebrew, true) print(string) // prints "pȧrĕʻòh"
יוֹסֵף(“约瑟夫”)
let string = NSMutableString(string: "יוֹסֵף") CFStringTransform(string, nil, kCFStringTransformLatinHebrew, true) print(string) // prints "ywòsép" instead of "ywòséf"
虽然 פַּרְעֹה 中的pei发音类似于 P 的发音(并相应地音译),但 יוֹסֵף 中的(尾随)fei发音为 F (并相应地音译)。但是,两者都用 P 音译。
带pataḥ g'nuva的尾随辅音
来自英语维基百科中关于希伯来语发声的文章:
单词结尾处字母 ח, ע, ה 上的补丁在字母之前而不是之后发声。因此,נֹחַ (Noah) 发音为 /ˈno.ax/。这仅出现在单词的末尾,并且仅出现在 patach 和 ח、ע 和 הּ(即 ה 中带有点 (mapiq))。这有时被称为 patach ganuv 或“偷来的” patach(更正式地说,“偷偷摸摸的 patach”),因为声音“窃取”了一个想象的附加辅音以使额外的音节。
然而:
תַפּוּחַ(“苹果”)
let string = NSMutableString(string: "תַפּוּחַ") CFStringTransform(string, nil, kCFStringTransformLatinHebrew, true) print(string) // prints "ţaṗẇẖa" instead of "ţaṗẇaẖ"
问:我怎样才能改变行为CFStringTransform
来解释这三种情况?
从 的参考资料中CFMutableString
,我们看到CFStringTransform
作为transform:
参数
一个 CFString 对象,用于标识要应用的转换。有关有效值的列表,请参阅CFStringTransform 的转换标识符。在 OS X v10.4 及更高版本上,您还可以使用ICU User Guide for Transforms中定义的任何有效 ICU 转换 ID 。
从文档看来,ICU 转换的规则足够灵活,可以自定义。甚至还有一个可以从他们的 playground访问的规则编辑器,但是,虽然我发现了一个 Stack Overflow 问题,它处理一些切线相似的事情,但我找不到一个明确记录的 RTL 语言的方法。