]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/intl.cpp
applied the bit's of #473508 that were still relevant, and fixed a couple of
[wxWidgets.git] / src / common / intl.cpp
index 5e03cbdc18233d250b4d75459618e59fb4761dfc..9875b2f1684df160026fae941e4a369911abcf53 100644 (file)
@@ -615,7 +615,12 @@ bool wxLocale::Init(const wxChar *szName,
   if ( m_strShort.IsEmpty() ) {
     // FIXME I don't know how these 2 letter abbreviations are formed,
     //       this wild guess is surely wrong
   if ( m_strShort.IsEmpty() ) {
     // FIXME I don't know how these 2 letter abbreviations are formed,
     //       this wild guess is surely wrong
-    m_strShort = tolower(szLocale[0]) + tolower(szLocale[1]);
+    if ( szLocale[0] )
+    {
+        m_strShort += (wxChar)wxTolower(szLocale[0]);
+        if ( szLocale[1] )
+            m_strShort += (wxChar)wxTolower(szLocale[1]);
+    }
   }
 
   // save the old locale to be able to restore it later
   }
 
   // save the old locale to be able to restore it later
@@ -796,7 +801,7 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix)
         return wxLANGUAGE_ENGLISH;
     }
 
         return wxLANGUAGE_ENGLISH;
     }
 
-    if ( langFull == _T("C") )
+    if ( langFull == _T("C") || langFull == _T("POSIX") )
     {
         // default C locale
         return wxLANGUAGE_ENGLISH;
     {
         // default C locale
         return wxLANGUAGE_ENGLISH;
@@ -804,18 +809,31 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix)
 
     // the language string has the following form
     //
 
     // the language string has the following form
     //
-    //      lang[_LANG[.encoding]]
+    //      lang[_LANG][.encoding][@modifier]
+    //
+    // (see environ(5) in the Open Unix specification)
     //
     //
-    // where lang is the primary language, LANG is a sublang
+    // where lang is the primary language, LANG is a sublang/territory,
+    // encoding is the charset to use and modifier "allows the user to select
+    // a specific instance of localization data within a single category"
     //
     // for example, the following strings are valid:
     //      fr
     //      fr_FR
     //      de_DE.iso88591
     //
     // for example, the following strings are valid:
     //      fr
     //      fr_FR
     //      de_DE.iso88591
+    //      de_DE@euro
+    //      de_DE.iso88591@euro
 
     // for now we don't use the encoding, although we probably should (doing
     // translations of the msg catalogs on the fly as required) (TODO)
 
     // for now we don't use the encoding, although we probably should (doing
     // translations of the msg catalogs on the fly as required) (TODO)
-    langFull = langFull.BeforeFirst(_T('.'));
+    //
+    // we don't use the modifiers neither but we probably should translate
+    // "euro" into iso885915
+    size_t posEndLang = langFull.find_first_of(_T("@."));
+    if ( posEndLang != wxString::npos )
+    {
+        langFull.Truncate(posEndLang);
+    }
 
     // in addition to the format above, we also can have full language names
     // in LANG env var - for example, SuSE is known to use LANG="german" - so
 
     // in addition to the format above, we also can have full language names
     // in LANG env var - for example, SuSE is known to use LANG="german" - so
@@ -1372,12 +1390,13 @@ const wxMB2WXbuf wxLocale::GetString(const wxChar *szOrigString,
 
     return (wxMB2WXbuf)(szOrigString);
   }
 
     return (wxMB2WXbuf)(szOrigString);
   }
-  else
-  {
-    return wxConvertMB2WX(pszTrans); // or preferably wxCSConv(charset).cMB2WX(pszTrans) or something,
-                                     // a macro similar to wxConvertMB2WX could be written for that
-  }
 
 
+  // or preferably wxCSConv(charset).cMB2WX(pszTrans) or something, a macro
+  // similar to wxConvertMB2WX could be written for that
+
+  return wxConvertMB2WX(pszTrans);
+
+  // undo the hack from the beginning of this function
   #undef szOrgString
 }
 
   #undef szOrgString
 }