Teclado virtual

Digite em outro idioma na tela: layouts nacionais por posição, teclas mortas, camada AltGr, sílabas coreanas e romaji japonês — tudo no navegador.

As setas movem entre as teclas na tela e Enter pressiona uma. Tab sai do teclado; o seu próprio teclado digita direto na caixa de texto.

As teclas físicas são mapeadas por posição: cada tecla digita o que o layout escolhido coloca naquele lugar, seja qual for o layout do seu sistema. A captura vale apenas enquanto a caixa de texto tem o foco — Ctrl+C, Tab e as setas continuam funcionando.

Alt Gr — mantido no seu teclado ou clicado abaixo — alcança a terceira camada, onde o layout coloca @, € e os colchetes. Uma tecla morta (borda tracejada) não digita nada sozinha: pressione-a e depois uma letra para compor o acento, a barra de espaço para obter o sinal, ou Backspace para cancelar.

Uma ferramenta, treze idiomas

Este teclado digita os treze idiomas em que este site está escrito, e para cada um mostra o layout que as pessoas daquele idioma realmente usam — escolhido por uma regra simples: o layout padrão do país com mais falantes. O hebraico é a norma SI-1452, o francês é AZERTY, o alemão é QWERTZ, o russo é ЙЦУКЕН, o espanhol é o layout latino-americano, o português é o ABNT2 brasileiro, o turco é o Turkish Q, o japonês é o layout kana JIS e o coreano é o Dubeolsik. O seletor lista cada layout pelo próprio nome no próprio idioma, porque quem procura o seu idioma reconhece o endônimo dele em qualquer idioma de interface.

Uma entrada é deliberadamente sem graça: o indonésio. A Indonésia não tem layout de teclado nacional — o país digita em US QWERTY, o mesmo layout do inglês — e a resposta honesta é dizer isso em vez de inventar um layout que nenhum indonésio jamais viu. A ferramenta abre com o layout do idioma em que você a está lendo, e dá para trocar para qualquer outro a qualquer momento; o texto já digitado fica onde está quando você troca.

Mapeamento por posição: o seu layout não importa

Digite no teclado físico e a ferramenta lê cada tecla pela posição na placa, nunca pelo caractere que o seu sistema operacional acha que ela produz. A tecla duas fileiras acima da barra de espaço, logo à direita do J — a posição K — digita k no US QWERTY e ל no layout hebraico, seja qual for o layout instalado na sua máquina. Essa inversão é todo o sentido: se a ferramenta ouvisse o sistema operacional, ela só devolveria o eco do seu próprio layout, e nunca poderia digitar um idioma cujo layout você não tem instalado.

Um clique numa tecla da tela e um toque na placa física passam exatamente pela mesma engrenagem, então as duas nunca podem discordar sobre o que uma tecla faz. Enquanto você digita fisicamente, a tecla pressionada acende no teclado da tela — é assim que se aprende onde moram os caracteres de um layout desconhecido, como antigamente ensinava um adesivo impresso nas teclas.

A captura é estreita de propósito. As teclas físicas só são lidas enquanto a caixa de texto tem o foco, então o resto da página continua funcionando normalmente. Atalhos como Ctrl+C, Ctrl+V, Ctrl+A e Ctrl+Z passam direto para o navegador, assim como as setas, Home, End e Delete — e o Tab nunca é engolido, porque uma ferramenta que come o Tab prende na página qualquer pessoa que navegue pelo teclado.

Uma coisa que pode faltar a um teclado físico são teclas. Os layouts europeus aqui são teclados ISO: têm uma 102ª tecla entre o Shift esquerdo e a primeira letra da fileira de baixo, e o ABNT2 brasileiro acrescenta uma 49ª ao lado do Shift direito. Um teclado ANSI de estilo norte-americano não tem nenhuma das duas, então nenhum toque seu as alcança — mas elas são desenhadas no teclado da tela como qualquer outra tecla, e um clique digita exatamente o que o layout coloca ali. Nada de um layout fica inalcançável: no teclado errado, uma pequena parte só se obtém com o mouse.

Camadas: Shift, Caps Lock, AltGr e teclas mortas

Um teclado de verdade digita mais caracteres do que tem teclas, e faz isso com camadas. Segurar Shift enquanto digita produz a camada Shift; clicar no Shift da tela, por outro lado, o trava por exatamente um caractere, como os teclados de tela se comportam em toda parte. O Caps Lock é mais estreito do que se costuma pensar: ele só põe em maiúscula as teclas em que a camada Shift é de fato a maiúscula da letra base, então transforma a em A mas nunca transforma 1 em !. Numa escrita sem maiúsculas — o hebraico é uma — o Caps Lock não faz nada, que é o que um teclado hebraico de verdade também faz.

Os layouts europeus carregam uma terceira camada alcançada com AltGr, onde moram caracteres como @, € e os pares de colchetes, e teclas mortas com o comportamento padrão: pressione o acento e depois a letra, e os dois se compõem — tecla morta e depois espaço dá a marca sozinha, e uma letra à qual o acento não pode se juntar simplesmente chega depois dele. Uma tecla morta pendente aparece em espera no teclado da tela, para que o silêncio entre os dois toques fique visível em vez de confundir.

