модуль
April 28, 2023

Модуль топ 5 переводчиков (free)

Скрин модуля

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

Шучу, у меня об этом блять и канал, о проблемах и их решениях. Похуярили!

И так, не мудрствуя лукаво, я открыл гугел и вбил "top online translators".

Выбрал те 5, которые показались мне наиболее интересными (те про которые я хоть что-то слышал).

1. Google

Сайт переводчика

Начнем с очевидного.

Сасает: https://translate.google.com/

Языков: 134

Сайт с переводчиком

Как обычно, открыл дев тулзу, совершил целевое действие, чекнул запрос

Пока запрос выглядит не очень приятно
В ответ на запрос тоже какие-то страшные вещи

Раз тут ничего непонятно..

На самом деле, потом я нашел как работает этот кек (хотя это и так было очевидно), оно оно мне уже было не нужно

Работа "защиты"

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

Реверс версии из веб архива

ссыл очка:

https://web.archive.org/web/20190201002656/https://translate.google.com/#view=home&op=translate&sl=auto&tl=en&text=%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Наверное, кто-то может подумать

Да, можно, почему бы и нет. Периодически так делаю, например нашел так валидное рест апи для авториза в яндекс акк. С бинансом так тоже делал, об этом расскажу как нибудь потом.

Ну штош, потыкаем архивную версию:

Первое и единственное не очевидное в запросе - параметр tk.

На самом деле, так как я ранее уже под нее делал, знаю что tk эт подпись и генерится она просто на основе фул текста без пробелов.

Чекаем параметры запроса в читаемом виде
Чекаем стек вызовов, сразу тыкая в нужную строку. Нужная, тк я заведомо все протыкал и заскринил то шо валидное для статьи.

Ставим брек и видим, что из этой функции улетает наш запрос, поэтому начинаем идти по стеку в функцию Jo, которая судя по всему должна вернуть наш tk, тк на вход принимает наш текст.

В поисках tk

Тут видим, что из всей многоэтажной поеботы нам нужен был только наш текст из массива в переменной q, который сливается в 1 строку и дальше передается в Ho

Бля, где ж уже подпись

Ну а вот и подпись, всего пару строк для шифрования текста (в виде строки) с использованием переменной b

Мега шифрование

Чекаем че за b и находим, что это дефолт значение.

Параметр ttk для шифрования

Ну тут все логично, есть пару строк шифрования и строка, на выходе контрольная сумма от текста.

Фул работа шифования

Я просто перенес код в бас, чутка его поправив.

Изи перенос шифрования, завелось с первого раза

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

Кто-то может подумать, что я выебываюсь. Да, я выебываюсь, но перед собой. Спешить мне некуда, статью я мог вообще не публиковать, так шо чисто сам перед своим отражением (собой в прошлом), как в зеркале выебываюсь.
Фиксируем информацию

Встроенный переводчик

Попробуем еще один способ, заснифаем встроенный переводчик.

Переводчик встроен по дефолту по всех относительно новых версиях хрома

Накидал простой сайт, чтоб было удобнее тестить без лишних запросов (взял шаб туть)

Не, ну это база. Просто Html страничка.

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

Все как и раньше

В этот раз я обратил внимание, что само апи и настройки гугл получает подгрузив сторонний файл

Запрос апишки по ключу
Подчеркнул сам ключ
Иное стартовое значение для генерации подписи

Стартовое значение для контрольной суммы тут другое, но сути это не меняет. Кароче, та же самая хуйня..

Попробуем выполнить перевод.

Запрос такой же, только client другой. Разные ttk, для разных client

В запросах есть еще ключ key, но самом деле он вообще не нужен, без него запросы улетают

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

Кароче, работает все довольно просто) И в бас тоже.

Чекаем какой введен язык из доступного списка
Подготовка запроса, про нарезку ниже, а вот это лучше в коде модуля почекать. Дело в том, что с нарезкой текста было кучу приколов и я пытался добавить угадывание любого пользовательского ввода, будь то текст или массив и в итоге получилось кучу говнокода.
Запрос на перевод
Парсинг ответа

