X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfbb5eff442e9bcabd494f0340553fbf49739b25..438959cca892a7651634cc3a7aad4819ac49b23c:/include/wx/translation.h diff --git a/include/wx/translation.h b/include/wx/translation.h index 7c1e582b71..c12ae52046 100644 --- a/include/wx/translation.h +++ b/include/wx/translation.h @@ -20,10 +20,9 @@ #include "wx/buffer.h" #include "wx/language.h" - -#if !wxUSE_UNICODE - #include "wx/hashmap.h" -#endif +#include "wx/hashmap.h" +#include "wx/strconv.h" +#include "wx/scopedptr.h" // ============================================================================ // global decls @@ -49,9 +48,64 @@ // forward decls // ---------------------------------------------------------------------------- +class WXDLLIMPEXP_FWD_BASE wxArrayString; class WXDLLIMPEXP_FWD_BASE wxTranslationsLoader; class WXDLLIMPEXP_FWD_BASE wxLocale; -class wxMsgCatalog; + +class wxPluralFormsCalculator; +wxDECLARE_SCOPED_PTR(wxPluralFormsCalculator, wxPluralFormsCalculatorPtr) + +// ---------------------------------------------------------------------------- +// wxMsgCatalog corresponds to one loaded message catalog. +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_BASE wxMsgCatalog +{ +public: + // Ctor is protected, because CreateFromXXX functions must be used, + // but destruction should be unrestricted +#if !wxUSE_UNICODE + ~wxMsgCatalog(); +#endif + + // load the catalog from disk or from data; caller is responsible for + // deleting them if not NULL + static wxMsgCatalog *CreateFromFile(const wxString& filename, + const wxString& domain); + + static wxMsgCatalog *CreateFromData(const wxScopedCharBuffer& data, + const wxString& domain); + + // get name of the catalog + wxString GetDomain() const { return m_domain; } + + // get the translated string: returns NULL if not found + const wxString *GetString(const wxString& sz, unsigned n = UINT_MAX) const; + +protected: + wxMsgCatalog(const wxString& domain) + : m_pNext(NULL), m_domain(domain) +#if !wxUSE_UNICODE + , m_conv(NULL) +#endif + {} + +private: + // variable pointing to the next element in a linked list (or NULL) + wxMsgCatalog *m_pNext; + friend class wxTranslations; + + wxStringToStringHashMap m_messages; // all messages in the catalog + wxString m_domain; // name of the domain + +#if !wxUSE_UNICODE + // the conversion corresponding to this catalog charset if we installed it + // as the global one + wxCSConv *m_conv; +#endif + + wxPluralFormsCalculatorPtr m_pluralFormsCalculator; +}; // ---------------------------------------------------------------------------- // wxTranslations: message catalogs @@ -75,6 +129,14 @@ public: void SetLanguage(wxLanguage lang); void SetLanguage(const wxString& lang); + // get languages available for this app + wxArrayString GetAvailableTranslations(const wxString& domain) const; + + // find best translation language for given domain + wxString GetBestTranslation(const wxString& domain, wxLanguage msgIdLanguage); + wxString GetBestTranslation(const wxString& domain, + const wxString& msgIdLanguage = "en"); + // add standard wxWidgets catalog ("wxstd") bool AddStdCatalog(); @@ -91,12 +153,6 @@ public: // check if the given catalog is loaded bool IsLoaded(const wxString& domain) const; - // load catalog data directly from file or memory - bool LoadCatalogFile(const wxString& filename, - const wxString& domain = wxEmptyString); - bool LoadCatalogData(const wxScopedCharTypeBuffer& data, - const wxString& domain = wxEmptyString); - // access to translations const wxString& GetString(const wxString& origString, const wxString& domain = wxEmptyString) const; @@ -117,10 +173,6 @@ private: // perform loading of the catalog via m_loader bool LoadCatalog(const wxString& domain, const wxString& lang); - // find best translation for given domain - wxString ChooseLanguageForDomain(const wxString& domain, - const wxString& msgIdLang); - // find catalog by name in a linked list, return NULL if !found wxMsgCatalog *FindCatalog(const wxString& domain) const; @@ -133,10 +185,6 @@ private: wxTranslationsLoader *m_loader; wxMsgCatalog *m_pMsgCat; // pointer to linked list of catalogs - -#if !wxUSE_UNICODE - wxStringToStringHashMap m_msgIdCharset; -#endif }; @@ -147,8 +195,10 @@ public: wxTranslationsLoader() {} virtual ~wxTranslationsLoader() {} - virtual bool LoadCatalog(wxTranslations *translations, - const wxString& domain, const wxString& lang) = 0; + virtual wxMsgCatalog *LoadCatalog(const wxString& domain, + const wxString& lang) = 0; + + virtual wxArrayString GetAvailableTranslations(const wxString& domain) const = 0; }; @@ -159,8 +209,10 @@ class WXDLLIMPEXP_BASE wxFileTranslationsLoader public: static void AddCatalogLookupPathPrefix(const wxString& prefix); - virtual bool LoadCatalog(wxTranslations *translations, - const wxString& domain, const wxString& lang); + virtual wxMsgCatalog *LoadCatalog(const wxString& domain, + const wxString& lang); + + virtual wxArrayString GetAvailableTranslations(const wxString& domain) const; }; @@ -170,8 +222,10 @@ class WXDLLIMPEXP_BASE wxResourceTranslationsLoader : public wxTranslationsLoader { public: - virtual bool LoadCatalog(wxTranslations *translations, - const wxString& domain, const wxString& lang); + virtual wxMsgCatalog *LoadCatalog(const wxString& domain, + const wxString& lang); + + virtual wxArrayString GetAvailableTranslations(const wxString& domain) const; protected: // returns resource type to use for translations