\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
\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
\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}.
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.
\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
\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,
\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).
\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).
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.
\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.
\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.
\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
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
}
// the same as a function (returns true on success)
- bool Init(const wxChar *szName,
- const wxChar *szShort = (const wxChar *) NULL,
- const wxChar *szLocale = (const wxChar *) NULL,
+ bool Init(const wxString& name,
+ const wxString& shortName = wxEmptyString,
+ const wxString& locale = wxEmptyString,
bool bLoadDefault = true,
bool bConvertEncoding = false);
bool 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; }
// 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
//
//
// 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
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
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
#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
~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;
: 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;
msgstr = str;
#else // !wxUSE_WCHAR_T
#if wxUSE_FONTMAP
- if ( convertEncoding )
+ if ( bConvertEncoding )
msgstr = wxString(converter.Convert(str));
else
#endif
}
}
-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);
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))
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;
}
// 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()") );
}
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]);
}
}
}
#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');
#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;
}
// 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() )
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;
}
}
// 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;