diff --git a/search/params.cpp b/search/params.cpp index 9e4f05e425..517b65a12f 100644 --- a/search/params.cpp +++ b/search/params.cpp @@ -30,8 +30,9 @@ void SearchParams::SetInputLanguage(string const & language) size_t delimPos = language.find("-"); if (delimPos == string::npos) delimPos = language.find("_"); - m_inputLanguageCode = StringUtf8Multilang::GetLangIndex(delimPos == string::npos - ? language: language.substr(0, delimPos)); + + m_inputLanguageCode = StringUtf8Multilang::GetLangIndex( + delimPos == string::npos ? language: language.substr(0, delimPos)); } bool SearchParams::IsNearMeMode() const @@ -40,4 +41,9 @@ bool SearchParams::IsNearMeMode() const return (m_mode == NearMe && m_validPos); } +bool SearchParams::IsLanguageValid() const +{ + return (m_inputLanguageCode != StringUtf8Multilang::UNSUPPORTED_LANGUAGE_CODE); +} + } // namespace search diff --git a/search/params.hpp b/search/params.hpp index a551a55043..fc011f7480 100644 --- a/search/params.hpp +++ b/search/params.hpp @@ -24,6 +24,7 @@ namespace search void SetInputLanguage(string const & language); bool IsNearMeMode() const; + bool IsLanguageValid() const; public: SearchCallbackT m_callback; diff --git a/search/search_engine.cpp b/search/search_engine.cpp index 66ea48d6d9..deccc1c70f 100644 --- a/search/search_engine.cpp +++ b/search/search_engine.cpp @@ -189,6 +189,8 @@ void Engine::SearchAsync() m_pQuery->SetViewport(arrRects, 2); m_pQuery->SetSearchInWorld(worldSearch); + if (params.IsLanguageValid()) + m_pQuery->SetInputLanguage(params.m_inputLanguageCode); Results res; diff --git a/search/search_query.cpp b/search/search_query.cpp index ed86e66d40..dcd058be7d 100644 --- a/search/search_query.cpp +++ b/search/search_query.cpp @@ -34,12 +34,13 @@ Query::Query(Index const * pIndex, m_pCategories(pCategories), m_pStringsToSuggest(pStringsToSuggest), m_pInfoGetter(pInfoGetter), - m_currentLang(StringUtf8Multilang::GetLangIndex("en")), m_position(empty_pos_value, empty_pos_value) { // m_viewport, m_viewportExtended are initialized as empty rects ASSERT ( m_pIndex, () ); + + SetPreferredLanguage("en"); } Query::~Query() @@ -90,6 +91,10 @@ void Query::SetViewport(m2::RectD viewport[], size_t count) void Query::SetPreferredLanguage(string const & lang) { m_currentLang = StringUtf8Multilang::GetLangIndex(lang); + + // Default initialization. + // If you want to reset input language, call SetInputLanguage before search. + m_inputLang = m_currentLang; } void Query::ClearCache() @@ -200,11 +205,12 @@ void Query::Search(string const & query, Results & res, unsigned int resultsNeed if (m_tokens.size() > 31) m_tokens.resize(31); - vector > langPriorities(3); + vector > langPriorities(4); langPriorities[0].push_back(m_currentLang); - langPriorities[1].push_back(StringUtf8Multilang::GetLangIndex("int_name")); - langPriorities[1].push_back(StringUtf8Multilang::GetLangIndex("en")); - langPriorities[2].push_back(StringUtf8Multilang::GetLangIndex("default")); + langPriorities[1].push_back(m_inputLang); + langPriorities[2].push_back(StringUtf8Multilang::GetLangIndex("int_name")); + langPriorities[2].push_back(StringUtf8Multilang::GetLangIndex("en")); + langPriorities[3].push_back(StringUtf8Multilang::GetLangIndex("default")); m_pKeywordsScorer.reset(new LangKeywordsScorer(langPriorities, m_tokens.data(), m_tokens.size(), &m_prefix)); @@ -617,6 +623,7 @@ void Query::SearchFeatures() unordered_set langs; langs.insert(m_currentLang); + langs.insert(m_inputLang); langs.insert(StringUtf8Multilang::GetLangIndex("int_name")); langs.insert(StringUtf8Multilang::GetLangIndex("en")); langs.insert(StringUtf8Multilang::GetLangIndex("default")); diff --git a/search/search_query.hpp b/search/search_query.hpp index 1e539f30a0..31c6d3e93f 100644 --- a/search/search_query.hpp +++ b/search/search_query.hpp @@ -58,6 +58,7 @@ public: inline void SetSearchInWorld(bool b) { m_worldSearch = b; } void SetPreferredLanguage(string const & lang); + inline void SetInputLanguage(int8_t lang) { m_inputLang = lang; } void Search(string const & query, Results & res, unsigned int resultsNeeded = 10);