Dois detalhes hebraicos parecem bugs e são a norma. O layout espelha seus delimitadores pareados — Shift+9 digita ) onde o US QWERTY digita ( — porque a norma mapeia o caractere lógico, e o algoritmo de texto bidirecional o espelha de volta quando o texto é desenhado; a tecla que parece um parêntese de abertura produz na tela um parêntese de abertura. E a própria caixa de texto vira da direita para a esquerda quando você escolhe hebraico ou árabe, porque a direção pertence ao texto digitado, não ao idioma da página em volta.

Japonês e coreano são métodos de entrada, não apenas layouts

Para a maioria dos idiomas, um teclado é uma tabela: uma posição de tecla, um caractere. O coreano e o japonês precisam de mais que uma tabela. O Dubeolsik coreano digita jamo — consoantes e vogais avulsas — e um método de entrada os compõe em blocos silábicos conforme você digita: ㅎ depois ㅏ depois ㄴ viram 한, vogais compostas e consoantes finais duplas se montam do mesmo jeito, e uma consoante final é carregada para a sílaba seguinte quando o que vem depois faz dessa a leitura certa. O Backspace desfaz a composição jamo por jamo em vez de apagar a sílaba inteira, porque é assim que todo método de entrada coreano se comporta, e qualquer outra coisa torna enlouquecedor corrigir um erro de digitação.

O japonês vem em dois modos. O padrão é a entrada romaji no teclado físico — você digita ka e か aparece, com o tratamento padrão do っ pequeno e do ん — porque é assim que a maior parte da digitação japonesa realmente acontece. O teclado da tela mostra o layout kana JIS, em que cada tecla é uma sílaba, e um modo JIS posicional existe para quem realmente digita assim. Um alternador troca a saída entre hiragana e katakana.

O que a ferramenta deliberadamente não faz é converter kana em kanji. A conversão de verdade precisa de um dicionário de centenas de milhares de palavras e de um modelo de ordenação por cima — um IME, não um teclado — e entregar um ruim seria pior do que nenhum: você receberia texto plausível e errado sem nenhum jeito de perceber. A saída só em kana está declarada aqui com clareza, para que o limite seja entendido em vez de descoberto.

Roda no seu navegador

Os layouts são dados que chegam com a página e cada toque é tratado localmente. Nada do que você digita é enviado, guardado ou registrado — o que importa mais numa ferramenta de digitação do que na maioria, porque o que as pessoas digitam num teclado costuma ser exatamente o texto com que se importam. A captura é restrita à caixa de texto, então a ferramenta nunca vê uma tecla pressionada em outro lugar, e fechar a aba não deixa nada para trás.

Perguntas frequentes

Por que apertar a tecla K digita ל?
Porque as teclas são mapeadas pela posição física, não pelo caractere que o seu sistema operacional informa. No layout hebraico a posição K carrega o ל, então é isso que ela digita — na sua placa e no teclado da tela igualmente. É isso que permite digitar um idioma cujo layout a sua máquina não tem instalado.
Preciso ter o idioma instalado no computador?
Não. A ferramenta nunca pergunta ao sistema operacional o que uma tecla significa — ela resolve cada tecla sozinha contra o layout selecionado. Sua máquina pode ter qualquer layout, ou nenhum dos relevantes, e o texto digitado sai igual.
Por que o meu Ctrl+C continuou funcionando enquanto eu digitava?
De propósito. Atalhos com modificadores, as setas, Home, End, Delete e Tab passam direto para o navegador em vez de serem capturados, então os hábitos de edição de sempre — copiar, colar, desfazer, selecionar tudo — continuam funcionando dentro da caixa de texto, e a navegação por teclado continua funcionando fora dela.
Ele converte kana japonês em kanji?
Não, deliberadamente. A conversão para kanji precisa de um IME — um dicionário de centenas de milhares de palavras mais um modelo de ordenação — e um ruim produz texto plausível porém errado, o que é pior que nada. A ferramenta digita hiragana e katakana, com entrada romaji no teclado físico, e diz isso em vez de deixar você descobrir o limite.
Por que Shift+9 digita um parêntese de fechamento em hebraico?
Ele digita o caractere lógico que a norma SI-1452 põe ali, e o algoritmo de texto bidirecional o espelha quando um texto da direita para a esquerda é desenhado — na tela você vê exatamente o parêntese gravado na tecla. «Consertar» isso quebraria cada parêntese digitado em hebraico.
Meu teclado não tem a tecla ao lado do Shift esquerdo. Ainda posso digitá-la?
Sim, clicando nela. Os layouts europeus são teclados ISO com uma 102ª tecla nesse lugar, e o ABNT2 brasileiro tem uma tecla a mais ao lado do Shift direito; um teclado ANSI de estilo norte-americano não tem nenhuma das duas. Ambas são desenhadas no teclado da tela, e clicar nelas digita o que o layout coloca ali — então nenhum caractere de um layout fica fora de alcance, seja qual for o seu teclado.
Algo do que eu digito é enviado a um servidor?
Não. O teclado inteiro — layouts, mapeamento, composição — roda no seu navegador. Os toques são tratados localmente, nada é enviado nem registrado, e a captura só vale enquanto a caixa de texto tem o foco, então teclas pressionadas em outra parte da página nunca são vistas.