From 3a02f6e1d46db2766b35db5463e545c179f67be3 Mon Sep 17 00:00:00 2001 From: Rudy Huyn Date: Mon, 11 Mar 2019 00:33:43 -0700 Subject: [PATCH] Use the current locale to sort country names --- src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp index 4bb4f727..f42e3a73 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp +++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp @@ -9,6 +9,7 @@ #include "Common/LocalizationSettings.h" #include "Common/TraceLogger.h" #include "UnitConverterDataConstants.h" +#include using namespace CalculatorApp; using namespace CalculatorApp::Common; @@ -547,9 +548,15 @@ bool CurrencyDataLoader::TryParseStaticData(_In_ String^ rawJson, _Inout_ vector } // TODO - MSFT 8533667: this sort will be replaced by a WinRT call to sort localized strings - sort(begin(staticData), end(staticData), [](CurrencyStaticData unit1, CurrencyStaticData unit2) + + auto loc = std::locale(""); //Use the user-preferred locale to sort country names + const std::collate& coll = std::use_facet >(loc); + sort(begin(staticData), end(staticData), [&coll](CurrencyStaticData unit1, CurrencyStaticData unit2) { - return unit1.countryName < unit2.countryName; + auto country1 = unit1.countryName.data(); + auto country2 = unit2.countryName.data(); + return coll.compare(country1, country1 + unit1.countryName.length(), + country2, country2 + unit2.countryName.length()) < 0; }); return true;