Гуглительная пауза

Чет я потыкал код, увидел этот апи ключ, но просто посмотреть мне показалось мало.

Ключ по которому запрашивает файл с апи перевода

Забил в поиск на гит хабе (о другом хабе в конце статьи есть дополнение)

Выдало либу и инструкцию по использованию апи для распознавания речи

https://github.com/onionc/py-snippet/wiki/Python%E7%AE%80%E5%8D%95%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E5%B9%B6%E5%93%8D%E5%BA%94

Кароч, для получения рест апи распознавания речи кто-то уже ковырял гугл

https://pypi.org/project/SpeechRecognition/

Либа распознования речи с юзом иных либ и апи

Сам запрос к гуглу был в сурсах либы.

https://github.com/Uberi/speech_recognition/blob/master/speech_recognition/__init__.py

Запрос на распознование речи. По теме asr я тоже как нибудь напишу

На самом деле, я нашел и запрос для перевода, и синтеза речи в гугле, без всяких подписей.

https://translate.google.com/translate_tts?ie=UTF-8&tl=ru-Ru&client=tw-ob&q=%D1%85%D1%83%D0%B9

Озвучка

https://translate.google.com/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=auto&q=test&tl=ru-RU

Перевод без хуйни. На самом деле, так можно и просто язык чекать.

Перерыв окончен

Начнем с простого

Пока вроде все ясненько, поэтому начнем с простого, как я тогда думал, с нарезки текста.

Почекаем стек вызовов отправленного запросека перевода

Пока ничего страшного

Акей, это функция подписи текста, с ней я уже несколько раз виделся.

Знакомая штука

Топаем назад, видим отправку текста на подпись. Судя по всему, тут происходит какая-то магия предобработки текста в массив.

Я хз, на самом деле, че тут делается

Ииииии... дальше я 2 дня ковырял код и нихера не мог понять и найти, как же он режет текст. Звучит как шутка, но это не шутка, это моя жызень.

Здорово, классно, замечательно

Я мог бы написать, какой я дохуя молодец и сразу тыкал везде где нужно, но это был бы пиздеж, тк я тупой и просто 2 дня чекал код, пытался понять че происходит с массивами в 5 этажей вложенности, тупо перебирая выполнение кода по 1 строчке.

Примено так это выглядело со стороны (Фильм "Идеократия")

Потом я решил начать с того же места (там где предобработка текста) и пройтись назад по стеку вызовов.

Да, ебать нихуясибе, мне тоже тут ничего непонятно, в прочем, ничего необычного
А тут уже что-то понятно, по крайней мере, тут уже есть текст искомый и видно, что он нарезан на куски

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

Кусок функции нарезки текста
Нужно присмотреться внимательно, подумать, и возможно станет лучше понятно что тут происходит. Ну или не станет.

Как не трудно догадаться (ну все же очевидно), f это отрезанный текст, d фулл + всякие флаги, которые контролят процесс, чтоб резало по буквам, пробелам и тд, там где надо, позже я все читаемо переименовал.

Тут уже становится понятно че оно делает. Оно чекает длинну текста, итерирует цикл и кормит текст другой функции, та отрезает куски и потом они собираются в массив, когда отрезало указывается айди и пару флагов.
Собственно, вот так я переписал

А сама мэджик нарезочка воть. И тут я такой: ебать, это шо за хуйня, это какие-то странные палочки, тернарники, как это блять вообще можно нахуй понять.

Нарез очка

Сначала я был сильно обескуражен, но потом сел, успокоился и начал делать все последовательно.

И так. Юзает оно вот такие правила. Возможно, не сразу очевидно, но это знаки препинания и мусор, который может быть среди них.

Знаки препинания и не знаки препинания.
Да, все так просто

Чекаем шо тут за символы шифрованые.

Кароче, все не так страшно
Добавляю себе в код

Захожу я такой в гугл и заседаю часов на 6, чтоб понять как убрать тернарники со всех этих лесенок ебучих и привести все это говно в читаемый вид с комментариями

Фиксим тернарники и чекаем че за граничные символы

