]> git.saurik.com Git - wxWidgets.git/commitdiff
use wxStrings in wxLocale methods, _() and wxGetTranslation(), so that it can be...
authorVáclav Slavík <vslavik@fastmail.fm>
Mon, 26 Mar 2007 21:05:04 +0000 (21:05 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Mon, 26 Mar 2007 21:05:04 +0000 (21:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45080 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/function.tex
docs/latex/wx/locale.tex
include/wx/intl.h
src/common/intl.cpp

index 8d04a686eb0cad4fa5993c75cc4e6dd0bdcc7335..709ffeaeea7f28f14568318ec675077cda1dadc0 100644 (file)
@@ -1620,11 +1620,11 @@ This function is deprecated, use \helpref{wxString}{wxstring} class instead.
 
 \membersection{::wxGetTranslation}\label{wxgettranslation}
 
 
 \membersection{::wxGetTranslation}\label{wxgettranslation}
 
-\func{const wxChar *}{wxGetTranslation}{\param{const wxChar* }{str},
-  \param{const wxChar* }{domain = NULL}}
+\func{const wxString\& }{wxGetTranslation}{\param{const wxString\& }{str},
+  \param{const wxString\&  }{domain = wxEmptyString}}
 
 
-\func{const wxChar *}{wxGetTranslation}{\param{const wxChar* }{str}, \param{const wxChar* }{strPlural}, \param{size\_t }{n},
-  \param{const wxChar* }{domain = NULL}}
+\func{const wxString\& }{wxGetTranslation}{\param{const wxString\& }{str}, \param{const wxString\& }{strPlural}, \param{size\_t }{n},
+  \param{const wxString\&  }{domain = wxEmptyString}}
 
 This function returns the translation of string {\it str} in the current
 \helpref{locale}{wxlocale}. If the string is not found in any of the loaded
 
 This function returns the translation of string {\it str} in the current
 \helpref{locale}{wxlocale}. If the string is not found in any of the loaded
@@ -1844,7 +1844,7 @@ even when \texttt{wxUSE\_PRINTF\_POS\_PARAMS} is 1.
 
 \membersection{\_}\label{underscore}
 
 
 \membersection{\_}\label{underscore}
 
-\func{const wxChar *}{\_}{\param{const char *}{s}}
+\func{const wxString\&}{\_}{\param{const wxString\&}{s}}
 
 This macro expands into a call to \helpref{wxGetTranslation}{wxgettranslation}
 function, so it marks the message for the extraction by {\tt xgettext} just as
 
 This macro expands into a call to \helpref{wxGetTranslation}{wxgettranslation}
 function, so it marks the message for the extraction by {\tt xgettext} just as
@@ -1856,7 +1856,7 @@ Don't confuse this macro with \helpref{\_T()}{underscoret}!
 
 \membersection{wxPLURAL}\label{wxplural}
 
 
 \membersection{wxPLURAL}\label{wxplural}
 
-\func{const wxChar *}{wxPLURAL}{\param{const char *}{sing}, \param{const char *}{plur}, \param{size\_t}{n}}
+\func{const wxString\&}{wxPLURAL}{\param{const wxString\&}{sing}, \param{const wxString\&}{plur}, \param{size\_t}{n}}
 
 This macro is identical to \helpref{\_()}{underscore} but for the plural variant
 of \helpref{wxGetTranslation}{wxgettranslation}.
 
 This macro is identical to \helpref{\_()}{underscore} but for the plural variant
 of \helpref{wxGetTranslation}{wxgettranslation}.
index d2d063c5c9ca99b1ceafddb002c1b2b7a35527a4..ba02d623085085badfa65d38f362a11365927260 100644 (file)
@@ -80,7 +80,7 @@ This is the default constructor and it does nothing to initialize the object:
 
 See \helpref{Init()}{wxlocaleinit} for parameters description.
 
 
 See \helpref{Init()}{wxlocaleinit} for parameters description.
 
-\func{}{wxLocale}{\param{const char }{*szName}, \param{const char }{*szShort = NULL}, \param{const char }{*szLocale = NULL}, \param{bool }{bLoadDefault = true}, \param{bool }{bConvertEncoding = false}}
+\func{}{wxLocale}{\param{const wxString\& }{name}, \param{const wxString\& }{short = wxEmptyString}, \param{const wxString\& }{locale = wxEmptyString}, \param{bool }{bLoadDefault = true}, \param{bool }{bConvertEncoding = false}}
 
 See \helpref{Init()}{wxlocaleinit} for parameters description.
 
 
 See \helpref{Init()}{wxlocaleinit} for parameters description.
 
@@ -104,9 +104,9 @@ set locale is restored and so the changes described in
 
 \membersection{wxLocale::AddCatalog}\label{wxlocaleaddcatalog}
 
 
 \membersection{wxLocale::AddCatalog}\label{wxlocaleaddcatalog}
 
-\func{bool}{AddCatalog}{\param{const char }{*szDomain}}
+\func{bool}{AddCatalog}{\param{const wxString\& }{domain}}
 
 
-\func{bool}{AddCatalog}{\param{const char }{*szDomain}, \param{wxLanguage}{msgIdLanguage}, \param{const char }{*msgIdCharset}}
+\func{bool}{AddCatalog}{\param{const wxString\& }{domain}, \param{wxLanguage}{msgIdLanguage}, \param{const wxString\& }{msgIdCharset}}
 
 Add a catalog for use with the current locale: it is searched for in standard
 places (current directory first, then the system one), but you may also prepend
 
 Add a catalog for use with the current locale: it is searched for in standard
 places (current directory first, then the system one), but you may also prepend
@@ -255,7 +255,7 @@ special meaning of \texttt{wxLANGUAGE\_DEFAULT}.
 
 \membersection{wxLocale::GetLocale}\label{wxlocalegetlocale}
 
 
 \membersection{wxLocale::GetLocale}\label{wxlocalegetlocale}
 
-\constfunc{const char*}{GetLocale}{\void}
+\constfunc{const wxString\& }{GetLocale}{\void}
 
 Returns the locale name as passed to the constructor or 
 \helpref{Init()}{wxlocaleinit}. This is full, human-readable name,
 
 Returns the locale name as passed to the constructor or 
 \helpref{Init()}{wxlocaleinit}. This is full, human-readable name,
@@ -265,7 +265,7 @@ e.g. "English" or "French".
 
 \membersection{wxLocale::GetName}\label{wxlocalegetname}
 
 
 \membersection{wxLocale::GetName}\label{wxlocalegetname}
 
-\constfunc{const wxString\&}{GetName}{\void}
+\constfunc{const wxString\& }{GetName}{\void}
 
 Returns the current short name for the locale (as given to the constructor or
 the Init() function).
 
 Returns the current short name for the locale (as given to the constructor or
 the Init() function).
@@ -273,9 +273,9 @@ the Init() function).
 
 \membersection{wxLocale::GetString}\label{wxlocalegetstring}
 
 
 \membersection{wxLocale::GetString}\label{wxlocalegetstring}
 
-\constfunc{const char*}{GetString}{\param{const char }{*szOrigString}, \param{const char }{*szDomain = NULL}}
+\constfunc{const wxString\& }{GetString}{\param{const wxString\& }{origString}, \param{const wxString\& }{domain = wxEmptyString}}
 
 
-\constfunc{const char*}{GetString}{\param{const char }{*szOrigString}, \param{const char }{*szOrigString2}, \param{size\_t }{n}, \param{const char }{*szDomain = NULL}}
+\constfunc{const wxString\& }{GetString}{\param{const wxString\& }{origString}, \param{const wxString\& }{origString2}, \param{size\_t }{n}, \param{const wxString\& }{domain = NULL}}
 
 Retrieves the translation for a string in all loaded domains unless the szDomain
 parameter is specified (and then only this catalog/domain is searched).
 
 Retrieves the translation for a string in all loaded domains unless the szDomain
 parameter is specified (and then only this catalog/domain is searched).
@@ -286,14 +286,14 @@ a string is not found; use \helpref{wxLogNull}{wxlogoverview} to suppress it).
 
 The second form is used when retrieving translation of string that has
 different singular and plural form in English or different plural forms in some
 
 The second form is used when retrieving translation of string that has
 different singular and plural form in English or different plural forms in some
