1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Hide not installed translation mods to languages other than selected one

This commit is contained in:
Ivan Savenko 2023-10-22 00:07:21 +03:00
parent b50ebba1ba
commit adf58fa834
3 changed files with 23 additions and 4 deletions

View File

@ -34,7 +34,8 @@
// "Mechanics", "Interface", "Heroes", "Graphical", "Expansion", "Creatures", "Compatibility", "Artifacts", "AI"
//
// Some mod types have additional effects on your mod:
// Translation: mod of this type is only active if player uses base language of this mod. See "language" property.
// Translation: mod of this type is only active if player uses base language of this mod. See "language" property.
// Additionally, if such type is used for submod it will be hidden in UI and automatically activated if player uses base language of this mod. This allows to provide locale-specific resources for a mod
// Compatibility: mods of this type are hidden in UI and will be automatically activated if all mod dependencies are active. Intended to be used to provide compatibility patches between mods
"modType" : "Graphical",

View File

@ -92,8 +92,21 @@ bool CModEntry::isInstalled() const
bool CModEntry::isVisible() const
{
if (getBaseValue("modType").toString() == "Compatibility" && isSubmod())
return false;
if (getBaseValue("modType").toString() == "Compatibility")
{
if (isSubmod())
return false;
}
if (getBaseValue("modType").toString() == "Translation")
{
// Do not show not installed translation mods to languages other than player language
if (localData.empty() && getBaseValue("language") != QString::fromStdString(settings["general"]["language"].String()) )
return false;
if (isSubmod())
return false;
}
return !localData.isEmpty() || !repository.isEmpty();
}

View File

@ -115,9 +115,14 @@ void CModInfo::loadLocalData(const JsonNode & data)
{
if (baseLanguage != VLC->generaltexth->getPreferredLanguage())
{
logGlobal->warn("Translation mod %s was not loaded: language mismatch!", verificationInfo.name);
if (identifier.find_last_of('.') == std::string::npos)
logGlobal->warn("Translation mod %s was not loaded: language mismatch!", verificationInfo.name);
implicitlyEnabled = false;
}
// Translation submods are always explicitly enabled
if (identifier.find_last_of('.') != std::string::npos)
explicitlyEnabled = true;
}
if (config["modType"].String() == "Compatibility")
{