Как понять, что пользователь забыл переключить язык (ошибся раскладкой)?
==========================================================================

 Есть строка поиска. Иногда пользователь может ошибиться и ввести русское слово на английской раскладке. Как это понять без выполнения лишних запросов (без выполнения поиска)? Первое, что приходит в голову, проверять на наличие символов, находящихся на месте кириллицы (хъжэбю). Но эти символы иногда могут встречаться и в обычном запросе (особенно апостроф). Есть ли готовые алгоритмы или функции (php)? 

 В итоге:  

1. Собрал все строки, которые могут быть найдены (получилось около 100 мегабайт).  

2. Построил список всех сочетаний из двух букв (aa, ab, ac, ..., zz).  

3. Сделал поиск всех сочетаний из пункта 2 в словах из пунтка 1 и сохранил список тех сочетаний, которые не были найдены (ни разу не встречаются). Получилось 165 несуществующих сочетаний.  

  

Теперь ищу в поисковых строках эти несуществующие сочетания. Если что-то найдено, то преобразую запрос в другую раскладку. 

 Для поиска использую сфинкс, тупо если в другой раскладке, что то найдено, а в текущей нет, то выдаю результаты для другой раскладки.  

До миллиона записей сфинкс выдает результаты быстрее чем 1 милисекунда. 

 Правильней всего, конечно, в случае отсутствия результатов выполнять поиск в другой раскладке, но если второй запрос делать совершенно не хочется, можно например по биграммам определять язык (это будет быстрее поиска по словам конкретного языка). 

 Как вариант покопаться в исходниках [XNeur](http://xneur.ru/downloads/), также здесь, на хабре, проскакивала [статья](http://habrahabr.ru/post/140351/) со странной реализацией этого алгоритма) 

 Как вариант — [habrahabr.ru/post/140351/](http://habrahabr.ru/post/140351/) 

 Почему не делать это в жаваскрипте?  

  

```
$('#txt').keyup(function(e){   
    if($(this).val().match(/([а-яёА-ЯЁ]+)/)){
        alert('Смените раскладку');
    }
});

```
 

 Самый простой способ — в случае отсутствия результатов поиска, делать повторную выборку прогнав вводимую строку через функцию ассоциаций раскладки типа str\_replace(['q', 'w', 'e', ....], ['й', 'ц', у'', ...], $queryString)  

Хотя анализ сочетаний правильнее, так что лучше комбинировать. 

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

 Есть еще вот такое решение:  

<https://code.google.com/p/php-lang-correct/>