From 31b7522e2bc5a058e75bd710471198fb384e500b Mon Sep 17 00:00:00 2001
From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= <vslavik@fastmail.fm>
Date: Mon, 26 Mar 2007 21:05:04 +0000
Subject: [PATCH] use wxStrings in wxLocale methods, _() and
 wxGetTranslation(), so that it can be used with any string literals

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45080 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/function.tex |  12 +--
 docs/latex/wx/locale.tex   |  36 ++++-----
 include/wx/intl.h          |  65 ++++++++-------
 src/common/intl.cpp        | 161 ++++++++++++++++++-------------------
 4 files changed, 137 insertions(+), 137 deletions(-)

diff --git a/docs/latex/wx/function.tex b/docs/latex/wx/function.tex
index 8d04a686eb..709ffeaeea 100644
--- a/docs/latex/wx/function.tex
+++ b/docs/latex/wx/function.tex
@@ -1620,11 +1620,11 @@ This function is deprecated, use \helpref{wxString}{wxstring} class instead.
 
 \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
@@ -1844,7 +1844,7 @@ even when \texttt{wxUSE\_PRINTF\_POS\_PARAMS} is 1.
 
 \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
@@ -1856,7 +1856,7 @@ Don't confuse this macro with \helpref{\_T()}{underscoret}!
 
 \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}.
diff --git a/docs/latex/wx/locale.tex b/docs/latex/wx/locale.tex
index d2d063c5c9..ba02d62308 100644
--- a/docs/latex/wx/locale.tex
+++ b/docs/latex/wx/locale.tex
@@ -80,7 +80,7 @@ This is the default constructor and it does nothing to initialize the object:
 
 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.
 
@@ -104,9 +104,9 @@ set locale is restored and so the changes described in
 
 \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
@@ -255,7 +255,7 @@ special meaning of \texttt{wxLANGUAGE\_DEFAULT}.
 
 \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,
@@ -265,7 +265,7 @@ e.g. "English" or "French".
 
 \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).
@@ -273,9 +273,9 @@ the Init() function).
 
 \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).
@@ -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
-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.
-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
-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.
@@ -306,9 +306,9 @@ added later override those added before.
 
 \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.
 
@@ -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{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. 
@@ -387,12 +387,12 @@ description of this behaviour. Note that this flag is meaningless in Unicode bui
 \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.}
 
-\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
diff --git a/include/wx/intl.h b/include/wx/intl.h
index 5d16e3a3e9..ba26a16295 100644
--- a/include/wx/intl.h
+++ b/include/wx/intl.h
@@ -382,15 +382,15 @@ public:
     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();
 
-            Init(szName, szShort, szLocale, bLoadDefault, bConvertEncoding);
+            Init(name, shortName, locale, bLoadDefault, bConvertEncoding);
         }
 
     wxLocale(int language, // wxLanguage id or custom language
@@ -402,9 +402,9 @@ public:
         }
 
         // 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);
 
@@ -435,7 +435,7 @@ public:
     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; }
@@ -462,15 +462,15 @@ public:
     // 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
-    bool IsLoaded(const wxChar *szDomain) const;
+    bool IsLoaded(const wxString& domain) const;
 
     // 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.
-    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:
-    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
-    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
@@ -527,7 +527,7 @@ public:
 
 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
@@ -562,22 +562,25 @@ private:
 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)
-        return pLoc->GetString(sz, domain);
+        return pLoc->GetString(str, domain);
     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)
-        return pLoc->GetString(sz1, sz2, n, domain);
+        return pLoc->GetString(str1, str2, n, domain);
     else
-        return n == 1 ? sz1 : sz2;
+        return n == 1 ? str1 : str2;
 }
 
 #else // !wxUSE_INTL
@@ -592,10 +595,10 @@ inline const wxChar *wxGetTranslation(const wxChar *sz1, const wxChar *sz2,
 
 #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
diff --git a/src/common/intl.cpp b/src/common/intl.cpp
index bac6f22053..0dcec79652 100644
--- a/src/common/intl.cpp
+++ b/src/common/intl.cpp
@@ -962,14 +962,14 @@ public:
     ~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
-    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;
@@ -1304,7 +1304,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
                             : 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;
@@ -1374,7 +1374,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
                 msgstr = str;
 #else // !wxUSE_WCHAR_T
         #if wxUSE_FONTMAP
-            if ( convertEncoding )
+            if ( bConvertEncoding )
                 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;
 
-    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);
@@ -1449,7 +1449,7 @@ bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName,
     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))
@@ -1459,16 +1459,16 @@ const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const
     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
     {
-        i = m_messages.find(sz);
+        i = m_messages.find(str);
     }
 
     if ( i != m_messages.end() )
     {
-        return i->second.c_str();
+        return &i->second;
     }
     else
         return NULL;
@@ -1512,26 +1512,27 @@ void wxLocale::DoCommonInit()
 }
 
 // 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;
-  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)
-  if ( szLocale == NULL )
+  wxString szLocale(locale);
+  if ( szLocale.empty() )
   {
     // the argument to setlocale()
-    szLocale = szShort;
+    szLocale = shortName;
 
     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 ( szLocale && szLocale[0] )
+    if ( !szLocale.empty() )
     {
         m_strShort += (wxChar)wxTolower(szLocale[0]);
-        if ( szLocale[1] )
+        if ( szLocale.length() > 1 )
             m_strShort += (wxChar)wxTolower(szLocale[1]);
     }
   }
@@ -1724,12 +1725,13 @@ bool wxLocale::Init(int language, int flags)
     }
 
 #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');
@@ -1859,11 +1861,9 @@ bool wxLocale::Init(int language, int flags)
 #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);
-    free(szLocale);
 
     if (IsOk()) // setlocale() succeeded
         m_language = lang;
@@ -2592,43 +2592,43 @@ wxLocale::~wxLocale()
 }
 
 // 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;
 
-    if ( szDomain != NULL )
+    if ( !domain.empty() )
     {
-        pMsgCat = FindCatalog(szDomain);
+        pMsgCat = FindCatalog(domain);
 
         // 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 )
         {
-            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;
         }
     }
 
-    if ( pszTrans == NULL )
+    if ( trans == NULL )
     {
 #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'."),
-                       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))
-            return szOrigString;
+            return origString;
         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;
 
-    wxChar const * pszTrans = NULL;
+    const wxString *trans = NULL;
     wxMsgCatalog *pMsgCat;
 
-    if ( szDomain != NULL )
+    if ( !domain.empty() )
     {
-        pMsgCat = FindCatalog(szDomain);
+        pMsgCat = FindCatalog(domain);
 
         // 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 )
         {
-            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;
         }
     }
 
-    if ( wxIsEmpty(pszTrans) )
+    if ( !trans || trans->empty() )
       return wxEmptyString;
 
-    wxChar const * pszFound = wxStrstr(pszTrans, szHeader);
-    if ( pszFound == NULL )
+    size_t found = trans->find(header);
+    if ( found == wxString::npos )
       return wxEmptyString;
 
-    pszFound += wxStrlen(szHeader) + 2 /* ': ' */;
+    found += header.length() + 2 /* ': ' */;
 
     // 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
-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 )
     {
-        if ( wxStricmp(pMsgCat->GetName(), szDomain) == 0 )
+        if ( pMsgCat->GetName() == domain )
           return pMsgCat;
     }
 
@@ -2759,21 +2756,21 @@ bool wxLocale::IsAvailable(int lang)
 }
 
 // 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
-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
-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;
-- 
2.50.0

