我正在使用PHP Transliterator(来自php5-intl,使用ICU)将CJK音译为拉丁语(罗马化),问题是,我需要一些方法来指定输入语言环境,以便日语汉字不会被翻译成中文拼音(因为它们经常共享utf8 character)。
例如:
transliterator_transliterate('Any-Latin; Latin-ASCII; Lower();', $input);
中国オタク界 => zhong guo otaku jie
虽然我想得到:
中国オタク界 => chuu goku otaku kai
有什么想法吗?
对ICU site的进一步研究表明问题可能是Han-Latin
仅遵循拼音音译,所以我正在寻找一种方法允许php5-intl告诉ICU使用罗马字音译(I没有找到这样的身份。)
答案 0 :(得分:2)
这是我想出的一个脚本,用于测试与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
答案 1 :(得分:2)
是的,Han-Latin
表示拼音。 ICU音译员来自CLDR(我将更新用户指南以明确这一点)。 ICU已经可以将假名(hira / kata)转换为拉丁语,但汉字有多个读数,因此您无法通过简单的基于表格的转换找到您要找的内容。
编辑:总而言之,ICU不会在没有编写规则的情况下做您想做的事情,由于日语的工作方式,我似乎也不会对您自己的规则很简单
答案 2 :(得分:0)
我能想到的一种可能性是使用...
设置语言环境setlocale(LC_ALL, "ja_JP");
然后,您可以在运行音译器之前应用各种formatting functionality in PHP来按照您希望的方式格式化文本。