가상 키보드

화면 키보드로 다른 언어 입력. 각국의 실제 자판 배열, 위치 기반 대응, 죽은 키와 AltGr 층, 한글 음절 조합, 일본어 로마자 입력까지 모두 브라우저 안에서.

화살표 키로 화면의 키 사이를 옮기고 Enter로 그 키를 누릅니다. Tab은 키보드를 빠져나가며, 쓰고 있는 키보드는 텍스트 상자에 바로 입력합니다.

물리 키는 위치로 대응됩니다. 각 키는 선택한 배열이 그 자리에 두는 문자를 입력하며, 시스템 배열과는 무관합니다. 캡처는 텍스트 상자에 포커스가 있는 동안에만 적용되고 Ctrl+C, Tab, 화살표 키는 그대로 동작합니다.

자판이 입력하는 것은 낱자모입니다. 자음과 모음이 하나씩 들어오면 치는 동안 음절 블록으로 모입니다 — ㅎ, ㅏ, ㄴ이 모여 한이 됩니다. 백스페이스는 음절 전체를 지우지 않고 조합 중인 블록에서 자모를 하나씩 되돌리며, 뒤에 모음이 오면 받침은 다음 블록으로 넘어갑니다.

도구 하나, 열세 개 언어

이 키보드는 이 사이트가 쓰인 열세 개 언어를 입력하며, 각 언어마다 그 언어 사용자들이 실제로 쓰는 배열을 보여줍니다. 선택 규칙은 단순합니다. 화자가 가장 많은 나라의 표준 배열입니다. 히브리어는 SI-1452 표준, 프랑스어는 AZERTY, 독일어는 QWERTZ, 러시아어는 ЙЦУКЕН, 스페인어는 라틴아메리카 배열, 포르투갈어는 브라질 ABNT2, 터키어는 Turkish Q, 일본어는 JIS 가나 배열, 한국어는 두벌식입니다. 선택 목록은 각 배열을 그 언어 자신의 이름으로 표기합니다. 자기 언어를 찾는 독자는 어떤 인터페이스 언어에서든 그 자칭 이름을 알아보기 때문입니다.

한 항목은 일부러 심심합니다. 인도네시아어입니다. 인도네시아에는 국가 표준 키보드 배열이 없어서 영어와 같은 US QWERTY로 입력합니다. 정직한 답은 어떤 인도네시아인도 본 적 없는 배열을 지어내는 대신 그 사실을 그대로 말하는 것입니다. 도구는 읽고 있는 페이지 언어의 배열로 열리고, 언제든 다른 배열로 바꿀 수 있으며, 바꿔도 이미 입력한 텍스트는 그대로 남습니다.

위치 매핑: 내 시스템 배열은 상관없다

물리 키보드로 입력하면 도구는 각 키를 자판 위의 위치로 읽습니다. 운영체제가 그 키의 문자라고 여기는 것은 결코 보지 않습니다. 스페이스바에서 두 줄 위, J 바로 오른쪽 키 — K 위치 — 는 US QWERTY에서는 k를, 히브리어 배열에서는 ל를 입력합니다. 컴퓨터에 어떤 배열이 설치되어 있든 같습니다. 이 뒤집기가 핵심입니다. 도구가 운영체제 말을 들었다면 당신 자신의 배열을 메아리처럼 돌려줄 뿐이고, 설치하지 않은 언어는 영원히 입력할 수 없었을 것입니다.

화면 키 클릭과 물리 키 누름은 정확히 같은 기계 장치를 통과하므로, 둘이 키의 동작에 대해 어긋날 수 없습니다. 물리로 입력하는 동안 누른 키가 화면 키보드에서 빛납니다. 낯선 배열의 문자들이 어디에 사는지는 이렇게 배웁니다. 예전에 키보드에 붙이던 인쇄 스티커가 가르쳐 주던 방식 그대로입니다.

캡처는 일부러 좁게 잡았습니다. 물리 키는 텍스트 상자에 포커스가 있는 동안에만 읽히므로 페이지의 나머지는 평소처럼 동작합니다. Ctrl+C, Ctrl+V, Ctrl+A, Ctrl+Z 같은 단축키는 화살표 키, Home, End, Delete와 마찬가지로 브라우저로 그대로 통과합니다. 그리고 Tab은 절대 삼켜지지 않습니다. Tab을 먹는 도구는 키보드로 페이지를 이동하는 사람을 가둬 버리기 때문입니다.

