yTranslit - генерация алиасов через Яндекс.Переводы

Изобрел очередное колесо - а именно замену старому доброму компоненту translit.

Все тоже самое, только yTranslit работает через запросы к Api Яндекса, и мы получаем красивые дружественные урлы. Например:

pagetitle: Обратная связь
alias: feedback-contact
//
pagetitle: Спортивный кружок
alias: sports-circle
//
pagetitle: Главная страница сайта текстильного завода
alias: the-main-page-site-textile-mill

Не знаю, как вам, а лично мне очень надоели кривые транслитирированные имена у страниц сайта. Так, по моему, будет гораздо лучше.

Компонент пытается работать через **CURL**, с таймаутом в 1 секунду. Если библиотека не установлена на сервере - обычный **file\_get\_contents**, который может привести к висяку при отсутствии связи с Яндексом. Если при получении будет ошибка - она запишется в системный журнал и вы получите непереведенный алиас.

Также обратите внимания, что Яндекс накладывает некоторые ограничения на запросы. Хотя, 10 000 запросов и\или 1 000 000 символов за сутки, думаю, хватит всем для работы с ресурсами.

Настройка ровно одна: friendly_alias_ytranslit_url, в которой вы можете поправить направление перевода. По умолчанию это ru-en. Не забываем также написать что-нибудь и в настройке friendly_alias_translit, например russian.

Если хотите временно вернуться к обычному translit - поправьте 2 параметра в системе: friendly_alias_translit_class и friendly_alias_translit_class_path. Нужно просто убрать букву y.

Пакет можно качать из репозитория Simple Dream. Исходный код на Github.

← Предыдущая заметка
Форкнул BannerX под именем BannerY, 1.0.0
Комментарии (34)
ArtdevueValentin Rasulov
18.09.2012 18:58

отличное расширение! Я на данный момент пользуюсь плагином через google translate, отключал в настройках сайта automatic_alias и плагином проверял поле alias, если пустое — плагин заполнял.

inetloverАлександр Наумов
19.09.2012 21:30

Почему-то мне кажется, что на запрос «Текстильны завод» поисковик посчитает URL tekstilnyj-zavod более релевантным, чем textile-mill. Потому что в Рунете не принято называть завод mill-om.

bezumkinВасилий Наумкин
19.09.2012 21:44

Шагу не ступить без мысли «а как там поисковики?»

Меня греет надежда, что они все таки смотрят в контент, а не на url. Иначе посты Хабра вообще бы не индексировались — там все урлы ниочемными циферками.

Николай
24.09.2012 08:24

Василий к сожалению реалии таковы, что магазинам торгующим в рф приходится под яндекс подстраиваться — а это кривой транслит вместо красивого перевода)). ytranslit замечательно пойдет для сайтов ориентированных не на ру нет.

bezumkinВасилий Наумкин
24.09.2012 08:25

Да не вопрос — каждый сам выберет, что ему лучше.

Николай
24.09.2012 08:50

Так и я о чем)))

Николай
24.09.2012 08:27

Александр не все сайты торгуют, не всем нужна релевантность в ру нете есть, еще европа, где наш транслит выглядит тарабарщиной.

419be87b78568da17d7cd81f5f211cb3Дмитрий Черный
24.09.2012 11:32

© 1981 Билл Гейтс: «640КБ должно быть достаточно для каждого»

© 2012 Василий Наумкин: «10 000 запросов за сутки, думаю, хватит всем для работы с ресурсами»

Что же будет, когда эти 10000 запросов будут исчерпаны? Алиас не будет генериться, или же будет простой транслит? Например необходимо обновлять каталог раз в неделю, а там около 100к позиций.

bezumkinВасилий Наумкин
24.09.2012 11:37

Алиас генерируется один раз, когда он пуст. Если он у ресурса уже есть — запроса не будет.

Если вводить алиас вручную, или задавать при обновлении — запроса тоже не будет. Ну и в последней версии добавился параметр, который позволяет указать регулярку, чтобы подходящие под нее pagetitle не слались на Яндекс для перевода.