-other language. It takes two extra arguments: \arg{szOrigString}
+other language. It takes two extra arguments: \arg{origString}
 parameter must contain the singular form of the string to be converted.
 It is also used as the key for the search in the catalog.
 parameter must contain the singular form of the string to be converted.
 It is also used as the key for the search in the catalog.
-The \arg{szOrigString2} parameter is the plural form (in English).
+The \arg{origString2} parameter is the plural form (in English).
 The parameter \arg{n} is used to determine the plural form.  If no
 The parameter \arg{n} is used to determine the plural form.  If no
-message catalog is found \arg{szOrigString} is returned if `n == 1',
-otherwise \arg{szOrigString2}.
-See \urlref{GNU gettext manual}{http://www.gnu.org/software/gettext/manual/html\_chapter/gettext\_10.html\#SEC150} for additional information on plural forms handling.
+message catalog is found \arg{origString} is returned if `n == 1',
+otherwise \arg{origString2}.
+See \urlref{GNU gettext manual}{http://www.gnu.org/manual/gettext/html\_chapter/gettext\_10.html\#SEC150} for additional information on plural forms handling.
 
 This method is called by the \helpref{wxGetTranslation}{wxgettranslation}
 function and \helpref{\_()}{underscore} macro.
 
 This method is called by the \helpref{wxGetTranslation}{wxgettranslation}
 function and \helpref{\_()}{underscore} macro.
@@ -306,9 +306,9 @@ added later override those added before.
 
 \membersection{wxLocale::GetHeaderValue}\label{wxlocalegetheadervalue}
 
 
 \membersection{wxLocale::GetHeaderValue}\label{wxlocalegetheadervalue}
 
-\constfunc{wxString}{GetHeaderValue}{\param{const char }{*szHeader}, \param{const char }{*szDomain = NULL}}
+\constfunc{wxString}{GetHeaderValue}{\param{const wxString\& }{header}, \param{const wxString\& }{domain = wxEmptyString}}
 
 
-Returns the header value for header \arg{szHeader}. The search for \arg{szHeader} is case sensitive. If an \arg{szDomain}
+Returns the header value for header \arg{header}. The search for \arg{header} is case sensitive. If an \arg{domain}
 is passed, this domain is searched. Else all domains will be searched until a header has been found.
 The return value is the value of the header if found. Else this will be empty.
 
 is passed, this domain is searched. Else all domains will be searched until a header has been found.
 The return value is the value of the header if found. Else this will be empty.
 
@@ -360,7 +360,7 @@ Returns \helpref{wxLanguage}{wxlanguage} value or
 \func{bool}{Init}{\param{int }{language = wxLANGUAGE\_DEFAULT}, \param{int }{flags =
                           wxLOCALE\_LOAD\_DEFAULT | wxLOCALE\_CONV\_ENCODING}}
 
 \func{bool}{Init}{\param{int }{language = wxLANGUAGE\_DEFAULT}, \param{int }{flags =
                           wxLOCALE\_LOAD\_DEFAULT | wxLOCALE\_CONV\_ENCODING}}
 
-\func{bool}{Init}{\param{const char }{*szName}, \param{const char }{*szShort = NULL}, \param{const char }{*szLocale = NULL}, \param{bool }{bLoadDefault = true}, \param{bool }{bConvertEncoding = false}}
+\func{bool}{Init}{\param{const wxString\& }{name}, \param{const wxString\& }{short = wxEmptyString}, \param{const wxString\& }{locale = wxEmptyString}, \param{bool }{bLoadDefault = true}, \param{bool }{bConvertEncoding = false}}
 
 The second form is deprecated, use the first one unless you know what you are
 doing. 
 
 The second form is deprecated, use the first one unless you know what you are
 doing. 
@@ -387,12 +387,12 @@ description of this behaviour. Note that this flag is meaningless in Unicode bui
 \end{twocollist}
 }
 
 \end{twocollist}
 }
 
