/* * OpenClonk, http://www.openclonk.org * * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/ * Copyright (c) 2013-2016, The OpenClonk Team and contributors * * Distributed under the terms of the ISC license; see accompanying file * "COPYING" for details. * * "Clonk" is a registered trademark of Matthes Bender, used with permission. * See accompanying file "TRADEMARK" for details. * * To redistribute this file separately, substitute the full license texts * for the above references. */ /* Language module controlling external language packs */ #ifndef INC_C4Language #define INC_C4Language #include "c4group/C4Group.h" #include "c4group/C4GroupSet.h" #include "c4group/C4LangStringTable.h" const int C4MaxLanguageInfo = 1024; class C4LanguageInfo { friend class C4Language; public: char Code[2 + 1]; char Name[C4MaxLanguageInfo + 1]; char Info[C4MaxLanguageInfo + 1]; char Fallback[C4MaxLanguageInfo + 1]; private: C4LanguageInfo* Next; }; class C4Language { public: C4Language(); ~C4Language(); private: C4Group PackDirectory; C4GroupSet Packs; C4GroupSet PackGroups; class C4LanguageInfo* Infos; char PackGroupLocation[_MAX_FNAME + 1]; public: bool CloseGroup(const char *strPath); void ClearLanguage(); // Initialization bool Init(); void Clear(); // Handling of external language packs int GetPackCount(); C4GroupSet GetPackGroups(C4Group &); // Load a C4ComponentHost from all loaded language packs static bool LoadComponentHost(C4ComponentHost *host, C4Group &hGroup, const char *szFilename, const char *szLanguage); // Handling of language info loaded from string tables int GetInfoCount(); C4LanguageInfo *GetInfo(int iIndex); C4LanguageInfo *FindInfo(const char *strCode); // Loading of actual resource string table bool LoadLanguage(const char *strLanguages); inline bool HasStringTable() const { return !C4LangStringTable::GetSystemStringTable().GetDataBuf().isNull(); } private: // Handling of language info loaded from string tables void InitInfos(); void LoadInfos(C4Group &hGroup); // Loading of actual resource string table bool InitStringTable(const char *strCode); bool LoadStringTable(C4Group &hGroup, const char *strCode); }; extern C4Language Languages; inline const char *LoadResStr(const char *id) { try { return C4LangStringTable::GetSystemStringTable().Translate(id).c_str(); } catch (C4LangStringTable::NoSuchTranslation &) { return id; } } const char *LoadResStrNoAmp(const char *id); #endif