if we don't convert message catalog strings to the UI encoding, use message catalog encoding for the UI
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38669 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -885,9 +885,14 @@ public:
|
|||||||
wxPluralFormsCalculatorPtr& rPluralFormsCalculator);
|
wxPluralFormsCalculatorPtr& rPluralFormsCalculator);
|
||||||
|
|
||||||
// fills the hash with string-translation pairs
|
// fills the hash with string-translation pairs
|
||||||
void FillHash(wxMessagesHash& hash, const wxString& msgIdCharset,
|
void FillHash(wxMessagesHash& hash,
|
||||||
|
const wxString& msgIdCharset,
|
||||||
bool convertEncoding) const;
|
bool convertEncoding) const;
|
||||||
|
|
||||||
|
// return the charset of the strings in this catalog or empty string if
|
||||||
|
// none/unknown
|
||||||
|
wxString GetCharset() const { return m_charset; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// this implementation is binary compatible with GNU gettext() version 0.10
|
// this implementation is binary compatible with GNU gettext() version 0.10
|
||||||
|
|
||||||
@@ -921,7 +926,8 @@ private:
|
|||||||
wxMsgTableEntry *m_pOrigTable, // pointer to original strings
|
wxMsgTableEntry *m_pOrigTable, // pointer to original strings
|
||||||
*m_pTransTable; // translated
|
*m_pTransTable; // translated
|
||||||
|
|
||||||
wxString m_charset;
|
wxString m_charset; // from the message catalog header
|
||||||
|
|
||||||
|
|
||||||
// swap the 2 halves of 32 bit integer if needed
|
// swap the 2 halves of 32 bit integer if needed
|
||||||
size_t32 Swap(size_t32 ui) const
|
size_t32 Swap(size_t32 ui) const
|
||||||
@@ -961,6 +967,9 @@ private:
|
|||||||
class wxMsgCatalog
|
class wxMsgCatalog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
wxMsgCatalog() { m_conv = NULL; }
|
||||||
|
~wxMsgCatalog();
|
||||||
|
|
||||||
// load the catalog from disk (szDirPrefix corresponds to language)
|
// load the catalog from disk (szDirPrefix corresponds to language)
|
||||||
bool Load(const wxChar *szDirPrefix, const wxChar *szName,
|
bool Load(const wxChar *szDirPrefix, const wxChar *szName,
|
||||||
const wxChar *msgIdCharset = NULL, bool bConvertEncoding = false);
|
const wxChar *msgIdCharset = NULL, bool bConvertEncoding = false);
|
||||||
@@ -977,6 +986,11 @@ public:
|
|||||||
private:
|
private:
|
||||||
wxMessagesHash m_messages; // all messages in the catalog
|
wxMessagesHash m_messages; // all messages in the catalog
|
||||||
wxString m_name; // name of the domain
|
wxString m_name; // name of the domain
|
||||||
|
|
||||||
|
// the conversion corresponding to this catalog charset if we installed it
|
||||||
|
// as the global one
|
||||||
|
wxCSConv *m_conv;
|
||||||
|
|
||||||
wxPluralFormsCalculatorPtr m_pluralFormsCalculator;
|
wxPluralFormsCalculatorPtr m_pluralFormsCalculator;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1003,7 +1017,7 @@ wxMsgCatalogFile::wxMsgCatalogFile()
|
|||||||
|
|
||||||
wxMsgCatalogFile::~wxMsgCatalogFile()
|
wxMsgCatalogFile::~wxMsgCatalogFile()
|
||||||
{
|
{
|
||||||
wxDELETEA(m_pData);
|
delete [] m_pData;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return the directory to search for message catalogs under the given prefix
|
// return the directory to search for message catalogs under the given prefix
|
||||||
@@ -1253,9 +1267,9 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
|
|||||||
// Unicode build
|
// Unicode build
|
||||||
convertEncoding = true;
|
convertEncoding = true;
|
||||||
#elif wxUSE_FONTMAP
|
#elif wxUSE_FONTMAP
|
||||||
// determine if we need any conversion at all
|
|
||||||
if ( convertEncoding )
|
if ( convertEncoding )
|
||||||
{
|
{
|
||||||
|
// determine if we need any conversion at all
|
||||||
wxFontEncoding encCat = wxFontMapperBase::GetEncodingFromName(m_charset);
|
wxFontEncoding encCat = wxFontMapperBase::GetEncodingFromName(m_charset);
|
||||||
if ( encCat == wxLocale::GetSystemEncoding() )
|
if ( encCat == wxLocale::GetSystemEncoding() )
|
||||||
{
|
{
|
||||||
@@ -1392,6 +1406,21 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
|
|||||||
// wxMsgCatalog class
|
// wxMsgCatalog class
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxMsgCatalog::~wxMsgCatalog()
|
||||||
|
{
|
||||||
|
if ( m_conv )
|
||||||
|
{
|
||||||
|
if ( wxConvUI == m_conv )
|
||||||
|
{
|
||||||
|
// we only change wxConvUI if it points to wxConvLocal so we reset
|
||||||
|
// it back to it too
|
||||||
|
wxConvUI = &wxConvLocal;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete m_conv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName,
|
bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName,
|
||||||
const wxChar *msgIdCharset, bool bConvertEncoding)
|
const wxChar *msgIdCharset, bool bConvertEncoding)
|
||||||
{
|
{
|
||||||
@@ -1399,13 +1428,28 @@ bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName,
|
|||||||
|
|
||||||
m_name = szName;
|
m_name = szName;
|
||||||
|
|
||||||
if ( file.Load(szDirPrefix, szName, m_pluralFormsCalculator) )
|
if ( !file.Load(szDirPrefix, szName, m_pluralFormsCalculator) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
file.FillHash(m_messages, msgIdCharset, bConvertEncoding);
|
||||||
|
|
||||||
|
// 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 )
|
||||||
{
|
{
|
||||||
file.FillHash(m_messages, msgIdCharset, bConvertEncoding);
|
wxConvUI =
|
||||||
return true;
|
m_conv = new wxCSConv(file.GetCharset());
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const
|
const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const
|
||||||
|
Reference in New Issue
Block a user