diff --git a/lib/CGeneralTextHandler.cpp b/lib/CGeneralTextHandler.cpp index 657fb564e..2a5e280d7 100644 --- a/lib/CGeneralTextHandler.cpp +++ b/lib/CGeneralTextHandler.cpp @@ -264,21 +264,21 @@ void TextLocalizationContainer::registerStringOverride(const std::string & modCo void TextLocalizationContainer::addSubContainer(const TextLocalizationContainer & container) { - subContainers.insert(&container); + subContainers.push_back(&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 { if(stringsLocalizations.count(identifier.get()) == 0) { - for(const auto * container : subContainers) - if(container->identifierExists(identifier)) - return container->deserialize(identifier); + for(auto containerIter = subContainers.rbegin(); containerIter != subContainers.rend(); ++containerIter) + if((*containerIter)->identifierExists(identifier)) + return (*containerIter)->deserialize(identifier); logGlobal->error("Unable to find localization for string '%s'", identifier.get()); return identifier.get(); diff --git a/lib/CGeneralTextHandler.h b/lib/CGeneralTextHandler.h index 3807ddc7a..7bc7b3b94 100644 --- a/lib/CGeneralTextHandler.h +++ b/lib/CGeneralTextHandler.h @@ -146,7 +146,7 @@ protected: /// map identifier -> localization std::unordered_map stringsLocalizations; - std::set subContainers; + std::vector subContainers; /// 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); diff --git a/lib/mapping/CMapHeader.cpp b/lib/mapping/CMapHeader.cpp index c86a923b8..2ca1ee8e0 100644 --- a/lib/mapping/CMapHeader.cpp +++ b/lib/mapping/CMapHeader.cpp @@ -144,6 +144,9 @@ 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 mapLanguages, mapBaseLanguages; int maxStrings = 0; diff --git a/lib/mapping/CMapInfo.cpp b/lib/mapping/CMapInfo.cpp index f037ef7d4..8fecd28e9 100644 --- a/lib/mapping/CMapInfo.cpp +++ b/lib/mapping/CMapInfo.cpp @@ -105,7 +105,10 @@ std::string CMapInfo::getNameTranslated() const if(campaign && !campaign->getNameTranslated().empty()) return campaign->getNameTranslated(); else if(mapHeader && !mapHeader->name.empty()) + { + mapHeader->registerMapStrings(); return mapHeader->name.toString(); + } else return VLC->generaltexth->allTexts[508]; }