Есть ли какая-нибудь бесплатная транслитная библиотека PHP с открытым исходным кодом?

поэтому у меня много пользователей, публикующих статьи с именами на разных языках. Мне нужна какая-то библиотека для перевода названий статей в английские буквы, например, превратить русскую «р» в eng «r» и так далее для всех европейских, русских и азиатских языков. Где взять такую ​​либу?

45 секунд поиска в Google выдали мне это "Это расширение позволяет транслитерировать текст нелатинскими символами (например, китайскими , кириллица, греческий и т. д.) в латинские символы." Кажется, это то, что мне действительно нужно. Кто-нибудь пробовал это в реальной жизни?


person Rella    schedule 20.03.2010    source источник
comment
Почему вы хотите это сделать. Наверняка после этого текст станет бессмысленным или, по крайней мере, менее значимым?   -  person PurplePilot    schedule 20.03.2010
comment
Аналогичный вопрос: stackoverflow.com/questions/1284535/php-transliteration   -  person Gordon    schedule 20.03.2010
comment
@PurplePilot С именами на разных языках ... ИМО, законное использование, хотя я не уверен, всегда ли результаты будут работать - насколько я знаю, многие англификации русских имен пишутся иначе, чем русские оригиналы.   -  person Pekka    schedule 20.03.2010
comment
Вот реальный пример проблемы с этим: 倖田 來未 (Куми Кода) — известная японская певица. Однако последние два символа ее имени можно прочитать и как Куми, и как Куруми — и оба они женские имена, так что вы не сможете точно определить это, просто взглянув на символы. Если вы хотите удостовериться, вам придется либо заметить, что дано имя Куми Кода, и использовать тот факт, что это имя известного художника, либо вам придется спросить ее — и если вы не Убедись, есть шанс, что ей не понравится, что ее вдруг назовут Куруми.   -  person Michael Madsen    schedule 20.03.2010


Ответы (5)


У Google есть API транслитерации AJAX, который хорошо справляется с множество основных скриптов.

Редактировать: Черт, при дальнейшем рассмотрении выясняется, что это позволяет конвертировать только из латинского алфавита. Довольно глупо, что Google не сделал доступной обратную функцию, поскольку они уже используют ее в Google Translate для обеспечения латинизации кириллицы, китайского, тайского, хинди и других языков, хотя, в частности, не abugidas, таких как иврит и арабский язык.

Дальнейшее редактирование: я подумал о возможном обходном пути: определить язык и использовать запрос AJAX, чтобы запустить его через Google Translate, используя тот же исходный язык, что и язык назначения, например. Перевод с китайского на китайский. Firebug показывает, что транслитерация выводится в виде div с идентификатором translit. Транслитерации обычно имеют сильный акцент, поэтому вам нужно будет их преобразовать. На это ни в коем случае нельзя полагаться (хотя Google обычно не вносит частых структурных изменений в свой HTML), но это, безусловно, интересная возможность.

person Jon Purdy    schedule 20.03.2010
comment
Тем не менее большой +1 за указание на это! - person Pekka; 20.03.2010
comment
+1 и есть еще 1 способ - это то, что они называют латинизацией, и это составление читаемых и легко транслитерируемых латинских букв. - person Rella; 20.03.2010
comment
comment
@Ole Jak: романизация - это просто транслитерация на латиницу. И это лучшая ссылка, хотя вы все равно заметите внизу, что английский, к сожалению, отсутствует в списке допустимых языков назначения. - person Jon Purdy; 21.03.2010

Я далеко не лингвист, но я полагаю, что то, что вы пытаетесь сделать, невозможно или чрезвычайно сложно реализовать.

В конце концов, перевод имен — это больше, чем просто «преобразование алфавитов». В русском языке это сравнительно легко, потому что у каждого кириллического символа есть латинский аналог (это родственные алфавиты). ).

Я не знаю насчет арабского языка, но для китайского вам понадобится система латинизации, такая как Pinyin. добраться куда угодно. Это сложнее, чем простая замена символов.

