【发布时间】:2016-06-07 17:40:17
【问题描述】:
我正在探索如何使用 CFStringTransform 到 transliterate texts in Hebrew 并且我遇到了一些不一致之处,其中应该以不同方式发音的字母以完全相同的方式书写或 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。
Pei (פּ → P) vs Fei (פ → 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 的尾随辅音
来自英文维基百科Hebrew vocalization的文章:
单词末尾字母 ח, ע, ה 上的 patach 在字母之前而不是之后发声。因此,נֹחַ (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 的行为以解决这三种情况?
从reference for CFMutableString中,我们看到CFStringTransform作为transform:参数
标识要应用的转换的 CFString 对象。有关有效值的列表,请参阅 Transform Identifiers for CFStringTransform。在 OS X v10.4 及更高版本上,您还可以使用在 ICU User Guide for Transforms 中定义的任何有效 ICU 转换 ID。
从the documentation 看来,ICU 转换的规则足够灵活,可以自定义。甚至还有一个rule editor 可以从their playground 访问,但是,虽然我发现a Stack Overflow question 可以处理一些切线相似的事情,但我找不到针对RTL 语言的明确记录方法。
【问题讨论】:
标签: swift foundation hebrew icu cfstring