Это строка 7391 в читаемом виде, 1 малюсенькая строка, карл

Кароч, границы это по сути там где не буквы в юникоде, учитывая его огромный размер и некоторые странные приколы (хотя приколов в юникоде прям дохуя), как например в случае с буквой ё (статья1, статья2).

А вот довольно интересная статья про невидимый исполняемый код на js, статью на хабре почему-то удалили, зато есть кэшированная версия

https://webcache.googleusercontent.com/search?q=cache:5FTSfwOziRkJ:https://habr.com/ru/articles/334980/&cd=10&hl=en&ct=clnk&gl=ru

Скрин кека из статьи с хабра

Пример граничного символа https://www.fileformat.info/info/unicode/char/55296/index.htm

0-127 в utf-8 эт символы из аски. На самом деле, если почекать где какие символы, сразу становится ясно нахуя их фильтровать и как по сути работает фильтр.

Типо чутка юникода https://design215.com/toolbox/ascii-utf8.php

Вот такие всякие приколы - это обычные логические операторы, но используются для сокращенного вычисления

Но код потом конечно хуй прочитаешь..

Про них написано туть https://learn.javascript.ru/logical-operators

Магия (ебучих) сокращенных вычислений

Ну и про тернарник тоже есть инфа https://learn.javascript.ru/ifelse

Пример юза тернарника с несколькими условиями

На основе этих приколов я переписал фул код в читаемый для меня вид.

Надеюсь, я его не сломал..

Читаемый (по моему личному мнению, основанному на истине в первой инстанции) код

Как закончил нарезку, решил потестить перевод. Подумал, а че б не пощупать лимиты хрома.

600к символов он не вывез, а чуть более 400к вывез, поэтому лимит где-то пол ляма. Нинаю, на сколько качественно он это все переведет, но впечатляет. Лимит пост запроса по идее 60кк, так что явно лимит хрома, ну либо бас курлы.

Войну и мир за раз он не захавает, но за два наверное уже справится

Кароч, эксперимент очевидно удачный, идем дальше.

При желании ведь можно ебануть в пару десятков тысяч потоков. Только нахуя..

2. Байду

Решил не обделять вниманием братьев китайцев и чекнуть в том числе и их переводчик.

Сайт: https://fanyi.baidu.com/

Языков: 29

Сайт с переводчиком
Урл запроса

В заголовке уже какая-то блядская подпись-заголовок Acs и кукисы, одна из которых тоже подпись - ab_sr.

Заголовки запроса

Кек, sign как и у гугла подпись

Параметры запроса
Ответ на запрос

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

Разве что.. чуть-чуть. Начнем зачек с куки-подписи.

Урла и кукисы в ответе
Параметры запроса
Ответ на запрос

Кароч, в запросе шифрованая хуйня и в ответе шифрованая хуйня. Та что в запросе - подписанный фингер.

Брек до генерации подписи
Брек после генерации подписи
Ну и параметр token в запросе
Уже не хочется выебываться (я усталь)

Ну и ладно, поэтому я взял оф апи из гит

Дока апишки https://api.fanyi.baidu.com/product/141

Оф апиш очка

Кроче, тут не шибко красиво, но как-то получилось.

Чекаем какой введен язык из доступного списка
Берем входные настройки и текст
Фул ворк перевода
Генерация хэша от ключа
Запрос на первод
Парсинг ответа

3.1. Яндекс/Yadex (rest)

Сайт: https://translate.yandex.ru/

Языков: 99

Сайт с переводчиком
Урла запроса
Параметры запроса
Ответ на запрос
Айди запроса она же тут в качестве "подписи"
Прячется в коде страницы, в ответ на первый запрос
Кукисы которые есть в запросе, но по факту они не нужны

С яндексом все прям банально.

Парс доп данных для перевода
Чекаем какой введен язык из доступного списка
Фул определение языка
Запрос на детект языка
Подготовка входных данных и текста
Фул ворк перевода
Запрос на перевод
Парс перевода

3.2. Яндекс/Yadex(api)

Дока: https://yandex.com/dev/translate/doc/dg/reference/getLangs.html

