Add Korean and Japanese virtual keyboard layouts

This commit is contained in:
jason
2026-02-19 07:47:41 +09:00
parent 4af32fc703
commit 57887f3f69
2 changed files with 137 additions and 3 deletions

View File

@@ -46,8 +46,10 @@ export const VirtualKeyboard = () => {
const languages = [
{ value: 'en', label: 'English' },
{ value: 'fr', label: 'French' },
{ value: 'de', label: 'Deutsch' },
{ value: 'ru', label: 'Russian' }
{ value: 'de', label: 'German' },
{ value: 'ru', label: 'Russian' },
{ value: 'ko', label: 'Korean' },
{ value: 'ja', label: 'Japanese' }
];
useEffect(() => {
@@ -67,7 +69,9 @@ export const VirtualKeyboard = () => {
['en', 'default'],
['ru', 'rus'],
['de', 'qwertz'],
['fr', 'azerty']
['fr', 'azerty'],
['ko', 'ko'],
['ja', 'ja']
]);
if (keyboardLanguage === 'en' && keyboardSystem === 'mac') {
@@ -141,6 +145,16 @@ export const VirtualKeyboard = () => {
return getKeycode(base);
}
if (keyboardLanguage === 'ko' && key.endsWith('_ko')) {
const base = key.replace('_ko', '');
return getKeycode(base);
}
if (keyboardLanguage === 'ja' && key.endsWith('_ja')) {
const base = key.replace('_ja', '');
return getKeycode(base);
}
const specialKey = specialKeyMap.get(key);
if (specialKey) {
return getKeycode(specialKey);

View File

@@ -44,6 +44,22 @@ export const keyboardOptions = {
'{capslock} KeyQ_azerty KeyS_azerty KeyD_azerty KeyF_azerty KeyG_azerty KeyH_azerty KeyJ_azerty KeyK_azerty KeyL_azerty Semicolon_azerty Quote_azerty {enter}',
'{shiftleft} KeyW_azerty KeyX_azerty KeyC_azerty KeyV_azerty KeyB_azerty KeyN_azerty KeyM_azerty Comma_azerty Period_azerty Slash_azerty {shiftright}',
'{controlleft} {winleft} {altleft} {space} {altright} {winright} {menu} {controlright}'
],
ko: [
'{escape} F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12',
'Backquote_ko Digit1_ko Digit2_ko Digit3_ko Digit4_ko Digit5_ko Digit6_ko Digit7_ko Digit8_ko Digit9_ko Digit0_ko Minus_ko Equal_ko {backspace}',
'{tab} KeyQ_ko KeyW_ko KeyE_ko KeyR_ko KeyT_ko KeyY_ko KeyU_ko KeyI_ko KeyO_ko KeyP_ko BracketLeft_ko BracketRight_ko Backslash_ko',
'{capslock} KeyA_ko KeyS_ko KeyD_ko KeyF_ko KeyG_ko KeyH_ko KeyJ_ko KeyK_ko KeyL_ko Semicolon_ko Quote_ko {enter}',
'{shiftleft} KeyZ_ko KeyX_ko KeyC_ko KeyV_ko KeyB_ko KeyN_ko KeyM_ko Comma_ko Period_ko Slash_ko {shiftright}',
'{controlleft} {winleft} {altleft} {space} {altright} {winright} {menu} {controlright}'
],
ja: [
'{escape} F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12',
'Backquote_ja Digit1_ja Digit2_ja Digit3_ja Digit4_ja Digit5_ja Digit6_ja Digit7_ja Digit8_ja Digit9_ja Digit0_ja Minus_ja Equal_ja {backspace}',
'{tab} KeyQ_ja KeyW_ja KeyE_ja KeyR_ja KeyT_ja KeyY_ja KeyU_ja KeyI_ja KeyO_ja KeyP_ja BracketLeft_ja BracketRight_ja Backslash_ja',
'{capslock} KeyA_ja KeyS_ja KeyD_ja KeyF_ja KeyG_ja KeyH_ja KeyJ_ja KeyK_ja KeyL_ja Semicolon_ja Quote_ja {enter}',
'{shiftleft} KeyZ_ja KeyX_ja KeyC_ja KeyV_ja KeyB_ja KeyN_ja KeyM_ja Comma_ja Period_ja Slash_ja {shiftright}',
'{controlleft} {winleft} {altleft} {space} {altright} {winright} {menu} {controlright}'
]
},
display: {
@@ -186,6 +202,110 @@ export const keyboardOptions = {
RusPeriod: 'Ю',
RusSlash: ',<br/>.',
// Korean (2-set) display
Backquote_ko: '`',
Digit1_ko: '1',
Digit2_ko: '2',
Digit3_ko: '3',
Digit4_ko: '4',
Digit5_ko: '5',
Digit6_ko: '6',
Digit7_ko: '7',
Digit8_ko: '8',
Digit9_ko: '9',
Digit0_ko: '0',
Minus_ko: '-',
Equal_ko: '=',
KeyQ_ko: 'ㅂ',
KeyW_ko: 'ㅈ',
KeyE_ko: 'ㄷ',
KeyR_ko: 'ㄱ',
KeyT_ko: 'ㅅ',
KeyY_ko: 'ㅛ',
KeyU_ko: 'ㅕ',
KeyI_ko: 'ㅑ',
KeyO_ko: 'ㅐ',
KeyP_ko: 'ㅔ',
BracketLeft_ko: '[',
BracketRight_ko: ']',
Backslash_ko: '\\',
KeyA_ko: 'ㅁ',
KeyS_ko: 'ㄴ',
KeyD_ko: 'ㅇ',
KeyF_ko: 'ㄹ',
KeyG_ko: 'ㅎ',
KeyH_ko: 'ㅗ',
KeyJ_ko: 'ㅓ',
KeyK_ko: 'ㅏ',
KeyL_ko: 'ㅣ',
Semicolon_ko: ';',
Quote_ko: "'",
KeyZ_ko: 'ㅋ',
KeyX_ko: 'ㅌ',
KeyC_ko: 'ㅊ',
KeyV_ko: 'ㅍ',
KeyB_ko: 'ㅠ',
KeyN_ko: 'ㅜ',
KeyM_ko: 'ㅡ',
Comma_ko: ',',
Period_ko: '.',
Slash_ko: '/',
// Japanese display (representative hiragana per key)
Backquote_ja: '`',
Digit1_ja: '1',
Digit2_ja: '2',
Digit3_ja: '3',
Digit4_ja: '4',
Digit5_ja: '5',
Digit6_ja: '6',
Digit7_ja: '7',
Digit8_ja: '8',
Digit9_ja: '9',
Digit0_ja: '0',
Minus_ja: '-',
Equal_ja: '=',
KeyQ_ja: 'た',
KeyW_ja: 'て',
KeyE_ja: 'い',
KeyR_ja: 'す',
KeyT_ja: 'か',
KeyY_ja: 'ん',
KeyU_ja: 'な',
KeyI_ja: 'に',
KeyO_ja: 'ら',
KeyP_ja: 'せ',
BracketLeft_ja: '[',
BracketRight_ja: ']',
Backslash_ja: '\\',
KeyA_ja: 'ち',
KeyS_ja: 'と',
KeyD_ja: 'し',
KeyF_ja: 'は',
KeyG_ja: 'き',
KeyH_ja: 'く',
KeyJ_ja: 'ま',
KeyK_ja: 'の',
KeyL_ja: 'り',
Semicolon_ja: ';',
Quote_ja: "'",
KeyZ_ja: 'つ',
KeyX_ja: 'さ',
KeyC_ja: 'そ',
KeyV_ja: 'ひ',
KeyB_ja: 'こ',
KeyN_ja: 'み',
KeyM_ja: 'も',
Comma_ja: ',',
Period_ja: '.',
Slash_ja: '/',
// AZERTY specific display keys
// Row 1
Backquote_azerty: '&#60;<br/>&#62;',