-\docparam{szName}{The name of the locale. Only used in diagnostic messages.}
+\docparam{name}{The name of the locale. Only used in diagnostic messages.}
 
 
-\docparam{szShort}{The standard 2 letter locale abbreviation; it is used as the
+\docparam{short}{The standard 2 letter locale abbreviation; it is used as the
 directory prefix when looking for the message catalog files.}
 
 directory prefix when looking for the message catalog files.}
 
-\docparam{szLocale}{The parameter for the call to setlocale(). Note that it is
+\docparam{locale}{The parameter for the call to setlocale(). Note that it is
 platform-specific.}
 
 \docparam{bLoadDefault}{May be set to false to prevent loading of the message catalog
 platform-specific.}
 
 \docparam{bLoadDefault}{May be set to false to prevent loading of the message catalog
index 5d16e3a3e9db6b2ab6fd76d38fff1ef9522612f5..ba26a162954ddf12c3c4d4bbbd83a6fca2315331 100644 (file)
@@ -382,15 +382,15 @@ public:
     wxLocale() { DoCommonInit(); }
 
         // the ctor has a side effect of changing current locale
     wxLocale() { DoCommonInit(); }
 
         // the ctor has a side effect of changing current locale
-    wxLocale(const wxChar *szName,                               // name (for messages)
-             const wxChar *szShort = (const wxChar *) NULL,      // dir prefix (for msg files)
-             const wxChar *szLocale = (const wxChar *) NULL,     // locale (for setlocale)
+    wxLocale(const wxString& name,                               // name (for messages)
+             const wxString& shortName = wxEmptyString,      // dir prefix (for msg files)
+             const wxString& locale = wxEmptyString,     // locale (for setlocale)
              bool bLoadDefault = true,                           // preload wxstd.mo?
              bool bConvertEncoding = false)                      // convert Win<->Unix if necessary?
         {
             DoCommonInit();
 
              bool bLoadDefault = true,                           // preload wxstd.mo?
              bool bConvertEncoding = false)                      // convert Win<->Unix if necessary?
         {
             DoCommonInit();
 
-            Init(szName, szShort, szLocale, bLoadDefault, bConvertEncoding);
+            Init(name, shortName, locale, bLoadDefault, bConvertEncoding);
         }
 
     wxLocale(int language, // wxLanguage id or custom language
         }
 
     wxLocale(int language, // wxLanguage id or custom language
@@ -402,9 +402,9 @@ public:
         }
 
         // the same as a function (returns true on success)
         }
 
         // the same as a function (returns true on success)
-    bool Init(const wxChar *szName,
-              const wxChar *szShort = (const wxChar *) NULL,
-              const wxChar *szLocale = (const wxChar *) NULL,
+    bool Init(const wxString& name,
+              const wxString& shortName = wxEmptyString,
+              const wxString& locale = wxEmptyString,
               bool bLoadDefault = true,
               bool bConvertEncoding = false);
 
               bool bLoadDefault = true,
               bool bConvertEncoding = false);
 
@@ -435,7 +435,7 @@ public:
     bool IsOk() const { return m_pszOldLocale != NULL; }
 
     // returns locale name
     bool IsOk() const { return m_pszOldLocale != NULL; }
 
     // returns locale name
-    const wxChar *GetLocale() const { return m_strLocale; }
+    const wxString& GetLocale() const { return m_strLocale; }
 
     // return current locale wxLanguage value
     int GetLanguage() const { return m_language; }
 
     // return current locale wxLanguage value
     int GetLanguage() const { return m_language; }
@@ -462,15 +462,15 @@ public:
     // The loaded catalog will be used for message lookup by GetString().
     //
     // Returns 'true' if it was successfully loaded
     // The loaded catalog will be used for message lookup by GetString().
     //
     // Returns 'true' if it was successfully loaded
-    bool AddCatalog(const wxChar *szDomain);
-    bool AddCatalog(const wxChar *szDomain,
-                    wxLanguage msgIdLanguage, const wxChar *msgIdCharset);
+    bool AddCatalog(const wxString& domain);
+    bool AddCatalog(const wxString& domain,
+                    wxLanguage msgIdLanguage, const wxString& msgIdCharset);
 
     // check if the given locale is provided by OS and C run time
     static bool IsAvailable(int lang);
 
     // check if the given catalog is loaded
 
     // check if the given locale is provided by OS and C run time
     static bool IsAvailable(int lang);
 
     // check if the given catalog is loaded
-    bool IsLoaded(const wxChar *szDomain) const;
+    bool IsLoaded(const wxString& domain) const;
 
     // Retrieve the language info struct for the given language
     //
 
     // Retrieve the language info struct for the given language
     //
@@ -504,20 +504,20 @@ public:
     //
     // domains are searched in the last to first order, i.e. catalogs
     // added later override those added before.
     //
     // domains are searched in the last to first order, i.e. catalogs
     // added later override those added before.
-    virtual const wxChar *GetString(const wxChar *szOrigString,
-                                    const wxChar *szDomain = NULL) const;
+    virtual const wxString& GetString(const wxString& origString,
+                                      const wxString& domain = wxEmptyString) const;
     // plural form version of the same:
     // plural form version of the same:
-    virtual const wxChar *GetString(const wxChar *szOrigString,
-                                    const wxChar *szOrigString2,
-                                    size_t n,
-                                    const wxChar *szDomain = NULL) const;
+    virtual const wxString& GetString(const wxString& origString,
+                                      const wxString& origString2,
+                                      size_t n,
+                                      const wxString& domain = wxEmptyString) const;
 
     // Returns the current short name for the locale
     const wxString& GetName() const { return m_strShort; }
 
     // return the contents of .po file header
 
     // Returns the current short name for the locale
     const wxString& GetName() const { return m_strShort; }
 
     // return the contents of .po file header
-    wxString GetHeaderValue( const wxChar* szHeader,
-                             const wxChar* szDomain = NULL ) const;
+    wxString GetHeaderValue(const wxString& header,
+                            const wxString& domain = wxEmptyString) const;
 
     // These two methods are for internal use only. First one creates
     // ms_languagesDB if it doesn't already exist, second one destroys
 
     // These two methods are for internal use only. First one creates
     // ms_languagesDB if it doesn't already exist, second one destroys
@@ -527,7 +527,7 @@ public:
 
 private:
     // find catalog by name in a linked list, return NULL if !found
 
 private:
     // find catalog by name in a linked list, return NULL if !found
-    wxMsgCatalog  *FindCatalog(const wxChar *szDomain) const;
+    wxMsgCatalog *FindCatalog(const wxString& domain) const;
 
     // copy default table of languages from global static array to
     // m_langugagesInfo, called by InitLanguagesDB
 
     // copy default table of languages from global static array to
     // m_langugagesInfo, called by InitLanguagesDB
@@ -562,22 +562,25 @@ private:
 extern WXDLLIMPEXP_BASE wxLocale* wxGetLocale();
 
 // get the translation of the string in the current locale
 extern WXDLLIMPEXP_BASE wxLocale* wxGetLocale();
 
 // get the translation of the string in the current locale
-inline const wxChar *wxGetTranslation(const wxChar *sz, const wxChar* domain=NULL)
+inline const wxString& wxGetTranslation(const wxString& str,
+                                        const wxString& domain = wxEmptyString)
 {
     wxLocale *pLoc = wxGetLocale();
     if (pLoc)
 {
     wxLocale *pLoc = wxGetLocale();
     if (pLoc)
-        return pLoc->GetString(sz, domain);
+        return pLoc->GetString(str, domain);
     else
     else
-        return sz;
+        return str;
 }
 }
-inline const wxChar *wxGetTranslation(const wxChar *sz1, const wxChar *sz2,
-                                      size_t n, const wxChar* domain=NULL)
+inline const wxString& wxGetTranslation(const wxString& str1,
+                                        const wxString& str2,
+                                        size_t n,
+                                        const wxString& domain = wxEmptyString)
 {
     wxLocale *pLoc = wxGetLocale();
     if (pLoc)
 {
     wxLocale *pLoc = wxGetLocale();
     if (pLoc)
-        return pLoc->GetString(sz1, sz2, n, domain);
+        return pLoc->GetString(str1, str2, n, domain);
     else
     else
-        return n == 1 ? sz1 : sz2;
+        return n == 1 ? str1 : str2;
 }
 
 #else // !wxUSE_INTL
 }
 
 #else // !wxUSE_INTL
@@ -592,10 +595,10 @@ inline const wxChar *wxGetTranslation(const wxChar *sz1, const wxChar *sz2,
 
 #define wxTRANSLATE(str) _T(str)
 
 
 #define wxTRANSLATE(str) _T(str)
 
-inline const wxChar *wxGetTranslation(const wxChar *sz,
-                                      const wxChar *WXUNUSED(domain) = NULL)
+inline const wxString& wxGetTranslation(const wxString& str,
+                                        const wxString& WXUNUSED(domain) = wxEmptyString)
 {
 {
-    return sz;
+    return str;
 }
 
 #endif // wxUSE_INTL/!wxUSE_INTL
 }
 
 #endif // wxUSE_INTL/!wxUSE_INTL
index bac6f220533070bf5c94ec0d6b5fafa893ba934e..0dcec7965268914baa6e5bb50b6317d28bd7eecc 100644 (file)
@@ -962,14 +962,14 @@ public:
     ~wxMsgCatalog();
 
     // load the catalog from disk (szDirPrefix corresponds to language)
     ~wxMsgCatalog();
 
     // load the catalog from disk (szDirPrefix corresponds to language)
-    bool Load(const wxChar *szDirPrefix, const wxChar *szName,
-              const wxChar *msgIdCharset = NULL, bool bConvertEncoding = false);
+    bool Load(const wxString& dirPrefix, const wxString& name,
+              const wxString& msgIdCharset, bool bConvertEncoding = false);
 
     // get name of the catalog
     wxString GetName() const { return m_name; }
 
     // get the translated string: returns NULL if not found
 
     // get name of the catalog
     wxString GetName() const { return m_name; }
 
     // get the translated string: returns NULL if not found
-    const wxChar *GetString(const wxChar *sz, size_t n = size_t(-1)) const;
+    const wxString *GetString(const wxString& sz, size_t n = size_t(-1)) const;
 
     // public variable pointing to the next element in a linked list (or NULL)
     wxMsgCatalog *m_pNext;
 
     // public variable pointing to the next element in a linked list (or NULL)
     wxMsgCatalog *m_pNext;
@@ -1304,7 +1304,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
                             : new wxCSConv(msgIdCharset);
 
 #elif wxUSE_FONTMAP
                             : new wxCSConv(msgIdCharset);
 
 #elif wxUSE_FONTMAP
-    wxASSERT_MSG( msgIdCharset == NULL,
+    wxASSERT_MSG( msgIdCharset.empty(),
                   _T("non-ASCII msgid languages only supported if wxUSE_WCHAR_T=1") );
 
     wxEncodingConverter converter;
                   _T("non-ASCII msgid languages only supported if wxUSE_WCHAR_T=1") );
 
     wxEncodingConverter converter;
@@ -1374,7 +1374,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
                 msgstr = str;
 #else // !wxUSE_WCHAR_T
         #if wxUSE_FONTMAP
                 msgstr = str;
 #else // !wxUSE_WCHAR_T
         #if wxUSE_FONTMAP
-            if ( convertEncoding )
+            if ( bConvertEncoding )
                 msgstr = wxString(converter.Convert(str));
             else
         #endif
                 msgstr = wxString(converter.Convert(str));
             else
         #endif
@@ -1418,14 +1418,14 @@ wxMsgCatalog::~wxMsgCatalog()
     }
 }
 
     }
 }
 
-bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName,
-                        const wxChar *msgIdCharset, bool bConvertEncoding)
+bool wxMsgCatalog::Load(const wxString& dirPrefix, const wxString& name,
+                        const wxString& msgIdCharset, bool bConvertEncoding)
 {
     wxMsgCatalogFile file;
 
 {
     wxMsgCatalogFile file;
 
-    m_name = szName;
+    m_name = name;
 
 
-    if ( !file.Load(szDirPrefix, szName, m_pluralFormsCalculator) )
+    if ( !file.Load(dirPrefix, name, m_pluralFormsCalculator) )
         return false;
 
     file.FillHash(m_messages, msgIdCharset, bConvertEncoding);
         return false;
 
     file.FillHash(m_messages, msgIdCharset, bConvertEncoding);
@@ -1449,7 +1449,7 @@ bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName,
     return true;
 }
 
     return true;
 }
 
-const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const
+const wxString *wxMsgCatalog::GetString(const wxString& str, size_t n) const
 {
     int index = 0;
     if (n != size_t(-1))
 {
     int index = 0;
     if (n != size_t(-1))
@@ -1459,16 +1459,16 @@ const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const
     wxMessagesHash::const_iterator i;
     if (index != 0)
     {
     wxMessagesHash::const_iterator i;
     if (index != 0)
     {
-        i = m_messages.find(wxString(sz) + wxChar(index));   // plural
+        i = m_messages.find(wxString(str) + wxChar(index));   // plural
     }
     else
     {
     }
     else
     {
-        i = m_messages.find(sz);
+        i = m_messages.find(str);
     }
 
     if ( i != m_messages.end() )
     {
     }
 
     if ( i != m_messages.end() )
     {
-        return i->second.c_str();
+        return &i->second;
     }
     else
         return NULL;
     }
     else
         return NULL;
@@ -1512,26 +1512,27 @@ void wxLocale::DoCommonInit()
 }
 
 // NB: this function has (desired) side effect of changing current locale
 }
 
 // NB: this function has (desired) side effect of changing current locale
