-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
Localizer::Localizer()
{
- myCurLocale = setlocale(LC_NUMERIC, 0);
- setlocale(LC_NUMERIC, "C");
+ init(LC_NUMERIC, "C");
+ }
+
+ Localizer::Localizer(int category, const char* locale)
+ {
+ init(category, locale);
+ }
+
+ void Localizer::init(int category, const char* locale)
+ {
+ myCategory = category;
+ myOriginalLocale = setlocale(category, NULL);
+ setlocale(category, locale);
}
Localizer::~Localizer()
{
- setlocale(LC_NUMERIC, myCurLocale.c_str());
+ setlocale(myCategory, myOriginalLocale.c_str());
}
std::string GetGUID( GUIDtype type )
const wchar_t* decode(const char* encoded)
{
- setlocale(LC_ALL, "");
+ Localizer loc(LC_CTYPE, "");
size_t length = strlen(encoded) + sizeof(char);
wchar_t* decoded = new wchar_t[length];
memset( decoded, '\0', length);
const char* encode(const wchar_t* decoded)
{
- setlocale(LC_ALL, "");
+ Localizer loc(LC_CTYPE, "");
size_t length = std::wcslen(decoded) + sizeof(wchar_t);
char* encoded = new char[length];
memset( encoded, '\0', length);
char* utf8_encode(const wchar_t* encoded)
{
if (encoded == NULL) return NULL;
- int size_needed = WideCharToMultiByte(CP_UTF8, 0, encoded, std::wcslen(encoded), NULL, 0, NULL, NULL);
+ auto size_needed = WideCharToMultiByte(CP_UTF8, 0, encoded, (int)std::wcslen(encoded), NULL, 0, NULL, NULL);
char* strTo = new char[ size_needed + 1 ];
- WideCharToMultiByte(CP_UTF8, 0, encoded, std::wcslen(encoded), strTo, size_needed, NULL, NULL);
+ WideCharToMultiByte(CP_UTF8, 0, encoded, (int)std::wcslen(encoded), strTo, size_needed, NULL, NULL);
strTo[size_needed] = '\0';
return strTo;
}
wchar_t* utf8_decode(const char* decoded)
{
if (decoded == NULL) return NULL;
- int size_needed = MultiByteToWideChar(CP_UTF8, 0, decoded, strlen(decoded), NULL, 0);
+ auto size_needed = MultiByteToWideChar(CP_UTF8, 0, decoded, (int)strlen(decoded), NULL, 0);
wchar_t* wstrTo = new wchar_t[ size_needed + 1 ];
- MultiByteToWideChar(CP_UTF8, 0, decoded, strlen(decoded), wstrTo, size_needed);
+ MultiByteToWideChar(CP_UTF8, 0, decoded, (int)strlen(decoded), wstrTo, size_needed);
wstrTo[size_needed] = '\0';
return wstrTo;
}