<< wxPATH_SEP;
}
+ // TODO: use wxStandardPaths instead of all this mess!!
+
// LC_PATH is a standard env var containing the search path for the .mo
// files
#ifndef __WXWINCE__
// then take the current directory
// FIXME it should be the directory of the executable
-#ifdef __WXMAC__
- wxChar cwd[512] ;
- wxGetWorkingDirectory( cwd , sizeof( cwd ) ) ;
- searchPath << GetAllMsgCatalogSubdirs(cwd, lang);
+#if defined(__WXMAC__)
+ searchPath << GetAllMsgCatalogSubdirs(wxGetCwd(), lang);
// generic search paths could be somewhere in the system folder preferences
-#else // !Mac
+#elif defined(__WXMSW__)
+ // look in the directory of the executable
+ wxString path;
+ wxSplitPath(wxGetFullModuleName(), &path, NULL, NULL);
+ searchPath << GetAllMsgCatalogSubdirs(path, lang);
+#else // !Mac, !MSW
searchPath << GetAllMsgCatalogSubdirs(wxT("."), lang);
-
#endif // platform
return searchPath;
if ( !fileMsg.IsOpened() )
return false;
- // get the file size
- wxFileSize_t nSize = fileMsg.Length();
+ // get the file size (assume it is less than 4Gb...)
+ wxFileOffset nSize = fileMsg.Length();
if ( nSize == wxInvalidOffset )
return false;
// read the whole file in memory
m_pData = new size_t8[nSize];
- if ( fileMsg.Read(m_pData, nSize) != nSize ) {
+ if ( fileMsg.Read(m_pData, (size_t)nSize) != nSize ) {
wxDELETEA(m_pData);
return false;
}
// examine header
- bool bValid = nSize > sizeof(wxMsgCatalogHeader);
+ bool bValid = nSize + (size_t)0 > sizeof(wxMsgCatalogHeader);
wxMsgCatalogHeader *pHeader = (wxMsgCatalogHeader *)m_pData;
if ( bValid ) {
Swap(pHeader->ofsOrigTable));
m_pTransTable = (wxMsgTableEntry *)(m_pData +
Swap(pHeader->ofsTransTable));
- m_nSize = nSize;
+ m_nSize = (size_t32)nSize;
// now parse catalog's header and try to extract catalog charset and
// plural forms formula from it:
{
#if wxUSE_WCHAR_T
wxCSConv *csConv = NULL;
- if ( !m_charset.IsEmpty() )
+ if ( !m_charset.empty() )
csConv = new wxCSConv(m_charset);
wxMBConv& inputConv = csConv ? *((wxMBConv*)csConv) : *wxConvCurrent;
void wxLocale::DoCommonInit()
{
m_pszOldLocale = NULL;
+
+ m_pOldLocale = wxSetLocale(this);
+
m_pMsgCat = NULL;
m_language = wxLANGUAGE_UNKNOWN;
m_initialized = false;
// the short name will be used to look for catalog files as well,
// so we need something here
- if ( m_strShort.IsEmpty() ) {
+ 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] )
}
}
- // save the old locale to be able to restore it later
- m_pOldLocale = wxSetLocale(this);
-
// load the default catalog with wxWidgets standard messages
m_pMsgCat = NULL;
bool bOk = true;
if (codepage != 0)
locale << wxT(".") << buffer;
}
- if (locale.IsEmpty())
+ if (locale.empty())
{
wxLogLastError(wxT("SetThreadLocale"));
wxLogError(wxT("Cannot set locale to language %s."), name.c_str());
wxLogError(wxT("Cannot set locale to language %s."), name.c_str());
return false;
}
-#elif defined(__WXMAC__) || defined(__WXPM__)
+#elif defined(__WXMAC__)
+ if (lang == wxLANGUAGE_DEFAULT)
+ locale = wxEmptyString;
+ else
+ locale = info->CanonicalName;
+
+ wxMB2WXbuf retloc = wxSetlocale(LC_ALL, locale);
+
+ if ( !retloc )
+ {
+ // Some C libraries don't like xx_YY form and require xx only
+ retloc = wxSetlocale(LC_ALL, locale.Mid(0,2));
+ }
+ if ( !retloc )
+ {
+ wxLogError(wxT("Cannot set locale to '%s'."), locale.c_str());
+ return false;
+ }
+#elif defined(__WXPM__)
wxMB2WXbuf retloc = wxSetlocale(LC_ALL , wxEmptyString);
#else
return false;
// FIXME: what is the error return value for GetACP()?
UINT codepage = ::GetACP();
encname.Printf(_T("windows-%u"), codepage);
+#elif defined(__WXMAC__)
+ // default is just empty string, this resolves to the default system
+ // encoding later
#elif defined(__UNIX_LIKE__)
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
delete pTmpCat;
}
- // restore old locale
+ // restore old locale pointer
wxSetLocale(m_pOldLocale);
+
// FIXME
#ifndef __WXWINCE__
wxSetlocale(LC_ALL, m_pszOldLocale);
if ( pMsgCat == NULL )
return wxEmptyString;
- pszTrans = pMsgCat->GetString(wxT(""), (size_t)-1);
+ pszTrans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
}
else
{
// search in all domains
for ( pMsgCat = m_pMsgCat; pMsgCat != NULL; pMsgCat = pMsgCat->m_pNext )
{
- pszTrans = pMsgCat->GetString(wxT(""), (size_t)-1);
+ pszTrans = pMsgCat->GetString(wxEmptyString, (size_t)-1);
if ( pszTrans != NULL ) // take the first found
break;
}