]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/intl.cpp
Changed AppendCommon (called by all Append methods) so it doesn't
[wxWidgets.git] / src / common / intl.cpp
index ee598103ead3db3b4ee002cc2e099d29242257c3..f21ab6188762b0a7afe4eb58eda91cf63afc88d3 100644 (file)
@@ -28,6 +28,8 @@
     #pragma hdrstop
 #endif
 
+#if wxUSE_INTL
+
 // standard headers
 #include  <locale.h>
 #include  <ctype.h>
@@ -38,6 +40,7 @@
 #include "wx/intl.h"
 #include "wx/file.h"
 #include "wx/log.h"
+#include "wx/debug.h"
 #include "wx/utils.h"
 
 #include <stdlib.h>
 // simple types
 // ----------------------------------------------------------------------------
 
-// FIXME adjust if necessary
+// this should *not* be wxChar, this type must have exactly 8 bits!
 typedef unsigned char size_t8;
-typedef unsigned long size_t32;
+
+#ifdef __WXMSW__
+    #if defined(__WIN16__)
+        typedef unsigned long size_t32;
+    #elif defined(__WIN32__)
+        typedef unsigned int size_t32;
+    #else
+        // Win64 will have different type sizes
+        #error "Please define a 32 bit type"
+    #endif
+#else // !Windows
+    // SIZEOF_XXX are defined by configure
+    #if defined(SIZEOF_INT) && (SIZEOF_INT == 4)
+        typedef unsigned int size_t32;
+    #elif defined(SIZEOF_LONG) && (SIZEOF_LONG == 4)
+        typedef unsigned long size_t32;
+    #else
+        // assume sizeof(int) == 4 - what else can we do
+        typedef unsigned int size_t32;
+
+        // ... but at least check it during run time
+        static class IntSizeChecker
+        {
+        public:
+            IntSizeChecker()
+            {
+                // Asserting a sizeof directly causes some compilers to
+                // issue a "using constant in a conditional expression" warning
+                size_t                   intsize = sizeof(int);
+
+                wxASSERT_MSG( intsize == 4,
+                              "size_t32 is incorrectly defined!" );
+            }
+        } intsizechecker;
+    #endif
+#endif // Win/!Win
 
 // ----------------------------------------------------------------------------
 // constants
@@ -263,9 +301,18 @@ static wxString GetFullSearchPath(const wxChar *lang)
 }
 
 // open disk file and read in it's contents
-bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName)
+bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName0)
 {
+   /* We need to handle locales like  de_AT.iso-8859-1
+      For this we first chop off the .CHARSET specifier and ignore it.
+      FIXME: UNICODE SUPPORT: must use CHARSET specifier!
+   */
+   wxString szName = szName0;
+   if(szName.Find('.') != -1) // contains a dot
+      szName = szName.Left(szName.Find('.'));
+   
   // FIXME VZ: I forgot the exact meaning of LC_PATH - anyone to remind me?
+  // KB: search path where to find the mo files, probably : delimited
 #if 0
   const wxChar *pszLcPath = wxGetenv("LC_PATH");
   if ( pszLcPath != NULL )
@@ -291,20 +338,22 @@ bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName)
   // not yet be loaded (and it's normal)
   //
   // (we're using an object because we have several return paths)
+
   NoTransErr noTransErr;
+//  Then why do you translate at all? Just use _T() and not _(). RR.
 
   wxLogVerbose(_("looking for catalog '%s' in path '%s'."),
-               szName, searchPath.c_str());
+               szName.c_str(), searchPath.c_str());
 
   wxString strFullName;
   if ( !wxFindFileInPath(&strFullName, searchPath, strFile) ) {
-    wxLogWarning(_("catalog file for domain '%s' not found."), szName);
+    wxLogWarning(_("catalog file for domain '%s' not found."), szName.c_str());
     return FALSE;
   }
 
   // open file
   wxLogVerbose(_("using catalog '%s' from '%s'."),
-             szName, strFullName.c_str());
+             szName.c_str(), strFullName.c_str());
 
   wxFile fileMsg(strFullName);
   if ( !fileMsg.IsOpened() )
@@ -484,7 +533,7 @@ const wxMB2WXbuf wxLocale::GetString(const wxChar *szOrigString,
       return szDomain;
 
   const char *pszTrans = NULL;
-  const wxWX2MBbuf szOrgString = wxConv_libc.cWX2MB(szOrigString);
+  const wxWX2MBbuf szOrgString = wxConvCurrent->cWX2MB(szOrigString);
 
   wxMsgCatalog *pMsgCat;
   if ( szDomain != NULL ) {
@@ -531,7 +580,7 @@ const wxMB2WXbuf wxLocale::GetString(const wxChar *szOrigString,
     return (wxMB2WXbuf)(szOrigString);
   }
   else
-    return (wxMB2WXbuf)(wxConv_libc.cMB2WX(pszTrans));
+    return (wxMB2WXbuf)(wxConvCurrent->cMB2WX(pszTrans));
 }
 
 // find catalog by name in a linked list, return NULL if !found
@@ -615,3 +664,6 @@ wxLocale *wxSetLocale(wxLocale *pLocale)
   g_pLocale = pLocale;
   return pOld;
 }
+
+#endif // wxUSE_INTL
+