浏览代码

Merge pull request #5191 from Laserlicht/translations

[1.6.x] mapeditor translations
Ivan Savenko 9 月之前
父节点
当前提交
018503c5e8

+ 13 - 9
launcher/translation/german.ts

@@ -74,7 +74,7 @@
     <message>
         <location filename="../aboutProject/aboutproject_moc.ui" line="227"/>
         <source>Configuration files directory</source>
-        <translation>Verzeichnis der Konfiguarions-Dateien</translation>
+        <translation>Verzeichnis der Konfigurationsdateien</translation>
     </message>
     <message>
         <location filename="../aboutProject/aboutproject_moc.ui" line="290"/>
@@ -492,7 +492,7 @@ Installation erfolgreich heruntergeladen?</translation>
     <message>
         <location filename="../settingsView/csettingsview_moc.ui" line="996"/>
         <source>Handle back as right mouse button</source>
-        <translation type="unfinished"></translation>
+        <translation>Behandle &quot;Zurück&quot; als rechte Maustaste</translation>
     </message>
     <message>
         <location filename="../settingsView/csettingsview_moc.ui" line="1102"/>
@@ -823,7 +823,7 @@ Exklusiver Vollbildmodus - das Spiel nimmt den gesamten Bildschirm ein und verwe
     <message>
         <location filename="../modManager/chroniclesextractor.cpp" line="144"/>
         <source>Heroes Chronicles %1 - %2</source>
-        <translation type="unfinished">Heroes Chronicles %1 - %2</translation>
+        <translation>Heroes Chronicles %1 - %2</translation>
     </message>
 </context>
 <context>
@@ -1163,11 +1163,13 @@ Fehlerursache: </translation>
 Exe (%n bytes):
 %1</source>
         <comment>param is hash</comment>
-        <translation type="unfinished">
+        <translation>
+            <numerusform>SHA1-Hash der bereitgestellten Dateien:
+Exe (%n Bytes):
+%1</numerusform>
             <numerusform>SHA1-Hash der bereitgestellten Dateien:
 Exe (%n Bytes):
 %1</numerusform>
-            <numerusform></numerusform>
         </translation>
     </message>
     <message numerus="yes">
@@ -1176,11 +1178,13 @@ Exe (%n Bytes):
 Bin (%n bytes):
 %1</source>
         <comment>param is hash</comment>
-        <translation type="unfinished">
+        <translation>
+            <numerusform>
+Bin (%n Bytes):
+%1</numerusform>
             <numerusform>
 Bin (%n Bytes):
 %1</numerusform>
-            <numerusform></numerusform>
         </translation>
     </message>
     <message>
@@ -1357,7 +1361,7 @@ Bin (%n Bytes):
     <message>
         <location filename="../mainwindow_moc.cpp" line="46"/>
         <source>Error starting executable</source>
-        <translation type="unfinished">Fehler beim Starten der ausführbaren Datei</translation>
+        <translation>Fehler beim Starten der ausführbaren Datei</translation>
     </message>
     <message>
         <location filename="../mainwindow_moc.cpp" line="287"/>
@@ -1454,7 +1458,7 @@ Bin (%n Bytes):
     <message>
         <location filename="../modManager/modstatecontroller.cpp" line="248"/>
         <source>Mod data was not found</source>
-        <translation type="unfinished"></translation>
+        <translation>Mod-Daten wurden nicht gefunden</translation>
     </message>
     <message>
         <location filename="../modManager/modstatecontroller.cpp" line="252"/>

+ 116 - 109
mapeditor/inspector/inspector.cpp

@@ -20,6 +20,7 @@
 #include "../lib/mapObjects/ObjectTemplate.h"
 #include "../lib/mapping/CMap.h"
 #include "../lib/constants/StringConstants.h"
+#include "../lib/texts/CGeneralTextHandler.h"
 
 #include "townbuildingswidget.h"
 #include "towneventswidget.h"
@@ -35,15 +36,6 @@
 #include "PickObjectDelegate.h"
 #include "../mapcontroller.h"
 
-static QList<std::pair<QString, QVariant>> CharacterIdentifiers
-{
-	{QObject::tr("Compliant"), QVariant::fromValue(int(CGCreature::Character::COMPLIANT))},
-	{QObject::tr("Friendly"), QVariant::fromValue(int(CGCreature::Character::FRIENDLY))},
-	{QObject::tr("Aggressive"), QVariant::fromValue(int(CGCreature::Character::AGGRESSIVE))},
-	{QObject::tr("Hostile"), QVariant::fromValue(int(CGCreature::Character::HOSTILE))},
-	{QObject::tr("Savage"), QVariant::fromValue(int(CGCreature::Character::SAVAGE))},
-};
-
 //===============IMPLEMENT OBJECT INITIALIZATION FUNCTIONS================
 Initializer::Initializer(CGObjectInstance * o, const PlayerColor & pl) : defaultPlayer(pl)
 {
@@ -245,19 +237,19 @@ void Inspector::updateProperties(CArmedInstance * o)
 	if(!o) return;
 	
 	auto * delegate = new ArmyDelegate(*o);
-	addProperty("Army", PropertyEditorPlaceholder(), delegate, false);
+	addProperty(QObject::tr("Army"), PropertyEditorPlaceholder(), delegate, false);
 }
 
 void Inspector::updateProperties(CGDwelling * o)
 {
 	if(!o) return;
 	
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller), false);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller), false);
 	
 	if (o->ID == Obj::RANDOM_DWELLING || o->ID == Obj::RANDOM_DWELLING_LVL)
 	{
 		auto * delegate = new PickObjectDelegate(controller, PickObjectDelegate::typedFilter<CGTownInstance>);
-		addProperty("Same as town", PropertyEditorPlaceholder(), delegate, false);
+		addProperty(QObject::tr("Same as town"), PropertyEditorPlaceholder(), delegate, false);
 	}
 }
 
@@ -265,29 +257,29 @@ void Inspector::updateProperties(FlaggableMapObject * o)
 {
 	if(!o) return;
 
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller), false);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller), false);
 }
 
 void Inspector::updateProperties(CGGarrison * o)
 {
 	if(!o) return;
 	
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller), false);
-	addProperty("Removable units", o->removableUnits, false);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller), false);
+	addProperty(QObject::tr("Removable units"), o->removableUnits, false);
 }
 
 void Inspector::updateProperties(CGShipyard * o)
 {
 	if(!o) return;
 	
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller), false);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller), false);
 }
 
 void Inspector::updateProperties(CGHeroPlaceholder * o)
 {
 	if(!o) return;
 	
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller), false);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller), false);
 	
 	bool type = false;
 	if(o->heroType.has_value())
@@ -297,11 +289,11 @@ void Inspector::updateProperties(CGHeroPlaceholder * o)
 	
 	{
 		auto * delegate = new InspectorDelegate;
-		delegate->options = {{"POWER RANK", QVariant::fromValue(false)}, {"HERO TYPE", QVariant::fromValue(true)}};
-		addProperty("Placeholder type", delegate->options[type].first, delegate, false);
+		delegate->options = {{QObject::tr("POWER RANK"), QVariant::fromValue(false)}, {QObject::tr("HERO TYPE"), QVariant::fromValue(true)}};
+		addProperty(QObject::tr("Placeholder type"), delegate->options[type].first, delegate, false);
 	}
 	
-	addProperty("Power rank", o->powerRank.has_value() ? o->powerRank.value() : 0, type);
+	addProperty(QObject::tr("Power rank"), o->powerRank.has_value() ? o->powerRank.value() : 0, type);
 	
 	{
 		auto * delegate = new InspectorDelegate;
@@ -309,7 +301,7 @@ void Inspector::updateProperties(CGHeroPlaceholder * o)
 		{
 			delegate->options.push_back({QObject::tr(VLC->heroh->objects[i]->getNameTranslated().c_str()), QVariant::fromValue(VLC->heroh->objects[i]->getId().getNum())});
 		}
-		addProperty("Hero type", o->heroType.has_value() ? VLC->heroh->getById(o->heroType.value())->getNameTranslated() : "", delegate, !type);
+		addProperty(QObject::tr("Hero type"), o->heroType.has_value() ? VLC->heroh->getById(o->heroType.value())->getNameTranslated() : "", delegate, !type);
 	}
 }
 
