X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/31b7522e2bc5a058e75bd710471198fb384e500b..754626543e36a222bbfbdd4d3373970f2cc5f05f:/include/wx/intl.h diff --git a/include/wx/intl.h b/include/wx/intl.h index ba26a16295..4a996c086b 100644 --- a/include/wx/intl.h +++ b/include/wx/intl.h @@ -42,20 +42,20 @@ enum wxLayoutDirection // --keyword="_" --keyword="wxPLURAL:1,2" options // to extract the strings from the sources) #ifndef WXINTL_NO_GETTEXT_MACRO - #define _(s) wxGetTranslation(_T(s)) - #define wxPLURAL(sing, plur, n) wxGetTranslation(_T(sing), _T(plur), n) + #define _(s) wxGetTranslation((s)) + #define wxPLURAL(sing, plur, n) wxGetTranslation((sing), (plur), n) #endif // another one which just marks the strings for extraction, but doesn't // perform the translation (use -kwxTRANSLATE with xgettext!) -#define wxTRANSLATE(str) _T(str) +#define wxTRANSLATE(str) (str) // ---------------------------------------------------------------------------- // forward decls // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_BASE wxLocale; -class WXDLLIMPEXP_BASE wxLanguageInfoArray; +class WXDLLIMPEXP_FWD_BASE wxLocale; +class WXDLLIMPEXP_FWD_BASE wxLanguageInfoArray; class wxMsgCatalog; // ============================================================================ @@ -512,6 +512,11 @@ public: size_t n, const wxString& domain = wxEmptyString) const; + // this is hack to work around a problem with wxGetTranslation() which + // returns const wxString& and not wxString, so when it returns untranslated + // string, it needs to have a copy of it somewhere + static const wxString& GetUntranslatedString(const wxString& str); + // Returns the current short name for the locale const wxString& GetName() const { return m_strShort; } @@ -540,7 +545,7 @@ private: m_strShort; // short name for the locale int m_language; // this locale wxLanguage value - const wxChar *m_pszOldLocale; // previous locale from setlocale() + const char *m_pszOldLocale; // previous locale from setlocale() wxLocale *m_pOldLocale; // previous wxLocale wxMsgCatalog *m_pMsgCat; // pointer to linked list of catalogs @@ -569,7 +574,9 @@ inline const wxString& wxGetTranslation(const wxString& str, if (pLoc) return pLoc->GetString(str, domain); else - return str; + // NB: this function returns reference to a string, so we have to keep + // a copy of it somewhere + return wxLocale::GetUntranslatedString(str); } inline const wxString& wxGetTranslation(const wxString& str1, const wxString& str2, @@ -580,7 +587,11 @@ inline const wxString& wxGetTranslation(const wxString& str1, if (pLoc) return pLoc->GetString(str1, str2, n, domain); else - return n == 1 ? str1 : str2; + // NB: this function returns reference to a string, so we have to keep + // a copy of it somewhere + return n == 1 + ? wxLocale::GetUntranslatedString(str1) + : wxLocale::GetUntranslatedString(str2); } #else // !wxUSE_INTL @@ -589,17 +600,34 @@ inline const wxString& wxGetTranslation(const wxString& str1, #if !defined(WXINTL_NO_GETTEXT_MACRO) #if !defined(_) - #define _(s) (_T(s)) + #define _(s) (s) #endif + #define wxPLURAL(sing, plur, n) ((n) == 1 ? (sing) : (plur)) #endif -#define wxTRANSLATE(str) _T(str) +#define wxTRANSLATE(str) (str) -inline const wxString& wxGetTranslation(const wxString& str, - const wxString& WXUNUSED(domain) = wxEmptyString) -{ - return str; -} +// NB: we use a template here in order to avoid using +// wxLocale::GetUntranslatedString() above, which would be required if +// we returned const wxString&; this way, the compiler should be able to +// optimize wxGetTranslation() away + +template +inline TString wxGetTranslation(TString str) + { return str; } + +template +inline TString wxGetTranslation(TString str, TDomain WXUNUSED(domain)) + { return str; } + +template +inline TString wxGetTranslation(TString str1, TString str2, size_t n) + { return n == 1 ? str1 : str2; } + +template +inline TString wxGetTranslation(TString str1, TString str2, size_t n, + TDomain WXUNUSED(domain)) + { return n == 1 ? str1 : str2; } #endif // wxUSE_INTL/!wxUSE_INTL @@ -607,10 +635,10 @@ inline const wxString& wxGetTranslation(const wxString& str, // wxTRANSLATE) too #if !defined(WXINTL_NO_GETTEXT_MACRO) #if !defined(gettext_noop) - #define gettext_noop(str) _T(str) + #define gettext_noop(str) (str) #endif #if !defined(N_) - #define N_(s) _T(s) + #define N_(s) (s) #endif #endif