From ae846debd4d546f3b2c78a949ce237543f76dc80 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 27 Apr 2021 12:21:01 +0200 Subject: [PATCH] Add C++ current culture sync with localization system --- Source/Engine/Localization/Localization.cpp | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Source/Engine/Localization/Localization.cpp b/Source/Engine/Localization/Localization.cpp index 8148de07a..1de886590 100644 --- a/Source/Engine/Localization/Localization.cpp +++ b/Source/Engine/Localization/Localization.cpp @@ -10,6 +10,7 @@ #include "Engine/Content/Content.h" #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Serialization/Serialization.h" +#include class LocalizationService : public EngineService { @@ -163,6 +164,31 @@ void LocalizationService::OnLocalizationChanged() Instance.LocalizedStringTables.Add(table->Get(), table->Count()); } + // Change C++ locale (eg. used by fmt lib for values formatting) + { + char localeName[100]; + const auto& currentCulture = Instance.CurrentCulture.GetName(); + if (currentCulture.IsEmpty()) + { + localeName[0] = 0; + } + else + { + StringUtils::ConvertUTF162ANSI(currentCulture.GetText(), localeName, currentCulture.Length()); + for (int32 i = 0; i < currentCulture.Length(); i++) + if (localeName[i] == '-') + localeName[i] = '_'; + localeName[currentCulture.Length() + 0] = '.'; + localeName[currentCulture.Length() + 1] = 'U'; + localeName[currentCulture.Length() + 2] = 'T'; + localeName[currentCulture.Length() + 3] = 'F'; + localeName[currentCulture.Length() + 4] = '-'; + localeName[currentCulture.Length() + 5] = '8'; + localeName[currentCulture.Length() + 6] = 0; + } + std::locale::global(std::locale(localeName)); + } + // Send event Localization::LocalizationChanged(); }