From 31b7522e2bc5a058e75bd710471198fb384e500b Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 26 Mar 2007 21:05:04 +0000 Subject: [PATCH 1/1] 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.45.2