{"id":391,"date":"2026-05-02T16:06:10","date_gmt":"2026-05-02T16:06:10","guid":{"rendered":"https:\/\/keyboardflow.com\/?page_id=391"},"modified":"2026-05-02T16:06:10","modified_gmt":"2026-05-02T16:06:10","slug":"finnish","status":"publish","type":"page","link":"https:\/\/keyboardflow.com\/index.php\/finnish\/","title":{"rendered":"Finnish"},"content":{"rendered":"\n<style>\n:root {\n    --kb-bg: #1a1a1a; \/* Black *\/\n    --key-main: #ffffff;\n    --key-text: #0f172a;\n    --accent-red: #DD0000; \/* Red *\/\n    --accent-gold: #FFCE00; \/* Gold *\/\n    --accent-soft: #fffbeb;\n    --key-shadow: #cbd5e1;\n}\n\n.app-container {\n    width: 98%;\n    max-width: 1400px;\n    background: #f8fafc;\n    border-radius: 12px;\n    padding: 15px;\n    margin: 20px auto;\n    box-shadow: 0 4px 6px -1px rgb(0 0 0 \/ 0.1);\n    font-family: sans-serif;\n}\n\n.keyboard {\n    background: var(--kb-bg);\n    padding: 15px;\n    border-radius: 12px;\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n    user-select: none;\n}\n\n.row {\n    display: flex;\n    justify-content: center;\n    gap: 5px;\n}\n\n.key {\n    flex: 1;\n    min-width: 40px;\n    max-width: 70px;\n    height: 55px;\n    background: var(--key-main);\n    border-radius: 6px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    cursor: pointer;\n    border-bottom: 3px solid var(--key-shadow);\n    transition: all 0.1s ease;\n}\n\n.key.active-press {\n    transform: translateY(2px);\n    border-bottom-width: 1px;\n    background: var(--accent-soft);\n}\n\n.key.modifier {\n    background: #e2e8f0;\n    font-size: 12px;\n    max-width: 100px;\n    font-weight: bold;\n}\n\n.key.space {\n    max-width: 500px;\n    flex: 4;\n}\n\n.eng {\n    position: absolute;\n    top: 3px;\n    right: 5px;\n    font-size: 10px;\n    color: #94a3b8;\n}\n\n.normal {\n    font-size: 18px;\n    font-weight: 600;\n    color: var(--key-text);\n}\n\n.shift-val {\n    position: absolute;\n    bottom: 3px;\n    left: 5px;\n    font-size: 11px;\n    color: var(--accent-red);\n}\n\ntextarea#germanInput {\n    width: 100%;\n    margin-top: 20px;\n    height: 250px;\n    font-size: 24px;\n    padding: 20px;\n    border: 2px solid #e2e8f0;\n    border-radius: 8px;\n    line-height: 1.6;\n    box-sizing: border-box;\n}\n<\/style>\n\n<div class=\"app-container\">\n    <div id=\"gkb\" class=\"keyboard\"><\/div>\n    <textarea id=\"germanInput\" placeholder=\"Aloita kirjoittaminen t\u00e4st\u00e4...\"><\/textarea>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n\n\/\/ \u2705 G\nconst imap = {\n    '1':['1','!'],'2':['2','\"'],'3':['3','#'],'4':['4','\u00a4'],\n    '5':['5','%'],'6':['6','&'],'7':['7','\/'],'8':['8','('],\n    '9':['9',')'],'0':['0','='],'-':['+','?'], '=':['\u00b4','`'],\n    'q':['q','Q'],'w':['w','W'],'e':['e','E'],'r':['r','R'],\n    't':['t','T'],'y':['y','Y'],'u':['u','U'],'i':['i','I'],\n    'o':['o','O'],'p':['p','P'], '[':['\u00e5','\u00c5'],']':['^','\u00a8'],\n    'a':['a','A'],'s':['s','S'],'d':['d','D'],'f':['f','F'],\n    'g':['g','G'],'h':['h','H'],'j':['j','J'],'k':['k','K'],\n    'l':['l','L'],';':['\u00f6','\u00d6'],\"'\":['\u00e4','\u00c4'],\n    'z':['z','Z'],'x':['x','X'],'c':['c','C'],'v':['v','V'],\n    'b':['b','B'],'n':['n','N'],'m':['m','M'],\n    ',':[',',';'],'.':['.',':'],'\/':['-','_']\n};\n\n\/\/ Layout structure\nconst rows = [\n    ['1','2','3','4','5','6','7','8','9','0','-','=','backspace'],\n    ['tab','q','w','e','r','t','y','u','i','o','p','[',']'],\n    ['caps','a','s','d','f','g','h','j','k','l',';',\"'\",'enter'],\n    ['shift','z','x','c','v','b','n','m',',','.','\/','shift'],\n    ['space']\n];\n\nconst kb = document.getElementById('gkb');\nconst input = document.getElementById('germanInput');\n\nrows.forEach(row => {\n    const rowDiv = document.createElement('div');\n    rowDiv.className = 'row';\n\n    row.forEach(key => {\n        const keyDiv = document.createElement('div');\n        keyDiv.className = 'key';\n        keyDiv.dataset.key = key.toLowerCase();\n\n        if (['backspace','tab','caps','enter','shift'].includes(key))\n            keyDiv.classList.add('modifier');\n        if (key === 'space') keyDiv.classList.add('space');\n\n        if (imap[key]) {\n            keyDiv.innerHTML = `\n                <span class=\"eng\">${key.toUpperCase()}<\/span>\n                <span class=\"normal\">${imap[key][0]}<\/span>\n                <span class=\"shift-val\">${imap[key][1]}<\/span>\n            `;\n        } else {\n            keyDiv.innerHTML = `<span>${key.toUpperCase()}<\/span>`;\n        }\n\n        keyDiv.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            handleKey(key, e.shiftKey);\n        });\n\n        rowDiv.appendChild(keyDiv);\n    });\n    kb.appendChild(rowDiv);\n});\n\nfunction handleKey(key, shift) {\n    const start = input.selectionStart;\n    const end = input.selectionEnd;\n    let char = '';\n\n    if (imap[key]) {\n        char = shift ? imap[key][1] : imap[key][0];\n    } else if (key === 'space') char = ' ';\n    else if (key === 'enter') char = '\\n';\n    else if (key === 'backspace') {\n        input.setRangeText('', start === end ? Math.max(0, start - 1) : start, end, 'end');\n        input.focus();\n        return;\n    }\n\n    if (char) {\n        input.setRangeText(char, start, end, 'end');\n    }\n\n    input.focus();\n    input.scrollTop = input.scrollHeight;\n}\n\nwindow.addEventListener('keydown', (e) => {\n    const key = e.key.toLowerCase();\n    const targetKey = key === ' ' ? 'space' : key;\n\n    if (imap[targetKey] || targetKey === 'space' || targetKey === 'enter' || targetKey === 'backspace') {\n        if (document.activeElement === input) {\n            e.preventDefault();\n            handleKey(targetKey, e.shiftKey);\n        }\n    }\n\n    const el = document.querySelector(`.key[data-key=\"${targetKey}\"]`);\n    if (el) el.classList.add('active-press');\n});\n\nwindow.addEventListener('keyup', (e) => {\n    const key = e.key.toLowerCase();\n    const targetKey = key === ' ' ? 'space' : key;\n    const el = document.querySelector(`.key[data-key=\"${targetKey}\"]`);\n    if (el) el.classList.remove('active-press');\n});\n\n});\n<\/script>\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-391","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Finnish - Keyboard Flow<\/title>\n<meta name=\"description\" content=\"Type Finnish characters like \u00c4 and \u00d6 effortlessly with our free Finnish Virtual Keyboard (Suomalainen n\u00e4pp\u00e4imist\u00f6). Designed for those using non-Finnish hardware, this tool allows you to write in Finnish instantly without changing your system settings. Perfect for students, expats, and professionals who need reliable access to the Finnish QWERTY layout online.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/keyboardflow.com\/index.php\/finnish\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Finnish - Keyboard Flow\" \/>\n<meta property=\"og:description\" content=\"Type Finnish characters like \u00c4 and \u00d6 effortlessly with our free Finnish Virtual Keyboard (Suomalainen n\u00e4pp\u00e4imist\u00f6). Designed for those using non-Finnish hardware, this tool allows you to write in Finnish instantly without changing your system settings. Perfect for students, expats, and professionals who need reliable access to the Finnish QWERTY layout online.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/keyboardflow.com\/index.php\/finnish\/\" \/>\n<meta property=\"og:site_name\" content=\"Keyboard Flow\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/keyboardflow.com\\\/index.php\\\/finnish\\\/\",\"url\":\"https:\\\/\\\/keyboardflow.com\\\/index.php\\\/finnish\\\/\",\"name\":\"Finnish - Keyboard Flow\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/keyboardflow.com\\\/#website\"},\"datePublished\":\"2026-05-02T16:06:10+00:00\",\"description\":\"Type Finnish characters like \u00c4 and \u00d6 effortlessly with our free Finnish Virtual Keyboard (Suomalainen n\u00e4pp\u00e4imist\u00f6). Designed for those using non-Finnish hardware, this tool allows you to write in Finnish instantly without changing your system settings. Perfect for students, expats, and professionals who need reliable access to the Finnish QWERTY layout online.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/keyboardflow.com\\\/index.php\\\/finnish\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/keyboardflow.com\\\/index.php\\\/finnish\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/keyboardflow.com\\\/index.php\\\/finnish\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/keyboardflow.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Finnish\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/keyboardflow.com\\\/#website\",\"url\":\"https:\\\/\\\/keyboardflow.com\\\/\",\"name\":\"Keyboard Flow\",\"description\":\"Find your local keyboard\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/keyboardflow.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Finnish - Keyboard Flow","description":"Type Finnish characters like \u00c4 and \u00d6 effortlessly with our free Finnish Virtual Keyboard (Suomalainen n\u00e4pp\u00e4imist\u00f6). Designed for those using non-Finnish hardware, this tool allows you to write in Finnish instantly without changing your system settings. Perfect for students, expats, and professionals who need reliable access to the Finnish QWERTY layout online.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/keyboardflow.com\/index.php\/finnish\/","og_locale":"en_US","og_type":"article","og_title":"Finnish - Keyboard Flow","og_description":"Type Finnish characters like \u00c4 and \u00d6 effortlessly with our free Finnish Virtual Keyboard (Suomalainen n\u00e4pp\u00e4imist\u00f6). Designed for those using non-Finnish hardware, this tool allows you to write in Finnish instantly without changing your system settings. Perfect for students, expats, and professionals who need reliable access to the Finnish QWERTY layout online.","og_url":"https:\/\/keyboardflow.com\/index.php\/finnish\/","og_site_name":"Keyboard Flow","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/keyboardflow.com\/index.php\/finnish\/","url":"https:\/\/keyboardflow.com\/index.php\/finnish\/","name":"Finnish - Keyboard Flow","isPartOf":{"@id":"https:\/\/keyboardflow.com\/#website"},"datePublished":"2026-05-02T16:06:10+00:00","description":"Type Finnish characters like \u00c4 and \u00d6 effortlessly with our free Finnish Virtual Keyboard (Suomalainen n\u00e4pp\u00e4imist\u00f6). Designed for those using non-Finnish hardware, this tool allows you to write in Finnish instantly without changing your system settings. Perfect for students, expats, and professionals who need reliable access to the Finnish QWERTY layout online.","breadcrumb":{"@id":"https:\/\/keyboardflow.com\/index.php\/finnish\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/keyboardflow.com\/index.php\/finnish\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/keyboardflow.com\/index.php\/finnish\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/keyboardflow.com\/"},{"@type":"ListItem","position":2,"name":"Finnish"}]},{"@type":"WebSite","@id":"https:\/\/keyboardflow.com\/#website","url":"https:\/\/keyboardflow.com\/","name":"Keyboard Flow","description":"Find your local keyboard","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/keyboardflow.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/pages\/391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/comments?post=391"}],"version-history":[{"count":1,"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/pages\/391\/revisions"}],"predecessor-version":[{"id":393,"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/pages\/391\/revisions\/393"}],"wp:attachment":[{"href":"https:\/\/keyboardflow.com\/index.php\/wp-json\/wp\/v2\/media?parent=391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}