Вот полный список латинизации ISO. Если я правильно понимаю, решение, которое работает для вас, должны выполнять эти правила.

Итак, задача будет:

  • Проанализируйте текст, содержащий множество различных диапазонов символов

  • Определите каждое слово, к какому диапазону символов оно принадлежит (อักษรไทย — тайский, Москва — кириллица и т. д.)

  • Примените правильный метод латинизации к каждому слову.

Теперь мне очень интересно узнать о каких-либо библиотеках, которые могут сделать это в PHP, но вполне возможно, что их нет.

person Pekka    schedule 20.03.2010
comment
@Pekka Как я понял OP, если есть Åå, он хочет, чтобы это был Aa. Это то, что делает iconv, если у него есть сопоставление. Он находит самое близкое приближение, ни больше, ни меньше. Так что либо Москва превратится в Mockba, либо в Москву. Как я уже сказал, я не уверен (поэтому я представил ответ как вопрос), но даже если это не так, он все равно может использовать собственный подход к сопоставлению или попробовать любую из других библиотек, таких как Recode или MB_ * - person Gordon; 20.03.2010
comment
@ Гордон Я уверен, что это можно заставить работать на русском языке. Но он хочет all european languages, russian and asian languages, последнее будет очень жестким. - person Pekka; 20.03.2010
comment
@Gordon: Проблема в основном с такими языками, как китайский и японский. Японский можно использовать, если у вас есть кана (кандзи можно читать по-разному, в зависимости от контекста), но в китайском языке используются только символы ханьцзы. Насколько мне известно, в китайском нет единого произношения для каждого символа ханьцзы. Также существует проблема с такими языками, как иврит и арабский, поскольку гласные не обязательно присутствуют, но подразумеваются. Вы можете механически транслитерировать то, что есть, но результат может оказаться бесполезным. - person Michael Madsen; 20.03.2010
comment
Могут быть и другие языки с похожими проблемами, но я не могу вспомнить ни одного. - person Michael Madsen; 20.03.2010
comment
@Michael: Правильно, ты о японском языке; большинство китайских иероглифов имеют только одно произношение, а для тех, у которых есть несколько, альтернативы обычно встречаются только в определенных словах и фразах, поэтому ситуация гораздо менее экстремальна, чем в японском языке. Иврит и арабский язык представляют огромную проблему для транслитерации, потому что гласные полностью зависят от грамматического строя предложения. Подумайте об очевидном (для человека) различии между see и see в английском предложении I see его вчера, а затем представьте его как 's hmystrd. - person Jon Purdy; 20.03.2010

Подойдет ли 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 для преобразования.

person Gordon    schedule 20.03.2010
comment
Действительно ли iconv превратит Москва в Moskva? Вау, если получится. Не могу сейчас попробовать... - person Pekka; 20.03.2010
comment
@Пекка понятия не имею. Я не слишком часто использовал iconv, не говоря уже о русских наборах символов, но в основном да, это то, что он должен уметь делать. - person Gordon; 20.03.2010
comment
у меня не работает, просто сбрасывает кириллицу. Я думаю, что это более сложно, см. мой ответ. - person Pekka; 20.03.2010

В PHP5.3 Intl представляет класс транслитератора, который представляет собой оболочку ICU. Следующая библиотека содержит полный набор правил ISO:

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

person Denis de Bernardy    schedule 04.06.2011
comment
Функции транслитератора включены только в PHP 5.4 и выше. - person Koen.; 11.04.2014
comment
@Koen: я думаю, что Symfony поддерживает версию, совместимую с PHP 5.3. См. github.com/symfony/Icu и symfony.com/doc/current/components/intl.html - person Denis de Bernardy; 12.04.2014

В итоге я написал PHP-библиотеку на основе URLify.js из проекта Django, так как нашел iconv() слишком неполным. Вы можете найти это здесь:

https://github.com/jbroadway/urlify

Обрабатывает латинские символы, а также греческий, турецкий, русский, украинский, чешский, польский и латышский языки.

person Johnny Broadway    schedule 01.05.2012