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:
parent
f5f93ea573
commit
31b7522e2b
@ -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}.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
size_t endLine = trans->find(wxT('\n'), found);
|
||||
size_t len = (endLine == wxString::npos) ?
|
||||
wxString::npos : (endLine - found);
|
||||
|
||||
|
||||
// wxString( wxChar*, length);
|
||||
wxString retVal( pszFound, pszEndLine - pszFound );
|
||||
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user