X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03647350fc7cd141953c72e0284e928847d30f44..2f30930a092c85f3255f8a0d79873cde438b0445:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index ff680307af..67bf71f86f 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -65,12 +65,10 @@ #include "wx/filename.h" #include "wx/tokenzr.h" #include "wx/fontmap.h" -#include "wx/encconv.h" #include "wx/scopedptr.h" #include "wx/apptrait.h" #include "wx/stdpaths.h" #include "wx/hashset.h" -#include "wx/filesys.h" #if defined(__WXOSX__) #include "wx/osx/core/cfref.h" @@ -860,9 +858,7 @@ public: wxPluralFormsCalculatorPtr& rPluralFormsCalculator); // fills the hash with string-translation pairs - bool FillHash(wxMessagesHash& hash, - const wxString& msgIdCharset, - bool convertEncoding) const; + bool FillHash(wxMessagesHash& hash, const wxString& msgIdCharset) const; // return the charset of the strings in this catalog or empty string if // none/unknown @@ -953,7 +949,7 @@ public: // load the catalog from disk (szDirPrefix corresponds to language) bool Load(const wxString& dirPrefix, const wxString& name, - const wxString& msgIdCharset, bool bConvertEncoding = false); + const wxString& msgIdCharset); // get name of the catalog wxString GetName() const { return m_name; } @@ -1190,12 +1186,7 @@ bool wxMsgCatalogFile::Load(const wxString& szDirPrefix, const wxString& szName, fn.SetExt(wxS("mo")); wxString strFullName; -#if wxUSE_FILESYSTEM - wxFileSystem fileSys; - if ( !fileSys.FindFileInPath(&strFullName, searchPath, fn.GetFullPath()) ) -#else // !wxUSE_FILESYSTEM if ( !wxFindFileInPath(&strFullName, searchPath, fn.GetFullPath()) ) -#endif // wxUSE_FILESYSTEM/!wxUSE_FILESYSTEM { wxLogVerbose(_("catalog file for domain '%s' not found."), szName); wxLogTrace(TRACE_I18N, wxS("Catalog \"%s.mo\" not found"), szName); @@ -1206,22 +1197,6 @@ bool wxMsgCatalogFile::Load(const wxString& szDirPrefix, const wxString& szName, wxLogVerbose(_("using catalog '%s' from '%s'."), szName, strFullName.c_str()); wxLogTrace(TRACE_I18N, wxS("Using catalog \"%s\"."), strFullName.c_str()); -#if wxUSE_FILESYSTEM - wxFSFile * const fileMsg = fileSys.OpenFile(strFullName); - if ( !fileMsg ) - return false; - - wxInputStream *fileStream = fileMsg->GetStream(); - m_data.SetDataLen(0); - - static const size_t chunkSize = 4096; - while ( !fileStream->Eof() ) { - fileStream->Read(m_data.GetAppendBuf(chunkSize), chunkSize); - m_data.UngetAppendBuf(fileStream->LastRead()); - } - - delete fileMsg; -#else // !wxUSE_FILESYSTEM wxFile fileMsg(strFullName); if ( !fileMsg.IsOpened() ) return false; @@ -1239,7 +1214,6 @@ bool wxMsgCatalogFile::Load(const wxString& szDirPrefix, const wxString& szName, return false; m_data.UngetWriteBuf(nSize); -#endif // wxUSE_FILESYSTEM/!wxUSE_FILESYSTEM // examine header @@ -1329,44 +1303,31 @@ bool wxMsgCatalogFile::Load(const wxString& szDirPrefix, const wxString& szName, } bool wxMsgCatalogFile::FillHash(wxMessagesHash& hash, - const wxString& msgIdCharset, - bool convertEncoding) const + const wxString& msgIdCharset) const { -#if wxUSE_UNICODE - // this parameter doesn't make sense, we always must convert encoding in - // Unicode build - convertEncoding = true; -#elif wxUSE_FONTMAP - if ( convertEncoding ) + // conversion to use to convert catalog strings to the GUI encoding + wxMBConv *inputConv, + *inputConvPtr = NULL; // same as inputConv but safely deleteable + + if ( !m_charset.empty() ) { +#if !wxUSE_UNICODE && wxUSE_FONTMAP // determine if we need any conversion at all wxFontEncoding encCat = wxFontMapperBase::GetEncodingFromName(m_charset); - if ( encCat == wxLocale::GetSystemEncoding() ) + if ( encCat != wxLocale::GetSystemEncoding() ) +#endif { - // no need to convert - convertEncoding = false; + inputConvPtr = + inputConv = new wxCSConv(m_charset); } } -#endif // wxUSE_UNICODE/wxUSE_FONTMAP - -#if wxUSE_WCHAR_T - // conversion to use to convert catalog strings to the GUI encoding - wxMBConv *inputConv, - *inputConvPtr = NULL; // same as inputConv but safely deleteable - if ( convertEncoding && !m_charset.empty() ) - { - inputConvPtr = - inputConv = new wxCSConv(m_charset); - } else // no need or not possible to convert the encoding { #if wxUSE_UNICODE // we must somehow convert the narrow strings in the message catalog to // wide strings, so use the default conversion if we have no charset inputConv = wxConvCurrent; -#else // !wxUSE_UNICODE - inputConv = NULL; -#endif // wxUSE_UNICODE/!wxUSE_UNICODE +#endif } // conversion to apply to msgid strings before looking them up: we only @@ -1376,43 +1337,6 @@ bool wxMsgCatalogFile::FillHash(wxMessagesHash& hash, ? NULL : new wxCSConv(msgIdCharset); -#elif wxUSE_FONTMAP - wxASSERT_MSG( msgIdCharset.empty(), - wxS("non-ASCII msgid languages only supported if wxUSE_WCHAR_T=1") ); - - wxEncodingConverter converter; - if ( convertEncoding ) - { - wxFontEncoding targetEnc = wxFONTENCODING_SYSTEM; - wxFontEncoding enc = wxFontMapperBase::Get()->CharsetToEncoding(m_charset, false); - if ( enc == wxFONTENCODING_SYSTEM ) - { - convertEncoding = false; // unknown encoding - } - else - { - 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; - if (a.GetCount() == 0) - // we don't know common equiv. under this platform - convertEncoding = false; - targetEnc = a[0]; - } - } - - if ( convertEncoding ) - { - converter.Init(enc, targetEnc); - } - } -#endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T - (void)convertEncoding; // get rid of warnings about unused parameter - for (size_t32 i = 0; i < m_numStrings; i++) { const char *data = StringAtOfs(m_pOrigTable, i); @@ -1423,12 +1347,10 @@ bool wxMsgCatalogFile::FillHash(wxMessagesHash& hash, #if wxUSE_UNICODE msgid = wxString(data, *inputConv); #else // ASCII - #if wxUSE_WCHAR_T - if ( inputConv && sourceConv ) - msgid = wxString(inputConv->cMB2WC(data), *sourceConv); - else - #endif - msgid = data; + if ( inputConv && sourceConv ) + msgid = wxString(inputConv->cMB2WC(data), *sourceConv); + else + msgid = data; #endif // wxUSE_UNICODE data = StringAtOfs(m_pTransTable, i); @@ -1445,19 +1367,12 @@ bool wxMsgCatalogFile::FillHash(wxMessagesHash& hash, wxString msgstr; #if wxUSE_UNICODE msgstr = wxString(str, *inputConv); -#elif wxUSE_WCHAR_T +#else if ( inputConv ) msgstr = wxString(inputConv->cMB2WC(str), *wxConvUI); else msgstr = str; -#else // !wxUSE_WCHAR_T - #if wxUSE_FONTMAP - if ( bConvertEncoding ) - msgstr = wxString(converter.Convert(str)); - else - #endif - msgstr = str; -#endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T +#endif // wxUSE_UNICODE/!wxUSE_UNICODE if ( !msgstr.empty() ) { @@ -1475,10 +1390,8 @@ bool wxMsgCatalogFile::FillHash(wxMessagesHash& hash, } } -#if wxUSE_WCHAR_T delete sourceConv; delete inputConvPtr; -#endif // wxUSE_WCHAR_T return true; } @@ -1506,7 +1419,7 @@ wxMsgCatalog::~wxMsgCatalog() #endif // !wxUSE_UNICODE bool wxMsgCatalog::Load(const wxString& dirPrefix, const wxString& name, - const wxString& msgIdCharset, bool bConvertEncoding) + const wxString& msgIdCharset) { wxMsgCatalogFile file; @@ -1515,27 +1428,9 @@ bool wxMsgCatalog::Load(const wxString& dirPrefix, const wxString& name, if ( !file.Load(dirPrefix, name, m_pluralFormsCalculator) ) return false; - if ( !file.FillHash(m_messages, msgIdCharset, bConvertEncoding) ) + if ( !file.FillHash(m_messages, msgIdCharset) ) return false; -#if !wxUSE_UNICODE - // we should use a conversion compatible with the message catalog encoding - // in the GUI if we don't convert the strings to the current conversion but - // as the encoding is global, only change it once, otherwise we could get - // into trouble if we use several message catalogs with different encodings - // - // this is, of course, a hack but it at least allows the program to use - // message catalogs in any encodings without asking the user to change his - // locale - if ( !bConvertEncoding && - !file.GetCharset().empty() && - wxConvUI == &wxConvLocal ) - { - wxConvUI = - m_conv = new wxCSConv(file.GetCharset()); - } -#endif // !wxUSE_UNICODE - return true; } @@ -1605,16 +1500,23 @@ void wxLocale::DoCommonInit() bool wxLocale::Init(const wxString& name, const wxString& shortName, const wxString& locale, - bool bLoadDefault, - bool bConvertEncoding) + bool bLoadDefault +#if WXWIN_COMPATIBILITY_2_8 + ,bool bConvertEncoding +#endif + ) { wxASSERT_MSG( !m_initialized, wxS("you can't call wxLocale::Init more than once") ); +#if WXWIN_COMPATIBILITY_2_8 + wxASSERT_MSG( bConvertEncoding, + wxS("wxLocale::Init with bConvertEncoding=false is no longer supported, add charset to your catalogs") ); +#endif + m_initialized = true; m_strLocale = name; m_strShort = shortName; - m_bConvertEncoding = bConvertEncoding; m_language = wxLANGUAGE_UNKNOWN; // change current locale (default: same as long name) @@ -1718,6 +1620,11 @@ static const char *wxSetlocaleTryUTF8(int c, const wxString& lc) bool wxLocale::Init(int language, int flags) { +#if WXWIN_COMPATIBILITY_2_8 + wxASSERT_MSG( !(flags & wxLOCALE_CONV_ENCODING), + wxS("wxLOCALE_CONV_ENCODING is no longer supported, add charset to your catalogs") ); +#endif + bool ret = true; int lang = language; @@ -1906,8 +1813,7 @@ bool wxLocale::Init(int language, int flags) } if ( !Init(name, canonical, retloc, - (flags & wxLOCALE_LOAD_DEFAULT) != 0, - (flags & wxLOCALE_CONV_ENCODING) != 0) ) + (flags & wxLOCALE_LOAD_DEFAULT) != 0) ) { ret = false; } @@ -2564,7 +2470,7 @@ bool wxLocale::AddCatalog(const wxString& szDomain, wxMsgCatalog *pMsgCat = new wxMsgCatalog; - if ( pMsgCat->Load(m_strShort, szDomain, msgIdCharset, m_bConvertEncoding) ) + if ( pMsgCat->Load(m_strShort, szDomain, msgIdCharset) ) { // add it to the head of the list so that in GetString it will // be searched before the catalogs added earlier @@ -3097,6 +3003,8 @@ wxString GetDateFormatFromLangInfo(wxLocaleInfo index) return fmtDateOnly; #else // !HAVE_LANGINFO_H + wxUnusedVar(index); + // no fallback, let the application deal with unavailability of // nl_langinfo() itself as there is no good way for us to do it (well, we // could try to reverse engineer the format from strftime() output but this