물리 키보드에 모자랄 수 있는 것은 키 자체입니다. 여기 실린 유럽 배열은 ISO 규격 보드라, 왼쪽 Shift와 맨 아랫줄 첫 글자 사이에 102번째 키가 있고 브라질 ABNT2는 오른쪽 Shift 옆에 49번째 키를 더 둡니다. 미국식 ANSI 키보드에는 둘 다 없어서 아무리 눌러도 닿지 않습니다. 다만 화면 키보드에는 다른 키와 똑같이 그려져 있고, 클릭하면 배열이 그 자리에 둔 문자가 그대로 입력됩니다. 배열 안에 닿을 수 없는 것은 없습니다. 맞지 않는 보드에서는 그 일부가 마우스 전용이 될 뿐입니다.

레이어: Shift, Caps Lock, AltGr, 데드 키

실제 키보드는 키 수보다 많은 문자를 입력하는데, 그것은 레이어로 이뤄집니다. Shift를 누른 채 치면 Shift 레이어가 입력됩니다. 반면 화면의 Shift를 클릭하면 정확히 한 글자만큼만 걸립니다. 어디서나 화면 키보드가 그렇게 동작합니다. Caps Lock은 흔히 생각하는 것보다 좁게 작동합니다. Shift 레이어가 정말로 기본 글자의 대문자인 키만 대문자로 바꾸므로 a는 A가 되지만 1이 !가 되는 일은 없습니다. 대소문자 구분이 아예 없는 문자 — 히브리어가 그렇습니다 — 에서는 Caps Lock이 아무것도 하지 않으며, 실제 히브리어 키보드도 똑같습니다.

유럽 배열들은 AltGr로 닿는 셋째 레이어를 지니는데, @나 €, 괄호 쌍 같은 문자가 거기에 삽니다. 그리고 표준 동작을 따르는 데드 키가 있습니다. 악센트 기호를 누른 다음 글자를 누르면 둘이 합성되고, 데드 키 다음에 스페이스를 누르면 기호 자체가 나오며, 악센트가 붙을 수 없는 글자는 그냥 그 뒤에 옵니다. 대기 중인 데드 키는 화면 키보드에 표시되어, 두 타건 사이의 침묵이 혼란이 아니라 눈에 보이는 것이 됩니다.

히브리어의 두 가지 세부는 버그처럼 보이지만 표준 그 자체입니다. 이 배열은 짝을 이루는 구분 기호를 거울처럼 뒤집습니다. US QWERTY가 (를 내는 자리에서 Shift+9는 )를 입력합니다. 표준이 대응시키는 것은 논리적 문자이고, 양방향 텍스트 알고리즘이 그릴 때 그것을 다시 거울로 뒤집기 때문입니다. 여는 괄호처럼 보이는 키는 화면에서도 여는 괄호를 만듭니다. 그리고 히브리어나 아랍어를 고르면 텍스트 상자 자체가 오른쪽에서 왼쪽으로 바뀝니다. 방향은 입력되는 텍스트의 것이지, 둘러싼 페이지 언어의 것이 아니기 때문입니다.

일본어와 한국어는 입력 방식이지, 단순한 배열이 아니다

대부분의 언어에서 키보드는 표입니다. 키 위치 하나에 문자 하나. 한국어와 일본어에는 표 이상이 필요합니다. 한국어 두벌식은 자모 — 낱낱의 자음과 모음 — 를 입력하고, 입력 방식이 치는 대로 음절 블록으로 조합합니다. ㅎ 다음 ㅏ 다음 ㄴ이 한이 되고, 겹모음과 겹받침도 같은 방식으로 조립되며, 받침은 뒤에 오는 것이 그렇게 읽는 게 맞을 때 다음 음절로 넘어갑니다. Backspace는 음절을 통째로 지우는 대신 조합을 자모 하나씩 되감습니다. 모든 한국어 입력기가 그렇게 동작하고, 다른 어떤 방식이든 오타 수정을 고문으로 만들기 때문입니다.

일본어는 두 모드로 옵니다. 기본은 물리 키보드의 로마자 입력입니다. ka라고 치면 か가 나타나고, 작은 っ와 ん도 표준대로 처리됩니다. 실제 일본어 입력 대부분이 이 방식으로 이뤄지기 때문입니다. 화면 키보드는 각 키가 음절 하나인 JIS 가나 배열을 보여주고, 정말 그렇게 치는 사람을 위해 위치 기반 JIS 모드도 있습니다. 전환 스위치로 출력을 히라가나와 가타카나 사이에서 바꿉니다.

