]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/intl.cpp
use wxIsEmpty() instead of deprecated IsEmpty()
[wxWidgets.git] / src / common / intl.cpp
index b780f93803541749b196f106ba32045b2ab91d34..bac6f220533070bf5c94ec0d6b5fafa893ba934e 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__BORLAND__) && !defined(__WXDEBUG__)
-    // There's a bug in Borland's compiler that breaks wxLocale with -O2,
-    // so make sure that flag is not used for this file:
-    #pragma option -O1
-#endif
-
 #ifdef __EMX__
 // The following define is needed by Innotek's libc to
 // make the definition of struct localeconv available.
 #ifdef __EMX__
 // The following define is needed by Innotek's libc to
 // make the definition of struct localeconv available.
@@ -1025,13 +1019,18 @@ wxString GetMsgCatalogSubdirs(const wxChar *prefix, const wxChar *lang)
     wxString searchPath;
     searchPath << prefix << wxFILE_SEP_PATH << lang;
 
     wxString searchPath;
     searchPath << prefix << wxFILE_SEP_PATH << lang;
 
-    // under Unix, the message catalogs are supposed to go into LC_MESSAGES
-    // subdirectory so look there too
-#ifdef __UNIX__
+    // Under Unix, the message catalogs are supposed to go into LC_MESSAGES
+    // subdirectory so look there too. Note that we do it on all platforms
+    // and not just Unix, because it doesn't cost much to look into one more
+    // directory and doing it this way has two important benefits:
+    // a) we don't break compatibility with wx-2.6 and older by stopping to
+    //    look in a directory where the catalogs used to be and thus silently
+    //    breaking apps after they are recompiled against the latest wx
+    // b) it makes it possible to package app's support files in the same
+    //    way on all target platforms
     const wxString searchPathOrig(searchPath);
     searchPath << wxFILE_SEP_PATH << wxT("LC_MESSAGES")
                << wxPATH_SEP << searchPathOrig;
     const wxString searchPathOrig(searchPath);
     searchPath << wxFILE_SEP_PATH << wxT("LC_MESSAGES")
                << wxPATH_SEP << searchPathOrig;
-#endif // __UNIX__
 
     return searchPath;
 }
 
     return searchPath;
 }
@@ -1586,7 +1585,7 @@ bool wxLocale::Init(const wxChar *szName,
     // an error if this does not exist
     if ( bOk )
     {
     // an error if this does not exist
     if ( bOk )
     {
-      wxString port(wxPlatformInfo().GetPortIdName());
+      wxString port(wxPlatformInfo::Get().GetPortIdName());
       if ( !port.empty() )
       {
         AddCatalog(port.BeforeFirst(wxT('/')).MakeLower());
       if ( !port.empty() )
       {
         AddCatalog(port.BeforeFirst(wxT('/')).MakeLower());
@@ -1714,7 +1713,7 @@ bool wxLocale::Init(int language, int flags)
         {
             retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt);
             if ( !retloc )
         {
             retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt);
             if ( !retloc )
-                retloc = wxSetlocaleTryUTF(LC_ALL, locale.Left(2));
+                retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt.Left(2));
         }
     }
 
         }
     }
 
@@ -1899,14 +1898,14 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix)
         !wxGetEnv(wxT("LC_MESSAGES"), &langFull) &&
         !wxGetEnv(wxT("LANG"), &langFull))
     {
         !wxGetEnv(wxT("LC_MESSAGES"), &langFull) &&
         !wxGetEnv(wxT("LANG"), &langFull))
     {
-        // no language specified, threat it as English
-        return wxLANGUAGE_ENGLISH;
+        // no language specified, treat it as English
+        return wxLANGUAGE_ENGLISH_US;
     }
 
     if ( langFull == _T("C") || langFull == _T("POSIX") )
     {
     }
 
     if ( langFull == _T("C") || langFull == _T("POSIX") )
     {
-        // default C locale
-        return wxLANGUAGE_ENGLISH;
+        // default C locale is English too
+        return wxLANGUAGE_ENGLISH_US;
     }
 
     // the language string has the following form
     }
 
     // the language string has the following form
