summaryrefslogtreecommitdiff
path: root/game/shared/econ/localization_provider.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/econ/localization_provider.h')
-rw-r--r--game/shared/econ/localization_provider.h103
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