Гладкий камень на неподвижной воде, от него расходятся круги
Программа для Windows, открытый кодОпубликован, версия 0.4.3

UTranslate

Выделил текст, нажал три клавиши, и перевод появился у курсора. Без вкладок, ключей и регистрации.

Скачать на GitHub
Три клавиши, вырезанные из камня, стоят в тонком слое воды: две светлые и одна цвета воды

Перевод во вкладке сбивает чтение

Выделил, скопировал, ушёл во вкладку, вставил, вернулся и потерял строку. Хотелось, чтобы перевод появлялся там, где читаешь, и исчезал, когда больше не нужен.

Ориентиром был QTranslate: работал в любой программе, но перестал обновляться. UTranslate повторяет его поведение на Tauri 2, Rust и React.

Было
ВыделитьСкопироватьОткрыть вкладкуВставитьВернуться
Стало
ВыделитьCtrlAltT

Попробуй прямо здесь

Выдели абзац мышью или нажми CtrlAltTНажми на абзац

A good tool disappears. You stop thinking about the translator and keep reading the page you came for.

Press the shortcut once and the answer shows up right next to your cursor, not in another tab.

If one engine fails, the next one quietly takes over, so the translation still arrives.

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

Четыре сочетания

Перевести выделенное

Пилюля появляется мгновенно, у курсора со смещением 12 × 16 px, и пружиной раскрывается в карточку. Esc закрывает без анимации.

CtrlAltT

Заменить прямо в поле

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

CtrlAltR
Плитка «Хоткеи» из настроек: четыре сочетания, у каждого отметка «Свободно»

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

Попап в роликах настоящий: тот же код программы, снятый покадрово с частотой 60 кадров в секунду. Страница и поле вокруг него собраны для съёмки.

Живой кадр: попап в светлой теме поверх страницы Википедии в Chrome
Живой кадр: попап в тёмной теме поверх страницы Википедии в Chrome

А это живые кадры со стенда: Chrome на Windows, настоящий перевод абзаца из Википедии.

Текст, который нельзя выделить

Картинка, видео, игра. Экран замирает, ты обводишь область, и перевод встаёт под ней. Если снизу места нет, то над ней, чтобы не закрывать текст.

Пустая эмалевая табличка на бетонной стене
Please keepthis door closedat all times.

Выделите область с текстомEsc отмена · Enter вся табличка

На странице настоящее только выделение, перевод записан заранее. В программе оверлей нативный, на Win32 и GDI+: текст распознаёт PP-OCRv5 на компьютере.

  • Снимок остаётся на компьютере

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

  • Почему PP-OCRv5

    Windows.Media.Ocr требует package identity, новый Windows AI работает только с NPU. Модели идут в сборке, около 60 МБ в памяти, через три минуты простоя выгружаются.

  • Оверлей «Тихий»

    Затемнение 40 %, рамка 2 px, без прицела. Движения нет, только прозрачность: вход 120 мс, выход 90 мс, Esc мгновенно.

Одна капсула на всё

Настоящие кадры интерфейса, тот же код программы. Правило из требований: действие без видимого ответа считается сломанным.

  • Попап с заглушкой из трёх строк и подписью «переводим»

    Карточка видна сразу, текст приходит в неё.

  • Словарный режим: слово quiet, перевод и значения по частям речи

    Одно или два слова: значения по частям речи.

  • Попап с песочным бейджем «Bing вместо Google»

    Первый движок молчит. Бейдж говорит, кто ответил.

  • Попап с бейджем модели Qwen3.8 27B и улучшенным переводом

    Улучшение через Groq или OpenRouter по своему ключу.

  • Открытое меню движков внутри попапа

    Другой движок для этого же текста.

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

    Оригинал раскрывается над переводом.

  • Редактор перевода в попапе с кнопками Отменить и Готово

    Перевод можно поправить до вставки.

  • Попап перевода с экрана с бейджем «с экрана» и кнопкой «Выделить заново»

    С экрана: вставлять некуда, поэтому «Выделить заново».

Окно, когда нужно больше места

Ctrl+Alt+W. История живёт на компьютере в SQLite, избранное выгружается в CSV. DWM скругляет окно максимум на 8 px, поэтому окно прозрачное, а радиус 18 и тень рисует сам интерфейс.

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

