Перевод текста под курсором мыши
Субтитры закрывают речь. Но большая часть английского, который мы встречаем, письменная: страница, чат, код-ревью. Сегодня приложение научилось переводить предложение под курсором мыши в любой программе.
Как это работает
Вы зажимаете сочетание клавиш и наводите курсор на английский текст. По умолчанию это Option и Command. Рядом с курсором появляется небольшая плашка из трёх блоков: оригинал мелким шрифтом, под ним русский перевод, а третьим — словарная статья по слову под курсором. Слово ищем по-английски, а не по его переводу: толкование английского слова полезнее. Системный словарь сам приводит слово к основной форме, так что по «caching» находится «cache».
Если вы уже выделили фразу и курсор стоит внутри выделения, переводится всё выделение, а не одно предложение. Именно внутри: иначе старое выделение в другом месте текста перебивало бы всё, на что вы наводите потом, и было бы непонятно, почему переведено не то. Очень длинное выделение обрезается до 600 символов по границе слова: выделить весь документ через Command-A можно, но переводить его целиком медленно и бессмысленно.
По умолчанию режим выключен. Ему нужно разрешение «Универсальный доступ», а просить разрешение у человека, который про эту функцию не спрашивал, мы не хотим.
Как читать текст, не глядя на экран
Очевидный способ — распознавать картинку экрана. Тогда в строке меню навсегда зажёгся бы фиолетовый индикатор записи экрана. Сначала мы проверили, что отдаёт системный интерфейс доступности. В браузере, редакторе кода и мессенджере, которые мы пробовали, он выдаёт предложение точно в позиции курсора. Запись экрана не понадобилась.
Труднее всего пришлось с браузерами. Если выделение захватывает заголовок и абзац, интерфейс доступности возвращает одну плоскую строку, и заголовок слипается со следующим текстом. Первое исправление читало шрифты выделения и собирало структуру по размерам. Оно работало, но было обходным путём. Лучший источник нашёлся в буфере обмена: браузеры кладут туда текст с полной разметкой. Поэтому приложение посылает Command-C активной программе, читает копию с разметкой и возвращает прежнее содержимое буфера. Копию оно сверяет с тем, что вернул интерфейс доступности, чтобы не показать текст из другого окна. Заголовки, списки и жирный шрифт сохраняются.
Переводчик не сохраняет метки вроде «##» и дефисов списка. Мы снимаем их, переводим текст и ставим на место. Если переводчик вернул другое число строк, показываем его ответ как есть.
Закреплённое окно
Булавка в углу плашки превращает её в обычное окно. Оно не исчезает, его можно растянуть, выделять текст мышью и искать выделенное слово в словаре. У каждого блока свои кнопки «мельче» и «крупнее», размер запоминается. Кнопка с динамиком читает блок вслух. Голос мы выбираем по алфавиту, а не системным определителем языка: он принял слово «масштаб» за украинское, а украинского голоса на Маке нет, и озвучка молча не сработала бы. Текст, где есть хотя бы одна кириллическая буква, читается русским голосом.