-bool wxLocale::Init(const wxChar *szName,
-                    const wxChar *szShort,
-                    const wxChar *szLocale,
-                    bool        bLoadDefault,
-                    bool        bConvertEncoding)
+bool wxLocale::Init(const wxString& name,
+                    const wxString& shortName,
+                    const wxString& locale,
+                    bool            bLoadDefault,
+                    bool            bConvertEncoding)
 {
   wxASSERT_MSG( !m_initialized,
                 _T("you can't call wxLocale::Init more than once") );
 
   m_initialized = true;
 {
   wxASSERT_MSG( !m_initialized,
                 _T("you can't call wxLocale::Init more than once") );
 
   m_initialized = true;
-  m_strLocale = szName;
-  m_strShort = szShort;
+  m_strLocale = name;
+  m_strShort = shortName;
   m_bConvertEncoding = bConvertEncoding;
   m_language = wxLANGUAGE_UNKNOWN;
 
   // change current locale (default: same as long name)
   m_bConvertEncoding = bConvertEncoding;
   m_language = wxLANGUAGE_UNKNOWN;
 
   // change current locale (default: same as long name)
-  if ( szLocale == NULL )
+  wxString szLocale(locale);
+  if ( szLocale.empty() )
   {
     // the argument to setlocale()
   {
     // the argument to setlocale()
-    szLocale = szShort;
+    szLocale = shortName;
 
     wxCHECK_MSG( szLocale, false, _T("no locale to set in wxLocale::Init()") );
   }
 
     wxCHECK_MSG( szLocale, false, _T("no locale to set in wxLocale::Init()") );
   }
@@ -1566,10 +1567,10 @@ bool wxLocale::Init(const wxChar *szName,
   if ( m_strShort.empty() ) {
     // FIXME I don't know how these 2 letter abbreviations are formed,
     //       this wild guess is surely wrong
   if ( m_strShort.empty() ) {
     // FIXME I don't know how these 2 letter abbreviations are formed,
     //       this wild guess is surely wrong
-    if ( szLocale && szLocale[0] )
+    if ( !szLocale.empty() )
     {
         m_strShort += (wxChar)wxTolower(szLocale[0]);
     {
         m_strShort += (wxChar)wxTolower(szLocale[0]);
-        if ( szLocale[1] )
+        if ( szLocale.length() > 1 )
             m_strShort += (wxChar)wxTolower(szLocale[1]);
     }
   }
             m_strShort += (wxChar)wxTolower(szLocale[1]);
     }
   }
@@ -1724,12 +1725,13 @@ bool wxLocale::Init(int language, int flags)
     }
 
 #ifdef __AIX__
     }
 
 #ifdef __AIX__
-    // at least in AIX 5.2 libc is buggy and the string returned from setlocale(LC_ALL)
-    // can't be passed back to it because it returns 6 strings (one for each locale
-    // category), i.e. for C locale we get back "C C C C C C"
+    // at least in AIX 5.2 libc is buggy and the string returned from
+    // setlocale(LC_ALL) can't be passed back to it because it returns 6
+    // strings (one for each locale category), i.e. for C locale we get back
+    // "C C C C C C"
     //
     //
-    // this contradicts IBM own docs but this is not of much help, so just work around
-    // it in the crudest possible manner
+    // this contradicts IBM own docs but this is not of much help, so just work
+    // around it in the crudest possible manner
     wxChar *p = wxStrchr((wxChar *)retloc, _T(' '));
     if ( p )
         *p = _T('\0');
     wxChar *p = wxStrchr((wxChar *)retloc, _T(' '));
     if ( p )
         *p = _T('\0');
@@ -1859,11 +1861,9 @@ bool wxLocale::Init(int language, int flags)
 #endif
 
 #ifndef WX_NO_LOCALE_SUPPORT
 #endif
 
 #ifndef WX_NO_LOCALE_SUPPORT
-    wxChar *szLocale = retloc ? wxStrdup(retloc) : NULL;
-    bool ret = Init(name, canonical, szLocale,
+    bool ret = Init(name, canonical, retloc,
                     (flags & wxLOCALE_LOAD_DEFAULT) != 0,
                     (flags & wxLOCALE_CONV_ENCODING) != 0);
                     (flags & wxLOCALE_LOAD_DEFAULT) != 0,
                     (flags & wxLOCALE_CONV_ENCODING) != 0);
-    free(szLocale);
 
     if (IsOk()) // setlocale() succeeded
         m_language = lang;
 
     if (IsOk()) // setlocale() succeeded
         m_language = lang;
@@ -2592,43 +2592,43 @@ wxLocale::~wxLocale()
 }
 
 // get the translation of given string in current locale
 }
 
 // get the translation of given string in current locale
