1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Fixed missing translation strings on loading campaign save

- campaign header now contains text container and stores campaign texts
- map header now contains text container instead of inheriting it
- moved text container registration logic to a wraper class
- fixed registration of copied text containers (from copied map header)
This commit is contained in:
Ivan Savenko
2024-01-15 13:10:25 +02:00
parent d3a1cdb97a
commit c7897300c0
9 changed files with 67 additions and 25 deletions

View File

@@ -122,13 +122,9 @@ CMapHeader::CMapHeader() : version(EMapFormat::VCMI), height(72), width(72),
setupEvents();
allowedHeroes = VLC->heroh->getDefaultAllowed();
players.resize(PlayerColor::PLAYER_LIMIT_I);
VLC->generaltexth->addSubContainer(*this);
}
CMapHeader::~CMapHeader()
{
VLC->generaltexth->removeSubContainer(*this);
}
CMapHeader::~CMapHeader() = default;
ui8 CMapHeader::levels() const
{
@@ -137,9 +133,6 @@ ui8 CMapHeader::levels() const
void CMapHeader::registerMapStrings()
{
VLC->generaltexth->removeSubContainer(*this);
VLC->generaltexth->addSubContainer(*this);
//get supported languages. Assuming that translation containing most strings is the base language
std::set<std::string> mapLanguages, mapBaseLanguages;
int maxStrings = 0;
@@ -193,7 +186,7 @@ void CMapHeader::registerMapStrings()
JsonUtils::mergeCopy(data, translations[language]);
for(auto & s : data.Struct())
registerString("map", TextIdentifier(s.first), s.second.String(), language);
texts.registerString("map", TextIdentifier(s.first), s.second.String(), language);
}
std::string mapRegisterLocalizedString(const std::string & modContext, CMapHeader & mapHeader, const TextIdentifier & UID, const std::string & localized)
@@ -203,7 +196,7 @@ std::string mapRegisterLocalizedString(const std::string & modContext, CMapHeade
std::string mapRegisterLocalizedString(const std::string & modContext, CMapHeader & mapHeader, const TextIdentifier & UID, const std::string & localized, const std::string & language)
{
mapHeader.registerString(modContext, UID, localized, language);
mapHeader.texts.registerString(modContext, UID, localized, language);
mapHeader.translations.Struct()[language].Struct()[UID.get()].String() = localized;
return UID.get();
}