Salome HOME
Locale management: improve localization helper (fix problems detected withing bos...
authorvsr <vsr@opencascade.com>
Mon, 10 Feb 2020 15:01:08 +0000 (18:01 +0300)
committervsr <vsr@opencascade.com>
Mon, 10 Feb 2020 15:01:08 +0000 (18:01 +0300)
src/Basics/Basics_Utils.cxx
src/Basics/Basics_Utils.hxx

index 1896cd796c60e1684d7d6ef3d90a8ae2ae6b4018..88c24cf07889f0e2527535b7f6a2d37674f79a2a 100644 (file)
@@ -83,13 +83,24 @@ namespace Kernel_Utils
 
   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 )
@@ -108,7 +119,7 @@ namespace Kernel_Utils
 
   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);
@@ -123,7 +134,7 @@ namespace Kernel_Utils
 
   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);
index ddb351d3bc788b30cc9d35b6895db04a2b56d474..4920a7ddad46d3167b1616d9441feb68c2df068d 100644 (file)
@@ -45,9 +45,13 @@ namespace Kernel_Utils
   {
   public:
     Localizer();
+    Localizer(int, const char*);
     ~Localizer();
   private:
-    std::string myCurLocale;
+    void init(int, const char*);
+  private:
+    int myCategory;
+    std::string myOriginalLocale;
   };
   
   //! GUID type