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
This commit is contained in:
Václav Slavík
2007-03-26 21:05:04 +00:00
parent f5f93ea573
commit 31b7522e2b
4 changed files with 137 additions and 137 deletions

View 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}, \func{const wxString\& }{wxGetTranslation}{\param{const wxString\& }{str},
\param{const wxChar* }{domain = NULL}} \param{const wxString\& }{domain = wxEmptyString}}
\func{const wxChar *}{wxGetTranslation}{\param{const wxChar* }{str}, \param{const wxChar* }{strPlural}, \param{size\_t }{n}, \func{const wxString\& }{wxGetTranslation}{\param{const wxString\& }{str}, \param{const wxString\& }{strPlural}, \param{size\_t }{n},
\param{const wxChar* }{domain = NULL}} \param{const wxString\& }{domain = wxEmptyString}}
This function returns the translation of string {\it str} in the current 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 \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} This macro expands into a call to \helpref{wxGetTranslation}{wxgettranslation}
function, so it marks the message for the extraction by {\tt xgettext} just as 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 This macro is identical to \helpref{\_()}{underscore} but for the plural variant
of \helpref{wxGetTranslation}{wxgettranslation}. of \helpref{wxGetTranslation}{wxgettranslation}.

View 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 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 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 Returns the locale name as passed to the constructor or
\helpref{Init()}{wxlocaleinit}. This is full, human-readable name, \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 Returns the current short name for the locale (as given to the constructor or
the Init() function). 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 Retrieves the translation for a string in all loaded domains unless the szDomain
parameter is specified (and then only this catalog/domain is searched). 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 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 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. 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. 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', message catalog is found \arg{origString} is returned if `n == 1',
otherwise \arg{szOrigString2}. otherwise \arg{origString2}.
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. 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} This method is called by the \helpref{wxGetTranslation}{wxgettranslation}
function and \helpref{\_()}{underscore} macro. 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. 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. 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 = \func{bool}{Init}{\param{int }{language = wxLANGUAGE\_DEFAULT}, \param{int }{flags =
wxLOCALE\_LOAD\_DEFAULT | wxLOCALE\_CONV\_ENCODING}} 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 The second form is deprecated, use the first one unless you know what you are
doing. 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.} platform-specific.}
\docparam{bLoadDefault}{May be set to false to prevent loading of the message catalog \docparam{bLoadDefault}{May be set to false to prevent loading of the message catalog

View File

@@ -382,15 +382,15 @@ public:
wxLocale() { DoCommonInit(); } wxLocale() { DoCommonInit(); }
// the ctor has a side effect of changing current locale // the ctor has a side effect of changing current locale
wxLocale(const wxChar *szName, // name (for messages) wxLocale(const wxString& name, // name (for messages)
const wxChar *szShort = (const wxChar *) NULL, // dir prefix (for msg files) const wxString& shortName = wxEmptyString, // dir prefix (for msg files)
const wxChar *szLocale = (const wxChar *) NULL, // locale (for setlocale) const wxString& locale = wxEmptyString, // locale (for setlocale)
bool bLoadDefault = true, // preload wxstd.mo? bool bLoadDefault = true, // preload wxstd.mo?
bool bConvertEncoding = false) // convert Win<->Unix if necessary? bool bConvertEncoding = false) // convert Win<->Unix if necessary?
{ {
DoCommonInit(); 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, bool Init(const wxString& name,
const wxChar *szShort = (const wxChar *) NULL, const wxString& shortName = wxEmptyString,
const wxChar *szLocale = (const wxChar *) NULL, const wxString& locale = wxEmptyString,
bool bLoadDefault = true, bool bLoadDefault = true,
bool bConvertEncoding = false); bool bConvertEncoding = false);
@@ -435,7 +435,7 @@ public:
bool IsOk() const { return m_pszOldLocale != NULL; } bool IsOk() const { return m_pszOldLocale != NULL; }
// returns locale name // returns locale name
const wxChar *GetLocale() const { return m_strLocale; } const wxString& GetLocale() const { return m_strLocale; }
// return current locale wxLanguage value // return current locale wxLanguage value
int GetLanguage() const { return m_language; } int GetLanguage() const { return m_language; }
@@ -462,15 +462,15 @@ public:
// The loaded catalog will be used for message lookup by GetString(). // The loaded catalog will be used for message lookup by GetString().
// //
// Returns 'true' if it was successfully loaded // Returns 'true' if it was successfully loaded
bool AddCatalog(const wxChar *szDomain); bool AddCatalog(const wxString& domain);
bool AddCatalog(const wxChar *szDomain, bool AddCatalog(const wxString& domain,
wxLanguage msgIdLanguage, const wxChar *msgIdCharset); wxLanguage msgIdLanguage, const wxString& msgIdCharset);
// check if the given locale is provided by OS and C run time // check if the given locale is provided by OS and C run time
static bool IsAvailable(int lang); static bool IsAvailable(int lang);
// check if the given catalog is loaded // 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 // domains are searched in the last to first order, i.e. catalogs
// added later override those added before. // added later override those added before.
virtual const wxChar *GetString(const wxChar *szOrigString, virtual const wxString& GetString(const wxString& origString,
const wxChar *szDomain = NULL) const; const wxString& domain = wxEmptyString) const;
// plural form version of the same: // plural form version of the same:
virtual const wxChar *GetString(const wxChar *szOrigString, virtual const wxString& GetString(const wxString& origString,
const wxChar *szOrigString2, const wxString& origString2,
size_t n, size_t n,
const wxChar *szDomain = NULL) const; const wxString& domain = wxEmptyString) const;
// Returns the current short name for the locale // Returns the current short name for the locale
const wxString& GetName() const { return m_strShort; } const wxString& GetName() const { return m_strShort; }
// return the contents of .po file header // return the contents of .po file header
wxString GetHeaderValue( const wxChar* szHeader, wxString GetHeaderValue(const wxString& header,
const wxChar* szDomain = NULL ) const; const wxString& domain = wxEmptyString) const;
// These two methods are for internal use only. First one creates // These two methods are for internal use only. First one creates
// ms_languagesDB if it doesn't already exist, second one destroys // ms_languagesDB if it doesn't already exist, second one destroys
@@ -527,7 +527,7 @@ public:
private: private:
// 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 *FindCatalog(const wxChar *szDomain) const; wxMsgCatalog *FindCatalog(const wxString& domain) const;
// copy default table of languages from global static array to // copy default table of languages from global static array to
// m_langugagesInfo, called by InitLanguagesDB // m_langugagesInfo, called by InitLanguagesDB
@@ -562,22 +562,25 @@ private:
extern WXDLLIMPEXP_BASE wxLocale* wxGetLocale(); extern WXDLLIMPEXP_BASE wxLocale* wxGetLocale();
// get the translation of the string in the current locale // 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(); wxLocale *pLoc = wxGetLocale();
if (pLoc) 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, inline const wxString& wxGetTranslation(const wxString& str1,
size_t n, const wxChar* domain=NULL) const wxString& str2,
size_t n,
const wxString& domain = wxEmptyString)
{ {
wxLocale *pLoc = wxGetLocale(); wxLocale *pLoc = wxGetLocale();
if (pLoc) 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, inline const wxString& wxGetTranslation(const wxString& str,
const wxChar *WXUNUSED(domain) = NULL) const wxString& WXUNUSED(domain) = wxEmptyString)
{ {
return sz; return str;
} }
#endif // wxUSE_INTL/!wxUSE_INTL #endif // wxUSE_INTL/!wxUSE_INTL

View File

@@ -962,14 +962,14 @@ public:
~wxMsgCatalog(); ~wxMsgCatalog();
// load the catalog from disk (szDirPrefix corresponds to language) // load the catalog from disk (szDirPrefix corresponds to language)
bool Load(const wxChar *szDirPrefix, const wxChar *szName, bool Load(const wxString& dirPrefix, const wxString& name,
const wxChar *msgIdCharset = NULL, bool bConvertEncoding = false); const wxString& msgIdCharset, bool bConvertEncoding = false);
// get name of the catalog // get name of the catalog
wxString GetName() const { return m_name; } wxString GetName() const { return m_name; }
// get the translated string: returns NULL if not found // 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) // public variable pointing to the next element in a linked list (or NULL)
wxMsgCatalog *m_pNext; wxMsgCatalog *m_pNext;
@@ -1304,7 +1304,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
: new wxCSConv(msgIdCharset); : new wxCSConv(msgIdCharset);
#elif wxUSE_FONTMAP #elif wxUSE_FONTMAP
wxASSERT_MSG( msgIdCharset == NULL, wxASSERT_MSG( msgIdCharset.empty(),
_T("non-ASCII msgid languages only supported if wxUSE_WCHAR_T=1") ); _T("non-ASCII msgid languages only supported if wxUSE_WCHAR_T=1") );
wxEncodingConverter converter; wxEncodingConverter converter;
@@ -1374,7 +1374,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
msgstr = str; msgstr = str;
#else // !wxUSE_WCHAR_T #else // !wxUSE_WCHAR_T
#if wxUSE_FONTMAP #if wxUSE_FONTMAP
if ( convertEncoding ) if ( bConvertEncoding )
msgstr = wxString(converter.Convert(str)); msgstr = wxString(converter.Convert(str));
else else
#endif #endif
@@ -1418,14 +1418,14 @@ wxMsgCatalog::~wxMsgCatalog()
} }
} }
bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName, bool wxMsgCatalog::Load(const wxString& dirPrefix, const wxString& name,
const wxChar *msgIdCharset, bool bConvertEncoding) 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; return false;
file.FillHash(m_messages, msgIdCharset, bConvertEncoding); 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; int index = 0;
if (n != size_t(-1)) if (n != size_t(-1))
@@ -1459,16 +1459,16 @@ const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const
wxMessagesHash::const_iterator i; wxMessagesHash::const_iterator i;
if (index != 0) 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 else
return NULL; return NULL;
@@ -1512,9 +1512,9 @@ 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, bool wxLocale::Init(const wxString& name,
const wxChar *szShort, const wxString& shortName,
const wxChar *szLocale, const wxString& locale,
bool bLoadDefault, bool bLoadDefault,
bool bConvertEncoding) bool bConvertEncoding)
{ {
@@ -1522,16 +1522,17 @@ bool wxLocale::Init(const wxChar *szName,
_T("you can't call wxLocale::Init more than once") ); _T("you can't call wxLocale::Init more than once") );
m_initialized = true; m_initialized = true;
m_strLocale = szName; m_strLocale = name;
m_strShort = szShort; m_strShort = shortName;
m_bConvertEncoding = bConvertEncoding; m_bConvertEncoding = bConvertEncoding;
m_language = wxLANGUAGE_UNKNOWN; m_language = wxLANGUAGE_UNKNOWN;
// change current locale (default: same as long name) // 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() ) { if ( m_strShort.empty() ) {
// FIXME I don't know how these 2 letter abbreviations are formed, // FIXME I don't know how these 2 letter abbreviations are formed,
// this wild guess is surely wrong // 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) // at least in AIX 5.2 libc is buggy and the string returned from
// can't be passed back to it because it returns 6 strings (one for each locale // setlocale(LC_ALL) can't be passed back to it because it returns 6
// category), i.e. for C locale we get back "C C C C C C" // 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 // this contradicts IBM own docs but this is not of much help, so just work
// it in the crudest possible manner // around it in the crudest possible manner
wxChar *p = wxStrchr((wxChar *)retloc, _T(' ')); wxChar *p = wxStrchr((wxChar *)retloc, _T(' '));
if ( p ) if ( p )
*p = _T('\0'); *p = _T('\0');
@@ -1859,11 +1861,9 @@ bool wxLocale::Init(int language, int flags)
#endif #endif
#ifndef WX_NO_LOCALE_SUPPORT #ifndef WX_NO_LOCALE_SUPPORT
wxChar *szLocale = retloc ? wxStrdup(retloc) : NULL; bool ret = Init(name, canonical, retloc,
bool ret = Init(name, canonical, szLocale,
(flags & wxLOCALE_LOAD_DEFAULT) != 0, (flags & wxLOCALE_LOAD_DEFAULT) != 0,
(flags & wxLOCALE_CONV_ENCODING) != 0); (flags & wxLOCALE_CONV_ENCODING) != 0);
free(szLocale);
if (IsOk()) // setlocale() succeeded if (IsOk()) // setlocale() succeeded
m_language = lang; 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 wxString& wxLocale::GetString(const wxString& origString,
const wxChar *szDomain) const 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 wxString& wxLocale::GetString(const wxString& origString,
const wxChar *szOrigString2, const wxString& origString2,
size_t n, size_t n,
const wxChar *szDomain) const const wxString& domain) const
{ {
if ( wxIsEmpty(szOrigString) ) if ( origString.empty() )
return wxEmptyString; 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? // does the catalog exist?
if ( pMsgCat != NULL ) if ( pMsgCat != NULL )
pszTrans = pMsgCat->GetString(szOrigString, n); trans = pMsgCat->GetString(origString, n);
} }
else else
{ {
// search in all domains // search in all domains
for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext ) for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
{ {
pszTrans = pMsgCat->GetString(szOrigString, n); trans = pMsgCat->GetString(origString, n);
if ( pszTrans != NULL ) // take the first found if ( trans != NULL ) // take the first found
break; break;
} }
} }
if ( pszTrans == NULL ) if ( trans == NULL )
{ {
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
if ( !NoTransErr::Suppress() ) if ( !NoTransErr::Suppress() )
@@ -2637,83 +2637,80 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString,
wxLogTrace(TRACE_I18N, wxLogTrace(TRACE_I18N,
_T("string \"%s\"[%ld] not found in %slocale '%s'."), _T("string \"%s\"[%ld] not found in %slocale '%s'."),
szOrigString, (long)n, origString, (long)n,
szDomain domain.empty()
? (const wxChar*)wxString::Format(_T("domain '%s' "), szDomain).c_str() ? (const wxChar*)wxString::Format(_T("domain '%s' "), domain).c_str()
: _T(""), : _T(""),
m_strLocale.c_str()); m_strLocale.c_str());
} }
#endif // __WXDEBUG__ #endif // __WXDEBUG__
if (n == size_t(-1)) 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, wxString wxLocale::GetHeaderValue(const wxString& header,
const wxChar* szDomain ) const 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? // does the catalog exist?
if ( pMsgCat == NULL ) if ( pMsgCat == NULL )
return wxEmptyString; return wxEmptyString;
pszTrans = pMsgCat->GetString(wxEmptyString, (size_t)-1); trans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
} }
else else
{ {
// search in all domains // search in all domains
for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext ) for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
{ {
pszTrans = pMsgCat->GetString(wxEmptyString, (size_t)-1); trans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
if ( pszTrans != NULL ) // take the first found 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); size_t found = trans->find(header);
if ( pszFound == NULL ) 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')); size_t endLine = trans->find(wxT('\n'), found);
if ( pszEndLine == NULL ) pszEndLine = pszFound + wxStrlen(pszFound); size_t len = (endLine == wxString::npos) ?
wxString::npos : (endLine - found);
return trans->substr(found, len);
// wxString( wxChar*, length);
wxString retVal( pszFound, pszEndLine - pszFound );
return retVal;
} }
// 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 // linear search in the linked list
wxMsgCatalog *pMsgCat; wxMsgCatalog *pMsgCat;
for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext ) 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; return FindCatalog(szDomain) != NULL;
} }
// add a catalog to our linked list // 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, bool wxLocale::AddCatalog(const wxString& szDomain,
wxLanguage msgIdLanguage, wxLanguage msgIdLanguage,
const wxChar *msgIdCharset) const wxString& msgIdCharset)
{ {
wxMsgCatalog *pMsgCat = new wxMsgCatalog; wxMsgCatalog *pMsgCat = new wxMsgCatalog;