diff --git a/indexer/feature_utils.cpp b/indexer/feature_utils.cpp index 5f60707db..d3b449071 100644 --- a/indexer/feature_utils.cpp +++ b/indexer/feature_utils.cpp @@ -6,6 +6,7 @@ #include "indexer/ftypes_matcher.hpp" #include "indexer/scales.hpp" +#include "platform/preferred_languages.hpp" #include "platform/localization.hpp" #include "platform/distance.hpp" @@ -124,6 +125,14 @@ bool IsNativeLang(feature::RegionData const & regionData, int8_t deviceLang) vector MakeLanguagesPriorityList(int8_t deviceLang, bool preferDefault) { vector langPriority = {deviceLang}; + for (auto const & lang : languages::GetPreferredLangIndexes()) + { + if (find(langPriority.begin(), langPriority.end(), lang) == langPriority.end()) + { + langPriority.push_back(lang); + } + } + if (preferDefault) langPriority.push_back(StrUtf8::kDefaultCode); diff --git a/platform/preferred_languages.cpp b/platform/preferred_languages.cpp index aa96c92e1..8a188759f 100644 --- a/platform/preferred_languages.cpp +++ b/platform/preferred_languages.cpp @@ -188,6 +188,22 @@ std::string GetCurrentMapLanguage() return languageCode; } +std::vector GetPreferredLangIndexes() +{ + std::vector langs = {}; + for (auto const & systemLanguage : GetSystemPreferred()) + { + auto normalizedLang = Normalize(systemLanguage); + int8_t lang = StringUtf8Multilang::GetLangIndex(normalizedLang); + if (lang != StringUtf8Multilang::kUnsupportedLanguageCode + && find(langs.begin(), langs.end(), lang) == langs.end()) + { + langs.push_back(lang); + } + } + return langs; +} + std::string GetTwine(std::string const & lang) { // Special cases for different Chinese variations. diff --git a/platform/preferred_languages.hpp b/platform/preferred_languages.hpp index 4a2c2d780..1ec78582e 100644 --- a/platform/preferred_languages.hpp +++ b/platform/preferred_languages.hpp @@ -25,6 +25,7 @@ std::string GetCurrentMapTwine(); std::string Normalize(std::string_view lang); std::string GetCurrentNorm(); std::string GetCurrentMapLanguage(); +std::vector GetPreferredLangIndexes(); buffer_vector const & GetSystemPreferred(); } // namespace languages