#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"
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
// 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; }
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);
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;
return false;
m_data.UngetWriteBuf(nSize);
-#endif // wxUSE_FILESYSTEM/!wxUSE_FILESYSTEM
// examine header
}
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
? 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);
#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);
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() )
{
}
}
-#if wxUSE_WCHAR_T
delete sourceConv;
delete inputConvPtr;
-#endif // wxUSE_WCHAR_T
return true;
}
#endif // !wxUSE_UNICODE
bool wxMsgCatalog::Load(const wxString& dirPrefix, const wxString& name,
- const wxString& msgIdCharset, bool bConvertEncoding)
+ const wxString& msgIdCharset)
{
wxMsgCatalogFile file;
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;
}
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)
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;
}
if ( !Init(name, canonical, retloc,
- (flags & wxLOCALE_LOAD_DEFAULT) != 0,
- (flags & wxLOCALE_CONV_ENCODING) != 0) )
+ (flags & wxLOCALE_LOAD_DEFAULT) != 0) )
{
ret = false;
}
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
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