이 도구가 일부러 하지 않는 것은 가나를 한자로 변환하는 일입니다. 진짜 변환에는 수십만 단어의 사전과 그 위의 순위 모델 — 키보드가 아니라 IME — 이 필요하고, 나쁜 것을 싣는 것은 아예 안 싣는 것보다 나쁩니다. 그럴듯하지만 틀린 텍스트가 알아챌 길 없이 나오게 되니까요. 가나 전용 출력이라는 사실을 여기 분명히 적는 것은, 한계가 발견되는 것이 아니라 이해되게 하기 위해서입니다.

브라우저 안에서 돌아간다

배열은 페이지와 함께 오는 데이터이고 모든 타건은 로컬에서 처리됩니다. 입력한 것은 업로드되거나 저장되거나 기록되지 않습니다. 이는 대부분의 도구보다 입력 도구에서 더 중요합니다. 사람들이 키보드에 치는 것이야말로 대개 그들이 아끼는 바로 그 텍스트이기 때문입니다. 캡처는 텍스트 상자로 한정되므로 도구는 다른 곳에서 눌린 키를 결코 보지 못하고, 탭을 닫으면 아무것도 남지 않습니다.

자주 묻는 질문

왜 K 키를 누르면 ל가 입력되나요?
키가 운영체제가 보고하는 문자가 아니라 물리적 위치로 매핑되기 때문입니다. 히브리어 배열에서는 K 위치에 ל가 실려 있어서 그것이 입력됩니다. 물리 자판에서도 화면 키보드에서도 똑같습니다. 컴퓨터에 배열이 설치되지 않은 언어를 입력할 수 있는 것은 바로 이 구조 덕분입니다.
그 언어가 컴퓨터에 설치되어 있어야 하나요?
아니요. 도구는 키의 의미를 운영체제에 묻는 일이 없습니다. 선택된 배열에 대해 스스로 각 키를 해석합니다. 컴퓨터에 어떤 배열이 있든, 필요한 배열이 하나도 없든, 입력되는 텍스트는 같습니다.
입력 중에도 Ctrl+C가 계속 동작한 이유는요?
설계된 동작입니다. 수정자 키 단축키, 화살표 키, Home, End, Delete, Tab은 캡처되지 않고 브라우저로 그대로 전달됩니다. 그래서 복사, 붙여넣기, 실행 취소, 모두 선택 같은 평소 편집 습관은 텍스트 상자 안에서 계속 통하고, 키보드 내비게이션은 그 밖에서 계속 통합니다.
일본어 가나를 한자로 변환할 수 있나요?
아니요, 일부러 하지 않습니다. 한자 변환에는 IME — 수십만 단어의 사전과 순위 모델 — 가 필요하고, 나쁜 변환기는 그럴듯하지만 틀린 텍스트를 만듭니다. 그것은 없는 것보다 나쁩니다. 이 도구는 히라가나와 가타카나를 입력하고 물리 키보드에서는 로마자 입력을 쓰며, 그 한계를 발견하게 두는 대신 여기서 밝힙니다.
히브리어에서 Shift+9가 닫는 괄호를 입력하는 이유는요?
SI-1452 표준이 그 자리에 둔 논리적 문자를 입력하는 것입니다. 오른쪽에서 왼쪽으로 쓰는 텍스트가 그려질 때 양방향 텍스트 알고리즘이 그것을 거울로 뒤집으므로, 화면에는 키에 새겨진 그대로의 괄호가 보입니다. 이것을 「고치면」 히브리어로 치는 모든 괄호가 망가집니다.
제 키보드에는 왼쪽 Shift 옆에 키가 없습니다. 그래도 입력할 수 있나요?
클릭하면 됩니다. 유럽 배열은 그 자리에 102번째 키가 있는 ISO 규격 보드이고, 브라질 ABNT2는 오른쪽 Shift 옆에 키가 하나 더 있습니다. 미국식 ANSI 키보드에는 둘 다 없습니다. 두 키 모두 화면 키보드에 그려져 있고 클릭하면 배열이 그 자리에 둔 문자가 입력되므로, 어떤 키보드를 쓰든 배열의 문자가 손이 닿지 않는 곳에 남지는 않습니다.
입력한 내용이 서버로 전송되나요?
아니요. 키보드 전체 — 배열, 매핑, 조합 — 가 브라우저 안에서 돌아갑니다. 타건은 로컬에서 처리되고, 아무것도 업로드되거나 기록되지 않으며, 캡처는 텍스트 상자에 포커스가 있는 동안에만 적용되므로 페이지의 다른 곳에서 눌린 키는 아예 보이지 않습니다.