[core] Respect system language order

Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
Yannik Bloscheck
2025-07-25 16:07:27 +02:00
committed by Yannik Bloscheck
parent b37572000f
commit dd949925f6
3 changed files with 26 additions and 0 deletions

View File

@@ -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<int8_t> MakeLanguagesPriorityList(int8_t deviceLang, bool preferDefault)
{
vector<int8_t> 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);

View File

@@ -188,6 +188,22 @@ std::string GetCurrentMapLanguage()
return languageCode;
}
std::vector<int8_t> GetPreferredLangIndexes()
{
std::vector<int8_t> 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.

View File

@@ -25,6 +25,7 @@ std::string GetCurrentMapTwine();
std::string Normalize(std::string_view lang);
std::string GetCurrentNorm();
std::string GetCurrentMapLanguage();
std::vector<int8_t> GetPreferredLangIndexes();
buffer_vector<std::string, 4> const & GetSystemPreferred();
} // namespace languages