Листай снимок вбок. Окно шириной 960 px, на телефон его целиком не положить.

Один молчит, отвечает следующий

  1. GoogleПервый. Рабочий адрес translate.google.com: на translate.googleapis.com был ответ 429.
  2. BingЗапасной. Старая авторизация умерла с 404, токен теперь берётся со страницы переводчика и живёт час.
  3. MyMemoryПоследний. Без ключа 5000 символов в день.

Ответил Google

Три плоских камня цепочкой через тёмную воду
  1. Google
  2. Bing
  3. MyMemory
Настоящий попап: бейдж GoogleНастоящий попап: бейдж Bing вместо Google
Камень на мокром песке и рядом точный отпечаток этого камня

Чужой буфер обмена

Чтобы взять текст из любой программы, приходится самому нажать Ctrl+C, то есть залезть в чужой буфер. Правило из требований: забрать и положить обратно так, чтобы человек не заметил.

  1. 1

    Снимок буфера

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

  2. 2

    Отпустить клавиши

    Ждём физического отпускания, до 1,5 с. Иначе T упадёт в чужое поле.

  3. 3

    Нажать Ctrl+C

    Через SendInput: программа сама нажимает сочетание вместо человека.

  4. 4

    Смена номера буфера

    До 0,7 с. Номер не сменился, значит выделения не было.

  5. 5

    Вернуть на место

    Текст взят, буфер восстановлен. Перевод не ждёт этого шага.

Что ломалось по дороге

  • Формат 49354

    Чужой формат с отложенной отрисовкой нельзя прочитать, и один он срывал весь захват. Теперь снимок буфера делается по возможности: такие форматы пропускаются.

  • Пропавшие первые буквы

    При переводе с экрана терялись 1–3 буквы каждой строки. Винили распознавание, но на тех же кропах оно было чистым. Виноват оверлей: якорь выделения брался из GetCursorPos, а не из lParam.

  • Настройки с BOM

    PowerShell записал settings.json с BOM, Rust молча взял значения по умолчанию, и хоткей перестал работать. Теперь BOM срезается, а невалидное поле чинится отдельно от остальных.

В журнале решений проекта 57 развилок, каждая с причиной.

Что отвергнуто

Первый макет: тёмная стеклянная карточка поверх статьи
Макет «Капсула» Тёмное стекло, первое направление. Отменено 3 сентября, на втором дне работы.
Настоящий попап: матовая светлая карточка рядом с выделенным абзацем
«Туман и вода» Матовая поверхность, глубина держится тоном и широкой тенью.

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

Знак UTranslate: белая реплика со стрелкой на сквиркле цвета воды

Знак выбирали на 16 px

Рендеры 16, 24, 32 и 48 px рядом со значками Telegram, Discord и Steam на обеих панелях задач. Они тоже сине-зелёные, поэтому решают силуэт и белое пятно. Реплика со стрелкой к тому же и есть продукт: попап у курсора.

  • Лаванда не из палитры. Капсула — форма попапа, а не программы.

  • На 16 px шов исчезает, в ряду читается как батарея.

  • Диагональ на 16 px расплывается.

  • Повторяет кнопку «поменять языки» в собственном окне.

  • На 16 px буква схлопывается в клин.

  • Просветы букв меньше пикселя, на 16 px каша.

Что проверено

  • 2,06 %ошибок символов при распознавании84 синтетических примера
  • ~21 мсмедиана распознавания строките же примеры
  • 770 мсплотный экран Full HDодин образец, холодный старт
  • 133 + 161тестов ядра и браузерных сценариевcargo test и Playwright в исходниках
  • 9релизов за 4 дня3–6 сентября 2026, GitHub
  • 73скачивания установщикаGitHub, 30 октября 2026
Как работает UTranslate
0:00 / 0:56

Честно об ограничениях

  • Только Windows 10 и 11
  • SmartScreen предупреждает при установке: подписи издателя пока нет
  • Распознавание только русского и английского
  • На реальных снимках экрана замеров пока нет, только на синтетике

Что дальше

  • Объяснить и перефразировать прямо в капсуле
  • DeepL и Gemini по своему ключу
  • Английский интерфейс
Открытый код на GitHub
Следующий кейсSilk RoadФото и свободный текст из рабочего чата становятся строкой для печати этикеток. Всё сомнительное проверяет человек.