Виртуальная клавиатура
Экранная клавиатура для другого языка: раскладки, привязка по позиции, мёртвые клавиши, слой AltGr, корейские слоги и японские ромадзи — всё в браузере.
Стрелки перемещают по клавишам на экране, Enter нажимает клавишу. Tab выходит из клавиатуры; ваша собственная клавиатура печатает прямо в текстовое поле.
Физические клавиши сопоставляются по позиции: каждая клавиша печатает то, что выбранная раскладка ставит на это место, какой бы ни была раскладка системы. Перехват действует только пока текстовое поле в фокусе — Ctrl+C, Tab и стрелки продолжают работать.
Alt Gr — удерживаемый на вашей клавиатуре или нажатый ниже — открывает третий слой, куда раскладка помещает @, € и скобки. Мёртвая клавиша (пунктирная рамка) сама по себе ничего не печатает: нажмите её, затем букву, чтобы составить знак с диакритикой, пробел, чтобы получить сам знак, или Backspace, чтобы отменить.
Один инструмент, тринадцать языков
Эта клавиатура печатает на тринадцати языках, на которых написан этот сайт, и для каждого показывает раскладку, которой носители языка действительно пользуются, — по простому правилу: стандартная раскладка страны с наибольшим числом говорящих. Иврит — стандарт SI-1452, французский — AZERTY, немецкий — QWERTZ, русский — ЙЦУКЕН, испанский — латиноамериканская раскладка, португальский — бразильская ABNT2, турецкий — Turkish Q, японский — кана-раскладка JIS, корейский — тубольсик (Dubeolsik). В списке каждая раскладка подписана собственным именем на собственном языке, потому что читатель, ищущий свой язык, узнаёт его самоназвание при любом языке интерфейса.
Один пункт нарочно скучен: индонезийский. У Индонезии нет национальной раскладки — страна печатает на US QWERTY, той же раскладке, что и английский, — и честный ответ состоит в том, чтобы так и сказать, а не выдумывать раскладку, которой ни один индонезиец никогда не видел. Инструмент открывается с раскладкой языка, на котором вы его читаете, и в любой момент можно переключиться на любую другую; набранный текст при переключении остаётся на месте.
Позиционное сопоставление: ваша собственная раскладка не важна
Печатайте на физической клавиатуре — и инструмент читает каждую клавишу по её позиции на доске, никогда не по символу, который, по мнению операционной системы, она даёт. Клавиша двумя рядами выше пробела, сразу справа от J — позиция K — печатает k в US QWERTY и ל в ивритской раскладке, какая бы раскладка ни была установлена на вашей машине. В этом перевороте весь смысл: слушай инструмент операционную систему, он лишь возвращал бы вам эхом вашу же раскладку и никогда не смог бы печатать на языке, раскладки которого у вас нет.
Щелчок по экранной клавише и нажатие на физической доске проходят через один и тот же механизм, поэтому они никогда не разойдутся в том, что делает клавиша. Пока вы печатаете физически, нажатая клавиша подсвечивается на экранной клавиатуре — так и учат, где живут символы незнакомой раскладки, как когда-то этому учили печатные наклейки на клавиши.
Перехват нарочно узок. Физические клавиши читаются только пока текстовое поле в фокусе, так что остальная страница продолжает работать как обычно. Сочетания вроде Ctrl+C, Ctrl+V, Ctrl+A и Ctrl+Z проходят прямо в браузер, как и стрелки, Home, End и Delete, — а Tab не проглатывается никогда, потому что инструмент, съедающий Tab, запирает на странице всякого, кто перемещается с клавиатуры.
Чего физической клавиатуре может не хватать, так это клавиш. Европейские раскладки здесь — это клавиатуры ISO: у них есть 102-я клавиша между левым Shift и первой буквой нижнего ряда, а бразильская ABNT2 добавляет 49-ю рядом с правым Shift. На клавиатуре ANSI американского образца нет ни той, ни другой, так что ни одно ваше нажатие до них не доберётся — но на экранной клавиатуре они нарисованы, как и все прочие, и щелчок печатает ровно то, что раскладка туда помещает. Ничто в раскладке не остаётся недостижимым: на неподходящей клавиатуре небольшая её часть доступна только мышью.
Слои: Shift, Caps Lock, AltGr и мёртвые клавиши
Настоящая клавиатура печатает больше символов, чем у неё клавиш, и делает это слоями. Удержанный Shift при нажатии печатает слой Shift; щелчок же по экранному Shift фиксирует его ровно на один символ — так экранные клавиатуры ведут себя везде. Caps Lock уже, чем принято думать: он капитализирует только те клавиши, где слой Shift действительно является заглавной буквой базовой, поэтому превращает a в A, но никогда не превращает 1 в !. На письме вовсе без регистра — иврит из таких — Caps Lock не делает ничего, ровно как и настоящая ивритская клавиатура.
Европейские раскладки несут третий слой, достижимый через AltGr, где живут символы вроде @, € и пар скобок, и мёртвые клавиши со стандартным поведением: нажимаете значок ударения, затем букву — и они складываются; мёртвая клавиша и затем пробел дают сам значок, а буква, к которой значок не может присоединиться, просто приходит после него. Ожидающая мёртвая клавиша помечается на экранной клавиатуре, чтобы тишина между двумя нажатиями была видимой, а не сбивающей с толку.
Две ивритские детали выглядят как ошибки и являются стандартом. Раскладка зеркалит свои парные ограничители — Shift+9 печатает ) там, где US QWERTY печатает ( — потому что стандарт сопоставляет логический символ, а алгоритм двунаправленного текста зеркалит его обратно при отрисовке; клавиша, выглядящая как открывающая скобка, даёт на экране открывающую скобку. И само текстовое поле переворачивается справа налево при выборе иврита или арабского, потому что направление принадлежит набираемому тексту, а не языку страницы вокруг.
Японский и корейский — методы ввода, а не просто раскладки
Для большинства языков клавиатура — это таблица: одна позиция клавиши, один символ. Корейскому и японскому таблицы мало. Корейский тубольсик печатает чамо — отдельные согласные и гласные, — а метод ввода на ходу складывает их в слоговые блоки: ㅎ, затем ㅏ, затем ㄴ становятся 한, составные гласные и двойные конечные согласные собираются так же, а конечная согласная переносится в следующий слог, когда идущее следом делает такое чтение правильным. Backspace разбирает композицию чамо за чамо, а не стирает слог целиком, потому что так ведёт себя каждый корейский метод ввода, а всё прочее превращает исправление опечатки в мучение.
Японский есть в двух режимах. По умолчанию — ввод ромадзи на физической клавиатуре: печатаете ka, появляется か, со стандартной обработкой маленького っ и ん — потому что именно так и происходит большая часть японского набора. Экранная клавиатура показывает кана-раскладку JIS, где каждая клавиша — слог, а позиционный режим JIS есть для тех, кто действительно так печатает. Переключатель меняет вывод между хираганой и катаканой.
Чего инструмент нарочно не делает — так это не преобразует кану в кандзи. Настоящее преобразование требует словаря в сотни тысяч слов и модели ранжирования поверх — это IME, а не клавиатура, — и выпустить плохое было бы хуже, чем никакого: вы получали бы правдоподобный неверный текст без всякой возможности это увидеть. Вывод только каной заявлен здесь прямо, чтобы предел был понят, а не обнаружен.
Работает в вашем браузере
Раскладки — это данные, приходящие со страницей, и каждое нажатие обрабатывается локально. Ничто из набранного не выгружается, не сохраняется и не журналируется — а для инструмента набора это важнее, чем для большинства, потому что то, что люди печатают на клавиатуре, обычно и есть тот текст, который им дорог. Перехват ограничен текстовым полем, так что инструмент никогда не видит клавишу, нажатую где-то ещё, а закрытие вкладки не оставляет ничего после себя.
Частые вопросы
- Почему нажатие клавиши K печатает ל?
- Потому что клавиши сопоставляются по физической позиции, а не по символу, который сообщает операционная система. В ивритской раскладке позиция K несёт букву ל — её она и печатает, что на вашей доске, что на экранной клавиатуре. Именно это позволяет печатать на языке, раскладки которого на вашей машине нет.
- Нужно ли, чтобы язык был установлен на компьютере?
- Нет. Инструмент никогда не спрашивает операционную систему, что означает клавиша, — он сам разрешает каждую клавишу по выбранной раскладке. На вашей машине может стоять любая раскладка или ни одной из нужных — набранный текст выйдет одинаковым.
- Почему мой Ctrl+C продолжал работать во время набора?
- Так задумано. Сочетания с модификаторами, стрелки, Home, End, Delete и Tab передаются браузеру как есть, а не перехватываются, поэтому привычные приёмы редактирования — копировать, вставить, отменить, выделить всё — продолжают работать внутри текстового поля, а клавиатурная навигация — вне его.
- Умеет ли он превращать японскую кану в кандзи?
- Нет, и это сознательно. Преобразование в кандзи требует IME — словаря в сотни тысяч слов плюс модели ранжирования, — а плохой IME выдаёт правдоподобный неверный текст, что хуже, чем ничего. Инструмент печатает хирагану и катакану, с вводом ромадзи на физической клавиатуре, и говорит об этом прямо, а не даёт вам обнаружить предел самим.
- Почему Shift+9 печатает в иврите закрывающую скобку?
- Он печатает логический символ, который ставит там стандарт SI-1452, а алгоритм двунаправленного текста зеркалит его при отрисовке текста справа налево — на экране вы видите ровно ту скобку, что нарисована на клавише. «Починить» это значило бы сломать каждую скобку, набранную на иврите.
- На моей клавиатуре нет клавиши рядом с левым Shift. Её всё равно можно напечатать?
- Да, щелчком по ней. Европейские раскладки — это клавиатуры ISO со 102-й клавишей в этом месте, а у бразильской ABNT2 есть дополнительная клавиша рядом с правым Shift; на клавиатуре ANSI американского образца нет ни одной из них. Обе нарисованы на экранной клавиатуре, и щелчок печатает то, что раскладка туда помещает, — так что ни один символ раскладки не остаётся недоступным, какая бы клавиатура у вас ни была.
- Отправляется ли что-нибудь из набранного на сервер?
- Нет. Вся клавиатура — раскладки, сопоставление, композиция — работает в вашем браузере. Нажатия обрабатываются локально, ничего не выгружается и не журналируется, а перехват действует только пока текстовое поле в фокусе, так что клавиши, нажатые в других местах страницы, не видны вовсе.