Перевод в латиницу в JS

  1. 3 г. назад

    Господа, имею вопрос.
    Вот есть у меня сканер ШК. В режиме эмуляции клавиатуры. Работаю я с ним со своей веб-странички, пользую для этого JS. И всё бы ничего, но если штрих-коды содержат буквы, то данные он будет передавать в зависимости от раскладки клавиатуры. Т.е. шк вида VMW00563 примет вид МЬЦ00563.
    Есть возможность в JS всегда приводить кейкоды к латинице? Типа - если код символа не в таком-то диапазоне, то делать то-то…

    Ответы: (10)
  2. 01.09.2021 11:33:57 отредактировано Луч света

    https://snipp.ru/jquery/translit-js
    https://stackoverflow.com/questions/11404047/transliterating-cyrillic-to-latin-with-javascript-function

    Ответы: (5)
  3. str.replace('А','F')

    Ответы: (3) (14)
  4. (2) а по-человечески, чтобы одной функцией как-то штатно?.. Ну - с кириллицей ок. Но а если другие раскладки будут?

    Ответы: (5) (14)
  5. ХЗ :)
    Я с жабоскриптом на "Вы" вообще

  6. (1) во-первых это не вполне то, о чём я спрашивал. Во-вторых - (3)
    Я, кстати, на своём форуме аналогично отрабатывал данные от клиента. На веб-сервер шли коды символов, я их прогонял через функцию с массивом соответствий. Но, повторюсь, (3)

  7. Для кириллицы-то не долго отработать. Но поди попробуй весь юникод так переписать...

    Ответы: (7)
  8. (6) а ты разве не чисто для себя делаишь? :)

    Ответы: (8)
  9. (7) ради разнообразия - нет :)

  10. Просто не у всех клиентов EAN-13. Многие используют лоты, а там и 128, и чёрта лысого. Если под каждого отдельно писать, то крякнешь...

  11. (0)

    const ru = 'йцукенг';
    const en = 'qwerty';
    const input = 'куку123';
    const output = input.split('').map(char => en[ru.indexOf(char)] || char).join('')
    

    На выходе в output получилось "rere123"

    Ответы: (12)
  12. 01.09.2021 20:19:13 отредактировано webdev

    Другой варик функции замены:

    const output = input.replace(/./g, char => en[ru.indexOf(char)] || char);
  13. 01.09.2021 22:35:33 отредактировано sda553

    (10) и так для всех клавиатурных раскладок в мире. Молодец.
    С японской придется помучиться. Там по две кнопки надо мапить

    Ответы: (13)
  14. sda553 и так для всех клавиатурных раскладок в мире.

    Если ты совсем дебил, то можешь и для всех раскладок в мире сделать. Я не против.

  15. 01.09.2021 23:10:17 отредактировано webdev

    Дуб (2) а по-человечески, чтобы одной функцией как-то штатно?.. Ну - с кириллицей ок. Но а если другие раскладки будут?

    Тогда вот так можно:

    navigator.keyboard.getLayoutMap().then(keyboardLayoutMap => {
        document.onkeypress = function(e) {
            const symbol = keyboardLayoutMap.get(e.code);
            console.log(symbol );
        }; 
      });

    Этот код перехватывает все нажатия кнопок в документе в любой раскладке, и выводит в консоль латинские буквы и правильные символы.

    Ответы: (15) (16) (17)
  16. (14) вот за это решпект

  17. (14) стоп-стоп-стоп. Это кроссбраузерно, или чья-то фича? На мобильной опере или хроме должно работать?
    Так-то похоже на то что нужно...

    Ответы: (18)
  18. https://runebook.dev/ru/docs/dom/keyboard/getlayoutmap
    Заявлено, как экспериментальная фича в нескольких браузерах.
    В копилочку.
    (14) спасибо.

  19. Дуб navigator.keyboard.getLayoutMap()

    navigator.keyboard.getLayoutMap() - это экспериментальная фича.

    document.onkeypress, e.code - это кроссбраузерно, работает везде.

    e.code - там код нажатой клавиши, в виде строки типа: "KeyW" если нажали кнопку "ц" например. Можешь эти коды использовать для своих целей, без использования navigator.keyboard.getLayoutMap().

    navigator.keyboard.getLayoutMap() можешь запустить на своем компе и получить массив раскладки, и сохранить его в свой код в виде константы для последующего использования, как обходной вариант, типа так:

    navigator.keyboard.getLayoutMap().then(m => console.log(Array.from(m.entries())));

    результат:

    Ответы: (19)
  20. webdev document.onkeypress, e.code - это кроссбраузерно, работает везде

    Само собой. У меня данные от сканера через это и приходят.

    webdev navigator.keyboard.getLayoutMap() можешь запустить на своем компе и получить массив раскладки, и сохранить его в свой код в виде константы для последующего использования, как обходной вариант

    допустимо.
    Благодарю.

    Ответы: (20)
  21. Дуб Само собой. У меня данные от сканера через это и приходят.

    Сомневаюсь что ты используешь именно e.code, в этом вся суть.

    Ответы: (21) (22)
  22. (20) если в осях, то

    		function keypress_action(e){
    			clearTimeout(process_sc);
    			sc += from_cyr(String.fromCharCode(e.keyCode));
    			setTimeout(process_sc, sc_timeout);
    
    		}
    		document.onkeypress = keypress_action;
    
    Ответы: (22)
  23. Дуб (20) если в осях, то

    		function keypress_action(e){
    			clearTimeout(process_sc);
    			sc += from_cyr(String.fromCharCode(e.keyCode));
    			setTimeout(process_sc, sc_timeout);
    
    		}
    		document.onkeypress = keypress_action;
    

    Я про то и говорю.
    e.keyCode при разных раскладках разный, показывает код печатаемого символа, а e.code не зависит от раскладки, показывает код нажатой клавиши.

или зарегистрируйтесь чтобы ответить!