@@ -2467,7 +2466,13 @@ wxFontEncoding wxLocale::GetSystemEncoding()
         // (a.k.a. US-ASCII) which is arguably a bug but keep it like this for
         // backwards compatibility and just take care to not return
         // wxFONTENCODING_DEFAULT from here as this surely doesn't make sense
         // (a.k.a. US-ASCII) which is arguably a bug but keep it like this for
         // backwards compatibility and just take care to not return
         // wxFONTENCODING_DEFAULT from here as this surely doesn't make sense
-        if ( enc != wxFONTENCODING_MAX && enc != wxFONTENCODING_DEFAULT )
+        if ( enc == wxFONTENCODING_DEFAULT )
+        {
+            // we don't have wxFONTENCODING_ASCII, so use the closest one
+            return wxFONTENCODING_ISO8859_1;
+        }
+
+        if ( enc != wxFONTENCODING_MAX )
         {
             return enc;
         }
         {
             return enc;
         }
@@ -2500,7 +2505,9 @@ const wxLanguageInfo *wxLocale::GetLanguageInfo(int lang)
     {
         if ( ms_languagesDB->Item(i).Language == lang )
         {
     {
         if ( ms_languagesDB->Item(i).Language == lang )
         {
-            return &ms_languagesDB->Item(i);
+            // We need to create a temporary here in order to make this work with BCC in final build mode
+            wxLanguageInfo *ptr = &ms_languagesDB->Item(i);
+            return ptr;
         }
     }
 
         }
     }
 
@@ -2631,8 +2638,9 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString,
             wxLogTrace(TRACE_I18N,
                        _T("string \"%s\"[%ld] not found in %slocale '%s'."),
                        szOrigString, (long)n,
             wxLogTrace(TRACE_I18N,
                        _T("string \"%s\"[%ld] not found in %slocale '%s'."),
                        szOrigString, (long)n,
-                       szDomain ? wxString::Format(_T("domain '%s' "), szDomain).c_str()
-                                : _T(""),
+                       szDomain
+                         ? (const wxChar*)wxString::Format(_T("domain '%s' "), szDomain).c_str()
+                         : _T(""),
                        m_strLocale.c_str());
         }
 #endif // __WXDEBUG__
                        m_strLocale.c_str());
         }
 #endif // __WXDEBUG__
@@ -2719,7 +2727,7 @@ bool wxLocale::IsAvailable(int lang)
     const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang);
     wxCHECK_MSG( info, false, _T("invalid language") );
 
     const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang);
     wxCHECK_MSG( info, false, _T("invalid language") );
 
-#ifdef __WIN32__
+#if defined(__WIN32__)
     if ( !info->WinLang )
         return false;
 
     if ( !info->WinLang )
         return false;
 
@@ -2729,10 +2737,23 @@ bool wxLocale::IsAvailable(int lang)
                          SORT_DEFAULT),
                 LCID_INSTALLED
             ) )
                          SORT_DEFAULT),
                 LCID_INSTALLED
             ) )
-      return false;
-#else // !__WIN32__
-    // TODO: test if setlocale(info->CanonicalName) works under other OS?
-#endif // __WIN32__/!__WIN32__
+        return false;
+
+#elif defined(__UNIX__)
+    
+    // Test if setting the locale works, then set it back. 
+    wxMB2WXbuf oldLocale = wxSetlocale(LC_ALL, wxEmptyString);
+    wxMB2WXbuf tmp = wxSetlocaleTryUTF(LC_ALL, info->CanonicalName);
+    if ( !tmp )
+    {
+        // Some C libraries don't like xx_YY form and require xx only
+        tmp = wxSetlocaleTryUTF(LC_ALL, info->CanonicalName.Left(2));
+        if ( !tmp )
+            return false;
+    }
+    // restore the original locale
+    wxSetlocale(LC_ALL, oldLocale);    
+#endif 
 
     return true;
 }
 
     return true;
 }
@@ -2746,7 +2767,7 @@ bool wxLocale::IsLoaded(const wxChar *szDomain) const
 // add a catalog to our linked list
 bool wxLocale::AddCatalog(const wxChar *szDomain)
 {
 // add a catalog to our linked list
 bool wxLocale::AddCatalog(const wxChar *szDomain)
 {
-    return AddCatalog(szDomain, wxLANGUAGE_ENGLISH, NULL);
+    return AddCatalog(szDomain, wxLANGUAGE_ENGLISH_US, NULL);
 }
 
 // add a catalog to our linked list
 }
 
 // add a catalog to our linked list