我正在使用PHP音译器(来自php5-intl,使用ICU)将CJK音译为拉丁语(罗马化),问题是,我需要一些方法来指定输入区域设置,以便日本汉字不会罗马化为中文拼音(因为它们通常共享相同的utf8字符)。
例如: transliterator_transliterate('Any-Latin; Latin-ASCII; Lower();', $input);
中国オタク界 => zhong guo otaku jie
而我想得到:
中国オタク界 => chuu goku otaku kai
任何想法?
对ICU网站的进一步研究表明,问题可能是Han-Latin
只遵循拼音音译,所以我正在寻找一种方法,允许php5-intl告诉ICU使用Romaji音译代替(我还没有找到这样的id)。
这是我想出的一个脚本,用于测试与Latin-ASCII; Lower();
链接的所有不同的翻译器,但它们都不能产生您所寻求的结果。你可以尝试其他的汉字,并尝试选择Any-Latin
以外的转写器。
$scripts = transliterator_list_ids();
foreach ($scripts as $script) {
echo $transliterated = transliterator_transliterate(
$script . '; Latin-ASCII; Lower();',
'中国オタク界'
) . ' in ' . $script . "n";
}
这些产生了一些有意义的东西,并且与Any-Latin
: JapaneseKana-Latin/BGN
, Katakana-Latin
的行为方式不同
是的,Han-Latin
是拼音。ICU转写器来自CLDR(我将更新用户指南以澄清这一点)。ICU已经可以将假名(hira/kata)转换为拉丁语,但是汉字有多个读数,因此您无法通过简单的基于表的转换找到您正在寻找的内容。
edit:综上所述,如果没有编写规则,ICU将不会做你想做的事情,而且由于日语的工作方式,在我看来,使用自己的规则也不太可能简单。
我能想到的一种可能性是使用…
设置区域设置。setlocale(LC_ALL, "ja_JP");
您可以在运行音译器之前应用PHP中的各种格式化功能以您想要的方式格式化文本。