@@ -318,23 +310,23 @@ void Inspector::updateProperties(CGHeroInstance * o)
 	if(!o) return;
 	
 	auto isPrison = o->ID == Obj::PRISON;
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller, isPrison), isPrison); //field is not editable for prison
-	addProperty<int>("Experience", o->exp, false);
-	addProperty("Hero class", o->getHeroClassID().hasValue() ? o->getHeroClass()->getNameTranslated() : "", true);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller, isPrison), isPrison); //field is not editable for prison
+	addProperty<int>(QObject::tr("Experience"), o->exp, false);
+	addProperty(QObject::tr("Hero class"), o->getHeroClassID().hasValue() ? o->getHeroClass()->getNameTranslated() : "", true);
 	
 	{ //Gender
 		auto * delegate = new InspectorDelegate;
-		delegate->options = {{"MALE", QVariant::fromValue(int(EHeroGender::MALE))}, {"FEMALE", QVariant::fromValue(int(EHeroGender::FEMALE))}};
-		addProperty<std::string>("Gender", (o->gender == EHeroGender::FEMALE ? "FEMALE" : "MALE"), delegate , false);
+		delegate->options = {{QObject::tr("MALE"), QVariant::fromValue(int(EHeroGender::MALE))}, {QObject::tr("FEMALE"), QVariant::fromValue(int(EHeroGender::FEMALE))}};
+		addProperty<std::string>(QObject::tr("Gender"), (o->gender == EHeroGender::FEMALE ? QObject::tr("FEMALE") : QObject::tr("MALE")).toStdString(), delegate , false);
 	}
-	addProperty("Name", o->getNameTranslated(), false);
-	addProperty("Biography", o->getBiographyTranslated(), new MessageDelegate, false);
-	addProperty("Portrait", PropertyEditorPlaceholder(), new PortraitDelegate(*o), false);
+	addProperty(QObject::tr("Name"), o->getNameTranslated(), false);
+	addProperty(QObject::tr("Biography"), o->getBiographyTranslated(), new MessageDelegate, false);
+	addProperty(QObject::tr("Portrait"), PropertyEditorPlaceholder(), new PortraitDelegate(*o), false);
 	
 	auto * delegate = new HeroSkillsDelegate(*o);
-	addProperty("Skills", PropertyEditorPlaceholder(), delegate, false);
-	addProperty("Spells", PropertyEditorPlaceholder(), new HeroSpellDelegate(*o), false);
-	addProperty("Artifacts", PropertyEditorPlaceholder(), new HeroArtifactsDelegate(*o), false);
+	addProperty(QObject::tr("Skills"), PropertyEditorPlaceholder(), delegate, false);
+	addProperty(QObject::tr("Spells"), PropertyEditorPlaceholder(), new HeroSpellDelegate(*o), false);
+	addProperty(QObject::tr("Artifacts"), PropertyEditorPlaceholder(), new HeroArtifactsDelegate(*o), false);
 	
 	if(o->getHeroTypeID().hasValue() || o->ID == Obj::PRISON)
 	{ //Hero type
@@ -349,7 +341,7 @@ void Inspector::updateProperties(CGHeroInstance * o)
 				}
 			}
 		}
-		addProperty("Hero type", o->getHeroTypeID().hasValue() ? o->getHeroType()->getNameTranslated() : "", delegate, false);
+		addProperty(QObject::tr("Hero type"), o->getHeroTypeID().hasValue() ? o->getHeroType()->getNameTranslated() : "", delegate, false);
 	}
 	{
 		const int maxRadius = 60;
@@ -358,7 +350,7 @@ void Inspector::updateProperties(CGHeroInstance * o)
 		for(int i = 0; i <= maxRadius; ++i)
 			patrolDelegate->options.push_back({ QObject::tr("%n tile(s)", "", i), QVariant::fromValue(i)});
 		auto patrolRadiusText = o->patrol.patrolling ? QObject::tr("%n tile(s)", "", o->patrol.patrolRadius) : QObject::tr("No patrol");
-		addProperty("Patrol radius", patrolRadiusText, patrolDelegate, false);
+		addProperty(QObject::tr("Patrol radius"), patrolRadiusText, patrolDelegate, false);
 	}
 }
 
@@ -366,19 +358,19 @@ void Inspector::updateProperties(CGTownInstance * o)
 {
 	if(!o) return;
 	
-	addProperty("Town name", o->getNameTranslated(), false);
+	addProperty(QObject::tr("Town name"), o->getNameTranslated(), false);
 	
 	auto * delegate = new TownBuildingsDelegate(*o);
-	addProperty("Buildings", PropertyEditorPlaceholder(), delegate, false);
-	addProperty("Spells", PropertyEditorPlaceholder(), new TownSpellsDelegate(*o), false);
-	addProperty("Events", PropertyEditorPlaceholder(), new TownEventsDelegate(*o, controller), false);
+	addProperty(QObject::tr("Buildings"), PropertyEditorPlaceholder(), delegate, false);
+	addProperty(QObject::tr("Spells"), PropertyEditorPlaceholder(), new TownSpellsDelegate(*o), false);
+	addProperty(QObject::tr("Events"), PropertyEditorPlaceholder(), new TownEventsDelegate(*o, controller), false);
 }
 
 void Inspector::updateProperties(CGArtifact * o)
 {
 	if(!o) return;
 	
-	addProperty("Message", o->message, false);
+	addProperty(QObject::tr("Message"), o->message, false);
 	
 	CArtifactInstance * instance = o->storedArtifact;
 	if(instance)
@@ -392,7 +384,7 @@ void Inspector::updateProperties(CGArtifact * o)
 				if(controller.map()->allowedSpells.count(spell->id) != 0)
 					delegate->options.push_back({QObject::tr(spell->getNameTranslated().c_str()), QVariant::fromValue(int(spell->getId()))});
 			}
-			addProperty("Spell", VLC->spellh->getById(spellId)->getNameTranslated(), delegate, false);
+			addProperty(QObject::tr("Spell"), VLC->spellh->getById(spellId)->getNameTranslated(), delegate, false);
 		}
 	}
 }
@@ -401,42 +393,42 @@ void Inspector::updateProperties(CGMine * o)
 {
 	if(!o) return;
 	
-	addProperty("Owner", o->tempOwner, new OwnerDelegate(controller), false);
-	addProperty("Resource", o->producedResource);
-	addProperty("Productivity", o->producedQuantity);
+	addProperty(QObject::tr("Owner"), o->tempOwner, new OwnerDelegate(controller), false);
+	addProperty(QObject::tr("Resource"), o->producedResource);
+	addProperty(QObject::tr("Productivity"), o->producedQuantity);
 }
 
 void Inspector::updateProperties(CGResource * o)
 {
 	if(!o) return;
 	
-	addProperty("Amount", o->amount, false);
-	addProperty("Message", o->message, false);
+	addProperty(QObject::tr("Amount"), o->amount, false);
+	addProperty(QObject::tr("Message"), o->message, false);
 }
 
 void Inspector::updateProperties(CGSignBottle * o)
 {
 	if(!o) return;
 	
-	addProperty("Message", o->message, new MessageDelegate, false);
+	addProperty(QObject::tr("Message"), o->message, new MessageDelegate, false);
 }
 
 void Inspector::updateProperties(CGCreature * o)
 {
 	if(!o) return;
 	
-	addProperty("Message", o->message, false);
+	addProperty(QObject::tr("Message"), o->message, false);
 	{ //Character
 		auto * delegate = new InspectorDelegate;
-		delegate->options = CharacterIdentifiers;
+		delegate->options = characterIdentifiers;
 		addProperty<CGCreature::Character>("Character", (CGCreature::Character)o->character, delegate, false);
 	}
-	addProperty("Never flees", o->neverFlees, false);
-	addProperty("Not growing", o->notGrowingTeam, false);
-	addProperty("Artifact reward", o->gainedArtifact); //TODO: implement in setProperty
-	addProperty("Army", PropertyEditorPlaceholder(), true);
-	addProperty("Amount", o->stacks[SlotID(0)]->count, false);
-	//addProperty("Resources reward", o->resources); //TODO: implement in setProperty
+	addProperty(QObject::tr("Never flees"), o->neverFlees, false);
+	addProperty(QObject::tr("Not growing"), o->notGrowingTeam, false);
+	addProperty(QObject::tr("Artifact reward"), o->gainedArtifact); //TODO: implement in setProperty
+	addProperty(QObject::tr("Army"), PropertyEditorPlaceholder(), true);
+	addProperty(QObject::tr("Amount"), o->stacks[SlotID(0)]->count, false);
+	//addProperty(QObject::tr("Resources reward"), o->resources); //TODO: implement in setProperty
 }
 
 void Inspector::updateProperties(CRewardableObject * o)
