Merge pull request #3833 from ab9rf/translate-name

use df's translate_name function if available
develop
Myk 2023-10-14 11:38:05 -07:00 committed by GitHub
commit 64dce4fc10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

@ -77,6 +77,7 @@ Template for new versions:
## Documentation
## API
- Translate: will use DF's ``translate_name`` function, if available, instead of the DFHack emulation
## Lua
- added ``GRAY`` color aliases for ``GREY`` colors

@ -27,7 +27,7 @@ distribution.
#include <string>
#include <vector>
#include <map>
using namespace std;
#include <functional>
#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<void(const df::language_name&, std::string&, bool, bool)> fun_type;
auto f = reinterpret_cast<fun_type*>(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) {