X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/563d535e46e7516fd4e2334203dbe910398bfd88..baaae89f09ece7ab8a17570ee535683b9d14aeda:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index a45ef71754..7d115e81a6 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -147,7 +147,7 @@ static inline wxString ExtractNotLang(const wxString& langFull) // This is a "low-level" class and is used only by wxMsgCatalog // ---------------------------------------------------------------------------- -WX_DECLARE_STRING_HASH_MAP(wxString, wxMessagesHash) +WX_DECLARE_EXPORTED_STRING_HASH_MAP(wxString, wxMessagesHash) class wxMsgCatalogFile { @@ -194,7 +194,7 @@ private: const char *StringAtOfs(wxMsgTableEntry *pTable, size_t32 index) const { return (const char *)(m_pData + Swap(pTable[index].ofsString)); } - + wxString GetCharset() const; // utility functions @@ -307,15 +307,19 @@ static wxString GetFullSearchPath(const wxChar *lang) wxGetWorkingDirectory( cwd , sizeof( cwd ) ) ; searchPath << GetAllMsgCatalogSubdirs(cwd, lang); // generic search paths could be somewhere in the system folder preferences -#else +#else // !Mac searchPath << GetAllMsgCatalogSubdirs(wxT("."), lang); +#ifdef __UNIX__ // and finally add some standard ones searchPath << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang) << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang) << GetAllMsgCatalogSubdirs(wxT("/usr/local/share/locale"), lang); -#endif +#endif // __UNIX__ + +#endif // platform + return searchPath; } @@ -420,7 +424,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons if ( !!charset ) csConv = new wxCSConv(charset); - wxMBConv& inputConv = csConv ? *csConv : *wxConvCurrent; + wxMBConv& inputConv = csConv ? *((wxMBConv*)csConv) : *wxConvCurrent; for (size_t i = 0; i < m_numStrings; i++) { @@ -430,7 +434,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons hash[key] = wxString(StringAtOfs(m_pTransTable, i), inputConv); #else if ( convertEncoding ) - hash[key] = + hash[key] = wxString(inputConv.cMB2WC(StringAtOfs(m_pTransTable, i)), wxConvLocal); else @@ -443,20 +447,21 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons #if wxUSE_FONTMAP if ( convertEncoding ) { - wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(charset, FALSE); + wxFontEncoding targetEnc = wxFONTENCODING_SYSTEM; + wxFontEncoding enc = wxFontMapper::Get()->CharsetToEncoding(charset, FALSE); if ( enc == wxFONTENCODING_SYSTEM ) { convertEncoding = FALSE; // unknown encoding } else { - wxFontEncoding targetEnc = wxLocale::GetSystemEncoding(); + targetEnc = wxLocale::GetSystemEncoding(); if (targetEnc == wxFONTENCODING_SYSTEM) { wxFontEncodingArray a = wxEncodingConverter::GetPlatformEquivalents(enc); if (a[0] == enc) // no conversion needed, locale uses native encoding - convertEncoding = FALSE; + convertEncoding = FALSE; if (a.GetCount() == 0) // we don't know common equiv. under this platform convertEncoding = FALSE; @@ -472,14 +477,14 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons for (size_t i = 0; i < m_numStrings; i++) { wxString key(StringAtOfs(m_pOrigTable, i)); - hash[key] = + hash[key] = converter.Convert(wxString(StringAtOfs(m_pTransTable, i))); } } } if ( !convertEncoding ) - #else // !wxUSE_FONTMAP + #endif // wxUSE_FONTMAP/!wxUSE_FONTMAP { for (size_t i = 0; i < m_numStrings; i++) { @@ -487,7 +492,6 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons hash[key] = StringAtOfs(m_pTransTable, i); } } - #endif // wxUSE_FONTMAP/!wxUSE_FONTMAP #endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T } @@ -495,7 +499,7 @@ wxString wxMsgCatalogFile::GetCharset() const { // first, find encoding header: const char *hdr = StringAtOfs(m_pOrigTable, 0); - if ( hdr == NULL || hdr[0] != 0 ) + if ( hdr == NULL || hdr[0] != 0 ) { // not supported by this catalog, does not have correct header return wxEmptyString; @@ -507,19 +511,19 @@ wxString wxMsgCatalogFile::GetCharset() const if ( pos == wxNOT_FOUND ) { // incorrectly filled Content-Type header - return wxEmptyString; + return wxEmptyString; } size_t n = pos + 34; /*strlen("Content-Type: text/plain; charset=")*/ while ( header[n] != wxT('\n') ) charset << header[n++]; - + if ( charset == wxT("CHARSET") ) { // "CHARSET" is not valid charset, but lazy translator return wxEmptyString; } - + return charset; } @@ -527,20 +531,20 @@ wxString wxMsgCatalogFile::GetCharset() const // wxMsgCatalog class // ---------------------------------------------------------------------------- -bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName, - bool bConvertEncoding = FALSE) +bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName, + bool bConvertEncoding) { wxMsgCatalogFile file; - + m_name = szName; - + if ( file.Load(szDirPrefix, szName) ) { file.FillHash(m_messages, bConvertEncoding); return TRUE; } - else - return FALSE; + + return FALSE; } const wxChar *wxMsgCatalog::GetString(const wxChar *sz) const @@ -678,7 +682,7 @@ bool wxLocale::Init(int language, int flags) const wxChar *retloc; // Set the locale: -#ifdef __UNIX__ +#if defined(__UNIX__) && !defined(__WXMAC__) if (language == wxLANGUAGE_DEFAULT) locale = wxEmptyString; else @@ -789,7 +793,7 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix) size_t i = 0, count = ms_languagesDB->GetCount(); -#if defined(__UNIX__) +#if defined(__UNIX__) && !defined(__WXMAC__) // first get the string identifying the language from the environment wxString langFull; if (!wxGetEnv(wxT("LC_ALL"), &langFull) && @@ -912,7 +916,7 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix) } } #elif defined(__WXMAC__) - char* lc = NULL ; + const char* lc = NULL ; long lang = GetScriptVariable( smSystemScript, smScriptLang) ; switch( GetScriptManagerVariable( smRegionCode ) ) { case verUS : @@ -1196,7 +1200,7 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix) break; } } - + #elif defined(__WIN32__) LCID lcid = GetUserDefaultLCID(); if ( lcid != 0 ) @@ -1253,18 +1257,23 @@ wxString wxLocale::GetSystemEncodingName() char *alang = nl_langinfo(CODESET); setlocale(LC_CTYPE, oldLocale); free(oldLocale); - if (alang) + + if ( alang ) { -#ifdef __SOLARIS__ + // 7 bit ASCII encoding has several alternative names which we should + // recognize to avoid warnings about unrecognized encoding on each + // program startup + // nl_langinfo() under Solaris returns 646 by default which stands for - // ISO-646, i.e. 7 bit ASCII and we should recognize it to avoid - // warnings about unrecognized encoding on each program startup - if ( strcmp(alang, "646") == 0 ) + // ISO-646, i.e. 7 bit ASCII + // + // and recent glibc call it ANSI_X3.4-1968... + if ( strcmp(alang, "646") == 0 || + strcmp(alang, "ANSI_X3.4-1968") == 0 ) { encname = _T("US-ASCII"); } else -#endif // __SOLARIS__ { encname = wxConvLibc.cMB2WX(alang); } @@ -1335,7 +1344,7 @@ wxFontEncoding wxLocale::GetSystemEncoding() wxString encname = GetSystemEncodingName(); if ( !encname.empty() ) { - wxFontEncoding enc = wxTheFontMapper-> + wxFontEncoding enc = wxFontMapper::Get()-> CharsetToEncoding(encname, FALSE /* not interactive */); // this should probably be considered as a bug in CharsetToEncoding(): @@ -1392,7 +1401,7 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString, const wxChar *pszTrans = NULL; wxMsgCatalog *pMsgCat; - if ( szDomain != NULL ) + if ( szDomain != NULL ) { pMsgCat = FindCatalog(szDomain); @@ -1400,10 +1409,10 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString, if ( pMsgCat != NULL ) pszTrans = pMsgCat->GetString(szOrigString); } - else + else { // 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); if ( pszTrans != NULL ) // take the first found @@ -1411,21 +1420,23 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString, } } - if ( pszTrans == NULL ) + if ( pszTrans == NULL ) { #ifdef __WXDEBUG__ - if ( !NoTransErr::Suppress() ) + if ( !NoTransErr::Suppress() ) { NoTransErr noTransErr; if ( szDomain != NULL ) { - wxLogDebug(_T("string '%s' not found in domain '%s' for locale '%s'."), - szOrigString, szDomain, m_strLocale.c_str()); + wxLogTrace(_T("i18n"), + _T("string '%s' not found in domain '%s' for locale '%s'."), + szOrigString, szDomain, m_strLocale.c_str()); } else { - wxLogDebug(_T("string '%s' not found in locale '%s'."), + wxLogTrace(_T("i18n"), + _T("string '%s' not found in locale '%s'."), szOrigString, m_strLocale.c_str()); } } @@ -1442,7 +1453,7 @@ wxMsgCatalog *wxLocale::FindCatalog(const wxChar *szDomain) const { // linear search in the linked list 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 ) return pMsgCat; @@ -2316,7 +2327,7 @@ void wxLocale::InitLanguagesDB() LNG(wxLANGUAGE_YORUBA, "yo" , 0 , 0 , "Yoruba") LNG(wxLANGUAGE_ZHUANG, "za" , 0 , 0 , "Zhuang") LNG(wxLANGUAGE_ZULU, "zu" , 0 , 0 , "Zulu") - + }; #undef LNG