// The loaded catalog will be used for message lookup by GetString().
//
// Returns 'true' if it was successfully loaded
- bool AddCatalog(const wxString& domain)
- { return m_translations.AddCatalog(domain); }
- bool AddCatalog(const wxString& domain, wxLanguage msgIdLanguage)
- { return m_translations.AddCatalog(domain, msgIdLanguage); }
+ bool AddCatalog(const wxString& domain);
+ bool AddCatalog(const wxString& domain, wxLanguage msgIdLanguage);
bool AddCatalog(const wxString& domain,
wxLanguage msgIdLanguage, const wxString& msgIdCharset);
static bool IsAvailable(int lang);
// check if the given catalog is loaded
- bool IsLoaded(const wxString& domain) const
- { return m_translations.IsLoaded(domain); }
+ bool IsLoaded(const wxString& domain) const;
// Retrieve the language info struct for the given language
//
const wxString& GetString(const wxString& origString,
const wxString& domain = wxEmptyString) const
{
- return m_translations.GetString(origString, domain);
+ return wxGetTranslation(origString, domain);
}
// plural form version of the same:
const wxString& GetString(const wxString& origString,
size_t n,
const wxString& domain = wxEmptyString) const
{
- return m_translations.GetString(origString, origString2, n, domain);
+ return wxGetTranslation(origString, origString2, n, domain);
}
// this is hack to work around a problem with wxGetTranslation() which
// return the contents of .po file header
wxString GetHeaderValue(const wxString& header,
- const wxString& domain = wxEmptyString) const
- {
- return m_translations.GetHeaderValue(header, domain);
- }
+ const wxString& domain = wxEmptyString) const;
// These two methods are for internal use only. First one creates
// ms_languagesDB if it doesn't already exist, second one destroys
m_pszOldLocale = NULL;
m_pOldLocale = wxSetLocale(this);
- wxTranslations::SetNonOwned(&m_translations);
+
+ // Set translations object, but only if the user didn't do so yet.
+ // This is to preserve compatibility with wx-2.8 where wxLocale was
+ // the only API for translations. wxLocale works as a stack, with
+ // latest-created one being the active one:
+ // wxLocale loc_fr(wxLANGUAGE_FRENCH);
+ // // _() returns French
+ // {
+ // wxLocale loc_cs(wxLANGUAGE_CZECH);
+ // // _() returns Czech
+ // }
+ // // _() returns French again
+ wxTranslations *oldTrans = wxTranslations::Get();
+ if ( !oldTrans ||
+ (m_pOldLocale && oldTrans == &m_pOldLocale->m_translations) )
+ {
+ wxTranslations::SetNonOwned(&m_translations);
+ }
m_language = wxLANGUAGE_UNKNOWN;
m_initialized = false;
bool ret = DoInit(name, shortName, locale);
// NB: don't use 'lang' here, 'language' may be wxLANGUAGE_DEFAULT
- m_translations.SetLanguage(shortName);
+ wxTranslations *t = wxTranslations::Get();
+ if ( t )
+ {
+ t->SetLanguage(shortName);
- if ( bLoadDefault )
- m_translations.AddStdCatalog();
+ if ( bLoadDefault )
+ t->AddStdCatalog();
+ }
return ret;
}
m_language = lang;
// NB: don't use 'lang' here, 'language'
- m_translations.SetLanguage(wx_static_cast(wxLanguage, language));
+ wxTranslations *t = wxTranslations::Get();
+ if ( t )
+ {
+ t->SetLanguage(static_cast<wxLanguage>(language));
- if ( flags & wxLOCALE_LOAD_DEFAULT )
- m_translations.AddStdCatalog();
+ if ( flags & wxLOCALE_LOAD_DEFAULT )
+ t->AddStdCatalog();
+ }
return ret;
#endif // !WX_NO_LOCALE_SUPPORT
// clean up
wxLocale::~wxLocale()
{
- // restore old translations object
+ // Restore old translations object.
+ // See DoCommonInit() for explanation of why this is needed for backward
+ // compatibility.
if ( wxTranslations::Get() == &m_translations )
{
if ( m_pOldLocale )
return true;
}
+
+bool wxLocale::AddCatalog(const wxString& domain)
+{
+ wxTranslations *t = wxTranslations::Get();
+ if ( !t )
+ return false;
+ return t->AddCatalog(domain);
+}
+
+bool wxLocale::AddCatalog(const wxString& domain, wxLanguage msgIdLanguage)
+{
+ wxTranslations *t = wxTranslations::Get();
+ if ( !t )
+ return false;
+ return t->AddCatalog(domain, msgIdLanguage);
+}
+
// add a catalog to our linked list
bool wxLocale::AddCatalog(const wxString& szDomain,
wxLanguage msgIdLanguage,
const wxString& msgIdCharset)
{
+ wxTranslations *t = wxTranslations::Get();
+ if ( !t )
+ return false;
#if wxUSE_UNICODE
wxUnusedVar(msgIdCharset);
- return m_translations.AddCatalog(szDomain, msgIdLanguage);
+ return t->AddCatalog(szDomain, msgIdLanguage);
#else
- return m_translations.AddCatalog(szDomain, msgIdLanguage, msgIdCharset);
+ return t->AddCatalog(szDomain, msgIdLanguage, msgIdCharset);
#endif
}
+bool wxLocale::IsLoaded(const wxString& domain) const
+{
+ wxTranslations *t = wxTranslations::Get();
+ if ( !t )
+ return false;
+ return t->IsLoaded(domain);
+}
+
+wxString wxLocale::GetHeaderValue(const wxString& header,
+ const wxString& domain) const
+{
+ wxTranslations *t = wxTranslations::Get();
+ if ( !t )
+ return wxEmptyString;
+ return t->GetHeaderValue(header, domain);
+}
+
// ----------------------------------------------------------------------------
// accessors for locale-dependent data
// ----------------------------------------------------------------------------