X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3eadb6d5e6ef0540af07be807298c263b9f7c339..75504144d2ee5ce2bc62d186f04b2d445c2048c5:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index 0638da4e95..67bf71f86f 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -65,7 +65,6 @@ #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" @@ -859,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 @@ -952,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; } @@ -1306,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 @@ -1353,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); @@ -1400,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); @@ -1422,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() ) { @@ -1452,10 +1390,8 @@ bool wxMsgCatalogFile::FillHash(wxMessagesHash& hash, } } -#if wxUSE_WCHAR_T delete sourceConv; delete inputConvPtr; -#endif // wxUSE_WCHAR_T return true; } @@ -1483,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; @@ -1492,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; } @@ -1582,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) @@ -1695,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; @@ -1883,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; } @@ -2541,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