VoxelEngine/src/util/platform.cpp
2024-08-10 01:37:48 +03:00

54 lines
1.3 KiB
C++

#include "platform.hpp"
#include <time.h>
#include <iomanip>
#include <iostream>
#include <sstream>
#include "typedefs.hpp"
#ifdef _WIN32
#include <Windows.h>
#include "stringutil.hpp"
void platform::configure_encoding() {
// set utf-8 encoding to console output
SetConsoleOutputCP(CP_UTF8);
setvbuf(stdout, nullptr, _IOFBF, 1000);
}
std::string platform::detect_locale() {
LCID lcid = GetThreadLocale();
wchar_t preferredLocaleName[LOCALE_NAME_MAX_LENGTH]; // locale name format:
// ll-CC
if (LCIDToLocaleName(
lcid, preferredLocaleName, LOCALE_NAME_MAX_LENGTH, 0
) == 0) {
std::cerr
<< "error in platform::detect_locale! LCIDToLocaleName failed."
<< std::endl;
}
// ll_CC format
return util::wstr2str_utf8(preferredLocaleName)
.replace(2, 1, "_")
.substr(0, 5);
}
#else
void platform::configure_encoding() {
}
std::string platform::detect_locale() {
std::string programLocaleName = setlocale(LC_ALL, nullptr);
std::string preferredLocaleName =
setlocale(LC_ALL, ""); // locale name format: ll_CC.encoding
setlocale(LC_ALL, programLocaleName.c_str());
return preferredLocaleName.substr(0, 5);
}
#endif