В конце концов, при любой ошибке алиас будет русский, как pagetitle и вы легко найдете эти ошибочные алиасы простым скриптом.

SadykhSadykh Sadykhov
02.10.2012 10:31

Минус: если в базе нету нужного слова (а это может быть что угодно — сокращение, аббревиатура и прочее), то возвращается тот же результат. Это косяк Яндекса конечно, но думаю стоит в компоненте сделать проверку, не то ли значение вернулось от Яндекса. Например, «Трололо». Он не переведёт.

bezumkinВасилий Наумкин
02.10.2012 11:10

Надо самому назначать alias для таких слов.

Denys Butenko
04.01.2013 22:23

Столкнулся с такой же проблемой. Слово есть, а перевода у Яндекса нет. Предлагаю делать warning в журнал ошибок для URL часть которых не корректно перевелись. Проверку осуществлять regexp на наличие русских символов в alias'е который вернул Яндекс.

Aleksey Nikitin
03.07.2013 08:44

Кстати, не хотите поправить эту штуку на новый API яндекс переводов? Гляньте: http://translate.yandex.net/api/v1/tr.json/translate?lang=ru-en&text=

bezumkinВасилий Наумкин
03.07.2013 11:28

Пока нет времени, убрал пакет из репозиториев.

evdЕвгений Дурягин
03.07.2013 13:29

Там в API практически ничего не поменялось, добавили только обязательный ключ и перешли на протокол HTTPS. Можно и в текущей версии в настройках поменять параметр friendly_alias_ytranslit_url с

http://translate.yandex.net/api/v1.0/tr.json/translate?lang=ru-en&text=

на

https://translate.yandex.net/api/v1.5/tr.json/translate?key=_КЛЮЧ_&lang=ru-en&text=

Ключ получать здесь http://api.yandex.ru/key/form.xml?service=trnsl

Lara Rabdan
04.07.2013 00:56
evdЕвгений Дурягин
04.07.2013 06:02

Да, в параметре friendly_alias_ytranslit_url URL должен быть обязательно начинаться с https

evdЕвгений Дурягин
04.07.2013 06:18

Хотя https и есть, из-за автозамены url сразу не заметил. Сама ссылка работает. CURL установлен? Попробуйте после этой строчки https://github.com/bezumkin/yTranslit/blob/master/core/components/ytranslit/model/modx/ytranslit/modtransliterate.class.php#L53 добавить еще и


curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Lara Rabdan
04.07.2013 06:26

Сама ссылка рабочая curl установлен не понимаю почему возвращается пустой результат

if (function_exists('curl_init')) {
            $timeout = $this->modx->getOption('friendly_alias_ytranslit_timeout', '', 1);
            $ch = curl_init();  
            curl_setopt($ch, CURLOPT_URL, $request);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, $timeout);
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
            $result = curl_exec($ch);
        }
        else {
            $result = file_get_contents($request);
        }
evdЕвгений Дурягин
04.07.2013 06:32

Ну поставьте тогда временно сразу после curl_exec


echo curl_error($ch);
die();

Может детально ошибку опишет

Lara Rabdan
04.07.2013 07:54

странно на денвере не работает. на реальном хостинге все норм. в чем проблемма?

evdЕвгений Дурягин
04.07.2013 11:00

1. Проблемы с сертификатом 2. Не подгружаются библиотеки openssl 3. curl для Denwer скомпилен без поддержки openssl, если такое возможно Это первое что пришло в голову. Думаю curl_error($ch) выдало бы информацию в чем проблема.

Денис Гром
09.07.2013 20:37

а что случилось с ytranslit, нельзя скачать в репозитарии MODX?

mvoevodskiyВоеводский Михаил
09.07.2013 20:44

Читай комменты выше.

bezumkinВасилий Наумкин
22.08.2013 05:53

Обновлённый yTranslit вернулся в репозиторий.

Николай
07.09.2013 23:27

