Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как сделать поиск по русски при вводе английских букв? (https://javascript.ru/forum/jquery/86328-kak-sdelat-poisk-po-russki-pri-vvode-anglijjskikh-bukv.html)

zap77 27.02.2025 07:24

Как сделать поиск по русски при вводе английских букв?
 
Вложений: 1
Привет.
Есть поиск по сайту - вот. Реализован с помощью библиотеки jQuery-autoComplete. Суть в том, что когда вводишь части подстрок, совпадающих с указанными в настройках, то появляются подсказки. Вот так:
https://javascript.ru/forum/attachme...d=174063045 3
Активирются эти подсказки примерно так:
$('#top-search').autoComplete({
    minChars: 2,
    source: function(term, suggest) {
        term = term.toLowerCase();
        var choices = [
            ...
            'Ремонт блока питания',
            'Ремонт компьютера',
            'Ремонт материнской платы',
            'Ремонт нетбука',
            'Ремонт ноутбука',
            ...
        ];
        var matches = [];
        for (i = 0; i < choices.length; i++)
            if (~choices[i].toLowerCase().indexOf(term)) matches.push(choices[i]);
        suggest(matches);
    }
});

Иногда раскладка клавиатуры путается и думаешь, что пишешь по-русски, но на самом деле по-английски. В яндексе когда так делаешь, то он сам исправляет написанное. Можно как-то и здесь такое на javascript сделать? Есть какие-то скрипты для этого на javascript? — Чтобы при ошибочном вводе с другой раскладкой скрипт понимал бы ошибочность и переводил на русский.

ksa 27.02.2025 08:42

Цитата:

Сообщение от zap77
Можно как-то и здесь такое на javascript сделать? Есть какие-то скрипты для этого на javascript?

Их навалом! :yes:

Вот например такой...
function translit(word){
	var answer = '';
	var converter = {
		'а': 'a',    'б': 'b',    'в': 'v',    'г': 'g',    'д': 'd',
		'е': 'e',    'ё': 'e',    'ж': 'zh',   'з': 'z',    'и': 'i',
		'й': 'y',    'к': 'k',    'л': 'l',    'м': 'm',    'н': 'n',
		'о': 'o',    'п': 'p',    'р': 'r',    'с': 's',    'т': 't',
		'у': 'u',    'ф': 'f',    'х': 'h',    'ц': 'c',    'ч': 'ch',
		'ш': 'sh',   'щ': 'sch',  'ь': '',     'ы': 'y',    'ъ': '',
		'э': 'e',    'ю': 'yu',   'я': 'ya',
 
		'А': 'A',    'Б': 'B',    'В': 'V',    'Г': 'G',    'Д': 'D',
		'Е': 'E',    'Ё': 'E',    'Ж': 'Zh',   'З': 'Z',    'И': 'I',
		'Й': 'Y',    'К': 'K',    'Л': 'L',    'М': 'M',    'Н': 'N',
		'О': 'O',    'П': 'P',    'Р': 'R',    'С': 'S',    'Т': 'T',
		'У': 'U',    'Ф': 'F',    'Х': 'H',    'Ц': 'C',    'Ч': 'Ch',
		'Ш': 'Sh',   'Щ': 'Sch',  'Ь': '',     'Ы': 'Y',    'Ъ': '',
		'Э': 'E',    'Ю': 'Yu',   'Я': 'Ya'
	};
 
	for (var i = 0; i < word.length; ++i ) {
		if (converter[word[i]] == undefined){
			answer += word[i];
		} else {
			answer += converter[word[i]];
		}
	}
 
	return answer;
}


Способ применения.

$('#submit').click(function(){
	$('#input').val(function(i, val){
		return translit(val);
	});
 
	return false;
});


Источник https://snipp.ru/js/translit-js

zap77 27.02.2025 13:39

Цитата:

Сообщение от ksa (Сообщение 557051)
Их навалом! :yes:

Вот например такой...

Ага. Т. е. надо взять и сопоставить все буквы с английской раскладкой русским буквам и передать полученное значение в функцию. Т. е. если человек вместо «ремонт» набирает это слово на английской раскладке «htvjyn», то берем его ввод, сопоставляем... Кажется, так получаться должно.

Хм... А если у него раскладка на клавиатуре немецкая или другого языка какого? Как определить тогда, какую таблицу соответствия выбирать?

ksa 27.02.2025 14:26

Цитата:

Сообщение от zap77
А если у него раскладка на клавиатуре немецкая или другого языка какого?

Делай другую таблицу соответствий, по примеру той, и будет тебе счастие. ;)

ksa 27.02.2025 14:29

zap77, вот у нас на форуме есть соответствующая тема https://javascript.ru/forum/jquery/3...raskladki.html

ksa 27.02.2025 14:33

Вот есть модуль для решения таких проблем...
https://github.com/alexanderkx/ai-switcher-translit

voraa 28.02.2025 09:13

Цитата:

Сообщение от ksa (Сообщение 557057)
Вот есть модуль для решения таких проблем...
https://github.com/alexanderkx/ai-switcher-translit

Это все не то. Пользователь ведь переключает раскладку обычными системными способами. И из браузера (js) никак не определить, какая раскладка сейчас включена.


Часовой пояс GMT +3, время: 03:50.