-const wxChar *wxLocale::GetString(const wxChar *szOrigString,
-                                  const wxChar *szDomain) const
+const wxString& wxLocale::GetString(const wxString& origString,
+                                    const wxString& domain) const
 {
 {
-    return GetString(szOrigString, szOrigString, size_t(-1), szDomain);
+    return GetString(origString, origString, size_t(-1), domain);
 }
 
 }
 
-const wxChar *wxLocale::GetString(const wxChar *szOrigString,
-                                  const wxChar *szOrigString2,
-                                  size_t n,
-                                  const wxChar *szDomain) const
+const wxString& wxLocale::GetString(const wxString& origString,
+                                    const wxString& origString2,
+                                    size_t n,
+                                    const wxString& domain) const
 {
 {
-    if ( wxIsEmpty(szOrigString) )
-        return wxEmptyString;
+    if ( origString.empty() )
+        return origString;
 
 
-    const wxChar *pszTrans = NULL;
+    const wxString *trans = NULL;
     wxMsgCatalog *pMsgCat;
 
     wxMsgCatalog *pMsgCat;
 
-    if ( szDomain != NULL )
+    if ( !domain.empty() )
     {
     {
-        pMsgCat = FindCatalog(szDomain);
+        pMsgCat = FindCatalog(domain);
 
         // does the catalog exist?
         if ( pMsgCat != NULL )
 
         // does the catalog exist?
         if ( pMsgCat != NULL )
-            pszTrans = pMsgCat->GetString(szOrigString, n);
+            trans = pMsgCat->GetString(origString, n);
     }
     else
     {
         // search in all domains
         for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
         {
     }
     else
     {
         // search in all domains
         for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
         {
-            pszTrans = pMsgCat->GetString(szOrigString, n);
-            if ( pszTrans != NULL )   // take the first found
+            trans = pMsgCat->GetString(origString, n);
+            if ( trans != NULL )   // take the first found
                 break;
         }
     }
 
                 break;
         }
     }
 
-    if ( pszTrans == NULL )
+    if ( trans == NULL )
     {
 #ifdef __WXDEBUG__
         if ( !NoTransErr::Suppress() )
     {
 #ifdef __WXDEBUG__
         if ( !NoTransErr::Suppress() )
@@ -2637,83 +2637,80 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString,
 
             wxLogTrace(TRACE_I18N,
                        _T("string \"%s\"[%ld] not found in %slocale '%s'."),
 
             wxLogTrace(TRACE_I18N,
                        _T("string \"%s\"[%ld] not found in %slocale '%s'."),
-                       szOrigString, (long)n,
-                       szDomain
-                         ? (const wxChar*)wxString::Format(_T("domain '%s' "), szDomain).c_str()
+                       origString, (long)n,
+                       domain.empty()
+                         ? (const wxChar*)wxString::Format(_T("domain '%s' "), domain).c_str()
                          : _T(""),
                        m_strLocale.c_str());
         }
 #endif // __WXDEBUG__
 
         if (n == size_t(-1))
                          : _T(""),
                        m_strLocale.c_str());
         }
 #endif // __WXDEBUG__
 
         if (n == size_t(-1))
-            return szOrigString;
+            return origString;
         else
         else
-            return n == 1 ? szOrigString : szOrigString2;
+            return n == 1 ? origString : origString2;
     }
 
     }
 
