about summary refs log tree commit diff
path: root/src/game/localization.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/localization.h')
-rw-r--r--src/game/localization.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/game/localization.h b/src/game/localization.h
new file mode 100644
index 00000000..2e96ef04
--- /dev/null
+++ b/src/game/localization.h
@@ -0,0 +1,57 @@
+#ifndef GAME_LOCALIZATION_H
+#define GAME_LOCALIZATION_H
+#include <base/tl/string.h>
+#include <base/tl/sorted_array.h>
+
+class CLocalizationDatabase
+{
+	class CString
+	{
+	public:
+		unsigned m_Hash;
+		
+		// TODO: do this as an const char * and put everything on a incremental heap
+		string m_Replacement;
+
+		bool operator <(const CString &Other) const { return m_Hash < Other.m_Hash; }
+		bool operator <=(const CString &Other) const { return m_Hash <= Other.m_Hash; }
+		bool operator ==(const CString &Other) const { return m_Hash == Other.m_Hash; }
+	};
+
+	sorted_array<CString> m_Strings;
+	int m_CurrentVersion;
+	
+public:
+	CLocalizationDatabase();
+
+	bool Load(const char *pFilename);
+
+	int Version() { return m_CurrentVersion; }
+	
+	void AddString(const char *pOrgStr, const char *pNewStr);
+	const char *FindString(unsigned Hash);
+};
+
+extern CLocalizationDatabase g_Localization;
+
+class CLocConstString
+{
+	const char *m_pDefaultStr;
+	const char *m_pCurrentStr;
+	unsigned m_Hash;
+	int m_Version;
+public:
+	CLocConstString(const char *pStr);
+	void Reload();
+	
+	inline operator const char *()
+	{
+		if(m_Version != g_Localization.Version())
+			Reload();
+		return m_pCurrentStr;
+	}
+};
+
+
+extern const char *Localize(const char *pStr);
+#endif