Стандартное автоопределение клавиатуры почти всегда справляется, но некоторые русские слова всё-таки перекидывает на английскую раскладку (например: "шкаф" превращается в "irfa", а "кувшин" в "rediby", очень неприятно, если это ищут). Ну и специфические потребности никто не отменял.
Как ни странно, но отвечающий за эту радость класс CSearchLanguage поддерживает какую-никакую кастомизацию.
Копируем всё из папки /bitrix/modules/search/tools/ru/ в папку /bitrix/php_interface/ru/search/ (и аналогично с en версией). Папка local не поддерживается.
По этому пути ищется кастомный класс для этой петрушки и теперь он есть, но требует небольшой доработки. Добавляем в ru версию в файл language.php функцию
Теперь слово "шкаф" не заменяется на "irfa". Класс.
А в en версию аналогичный, но чуть другой:
Теперь и "irfa" вполне себе меняется на "шкаф".
Собственно вот и всё. Можно вписывать любые другие слова и наслаждаться жизнью.
(А ещё можно вынести словарь в отдельный файл и подтягивать значения из него, но ради пары слов я бы таким не занимался.)
Как ни странно, но отвечающий за эту радость класс CSearchLanguage поддерживает какую-никакую кастомизацию.
Копируем всё из папки /bitrix/modules/search/tools/ru/ в папку /bitrix/php_interface/ru/search/ (и аналогично с en версией). Папка local не поддерживается.
По этому пути ищется кастомный класс для этой петрушки и теперь он есть, но требует небольшой доработки. Добавляем в ru версию в файл language.php функцию
function PreGuessLanguage($text, $lang=false) { $stop_list = array( //сюда вписываем любые слова, которым не требуется автоопреление. Ключи важны, значения - любые, но мне так удобнее "шкаф" => "irfa", "шкафы" => "irfas", ); //Indicates that there is no own guess if(isset($stop_list[$text])) return true; else return false; //In subclasses you should return array("from" => lang, "to" => lang) to translate //or return true when no translation nedded //or parent::GuessLanguage for futher processing } |
Теперь слово "шкаф" не заменяется на "irfa". Класс.
А в en версию аналогичный, но чуть другой:
function PreGuessLanguage($text, $lang=false) { $stop_list = array( "irfa" => "шкаф", "irfas" => "шкафы", ); //Indicates that there is no own guess if(isset($stop_list[$text])) return array("from" => "en", "to" => "ru"); else return false; //In subclasses you should return array("from" => lang, "to" => lang) to translate //or return true when no translation nedded //or parent::GuessLanguage for futher processing } |
Теперь и "irfa" вполне себе меняется на "шкаф".
Собственно вот и всё. Можно вписывать любые другие слова и наслаждаться жизнью.
(А ещё можно вынести словарь в отдельный файл и подтягивать значения из него, но ради пары слов я бы таким не занимался.)