У Google есть AJAX API транслитерации, который хорошо справляется с многими основными скриптами.
Edit: Черт, при дальнейшем рассмотрении оказывается, что это позволяет конвертировать только из латинского алфавита. Глупо, что Google не сделал обратную функциональность доступной, поскольку они уже используют ее в Google Translate для обеспечения латинизации кириллицы, китайского, тайского, хинди и других языков, хотя, конечно, не абугида, таких как иврит и арабский.
Дальнейшее редактирование: Я подумал о возможном обходном пути: определить язык и использовать AJAX-запрос для запуска его через Google Translate, используя тот же исходный язык, что и язык назначения, например китайский-китайский. Firebug показывает, что транслитерация выводится в div
, ID которого translit
. Транслитерации обычно имеют сильное ударение, поэтому их необходимо преобразовать. На это ни в коем случае нельзя полагаться (хотя Google обычно не вносит частых структурных изменений в свой HTML), но это, безусловно, интересная возможность.
Я не лингвист, далеко не так, но я предполагаю, что то, что вы пытаетесь сделать невозможно, или чрезвычайно сложно реализовать.
В конце концов, перевод имен - это больше, чем просто «преобразование алфавитов». В русском это сравнительно легко, потому что у каждого символа кириллицы есть латинский аналог (это сестринские алфавиты ).
Я не знаю арабского языка, но для китайского вам понадобится система латинизации, такая как Пиньинь , чтобы добраться куда угодно. Это сложнее, чем простая замена символов.
Вот полный список ISO-романизаций - Если я правильно понимаю, решение, которое работает для вас, должно реализовывать эти правила.
Итак, задача будет следующая:
Проанализировать текст, содержащий множество различных диапазонов символов
Определить каждое слово, к какому диапазону символов оно принадлежит (อักษร ไทย - тайский язык; Москва - кириллица; и т. Д.)
Применяйте правильный метод латинизации к каждому слову.
Теперь мне очень интересно узнать о каких-либо библиотеках, которые могут делать это в PHP, но вполне возможно, что их нет.
Будет ли 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_replace
или mb_substitute_character
, чтобы выполнить преобразование.