Нашелся баг, modx 2.2.9 При попытки изменить Таймаут в секундах (у меня сервер в нидерландах, там 1 мало) у нас не дает изменить значение 1, кидает ошибки

Uncaught TypeError: undefined is not a function ext-all.js:21

bezumkinВасилий Наумкин
08.09.2013 03:05

Удали эту настройку и обновись на новую версию - починится.

Николай
08.09.2013 09:01

Все отлично работает, спасибо!

Алексей
10.09.2013 12:50

Установил из репозитория yTranslit Саппор хостинга уверяет что Curl скомпилирован с openssl, что подтверждается phpinfo()


curl
cURL support	enabled
SSL Version	OpenSSL/1.0.1e

но в логах при сохранении документа выводит:

 [2013-09-10 18:30:02] (ERROR @ /connectors/resource/index.php) [yTranslit] Service unavailable.
Request: https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20130910T111907Z.2d4d92d65aa7e5db.a79c8a8d69563720779d2db2c88aa0a73eaaa342&lang=ru-en&text=%D0%9A%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D1%8B. Response:

как продиагностировать ошибку, от чего такое получается ?

bezumkinВасилий Наумкин
10.09.2013 17:27

Попробуй увеличить таймаут запроса.

Алексей
10.09.2013 19:16

curl_error($ch) пишет в лог: SSL certificate problem: unable to get local issuer certificate Для отключения проверки сертификата в файле core/components/ytranslit/model/modx/ytranslit/modtransliterate.class.php сразу после:

$ch = curl_init();

добавить:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
bezumkinВасилий Наумкин
11.09.2013 01:34

Понял, постараюсь обновить компонент.

Илья Строганов
28.03.2014 20:28

Не работает, прошу помощи! modx 2.2.6 Denver Ключ от Яндекса получен cURL support enabled SSL Version OpenSSL/1.0.1c

translit - работает, а ytranslit - нет. Оставляет кириллицу как есть :( Где копать?

Пробовал на хостинге на modx 2.2.13 Там SSL Version NSS/3.12.4.5 Но translit там не стоит (он нужен для ytranslit?) В общем, тоже не работает.

Что я не сделал?

Чикин Артур
29.03.2014 09:31

Непонятно то что ты сделал, так что говорить что еще не сделал совсем не ясно. Перечитай внимательно статью, вдумчиво и вспомни и проверь что сделал и не сделал.

bezumkin
Василий Наумкин
30.06.2022 03:58
Есть ли возможность формировать "friendly URL aliases", используя аналог translit MODx? ...
bezumkin
Василий Наумкин
27.06.2022 03:32
Спасибо за исправления, очень выручаешь =) Но учитывая количество не описаных в заметке дополнительн...
bezumkin
Василий Наумкин
27.06.2022 03:10
что будет использоваться для вывода многоуровневого меню Посмотри как работают комментарии на этом ...
bezumkin
Василий Наумкин
25.06.2022 11:56
Поправил, спасибо!
bezumkin
Василий Наумкин
22.06.2022 10:08
Я обычно не пользуюсь RTE редакторами, потому что они пишут всякое непонятное что в HTML. Но можно в...
bezumkin
Василий Наумкин
21.06.2022 01:58
onLoad(data) { this.total = data.total }, и onLoad({total}) { this.total = total }, В нашем случ...
bezumkin
Василий Наумкин
20.06.2022 14:01
Прекрасно тебя понимаю, я когда сам в этом разбирался - голова дымилась. Но зато теперь прямо-таки п...
bezumkin
Василий Наумкин
20.06.2022 09:30
Не надо, оно по умолчанию так - я просто чуть более подробно написал.
bezumkin
Василий Наумкин
19.06.2022 13:42
А можно же из 1 файла сделать 2 экспорта. По-умолчанию, и отдельно для футера: export const Footer =...
bezumkin
Василий Наумкин
19.06.2022 09:44
Тебе спасибо, что поддерживаешь рублём мои начинания!