Unicode support. Uses wxWCharBuffer in Unicode build. Compiles, at least.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2111 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -94,11 +94,11 @@ public:
|
|||||||
~wxMsgCatalog();
|
~wxMsgCatalog();
|
||||||
|
|
||||||
// load the catalog from disk (szDirPrefix corresponds to language)
|
// load the catalog from disk (szDirPrefix corresponds to language)
|
||||||
bool Load(const char *szDirPrefix, const char *szName);
|
bool Load(const wxChar *szDirPrefix, const wxChar *szName);
|
||||||
bool IsLoaded() const { return m_pData != NULL; }
|
bool IsLoaded() const { return m_pData != NULL; }
|
||||||
|
|
||||||
// get name of the catalog
|
// get name of the catalog
|
||||||
const char *GetName() const { return m_pszName; }
|
const wxChar *GetName() const { return m_pszName; }
|
||||||
|
|
||||||
// get the translated string: returns NULL if not found
|
// get the translated string: returns NULL if not found
|
||||||
const char *GetString(const char *sz) const;
|
const char *GetString(const char *sz) const;
|
||||||
@@ -153,7 +153,7 @@ private:
|
|||||||
|
|
||||||
bool m_bSwapped; // wrong endianness?
|
bool m_bSwapped; // wrong endianness?
|
||||||
|
|
||||||
char *m_pszName; // name of the domain
|
wxChar *m_pszName; // name of the domain
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -221,15 +221,15 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// return all directories to search for given prefix
|
// return all directories to search for given prefix
|
||||||
static wxString GetAllMsgCatalogSubdirs(const char *prefix,
|
static wxString GetAllMsgCatalogSubdirs(const wxChar *prefix,
|
||||||
const char *lang)
|
const wxChar *lang)
|
||||||
{
|
{
|
||||||
wxString searchPath;
|
wxString searchPath;
|
||||||
|
|
||||||
// search first in prefix/fr/LC_MESSAGES, then in prefix/fr and finally in
|
// search first in prefix/fr/LC_MESSAGES, then in prefix/fr and finally in
|
||||||
// prefix (assuming the language is 'fr')
|
// prefix (assuming the language is 'fr')
|
||||||
searchPath << prefix << wxFILE_SEP_PATH << lang << wxFILE_SEP_PATH
|
searchPath << prefix << wxFILE_SEP_PATH << lang << wxFILE_SEP_PATH
|
||||||
<< "LC_MESSAGES" << wxPATH_SEP
|
<< _T("LC_MESSAGES") << wxPATH_SEP
|
||||||
<< prefix << wxFILE_SEP_PATH << lang << wxPATH_SEP
|
<< prefix << wxFILE_SEP_PATH << lang << wxPATH_SEP
|
||||||
<< prefix << wxPATH_SEP;
|
<< prefix << wxPATH_SEP;
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@ static wxString GetAllMsgCatalogSubdirs(const char *prefix,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// construct the search path for the given language
|
// construct the search path for the given language
|
||||||
static wxString GetFullSearchPath(const char *lang)
|
static wxString GetFullSearchPath(const wxChar *lang)
|
||||||
{
|
{
|
||||||
wxString searchPath;
|
wxString searchPath;
|
||||||
|
|
||||||
@@ -251,29 +251,29 @@ static wxString GetFullSearchPath(const char *lang)
|
|||||||
|
|
||||||
// then take the current directory
|
// then take the current directory
|
||||||
// FIXME it should be the directory of the executable
|
// FIXME it should be the directory of the executable
|
||||||
searchPath << GetAllMsgCatalogSubdirs(".", lang) << wxPATH_SEP;
|
searchPath << GetAllMsgCatalogSubdirs(_T("."), lang) << wxPATH_SEP;
|
||||||
|
|
||||||
// and finally add some standard ones
|
// and finally add some standard ones
|
||||||
searchPath
|
searchPath
|
||||||
<< GetAllMsgCatalogSubdirs("/usr/share/locale", lang) << wxPATH_SEP
|
<< GetAllMsgCatalogSubdirs(_T("/usr/share/locale"), lang) << wxPATH_SEP
|
||||||
<< GetAllMsgCatalogSubdirs("/usr/lib/locale", lang) << wxPATH_SEP
|
<< GetAllMsgCatalogSubdirs(_T("/usr/lib/locale"), lang) << wxPATH_SEP
|
||||||
<< GetAllMsgCatalogSubdirs("/usr/local/share/locale", lang);
|
<< GetAllMsgCatalogSubdirs(_T("/usr/local/share/locale"), lang);
|
||||||
|
|
||||||
return searchPath;
|
return searchPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
// open disk file and read in it's contents
|
// open disk file and read in it's contents
|
||||||
bool wxMsgCatalog::Load(const char *szDirPrefix, const char *szName)
|
bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName)
|
||||||
{
|
{
|
||||||
// FIXME VZ: I forgot the exact meaning of LC_PATH - anyone to remind me?
|
// FIXME VZ: I forgot the exact meaning of LC_PATH - anyone to remind me?
|
||||||
#if 0
|
#if 0
|
||||||
const char *pszLcPath = getenv("LC_PATH");
|
const wxChar *pszLcPath = wxGetenv("LC_PATH");
|
||||||
if ( pszLcPath != NULL )
|
if ( pszLcPath != NULL )
|
||||||
strPath += pszLcPath + wxString(szDirPrefix) + MSG_PATH;
|
strPath += pszLcPath + wxString(szDirPrefix) + MSG_PATH;
|
||||||
#endif // 0
|
#endif // 0
|
||||||
|
|
||||||
wxString searchPath = GetFullSearchPath(szDirPrefix);
|
wxString searchPath = GetFullSearchPath(szDirPrefix);
|
||||||
const char *sublocale = strchr(szDirPrefix, '_');
|
const wxChar *sublocale = wxStrchr(szDirPrefix, _T('_'));
|
||||||
if ( sublocale )
|
if ( sublocale )
|
||||||
{
|
{
|
||||||
// also add just base locale name: for things like "fr_BE" (belgium
|
// also add just base locale name: for things like "fr_BE" (belgium
|
||||||
@@ -352,8 +352,8 @@ bool wxMsgCatalog::Load(const char *szDirPrefix, const char *szName)
|
|||||||
m_nHashSize = Swap(pHeader->nHashSize);
|
m_nHashSize = Swap(pHeader->nHashSize);
|
||||||
m_pHashTable = (size_t32 *)(m_pData + Swap(pHeader->ofsHashTable));
|
m_pHashTable = (size_t32 *)(m_pData + Swap(pHeader->ofsHashTable));
|
||||||
|
|
||||||
m_pszName = new char[strlen(szName) + 1];
|
m_pszName = new wxChar[wxStrlen(szName) + 1];
|
||||||
strcpy(m_pszName, szName);
|
wxStrcpy(m_pszName, szName);
|
||||||
|
|
||||||
// everything is fine
|
// everything is fine
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -416,9 +416,9 @@ wxLocale::wxLocale()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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 char *szName,
|
bool wxLocale::Init(const wxChar *szName,
|
||||||
const char *szShort,
|
const wxChar *szShort,
|
||||||
const char *szLocale,
|
const wxChar *szLocale,
|
||||||
bool bLoadDefault)
|
bool bLoadDefault)
|
||||||
{
|
{
|
||||||
m_strLocale = szName;
|
m_strLocale = szName;
|
||||||
@@ -427,7 +427,7 @@ bool wxLocale::Init(const char *szName,
|
|||||||
// change current locale (default: same as long name)
|
// change current locale (default: same as long name)
|
||||||
if ( szLocale == NULL )
|
if ( szLocale == NULL )
|
||||||
szLocale = szName;
|
szLocale = szName;
|
||||||
m_pszOldLocale = setlocale(LC_ALL, szLocale);
|
m_pszOldLocale = wxSetlocale(LC_ALL, szLocale);
|
||||||
if ( m_pszOldLocale == NULL )
|
if ( m_pszOldLocale == NULL )
|
||||||
wxLogError(_("locale '%s' can not be set."), szLocale);
|
wxLogError(_("locale '%s' can not be set."), szLocale);
|
||||||
|
|
||||||
@@ -446,7 +446,7 @@ bool wxLocale::Init(const char *szName,
|
|||||||
m_pMsgCat = NULL;
|
m_pMsgCat = NULL;
|
||||||
bool bOk = TRUE;
|
bool bOk = TRUE;
|
||||||
if ( bLoadDefault )
|
if ( bLoadDefault )
|
||||||
bOk = AddCatalog("wxstd");
|
bOk = AddCatalog(_T("wxstd"));
|
||||||
|
|
||||||
return bOk;
|
return bOk;
|
||||||
}
|
}
|
||||||
@@ -473,17 +473,18 @@ wxLocale::~wxLocale()
|
|||||||
|
|
||||||
// restore old locale
|
// restore old locale
|
||||||
wxSetLocale(m_pOldLocale);
|
wxSetLocale(m_pOldLocale);
|
||||||
setlocale(LC_ALL, m_pszOldLocale);
|
wxSetlocale(LC_ALL, m_pszOldLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the translation of given string in current locale
|
// get the translation of given string in current locale
|
||||||
const char *wxLocale::GetString(const char *szOrigString,
|
const wxMB2WXbuf wxLocale::GetString(const wxChar *szOrigString,
|
||||||
const char *szDomain) const
|
const wxChar *szDomain) const
|
||||||
{
|
{
|
||||||
if ( IsEmpty(szOrigString) )
|
if ( wxIsEmpty(szOrigString) )
|
||||||
return szDomain;
|
return szDomain;
|
||||||
|
|
||||||
const char *pszTrans = NULL;
|
const char *pszTrans = NULL;
|
||||||
|
const wxWX2MBbuf szOrgString = wxConv_libc.cWX2MB(szOrigString);
|
||||||
|
|
||||||
wxMsgCatalog *pMsgCat;
|
wxMsgCatalog *pMsgCat;
|
||||||
if ( szDomain != NULL ) {
|
if ( szDomain != NULL ) {
|
||||||
@@ -491,12 +492,12 @@ const char *wxLocale::GetString(const char *szOrigString,
|
|||||||
|
|
||||||
// does the catalog exist?
|
// does the catalog exist?
|
||||||
if ( pMsgCat != NULL )
|
if ( pMsgCat != NULL )
|
||||||
pszTrans = pMsgCat->GetString(szOrigString);
|
pszTrans = pMsgCat->GetString(szOrgString);
|
||||||
}
|
}
|
||||||
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);
|
pszTrans = pMsgCat->GetString(szOrgString);
|
||||||
if ( pszTrans != NULL ) // take the first found
|
if ( pszTrans != NULL ) // take the first found
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -527,19 +528,19 @@ const char *wxLocale::GetString(const char *szOrigString,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return szOrigString;
|
return (wxMB2WXbuf)(szOrigString);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return pszTrans;
|
return (wxMB2WXbuf)(wxConv_libc.cMB2WX(pszTrans));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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 char *szDomain) const
|
wxMsgCatalog *wxLocale::FindCatalog(const wxChar *szDomain) 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 ( Stricmp(pMsgCat->GetName(), szDomain) == 0 )
|
if ( wxStricmp(pMsgCat->GetName(), szDomain) == 0 )
|
||||||
return pMsgCat;
|
return pMsgCat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,13 +548,13 @@ wxMsgCatalog *wxLocale::FindCatalog(const char *szDomain) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if the given catalog is loaded
|
// check if the given catalog is loaded
|
||||||
bool wxLocale::IsLoaded(const char *szDomain) const
|
bool wxLocale::IsLoaded(const wxChar *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 char *szDomain)
|
bool wxLocale::AddCatalog(const wxChar *szDomain)
|
||||||
{
|
{
|
||||||
wxMsgCatalog *pMsgCat = new wxMsgCatalog;
|
wxMsgCatalog *pMsgCat = new wxMsgCatalog;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user