Языков: 99

Ну апи это апи

Подставим ключ апи и почекаем список доступных для перевода гео.

Список направлений и расшифровка языков

Падажи, в смысли, а где ты..

Воть:

Дохуя хацкер

Кароч, с апи все слишком просто. Список языков по идее тот же.

Подготовка входных данных и текста
Фул ворк перевода
Запрос перевода
Парс перевода

4. Deepl

Сайт: https://www.deepl.com/ru/translator

Языков: 28

Нихуясабе, это я удачно зашел

Линка на расширение: https://chrome.google.com/webstore/detail/cofdbpoegempjloogbagkncekinflcnj

Отрывок из романа "Война и мир"

Чекаем расширение как страницу сайта

Раскрытие расширы

Снифаем запросеки, как с обычным сайтом

Урл запроса
Заголовки запроса

Айди рандом, предопределение языка я не передаю, чет тыкал код часа 3, так и не нашел как оно его делает, а таймштамп как обычно.

Параметры запроса
Ответ на запрос

Кароче, тоже очень просто.

Чекаем какой введен язык из доступного списка
Подготовка входных данных и текста
Фул запрос перевода
Запрос перевода
Парс перевода

5. Bing

Сайт: https://www.bing.com/translator

Языков: 111

Сайт с переводчиком

Тут все тоже банально и максимально просто

Урл запроса
Параметры запроса

Далее ноу коментс, все очевидно

Дергаем IG
Дергаем остальные
Парс доп данных для перевода
Чекаем какой введен язык из доступного списка
Подготовка входных данных и текста
Фул запрос перевода
Парс токенов для перевода
Запрос перевода
Парс перевода

Пример использования

Уникализатор текста используя переводчик

Флома проги для вбива данных
Json в качестве последовательности цепочки обработки текста
Лог перевода. Сайт уникализатора сдох, я его выключил.
Результат перевода

Фичи

Чек заголовков отправляемого запроса

Если нужно чекнуть заголовки без использования снифера, можно отправить запрос сюда (пару раз пригождалось).

https://httpbin.org/anything

Анимированная гифка

Нашел просто гифку в гугле

Гугление

Удалил фон с гифки https://onlinegiftools.com/remove-gif-background

Уменьшил размер до 32 на 32 https://www.iloveimg.com/ru/resize-image/resize-gif#resize-options,pixels

Гифка

Потом добавил просто картинкой, для тех кто не любит гифки (привет фоксу)

Не гифка

Бага

Еще, пока делал, словил странную багу (но для бас видимо это фича). Когда переменная объявлена через var, а следом идет запрос, переменная var теряет контекст нахуй. Довольно странно, учитывая что она в рамках одной функции. Поэтому, в ряде мест, оставил как обычно бас по дефолту их ставит (без var).

Итог:

Оказывается, сложное делать сложно. Особенно, если ты тупой=/

Кто-то спросит: Почему ты продолжаешь делать это с нами? Ведь, на гитхабе есть готовые отснифаные апи, даже целые либы, есть функции нарезки текста.

Я отвечу: Не знаю морти, может я просто ненавижу себя.. или мне просто нехуй делать

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

В качестве домашнего задания, тем кто прочитал, - сделать регер Гугла на запросах.

Полезные ссылки:

Форматирование кода онлаен - https://beautifier.io/

Форматирование json онлаен - https://jsonformatter.org/

Декод uri - https://meyerweb.com/eric/tools/dencoder/

Расширение с набором апи перевода - https://github.com/archlinuxcn/wiki-scripts/blob/fd06daa8c961e4268aa611086f808a471234393e/WikiTranslate.user.js

Скрипт под рест дипла - https://github.com/xyqfer/deepl-web-api/blob/4bdbfb7915bdbc6f76e498d5e8501e991289a866/index.js

Набор рест апи переводчиков - https://github.com/fishjar/smart-translator/blob/861b1a3859eb657518d6c768dfb620f67bbd15ef/src/api/index.js