@@ -444,23 +436,23 @@ void Inspector::updateProperties(CRewardableObject * o)
 	if(!o) return;
 		
 	auto * delegate = new RewardsDelegate(*controller.map(), *o);
-	addProperty("Reward", PropertyEditorPlaceholder(), delegate, false);
+	addProperty(QObject::tr("Reward"), PropertyEditorPlaceholder(), delegate, false);
 }
 
 void Inspector::updateProperties(CGPandoraBox * o)
 {
 	if(!o) return;
 	
-	addProperty("Message", o->message, new MessageDelegate, false);
+	addProperty(QObject::tr("Message"), o->message, new MessageDelegate, false);
 }
 
 void Inspector::updateProperties(CGEvent * o)
 {
 	if(!o) return;
 	
-	addProperty("Remove after", o->removeAfterVisit, false);
-	addProperty("Human trigger", o->humanActivate, false);
-	addProperty("Cpu trigger", o->computerActivate, false);
+	addProperty(QObject::tr("Remove after"), o->removeAfterVisit, false);
+	addProperty(QObject::tr("Human trigger"), o->humanActivate, false);
+	addProperty(QObject::tr("Cpu trigger"), o->computerActivate, false);
 	//ui8 availableFor; //players whom this event is available for
 }
 
@@ -468,15 +460,15 @@ void Inspector::updateProperties(CGSeerHut * o)
 {
 	if(!o || !o->quest) return;
 	
-	addProperty("First visit text", o->quest->firstVisitText, new MessageDelegate, false);
-	addProperty("Next visit text", o->quest->nextVisitText, new MessageDelegate, false);
-	addProperty("Completed text", o->quest->completedText, new MessageDelegate, false);
-	addProperty("Repeat quest", o->quest->repeatedQuest, false);
-	addProperty("Time limit", o->quest->lastDay, false);
+	addProperty(QObject::tr("First visit text"), o->quest->firstVisitText, new MessageDelegate, false);
+	addProperty(QObject::tr("Next visit text"), o->quest->nextVisitText, new MessageDelegate, false);
+	addProperty(QObject::tr("Completed text"), o->quest->completedText, new MessageDelegate, false);
+	addProperty(QObject::tr("Repeat quest"), o->quest->repeatedQuest, false);
+	addProperty(QObject::tr("Time limit"), o->quest->lastDay, false);
 	
 	{ //Quest
 		auto * delegate = new QuestDelegate(controller, *o->quest);
-		addProperty("Quest", PropertyEditorPlaceholder(), delegate, false);
+		addProperty(QObject::tr("Quest"), PropertyEditorPlaceholder(), delegate, false);
 	}
 }
 
@@ -484,8 +476,8 @@ void Inspector::updateProperties(CGQuestGuard * o)
 {
 	if(!o || !o->quest) return;
 	
-	addProperty("Reward", PropertyEditorPlaceholder(), nullptr, true);
-	addProperty("Repeat quest", o->quest->repeatedQuest, true);
+	addProperty(QObject::tr("Reward"), PropertyEditorPlaceholder(), nullptr, true);
+	addProperty(QObject::tr("Repeat quest"), o->quest->repeatedQuest, true);
 }
 
 void Inspector::updateProperties()
@@ -494,18 +486,18 @@ void Inspector::updateProperties()
 		return;
 	table->setRowCount(0); //cleanup table
 	
-	addProperty("Identifier", obj);
-	addProperty("ID", obj->ID.getNum());
-	addProperty("SubID", obj->subID);
-	addProperty("InstanceName", obj->instanceName);
+	addProperty(QObject::tr("Identifier"), obj);
+	addProperty(QObject::tr("ID"), obj->ID.getNum());
+	addProperty(QObject::tr("SubID"), obj->subID);
+	addProperty(QObject::tr("InstanceName"), obj->instanceName);
 	
 	if(obj->ID != Obj::HERO_PLACEHOLDER && !dynamic_cast<CGHeroInstance*>(obj))
 	{
 		auto factory = VLC->objtypeh->getHandlerFor(obj->ID, obj->subID);
-		addProperty("IsStatic", factory->isStaticObject());
+		addProperty(QObject::tr("IsStatic"), factory->isStaticObject());
 	}
 	
-	addProperty("Owner", obj->tempOwner, new OwnerDelegate(controller), true);
+	addProperty(QObject::tr("Owner"), obj->tempOwner, new OwnerDelegate(controller), true);
 	
 	UPDATE_OBJ_PROPERTIES(CArmedInstance);
 	UPDATE_OBJ_PROPERTIES(CGResource);
@@ -552,7 +544,7 @@ void Inspector::setProperty(const QString & key, const QVariant & value)
 	if(!obj)
 		return;
 	
-	if(key == "Owner")
+	if(key == QObject::tr("Owner"))
 		obj->tempOwner = PlayerColor(value.toInt());
 	
 	SET_PROPERTIES(CArmedInstance);
@@ -594,7 +586,7 @@ void Inspector::setProperty(CGPandoraBox * o, const QString & key, const QVarian
 {
 	if(!o) return;
 	
-	if(key == "Message")
+	if(key == QObject::tr("Message"))
 		o->message = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("guards", o->instanceName, "message"), value.toString().toStdString()));
 }
@@ -603,13 +595,13 @@ void Inspector::setProperty(CGEvent * o, const QString & key, const QVariant & v
 {
 	if(!o) return;
 	
-	if(key == "Remove after")
+	if(key == QObject::tr("Remove after"))
 		o->removeAfterVisit = value.toBool();
 	
-	if(key == "Human trigger")
+	if(key == QObject::tr("Human trigger"))
 		o->humanActivate = value.toBool();
 	
-	if(key == "Cpu trigger")
+	if(key == QObject::tr("Cpu trigger"))
 		o->computerActivate = value.toBool();
 }
 
@@ -617,7 +609,7 @@ void Inspector::setProperty(CGTownInstance * o, const QString & key, const QVari
 {
 	if(!o) return;
 	
-	if(key == "Town name")
+	if(key == QObject::tr("Town name"))
 		o->setNameTextId(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("town", o->instanceName, "name"), value.toString().toStdString()));
 }
@@ -626,7 +618,7 @@ void Inspector::setProperty(CGSignBottle * o, const QString & key, const QVarian
 {
 	if(!o) return;
 	
-	if(key == "Message")
+	if(key == QObject::tr("Message"))
 		o->message = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("sign", o->instanceName, "message"), value.toString().toStdString()));
 }
