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:
Vadim Zeitlin
2006-04-11 01:34:03 +00:00
parent ffb4a474d3
commit 77c514d111

View File

@@ -885,9 +885,14 @@ public:
wxPluralFormsCalculatorPtr& rPluralFormsCalculator);
// fills the hash with string-translation pairs
void FillHash(wxMessagesHash& hash, const wxString& msgIdCharset,
void FillHash(wxMessagesHash& hash,
const wxString& msgIdCharset,
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:
// this implementation is binary compatible with GNU gettext() version 0.10
@@ -921,7 +926,8 @@ private:
wxMsgTableEntry *m_pOrigTable, // pointer to original strings
*m_pTransTable; // translated
wxString m_charset;
wxString m_charset; // from the message catalog header
// swap the 2 halves of 32 bit integer if needed
size_t32 Swap(size_t32 ui) const
@@ -961,6 +967,9 @@ private:
class wxMsgCatalog
{
public:
wxMsgCatalog() { m_conv = NULL; }
~wxMsgCatalog();
// load the catalog from disk (szDirPrefix corresponds to language)
bool Load(const wxChar *szDirPrefix, const wxChar *szName,
const wxChar *msgIdCharset = NULL, bool bConvertEncoding = false);
@@ -977,6 +986,11 @@ public:
private:
wxMessagesHash m_messages; // all messages in the catalog
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;
};
@@ -1003,7 +1017,7 @@ wxMsgCatalogFile::wxMsgCatalogFile()
wxMsgCatalogFile::~wxMsgCatalogFile()
{
wxDELETEA(m_pData);
delete [] m_pData;
}
// return the directory to search for message catalogs under the given prefix
@@ -1253,9 +1267,9 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
// Unicode build
convertEncoding = true;
#elif wxUSE_FONTMAP
// determine if we need any conversion at all
if ( convertEncoding )
{
// determine if we need any conversion at all
wxFontEncoding encCat = wxFontMapperBase::GetEncodingFromName(m_charset);
if ( encCat == wxLocale::GetSystemEncoding() )
{
@@ -1392,6 +1406,21 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash,
// 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,
const wxChar *msgIdCharset, bool bConvertEncoding)
{
@@ -1399,13 +1428,28 @@ bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *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);
return true;
wxConvUI =
m_conv = new wxCSConv(file.GetCharset());
}
return false;
return true;
}
const wxChar *wxMsgCatalog::GetString(const wxChar *sz, size_t n) const