1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

Text container fix

This commit is contained in:
nordsoft
2023-10-11 01:26:07 +02:00
parent 8335fffaea
commit 6093f042dd
4 changed files with 12 additions and 6 deletions

View File

@@ -264,21 +264,21 @@ void TextLocalizationContainer::registerStringOverride(const std::string & modCo
void TextLocalizationContainer::addSubContainer(const TextLocalizationContainer & container) void TextLocalizationContainer::addSubContainer(const TextLocalizationContainer & container)
{ {
subContainers.insert(&container); subContainers.push_back(&container);
} }
void TextLocalizationContainer::removeSubContainer(const TextLocalizationContainer & container) void TextLocalizationContainer::removeSubContainer(const TextLocalizationContainer & container)
{ {
subContainers.erase(&container); std::remove(subContainers.begin(), subContainers.end(), &container);
} }
const std::string & TextLocalizationContainer::deserialize(const TextIdentifier & identifier) const const std::string & TextLocalizationContainer::deserialize(const TextIdentifier & identifier) const
{ {
if(stringsLocalizations.count(identifier.get()) == 0) if(stringsLocalizations.count(identifier.get()) == 0)
{ {
for(const auto * container : subContainers) for(auto containerIter = subContainers.rbegin(); containerIter != subContainers.rend(); ++containerIter)
if(container->identifierExists(identifier)) if((*containerIter)->identifierExists(identifier))
return container->deserialize(identifier); return (*containerIter)->deserialize(identifier);
logGlobal->error("Unable to find localization for string '%s'", identifier.get()); logGlobal->error("Unable to find localization for string '%s'", identifier.get());
return identifier.get(); return identifier.get();

View File

@@ -146,7 +146,7 @@ protected:
/// map identifier -> localization /// map identifier -> localization
std::unordered_map<std::string, StringState> stringsLocalizations; std::unordered_map<std::string, StringState> stringsLocalizations;
std::set<const TextLocalizationContainer *> subContainers; std::vector<const TextLocalizationContainer *> subContainers;
/// add selected string to internal storage as high-priority strings /// add selected string to internal storage as high-priority strings
void registerStringOverride(const std::string & modContext, const std::string & language, const TextIdentifier & UID, const std::string & localized); void registerStringOverride(const std::string & modContext, const std::string & language, const TextIdentifier & UID, const std::string & localized);

View File

@@ -144,6 +144,9 @@ ui8 CMapHeader::levels() const
void CMapHeader::registerMapStrings() void CMapHeader::registerMapStrings()
{ {
VLC->generaltexth->removeSubContainer(*this);
VLC->generaltexth->addSubContainer(*this);
//get supported languages. Assuming that translation containing most strings is the base language //get supported languages. Assuming that translation containing most strings is the base language
std::set<std::string> mapLanguages, mapBaseLanguages; std::set<std::string> mapLanguages, mapBaseLanguages;
int maxStrings = 0; int maxStrings = 0;

View File

@@ -105,7 +105,10 @@ std::string CMapInfo::getNameTranslated() const
if(campaign && !campaign->getNameTranslated().empty()) if(campaign && !campaign->getNameTranslated().empty())
return campaign->getNameTranslated(); return campaign->getNameTranslated();
else if(mapHeader && !mapHeader->name.empty()) else if(mapHeader && !mapHeader->name.empty())
{
mapHeader->registerMapStrings();
return mapHeader->name.toString(); return mapHeader->name.toString();
}
else else
return VLC->generaltexth->allTexts[508]; return VLC->generaltexth->allTexts[508];
} }