@@ -635,7 +627,7 @@ void Inspector::setProperty(CGMine * o, const QString & key, const QVariant & va
 {
 	if(!o) return;
 	
-	if(key == "Productivity")
+	if(key == QObject::tr("Productivity"))
 		o->producedQuantity = value.toString().toInt();
 }
 
@@ -643,11 +635,11 @@ void Inspector::setProperty(CGArtifact * o, const QString & key, const QVariant
 {
 	if(!o) return;
 	
-	if(key == "Message")
+	if(key == QObject::tr("Message"))
 		o->message = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("guards", o->instanceName, "message"), value.toString().toStdString()));
 	
-	if(o->storedArtifact && key == "Spell")
+	if(o->storedArtifact && key == QObject::tr("Spell"))
 	{
 		o->storedArtifact = ArtifactUtils::createScroll(SpellID(value.toInt()));
 	}
@@ -657,7 +649,7 @@ void Inspector::setProperty(CGDwelling * o, const QString & key, const QVariant
 {
 	if(!o) return;
 	
-	if(key == "Same as town")
+	if(key == QObject::tr("Same as town"))
 	{
 		if (!o->randomizationInfo.has_value())
 			o->randomizationInfo = CGDwellingRandomizationInfo();
@@ -672,7 +664,7 @@ void Inspector::setProperty(CGGarrison * o, const QString & key, const QVariant
 {
 	if(!o) return;
 	
-	if(key == "Removable units")
+	if(key == QObject::tr("Removable units"))
 		o->removableUnits = value.toBool();
 }
 
@@ -680,7 +672,7 @@ void Inspector::setProperty(CGHeroPlaceholder * o, const QString & key, const QV
 {
 	if(!o) return;
 
-	if(key == "Placeholder type")
+	if(key == QObject::tr("Placeholder type"))
 	{
 		if(value.toBool())
 		{
@@ -698,10 +690,10 @@ void Inspector::setProperty(CGHeroPlaceholder * o, const QString & key, const QV
 		updateProperties();
 	}
 	
-	if(key == "Power rank")
+	if(key == QObject::tr("Power rank"))
 		o->powerRank = value.toInt();
 	
-	if(key == "Hero type")
+	if(key == QObject::tr("Hero type"))
 	{
 		o->heroType = HeroTypeID(value.toInt());
 	}
@@ -711,21 +703,21 @@ void Inspector::setProperty(CGHeroInstance * o, const QString & key, const QVari
 {
 	if(!o) return;
 	
-	if(key == "Gender")
+	if(key == QObject::tr("Gender"))
 		o->gender = EHeroGender(value.toInt());
 	
-	if(key == "Name")
+	if(key == QObject::tr("Name"))
 		o->nameCustomTextId = mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("hero", o->instanceName, "name"), value.toString().toStdString());
 	
-	if(key == "Biography")
+	if(key == QObject::tr("Biography"))
 		o->biographyCustomTextId = mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("hero", o->instanceName, "biography"), value.toString().toStdString());
 	
-	if(key == "Experience")
+	if(key == QObject::tr("Experience"))
 		o->exp = value.toString().toInt();
 	
-	if(key == "Hero type")
+	if(key == QObject::tr("Hero type"))
 	{
 		for(auto const & t : VLC->heroh->objects)
 		{
@@ -737,7 +729,7 @@ void Inspector::setProperty(CGHeroInstance * o, const QString & key, const QVari
 		updateProperties(); //updating other properties after change
 	}
 
-	if(key == "Patrol radius")
+	if(key == QObject::tr("Patrol radius"))
 	{
 		auto radius = value.toInt();
 		o->patrol.patrolRadius = radius;
@@ -754,7 +746,7 @@ void Inspector::setProperty(CGResource * o, const QString & key, const QVariant
 {
 	if(!o) return;
 	
-	if(key == "Amount")
+	if(key == QObject::tr("Amount"))
 		o->amount = value.toString().toInt();
 }
 
@@ -762,16 +754,16 @@ void Inspector::setProperty(CGCreature * o, const QString & key, const QVariant
 {
 	if(!o) return;
 	
-	if(key == "Message")
+	if(key == QObject::tr("Message"))
 		o->message = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("monster", o->instanceName, "message"), value.toString().toStdString()));
-	if(key == "Character")
+	if(key == QObject::tr("Character"))
 		o->character = CGCreature::Character(value.toInt());
-	if(key == "Never flees")
+	if(key == QObject::tr("Never flees"))
 		o->neverFlees = value.toBool();
-	if(key == "Not growing")
+	if(key == QObject::tr("Not growing"))
 		o->notGrowingTeam = value.toBool();
-	if(key == "Amount")
+	if(key == QObject::tr("Amount"))
 		o->stacks[SlotID(0)]->count = value.toString().toInt();
 }
 
@@ -779,18 +771,18 @@ void Inspector::setProperty(CGSeerHut * o, const QString & key, const QVariant &
 {
 	if(!o) return;
 	
-	if(key == "First visit text")
+	if(key == QObject::tr("First visit text"))
 		o->quest->firstVisitText = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("quest", o->instanceName, "firstVisit"), value.toString().toStdString()));
-	if(key == "Next visit text")
+	if(key == QObject::tr("Next visit text"))
 		o->quest->nextVisitText = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("quest", o->instanceName, "nextVisit"), value.toString().toStdString()));
-	if(key == "Completed text")
+	if(key == QObject::tr("Completed text"))
 		o->quest->completedText = MetaString::createFromTextID(mapRegisterLocalizedString("map", *controller.map(),
 			TextIdentifier("quest", o->instanceName, "completed"), value.toString().toStdString()));
-	if(key == "Repeat quest")
+	if(key == QObject::tr("Repeat quest"))
 		o->quest->repeatedQuest = value.toBool();
-	if(key == "Time limit")
+	if(key == QObject::tr("Time limit"))
 		o->quest->lastDay = value.toString().toInt();
 }
 
@@ -874,8 +866,10 @@ QTableWidgetItem * Inspector::addProperty(const PlayerColor & value)
 	if(value == PlayerColor::NEUTRAL)
 		str = QObject::tr("neutral");
 	
+	MetaString playerStr;
+	playerStr.appendName(value);
 	if(value.isValidPlayer())
-		str = QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[value]);
+		str = QString::fromStdString(playerStr.toString());
 	
 	auto * item = new QTableWidgetItem(str);
 	item->setFlags(Qt::NoItemFlags);
@@ -885,7 +879,9 @@ QTableWidgetItem * Inspector::addProperty(const PlayerColor & value)
 
 QTableWidgetItem * Inspector::addProperty(const GameResID & value)
 {
-	auto * item = new QTableWidgetItem(QString::fromStdString(GameConstants::RESOURCE_NAMES[value.toEnum()]));
+	MetaString str;
+	str.appendName(value);
+	auto * item = new QTableWidgetItem(QString::fromStdString(str.toString()));
 	item->setFlags(Qt::NoItemFlags);
 	item->setData(Qt::UserRole, QVariant::fromValue(value.getNum()));
 	return item;
@@ -897,7 +893,7 @@ QTableWidgetItem * Inspector::addProperty(CGCreature::Character value)
 	item->setFlags(Qt::NoItemFlags);
 	item->setData(Qt::UserRole, QVariant::fromValue(int(value)));
 	
-	for(auto & i : CharacterIdentifiers)
+	for(auto & i : characterIdentifiers)
 	{
 		if(i.second.toInt() == value)
 		{
@@ -913,6 +909,13 @@ QTableWidgetItem * Inspector::addProperty(CGCreature::Character value)
 
 Inspector::Inspector(MapController & c, CGObjectInstance * o, QTableWidget * t): obj(o), table(t), controller(c)
 {
+	characterIdentifiers = {
+		{ QObject::tr("Compliant"), QVariant::fromValue(int(CGCreature::Character::COMPLIANT)) },
+		{ QObject::tr("Friendly"), QVariant::fromValue(int(CGCreature::Character::FRIENDLY)) },
+		{ QObject::tr("Aggressive"), QVariant::fromValue(int(CGCreature::Character::AGGRESSIVE)) },
+		{ QObject::tr("Hostile"), QVariant::fromValue(int(CGCreature::Character::HOSTILE)) },
+		{ QObject::tr("Savage"), QVariant::fromValue(int(CGCreature::Character::SAVAGE)) },
+	};
 }
 
 /*
@@ -964,5 +967,9 @@ OwnerDelegate::OwnerDelegate(MapController & controller, bool addNeutral)
 		options.push_back({QObject::tr("neutral"), QVariant::fromValue(PlayerColor::NEUTRAL.getNum()) });
 	for(int p = 0; p < controller.map()->players.size(); ++p)
 		if(controller.map()->players[p].canAnyonePlay())
-			options.push_back({QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[p]), QVariant::fromValue(PlayerColor(p).getNum()) });
+		{
+			MetaString str;
+			str.appendName(PlayerColor(p));
+			options.push_back({QString::fromStdString(str.toString()), QVariant::fromValue(PlayerColor(p).getNum()) });
+		}
 }

+ 2 - 0
mapeditor/inspector/inspector.h

@@ -63,6 +63,8 @@ private:
 
 class Inspector
 {
+	QList<std::pair<QString, QVariant>> characterIdentifiers;
+
 protected:
 	struct PropertyEditorPlaceholder {};
 	

+ 6 - 2
mapeditor/inspector/questwidget.cpp

@@ -43,7 +43,9 @@ QuestWidget::QuestWidget(MapController & _controller, CQuest & _sh, QWidget *par
 	ui->lResources->setRowCount(GameConstants::RESOURCE_QUANTITY - 1);
 	for(int i = 0; i < GameConstants::RESOURCE_QUANTITY - 1; ++i)
 	{
-		auto * item = new QTableWidgetItem(QString::fromStdString(GameConstants::RESOURCE_NAMES[i]));
+		MetaString str;
+		str.appendName(GameResID(i));
+		auto * item = new QTableWidgetItem(QString::fromStdString(str.toString()));
 		item->setData(Qt::UserRole, QVariant::fromValue(i));
 		ui->lResources->setItem(i, 0, item);
 		auto * spinBox = new QSpinBox;
@@ -126,7 +128,9 @@ QuestWidget::QuestWidget(MapController & _controller, CQuest & _sh, QWidget *par
 	//fill players
 	for(auto color = PlayerColor(0); color < PlayerColor::PLAYER_LIMIT; ++color)
 	{
-		auto * item = new QListWidgetItem(QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[color.getNum()]));
+		MetaString str;
+		str.appendName(color);
+		auto * item = new QListWidgetItem(QString::fromStdString(str.toString()));
 		item->setData(Qt::UserRole, QVariant::fromValue(color.getNum()));
 		item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
 		item->setCheckState(Qt::Unchecked);

+ 6 - 2
mapeditor/inspector/rewardswidget.cpp

@@ -55,9 +55,11 @@ RewardsWidget::RewardsWidget(CMap & m, CRewardableObject & p, QWidget *parent) :
 	ui->lResources->setRowCount(GameConstants::RESOURCE_QUANTITY - 1);
 	for(int i = 0; i < GameConstants::RESOURCE_QUANTITY - 1; ++i)
 	{
+		MetaString str;
+		str.appendName(GameResID(i));
 		for(auto * w : {ui->rResources, ui->lResources})
 		{
-			auto * item = new QTableWidgetItem(QString::fromStdString(GameConstants::RESOURCE_NAMES[i]));
+			auto * item = new QTableWidgetItem(QString::fromStdString(str.toString()));
 			item->setData(Qt::UserRole, QVariant::fromValue(i));
 			w->setItem(i, 0, item);
 			auto * spinBox = new QSpinBox;
@@ -163,7 +165,9 @@ RewardsWidget::RewardsWidget(CMap & m, CRewardableObject & p, QWidget *parent) :
 	//fill players
 	for(auto color = PlayerColor(0); color < PlayerColor::PLAYER_LIMIT; ++color)
 	{
-		auto * item = new QListWidgetItem(QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[color.getNum()]));
+		MetaString str;
+		str.appendName(color);
+		auto * item = new QListWidgetItem(QString::fromStdString(str.toString()));
 		item->setData(Qt::UserRole, QVariant::fromValue(color.getNum()));
 		item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
 		item->setCheckState(Qt::Unchecked);

+ 7 - 3
mapeditor/inspector/towneventdialog.cpp

@@ -67,8 +67,10 @@ void TownEventDialog::initPlayers()
 	auto playerList = params.value("players").toList();
 	for (int i = 0; i < PlayerColor::PLAYER_LIMIT_I; ++i)
 	{
+		MetaString str;
+		str.appendName(PlayerColor(i));
 		bool isAffected = playerList.contains(toQString(PlayerColor(i)));
-		auto * item = new QListWidgetItem(QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[i]));
+		auto * item = new QListWidgetItem(QString::fromStdString(str.toString()));
 		item->setData(MapEditorRoles::PlayerIDRole, QVariant::fromValue(i));
 		item->setCheckState(isAffected ? Qt::Checked : Qt::Unchecked);
 		ui->playersAffected->addItem(item);
@@ -81,13 +83,15 @@ void TownEventDialog::initResources()
 	auto resourcesMap = params.value("resources").toMap();
 	for (int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i)
 	{
-		auto name = QString::fromStdString(GameConstants::RESOURCE_NAMES[i]);
+		MetaString str;
+		str.appendName(GameResID(i));
+		auto name = QString::fromStdString(str.toString());
 		auto * item = new QTableWidgetItem();
 		item->setFlags(item->flags() & ~Qt::ItemIsEditable);
 		item->setText(name);
 		ui->resourcesTable->setItem(i, 0, item);
 
-		int val = resourcesMap.value(name).toInt();
+		int val = resourcesMap.value(QString::fromStdString(GameConstants::RESOURCE_NAMES[i])).toInt();
 		auto * edit = new QSpinBox(ui->resourcesTable);
 		edit->setMaximum(i == GameResID::GOLD ? MAXIMUM_GOLD_CHANGE : MAXIMUM_RESOURCE_CHANGE);
 		edit->setMinimum(i == GameResID::GOLD ? -MAXIMUM_GOLD_CHANGE : -MAXIMUM_RESOURCE_CHANGE);

+ 8 - 8
mapeditor/mainwindow.cpp

@@ -431,12 +431,12 @@ bool MainWindow::openMap(const QString & filenameSelect)
 	catch(const ModIncompatibility & e)
 	{
 		assert(e.whatExcessive().empty());
-		QMessageBox::warning(this, "Mods are required", QString::fromStdString(e.whatMissing()));
+		QMessageBox::warning(this, tr("Mods are required"), QString::fromStdString(e.whatMissing()));
 		return false;
 	}
 	catch(const std::exception & e)
 	{
-		QMessageBox::critical(this, "Failed to open map", tr(e.what()));
+		QMessageBox::critical(this, tr("Failed to open map"), tr(e.what()));
 		return false;
 	}
 	
@@ -483,8 +483,6 @@ void MainWindow::on_actionOpenRecent_triggered()
 		RecentFileDialog(const QStringList& recentFiles, QWidget *parent)
 			: QDialog(parent), layout(new QVBoxLayout(this)), listWidget(new QListWidget(this))
 		{
-
-			setWindowTitle(tr("Recently Opened Files"));
 			setMinimumWidth(600);
 
 			connect(listWidget, &QListWidget::itemActivated, this, [this](QListWidgetItem *item)
@@ -520,6 +518,7 @@ void MainWindow::on_actionOpenRecent_triggered()
 	};
 
 	RecentFileDialog d(recentFiles, this);
+	d.setWindowTitle(tr("Recently Opened Files"));
 	if(d.exec() == QDialog::Accepted && getAnswerAboutUnsavedChanges())
 	{
 		openMap(d.getSelectedFilePath());
@@ -572,10 +571,11 @@ void MainWindow::saveMap()
 	
 	if(!issues.empty())
 	{
+		auto mapValidationTitle = tr("Map validation");
 		if(critical)
-			QMessageBox::warning(this, "Map validation", "Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found");
+			QMessageBox::warning(this, mapValidationTitle, tr("Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found"));
 		else
-			QMessageBox::information(this, "Map validation", "Map has some errors. Open Validator from the Map menu to see issues found");
+			QMessageBox::information(this, mapValidationTitle, tr("Map has some errors. Open Validator from the Map menu to see issues found"));
 	}
 	
 	Translations::cleanupRemovedItems(*controller.map());
@@ -599,7 +599,7 @@ void MainWindow::saveMap()
 	}
 	catch(const std::exception & e)
 	{
-		QMessageBox::critical(this, "Failed to save map", e.what());
+		QMessageBox::critical(this, tr("Failed to save map"), e.what());
 		return;
 	}
 	
@@ -966,7 +966,7 @@ void MainWindow::loadObjectsTree()
 	}
 	catch(const std::exception &)
 	{
-		QMessageBox::critical(this, "Mods loading problem", "Critical error during Mods loading. Disable invalid mods and restart.");
+		QMessageBox::critical(this, tr("Mods loading problem"), tr("Critical error during Mods loading. Disable invalid mods and restart."));
 	}
 }
 

+ 7 - 3
mapeditor/mapsettings/timedevent.cpp

@@ -37,7 +37,9 @@ TimedEvent::TimedEvent(MapController & c, QListWidgetItem * t, QWidget *parent)
 	for(int i = 0; i < PlayerColor::PLAYER_LIMIT_I; ++i)
 	{
 		bool isAffected = playerList.contains(toQString(PlayerColor(i)));
-		auto * item = new QListWidgetItem(QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[i]));
+		MetaString str;
+		str.appendName(PlayerColor(i));
+		auto * item = new QListWidgetItem(QString::fromStdString(str.toString()));
 		item->setData(Qt::UserRole, QVariant::fromValue(i));
 		item->setCheckState(isAffected ? Qt::Checked : Qt::Unchecked);
 		ui->playersAffected->addItem(item);
@@ -46,8 +48,10 @@ TimedEvent::TimedEvent(MapController & c, QListWidgetItem * t, QWidget *parent)
 	ui->resources->setRowCount(GameConstants::RESOURCE_QUANTITY);
 	for(int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i)
 	{
-		auto name = QString::fromStdString(GameConstants::RESOURCE_NAMES[i]);
-		int val = params.value("resources").toMap().value(name).toInt();
+		MetaString str;
+		str.appendName(GameResID(i));
+		auto name = QString::fromStdString(str.toString());
+		int val = params.value("resources").toMap().value(QString::fromStdString(GameConstants::RESOURCE_NAMES[i])).toInt();
 		ui->resources->setItem(i, 0, new QTableWidgetItem(name));
 		auto nval = new QTableWidgetItem(QString::number(val));
 		nval->setFlags(nval->flags() | Qt::ItemIsEditable);

+ 4 - 2
mapeditor/mapsettings/victoryconditions.cpp

@@ -407,7 +407,9 @@ void VictoryConditions::on_victoryComboBox_currentIndexChanged(int index)
 			{
 				for(int resType = 0; resType < GameConstants::RESOURCE_QUANTITY; ++resType)
 				{
-					auto resName = QString::fromStdString(GameConstants::RESOURCE_NAMES[resType]);
+					MetaString str;
+					str.appendName(GameResID(resType));
+					auto resName = QString::fromStdString(str.toString());
 					victoryTypeWidget->addItem(resName, QVariant::fromValue(resType));
 				}
 			}
@@ -427,7 +429,7 @@ void VictoryConditions::on_victoryComboBox_currentIndexChanged(int index)
 
 			victorySelectWidget = new QComboBox;
 			ui->victoryParamsLayout->addWidget(victorySelectWidget);
-			victorySelectWidget->addItem("Any town", QVariant::fromValue(-1));
+			victorySelectWidget->addItem(tr("Any town"), QVariant::fromValue(-1));
 			for(int i : getObjectIndexes<const CGTownInstance>(*controller->map()))
 				victorySelectWidget->addItem(getTownName(*controller->map(), i).c_str(), QVariant::fromValue(i));
 			

+ 3 - 1
mapeditor/playerparams.cpp

@@ -29,7 +29,9 @@ PlayerParams::PlayerParams(MapController & ctrl, int playerId, QWidget *parent)
 	{
 		if(i == playerId || !controller.map()->players[i].canAnyonePlay())
 		{
-			ui->playerColorCombo->addItem(QString::fromStdString(GameConstants::PLAYER_COLOR_NAMES[i]), QVariant(i));
+			MetaString str;
+			str.appendName(PlayerColor(i));
+			ui->playerColorCombo->addItem(QString::fromStdString(str.toString()), QVariant(i));
 			if(i == playerId)
 				ui->playerColorCombo->setCurrentIndex(index);
 			++index;

+ 309 - 18
mapeditor/translation/chinese.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>未保存的改动会丢失,你确定要这么做吗?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>所有支持的地图类型(*.vmap *.h3m);;VCMI地图(*.vmap);;英雄无敌3地图(*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation>最近打开文件</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation>其他</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation>无队伍</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>玩家ID: %1</translation>
     </message>
@@ -1062,52 +1102,293 @@
         <translation>高级</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>屈服的</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>友善的</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>好斗的</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>有敌意的</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>野蛮的</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation>无巡逻</translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished">头像</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished">技能</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">宝物</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation>
             <numerusform>%n格</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">建筑</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">事件</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>中立</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">魔法</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">消息</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished">魔法</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished">奖励</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>没有旗帜</translation>
     </message>
@@ -1533,8 +1814,8 @@
         <translation>%1 天</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>奖励 %1</translation>
     </message>
@@ -1756,12 +2037,12 @@
         <translation>确定</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>%1级生物 / 升级后的%1级生物</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>%1 - %2 日</translation>
     </message>
@@ -2089,6 +2370,11 @@
         <source>Kill monster</source>
         <translation>击杀怪物</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2291,6 +2577,11 @@
         <source>RMG failure</source>
         <translation>随机地图生成失败</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/czech.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Neuložené změny budou ztraceny, jste si jisti?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Všechny podporované mapy (*.vmap *.h3m);; Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation>Naposledny otevřené soubory</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation>Ostatní</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation>Bez týmu</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>ID hráče: %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation>Expert</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>Ochotná</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>Přátelská</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>Agresivní</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>Nepřátelská</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>Brutální</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation>Bez hlídky</translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished">Portrét</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished">Dovednosti</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Artefakty</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation>
             <numerusform>%n pole</numerusform>
@@ -1103,13 +1174,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Budovy</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Události</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>neutrální</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Kouzla</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Zpráva</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished">Kouzlo</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished">Odměna</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>NEOZNAČITELNÝ</translation>
     </message>
@@ -1535,8 +1816,8 @@
         <translation>Den %1</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>Odměna %1</translation>
     </message>
@@ -1758,12 +2039,12 @@
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>Úroveň jednotky %1 / Úroveň jednotky%1 vylepšení</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>Den %1 - %2</translation>
     </message>
@@ -2091,6 +2372,11 @@
         <source>Kill monster</source>
         <translation>Zabít příšeru</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2293,6 +2579,11 @@
         <source>RMG failure</source>
         <translation>Chyba RMG</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/english.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1102,13 +1173,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1534,8 +1815,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1757,12 +2038,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2090,6 +2371,11 @@
         <source>Kill monster</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2292,6 +2578,11 @@
         <source>RMG failure</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/french.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Les modifications non sauvegardées seront perdues. Êtes-vous sûr ?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Toutes les cartes prises en charge (*.vmap *.h3m);;Cartes VCMI (*.vmap);;Cartes HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>Identifiant du joueur : %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation>Expert</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>Compérhensif</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>Amical</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>Aggressif</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>Hostile</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>Sauvage</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished">Portrait</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1102,13 +1173,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Bâtiments</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Événements</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>neutre</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Sorts</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Message</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished">Sort</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished">Récompense</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>INCLASSABLE</translation>
     </message>
@@ -1534,8 +1815,8 @@
         <translation>Jour %1</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>Récompense %1</translation>
     </message>
@@ -1757,12 +2038,12 @@
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>Créature niveau %1 / Créature niveau %1 Augmenté</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>Jour %1 - %2</translation>
     </message>
@@ -2090,6 +2371,11 @@
         <source>Kill monster</source>
         <translation>Tuer un monster</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2292,6 +2578,11 @@
         <source>RMG failure</source>
         <translation>Echec de RMG</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/german.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Ungespeicherte Änderungen gehen verloren, sind sie sicher?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation>Mods sind erforderlich</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation>Karte konnte nicht geöffnet werden</translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Alle unterstützten Karten (*.vmap *.h3m);;VCMI-Karten (*.vmap);;HoMM3-Karten (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation>Kürzlich geöffnete Dateien</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation>Validierung der Karte</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation>Die Karte hat kritische Probleme und wird höchstwahrscheinlich nicht spielbar sein. Öffnen Sie den Validator aus dem Kartenmenü, um die gefundenen Probleme zu sehen</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation>Karte hat einige Fehler. Öffnen Sie den Validator aus dem Kartenmenü, um die gefundenen Probleme zu sehen</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation>Karte konnte nicht gespeichert werden</translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation>Anderes</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation>Problem beim Laden von Mods</translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation>Kritischer Fehler beim Laden von Mods. Deaktivieren Sie ungültige Mods und starten Sie neu.</translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation>Kein Team</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>Spieler-ID: %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation>Experte</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>Konform</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>Freundlich</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>Aggressiv</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>Feindlich</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>Wild</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation>Keine Streife</translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation>STÄRKE RANG</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation>HELDENTYP</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation>Heldenklasse</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation>Porträt</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation>Fertigkeiten</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation>Artefakte</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation>
             <numerusform>%n Kachel</numerusform>
@@ -1102,13 +1173,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation>Gebäude</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation>Ereignisse</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation>Ressource</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation>Artefakt-Belohnung</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation>Aufgabe</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation>Identifier</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation>SubID</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation>InstanzName</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation>IstStatisch</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>neutral</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation>Armee</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation>Besitzer</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation>Wie die Stadt</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation>Entfernbare Einheiten</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation>Platzhalter-Typ</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation>Stärke Rang</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation>Helden-Typ</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation>Erfahrung</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation>MÄNNLICH</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation>WEIBLICH</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation>Geschlecht</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation>Name</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation>Biografie</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation>Zaubersprüche</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation>Patrouillenradius</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation>Stadtname</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation>Nachricht</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation>Zauberspruch</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation>Produktivität</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation>Menge</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation>Charakter</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation>Flieht niemals</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation>Wächst nicht</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation>Belohnung</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation>Nach Entfernen</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation>Menschlich-Auslöser</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation>CPU-Auslöser</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation>Erster Besuch Text</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation>Nächster Besuch Text</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation>Abgeschlossener Text</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation>Wiederhole Quest</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation>Zeitlimit</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>UNFLAGGBAR</translation>
     </message>
@@ -1534,8 +1815,8 @@
         <translation>Tag %1</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>Belohnung %1</translation>
     </message>
@@ -1757,12 +2038,12 @@
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>Kreaturlevel %1 / Kreaturlevel %1 Aufgerüstet</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>Tag %1 - %2</translation>
     </message>
@@ -2090,6 +2371,11 @@
         <source>Kill monster</source>
         <translation>Monster töten</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation>Jede Stadt</translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2292,6 +2578,11 @@
         <source>RMG failure</source>
         <translation>RMG-Fehler</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation>[Standard]</translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/polish.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Niezapisane zmiany zostaną utracone, jesteś pewny?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation>Ostatnio otwierane pliki</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation>Inne</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation>Bez sojuszu</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>ID gracza: %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation>Ekspert</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>Przyjazny</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>Przychylny</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>Agresywny</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>Wrogi</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>Nienawistny</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation>Brak patrolu</translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished">Portret</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished">Umiejętności</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Artefakty</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation>
             <numerusform>%n pole</numerusform>
@@ -1103,13 +1174,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Budynki</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Zdarzenia</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>neutralny</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Zaklęcia</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Wiadomość</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished">Zaklęcie</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished">Nagroda</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>NIEFLAGOWALNY</translation>
     </message>
@@ -1535,8 +1816,8 @@
         <translation>Dzień %1</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>Nagroda %1</translation>
     </message>
@@ -1758,12 +2039,12 @@
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>Stworzenie poziomu %1 / Ulepszone stworzenie poziomu %1</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>Dzień %1 - %2</translation>
     </message>
@@ -2091,6 +2372,11 @@
         <source>Kill monster</source>
         <translation>Zabij potwora</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2293,6 +2579,11 @@
         <source>RMG failure</source>
         <translation>Niepowodzenie generatora map losowych</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/portuguese.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>As alterações não salvas serão perdidas. Tem certeza?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Todos os mapas suportados (*.vmap *.h3m);;Mapas do VCMI (*.vmap);;Mapas do HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>ID do Jogador: %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation>Experiente</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>Complacente</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>Amigável</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>Agressivo</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>Hostil</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>Selvagem</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation>Sem patrulha</translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished">Retrato</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished">Habilidades</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Artefatos</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation>
             <numerusform>%n bloco</numerusform>
@@ -1102,13 +1173,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Estruturas</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Eventos</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>neutro</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Feitiços</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Mensagem</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished">Feitiço</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished">Recompensa</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>NÃO TEM BANDEIRA</translation>
     </message>
@@ -1534,8 +1815,8 @@
         <translation>Dia %1</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>Recompensa %1</translation>
     </message>
@@ -1757,12 +2038,12 @@
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>Nível da criatura %1 / Nível da criatura %1 - Atualização</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>Dia %1 - %2</translation>
     </message>
@@ -2090,6 +2371,11 @@
         <source>Kill monster</source>
         <translation>Matar monstro</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2292,6 +2578,11 @@
         <source>RMG failure</source>
         <translation>Falha do GMA</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/russian.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Несохранённые изменения будут потеряны. Вы уверены?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Все поддерживаемые карты  (*.vmap *.h3m);;Карты VCMI (*.vmap);;Карты Героев III (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation>Недавно открытые файлы</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation>Прочее</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation>Без команды</translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>Игрок: %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation>Эксперт</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation>Сговорчивый</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation>Дружелюбный</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation>Агрессивный</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation>Враждебный</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation>Дикий</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation>Без патруля</translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished">Портрет</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished">Навыки</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Артефакты</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1103,13 +1174,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Постройки</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">События</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation>нейтральный</translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Заклинания</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Сообщение</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished">Заклинание</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished">Награда</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation>НЕФЛАГУЕМЫЙ</translation>
     </message>
@@ -1535,8 +1816,8 @@
         <translation>День %1</translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation>Награда %1</translation>
     </message>
@@ -1758,12 +2039,12 @@
         <translation>ОК</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation>Уровень существа %1 / Уровень существа %1 Улучшение</translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation>День %1 - %2</translation>
     </message>
@@ -2091,6 +2372,11 @@
         <source>Kill monster</source>
         <translation>Убить монстра</translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2293,6 +2579,11 @@
         <source>RMG failure</source>
         <translation>Ошибка генерации случайной карты</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/spanish.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Los cambios no guardados se perderán. Está usted seguro ?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Todos los mapas soportados (*.vmap *.h3m);;Mapas VCMI (*.vmap);;Mapas HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>ID de jugador: %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Artefactos</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1102,13 +1173,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Edificios</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Eventos</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Hechizos</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Mensaje</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1534,8 +1815,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1757,12 +2038,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2090,6 +2371,11 @@
         <source>Kill monster</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2292,6 +2578,11 @@
         <source>RMG failure</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/ukrainian.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Всі підтримувані мапи (*.vmap *.h3m);;Мапи VCMI (*.vmap);;Мапи HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>Гравець %1</translation>
     </message>
@@ -1062,39 +1102,70 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished">Вміння</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Артефакти</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1103,13 +1174,223 @@
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Будівлі</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Події</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Закляття</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Повідомлення</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1535,8 +1816,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1758,12 +2039,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2091,6 +2372,11 @@
         <source>Kill monster</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2293,6 +2579,11 @@
         <source>RMG failure</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 309 - 18
mapeditor/translation/vietnamese.ts

@@ -646,6 +646,16 @@
         <source>Unsaved changes will be lost, are you sure?</source>
         <translation>Thay đổi chưa lưu sẽ bị mất, bạn có chắc chắn?</translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="410"/>
+        <source>Mods are required</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="415"/>
+        <source>Failed to open map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="441"/>
         <source>Open map</source>
@@ -657,10 +667,30 @@
         <translation>Tất cả bản đồ hỗ trợ (*.vmap *.h3m);;Bản đồ VCMI (*.vmap);;Bản đồ HoMM3 (*.h3m)</translation>
     </message>
     <message>
-        <location filename="../mainwindow.cpp" line="463"/>
+        <location filename="../mainwindow.cpp" line="497"/>
         <source>Recently Opened Files</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="550"/>
+        <source>Map validation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="552"/>
+        <source>Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="554"/>
+        <source>Map has some errors. Open Validator from the Map menu to see issues found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="578"/>
+        <source>Failed to save map</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="591"/>
         <source>Save map</source>
@@ -756,6 +786,16 @@
         <source>Other</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Mods loading problem</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mainwindow.cpp" line="945"/>
+        <source>Critical error during Mods loading. Disable invalid mods and restart.</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
         <location filename="../mainwindow.cpp" line="962"/>
         <source>View surface</source>
@@ -997,7 +1037,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../playerparams.cpp" line="108"/>
+        <location filename="../playerparams.cpp" line="110"/>
         <source>Player ID: %1</source>
         <translation>ID người chơi: %1</translation>
     </message>
@@ -1062,52 +1102,293 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="40"/>
+        <location filename="../inspector/inspector.cpp" line="949"/>
         <source>Compliant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="41"/>
+        <location filename="../inspector/inspector.cpp" line="950"/>
         <source>Friendly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="42"/>
+        <location filename="../inspector/inspector.cpp" line="951"/>
         <source>Aggressive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="43"/>
+        <location filename="../inspector/inspector.cpp" line="952"/>
         <source>Hostile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="44"/>
+        <location filename="../inspector/inspector.cpp" line="953"/>
         <source>Savage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="357"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="349"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
+        <location filename="../inspector/inspector.cpp" line="927"/>
         <source>No patrol</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>POWER RANK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="292"/>
+        <source>HERO TYPE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="315"/>
+        <source>Hero class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="324"/>
+        <source>Portrait</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="327"/>
+        <source>Skills</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="329"/>
+        <source>Artifacts</source>
+        <translation type="unfinished">Vật phẩm</translation>
+    </message>
     <message numerus="yes">
-        <location filename="../inspector/inspector.cpp" line="359"/>
-        <location filename="../inspector/inspector.cpp" line="360"/>
+        <location filename="../inspector/inspector.cpp" line="351"/>
+        <location filename="../inspector/inspector.cpp" line="352"/>
         <source>%n tile(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="875"/>
-        <location filename="../inspector/inspector.cpp" line="964"/>
+        <location filename="../inspector/inspector.cpp" line="364"/>
+        <source>Buildings</source>
+        <translation type="unfinished">Công trình</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="366"/>
+        <source>Events</source>
+        <translation type="unfinished">Sự kiện</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="397"/>
+        <source>Resource</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="428"/>
+        <source>Artifact reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="471"/>
+        <source>Quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="489"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="490"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="491"/>
+        <source>SubID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="492"/>
+        <source>InstanceName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="497"/>
+        <source>IsStatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="867"/>
+        <location filename="../inspector/inspector.cpp" line="1003"/>
         <source>neutral</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/inspector.cpp" line="873"/>
+        <location filename="../inspector/inspector.cpp" line="913"/>
+        <source>Army</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="914"/>
+        <source>Owner</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="915"/>
+        <source>Same as town</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="916"/>
+        <source>Removable units</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="917"/>
+        <source>Placeholder type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="918"/>
+        <source>Power rank</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="919"/>
+        <source>Hero type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="920"/>
+        <source>Experience</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="921"/>
+        <source>MALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="922"/>
+        <source>FEMALE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="923"/>
+        <source>Gender</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="924"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="925"/>
+        <source>Biography</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="926"/>
+        <source>Spells</source>
+        <translation type="unfinished">Phép</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="928"/>
+        <source>Patrol radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="929"/>
+        <source>Town name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="930"/>
+        <source>Message</source>
+        <translation type="unfinished">Thông báo</translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="931"/>
+        <source>Spell</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="932"/>
+        <source>Productivity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="933"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="934"/>
+        <source>Character</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="935"/>
+        <source>Never flees</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="936"/>
+        <source>Not growing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="937"/>
+        <source>Reward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="938"/>
+        <source>Remove after</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="939"/>
+        <source>Human trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="940"/>
+        <source>Cpu trigger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="941"/>
+        <source>First visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="942"/>
+        <source>Next visit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="943"/>
+        <source>Completed text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="944"/>
+        <source>Repeat quest</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="945"/>
+        <source>Time limit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../inspector/inspector.cpp" line="865"/>
         <source>UNFLAGGABLE</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1533,8 +1814,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/rewardswidget.cpp" line="238"/>
-        <location filename="../inspector/rewardswidget.cpp" line="609"/>
+        <location filename="../inspector/rewardswidget.cpp" line="242"/>
+        <location filename="../inspector/rewardswidget.cpp" line="613"/>
         <source>Reward %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1756,12 +2037,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="170"/>
+        <location filename="../inspector/towneventdialog.cpp" line="174"/>
         <source>Creature level %1 / Creature level %1 Upgrade</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../inspector/towneventdialog.cpp" line="212"/>
+        <location filename="../inspector/towneventdialog.cpp" line="216"/>
         <source>Day %1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2089,6 +2370,11 @@
         <source>Kill monster</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mapsettings/victoryconditions.cpp" line="432"/>
+        <source>Any town</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WindowNewMap</name>
@@ -2291,6 +2577,11 @@
         <source>RMG failure</source>
         <translation>Tạo bản đồ ngẫu nhiên thất bại</translation>
     </message>
+    <message>
+        <location filename="../windownewmap.cpp" line="422"/>
+        <source>[default]</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>main</name>

+ 1 - 1
mapeditor/windownewmap.cpp

@@ -419,7 +419,7 @@ void WindowNewMap::updateTemplateList()
 	if(templates.empty())
 		return;
 
-	ui->templateCombo->addItem("[default]", 0);
+	ui->templateCombo->addItem(tr("[default]"), 0);
 
 	for(auto * templ : templates)
 	{