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:
@@ -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();
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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];
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user