From 563dd617af1a505aa2b3e896251a41d42aaf0743 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Sun, 30 Mar 2014 12:08:11 -0400 Subject: [PATCH] Add sm_reload_translations command (bug 5750, r=asherkin). --- core/logic/Translator.cpp | 14 +++++++------- core/logic/Translator.h | 2 +- core/sm_srvcmds.cpp | 5 +++++ public/ITranslator.h | 7 ++++++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/core/logic/Translator.cpp b/core/logic/Translator.cpp index 97369514..c2910921 100644 --- a/core/logic/Translator.cpp +++ b/core/logic/Translator.cpp @@ -728,10 +728,7 @@ ConfigResult Translator::OnSourceModConfigChanged(const char *key, void Translator::OnSourceModLevelChange(const char *mapName) { - /* Refresh language stuff */ - char path[PLATFORM_MAX_PATH]; - g_pSM->BuildPath(Path_SM, path, sizeof(path), "configs/languages.cfg"); - RebuildLanguageDatabase(path); + RebuildLanguageDatabase(); } void Translator::OnSourceModAllInitialized() @@ -807,7 +804,7 @@ unsigned int Translator::FindOrAddPhraseFile(const char *phrase_file) return idx; } -void Translator::RebuildLanguageDatabase(const char *lang_header_file) +void Translator::RebuildLanguageDatabase() { /* Erase everything we have */ m_LCodeLookup.clear(); @@ -821,9 +818,12 @@ void Translator::RebuildLanguageDatabase(const char *lang_header_file) m_Languages.clear(); /* Start anew */ + char path[PLATFORM_MAX_PATH]; + g_pSM->BuildPath(Path_SM, path, sizeof(path), "configs/languages.cfg"); + SMCError err; 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); if (!str_err) @@ -831,7 +831,7 @@ void Translator::RebuildLanguageDatabase(const char *lang_header_file) 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); } diff --git a/core/logic/Translator.h b/core/logic/Translator.h index 2ff5bfc0..8a49eac1 100644 --- a/core/logic/Translator.h +++ b/core/logic/Translator.h @@ -115,7 +115,6 @@ public: // ITextListener_SMC SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value); SMCResult ReadSMC_LeavingSection(const SMCStates *states); public: - void RebuildLanguageDatabase(const char *lang_header_file); unsigned int FindOrAddPhraseFile(const char *phrase_file); BaseStringTable *GetStringTable(); unsigned int GetLanguageCount(); @@ -146,6 +145,7 @@ public: //ITranslator size_t *pOutLength, const char **pFailPhrase); bool GetLanguageInfo(unsigned int number, const char **code, const char **name); + void RebuildLanguageDatabase(); private: bool AddLanguage(const char *langcode, const char *description); private: diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp index 3e20f2b2..766ceb90 100644 --- a/core/sm_srvcmds.cpp +++ b/core/sm_srvcmds.cpp @@ -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(); +} + diff --git a/public/ITranslator.h b/public/ITranslator.h index 79aefec1..d6f5c9d1 100644 --- a/public/ITranslator.h +++ b/public/ITranslator.h @@ -35,7 +35,7 @@ #include #define SMINTERFACE_TRANSLATOR_NAME "ITranslator" -#define SMINTERFACE_TRANSLATOR_VERSION 3 +#define SMINTERFACE_TRANSLATOR_VERSION 4 #define MAX_TRANSLATE_PARAMS 32 #define CORELANG_ENGLISH 0 @@ -351,6 +351,11 @@ namespace SourceMod * @return True if language number is valid, false otherwise. */ virtual bool GetLanguageInfo(unsigned int number, const char **code, const char **name) =0; + + /** + * @brief Reparses all loaded translations files. + */ + virtual void RebuildLanguageDatabase() =0; }; }