Quiero detectar que el teclado del usuario es inglés o persa cuando presiona teclas numéricas.
Estoy usando el siguiente código para teclas no numéricas, ¡pero no funciona en teclas numéricas!
<input type="text" onkeyup="findType(this)"> <script> function findType(element) { let char = new RegExp("[\u0600-\u06FF]"); if (char.test(element.value) === true) { element.style.direction = "rtl" } else { element.style.direction = "ltr" } } </script>Los dígitos persas del 0 al 9 unicode son de ۰ a ۹
una forma de abordar este problema es aprovechar navigator.language Aquí hay una referencia a la documentación
let keyboard = () => { let lang = navigator.language; if (lang === 'ar') { return 'arabic'; } } window.onload = keyboard;Esto funcionó cuando cambié el idioma predeterminado de mi navegador Chrome al árabe y pude detectar el cambio de idioma. Una nota rápida, no funcionó cuando habilité el teclado en mi MAC a árabe.
Una vez que hayamos detectado el idioma del teclado, puede completar el resto de sus tareas.
Para navegadores de Internet Explorer más antiguos, creo que necesita usar window.navigator.userLanguage dependiendo del nivel de soporte que requiera su tarea.
Otra idea podría ser probar el tipo de datos de la tecla que se presiona, asumiendo que los tipos de datos pueden ser diferentes de un país a otro.
let key_pressed = (e) => { let key = e.keyCode; return typeof key; } window.addEventListener('keydown', (e) => { let key = key_pressed(e); console.log(key); })