-    return pszTrans;
+    return *trans;
 }
 
 }
 
-wxString wxLocale::GetHeaderValue( const wxChar* szHeader,
-                                   const wxChar* szDomain ) const
+wxString wxLocale::GetHeaderValue(const wxString& header,
+                                  const wxString& domain) const
 {
 {
-    if ( wxIsEmpty(szHeader) )
+    if ( header.empty() )
         return wxEmptyString;
 
         return wxEmptyString;
 
-    wxChar const * pszTrans = NULL;
+    const wxString *trans = NULL;
     wxMsgCatalog *pMsgCat;
 
     wxMsgCatalog *pMsgCat;
 
-    if ( szDomain != NULL )
+    if ( !domain.empty() )
     {
     {
-        pMsgCat = FindCatalog(szDomain);
+        pMsgCat = FindCatalog(domain);
 
         // does the catalog exist?
         if ( pMsgCat == NULL )
             return wxEmptyString;
 
 
         // does the catalog exist?
         if ( pMsgCat == NULL )
             return wxEmptyString;
 
-        pszTrans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
+        trans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
     }
     else
     {
         // search in all domains
         for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
         {
     }
     else
     {
         // search in all domains
         for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
         {
-            pszTrans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
-            if ( pszTrans != NULL )   // take the first found
+            trans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
+            if ( trans != NULL )   // take the first found
                 break;
         }
     }
 
                 break;
         }
     }
 
-    if ( wxIsEmpty(pszTrans) )
+    if ( !trans || trans->empty() )
       return wxEmptyString;
 
       return wxEmptyString;
 
-    wxChar const * pszFound = wxStrstr(pszTrans, szHeader);
-    if ( pszFound == NULL )
+    size_t found = trans->find(header);
+    if ( found == wxString::npos )
       return wxEmptyString;
 
       return wxEmptyString;
 
-    pszFound += wxStrlen(szHeader) + 2 /* ': ' */;
+    found += header.length() + 2 /* ': ' */;
 
     // Every header is separated by \n
 
 
     // Every header is separated by \n
 
-    wxChar const * pszEndLine = wxStrchr(pszFound, wxT('\n'));
-    if ( pszEndLine == NULL ) pszEndLine = pszFound + wxStrlen(pszFound);
-
-
-    // wxString( wxChar*, length);
-    wxString retVal( pszFound, pszEndLine - pszFound );
+    size_t endLine = trans->find(wxT('\n'), found);
+    size_t len = (endLine == wxString::npos) ?
+                 wxString::npos : (endLine - found);
 
 
-    return retVal;
+    return trans->substr(found, len);
 }
 
 
 // find catalog by name in a linked list, return NULL if !found
 }
 
 
 // find catalog by name in a linked list, return NULL if !found
