diff options
Diffstat (limited to 'game/shared/econ/localization_provider.h')
| -rw-r--r-- | game/shared/econ/localization_provider.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/game/shared/econ/localization_provider.h b/game/shared/econ/localization_provider.h new file mode 100644 index 0000000..0ee2fdd --- /dev/null +++ b/game/shared/econ/localization_provider.h @@ -0,0 +1,103 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: provide a layer of abstraction between GC and vgui localization systems +// +//============================================================================= + +#ifndef LOCALIZATION_PROVIDER_H +#define LOCALIZATION_PROVIDER_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "language.h" +#include "ilocalize.h" + + +// interface matches a subset of VGUI functions +class CLocalizationProvider +{ +public: + virtual locchar_t *Find( const char *pchKey ) const = 0; + locchar_t* FindSafe( const char* pchKey ) const; + + // new interface + virtual void ConvertLoccharToANSI ( const locchar_t *loc_In, CUtlConstString *out_ansi ) const = 0; + virtual void ConvertLoccharToUnicode( const locchar_t *loc_In, CUtlConstWideString *out_unicode ) const = 0; + virtual void ConvertUTF8ToLocchar ( const char *utf8_In, CUtlConstStringBase<locchar_t> *out_loc ) const = 0; + + // old C-style interface + virtual int ConvertLoccharToANSI( const locchar_t *loc, OUT_Z_BYTECAP(ansiBufferSize) char *ansi, int ansiBufferSize ) const = 0; + virtual int ConvertLoccharToUnicode( const locchar_t *loc, OUT_Z_BYTECAP(unicodeBufferSize) wchar_t *unicode, int unicodeBufferSize ) const = 0; + + virtual void ConvertUTF8ToLocchar( const char *utf8, OUT_Z_BYTECAP(loccharBufferSize) locchar_t *locchar, int loccharBufferSize ) const = 0; + + virtual ELanguage GetELang() const = 0; +}; +CLocalizationProvider *GLocalizationProvider(); + +#ifdef GC +// GC localization is handled by the GC itself +class CGCLocalizationProvider : public CLocalizationProvider +{ +public: + CGCLocalizationProvider( CGCGameBase *pGC, ELanguage eLang = k_Lang_English ) + { + m_pGC = pGC; + m_eLang = eLang; + } + + static bool BEnsureCleanUTF8Truncation( char *unicodeOutput ); + + virtual locchar_t *Find( const char *pchKey ) const; + + // new interface + virtual void ConvertLoccharToANSI ( const locchar_t *loc_In, CUtlConstString *out_ansi ) const; + virtual void ConvertLoccharToUnicode( const locchar_t *loc_In, CUtlConstWideString *out_unicode ) const; + virtual void ConvertUTF8ToLocchar ( const char *utf8_In, CUtlConstStringBase<locchar_t> *out_loc ) const; + + // old C-style interface + virtual int ConvertLoccharToANSI( const locchar_t *loc, char *ansi, int ansiBufferSize ) const; + virtual int ConvertLoccharToUnicode( const locchar_t *loc, wchar_t *unicode, int unicodeBufferSize ) const; + + virtual void ConvertUTF8ToLocchar( const char *utf8, locchar_t *locchar, int loccharBufferSize ) const; + + virtual ELanguage GetELang() const { return m_eLang; } + +private: + CGCGameBase *m_pGC; + ELanguage m_eLang; +}; + + +#else + +#include "vgui/ILocalize.h" +extern vgui::ILocalize *g_pVGuiLocalize; + +// Game localization is handled by vgui +class CVGUILocalizationProvider : public CLocalizationProvider +{ +public: + CVGUILocalizationProvider(); + + virtual locchar_t *Find( const char *pchKey ) const; + + // new interface + virtual void ConvertLoccharToANSI ( const locchar_t *loc_In, CUtlConstString *out_ansi ) const; + virtual void ConvertLoccharToUnicode( const locchar_t *loc_In, CUtlConstWideString *out_unicode ) const; + virtual void ConvertUTF8ToLocchar ( const char *utf8_In, CUtlConstStringBase<locchar_t> *out_loc ) const; + + // old C-style interface + virtual int ConvertLoccharToANSI( const locchar_t *loc, char *ansi, int ansiBufferSize ) const; + virtual int ConvertLoccharToUnicode( const locchar_t *loc, wchar_t *unicode, int unicodeBufferSize ) const; + + virtual void ConvertUTF8ToLocchar( const char *utf8, locchar_t *locchar, int loccharBufferSize ) const; + + virtual ELanguage GetELang() const { return k_Lang_None; } + +}; +#endif + +#endif // LOCALIZATION_PROVIDER_H
\ No newline at end of file |