Add sm_reload_translations command (bug 5750, r=asherkin).

This commit is contained in:
Nicholas Hastings 2014-03-30 12:08:11 -04:00
parent 2c399ec441
commit 563dd617af
4 changed files with 19 additions and 9 deletions

View File

@ -728,10 +728,7 @@ ConfigResult Translator::OnSourceModConfigChanged(const char *key,
void Translator::OnSourceModLevelChange(const char *mapName) void Translator::OnSourceModLevelChange(const char *mapName)
{ {
/* Refresh language stuff */ RebuildLanguageDatabase();
char path[PLATFORM_MAX_PATH];
g_pSM->BuildPath(Path_SM, path, sizeof(path), "configs/languages.cfg");
RebuildLanguageDatabase(path);
} }
void Translator::OnSourceModAllInitialized() void Translator::OnSourceModAllInitialized()
@ -807,7 +804,7 @@ unsigned int Translator::FindOrAddPhraseFile(const char *phrase_file)
return idx; return idx;
} }
void Translator::RebuildLanguageDatabase(const char *lang_header_file) void Translator::RebuildLanguageDatabase()
{ {
/* Erase everything we have */ /* Erase everything we have */
m_LCodeLookup.clear(); m_LCodeLookup.clear();
@ -821,9 +818,12 @@ void Translator::RebuildLanguageDatabase(const char *lang_header_file)
m_Languages.clear(); m_Languages.clear();
/* Start anew */ /* Start anew */
char path[PLATFORM_MAX_PATH];
g_pSM->BuildPath(Path_SM, path, sizeof(path), "configs/languages.cfg");
SMCError err; SMCError err;
SMCStates states; SMCStates states;
if ((err=textparsers->ParseFile_SMC(lang_header_file, this, &states)) != SMCError_Okay) if ((err=textparsers->ParseFile_SMC(path, this, &states)) != SMCError_Okay)
{ {
const char *str_err = textparsers->GetSMCErrorString(err); const char *str_err = textparsers->GetSMCErrorString(err);
if (!str_err) if (!str_err)
@ -831,7 +831,7 @@ void Translator::RebuildLanguageDatabase(const char *lang_header_file)
str_err = m_CustomError.c_str(); str_err = m_CustomError.c_str();
} }
smcore.LogError("[SM] Failed to parse language header file: \"%s\"", lang_header_file); smcore.LogError("[SM] Failed to parse language header file: \"%s\"", path);
smcore.LogError("[SM] Parse error (line %d, column %d): %s", states.line, states.col, str_err); smcore.LogError("[SM] Parse error (line %d, column %d): %s", states.line, states.col, str_err);
} }

View File

@ -115,7 +115,6 @@ public: // ITextListener_SMC
SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value); SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value);
SMCResult ReadSMC_LeavingSection(const SMCStates *states); SMCResult ReadSMC_LeavingSection(const SMCStates *states);
public: public:
void RebuildLanguageDatabase(const char *lang_header_file);
unsigned int FindOrAddPhraseFile(const char *phrase_file); unsigned int FindOrAddPhraseFile(const char *phrase_file);
BaseStringTable *GetStringTable(); BaseStringTable *GetStringTable();
unsigned int GetLanguageCount(); unsigned int GetLanguageCount();
@ -146,6 +145,7 @@ public: //ITranslator
size_t *pOutLength, size_t *pOutLength,
const char **pFailPhrase); const char **pFailPhrase);
bool GetLanguageInfo(unsigned int number, const char **code, const char **name); bool GetLanguageInfo(unsigned int number, const char **code, const char **name);
void RebuildLanguageDatabase();
private: private:
bool AddLanguage(const char *langcode, const char *description); bool AddLanguage(const char *langcode, const char *description);
private: private:

View File

@ -414,3 +414,8 @@ CON_COMMAND(sm_dump_handles, "Dumps Handle usage to a file for finding Handle le
} }
} }
CON_COMMAND(sm_reload_translations, "Reparses all loaded translation files")
{
translator->RebuildLanguageDatabase();
}

View File

@ -35,7 +35,7 @@
#include <IShareSys.h> #include <IShareSys.h>
#define SMINTERFACE_TRANSLATOR_NAME "ITranslator" #define SMINTERFACE_TRANSLATOR_NAME "ITranslator"
#define SMINTERFACE_TRANSLATOR_VERSION 3 #define SMINTERFACE_TRANSLATOR_VERSION 4
#define MAX_TRANSLATE_PARAMS 32 #define MAX_TRANSLATE_PARAMS 32
#define CORELANG_ENGLISH 0 #define CORELANG_ENGLISH 0
@ -351,6 +351,11 @@ namespace SourceMod
* @return True if language number is valid, false otherwise. * @return True if language number is valid, false otherwise.
*/ */
virtual bool GetLanguageInfo(unsigned int number, const char **code, const char **name) =0; virtual bool GetLanguageInfo(unsigned int number, const char **code, const char **name) =0;
/**
* @brief Reparses all loaded translations files.
*/
virtual void RebuildLanguageDatabase() =0;
}; };
} }