-wxMsgCatalog *wxLocale::FindCatalog(const wxChar *szDomain) const
+wxMsgCatalog *wxLocale::FindCatalog(const wxString& domain) const
 {
     // linear search in the linked list
     wxMsgCatalog *pMsgCat;
     for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
     {
 {
     // linear search in the linked list
     wxMsgCatalog *pMsgCat;
     for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
     {
-        if ( wxStricmp(pMsgCat->GetName(), szDomain) == 0 )
+        if ( pMsgCat->GetName() == domain )
           return pMsgCat;
     }
 
           return pMsgCat;
     }
 
@@ -2759,21 +2756,21 @@ bool wxLocale::IsAvailable(int lang)
 }
 
 // check if the given catalog is loaded
 }
 
 // check if the given catalog is loaded
-bool wxLocale::IsLoaded(const wxChar *szDomain) const
+bool wxLocale::IsLoaded(const wxString& szDomain) const
 {
   return FindCatalog(szDomain) != NULL;
 }
 
 // add a catalog to our linked list
 {
   return FindCatalog(szDomain) != NULL;
 }
 
 // add a catalog to our linked list
-bool wxLocale::AddCatalog(const wxChar *szDomain)
+bool wxLocale::AddCatalog(const wxString& szDomain)
 {
 {
-    return AddCatalog(szDomain, wxLANGUAGE_ENGLISH_US, NULL);
+    return AddCatalog(szDomain, wxLANGUAGE_ENGLISH_US, wxEmptyString);
 }
 
 // add a catalog to our linked list
 }
 
 // add a catalog to our linked list
-bool wxLocale::AddCatalog(const wxChar *szDomain,
-                          wxLanguage    msgIdLanguage,
-                          const wxChar *msgIdCharset)
+bool wxLocale::AddCatalog(const wxString& szDomain,
+                          wxLanguage      msgIdLanguage,
+                          const wxString& msgIdCharset)
 
 {
   wxMsgCatalog *pMsgCat = new wxMsgCatalog;
 
 {
   wxMsgCatalog *pMsgCat = new wxMsgCatalog;