diff --git a/library/modules/Translation.cpp b/library/modules/Translation.cpp index af06eeb49..8bd79d101 100644 --- a/library/modules/Translation.cpp +++ b/library/modules/Translation.cpp @@ -27,7 +27,7 @@ distribution. #include #include #include -using namespace std; +#include #include "modules/Translation.h" #include "VersionInfo.h" @@ -36,6 +36,7 @@ using namespace std; #include "ModuleFactory.h" #include "Core.h" #include "Error.h" +#include "Debug.h" using namespace DFHack; using namespace df::enums; @@ -44,10 +45,16 @@ using namespace df::enums; #include "df/world.h" #include "df/d_init.h" +using std::vector, std::string; + using df::global::world; using df::global::d_init; using df::global::gametype; +namespace DFHack { + DBG_DECLARE(core, translate, DebugCategory::LINFO); +} + bool Translation::IsValid () { return (world && (world->raws.language.words.size() > 0) && (world->raws.language.translations.size() > 0)); @@ -167,6 +174,23 @@ string Translation::TranslateName(const df::language_name * name, bool inEnglish CHECK_NULL_POINTER(name); string out; + + auto fp = df::global::translate_name; + + if (fp) { + DEBUG(translate).print("using df provided translate_name function\n"); + typedef std::function fun_type; + auto f = reinterpret_cast(fp); + try { + (*f)(*name, out, inEnglish, onlyLastPart); + return out; + } + catch (...) { + WARN(translate).print("df provided translate_name function threw an exception, falling back\n"); + } + } + + DEBUG(translate).print("using dfhack fallback translate_name function\n"); string word; if (!onlyLastPart) {