有没有免费的开源PHP translit lib?

时间:2010-03-20 11:24:16

标签: php open-source transliteration

所以我有很多用户发布了不同语言名称的文章。我需要一些lib来将thouse文章名称翻译成英文字母,例如将俄语'р'翻译成eng'r'等等所有欧洲语言,俄语和亚洲语言。哪里有这样的lib?

谷歌45秒给了我这个"This extension allows you to transliterate text in non-latin characters (such as Chinese, Cyrillic, Greek etc) to latin characters."这似乎是我真正需要的。有没有人在现实生活中尝试过这个?

5 个答案:

答案 0 :(得分:3)

Google有一个AJAX transliteration API可以很好地处理many major scripts

修改:该死的,在进一步检查时会显示这只允许从转换拉丁字母。谷歌没有提供反向功能是有点愚蠢,因为他们已经在谷歌翻译中使用它来为西里尔语,中文,泰语,印地语和其他人提供罗马语,尽管不是像希伯来语和阿拉伯语这样的语言。

进一步编辑:我想到了一种可能的解决方法:检测语言并使用AJAX查询通过Google Translate使用与目标语言相同的源语言来运行它,例如: Chinese-to-Chinese。 Firebug显示音译以div输出,其ID为translit。音译通常具有很强的重音,因此您需要转换它们。这绝不是可以依赖的东西(尽管Google通常不会对其HTML进行频繁的结构更改),但这肯定是一种有趣的可能性。

答案 1 :(得分:2)

我不是语言学家,远非如此,但我向你提出你想要做的事情是不可能的,或者非常复杂的实现。

毕竟,翻译名称不仅仅是“转换字母表”。它在俄语中相对容易,因为每个西里尔字符实际上都有一个拉丁语对应物(它们是sister alphabets)。

我不知道阿拉伯语,但对于中文,你需要一个像Pinyin这样的罗马化系统才能到达任何地方。它比简单替换字符更复杂。

以下是ISO Romanizations的完整列表 - 如果我理解正确,那么适合您的解决方案就必须实施这些规则。

所以任务将是:

  • 分析包含多个不同字符范围的文本

  • 识别它所属的字符范围的每个单词(อักษรไทย是泰语;Москва是西里尔语;依此类推)

  • 对每个单词应用正确的罗马化方法。

现在我非常有兴趣了解任何可以在PHP中执行此操作的库,但很可能没有。

答案 2 :(得分:1)

iconv做什么?

  

使用此模块,您可以将由本地字符集表示的字符串转换为由另一个字符集表示的字符串,该字符集可以是Unicode字符集。

从PHP手册:

$text = "This is the Euro symbol '€'.";

echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

如果不这样做,请查看这些

作为替代方案,请在数组中定义字符映射,然后使用str_replacemb_substitute_character进行转换。

答案 3 :(得分:1)

在PHP5.3中,Intl引入了一个音译器类,它是ICU的包装器。以下库具有完整的ISO规则集:

http://www.php.net/manual/en/transliterator.transliterate.php

答案 4 :(得分:0)

我最终在Django项目中编写了一个基于URLify.js的PHP库,因为我发现iconv()太不完整了。你可以在这里找到它:

https://github.com/jbroadway/urlify

处理拉丁字符以及希腊语,土耳其语,俄语,乌克兰语,捷克语,波兰语和拉脱维亚语。