Переводчики с подписями - https://github.com/hujingshuang/MTrans/tree/e7efa476bf0a20735cd9d916d0171daf5d511d26/src/main/java/com/swjtu/trans/impl

Дополнение (Бонус)

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

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

Да, все верно, наконец то я смогу насладиться прекрасными диалогами на русском языке.

Однако, на пути встретилось несколько проблем:

1) Прочек я начал с xvideos, на котором, к большому сожалению расшира не работала.

Подходящее видео с аудио (диалогами) хуй найдешь чтоб перевело, так еще и я нажимал перевести, кнопка перевода включалась, но при запуске видео оно не переводило. Кароче, видимо беды с плеером.

Не ворк

2) Я пошел чекать пх. Впервые вижу этот сайт (с пк), вообще никогда раньше о нем не слышал, поэтому меня смутила вот такая хуета на главной.

Оказалось, это байт на классы и она элементарно убирается через код элемента.

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

Код текстом.

// ==UserScript== // @name BONEFISH: PH FIX+ // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match https://rt.pornhub.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=pornhub.com // @grant none // ==/UserScript==

(function() { 'use strict'; document.getElementById('age-verification-container').style.display = 'none'; document.getElementById('age-verification-wrapper').style.display = 'none'; })();

На самом деле, я мог бы и через адблок заблочить, но яж дохуя программист, поэтому юзал код (не свой, но понимаю как оно работает).

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

Оно, как обычно, начинает переводить.

А в итоге, нихуя не перевело, тк аудио не нашло. Вот я и послушал лингвистические курсы..

Вертел переводчик по всякому, и когда очевидными запросами выбирая видео нихуя не переводилось, я совсем отчаялся. Но товарищ предложил следующее решение:

Великолепный совет

И, в общем то, его идея сработало, получилось ахуенчик.

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

С другой стороны, по своему прикольно.

3) Я также попробовал ютуб, да, переводит, нареканий особых нет. После прона, даже добавить нечего, не удивительно, что на ют все работает. Кстати, доклад действительно интересный.

Если кратко, про дырки в основе стандартов работы интернета

Кароче, резюмирую:
Прикольно, но переводит не идеально и периодически наваливает кринжа, особенно в ситуациях обсуждения спец теминологии.

Простыми словами: перевод не очень, а остальное нормалек. И на прн сайтах не всегда может перевести видео, а жаль.

Важно отметить, что с переводом чет смотреть действительно на много интереснее.

Хочется сказать "учите язык" и вставить рекламу какого-нибудь сервиса англ языка, но тут жыесть софт, который все делает сам и бесплатно и нихуя учить не надо.

Ну и еще немного про нейроночки

После выхода чат гпт я обратил внимание не только на спиздинг (юз рест апи), но и в целом на то как это технически реализовано.

На хабре выходило много статей по юзу gpt как переводчика или сравнения ее с другими популярными:

Тоесть как переводчик чат гпт определенно не еблан

И че дальше?

Однако я cтарый пират, я не хочу ни за что платить, поэтому хочу бесплатно и заебись, а для этого есть:

Ориг: https://huggingface.co/facebook/nllb-200-distilled-600M

rest api:

1) https://github.com/thammegowda/nllb-serve
2) https://github.com/translatorswb/TWB-MT-fastapi

  • saiga mistral (тюнинг mistral под ру)

LoRA: https://huggingface.co/IlyaGusev/saiga_mistral_7b_lora
gguf: https://huggingface.co/IlyaGusev/saiga_mistral_7b_gguf
gguf демка: https://huggingface.co/spaces/IlyaGusev/saiga_mistral_7b_gguf

GUI для всяких LLM https://github.com/oobabooga/text-generation-webui

и еще хуева туча всякого добра...

Но все эти нейросети, гитхабы, я ебал..

Из русских опенсурс реп есть репа, где собраны рест апишки и всяких диплов и гуглов, а ответ это мердж и выбор лучшего, за счет чего качество выше чем у оных сервисов. https://github.com/janvarev/OneRingTranslator

Еще есть порты нейрогена https://t.me/neurogen_news наверное эт самый простой вариант, но эт просто при юз чат гпт, так шо..