PHP音译指定语言环境

时间:2014-03-19 04:23:10

标签: php locale icu transliteration

我正在使用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没有找到这样的身份。)

3 个答案:

答案 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/BGNKatakana-Latin

答案 1 :(得分:2)

是的,Han-Latin表示拼音。 ICU音译员来自CLDR(我将更新用户指南以明确这一点)。 ICU已经可以将假名(hira / kata)转换为拉丁语,但汉字有多个读数,因此您无法通过简单的基于表格的转换找到您要找的内容。

编辑:总而言之,ICU不会在没有编写规则的情况下做您想做的事情,由于日语的工作方式,我似乎也不会对您自己的规则很简单

答案 2 :(得分:0)

我能想到的一种可能性是使用...

设置语言环境
setlocale(LC_ALL, "ja_JP");

然后,您可以在运行音译器之前应用各种formatting functionality in PHP来按照您希望的方式格式化文本。