Browse Source

Merge branch 'develop' into main_menu_1.7

George King 9 months ago
parent
commit
391a119c90
100 changed files with 9964 additions and 580 deletions
  1. 7 4
      .github/workflows/github.yml
  2. 16 0
      .github/workflows/on-release.yml
  3. 1 1
      AI/BattleAI/AttackPossibility.cpp
  4. 4 4
      AI/BattleAI/BattleEvaluator.cpp
  5. 4 4
      AI/BattleAI/BattleExchangeVariant.cpp
  6. 3 4
      AI/BattleAI/BattleExchangeVariant.h
  7. 35 33
      AI/Nullkiller/AIGateway.cpp
  8. 4 4
      AI/Nullkiller/AIGateway.h
  9. 8 8
      AI/Nullkiller/AIUtility.cpp
  10. 5 5
      AI/Nullkiller/AIUtility.h
  11. 56 12
      AI/Nullkiller/Analyzers/ArmyManager.cpp
  12. 8 7
      AI/Nullkiller/Analyzers/ArmyManager.h
  13. 4 3
      AI/Nullkiller/Analyzers/BuildAnalyzer.cpp
  14. 1 1
      AI/Nullkiller/Analyzers/HeroManager.h
  15. 10 2
      AI/Nullkiller/Analyzers/ObjectClusterizer.cpp
  16. 1 1
      AI/Nullkiller/Behaviors/BuildingBehavior.h
  17. 2 1
      AI/Nullkiller/Behaviors/BuyArmyBehavior.cpp
  18. 1 1
      AI/Nullkiller/Behaviors/BuyArmyBehavior.h
  19. 1 1
      AI/Nullkiller/Behaviors/CaptureObjectsBehavior.h
  20. 1 1
      AI/Nullkiller/Behaviors/ClusterBehavior.h
  21. 12 1
      AI/Nullkiller/Behaviors/DefenceBehavior.cpp
  22. 1 1
      AI/Nullkiller/Behaviors/DefenceBehavior.h
  23. 1 1
      AI/Nullkiller/Behaviors/ExplorationBehavior.h
  24. 2 1
      AI/Nullkiller/Behaviors/GatherArmyBehavior.cpp
  25. 1 1
      AI/Nullkiller/Behaviors/GatherArmyBehavior.h
  26. 3 1
      AI/Nullkiller/Behaviors/RecruitHeroBehavior.cpp
  27. 1 1
      AI/Nullkiller/Behaviors/RecruitHeroBehavior.h
  28. 1 1
      AI/Nullkiller/Behaviors/StartupBehavior.cpp
  29. 1 1
      AI/Nullkiller/Behaviors/StartupBehavior.h
  30. 1 1
      AI/Nullkiller/Behaviors/StayAtTownBehavior.h
  31. 9 5
      AI/Nullkiller/Engine/FuzzyEngines.cpp
  32. 2 2
      AI/Nullkiller/Engine/FuzzyHelper.cpp
  33. 7 4
      AI/Nullkiller/Engine/Nullkiller.cpp
  34. 149 47
      AI/Nullkiller/Engine/PriorityEvaluator.cpp
  35. 3 2
      AI/Nullkiller/Engine/PriorityEvaluator.h
  36. 1 1
      AI/Nullkiller/Engine/Settings.cpp
  37. 1 1
      AI/Nullkiller/Goals/AbstractGoal.cpp
  38. 1 1
      AI/Nullkiller/Goals/AbstractGoal.h
  39. 2 2
      AI/Nullkiller/Goals/CompleteQuest.cpp
  40. 1 1
      AI/Nullkiller/Helpers/ArmyFormation.h
  41. 1 1
      AI/Nullkiller/Helpers/ExplorationHelper.h
  42. 28 28
      AI/Nullkiller/Pathfinding/AINodeStorage.cpp
  43. 5 5
      AI/Nullkiller/Pathfinding/AINodeStorage.h
  44. 2 2
      AI/Nullkiller/Pathfinding/AIPathfinderConfig.cpp
  45. 4 3
      AI/Nullkiller/Pathfinding/Actors.cpp
  46. 1 1
      AI/Nullkiller/Pathfinding/Actors.h
  47. 1 1
      AI/VCAI/AIUtility.cpp
  48. 1 1
      AI/VCAI/AIUtility.h
  49. 1 1
      AI/VCAI/ArmyManager.h
  50. 1 1
      AI/VCAI/BuildingManager.cpp
  51. 1 1
      AI/VCAI/BuildingManager.h
  52. 9 5
      AI/VCAI/FuzzyEngines.cpp
  53. 1 1
      AI/VCAI/Goals/AbstractGoal.cpp
  54. 1 1
      AI/VCAI/Goals/AbstractGoal.h
  55. 1 1
      AI/VCAI/Goals/CompleteQuest.h
  56. 2 2
      AI/VCAI/Goals/GatherTroops.cpp
  57. 5 5
      AI/VCAI/MapObjectsEvaluator.cpp
  58. 3 1
      AI/VCAI/Pathfinding/AINodeStorage.cpp
  59. 1 1
      AI/VCAI/ResourceManager.h
  60. 31 31
      AI/VCAI/VCAI.cpp
  61. 4 4
      AI/VCAI/VCAI.h
  62. 3 3
      CI/NSIS.template.in
  63. 3 0
      CI/conan/base/android
  64. 101 0
      CI/wininstaller/build_installer.cmd
  65. 817 0
      CI/wininstaller/installer.iss
  66. 417 0
      CI/wininstaller/lang/BrazilianPortuguese.isl
  67. 427 0
      CI/wininstaller/lang/ChineseSimplified.isl
  68. 411 0
      CI/wininstaller/lang/Czech.isl
  69. 419 0
      CI/wininstaller/lang/English.isl
  70. 392 0
      CI/wininstaller/lang/Finnish.isl
  71. 437 0
      CI/wininstaller/lang/French.isl
  72. 438 0
      CI/wininstaller/lang/German.isl
  73. 419 0
      CI/wininstaller/lang/Hungarian.isl
  74. 423 0
      CI/wininstaller/lang/Italian.isl
  75. 424 0
      CI/wininstaller/lang/Korean.isl
  76. 410 0
      CI/wininstaller/lang/Polish.isl
  77. 403 0
      CI/wininstaller/lang/Russian.isl
  78. 416 0
      CI/wininstaller/lang/Spanish.isl
  79. 559 0
      CI/wininstaller/lang/Swedish.isl
  80. 417 0
      CI/wininstaller/lang/Turkish.isl
  81. 418 0
      CI/wininstaller/lang/Ukrainian.isl
  82. 417 0
      CI/wininstaller/lang/Vietnamese.isl
  83. BIN
      CI/wininstaller/vcmilogo.bmp
  84. BIN
      CI/wininstaller/vcmismalllogo.bmp
  85. 2 0
      CMakeLists.txt
  86. 25 0
      CMakePresets.json
  87. 123 0
      ChangeLog.md
  88. 3 5
      Global.h
  89. BIN
      Mods/vcmi/Content/Sprites/radialMenu/upgradeCreatures.png
  90. BIN
      Mods/vcmi/Content/Sprites/stackWindow/button-panel.png
  91. 2 2
      Mods/vcmi/Content/Sprites/stackWindow/switchModeIcons.json
  92. 4 6
      Mods/vcmi/Content/config/chinese.json
  93. 55 46
      Mods/vcmi/Content/config/czech.json
  94. 231 220
      Mods/vcmi/Content/config/english.json
  95. 3 0
      Mods/vcmi/Content/config/finnish.json
  96. 0 2
      Mods/vcmi/Content/config/french.json
  97. 53 20
      Mods/vcmi/Content/config/german.json
  98. 3 0
      Mods/vcmi/Content/config/greek.json
  99. 4 6
      Mods/vcmi/Content/config/hungarian.json
  100. 809 0
      Mods/vcmi/Content/config/italian.json

+ 7 - 4
.github/workflows/github.yml

@@ -29,7 +29,7 @@ jobs:
             before_install: linux_qt5.sh
             preset: linux-gcc-test
           - platform: linux
-            os: ubuntu-20.04
+            os: ubuntu-22.04
             test: 0
             before_install: linux_qt5.sh
             preset: linux-gcc-debug
@@ -246,6 +246,9 @@ jobs:
         if [[ ${{matrix.preset}} == linux-gcc-test ]]
         then
             cmake -DENABLE_CCACHE:BOOL=ON -DCMAKE_C_COMPILER=gcc-14 -DCMAKE_CXX_COMPILER=g++-14 --preset ${{ matrix.preset }}
+        elif [[ ${{matrix.preset}} == linux-gcc-debug ]]
+        then
+            cmake -DENABLE_CCACHE:BOOL=ON -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 --preset ${{ matrix.preset }}
         elif [[ (${{matrix.preset}} == android-conan-ninja-release) && (${{github.ref}} != 'refs/heads/master') ]]
         then
             cmake -DENABLE_CCACHE:BOOL=ON -DANDROID_GRADLE_PROPERTIES="applicationIdSuffix=.daily;signingConfig=dailySigning;applicationLabel=VCMI daily;applicationVariant=daily" --preset ${{ matrix.preset }}
@@ -355,7 +358,7 @@ jobs:
 
   deploy-src:
     if: always() && github.ref == 'refs/heads/master'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
     defaults:
       run:
         shell: bash
@@ -396,7 +399,7 @@ jobs:
           run: |
             find . -path ./.git -prune -o -path ./AI/FuzzyLite -prune -o -path ./test/googletest \
             -o -path ./osx  -prune -o -type f \
-            -not -name '*.png' -and -not -name '*.ttf' -and -not -name '*.wav' -and -not -name '*.webm' -and -not -name '*.ico' -and -not -name '*.bat' -print0 | \
+            -not -name '*.png' -and -not -name '*.ttf' -and -not -name '*.wav' -and -not -name '*.webm' -and -not -name '*.ico' -and -not -name '*.bat' -and -not -name '*.cmd' -and -not -name '*.iss' -and -not -name '*.isl' -print0 | \
             { ! xargs -0 grep -l -z -P '\r\n'; }
 
         - name: Validate JSON
@@ -405,7 +408,7 @@ jobs:
             python3 CI/validate_json.py
 
         - name: Validate Markdown
-          uses: DavidAnson/markdownlint-cli2-action@v18
+          uses: DavidAnson/markdownlint-cli2-action@v19
           with:
             config: 'CI/example.markdownlint-cli2.jsonc'
             globs: '**/*.md'

+ 16 - 0
.github/workflows/on-release.yml

@@ -0,0 +1,16 @@
+name: Notify other repos of release
+on:
+  release:
+    types: [published]
+jobs:
+  notify_repos:
+    if: ${{ !github.event.release.prerelease }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: Repository Dispatch only for releases
+        uses: peter-evans/repository-dispatch@v3
+        with:
+          token: ${{ secrets.HOMEBREW_TOKEN_SECRET }}
+          repository: vcmi/homebrew-vcmi
+          event-type: on-release
+          client-payload: '{"release": ${{ toJson(github.event.release) }}}'

+ 1 - 1
AI/BattleAI/AttackPossibility.cpp

@@ -38,7 +38,7 @@ void DamageCache::buildObstacleDamageCache(std::shared_ptr<HypotheticBattle> hb,
 		if(!spellObstacle || !obst->triggersEffects())
 			continue;
 
-		auto triggerAbility = VLC->spells()->getById(obst->getTrigger());
+		auto triggerAbility = LIBRARY->spells()->getById(obst->getTrigger());
 		auto triggerIsNegative = triggerAbility->isNegative() || triggerAbility->isDamage();
 
 		if(!triggerIsNegative)

+ 4 - 4
AI/BattleAI/BattleEvaluator.cpp

@@ -384,7 +384,7 @@ BattleAction BattleEvaluator::goTowardsNearest(const CStack * stack, const Battl
 
 	BattleHexArray targetHexes = hexes;
 
-	targetHexes.sort([&](const BattleHex & h1, const BattleHex & h2) -> bool
+	targetHexes.sort([&reachability](const BattleHex & h1, const BattleHex & h2) -> bool
 		{
 			return reachability.distances[h1.toInt()] < reachability.distances[h2.toInt()];
 		});
@@ -426,7 +426,7 @@ BattleAction BattleEvaluator::goTowardsNearest(const CStack * stack, const Battl
 		{
 			if(obst->triggersEffects())
 			{
-				auto triggerAbility =  VLC->spells()->getById(obst->getTrigger());
+				auto triggerAbility =  LIBRARY->spells()->getById(obst->getTrigger());
 				auto triggerIsNegative = triggerAbility->isNegative() || triggerAbility->isDamage();
 
 				if(triggerIsNegative)
@@ -435,7 +435,7 @@ BattleAction BattleEvaluator::goTowardsNearest(const CStack * stack, const Battl
 		}
 		// Flying stack doesn't go hex by hex, so we can't backtrack using predecessors.
 		// We just check all available hexes and pick the one closest to the target.
-		auto nearestAvailableHex = vstd::minElementByFun(avHexes, [&](const BattleHex & hex) -> int
+		auto nearestAvailableHex = vstd::minElementByFun(avHexes, [this, &bestNeighbour, &stack, &obstacleHexes](const BattleHex & hex) -> int
 		{
 			const int NEGATIVE_OBSTACLE_PENALTY = 100; // avoid landing on negative obstacle (moat, fire wall, etc)
 			const int BLOCKED_STACK_PENALTY = 100; // avoid landing on moat
@@ -494,7 +494,7 @@ bool BattleEvaluator::attemptCastingSpell(const CStack * activeStack)
 	//Get all spells we can cast
 	std::vector<const CSpell*> possibleSpells;
 
-	for (auto const & s : VLC->spellh->objects)
+	for (auto const & s : LIBRARY->spellh->objects)
 		if (s->canBeCast(cb->getBattle(battleID).get(), spells::Mode::HERO, hero))
 			possibleSpells.push_back(s.get());
 

+ 4 - 4
AI/BattleAI/BattleExchangeVariant.cpp

@@ -349,7 +349,7 @@ MoveTarget BattleExchangeEvaluator::findMoveTowardsUnreachable(
 		logAi->trace(
 			"Checking movement towards %d of %s",
 			enemy->getCount(),
-			VLC->creatures()->getById(enemy->creatureId())->getJsonKey());
+			LIBRARY->creatures()->getById(enemy->creatureId())->getJsonKey());
 
 		auto distance = dists.distToNearestNeighbour(activeStack, enemy);
 
@@ -506,7 +506,7 @@ ReachabilityData BattleExchangeEvaluator::getExchangeUnits(
 	uint8_t turn,
 	PotentialTargets & targets,
 	std::shared_ptr<HypotheticBattle> hb,
-	battle::Units additionalUnits) const
+	const battle::Units & additionalUnits) const
 {
 	ReachabilityData result;
 
@@ -636,7 +636,7 @@ BattleScore BattleExchangeEvaluator::calculateExchange(
 	PotentialTargets & targets,
 	DamageCache & damageCache,
 	std::shared_ptr<HypotheticBattle> hb,
-	battle::Units additionalUnits) const
+	const battle::Units & additionalUnits) const
 {
 #if BATTLE_TRACE_LEVEL>=1
 	logAi->trace("Battle exchange at %d", ap.attack.shooting ? ap.dest.toInt() : ap.from.toInt());
@@ -1002,7 +1002,7 @@ const battle::Units & BattleExchangeEvaluator::getOneTurnReachableUnits(uint8_t
 }
 
 // avoid blocking path for stronger stack by weaker stack
-bool BattleExchangeEvaluator::checkPositionBlocksOurStacks(HypotheticBattle & hb, const battle::Unit * activeUnit, const BattleHex & position)
+bool BattleExchangeEvaluator::checkPositionBlocksOurStacks(const HypotheticBattle & hb, const battle::Unit * activeUnit, const BattleHex & position)
 {
 	const int BLOCKING_THRESHOLD = 70;
 	const int BLOCKING_OWN_ATTACK_PENALTY = 100;

+ 3 - 4
AI/BattleAI/BattleExchangeVariant.h

@@ -133,7 +133,6 @@ class ReachabilityMapCache
 	std::map<uint32_t, ReachabilityInfo> unitReachabilityMap; // unit ID -> reachability
 	std::map<uint32_t, PerTurnData> hexReachabilityPerTurn;
 
-	//const ReachabilityInfo & update();
 	battle::Units computeOneTurnReachableUnits(std::shared_ptr<CBattleInfoCallback> cb, std::shared_ptr<Environment> env, const std::vector<battle::Units> & turnOrder, uint8_t turn, const BattleHex & hex);
 public:
 	const battle::Units & getOneTurnReachableUnits(std::shared_ptr<CBattleInfoCallback> cb, std::shared_ptr<Environment> env, const std::vector<battle::Units> & turnOrder, uint8_t turn, const BattleHex & hex);
@@ -158,7 +157,7 @@ private:
 		PotentialTargets & targets,
 		DamageCache & damageCache,
 		std::shared_ptr<HypotheticBattle> hb,
-		battle::Units additionalUnits = {}) const;
+		const battle::Units & additionalUnits = {}) const;
 
 	bool canBeHitThisTurn(const AttackPossibility & ap);
 
@@ -193,9 +192,9 @@ public:
 		uint8_t turn,
 		PotentialTargets & targets,
 		std::shared_ptr<HypotheticBattle> hb,
-		battle::Units additionalUnits = {}) const;
+		const battle::Units & additionalUnits = {}) const;
 
-	bool checkPositionBlocksOurStacks(HypotheticBattle & hb, const battle::Unit * unit, const BattleHex & position);
+	bool checkPositionBlocksOurStacks(const HypotheticBattle & hb, const battle::Unit * unit, const BattleHex & position);
 
 	MoveTarget findMoveTowardsUnreachable(
 		const battle::Unit * activeStack,

+ 35 - 33
AI/Nullkiller/AIGateway.cpp

@@ -163,7 +163,7 @@ void AIGateway::showTavernWindow(const CGObjectInstance * object, const CGHeroIn
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "TavernWindow");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void AIGateway::showThievesGuildWindow(const CGObjectInstance * obj)
@@ -299,7 +299,7 @@ void AIGateway::heroExchangeStarted(ObjectInstanceID hero1, ObjectInstanceID her
 
 	status.addQuery(query, boost::str(boost::format("Exchange between heroes %s (%d) and %s (%d)") % firstHero->getNameTranslated() % firstHero->tempOwner % secondHero->getNameTranslated() % secondHero->tempOwner));
 
-	requestActionASAP([=]()
+	requestActionASAP([this, firstHero, secondHero, query]()
 	{
 		auto transferFrom2to1 = [this](const CGHeroInstance * h1, const CGHeroInstance * h2) -> void
 		{
@@ -338,7 +338,7 @@ void AIGateway::showRecruitmentDialog(const CGDwelling * dwelling, const CArmedI
 
 	status.addQuery(queryID, "RecruitmentDialog");
 
-	requestActionASAP([=](){
+	requestActionASAP([this, dwelling, dst, queryID](){
 		recruitCreatures(dwelling, dst);
 		answerQuery(queryID, 0);
 	});
@@ -411,6 +411,7 @@ void AIGateway::heroCreated(const CGHeroInstance * h)
 {
 	LOG_TRACE(logAi);
 	NET_EVENT_HANDLER;
+	nullkiller->invalidatePathfinderData(); // new hero needs to look around
 }
 
 void AIGateway::advmapSpellCast(const CGHeroInstance * caster, SpellID spellID)
@@ -456,7 +457,7 @@ void AIGateway::showUniversityWindow(const IMarket * market, const CGHeroInstanc
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "UniversityWindow");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void AIGateway::heroManaPointsChanged(const CGHeroInstance * hero)
@@ -532,7 +533,7 @@ void AIGateway::showMarketWindow(const IMarket * market, const CGHeroInstance *
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "MarketWindow");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void AIGateway::showWorldViewEx(const std::vector<ObjectPosInfo> & objectPositions, bool showTerrain)
@@ -588,7 +589,7 @@ void AIGateway::yourTurn(QueryID queryID)
 	NET_EVENT_HANDLER;
 	nullkiller->invalidatePathfinderData();
 	status.addQuery(queryID, "YourTurn");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 	status.startedTurn();
 	makingTurn = std::make_unique<boost::thread>(&AIGateway::makeTurn, this);
 }
@@ -601,7 +602,7 @@ void AIGateway::heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, s
 	status.addQuery(queryID, boost::str(boost::format("Hero %s got level %d") % hero->getNameTranslated() % hero->level));
 	HeroPtr hPtr = hero;
 
-	requestActionASAP([=]()
+	requestActionASAP([this, hPtr, skills, queryID]()
 	{ 
 		int sel = 0;
 
@@ -623,7 +624,7 @@ void AIGateway::commanderGotLevel(const CCommanderInstance * commander, std::vec
 	LOG_TRACE_PARAMS(logAi, "queryID '%i'", queryID);
 	NET_EVENT_HANDLER;
 	status.addQuery(queryID, boost::str(boost::format("Commander %s of %s got level %d") % commander->name % commander->armyObj->nodeName() % (int)commander->level));
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void AIGateway::showBlockingDialog(const std::string & text, const std::vector<Component> & components, QueryID askID, const int soundID, bool selection, bool cancel, bool safeToAutoaccept)
@@ -638,7 +639,7 @@ void AIGateway::showBlockingDialog(const std::string & text, const std::vector<C
 
 	if(!selection && cancel)
 	{
-		requestActionASAP([=]()
+		requestActionASAP([this, hero, target, askID]()
 		{
 			//yes&no -> always answer yes, we are a brave AI :)
 			bool answer = true;
@@ -686,7 +687,7 @@ void AIGateway::showBlockingDialog(const std::string & text, const std::vector<C
 		return;
 	}
 
-	requestActionASAP([=]()
+	requestActionASAP([this, selection, components, hero, askID]()
 	{
 		int sel = 0;
 
@@ -748,7 +749,7 @@ void AIGateway::showTeleportDialog(const CGHeroInstance * hero, TeleportChannelI
 		}
 	}
 
-	requestActionASAP([=]()
+	requestActionASAP([this, askID, chosenExit]()
 	{
 		answerQuery(askID, chosenExit);
 	});
@@ -765,7 +766,7 @@ void AIGateway::showGarrisonDialog(const CArmedInstance * up, const CGHeroInstan
 	status.addQuery(queryID, boost::str(boost::format("Garrison dialog with %s and %s") % s1 % s2));
 
 	//you can't request action from action-response thread
-	requestActionASAP([=]()
+	requestActionASAP([this, up, down, removableUnits, queryID]()
 	{
 		if(removableUnits && up->tempOwner == down->tempOwner && nullkiller->settings->isGarrisonTroopsUsageAllowed() && !cb->getStartInfo()->isRestorationOfErathiaCampaign())
 		{
@@ -780,7 +781,7 @@ void AIGateway::showMapObjectSelectDialog(QueryID askID, const Component & icon,
 {
 	NET_EVENT_HANDLER;
 	status.addQuery(askID, "Map object select query");
-	requestActionASAP([=](){ answerQuery(askID, selectedObject.getNum()); });
+	requestActionASAP([this, askID](){ answerQuery(askID, selectedObject.getNum()); });
 }
 
 bool AIGateway::makePossibleUpgrades(const CArmedInstance * obj)
@@ -835,7 +836,7 @@ void AIGateway::makeTurn()
 	auto day = cb->getDate(Date::DAY);
 	logAi->info("Player %d (%s) starting turn, day %d", playerID, playerID.toString(), day);
 
-	boost::shared_lock gsLock(CGameState::mutex);
+	std::shared_lock gsLock(CGameState::mutex);
 	setThreadName("AIGateway::makeTurn");
 
 	if(nullkiller->isOpenMap())
@@ -929,7 +930,7 @@ void AIGateway::pickBestCreatures(const CArmedInstance * destinationArmy, const
 
 	const CArmedInstance * armies[] = {destinationArmy, source};
 
-	auto bestArmy = nullkiller->armyManager->getBestArmy(destinationArmy, destinationArmy, source);
+	auto bestArmy = nullkiller->armyManager->getBestArmy(destinationArmy, destinationArmy, source, myCb->getTile(source->visitablePos())->getTerrainID());
 
 	for(auto army : armies)
 	{
@@ -983,7 +984,7 @@ void AIGateway::pickBestCreatures(const CArmedInstance * destinationArmy, const
 						&& source->stacksCount() == 1
 						&& (!destinationArmy->hasStackAtSlot(i) || destinationArmy->getCreature(i) == targetCreature))
 					{
-						auto weakest = nullkiller->armyManager->getWeakestCreature(bestArmy);
+						auto weakest = nullkiller->armyManager->getBestUnitForScout(bestArmy, myCb->getTile(source->visitablePos())->getTerrainID());
 						
 						if(weakest->creature == targetCreature)
 						{
@@ -1208,7 +1209,7 @@ void AIGateway::battleEnd(const BattleID & battleID, const BattleResult * br, Qu
 	{
 		status.addQuery(queryID, "Confirm battle query");
 
-		requestActionASAP([=]()
+		requestActionASAP([this, queryID]()
 			{
 				answerQuery(queryID, 0);
 			});
@@ -1581,7 +1582,7 @@ void AIGateway::buildArmyIn(const CGTownInstance * t)
 void AIGateway::finish()
 {
 	//we want to lock to avoid multiple threads from calling makingTurn->join() at same time
-	boost::lock_guard<boost::mutex> multipleCleanupGuard(turnInterruptionMutex);
+	std::lock_guard<std::mutex> multipleCleanupGuard(turnInterruptionMutex);
 
 	if(makingTurn)
 	{
@@ -1597,7 +1598,7 @@ void AIGateway::requestActionASAP(std::function<void()> whatToDo)
 	{
 		setThreadName("AIGateway::requestActionASAP::whatToDo");
 		SET_GLOBAL_STATE(this);
-		boost::shared_lock gsLock(CGameState::mutex);
+		std::shared_lock gsLock(CGameState::mutex);
 		whatToDo();
 	});
 
@@ -1607,6 +1608,7 @@ void AIGateway::requestActionASAP(std::function<void()> whatToDo)
 void AIGateway::lostHero(HeroPtr h)
 {
 	logAi->debug("I lost my hero %s. It's best to forget and move on.", h.name());
+	nullkiller->invalidatePathfinderData();
 }
 
 void AIGateway::answerQuery(QueryID queryID, int selection)
@@ -1668,7 +1670,7 @@ AIStatus::~AIStatus()
 
 void AIStatus::setBattle(BattleState BS)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	LOG_TRACE_PARAMS(logAi, "battle state=%d", (int)BS);
 	battle = BS;
 	cv.notify_all();
@@ -1676,7 +1678,7 @@ void AIStatus::setBattle(BattleState BS)
 
 BattleState AIStatus::getBattle()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	return battle;
 }
 
@@ -1689,7 +1691,7 @@ void AIStatus::addQuery(QueryID ID, std::string description)
 	}
 
 	assert(ID.getNum() >= 0);
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 
 	assert(!vstd::contains(remainingQueries, ID));
 
@@ -1701,7 +1703,7 @@ void AIStatus::addQuery(QueryID ID, std::string description)
 
 void AIStatus::removeQuery(QueryID ID)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	assert(vstd::contains(remainingQueries, ID));
 
 	std::string description = remainingQueries[ID];
@@ -1713,40 +1715,40 @@ void AIStatus::removeQuery(QueryID ID)
 
 int AIStatus::getQueriesCount()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	return static_cast<int>(remainingQueries.size());
 }
 
 void AIStatus::startedTurn()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	havingTurn = true;
 	cv.notify_all();
 }
 
 void AIStatus::madeTurn()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	havingTurn = false;
 	cv.notify_all();
 }
 
 void AIStatus::waitTillFree()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	while(battle != NO_BATTLE || !remainingQueries.empty() || !objectsBeingVisited.empty() || ongoingHeroMovement)
-		cv.wait_for(lock, boost::chrono::milliseconds(10));
+		cv.wait_for(lock, std::chrono::milliseconds(10));
 }
 
 bool AIStatus::haveTurn()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	return havingTurn;
 }
 
 void AIStatus::attemptedAnsweringQuery(QueryID queryID, int answerRequestID)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	assert(vstd::contains(remainingQueries, queryID));
 	std::string description = remainingQueries[queryID];
 	logAi->debug("Attempted answering query %d - %s. Request id=%d. Waiting for results...", queryID, description, answerRequestID);
@@ -1773,7 +1775,7 @@ void AIStatus::receivedAnswerConfirmation(int answerRequestID, int result)
 
 void AIStatus::heroVisit(const CGObjectInstance * obj, bool started)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	if(started)
 	{
 		objectsBeingVisited.push_back(obj);
@@ -1791,14 +1793,14 @@ void AIStatus::heroVisit(const CGObjectInstance * obj, bool started)
 
 void AIStatus::setMove(bool ongoing)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	ongoingHeroMovement = ongoing;
 	cv.notify_all();
 }
 
 void AIStatus::setChannelProbing(bool ongoing)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	ongoingChannelProbing = ongoing;
 	cv.notify_all();
 }

+ 4 - 4
AI/Nullkiller/AIGateway.h

@@ -15,7 +15,7 @@
 #include "../../CCallback.h"
 #include "../../lib/CThreadHelper.h"
 #include "../../lib/GameConstants.h"
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/mapObjects/MiscObjects.h"
 #include "../../lib/spells/CSpellHandler.h"
@@ -27,8 +27,8 @@ namespace NKAI
 
 class AIStatus
 {
-	boost::mutex mx;
-	boost::condition_variable cv;
+	std::mutex mx;
+	std::condition_variable cv;
 
 	BattleState battle;
 	std::map<QueryID, std::string> remainingQueries;
@@ -83,7 +83,7 @@ public:
 	std::shared_ptr<CCallback> myCb;
 	std::unique_ptr<boost::thread> makingTurn;
 private:
-	boost::mutex turnInterruptionMutex;
+	std::mutex turnInterruptionMutex;
 
 public:
 	ObjectInstanceID selectedObject;

+ 8 - 8
AI/Nullkiller/AIUtility.cpp

@@ -328,9 +328,9 @@ double getArtifactBonusRelevance(const CGHeroInstance * hero, const std::shared_
 		uint64_t totalWeight = 0;
 		uint64_t knownWeight = 0;
 
-		for (auto spellID : VLC->spellh->getDefaultAllowed())
+		for (auto spellID : LIBRARY->spellh->getDefaultAllowed())
 		{
-			auto spell = spellID.toEntity(VLC);
+			auto spell = spellID.toEntity(LIBRARY);
 			if (!spell->hasSchool(school))
 				continue;
 
@@ -351,9 +351,9 @@ double getArtifactBonusRelevance(const CGHeroInstance * hero, const std::shared_
 		uint64_t totalWeight = 0;
 		uint64_t knownWeight = 0;
 
-		for (auto spellID : VLC->spellh->getDefaultAllowed())
+		for (auto spellID : LIBRARY->spellh->getDefaultAllowed())
 		{
-			auto spell = spellID.toEntity(VLC);
+			auto spell = spellID.toEntity(LIBRARY);
 			if (spell->getLevel() != level)
 				continue;
 
@@ -468,7 +468,7 @@ int32_t getArtifactBonusScoreImpl(const std::shared_ptr<Bonus> & bonus)
 		case BonusType::UNDEAD_RAISE_PERCENTAGE:
 			return bonus->val * 400;
 		case BonusType::GENERATE_RESOURCE:
-			return bonus->val * VLC->objh->resVals.at(bonus->subtype.as<GameResID>().getNum()) * 10;
+			return bonus->val * LIBRARY->objh->resVals.at(bonus->subtype.as<GameResID>().getNum()) * 10;
 		case BonusType::SPELL_DURATION:
 			return bonus->val * 200;
 		case BonusType::MAGIC_RESISTANCE:
@@ -569,7 +569,7 @@ int64_t getArtifactScoreForHero(const CGHeroInstance * hero, const CArtifactInst
 	if (artifact->isScroll())
 	{
 		auto spellID = artifact->getScrollSpellID();
-		auto spell = spellID.toEntity(VLC);
+		auto spell = spellID.toEntity(LIBRARY);
 
 		if (hero->getSpellsInSpellbook().count(spellID))
 			return 0;
@@ -774,9 +774,9 @@ bool townHasFreeTavern(const CGTownInstance * town)
 	return canMoveVisitingHeroToGarrison;
 }
 
-uint64_t getHeroArmyStrengthWithCommander(const CGHeroInstance * hero, const CCreatureSet * heroArmy)
+uint64_t getHeroArmyStrengthWithCommander(const CGHeroInstance * hero, const CCreatureSet * heroArmy, int fortLevel)
 {
-	auto armyStrength = heroArmy->getArmyStrength();
+	auto armyStrength = heroArmy->getArmyStrength(fortLevel);
 
 	if(hero && hero->commander && hero->commander->alive)
 	{

+ 5 - 5
AI/Nullkiller/AIUtility.h

@@ -39,7 +39,7 @@
 
 /*********************** TBB.h ********************/
 
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/spells/CSpellHandler.h"
 #include "../../lib/CStopWatch.h"
@@ -217,7 +217,7 @@ int64_t getArtifactScoreForHero(const CGHeroInstance * hero, const CArtifactInst
 int64_t getPotentialArtifactScore(const CArtifact * art);
 bool townHasFreeTavern(const CGTownInstance * town);
 
-uint64_t getHeroArmyStrengthWithCommander(const CGHeroInstance * hero, const CCreatureSet * heroArmy);
+uint64_t getHeroArmyStrengthWithCommander(const CGHeroInstance * hero, const CCreatureSet * heroArmy, int fortLevel = 0);
 
 uint64_t timeElapsed(std::chrono::time_point<std::chrono::high_resolution_clock> start);
 
@@ -259,13 +259,13 @@ public:
 
 	void add(std::unique_ptr<T> t)
 	{
-		boost::lock_guard<boost::mutex> lock(sync);
+		std::lock_guard<std::mutex> lock(sync);
 		pool.push_back(std::move(t));
 	}
 
 	ptr_type acquire()
 	{
-		boost::lock_guard<boost::mutex> lock(sync);
+		std::lock_guard<std::mutex> lock(sync);
 		bool poolIsEmpty = pool.empty();
 		T * element = poolIsEmpty
 			? elementFactory().release()
@@ -294,7 +294,7 @@ private:
 	std::vector<std::unique_ptr<T>> pool;
 	std::function<std::unique_ptr<T>()> elementFactory;
 	std::shared_ptr<SharedPool<T> *> instance_tracker;
-	boost::mutex sync;
+	std::mutex sync;
 };
 
 }

+ 56 - 12
AI/Nullkiller/Analyzers/ArmyManager.cpp

@@ -13,8 +13,10 @@
 #include "../Engine/Nullkiller.h"
 #include "../../../CCallback.h"
 #include "../../../lib/mapObjects/MapObjects.h"
+#include "../../../lib/mapping/CMapDefines.h"
 #include "../../../lib/IGameSettings.h"
 #include "../../../lib/GameConstants.h"
+#include "../../../lib/TerrainHandler.h"
 
 namespace NKAI
 {
@@ -76,7 +78,7 @@ std::vector<SlotInfo> ArmyManager::toSlotInfo(std::vector<creInfo> army) const
 
 uint64_t ArmyManager::howManyReinforcementsCanGet(const CGHeroInstance * hero, const CCreatureSet * source) const
 {
-	return howManyReinforcementsCanGet(hero, hero, source);
+	return howManyReinforcementsCanGet(hero, hero, source, ai->cb->getTile(hero->visitablePos())->getTerrainID());
 }
 
 std::vector<SlotInfo> ArmyManager::getSortedSlots(const CCreatureSet * target, const CCreatureSet * source) const
@@ -111,17 +113,59 @@ std::vector<SlotInfo> ArmyManager::getSortedSlots(const CCreatureSet * target, c
 	return resultingArmy;
 }
 
-std::vector<SlotInfo>::iterator ArmyManager::getWeakestCreature(std::vector<SlotInfo> & army) const
+std::vector<SlotInfo>::iterator ArmyManager::getBestUnitForScout(std::vector<SlotInfo> & army, const TerrainId & armyTerrain) const
 {
-	auto weakest = boost::min_element(army, [](const SlotInfo & left, const SlotInfo & right) -> bool
+	uint64_t totalPower = 0;
+
+	for (const auto & unit : army)
+		totalPower += unit.power;
+
+	int baseMovementCost = cb->getSettings().getInteger(EGameSettings::HEROES_MOVEMENT_COST_BASE);
+	bool terrainHasPenalty = armyTerrain.hasValue() && armyTerrain.toEntity(LIBRARY)->moveCost != baseMovementCost;
+
+	// arbitrary threshold - don't give scout more than specified part of total AI value of our army
+	uint64_t maxUnitValue = totalPower / 100;
+
+	const auto & movementPointsLimits = cb->getSettings().getVector(EGameSettings::HEROES_MOVEMENT_POINTS_LAND);
+
+	auto fastest = boost::min_element(army, [&](const SlotInfo & left, const SlotInfo & right) -> bool
 	{
-		if(left.creature->getLevel() != right.creature->getLevel())
-			return left.creature->getLevel() < right.creature->getLevel();
-		
-		return left.creature->getMovementRange() > right.creature->getMovementRange();
+		uint64_t leftUnitPower = left.power / left.count;
+		uint64_t rightUnitPower = left.power / left.count;
+		bool leftUnitIsWeak = leftUnitPower < maxUnitValue || left.creature->getLevel() < 4;
+		bool rightUnitIsWeak = rightUnitPower < maxUnitValue || right.creature->getLevel() < 4;
+
+		if (leftUnitIsWeak != rightUnitIsWeak)
+			return leftUnitIsWeak;
+
+		if (terrainHasPenalty)
+		{
+			auto leftNativeTerrain = left.creature->getFactionID().toFaction()->nativeTerrain;
+			auto rightNativeTerrain = right.creature->getFactionID().toFaction()->nativeTerrain;
+
+			if (leftNativeTerrain != rightNativeTerrain)
+			{
+				if (leftNativeTerrain == armyTerrain)
+					return true;
+
+				if (rightNativeTerrain == armyTerrain)
+					return false;
+			}
+		}
+
+		int leftEffectiveMovement = std::min<int>(movementPointsLimits.size() - 1, left.creature->getMovementRange());
+		int rightEffectiveMovement = std::min<int>(movementPointsLimits.size() - 1, right.creature->getMovementRange());
+
+		int leftMovementPointsLimit = movementPointsLimits[leftEffectiveMovement];
+		int rightMovementPointsLimit = movementPointsLimits[rightEffectiveMovement];
+
+		if (leftMovementPointsLimit != rightMovementPointsLimit)
+			return leftMovementPointsLimit > rightMovementPointsLimit;
+
+		return leftUnitPower < rightUnitPower;
 	});
 
-	return weakest;
+	return fastest;
 }
 
 class TemporaryArmy : public CArmedInstance
@@ -134,7 +178,7 @@ public:
 	}
 };
 
-std::vector<SlotInfo> ArmyManager::getBestArmy(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source) const
+std::vector<SlotInfo> ArmyManager::getBestArmy(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source, const TerrainId & armyTerrain) const
 {
 	auto sortedSlots = getSortedSlots(target, source);
 
@@ -218,7 +262,7 @@ std::vector<SlotInfo> ArmyManager::getBestArmy(const IBonusBearer * armyCarrier,
 		&& allowedFactions.size() == alignmentMap.size()
 		&& source->needsLastStack())
 	{
-		auto weakest = getWeakestCreature(resultingArmy);
+		auto weakest = getBestUnitForScout(resultingArmy, armyTerrain);
 
 		if(weakest->count == 1) 
 		{
@@ -398,14 +442,14 @@ std::vector<creInfo> ArmyManager::getArmyAvailableToBuy(
 	return creaturesInDwellings;
 }
 
-ui64 ArmyManager::howManyReinforcementsCanGet(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source) const
+ui64 ArmyManager::howManyReinforcementsCanGet(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source, const TerrainId & armyTerrain) const
 {
 	if(source->stacksCount() == 0)
 	{
 		return 0;
 	}
 
-	auto bestArmy = getBestArmy(armyCarrier, target, source);
+	auto bestArmy = getBestArmy(armyCarrier, target, source, armyTerrain);
 	uint64_t newArmy = 0;
 	uint64_t oldArmy = target->getArmyStrength();
 

+ 8 - 7
AI/Nullkiller/Analyzers/ArmyManager.h

@@ -13,7 +13,7 @@
 #include "../AIUtility.h"
 
 #include "../../../lib/GameConstants.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 
 namespace NKAI
 {
@@ -53,10 +53,11 @@ public:
 	virtual ui64 howManyReinforcementsCanGet(
 		const IBonusBearer * armyCarrier,
 		const CCreatureSet * target,
-		const CCreatureSet * source) const = 0;
+		const CCreatureSet * source,
+		const TerrainId & armyTerrain) const = 0;
 
-	virtual std::vector<SlotInfo> getBestArmy(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source) const = 0;
-	virtual std::vector<SlotInfo>::iterator getWeakestCreature(std::vector<SlotInfo> & army) const = 0;
+	virtual std::vector<SlotInfo> getBestArmy(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source, const TerrainId & armyTerrain) const = 0;
+	virtual std::vector<SlotInfo>::iterator getBestUnitForScout(std::vector<SlotInfo> & army, const TerrainId & armyTerrain) const = 0;
 	virtual std::vector<SlotInfo> getSortedSlots(const CCreatureSet * target, const CCreatureSet * source) const = 0;
 	virtual std::vector<SlotInfo> toSlotInfo(std::vector<creInfo> creatures) const = 0;
 
@@ -97,9 +98,9 @@ public:
 		uint8_t turn = 0) const override;
 
 	ui64 howManyReinforcementsCanGet(const CGHeroInstance * hero, const CCreatureSet * source) const override;
-	ui64 howManyReinforcementsCanGet(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source) const override;
-	std::vector<SlotInfo> getBestArmy(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source) const override;
-	std::vector<SlotInfo>::iterator getWeakestCreature(std::vector<SlotInfo> & army) const override;
+	ui64 howManyReinforcementsCanGet(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source, const TerrainId & armyTerrain) const override;
+	std::vector<SlotInfo> getBestArmy(const IBonusBearer * armyCarrier, const CCreatureSet * target, const CCreatureSet * source, const TerrainId & armyTerrain) const override;
+	std::vector<SlotInfo>::iterator getBestUnitForScout(std::vector<SlotInfo> & army, const TerrainId & armyTerrain) const override;
 	std::vector<SlotInfo> getSortedSlots(const CCreatureSet * target, const CCreatureSet * source) const override;
 	std::vector<SlotInfo> toSlotInfo(std::vector<creInfo> creatures) const override;
 

+ 4 - 3
AI/Nullkiller/Analyzers/BuildAnalyzer.cpp

@@ -209,7 +209,7 @@ BuildingInfo BuildAnalyzer::getBuildingOrPrerequisite(
 	int creatureLevel = -1;
 	int creatureUpgrade = 0;
 
-	if(toBuild.IsDwelling())
+	if(toBuild.isDwelling())
 	{
 		creatureLevel = BuildingID::getLevelFromDwelling(toBuild);
 		creatureUpgrade = BuildingID::getUpgradedFromDwelling(toBuild);
@@ -267,7 +267,7 @@ BuildingInfo BuildAnalyzer::getBuildingOrPrerequisite(
 
 			auto otherDwelling = [](const BuildingID & id) -> bool
 			{
-				return id.IsDwelling();
+				return id.isDwelling();
 			};
 
 			if(vstd::contains_if(missingBuildings, otherDwelling))
@@ -291,6 +291,7 @@ BuildingInfo BuildAnalyzer::getBuildingOrPrerequisite(
 				prerequisite.baseCreatureID = info.baseCreatureID;
 				prerequisite.prerequisitesCount++;
 				prerequisite.armyCost = info.armyCost;
+				prerequisite.armyStrength = info.armyStrength;
 				bool haveSameOrBetterFort = false;
 				if (prerequisite.id == BuildingID::FORT && highestFort >= CGTownInstance::EFortLevel::FORT)
 					haveSameOrBetterFort = true;
@@ -428,7 +429,7 @@ BuildingInfo::BuildingInfo(
 		}
 		else
 		{
-			if(id.IsDwelling())
+			if(id.isDwelling())
 			{
 				creatureGrows = creature->getGrowth();
 

+ 1 - 1
AI/Nullkiller/Analyzers/HeroManager.h

@@ -13,7 +13,7 @@
 #include "../AIUtility.h"
 
 #include "../../../lib/GameConstants.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 
 namespace NKAI
 {

+ 10 - 2
AI/Nullkiller/Analyzers/ObjectClusterizer.cpp

@@ -459,6 +459,8 @@ void ObjectClusterizer::clusterizeObject(
 			continue;
 		}
 
+		float priority = 0;
+
 		if(path.nodes.size() > 1)
 		{
 			auto blocker = getBlocker(path);
@@ -475,7 +477,10 @@ void ObjectClusterizer::clusterizeObject(
 
 				heroesProcessed.insert(path.targetHero);
 
-				float priority = priorityEvaluator->evaluate(Goals::sptr(Goals::ExecuteHeroChain(path, obj)), PriorityEvaluator::PriorityTier::HUNTER_GATHER);
+				for (int prio = PriorityEvaluator::PriorityTier::BUILDINGS; prio <= PriorityEvaluator::PriorityTier::MAX_PRIORITY_TIER; ++prio)
+				{
+					priority = std::max(priority, priorityEvaluator->evaluate(Goals::sptr(Goals::ExecuteHeroChain(path, obj)), prio));
+				}
 
 				if(ai->settings->isUseFuzzy() && priority < MIN_PRIORITY)
 					continue;
@@ -498,7 +503,10 @@ void ObjectClusterizer::clusterizeObject(
 
 		heroesProcessed.insert(path.targetHero);
 
-		float priority = priorityEvaluator->evaluate(Goals::sptr(Goals::ExecuteHeroChain(path, obj)), PriorityEvaluator::PriorityTier::HUNTER_GATHER);
+		for (int prio = PriorityEvaluator::PriorityTier::BUILDINGS; prio <= PriorityEvaluator::PriorityTier::MAX_PRIORITY_TIER; ++prio)
+		{
+			priority = std::max(priority, priorityEvaluator->evaluate(Goals::sptr(Goals::ExecuteHeroChain(path, obj)), prio));
+		}
 
 		if (ai->settings->isUseFuzzy() && priority < MIN_PRIORITY)
 			continue;

+ 1 - 1
AI/Nullkiller/Behaviors/BuildingBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../AIUtility.h"
 #include "../Goals/CGoal.h"
 

+ 2 - 1
AI/Nullkiller/Behaviors/BuyArmyBehavior.cpp

@@ -57,7 +57,8 @@ Goals::TGoalVec BuyArmyBehavior::decompose(const Nullkiller * ai) const
 				auto reinforcement = ai->armyManager->howManyReinforcementsCanGet(
 					targetHero,
 					targetHero,
-					&*townArmyAvailableToBuy);
+					&*townArmyAvailableToBuy,
+					TerrainId::NONE);
 
 				if(reinforcement)
 					vstd::amin(reinforcement, ai->armyManager->howManyReinforcementsCanBuy(town->getUpperArmy(), town));

+ 1 - 1
AI/Nullkiller/Behaviors/BuyArmyBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../AIUtility.h"
 #include "../Goals/CGoal.h"
 

+ 1 - 1
AI/Nullkiller/Behaviors/CaptureObjectsBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../AIUtility.h"
 #include "../Goals/CGoal.h"
 #include "../Pathfinding/AINodeStorage.h"

+ 1 - 1
AI/Nullkiller/Behaviors/ClusterBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 12 - 1
AI/Nullkiller/Behaviors/DefenceBehavior.cpp

@@ -214,11 +214,15 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta
 
 		std::vector<int> pathsToDefend;
 		std::map<const CGHeroInstance *, std::vector<int>> defferedPaths;
+		AIPath* closestWay = nullptr;
 
 		for(int i = 0; i < paths.size(); i++)
 		{
 			auto & path = paths[i];
 
+			if (!closestWay || path.movementCost() < closestWay->movementCost())
+				closestWay = &path;
+
 #if NKAI_TRACE_LEVEL >= 1
 			logAi->trace(
 				"Hero %s can defend town with force %lld in %s turns, cost: %f, path: %s",
@@ -382,7 +386,14 @@ void DefenceBehavior::evaluateDefence(Goals::TGoalVec & tasks, const CGTownInsta
 					town->getObjectName());
 #endif
 
-			sequence.push_back(sptr(ExecuteHeroChain(path, town)));
+			ExecuteHeroChain heroChain(path, town);
+				
+			if (closestWay)
+			{
+				heroChain.closestWayRatio = closestWay->movementCost() / heroChain.getPath().movementCost();
+			}
+
+			sequence.push_back(sptr(heroChain));
 			composition.addNextSequence(sequence);
 
 			auto firstBlockedAction = path.getFirstBlockedAction();

+ 1 - 1
AI/Nullkiller/Behaviors/DefenceBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 1 - 1
AI/Nullkiller/Behaviors/ExplorationBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 2 - 1
AI/Nullkiller/Behaviors/GatherArmyBehavior.cpp

@@ -300,7 +300,8 @@ Goals::TGoalVec GatherArmyBehavior::upgradeArmy(const Nullkiller * ai, const CGT
 				ai->armyManager->getBestArmy(
 					path.targetHero,
 					path.heroArmy,
-					upgrader->getUpperArmy()));
+					upgrader->getUpperArmy(),
+					TerrainId::NONE));
 
 			armyToGetOrBuy.upgradeValue -= path.heroArmy->getArmyStrength();
 

+ 1 - 1
AI/Nullkiller/Behaviors/GatherArmyBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 3 - 1
AI/Nullkiller/Behaviors/RecruitHeroBehavior.cpp

@@ -58,6 +58,7 @@ Goals::TGoalVec RecruitHeroBehavior::decompose(const Nullkiller * ai) const
 
 	ai->dangerHitMap->updateHitMap();
 	int treasureSourcesCount = 0;
+	int bestClosestThreat = UINT8_MAX;
 	
 	for(auto town : towns)
 	{
@@ -118,6 +119,7 @@ Goals::TGoalVec RecruitHeroBehavior::decompose(const Nullkiller * ai) const
 					bestScore = score;
 					bestHeroToHire = hero;
 					bestTownToHireFrom = town;
+					bestClosestThreat = closestThreat;
 				}
 			}
 		}
@@ -128,7 +130,7 @@ Goals::TGoalVec RecruitHeroBehavior::decompose(const Nullkiller * ai) const
 	{
 		if (ai->cb->getHeroesInfo().size() == 0
 			|| treasureSourcesCount > ai->cb->getHeroesInfo().size() * 5
-			|| bestHeroToHire->getArmyCost() > GameConstants::HERO_GOLD_COST / 2.0
+			|| (bestHeroToHire->getArmyCost() > GameConstants::HERO_GOLD_COST / 2.0 && (bestClosestThreat < 1 || !ai->buildAnalyzer->isGoldPressureHigh()))
 			|| (ai->getFreeResources()[EGameResID::GOLD] > 10000 && !ai->buildAnalyzer->isGoldPressureHigh() && haveCapitol)
 			|| (ai->getFreeResources()[EGameResID::GOLD] > 30000 && !ai->buildAnalyzer->isGoldPressureHigh()))
 		{

+ 1 - 1
AI/Nullkiller/Behaviors/RecruitHeroBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 1 - 1
AI/Nullkiller/Behaviors/StartupBehavior.cpp

@@ -149,7 +149,7 @@ Goals::TGoalVec StartupBehavior::decompose(const Nullkiller * ai) const
 	{
 		if(!startupTown->visitingHero)
 		{
-			if(ai->armyManager->howManyReinforcementsCanGet(startupTown->getUpperArmy(), startupTown->getUpperArmy(), closestHero) > 200)
+			if(ai->armyManager->howManyReinforcementsCanGet(startupTown->getUpperArmy(), startupTown->getUpperArmy(), closestHero, TerrainId::NONE) > 200)
 			{
 				auto paths = ai->pathfinder->getPathInfo(startupTown->visitablePos());
 

+ 1 - 1
AI/Nullkiller/Behaviors/StartupBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 1 - 1
AI/Nullkiller/Behaviors/StayAtTownBehavior.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "lib/VCMI_Lib.h"
+#include "lib/GameLibrary.h"
 #include "../Goals/CGoal.h"
 #include "../AIUtility.h"
 

+ 9 - 5
AI/Nullkiller/Engine/FuzzyEngines.cpp

@@ -131,17 +131,21 @@ TacticalAdvantageEngine::TacticalAdvantageEngine()
 		castleWalls = new fl::InputVariable("CastleWalls");
 		engine.addInputVariable(castleWalls);
 		{
-			fl::Rectangle * none = new fl::Rectangle("NONE", CGTownInstance::NONE, CGTownInstance::NONE + (CGTownInstance::FORT - CGTownInstance::NONE) * 0.5f);
+			int wallsNone = CGTownInstance::NONE;
+			int wallsFort = CGTownInstance::FORT;
+			int wallsCitadel = CGTownInstance::CITADEL;
+			int wallsCastle = CGTownInstance::CASTLE;
+
+			fl::Rectangle * none = new fl::Rectangle("NONE", wallsNone, wallsNone + (wallsFort - wallsNone) * 0.5f);
 			castleWalls->addTerm(none);
 
-			fl::Trapezoid * medium = new fl::Trapezoid("MEDIUM", (CGTownInstance::FORT - CGTownInstance::NONE) * 0.5f, CGTownInstance::FORT,
-				CGTownInstance::CITADEL, CGTownInstance::CITADEL + (CGTownInstance::CASTLE - CGTownInstance::CITADEL) * 0.5f);
+			fl::Trapezoid * medium = new fl::Trapezoid("MEDIUM", (wallsFort - wallsNone) * 0.5f, wallsFort, wallsCitadel, wallsCitadel + (wallsCastle - wallsCitadel) * 0.5f);
 			castleWalls->addTerm(medium);
 
-			fl::Ramp * high = new fl::Ramp("HIGH", CGTownInstance::CITADEL - 0.1, CGTownInstance::CASTLE);
+			fl::Ramp * high = new fl::Ramp("HIGH", wallsCitadel - 0.1, wallsCastle);
 			castleWalls->addTerm(high);
 
-			castleWalls->setRange(CGTownInstance::NONE, CGTownInstance::CASTLE);
+			castleWalls->setRange(wallsNone, wallsCastle);
 		}
 
 

+ 2 - 2
AI/Nullkiller/Engine/FuzzyHelper.cpp

@@ -127,9 +127,9 @@ ui64 FuzzyHelper::evaluateDanger(const CGObjectInstance * obj)
 			auto fortLevel = town->fortLevel();
 
 			if (fortLevel == CGTownInstance::EFortLevel::CASTLE)
-				danger = std::max(danger * 2, danger + 10000);
+				danger += 10000;
 			else if(fortLevel == CGTownInstance::EFortLevel::CITADEL)
-				danger = std::max(ui64(danger * 1.4), danger + 4000);
+				danger += 4000;
 		}
 
 		return danger;

+ 7 - 4
AI/Nullkiller/Engine/Nullkiller.cpp

@@ -374,7 +374,7 @@ HeroLockedReason Nullkiller::getHeroLockedReason(const CGHeroInstance * hero) co
 
 void Nullkiller::makeTurn()
 {
-	boost::lock_guard<boost::mutex> sharedStorageLock(AISharedStorage::locker);
+	std::lock_guard<std::mutex> sharedStorageLock(AISharedStorage::locker);
 
 	const int MAX_DEPTH = 10;
 
@@ -446,7 +446,7 @@ void Nullkiller::makeTurn()
 #if NKAI_TRACE_LEVEL >= 1
 		int prioOfTask = 0;
 #endif
-		for (int prio = PriorityEvaluator::PriorityTier::INSTAKILL; prio <= PriorityEvaluator::PriorityTier::DEFEND; ++prio)
+		for (int prio = PriorityEvaluator::PriorityTier::INSTAKILL; prio <= PriorityEvaluator::PriorityTier::MAX_PRIORITY_TIER; ++prio)
 		{
 #if NKAI_TRACE_LEVEL >= 1
 			prioOfTask = prio;
@@ -535,7 +535,10 @@ void Nullkiller::makeTurn()
 				else
 					return;
 			}
-			hasAnySuccess = true;
+			else
+			{
+				hasAnySuccess = true;
+			}
 		}
 
 		hasAnySuccess |= handleTrading();
@@ -721,7 +724,7 @@ bool Nullkiller::handleTrading()
 				if (toGive && toGive <= available[mostExpendable]) //don't try to sell 0 resources
 				{
 					cb->trade(m->getObjInstanceID(), EMarketMode::RESOURCE_RESOURCE, GameResID(mostExpendable), GameResID(mostWanted), toGive);
-#if NKAI_TRACE_LEVEL >= 1
+#if NKAI_TRACE_LEVEL >= 2
 					logAi->info("Traded %d of %s for %d of %s at %s", toGive, mostExpendable, toGet, mostWanted, obj->getObjectName());
 #endif
 					haveTraded = true;

+ 149 - 47
AI/Nullkiller/Engine/PriorityEvaluator.cpp

@@ -18,7 +18,7 @@
 #include "../../../lib/mapping/CMapDefines.h"
 #include "../../../lib/RoadHandler.h"
 #include "../../../lib/CCreatureHandler.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../../../lib/StartInfo.h"
 #include "../../../CCallback.h"
 #include "../../../lib/filesystem/Filesystem.h"
@@ -66,7 +66,8 @@ EvaluationContext::EvaluationContext(const Nullkiller* ai)
 	isArmyUpgrade(false),
 	isHero(false),
 	isEnemy(false),
-	explorePriority(0)
+	explorePriority(0),
+	powerRatio(0)
 {
 }
 
@@ -308,7 +309,7 @@ uint64_t RewardEvaluator::getArmyReward(
 			{
 				for(auto artID : info.reward.artifacts)
 				{
-					const auto * art = dynamic_cast<const CArtifact *>(VLC->artifacts()->getById(artID));
+					const auto * art = dynamic_cast<const CArtifact *>(LIBRARY->artifacts()->getById(artID));
 
 					rewardValue += evaluateArtifactArmyValue(art);
 				}
@@ -609,9 +610,6 @@ float RewardEvaluator::getConquestValue(const CGObjectInstance* target) const
 			? getEnemyHeroStrategicalValue(dynamic_cast<const CGHeroInstance*>(target))
 			: 0;
 
-	case Obj::KEYMASTER:
-		return 0.6f;
-
 	default:
 		return 0;
 	}
@@ -696,7 +694,7 @@ float RewardEvaluator::getSkillReward(const CGObjectInstance * target, const CGH
 			{
 				for(auto spellID : info.reward.spells)
 				{
-					const spells::Spell * spell = VLC->spells()->getById(spellID);
+					const spells::Spell * spell = LIBRARY->spells()->getById(spellID);
 						
 					if(hero->canLearnSpell(spell) && !hero->spellbookContainsSpell(spellID))
 					{
@@ -889,8 +887,15 @@ public:
 
 		Goals::StayAtTown& stayAtTown = dynamic_cast<Goals::StayAtTown&>(*task);
 
-		evaluationContext.armyReward += evaluationContext.evaluator.getManaRecoveryArmyReward(stayAtTown.getHero());
-		if (evaluationContext.armyReward == 0)
+		if (stayAtTown.getHero() != nullptr && stayAtTown.getHero()->movementPointsRemaining() < 100)
+		{
+			return;
+		}
+
+		if(stayAtTown.town->mageGuildLevel() > 0)
+			evaluationContext.armyReward += evaluationContext.evaluator.getManaRecoveryArmyReward(stayAtTown.getHero());
+
+		if (vstd::isAlmostZero(evaluationContext.armyReward))
 			evaluationContext.isDefend = true;
 		else
 		{
@@ -1018,6 +1023,42 @@ public:
 		if(heroRole == HeroRole::MAIN)
 			evaluationContext.heroRole = heroRole;
 
+		// Assuming Slots() returns a collection of slots with slot.second->getCreatureID() and slot.second->getPower()
+		float heroPower = 0;
+		float totalPower = 0;
+
+		// Map to store the aggregated power of creatures by CreatureID
+		std::map<int, float> totalPowerByCreatureID;
+
+		// Calculate hero power and total power by CreatureID
+		for (auto slot : hero->Slots())
+		{
+			int creatureID = slot.second->getCreatureID();
+			float slotPower = slot.second->getPower();
+
+			// Add the power of this slot to the heroPower
+			heroPower += slotPower;
+
+			// Accumulate the total power for the specific CreatureID
+			if (totalPowerByCreatureID.find(creatureID) == totalPowerByCreatureID.end())
+			{
+				// First time encountering this CreatureID, retrieve total creatures' power
+				totalPowerByCreatureID[creatureID] = ai->armyManager->getTotalCreaturesAvailable(creatureID).power;
+			}
+		}
+
+		// Calculate total power based on unique CreatureIDs
+		for (const auto& entry : totalPowerByCreatureID)
+		{
+			totalPower += entry.second;
+		}
+
+		// Compute the power ratio if total power is greater than zero
+		if (totalPower > 0)
+		{
+			evaluationContext.powerRatio = heroPower / totalPower;
+		}
+
 		if (target)
 		{
 			evaluationContext.goldReward += evaluationContext.evaluator.getGoldReward(target, hero);
@@ -1030,6 +1071,8 @@ public:
 				evaluationContext.isHero = true;
 			if (target->getOwner().isValidPlayer() && ai->cb->getPlayerRelations(ai->playerID, target->getOwner()) == PlayerRelations::ENEMIES)
 				evaluationContext.isEnemy = true;
+			if (target->ID == Obj::TOWN)
+				evaluationContext.defenseValue = dynamic_cast<const CGTownInstance*>(target)->fortLevel();
 			evaluationContext.goldCost += evaluationContext.evaluator.getGoldCost(target, hero, army);
 			if(evaluationContext.danger > 0)
 				evaluationContext.skillReward += (float)evaluationContext.danger / (float)hero->getArmyStrength();
@@ -1169,6 +1212,19 @@ public:
 		evaluationContext.goldCost += cost;
 		evaluationContext.closestWayRatio = 1;
 		evaluationContext.buildingCost += bi.buildCostWithPrerequisites;
+
+		bool alreadyOwn = false;
+		int highestMageGuildPossible = BuildingID::MAGES_GUILD_3;
+		for (auto town : evaluationContext.evaluator.ai->cb->getTownsInfo())
+		{
+			if (town->hasBuilt(bi.id))
+				alreadyOwn = true;
+			if (evaluationContext.evaluator.ai->cb->canBuildStructure(town, BuildingID::MAGES_GUILD_5) != EBuildingState::FORBIDDEN)
+				highestMageGuildPossible = BuildingID::MAGES_GUILD_5;
+			else if (evaluationContext.evaluator.ai->cb->canBuildStructure(town, BuildingID::MAGES_GUILD_4) != EBuildingState::FORBIDDEN)
+				highestMageGuildPossible = BuildingID::MAGES_GUILD_4;
+		}
+
 		if (bi.id == BuildingID::MARKETPLACE || bi.dailyIncome[EGameResID::WOOD] > 0)
 			evaluationContext.isTradeBuilding = true;
 
@@ -1183,14 +1239,19 @@ public:
 			if(bi.baseCreatureID == bi.creatureID)
 			{
 				evaluationContext.addNonCriticalStrategicalValue((0.5f + 0.1f * bi.creatureLevel) / (float)bi.prerequisitesCount);
-				evaluationContext.armyReward += bi.armyStrength;
+				evaluationContext.armyReward += bi.armyStrength * 1.5;
 			}
 			else
 			{
 				auto potentialUpgradeValue = evaluationContext.evaluator.getUpgradeArmyReward(buildThis.town, bi);
 				
 				evaluationContext.addNonCriticalStrategicalValue(potentialUpgradeValue / 10000.0f / (float)bi.prerequisitesCount);
-				evaluationContext.armyReward += potentialUpgradeValue / (float)bi.prerequisitesCount;
+				if(bi.id.isDwelling())
+					evaluationContext.armyReward += bi.armyStrength - evaluationContext.evaluator.ai->armyManager->evaluateStackPower(bi.baseCreatureID.toCreature(), bi.creatureGrows);
+				else //This is for prerequisite-buildings
+					evaluationContext.armyReward += evaluationContext.evaluator.ai->armyManager->evaluateStackPower(bi.baseCreatureID.toCreature(), bi.creatureGrows);
+				if(alreadyOwn)
+					evaluationContext.armyReward /= bi.buildCostWithPrerequisites.marketValue();
 			}
 		}
 		else if(bi.id == BuildingID::CITADEL || bi.id == BuildingID::CASTLE)
@@ -1201,9 +1262,14 @@ public:
 		else if(bi.id >= BuildingID::MAGES_GUILD_1 && bi.id <= BuildingID::MAGES_GUILD_5)
 		{
 			evaluationContext.skillReward += 2 * (bi.id - BuildingID::MAGES_GUILD_1);
-			for (auto hero : evaluationContext.evaluator.ai->cb->getHeroesInfo())
+			if (!alreadyOwn && evaluationContext.evaluator.ai->cb->canBuildStructure(buildThis.town, highestMageGuildPossible) != EBuildingState::FORBIDDEN)
 			{
-				evaluationContext.armyInvolvement += hero->getArmyCost();
+				for (auto hero : evaluationContext.evaluator.ai->cb->getHeroesInfo())
+				{
+					if(hero->getPrimSkillLevel(PrimarySkill::SPELL_POWER) + hero->getPrimSkillLevel(PrimarySkill::KNOWLEDGE) > hero->getPrimSkillLevel(PrimarySkill::ATTACK) + hero->getPrimSkillLevel(PrimarySkill::DEFENSE)
+						&& hero->manaLimit() > 30)
+						evaluationContext.armyReward += hero->getArmyCost();
+				}
 			}
 		}
 		int sameTownBonus = 0;
@@ -1333,18 +1399,35 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 	else
 	{
 		float score = 0;
-		const bool amIInDanger = ai->cb->getTownsInfo().empty() || (evaluationContext.isDefend && evaluationContext.threatTurns == 0);
-		const float maxWillingToLose = amIInDanger ? 1 : ai->settings->getMaxArmyLossTarget();
+		bool currentPositionThreatened = false;
+		if (task->hero)
+		{
+			auto currentTileThreat = ai->dangerHitMap->getTileThreat(task->hero->visitablePos());
+			if (currentTileThreat.fastestDanger.turn < 1 && currentTileThreat.fastestDanger.danger > task->hero->getTotalStrength())
+				currentPositionThreatened = true;
+		}
+		if (priorityTier == PriorityTier::FAR_HUNTER_GATHER && currentPositionThreatened == false)
+		{
+#if NKAI_TRACE_LEVEL >= 2
+			logAi->trace("Skip FAR_HUNTER_GATHER because hero is not threatened.");
+#endif
+			return 0;
+		}
+		const bool amIInDanger = ai->cb->getTownsInfo().empty();
+		const float maxWillingToLose = amIInDanger ? 1 : ai->settings->getMaxArmyLossTarget() * evaluationContext.powerRatio > 0 ? ai->settings->getMaxArmyLossTarget() * evaluationContext.powerRatio : 1.0;
+		float dangerThreshold = 1;
+		dangerThreshold *= evaluationContext.powerRatio > 0 ? evaluationContext.powerRatio : 1.0;
 
 		bool arriveNextWeek = false;
 		if (ai->cb->getDate(Date::DAY_OF_WEEK) + evaluationContext.turn > 7 && priorityTier < PriorityTier::FAR_KILL)
 			arriveNextWeek = true;
 
 #if NKAI_TRACE_LEVEL >= 2
-		logAi->trace("BEFORE: priorityTier %d, Evaluated %s, loss: %f, turn: %d, turns main: %f, scout: %f, army-involvement: %f, gold: %f, cost: %d, army gain: %f, army growth: %f skill: %f danger: %d, threatTurns: %d, threat: %d, role: %s, strategical value: %f, conquest value: %f cwr: %f, fear: %f, explorePriority: %d isDefend: %d isEnemy: %d arriveNextWeek: %d",
+		logAi->trace("BEFORE: priorityTier %d, Evaluated %s, loss: %f, maxWillingToLose: %f, turn: %d, turns main: %f, scout: %f, army-involvement: %f, gold: %f, cost: %d, army gain: %f, army growth: %f skill: %f danger: %d, threatTurns: %d, threat: %d, role: %s, strategical value: %f, conquest value: %f cwr: %f, fear: %f, dangerThreshold: %f explorePriority: %d isDefend: %d isEnemy: %d arriveNextWeek: %d powerRatio: %f",
 			priorityTier,
 			task->toString(),
 			evaluationContext.armyLossPersentage,
+			maxWillingToLose,
 			(int)evaluationContext.turn,
 			evaluationContext.movementCostByRole[HeroRole::MAIN],
 			evaluationContext.movementCostByRole[HeroRole::SCOUT],
@@ -1362,23 +1445,27 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 			evaluationContext.conquestValue,
 			evaluationContext.closestWayRatio,
 			evaluationContext.enemyHeroDangerRatio,
+			dangerThreshold,
 			evaluationContext.explorePriority,
 			evaluationContext.isDefend,
 			evaluationContext.isEnemy,
-			arriveNextWeek);
+			arriveNextWeek,
+			evaluationContext.powerRatio);
 #endif
 
 		switch (priorityTier)
 		{
 			case PriorityTier::INSTAKILL: //Take towns / kill heroes in immediate reach
 			{
-				if (evaluationContext.turn > 0)
+				if (evaluationContext.turn > 0 || evaluationContext.isExchange)
 					return 0;
 				if (evaluationContext.movementCost >= 1)
 					return 0;
+				if (evaluationContext.defenseValue < 2 && evaluationContext.enemyHeroDangerRatio > dangerThreshold)
+					return 0;
 				if(evaluationContext.conquestValue > 0)
 					score = evaluationContext.armyInvolvement;
-				if (vstd::isAlmostZero(score) || (evaluationContext.enemyHeroDangerRatio > 1 && (evaluationContext.turn > 0 || evaluationContext.isExchange) && !ai->cb->getTownsInfo().empty()))
+				if (vstd::isAlmostZero(score) || (evaluationContext.enemyHeroDangerRatio > dangerThreshold && (evaluationContext.turn > 0 || evaluationContext.isExchange) && !ai->cb->getTownsInfo().empty()))
 					return 0;
 				if (maxWillingToLose - evaluationContext.armyLossPersentage < 0)
 					return 0;
@@ -1388,23 +1475,47 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 			}
 			case PriorityTier::INSTADEFEND: //Defend immediately threatened towns
 			{
-				if (evaluationContext.isDefend && evaluationContext.threatTurns == 0 && evaluationContext.turn == 0)
-					score = evaluationContext.armyInvolvement;
-				if (evaluationContext.isEnemy && maxWillingToLose - evaluationContext.armyLossPersentage < 0)
+				//No point defending if we don't have defensive-structures
+				if (evaluationContext.defenseValue < 2)
+					return 0;
+				if (maxWillingToLose - evaluationContext.armyLossPersentage < 0)
 					return 0;
+				if (evaluationContext.closestWayRatio < 1.0)
+					return 0;
+				if (evaluationContext.isEnemy && evaluationContext.turn > 0)
+					return 0;
+				if (evaluationContext.isDefend && evaluationContext.threatTurns <= evaluationContext.turn)
+				{
+					const float OPTIMAL_PERCENTAGE = 0.75f; // We want army to be 75% of the threat
+					float optimalStrength = evaluationContext.threat * OPTIMAL_PERCENTAGE;
+
+					// Calculate how far the army is from optimal strength
+					float deviation = std::abs(evaluationContext.armyInvolvement - optimalStrength);
+
+					// Convert deviation to a percentage of the threat to normalize it
+					float deviationPercentage = deviation / evaluationContext.threat;
+
+					// Calculate score: 1.0 is perfect, decreasing as deviation increases
+					score = 1.0f / (1.0f + deviationPercentage);
+
+					// Apply turn penalty to still prefer earlier moves when scores are close
+					score = score / (evaluationContext.turn + 1);
+				}
 				break;
 			}
 			case PriorityTier::KILL: //Take towns / kill heroes that are further away
 				//FALL_THROUGH
 			case PriorityTier::FAR_KILL:
 			{
+				if (evaluationContext.defenseValue < 2 && evaluationContext.enemyHeroDangerRatio > dangerThreshold)
+					return 0;
 				if (evaluationContext.turn > 0 && evaluationContext.isHero)
 					return 0;
 				if (arriveNextWeek && evaluationContext.isEnemy)
 					return 0;
 				if (evaluationContext.conquestValue > 0)
 					score = evaluationContext.armyInvolvement;
-				if (vstd::isAlmostZero(score) || (evaluationContext.enemyHeroDangerRatio > 1 && (evaluationContext.turn > 0 || evaluationContext.isExchange) && !ai->cb->getTownsInfo().empty()))
+				if (vstd::isAlmostZero(score) || (evaluationContext.enemyHeroDangerRatio > dangerThreshold && (evaluationContext.turn > 0 || evaluationContext.isExchange) && !ai->cb->getTownsInfo().empty()))
 					return 0;
 				if (maxWillingToLose - evaluationContext.armyLossPersentage < 0)
 					return 0;
@@ -1413,24 +1524,9 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 					score /= evaluationContext.movementCost;
 				break;
 			}
-			case PriorityTier::UPGRADE:
-			{
-				if (!evaluationContext.isArmyUpgrade)
-					return 0;
-				if (evaluationContext.enemyHeroDangerRatio > 1)
-					return 0;
-				if (maxWillingToLose - evaluationContext.armyLossPersentage < 0)
-					return 0;
-				if (vstd::isAlmostZero(evaluationContext.armyLossPersentage) && evaluationContext.closestWayRatio < 1.0)
-					return 0;
-				score = 1000;
-				if (evaluationContext.movementCost > 0)
-					score /= evaluationContext.movementCost;
-				break;
-			}
 			case PriorityTier::HIGH_PRIO_EXPLORE:
 			{
-				if (evaluationContext.enemyHeroDangerRatio > 1)
+				if (evaluationContext.enemyHeroDangerRatio > dangerThreshold)
 					return 0;
 				if (evaluationContext.explorePriority != 1)
 					return 0;
@@ -1447,17 +1543,15 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 				//FALL_THROUGH
 			case PriorityTier::FAR_HUNTER_GATHER:
 			{
-				if (evaluationContext.enemyHeroDangerRatio > 1 && !evaluationContext.isDefend)
+				if (evaluationContext.enemyHeroDangerRatio > dangerThreshold && !evaluationContext.isDefend && priorityTier != PriorityTier::FAR_HUNTER_GATHER)
 					return 0;
 				if (evaluationContext.buildingCost.marketValue() > 0)
 					return 0;
-				if (evaluationContext.isDefend && (evaluationContext.enemyHeroDangerRatio < 1 || evaluationContext.threatTurns > 0 || evaluationContext.turn > 0))
+				if (priorityTier != PriorityTier::FAR_HUNTER_GATHER && evaluationContext.isDefend && (evaluationContext.enemyHeroDangerRatio > dangerThreshold || evaluationContext.threatTurns > 0 || evaluationContext.turn > 0))
 					return 0;
 				if (evaluationContext.explorePriority == 3)
 					return 0;
-				if (evaluationContext.isArmyUpgrade)
-					return 0;
-				if ((evaluationContext.enemyHeroDangerRatio > 0 && arriveNextWeek) || evaluationContext.enemyHeroDangerRatio > 1)
+				if (priorityTier != PriorityTier::FAR_HUNTER_GATHER && ((evaluationContext.enemyHeroDangerRatio > 0 && arriveNextWeek) || evaluationContext.enemyHeroDangerRatio > dangerThreshold))
 					return 0;
 				if (maxWillingToLose - evaluationContext.armyLossPersentage < 0)
 					return 0;
@@ -1475,12 +1569,14 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 					score = 1000;
 					if (evaluationContext.movementCost > 0)
 						score /= evaluationContext.movementCost;
+					if(priorityTier == PriorityTier::FAR_HUNTER_GATHER && evaluationContext.enemyHeroDangerRatio > 0)
+						score /= evaluationContext.enemyHeroDangerRatio;
 				}
 				break;
 			}
 			case PriorityTier::LOW_PRIO_EXPLORE:
 			{
-				if (evaluationContext.enemyHeroDangerRatio > 1)
+				if (evaluationContext.enemyHeroDangerRatio > dangerThreshold)
 					return 0;
 				if (evaluationContext.explorePriority != 3)
 					return 0;
@@ -1495,7 +1591,7 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 			}
 			case PriorityTier::DEFEND: //Defend whatever if nothing else is to do
 			{
-				if (evaluationContext.enemyHeroDangerRatio > 1 && evaluationContext.isExchange)
+				if (evaluationContext.enemyHeroDangerRatio > dangerThreshold)
 					return 0;
 				if (evaluationContext.isDefend || evaluationContext.isArmyUpgrade)
 					score = evaluationContext.armyInvolvement;
@@ -1536,9 +1632,15 @@ float PriorityEvaluator::evaluate(Goals::TSubgoal task, int priorityTier)
 						TResources needed = evaluationContext.buildingCost - resourcesAvailable;
 						needed.positive();
 						int turnsTo = needed.maxPurchasableCount(income);
+						bool haveEverythingButGold = true;
+						for (int i = 0; i < GameConstants::RESOURCE_QUANTITY; i++)
+						{
+							if (i != GameResID::GOLD && resourcesAvailable[i] < evaluationContext.buildingCost[i])
+								haveEverythingButGold = false;
+						}
 						if (turnsTo == INT_MAX)
 							return 0;
-						else
+						if (!haveEverythingButGold)
 							score /= turnsTo;
 					}
 				}

+ 3 - 2
AI/Nullkiller/Engine/PriorityEvaluator.h

@@ -84,6 +84,7 @@ struct DLL_EXPORT EvaluationContext
 	bool isHero;
 	bool isEnemy;
 	int explorePriority;
+	float powerRatio;
 
 	EvaluationContext(const Nullkiller * ai);
 
@@ -114,13 +115,13 @@ public:
 		INSTAKILL,
 		INSTADEFEND,
 		KILL,
-		UPGRADE,
 		HIGH_PRIO_EXPLORE,
 		HUNTER_GATHER,
 		LOW_PRIO_EXPLORE,
 		FAR_KILL,
+		DEFEND,
 		FAR_HUNTER_GATHER,
-		DEFEND
+		MAX_PRIORITY_TIER = FAR_HUNTER_GATHER
 	};
 
 private:

+ 1 - 1
AI/Nullkiller/Engine/Settings.cpp

@@ -18,7 +18,7 @@
 #include "../../../lib/mapObjectConstructors/CBankInstanceConstructor.h"
 #include "../../../lib/mapObjects/MapObjects.h"
 #include "../../../lib/modding/CModHandler.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../../../lib/filesystem/Filesystem.h"
 #include "../../../lib/json/JsonUtils.h"
 

+ 1 - 1
AI/Nullkiller/Goals/AbstractGoal.cpp

@@ -55,7 +55,7 @@ std::string AbstractGoal::toString() const
 		desc = "GATHER TROOPS";
 		break;
 	case GET_ART_TYPE:
-		desc = "GET ARTIFACT OF TYPE " + VLC->artifacts()->getByIndex(aid)->getNameTranslated();
+		desc = "GET ARTIFACT OF TYPE " + LIBRARY->artifacts()->getByIndex(aid)->getNameTranslated();
 		break;
 	case DIG_AT_TILE:
 		desc = "DIG AT TILE " + tile.toString();

+ 1 - 1
AI/Nullkiller/Goals/AbstractGoal.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../../../lib/mapObjects/CGTownInstance.h"
 #include "../../../lib/mapObjects/CGHeroInstance.h"
 #include "../AIUtility.h"

+ 2 - 2
AI/Nullkiller/Goals/CompleteQuest.cpp

@@ -11,7 +11,7 @@
 #include "CompleteQuest.h"
 #include "../Behaviors/CaptureObjectsBehavior.h"
 #include "../AIGateway.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../../../lib/texts/CGeneralTextHandler.h"
 
 namespace NKAI
@@ -91,7 +91,7 @@ std::string CompleteQuest::questToString() const
 {
 	if(isKeyMaster(q))
 	{
-		return "find " + VLC->generaltexth->tentColors[q.obj->subID] + " keymaster tent";
+		return "find " + LIBRARY->generaltexth->tentColors[q.obj->subID] + " keymaster tent";
 	}
 
 	if(q.quest->questName == CQuest::missionName(EQuestMission::NONE))

+ 1 - 1
AI/Nullkiller/Helpers/ArmyFormation.h

@@ -12,7 +12,7 @@
 #include "../AIUtility.h"
 
 #include "../../../lib/GameConstants.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 
 namespace NKAI
 {

+ 1 - 1
AI/Nullkiller/Helpers/ExplorationHelper.h

@@ -12,7 +12,7 @@
 #include "../AIUtility.h"
 
 #include "../../../lib/GameConstants.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../Goals/AbstractGoal.h"
 
 namespace NKAI

+ 28 - 28
AI/Nullkiller/Pathfinding/AINodeStorage.cpp

@@ -20,6 +20,7 @@
 #include "../../../lib/pathfinder/CPathfinder.h"
 #include "../../../lib/pathfinder/PathfinderUtil.h"
 #include "../../../lib/pathfinder/PathfinderOptions.h"
+#include "../../../lib/IGameSettings.h"
 #include "../../../lib/CPlayerState.h"
 
 namespace NKAI
@@ -27,7 +28,7 @@ namespace NKAI
 
 std::shared_ptr<boost::multi_array<AIPathNode, 4>> AISharedStorage::shared;
 uint32_t AISharedStorage::version = 0;
-boost::mutex AISharedStorage::locker;
+std::mutex AISharedStorage::locker;
 std::set<int3> committedTiles;
 std::set<int3> committedTilesInitial;
 
@@ -582,42 +583,28 @@ public:
 
 bool AINodeStorage::calculateHeroChain()
 {
-	std::random_device randomDevice;
-	std::mt19937 randomEngine(randomDevice());
-
 	heroChainPass = EHeroChainPass::CHAIN;
 	heroChain.clear();
 
 	std::vector<int3> data(committedTiles.begin(), committedTiles.end());
 
-	if(data.size() > 100)
-	{
-		boost::mutex resultMutex;
-
-		std::shuffle(data.begin(), data.end(), randomEngine);
-
-		tbb::parallel_for(tbb::blocked_range<size_t>(0, data.size()), [&](const tbb::blocked_range<size_t>& r)
-		{
-			//auto r = blocked_range<size_t>(0, data.size());
-			HeroChainCalculationTask task(*this, data, chainMask, heroChainTurn);
-
-			task.execute(r);
+	int maxConcurrency = tbb::this_task_arena::max_concurrency();
+	std::vector<std::vector<CGPathNode *>> results(maxConcurrency);
 
-			{
-				boost::lock_guard<boost::mutex> resultLock(resultMutex);
+	logAi->trace("Caculating hero chain for %d items", data.size());
 
-				task.flushResult(heroChain);
-			}
-		});
-	}
-	else
+	tbb::parallel_for(tbb::blocked_range<size_t>(0, data.size()), [&](const tbb::blocked_range<size_t>& r)
 	{
-		auto r = tbb::blocked_range<size_t>(0, data.size());
 		HeroChainCalculationTask task(*this, data, chainMask, heroChainTurn);
 
+		int ourThread = tbb::this_task_arena::current_thread_index();
 		task.execute(r);
-		task.flushResult(heroChain);
-	}
+		task.flushResult(results.at(ourThread));
+	});
+
+	// FIXME: potentially non-deterministic behavior due to parallel_for
+	for (const auto & result : results)
+		vstd::concatenate(heroChain, result);
 
 	committedTiles.clear();
 
@@ -1097,7 +1084,9 @@ struct TownPortalFinder
 
 		// TODO: Copy/Paste from TownPortalMechanics
 		townPortalSkillLevel = MasteryLevel::Type(hero->getSpellSchoolLevel(townPortal));
-		movementNeeded = GameConstants::BASE_MOVEMENT_COST * (townPortalSkillLevel >= MasteryLevel::EXPERT ? 2 : 3);
+
+		int baseCost = hero->cb->getSettings().getInteger(EGameSettings::HEROES_MOVEMENT_COST_BASE);
+		movementNeeded = baseCost * (townPortalSkillLevel >= MasteryLevel::EXPERT ? 2 : 3);
 	}
 
 	bool actorCanCastTownPortal()
@@ -1461,9 +1450,20 @@ void AINodeStorage::calculateChainInfo(std::vector<AIPath> & paths, const int3 &
 			}
 		}
 
+		int fortLevel = 0;
+		auto visitableObjects = cb->getVisitableObjs(pos);
+		for (auto obj : visitableObjects)
+		{
+			if (objWithID<Obj::TOWN>(obj))
+			{
+				auto town = dynamic_cast<const CGTownInstance*>(obj);
+				fortLevel = town->fortLevel();
+			}
+		}
+
 		path.targetObjectArmyLoss = evaluateArmyLoss(
 			path.targetHero,
-			getHeroArmyStrengthWithCommander(path.targetHero, path.heroArmy),
+			getHeroArmyStrengthWithCommander(path.targetHero, path.heroArmy, fortLevel),
 			path.targetObjectDanger);
 
 		path.chainMask = node.actor->chainMask;

+ 5 - 5
AI/Nullkiller/Pathfinding/AINodeStorage.h

@@ -41,8 +41,8 @@ struct AIPathNode : public CGPathNode
 {
 	std::shared_ptr<const SpecialAction> specialAction;
 
-	const AIPathNode * chainOther;
-	const ChainActor * actor;
+	const AIPathNode * chainOther = nullptr;
+	const ChainActor * actor = nullptr;
 
 	uint64_t danger;
 	uint64_t armyLoss;
@@ -129,8 +129,8 @@ struct AIPath
 
 struct ExchangeCandidate : public AIPathNode
 {
-	AIPathNode * carrierParent;
-	AIPathNode * otherParent;
+	AIPathNode * carrierParent = nullptr;
+	AIPathNode * otherParent = nullptr;
 };
 
 enum EHeroChainPass
@@ -149,7 +149,7 @@ class AISharedStorage
 	static std::shared_ptr<boost::multi_array<AIPathNode, 4>> shared;
 	std::shared_ptr<boost::multi_array<AIPathNode, 4>> nodes;
 public:
-	static boost::mutex locker;
+	static std::mutex locker;
 	static uint32_t version;
 
 	AISharedStorage(int3 sizes, int numChains);

+ 2 - 2
AI/Nullkiller/Pathfinding/AIPathfinderConfig.cpp

@@ -50,8 +50,8 @@ namespace AIPathfinding
 		options.allowLayerTransitioningAfterBattle = true;
 		options.useTeleportWhirlpool = true;
 		options.forceUseTeleportWhirlpool = true;
-		options.useTeleportOneWay = ai->settings->isOneWayMonolithUsageAllowed();;
-		options.useTeleportOneWayRandom = ai->settings->isOneWayMonolithUsageAllowed();;
+		options.useTeleportOneWay = ai->settings->isOneWayMonolithUsageAllowed();
+		options.useTeleportOneWayRandom = ai->settings->isOneWayMonolithUsageAllowed();
 	}
 
 	AIPathfinderConfig::~AIPathfinderConfig() = default;

+ 4 - 3
AI/Nullkiller/Pathfinding/Actors.cpp

@@ -13,6 +13,7 @@
 #include "../Engine/Nullkiller.h"
 #include "../../../CCallback.h"
 #include "../../../lib/mapObjects/MapObjects.h"
+#include "../../../lib/mapping/CMapDefines.h"
 #include "../../../lib/pathfinder/TurnInfo.h"
 #include "Actions/BuyArmyAction.h"
 
@@ -215,7 +216,7 @@ ExchangeResult HeroExchangeMap::tryExchangeNoLock(const ChainActor * other)
 	ExchangeResult result;
 
 	{
-		boost::shared_lock lock(sync, boost::try_to_lock);
+		std::shared_lock lock(sync, std::try_to_lock);
 
 		if(!lock.owns_lock())
 		{
@@ -235,7 +236,7 @@ ExchangeResult HeroExchangeMap::tryExchangeNoLock(const ChainActor * other)
 	}
 
 	{
-		boost::unique_lock uniqueLock(sync, boost::try_to_lock);
+		std::unique_lock uniqueLock(sync, std::try_to_lock);
 
 		if(!uniqueLock.owns_lock())
 		{
@@ -394,7 +395,7 @@ HeroExchangeArmy * HeroExchangeMap::tryUpgrade(
 HeroExchangeArmy * HeroExchangeMap::pickBestCreatures(const CCreatureSet * army1, const CCreatureSet * army2) const
 {
 	auto * target = new HeroExchangeArmy();
-	auto bestArmy = ai->armyManager->getBestArmy(actor->hero, army1, army2);
+	auto bestArmy = ai->armyManager->getBestArmy(actor->hero, army1, army2, ai->cb->getTile(actor->hero->visitablePos())->getTerrainID());
 
 	for(auto & slotInfo : bestArmy)
 	{

+ 1 - 1
AI/Nullkiller/Pathfinding/Actors.h

@@ -93,7 +93,7 @@ private:
 	const HeroActor * actor;
 	std::map<const ChainActor *, HeroActor *> exchangeMap;
 	const Nullkiller * ai;
-	boost::shared_mutex sync;
+	std::shared_mutex sync;
 
 public:
 	HeroExchangeMap(const HeroActor * actor, const Nullkiller * ai);

+ 1 - 1
AI/VCAI/AIUtility.cpp

@@ -224,7 +224,7 @@ creInfo infoFromDC(const dwellingContent & dc)
 	ci.creID = dc.second.size() ? dc.second.back() : CreatureID(-1); //should never be accessed
 	if (ci.creID != CreatureID::NONE)
 	{
-		ci.cre = VLC->creatures()->getById(ci.creID);
+		ci.cre = LIBRARY->creatures()->getById(ci.creID);
 		ci.level = ci.cre->getLevel(); //this is creature tier, while tryRealize expects dwelling level. Ignore.
 	}
 	else

+ 1 - 1
AI/VCAI/AIUtility.h

@@ -9,7 +9,7 @@
  */
 #pragma once
 
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/spells/CSpellHandler.h"
 #include "../../lib/CStopWatch.h"

+ 1 - 1
AI/VCAI/ArmyManager.h

@@ -13,7 +13,7 @@
 #include "AIUtility.h"
 
 #include "../../lib/GameConstants.h"
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "VCAI.h"
 
 struct SlotInfo

+ 1 - 1
AI/VCAI/BuildingManager.cpp

@@ -222,7 +222,7 @@ bool BuildingManager::getBuildingOptions(const CGTownInstance * t)
 	std::vector<BuildingID> extraBuildings;
 	for (auto buildingInfo : t->getTown()->buildings)
 	{
-		if (buildingInfo.first.IsDwelling() && BuildingID::getUpgradedFromDwelling(buildingInfo.first) > 1)
+		if (buildingInfo.first.isDwelling() && BuildingID::getUpgradedFromDwelling(buildingInfo.first) > 1)
 			extraBuildings.push_back(buildingInfo.first);
 	}
 	return tryBuildAnyStructure(t, extraBuildings);

+ 1 - 1
AI/VCAI/BuildingManager.h

@@ -13,7 +13,7 @@
 #include "AIUtility.h"
 
 #include "../../lib/GameConstants.h"
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "VCAI.h"
 
 struct DLL_EXPORT PotentialBuilding

+ 9 - 5
AI/VCAI/FuzzyEngines.cpp

@@ -143,17 +143,21 @@ TacticalAdvantageEngine::TacticalAdvantageEngine()
 		castleWalls = new fl::InputVariable("CastleWalls");
 		engine.addInputVariable(castleWalls);
 		{
-			fl::Rectangle * none = new fl::Rectangle("NONE", CGTownInstance::NONE, CGTownInstance::NONE + (CGTownInstance::FORT - CGTownInstance::NONE) * 0.5f);
+			int wallsNone = CGTownInstance::NONE;
+			int wallsFort = CGTownInstance::FORT;
+			int wallsCitadel = CGTownInstance::CITADEL;
+			int wallsCastle = CGTownInstance::CASTLE;
+
+			fl::Rectangle * none = new fl::Rectangle("NONE", wallsNone, wallsNone + (wallsFort - wallsNone) * 0.5f);
 			castleWalls->addTerm(none);
 
-			fl::Trapezoid * medium = new fl::Trapezoid("MEDIUM", (CGTownInstance::FORT - CGTownInstance::NONE) * 0.5f, CGTownInstance::FORT,
-				CGTownInstance::CITADEL, CGTownInstance::CITADEL + (CGTownInstance::CASTLE - CGTownInstance::CITADEL) * 0.5f);
+			fl::Trapezoid * medium = new fl::Trapezoid("MEDIUM", (wallsFort - wallsNone) * 0.5f, wallsFort, wallsCitadel, wallsCitadel + (wallsCastle - wallsCitadel) * 0.5f);
 			castleWalls->addTerm(medium);
 
-			fl::Ramp * high = new fl::Ramp("HIGH", CGTownInstance::CITADEL - 0.1, CGTownInstance::CASTLE);
+			fl::Ramp * high = new fl::Ramp("HIGH", wallsCitadel - 0.1, wallsCastle);
 			castleWalls->addTerm(high);
 
-			castleWalls->setRange(CGTownInstance::NONE, CGTownInstance::CASTLE);
+			castleWalls->setRange(wallsNone, wallsCastle);
 		}
 
 

+ 1 - 1
AI/VCAI/Goals/AbstractGoal.cpp

@@ -85,7 +85,7 @@ std::string AbstractGoal::name() const //TODO: virtualize
 	}
 	break;
 	case GET_ART_TYPE:
-		desc = "GET ARTIFACT OF TYPE " + VLC->artifacts()->getByIndex(aid)->getNameTranslated();
+		desc = "GET ARTIFACT OF TYPE " + LIBRARY->artifacts()->getByIndex(aid)->getNameTranslated();
 		break;
 	case VISIT_TILE:
 		desc = "VISIT TILE " + tile.toString();

+ 1 - 1
AI/VCAI/Goals/AbstractGoal.h

@@ -9,7 +9,7 @@
 */
 #pragma once
 
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../../../lib/CCreatureHandler.h"
 #include "../AIUtility.h"
 

+ 1 - 1
AI/VCAI/Goals/CompleteQuest.h

@@ -10,7 +10,7 @@
 #pragma once
 
 #include "CGoal.h"
-#include "../../../lib/VCMI_Lib.h"
+#include "../../../lib/GameLibrary.h"
 #include "../../../lib/gameState/QuestInfo.h"
 
 namespace Goals

+ 2 - 2
AI/VCAI/Goals/GatherTroops.cpp

@@ -87,7 +87,7 @@ TGoalVec GatherTroops::getAllPossibleSubgoals()
 			continue;
 		}
 
-		auto creature = VLC->creatures()->getByIndex(objid);
+		auto creature = LIBRARY->creatures()->getByIndex(objid);
 		if(t->getFactionID() == creature->getFactionID()) //TODO: how to force AI to build unupgraded creatures? :O
 		{
 			auto tryFindCreature = [&]() -> std::optional<std::vector<CreatureID>>
@@ -135,7 +135,7 @@ TGoalVec GatherTroops::getAllPossibleSubgoals()
 			{
 				for(auto type : creature.second)
 				{
-					if(type.getNum() == objid && ai->ah->freeResources().canAfford(VLC->creatures()->getById(type)->getFullRecruitCost()))
+					if(type.getNum() == objid && ai->ah->freeResources().canAfford(LIBRARY->creatures()->getById(type)->getFullRecruitCost()))
 						vstd::concatenate(solutions, ai->ah->howToVisitObj(obj));
 				}
 			}

+ 5 - 5
AI/VCAI/MapObjectsEvaluator.cpp

@@ -10,7 +10,7 @@
 #include "StdInc.h"
 #include "MapObjectsEvaluator.h"
 #include "../../lib/GameConstants.h"
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/mapObjects/CompoundMapObjectID.h"
 #include "../../lib/mapObjectConstructors/AObjectTypeHandler.h"
@@ -31,11 +31,11 @@ MapObjectsEvaluator & MapObjectsEvaluator::getInstance()
 
 MapObjectsEvaluator::MapObjectsEvaluator()
 {
-	for(auto primaryID : VLC->objtypeh->knownObjects())
+	for(auto primaryID : LIBRARY->objtypeh->knownObjects())
 	{
-		for(auto secondaryID : VLC->objtypeh->knownSubObjects(primaryID))
+		for(auto secondaryID : LIBRARY->objtypeh->knownSubObjects(primaryID))
 		{
-			auto handler = VLC->objtypeh->getHandlerFor(primaryID, secondaryID);
+			auto handler = LIBRARY->objtypeh->getHandlerFor(primaryID, secondaryID);
 			if(handler && !handler->isStaticObject())
 			{
 				if(handler->getAiValue() != std::nullopt)
@@ -83,7 +83,7 @@ std::optional<int> MapObjectsEvaluator::getObjectValue(const CGObjectInstance *
 		{
 			for(auto & creatureID : creLevel.second)
 			{
-				auto creature = VLC->creatures()->getById(creatureID);
+				auto creature = LIBRARY->creatures()->getById(creatureID);
 				aiValue += (creature->getAIValue() * creature->getGrowth());
 			}
 		}

+ 3 - 1
AI/VCAI/Pathfinding/AINodeStorage.cpp

@@ -17,6 +17,7 @@
 #include "../../../lib/pathfinder/CPathfinder.h"
 #include "../../../lib/pathfinder/PathfinderOptions.h"
 #include "../../../lib/pathfinder/PathfinderUtil.h"
+#include "../../../lib/IGameSettings.h"
 #include "../../../lib/CPlayerState.h"
 
 AINodeStorage::AINodeStorage(const int3 & Sizes)
@@ -246,7 +247,8 @@ void AINodeStorage::calculateTownPortalTeleportations(
 
 		// TODO: Copy/Paste from TownPortalMechanics
 		auto skillLevel = hero->getSpellSchoolLevel(townPortal);
-		auto movementCost = GameConstants::BASE_MOVEMENT_COST * (skillLevel >= 3 ? 2 : 3);
+		int baseCost = hero->cb->getSettings().getInteger(EGameSettings::HEROES_MOVEMENT_COST_BASE);
+		auto movementCost = baseCost * (skillLevel >= 3 ? 2 : 3);
 
 		if(hero->movementPointsRemaining() < movementCost)
 		{

+ 1 - 1
AI/VCAI/ResourceManager.h

@@ -11,7 +11,7 @@
 
 #include "AIUtility.h"
 #include "../../lib/GameConstants.h"
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "VCAI.h"
 #include <boost/heap/binomial_heap.hpp>
 

+ 31 - 31
AI/VCAI/VCAI.cpp

@@ -174,7 +174,7 @@ void VCAI::showTavernWindow(const CGObjectInstance * object, const CGHeroInstanc
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "TavernWindow");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void VCAI::showThievesGuildWindow(const CGObjectInstance * obj)
@@ -311,7 +311,7 @@ void VCAI::heroExchangeStarted(ObjectInstanceID hero1, ObjectInstanceID hero2, Q
 
 	status.addQuery(query, boost::str(boost::format("Exchange between heroes %s (%d) and %s (%d)") % firstHero->getNameTranslated() % firstHero->tempOwner % secondHero->getNameTranslated() % secondHero->tempOwner));
 
-	requestActionASAP([=]()
+	requestActionASAP([this, firstHero, secondHero, query]()
 	{
 		float goalpriority1 = 0;
 		float goalpriority2 = 0;
@@ -370,7 +370,7 @@ void VCAI::showRecruitmentDialog(const CGDwelling * dwelling, const CArmedInstan
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "RecruitmentDialog");
-	requestActionASAP([=](){
+	requestActionASAP([this, dwelling, dst, queryID](){
 		recruitCreatures(dwelling, dst);
 		checkHeroArmy(dynamic_cast<const CGHeroInstance*>(dst));
 		answerQuery(queryID, 0);
@@ -532,7 +532,7 @@ void VCAI::showUniversityWindow(const IMarket * market, const CGHeroInstance * v
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "UniversityWindow");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void VCAI::heroManaPointsChanged(const CGHeroInstance * hero)
@@ -600,7 +600,7 @@ void VCAI::showMarketWindow(const IMarket * market, const CGHeroInstance * visit
 	NET_EVENT_HANDLER;
 
 	status.addQuery(queryID, "MarketWindow");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void VCAI::showWorldViewEx(const std::vector<ObjectPosInfo> & objectPositions, bool showTerrain)
@@ -646,7 +646,7 @@ void VCAI::yourTurn(QueryID queryID)
 	LOG_TRACE_PARAMS(logAi, "queryID '%i'", queryID);
 	NET_EVENT_HANDLER;
 	status.addQuery(queryID, "YourTurn");
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 	status.startedTurn();
 	makingTurn = std::make_unique<boost::thread>(&VCAI::makeTurn, this);
 }
@@ -656,7 +656,7 @@ void VCAI::heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, std::v
 	LOG_TRACE_PARAMS(logAi, "queryID '%i'", queryID);
 	NET_EVENT_HANDLER;
 	status.addQuery(queryID, boost::str(boost::format("Hero %s got level %d") % hero->getNameTranslated() % hero->level));
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void VCAI::commanderGotLevel(const CCommanderInstance * commander, std::vector<ui32> skills, QueryID queryID)
@@ -664,7 +664,7 @@ void VCAI::commanderGotLevel(const CCommanderInstance * commander, std::vector<u
 	LOG_TRACE_PARAMS(logAi, "queryID '%i'", queryID);
 	NET_EVENT_HANDLER;
 	status.addQuery(queryID, boost::str(boost::format("Commander %s of %s got level %d") % commander->name % commander->armyObj->nodeName() % (int)commander->level));
-	requestActionASAP([=](){ answerQuery(queryID, 0); });
+	requestActionASAP([this, queryID](){ answerQuery(queryID, 0); });
 }
 
 void VCAI::showBlockingDialog(const std::string & text, const std::vector<Component> & components, QueryID askID, const int soundID, bool selection, bool cancel, bool safeToAutoaccept)
@@ -681,7 +681,7 @@ void VCAI::showBlockingDialog(const std::string & text, const std::vector<Compon
 	if(!selection && cancel) //yes&no -> always answer yes, we are a brave AI :)
 		sel = 1;
 
-	requestActionASAP([=]()
+	requestActionASAP([this, askID, sel]()
 	{
 		answerQuery(askID, sel);
 	});
@@ -726,7 +726,7 @@ void VCAI::showTeleportDialog(const CGHeroInstance * hero, TeleportChannelID cha
 		}
 	}
 
-	requestActionASAP([=]()
+	requestActionASAP([this, askID, chosenExit]()
 	{
 		answerQuery(askID, chosenExit);
 	});
@@ -743,7 +743,7 @@ void VCAI::showGarrisonDialog(const CArmedInstance * up, const CGHeroInstance *
 	status.addQuery(queryID, boost::str(boost::format("Garrison dialog with %s and %s") % s1 % s2));
 
 	//you can't request action from action-response thread
-	requestActionASAP([=]()
+	requestActionASAP([this, down, up, removableUnits, queryID]()
 	{
 		if(removableUnits && !cb->getStartInfo()->isRestorationOfErathiaCampaign())
 			pickBestCreatures(down, up);
@@ -756,7 +756,7 @@ void VCAI::showMapObjectSelectDialog(QueryID askID, const Component & icon, cons
 {
 	NET_EVENT_HANDLER;
 	status.addQuery(askID, "Map object select query");
-	requestActionASAP([=](){ answerQuery(askID, selectedObject.getNum()); });
+	requestActionASAP([this, askID](){ answerQuery(askID, selectedObject.getNum()); });
 }
 
 void makePossibleUpgrades(const CArmedInstance * obj)
@@ -802,7 +802,7 @@ void VCAI::makeTurn()
 	auto day = cb->getDate(Date::DAY);
 	logAi->info("Player %d (%s) starting turn, day %d", playerID, playerID.toString(), day);
 
-	boost::shared_lock gsLock(CGameState::mutex);
+	std::shared_lock gsLock(CGameState::mutex);
 	setThreadName("VCAI::makeTurn");
 
 	switch(cb->getDate(Date::DAY_OF_WEEK))
@@ -1264,7 +1264,7 @@ void VCAI::recruitCreatures(const CGDwelling * d, const CArmedInstance * recruit
 		int count = d->creatures[i].first;
 		CreatureID creID = d->creatures[i].second.back();
 
-		vstd::amin(count, ah->freeResources() / VLC->creatures()->getById(creID)->getFullRecruitCost());
+		vstd::amin(count, ah->freeResources() / LIBRARY->creatures()->getById(creID)->getFullRecruitCost());
 		if(count > 0)
 			cb->recruitCreatures(d, recruiter, creID, count, i);
 	}
@@ -2491,7 +2491,7 @@ void VCAI::recruitHero(const CGTownInstance * t, bool throwing)
 void VCAI::finish()
 {
 	//we want to lock to avoid multiple threads from calling makingTurn->join() at same time
-	boost::lock_guard<boost::mutex> multipleCleanupGuard(turnInterruptionMutex);
+	std::lock_guard<std::mutex> multipleCleanupGuard(turnInterruptionMutex);
 	if(makingTurn)
 	{
 		makingTurn->interrupt();
@@ -2506,7 +2506,7 @@ void VCAI::requestActionASAP(std::function<void()> whatToDo)
 	{
 		setThreadName("VCAI::requestActionASAP::whatToDo");
 		SET_GLOBAL_STATE(this);
-		boost::shared_lock gsLock(CGameState::mutex);
+		std::shared_lock gsLock(CGameState::mutex);
 		whatToDo();
 	});
 
@@ -2622,7 +2622,7 @@ AIStatus::~AIStatus()
 
 void AIStatus::setBattle(BattleState BS)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	LOG_TRACE_PARAMS(logAi, "battle state=%d", (int)BS);
 	battle = BS;
 	cv.notify_all();
@@ -2630,7 +2630,7 @@ void AIStatus::setBattle(BattleState BS)
 
 BattleState AIStatus::getBattle()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	return battle;
 }
 
@@ -2643,7 +2643,7 @@ void AIStatus::addQuery(QueryID ID, std::string description)
 	}
 
 	assert(ID.getNum() >= 0);
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 
 	assert(!vstd::contains(remainingQueries, ID));
 
@@ -2655,7 +2655,7 @@ void AIStatus::addQuery(QueryID ID, std::string description)
 
 void AIStatus::removeQuery(QueryID ID)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	assert(vstd::contains(remainingQueries, ID));
 
 	std::string description = remainingQueries[ID];
@@ -2667,40 +2667,40 @@ void AIStatus::removeQuery(QueryID ID)
 
 int AIStatus::getQueriesCount()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	return static_cast<int>(remainingQueries.size());
 }
 
 void AIStatus::startedTurn()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	havingTurn = true;
 	cv.notify_all();
 }
 
 void AIStatus::madeTurn()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	havingTurn = false;
 	cv.notify_all();
 }
 
 void AIStatus::waitTillFree()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	while(battle != NO_BATTLE || !remainingQueries.empty() || !objectsBeingVisited.empty() || ongoingHeroMovement)
-		cv.wait_for(lock, boost::chrono::milliseconds(100));
+		cv.wait_for(lock, std::chrono::milliseconds(100));
 }
 
 bool AIStatus::haveTurn()
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	return havingTurn;
 }
 
 void AIStatus::attemptedAnsweringQuery(QueryID queryID, int answerRequestID)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	assert(vstd::contains(remainingQueries, queryID));
 	std::string description = remainingQueries[queryID];
 	logAi->debug("Attempted answering query %d - %s. Request id=%d. Waiting for results...", queryID, description, answerRequestID);
@@ -2712,7 +2712,7 @@ void AIStatus::receivedAnswerConfirmation(int answerRequestID, int result)
 	QueryID query;
 
 	{
-		boost::unique_lock<boost::mutex> lock(mx);
+		std::unique_lock<std::mutex> lock(mx);
 
 		assert(vstd::contains(requestToQueryID, answerRequestID));
 		query = requestToQueryID[answerRequestID];
@@ -2733,7 +2733,7 @@ void AIStatus::receivedAnswerConfirmation(int answerRequestID, int result)
 
 void AIStatus::heroVisit(const CGObjectInstance * obj, bool started)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	if(started)
 	{
 		objectsBeingVisited.push_back(obj);
@@ -2751,14 +2751,14 @@ void AIStatus::heroVisit(const CGObjectInstance * obj, bool started)
 
 void AIStatus::setMove(bool ongoing)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	ongoingHeroMovement = ongoing;
 	cv.notify_all();
 }
 
 void AIStatus::setChannelProbing(bool ongoing)
 {
-	boost::unique_lock<boost::mutex> lock(mx);
+	std::unique_lock<std::mutex> lock(mx);
 	ongoingChannelProbing = ongoing;
 	cv.notify_all();
 }

+ 4 - 4
AI/VCAI/VCAI.h

@@ -17,7 +17,7 @@
 #include "../../lib/CThreadHelper.h"
 
 #include "../../lib/GameConstants.h"
-#include "../../lib/VCMI_Lib.h"
+#include "../../lib/GameLibrary.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/mapObjects/MiscObjects.h"
 #include "../../lib/spells/CSpellHandler.h"
@@ -34,8 +34,8 @@ class AIhelper;
 
 class AIStatus
 {
-	boost::mutex mx;
-	boost::condition_variable cv;
+	std::mutex mx;
+	std::condition_variable cv;
 
 	BattleState battle;
 	std::map<QueryID, std::string> remainingQueries;
@@ -107,7 +107,7 @@ public:
 
 	std::unique_ptr<boost::thread> makingTurn;
 private:
-	boost::mutex turnInterruptionMutex;
+	std::mutex turnInterruptionMutex;
 public:
 	ObjectInstanceID selectedObject;
 

+ 3 - 3
CI/NSIS.template.in

@@ -572,9 +572,12 @@ FunctionEnd
   !insertmacro MUI_LANGUAGE "Finnish"
   !insertmacro MUI_LANGUAGE "French"
   !insertmacro MUI_LANGUAGE "German"
+  !insertmacro MUI_LANGUAGE "Greek"
   !insertmacro MUI_LANGUAGE "Hungarian"
   !insertmacro MUI_LANGUAGE "Italian"
+  !insertmacro MUI_LANGUAGE "Japanese"
   !insertmacro MUI_LANGUAGE "Korean"
+  !insertmacro MUI_LANGUAGE "Norwegian"
   !insertmacro MUI_LANGUAGE "Polish"
   !insertmacro MUI_LANGUAGE "Portuguese"
   !insertmacro MUI_LANGUAGE "Russian"
@@ -596,12 +599,10 @@ FunctionEnd
   ;!insertmacro MUI_LANGUAGE "Dutch"
   ;!insertmacro MUI_LANGUAGE "Estonian"
   ;!insertmacro MUI_LANGUAGE "Farsi"
-  ;!insertmacro MUI_LANGUAGE "Greek"
   ;!insertmacro MUI_LANGUAGE "Hebrew"
   ;!insertmacro MUI_LANGUAGE "Icelandic"
   ;!insertmacro MUI_LANGUAGE "Indonesian"
   ;!insertmacro MUI_LANGUAGE "Irish"
-  ;!insertmacro MUI_LANGUAGE "Japanese"
   ;!insertmacro MUI_LANGUAGE "Kurdish"
   ;!insertmacro MUI_LANGUAGE "Latvian"
   ;!insertmacro MUI_LANGUAGE "Lithuanian"
@@ -609,7 +610,6 @@ FunctionEnd
   ;!insertmacro MUI_LANGUAGE "Macedonian"
   ;!insertmacro MUI_LANGUAGE "Malay"
   ;!insertmacro MUI_LANGUAGE "Mongolian"
-  ;!insertmacro MUI_LANGUAGE "Norwegian"
   ;!insertmacro MUI_LANGUAGE "PortugueseBR"
   ;!insertmacro MUI_LANGUAGE "Romanian"
   ;!insertmacro MUI_LANGUAGE "Serbian"

+ 3 - 0
CI/conan/base/android

@@ -4,3 +4,6 @@ compiler=clang
 compiler.libcxx=c++_shared
 compiler.version=14
 os=Android
+
+[buildenv]
+LD=ld # fixes shared libiconv build

+ 101 - 0
CI/wininstaller/build_installer.cmd

@@ -0,0 +1,101 @@
+@echo off
+title VCMI Installer Builder
+setlocal enabledelayedexpansion
+cls
+
+REM Define variables dynamically relative to the normalized base directory
+set "AppVersion=1.6.1"
+set "AppBuild=1122334455A"
+set "InstallerArch=x64"
+set "VCMIFolder=VCMI"
+
+REM Override defaults with optional parameters
+if not "%~1"=="" set "AppVersion=%~1"
+if not "%~2"=="" set "AppBuild=%~2"
+if not "%~3"=="" set "InstallerArch=%~3"
+if not "%~4"=="" set "VCMIFolder=%~4"
+
+REM Define Inno Setup version
+set InnoSetupVer=6
+
+REM Uncomment this line and set custom UCRT source path, otherwise latest installed Windows 10 SDK will be used
+REM set "UCRTFilesPath=%ProgFiles%\Windows Kits\10\Redist\10.0.22621.0\ucrt\DLLs"
+
+REM Normally, there is no need to modify anything below this line.
+
+REM Determine the base directory two levels up from the installer location
+set "ScriptDir=%~dp0"
+set "BaseDir=%ScriptDir%..\..\"
+
+REM Normalize the base directory
+for %%i in ("%BaseDir%") do set "BaseDir=%%~fi"
+
+REM Define specific subdirectories relative to the base directory
+set "SourceFilesPath=%BaseDir%bin\Release"
+set "LangPath=%BaseDir%CI\wininstaller\lang"
+set "LicenseFile=%BaseDir%license.txt"
+set "IconFile=%BaseDir%clientapp\icons\vcmi.ico"
+set "SmallLogo=%BaseDir%CI\wininstaller\vcmismalllogo.bmp"
+set "WizardLogo=%BaseDir%CI\wininstaller\vcmilogo.bmp"
+set "InstallerScript=%BaseDir%CI\wininstaller\installer.iss"
+
+REM Determine Program Files directory based on system architecture
+if exist "%WinDir%\SysWow64" (
+    set "ProgFiles=%programfiles(x86)%"
+) else (
+    set "ProgFiles=%programfiles%"
+)
+
+REM Dynamically locate the UCRT path if not defined
+if not defined UCRTFilesPath (
+	set "UCRTBasePath=!ProgFiles!\Windows Kits\10\Redist"
+	set "UCRTFilesPath="
+	for /f "delims=" %%d in ('dir /b /ad /on "!UCRTBasePath!"') do (
+		if exist "!UCRTBasePath!\%%d\ucrt\DLLs" (
+			set "UCRTFilesPath=!UCRTBasePath!\%%d\ucrt\DLLs"
+		)
+	)
+)
+
+REM Verify Inno Setup is installed
+if not exist "%ProgFiles%\Inno Setup %InnoSetupVer%\ISCC.exe" (
+    echo.
+	echo ERROR: Inno Setup !InnoSetupVer! was not found in !ProgFiles!.
+    echo Please install it or specify the correct path.
+    echo.
+    pause
+    goto :eof
+)
+
+REM Verify critical paths
+if not exist "%InstallerScript%" (
+    echo ERROR: Installer script not found: !InstallerScript!
+    pause
+    goto :eof
+)
+if not exist "%SourceFilesPath%" (
+    echo ERROR: Source files path not found: !SourceFilesPath!
+    pause
+    goto :eof
+)
+if not exist "%UCRTFilesPath%" (
+    echo ERROR: UCRT files path not found: !UCRTFilesPath!
+    pause
+    goto :eof
+)
+
+REM Call Inno Setup Compiler
+"%ProgFiles%\Inno Setup %InnoSetupVer%\ISCC.exe" "%InstallerScript%" ^
+    /DAppVersion="%AppVersion%" ^
+    /DAppBuild="%AppBuild%" ^
+    /DInstallerArch="%InstallerArch%" ^
+    /DSourceFilesPath="%SourceFilesPath%" ^
+    /DUCRTFilesPath="%UCRTFilesPath%" ^
+    /DVCMIFolder="%VCMIFolder%" ^
+    /DLangPath="%LangPath%" ^
+    /DLicenseFile="%LicenseFile%" ^
+    /DIconFile="%IconFile%" ^
+    /DSmallLogo="%SmallLogo%" ^
+    /DWizardLogo="%WizardLogo%"
+
+pause

+ 817 - 0
CI/wininstaller/installer.iss

@@ -0,0 +1,817 @@
+; VCMI Installer Script Instructions
+
+; Steps to Add a New Translation to the Installer:
+
+; 1. Download the ISL file for your language from the Inno Setup repository:
+;    https://github.com/jrsoftware/issrc/tree/main/Files/Languages
+; 
+; 2. Add the required VCMI custom messages to the downloaded ISL file.
+;    - Refer to the English.isl file for examples of the necessary custom messages.
+;    - Ensure all custom messages, including WindowsVersionNotSupported, are properly translated and aligned with the English version.
+; 3. Update the ConfirmUninstall message:
+;    - Custom Uninstall Wizard is used, ensure the ConfirmUninstall message is consistent with the English version and accurately reflects the intended functionality.
+; 4. Update the WindowsVersionNotSupported message:
+;    - Ensure the WindowsVersionNotSupported message is consistent with the English version and accurately reflects the intended functionality.
+; 5. Add the new language entry to the [Languages] section of the script:
+;    - Use the correct syntax to include the language and its corresponding ISL file in the installer configuration.
+
+
+; Manual preprocessor definitions are provided using ISCC.exe parameters.
+
+; #define AppVersion "1.6.2"
+; #define AppBuild "1122334455A"
+; #define InstallerArch "x64"
+; 
+; #define SourceFilesPath "C:\_VCMI_source\bin\Release"
+; #define UCRTFilesPath "C:\Program Files (x86)\Windows Kits\10\Redist\10.0.22621.0\ucrt\DLLs"
+; #define LangPath "C:\_VCMI_Source\CI\wininstaller\lang"
+; #define LicenseFile "C:\_VCMI_Source\license.txt"
+; #define IconFile "C:\_VCMI_Source\clientapp\icons\vcmi.ico"
+; #define SmallLogo "C:\_VCMI_Source\CI\wininstaller\vcmismalllogo.bmp"
+; #define WizardLogo "C:\_VCMI_Source\CI\wininstaller\vcmilogo.bmp"
+
+#define VCMIFolder "VCMI"
+
+#define VCMIFilesFolder "My Games\vcmi"
+#define InstallerName "VCMI_Installer"
+
+#define AppComment "VCMI is an open-source engine for Heroes III, offering new and extended possibilities."
+#define VCMITeam "VCMI Team"
+#define VCMICopyright "Copyright © VCMI Community. All rights reserved."
+
+#define VCMIHome "https://vcmi.eu/"
+#define VCMIContact "https://discord.gg/chBT42V"
+
+
+[Setup]
+AppId={#VCMIFolder}.{#InstallerArch}
+AppName={#VCMIFolder}
+AppVersion={#AppVersion}.{#AppBuild}
+AppVerName={#VCMIFolder}
+AppPublisher={#VCMITeam}
+AppPublisherURL={#VCMIHome}
+AppSupportURL={#VCMIContact}
+AppComments={#AppComment}
+DefaultDirName={code:GetDefaultDir}
+DefaultGroupName={#VCMIFolder}
+UninstallDisplayIcon={app}\VCMI_launcher.exe
+OutputBaseFilename={#InstallerName}_{#InstallerArch}_{#AppVersion}.{#AppBuild}
+PrivilegesRequiredOverridesAllowed=commandline dialog
+ShowLanguageDialog=yes
+DisableWelcomePage=no
+DisableProgramGroupPage=yes
+ChangesAssociations=yes
+UsePreviousLanguage=yes
+DirExistsWarning=no
+UsePreviousAppDir=yes
+UsePreviousTasks=yes
+UsePreviousGroup=yes
+DisableStartupPrompt=yes
+UsedUserAreasWarning=no
+WindowResizable=no
+CloseApplicationsFilter=*.exe
+Compression=lzma2/ultra64
+SolidCompression=yes
+ArchitecturesAllowed={#InstallerArch}compatible
+LicenseFile={#LicenseFile}
+SetupIconFile={#IconFile}
+WizardSmallImageFile={#SmallLogo}
+WizardImageFile={#WizardLogo}
+
+; Version informations
+MinVersion=6.1sp1
+VersionInfoCompany={#VCMITeam}
+VersionInfoDescription={#VCMIFolder} {#AppVersion} Setup (Build {#AppBuild})
+VersionInfoProductName={#VCMIFolder}
+VersionInfoCopyright={#VCMICopyright}
+VersionInfoVersion={#AppVersion} 
+VersionInfoOriginalFileName={#InstallerName}.exe
+
+
+[Languages]
+Name: "english"; MessagesFile: "{#LangPath}\English.isl"
+Name: "czech"; MessagesFile: "{#LangPath}\Czech.isl"
+Name: "chinese"; MessagesFile: "{#LangPath}\ChineseSimplified.isl"
+Name: "finnish"; MessagesFile: "{#LangPath}\Finnish.isl"
+Name: "french"; MessagesFile: "{#LangPath}\French.isl"
+Name: "german"; MessagesFile: "{#LangPath}\German.isl"
+Name: "hungarian"; MessagesFile: "{#LangPath}\Hungarian.isl"
+Name: "italian"; MessagesFile: "{#LangPath}\Italian.isl"
+Name: "korean"; MessagesFile: "{#LangPath}\Korean.isl"
+Name: "polish"; MessagesFile: "{#LangPath}\Polish.isl"
+Name: "portuguese"; MessagesFile: "{#LangPath}\BrazilianPortuguese.isl"
+Name: "russian"; MessagesFile: "{#LangPath}\Russian.isl"
+Name: "spanish"; MessagesFile: "{#LangPath}\Spanish.isl"
+Name: "swedish"; MessagesFile: "{#LangPath}\Swedish.isl"
+Name: "turkish"; MessagesFile: "{#LangPath}\Turkish.isl"
+Name: "ukrainian"; MessagesFile: "{#LangPath}\Ukrainian.isl"
+Name: "vietnamese"; MessagesFile: "{#LangPath}\Vietnamese.isl"
+
+
+[Files]
+Source: "{#SourceFilesPath}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: PerformHeroes3FileCopy
+Source: "{#UCRTFilesPath}\{#InstallerArch}\*"; DestDir: "{app}"; Flags: ignoreversion; Check: IsUCRTNeeded
+
+
+[Icons]
+Name: "{group}\{cm:ShortcutLauncher}"; Filename: "{app}\VCMI_launcher.exe"; Comment: "{cm:ShortcutLauncherComment}"
+Name: "{group}\{cm:ShortcutMapEditor}"; Filename: "{app}\VCMI_mapeditor.exe"; Comment: "{cm:ShortcutMapEditorComment}"
+Name: "{group}\{cm:ShortcutWebPage}"; Filename: "{#VCMIHome}"; Comment: "{cm:ShortcutWebPageComment}"
+Name: "{group}\{cm:ShortcutDiscord}"; Filename: "{#VCMIContact}"; Comment: "{cm:ShortcutDiscordComment}"
+
+Name: "{code:GetUserDesktopFolder}\{cm:ShortcutLauncher}"; Filename: "{app}\VCMI_launcher.exe"; Tasks: desktop; Comment: "{cm:ShortcutLauncherComment}"
+
+
+[Tasks]
+Name: "desktop"; Description: "{cm:CreateDesktopShortcuts}"; GroupDescription: "{cm:SystemIntegration}"
+Name: "startmenu"; Description: "{cm:CreateStartMenuShortcuts}"; GroupDescription: "{cm:SystemIntegration}"
+Name: "fileassociation_h3m"; Description: "{cm:AssociateH3MFiles}"; GroupDescription: "{cm:SystemIntegration}"; Flags: unchecked
+Name: "fileassociation_vcmimap"; Description: "{cm:AssociateVCMIMapFiles}"; GroupDescription: "{cm:SystemIntegration}"
+
+Name: "firewallrules"; Description: "{cm:AddFirewallRules}"; GroupDescription: "{cm:VCMISettings}"; Check: IsAdminInstallMode
+Name: "h3copyfiles"; Description: "{cm:CopyH3Files}"; GroupDescription: "{cm:VCMISettings}"; Check: IsHeroes3Installed and IsCopyFilesNeeded
+
+
+[Registry]
+Root: HKCU; Subkey: "Software\{#VCMIFolder}"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: uninsdeletekey
+
+Root: HKCU; Subkey: "Software\Classes\.vmap"; ValueType: string; ValueName: ""; ValueData: "VCMI.vmap"; Flags: uninsdeletevalue; Tasks: fileassociation_vcmimap
+Root: HKCU; Subkey: "Software\Classes\VCMI.vmap"; ValueType: string; ValueName: ""; ValueData: "{cm:VMAPDescription}"; Flags: uninsdeletekey; Tasks: fileassociation_vcmimap
+Root: HKCU; Subkey: "Software\Classes\VCMI.vmap\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\VCMI_mapeditor.exe"" ""%1"""; Tasks: fileassociation_vcmimap
+
+Root: HKCU; Subkey: "Software\Classes\.vcmp"; ValueType: string; ValueName: ""; ValueData: "VCMI.vcmp"; Flags: uninsdeletevalue; Tasks: fileassociation_vcmimap
+Root: HKCU; Subkey: "Software\Classes\VCMI.vcmp"; ValueType: string; ValueName: ""; ValueData: "{cm:VCMPDescription}"; Flags: uninsdeletekey; Tasks: fileassociation_vcmimap
+Root: HKCU; Subkey: "Software\Classes\VCMI.vcmp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\VCMI_mapeditor.exe"" ""%1"""; Tasks: fileassociation_vcmimap
+
+Root: HKCU; Subkey: "Software\Classes\.h3m"; ValueType: string; ValueName: ""; ValueData: "VCMI.h3m"; Flags: uninsdeletevalue; Tasks: fileassociation_h3m
+Root: HKCU; Subkey: "Software\Classes\VCMI.h3m"; ValueType: string; ValueName: ""; ValueData: "{cm:H3MDescription}"; Flags: uninsdeletekey; Tasks: fileassociation_h3m
+Root: HKCU; Subkey: "Software\Classes\VCMI.h3m\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\VCMI_mapeditor.exe"" ""%1"""; Tasks: fileassociation_h3m
+
+
+[Run]
+Filename: "netsh.exe"; Parameters: "advfirewall firewall add rule name=vcmi_server dir=in action=allow program=""{app}\vcmi_server.exe"" enable=yes profile=public,private"; Flags: runhidden; Tasks: firewallrules; Check: IsAdmin
+Filename: "netsh.exe"; Parameters: "advfirewall firewall add rule name=vcmi_client dir=in action=allow program=""{app}\vcmi_client.exe"" enable=yes profile=public,private"; Flags: runhidden; Tasks: firewallrules; Check: IsAdmin
+
+Filename: "{app}\VCMI_launcher.exe"; Description: "{cm:RunVCMILauncherAfterInstall}"; Flags: nowait postinstall skipifsilent
+
+
+[UninstallRun]
+; Kill VCMI processes
+Filename: "taskkill.exe"; Parameters: "/F /IM VCMI_client.exe"; Flags: runhidden; RunOnceId: "KillVCMIClient"
+Filename: "taskkill.exe"; Parameters: "/F /IM VCMI_server.exe"; Flags: runhidden; RunOnceId: "KillVCMIServer"
+Filename: "taskkill.exe"; Parameters: "/F /IM VCMI_launcher.exe"; Flags: runhidden; RunOnceId: "KillVCMILauncher"
+Filename: "taskkill.exe"; Parameters: "/F /IM VCMI_mapeditor.exe"; Flags: runhidden; RunOnceId: "KillVCMIMapEditor"
+
+; Remove firewall rules
+Filename: "netsh.exe"; Parameters: "advfirewall firewall delete rule name=vcmi_server"; Flags: runhidden; Check: IsAdmin; RunOnceId: "RemoveFirewallVCMIServer"
+Filename: "netsh.exe"; Parameters: "advfirewall firewall delete rule name=vcmi_client"; Flags: runhidden; Check: IsAdmin; RunOnceId: "RemoveFirewallVCMIClient"
+
+
+[Code]
+var
+  InstallModePage: TInputOptionWizardPage;
+  FooterLabel: TLabel;
+  IsUpgrade: Boolean;
+  Heroes3Path: String;
+  GlobalUserName: String;
+  GlobalUserDocsFolder: String;
+  GlobalUserAppdataFolder: String;
+
+  VCMIMapsFolder, VCMIDataFolder, VCMIMp3Folder: String;
+  Heroes3MapsFolder, Heroes3DataFolder, Heroes3Mp3Folder: String;
+  
+function RegistryQueryPath(Key, ValueName: String): String;
+begin
+  if RegQueryStringValue(HKLM, Key, ValueName, Result) then
+    Exit
+  else
+    Result := '';
+end;
+
+
+function FolderSize(FolderPath: String): Int64;
+var
+  FindRec: TFindRec;
+begin
+  Result := 0;
+  if FindFirst(FolderPath + '\*', FindRec) then
+  begin
+    try
+      repeat
+        if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
+          Result := Result + FindRec.SizeLow
+        else if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
+          Result := Result + FolderSize(FolderPath + '\' + FindRec.Name);
+      until not FindNext(FindRec);
+    finally
+      FindClose(FindRec);
+    end;
+  end;
+end;
+
+
+function IsFolderValid(FolderPath: String): Boolean;
+begin
+  Result := DirExists(FolderPath) and (FolderSize(FolderPath) > 1024 * 1024);
+end;
+
+
+procedure CopyFolderContents(SourceDir, DestDir: String; Overwrite: Boolean);
+var
+  FindRec: TFindRec;
+  SourceFile, DestFile: String;
+begin
+  // Ensure the destination directory exists
+  if not DirExists(DestDir) then
+    if not ForceDirectories(DestDir) then
+    begin
+      //MsgBox('Failed to create destination directory: ' + DestDir, mbError, MB_OK);
+      Exit;
+    end;
+
+  // Start file copying
+  if FindFirst(SourceDir + '\*.*', FindRec) then
+  begin
+    try
+      repeat
+        SourceFile := SourceDir + '\' + FindRec.Name;
+        DestFile := DestDir + '\' + FindRec.Name;
+
+        if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
+        begin
+          if Overwrite or not FileExists(DestFile) then
+          begin
+            if not FileCopy(SourceFile, DestFile, False) then
+              //MsgBox('Failed to copy file: ' + SourceFile + ' to ' + DestFile, mbError, MB_OK);
+          end;
+        end
+        else if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
+        begin
+          // Copy subdirectories recursively
+          CopyFolderContents(SourceFile, DestFile, Overwrite);
+        end;
+      until not FindNext(FindRec);
+    finally
+      FindClose(FindRec);
+    end;
+  end
+  //else
+  //  MsgBox('No files found in directory: ' + SourceDir, mbError, MB_OK);
+end;
+
+
+// A huge workaround to get non-admin profile name on elevated installer as admin
+function WTSQuerySessionInformation(hServer: THandle; SessionId: Cardinal; WTSInfoClass: Integer; var pBuffer: DWord; var BytesReturned: DWord): Boolean;
+  external '[email protected] stdcall';
+
+procedure WTSFreeMemory(pMemory: DWord);
+  external '[email protected] stdcall';
+
+procedure RtlMoveMemoryAsString(Dest: string; Source: DWord; Len: Integer);
+  external '[email protected] stdcall';
+
+const
+  WTS_CURRENT_SERVER_HANDLE = 0;
+  WTS_CURRENT_SESSION = -1;
+  WTSUserName = 5;
+
+function GetCurrentSessionUserName: string;
+var
+  Buffer: DWord;
+  BytesReturned: DWord;
+  QueryResult: Boolean;
+begin
+  // Initialize Result to an empty string
+  Result := '';
+
+  // Query the username for the current session
+  QueryResult := WTSQuerySessionInformation(
+    WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, Buffer, BytesReturned);
+
+  if not QueryResult then
+  begin
+    // Error if the query fails
+    Exit;
+  end;
+
+  try
+    // Set the length of the result string (BytesReturned includes null terminator)
+    SetLength(Result, (BytesReturned div 2) - 1); // Divide by 2 for Unicode and exclude null terminator
+
+    // Copy the buffer contents into the result string
+    RtlMoveMemoryAsString(Result, Buffer, BytesReturned - 2); // Exclude null terminator
+  finally
+    // Free the allocated memory
+    WTSFreeMemory(Buffer);
+  end;
+
+end;
+
+
+function GetCommonProgramFilesDir: String;
+begin
+  // Check if the installer is running on a 64-bit system
+  if IsWin64 then
+  begin
+    if ExpandConstant('{#InstallerArch}') = 'x64' then
+      // For 64-bit installer, return the 64-bit Program Files directory
+      Result := ExpandConstant('{commonpf64}')
+    else
+      // For 32-bit installer on 64-bit system, return the 32-bit Program Files directory
+      Result := ExpandConstant('{commonpf32}');
+  end
+  else
+    // On 32-bit systems, always return the 32-bit Program Files directory
+    Result := ExpandConstant('{commonpf32}');
+end;
+
+
+function GetDefaultDir(Default: String): String;
+begin
+  if IsAdmin then
+    // Default to Program Files for admins
+    Result := GetCommonProgramFilesDir + '\{#VCMIFolder}'
+  else
+    // Default to User AppData for non-admin users
+    Result := GlobalUserAppdataFolder + '\{#VCMIFolder}';
+end;
+
+
+function GetUserFolderPath(Constant: String): String;
+var
+  FolderPath: String;
+  OriginalUserName: String;
+  CurrentSessionUserName: String;
+begin
+  // Retrieve the current username from the session
+  CurrentSessionUserName := '\' + GlobalUserName + '\';
+
+  // Retrieve the original username
+  OriginalUserName := '\' + GetUserNameString + '\';
+
+  // Expand the specified constant
+  FolderPath := ExpandConstant(Constant);
+
+  // Replace the original username with the current session username in the path
+  StringChangeEx(FolderPath, OriginalUserName, CurrentSessionUserName, True);
+
+  // Return the modified folder path
+  Result := FolderPath;
+end;
+
+
+procedure OnTaskCheck(Sender: TObject);
+var
+  i: Integer;
+begin
+  // Loop through all tasks in the tasks list
+  for i := 0 to WizardForm.TasksList.Items.Count - 1 do
+  begin
+    // Check if the current task is "firewallrules"
+    if WizardForm.TasksList.Items[i] = ExpandConstant('{cm:AddFirewallRules}') then
+    begin
+      // Check if the "firewallrules" task is unchecked
+      if not WizardForm.TasksList.Checked[i] then
+      begin
+        // Show a custom warning message box
+        MsgBox(ExpandConstant('{cm:Warning}') + '!' + #13#10 + #13#10 + ExpandConstant('{cm:InstallForMeOnly1}') + #13#10 + ExpandConstant('{cm:InstallForMeOnly2}'), mbError, MB_OK);
+      end;
+      Exit; // Task found, exit the loop
+    end;
+  end;
+end;
+
+
+// Specific functions for user folders
+function GetUserDocsFolder: String;
+begin
+  Result := GetUserFolderPath('{userdocs}');
+end;
+
+
+function GetUserAppdataFolder: String;
+begin
+  Result := GetUserFolderPath('{userappdata}');
+end;
+
+
+function GetUserDesktopFolder(Default: String): String;
+begin
+  Result := GetUserFolderPath('{userdesktop}');
+end;
+
+
+function IsUCRTNeeded: Boolean;
+var
+  FileName: String;
+begin
+  Result := False; // Default to not copying files
+
+  // Normalize and extract the file name from CurrentFileName
+  FileName := ExtractFileName(ExpandConstant(CurrentFileName));
+
+  // Check for file existence based on architecture
+  if IsWin64 then
+  begin
+    if ExpandConstant('{#InstallerArch}') = 'x64' then
+      // For 64-bit installer on 64-bit OS, check System32
+      Result := not FileExists(ExpandConstant('{win}\System32\' + FileName))
+    else
+      // For 32-bit installer on 64-bit OS, check SysWOW64
+      Result := not FileExists(ExpandConstant('{win}\SysWOW64\' + FileName));
+  end
+  else
+    // For 32-bit OS, always check System32
+    Result := not FileExists(ExpandConstant('{win}\System32\' + FileName));
+end;
+
+
+function IsHeroes3Installed(): Boolean;
+begin
+  Result := False;
+
+  if (Heroes3Path <> '') then
+    Result := True;
+
+end;
+
+
+function IsCopyFilesNeeded(): Boolean;
+begin
+  // Check if any of the required folders are not valid
+  Result := not (IsFolderValid(VCMIDataFolder) and IsFolderValid(VCMIMapsFolder) and IsFolderValid(VCMIMp3Folder));
+  
+end;
+
+
+function InitializeSetup(): Boolean;
+var
+  InstallPath: String;
+begin
+  // Check if the application is already installed
+  IsUpgrade := RegQueryStringValue(HKCU, 'Software\{#VCMIFolder}', 'InstallPath', InstallPath);
+ 
+  // Initialize the global variable during setup
+  GlobalUserName := GetCurrentSessionUserName();
+  GlobalUserDocsFolder := GetUserDocsFolder();
+  GlobalUserAppdataFolder := GetUserAppdataFolder();
+
+  // Define paths for VCMI
+  VCMIMapsFolder := GlobalUserDocsFolder + '\' + '{#VCMIFilesFolder}' + '\Maps';
+  VCMIDataFolder := GlobalUserDocsFolder + '\' + '{#VCMIFilesFolder}' + '\Data';
+  VCMIMp3Folder := GlobalUserDocsFolder + '\' + '{#VCMIFilesFolder}' + '\Mp3';
+  
+  // Check for Heroes 3 installation paths
+  Heroes3Path := RegistryQueryPath('SOFTWARE\GOG.com\Games\1207658787', 'path');
+  if Heroes3Path = '' then
+    Heroes3Path := RegistryQueryPath('SOFTWARE\WOW6432Node\GOG.com\Games\1207658787', 'path');
+  if Heroes3Path = '' then
+    Heroes3Path := RegistryQueryPath('SOFTWARE\New World Computing\Heroes of Might and Magic® III\1.0', 'AppPath');
+  if Heroes3Path = '' then
+    Heroes3Path := RegistryQueryPath('SOFTWARE\WOW6432Node\New World Computing\Heroes of Might and Magic® III\1.0', 'AppPath');
+  if Heroes3Path = '' then
+    Heroes3Path := RegistryQueryPath('SOFTWARE\New World Computing\Heroes of Might and Magic III\1.0', 'AppPath');
+  if Heroes3Path = '' then
+    Heroes3Path := RegistryQueryPath('SOFTWARE\WOW6432Node\New World Computing\Heroes of Might and Magic III\1.0', 'AppPath'); 
+  
+  if (Heroes3Path <> '') then
+  begin
+    Heroes3MapsFolder := Heroes3Path + '\Maps';
+    Heroes3DataFolder := Heroes3Path + '\Data';
+    Heroes3Mp3Folder := Heroes3Path + '\Mp3';
+  end;
+
+  Result := True;
+end;
+
+
+function InitializeUninstall(): Boolean;
+begin
+  // Initialize the global variable during uninstall
+  GlobalUserName := GetCurrentSessionUserName();
+  GlobalUserDocsFolder := GetUserDocsFolder();
+  GlobalUserAppdataFolder := GetUserAppdataFolder();
+  
+  Result := True;
+end;
+
+
+procedure InitializeWizard();
+begin
+  // Check if the application is already installed
+  if not IsUpgrade then
+  begin
+    // Create the install mode selection page only if it's not an upgrade
+    InstallModePage := CreateInputOptionPage(
+      wpWelcome,
+      ExpandConstant('{cm:SelectSetupInstallModeTitle}'),
+      ExpandConstant('{cm:SelectSetupInstallModeDesc}'),
+      ExpandConstant('{cm:SelectSetupInstallModeSubTitle}'),
+      True, False
+    );
+    
+    // Option 0
+    InstallModePage.Add(ExpandConstant(#13#10 + '  {cm:InstallForAllUsers}' + #13#10 + '   • {cm:InstallForAllUsers1}' + #13#10 + #13#10));
+    // Option 1
+    InstallModePage.Add(ExpandConstant(#13#10 + '  {cm:InstallForMeOnly}' + #13#10  +  '   • {cm:InstallForMeOnly1}' + #13#10 + '   • {cm:InstallForMeOnly2}' + #13#10));
+
+    if IsAdmin then
+    begin
+      // Default to "All Users"
+      InstallModePage.SelectedValueIndex := 0;
+    end
+    else
+    begin
+      // Default to "Me Only"
+      InstallModePage.SelectedValueIndex := 1;
+
+      // Disable the first option ("Install for All Users") for non-admins
+      InstallModePage.CheckListBox.ItemEnabled[0] := False;
+
+      // Force a redraw of the CheckListBox to fix appearance
+      InstallModePage.CheckListBox.Invalidate();
+    end;
+  end;
+  
+    // Attach an OnClick event handler to the tasks list
+  WizardForm.TasksList.OnClickCheck := @OnTaskCheck;
+  
+    // Enable word wrap for the ReadyMemo
+  WizardForm.ReadyMemo.ScrollBars := ssNone; // No scrollbars
+  WizardForm.ReadyMemo.WordWrap := True;
+
+  // Create a custom label for the footer message
+  FooterLabel := TLabel.Create(WizardForm);
+  FooterLabel.Parent := WizardForm;
+  FooterLabel.Caption := '{#VCMIFolder} v' + '{#AppVersion}' + '.' + '{#AppBuild}';
+  // Padding from the left edge
+  FooterLabel.Left := 10;
+  // Adjust to leave space for multiple lines
+  FooterLabel.Top := WizardForm.ClientHeight - 30;
+  // Adjust for padding
+  FooterLabel.Width := WizardForm.ClientWidth - 20;
+  // Adjust height to accommodate multiple lines
+  FooterLabel.Height := 40; 
+end;
+
+
+function ShouldSkipPage(PageID: Integer): Boolean;
+begin
+  Result := False; // Default is not to skip the page
+  
+  if IsUpgrade then
+  begin
+    if (PageID = wpLicense) or (PageID = wpSelectTasks) or (PageID = wpReady) then
+    begin
+      Result := True; // Skip these pages during upgrade
+      Exit;
+    end;
+  end;
+end;
+
+
+procedure CurPageChanged(CurPageID: Integer);
+begin
+  // Ensure the footer message is visible on every page
+  FooterLabel.Visible := True;
+  
+end;
+
+
+function NextButtonClick(CurPageID: Integer): Boolean;
+begin
+  // Skip the custom page on upgrade
+  if IsUpgrade and Assigned(InstallModePage) and (CurPageID = InstallModePage.ID) then
+  begin
+    Result := True;
+    Exit;
+  end;
+
+  // Handle logic for the custom page if it exists
+  if Assigned(InstallModePage) and (CurPageID = InstallModePage.ID) then
+  begin
+    if (InstallModePage.SelectedValueIndex = 0) and not IsAdmin then
+    begin
+      Result := False;
+      Exit;
+    end;
+
+    if InstallModePage.SelectedValueIndex = 0 then
+      WizardForm.DirEdit.Text := GetCommonProgramFilesDir + '\{#VCMIFolder}'
+    else
+      WizardForm.DirEdit.Text := GlobalUserAppdataFolder + '\{#VCMIFolder}';
+  end;
+
+  Result := True;
+end;
+
+
+procedure PerformHeroes3FileCopy();
+var
+  i: Integer;
+begin
+  // Loop through all tasks to find the "h3copyfiles" task
+  for i := 0 to WizardForm.TasksList.Items.Count - 1 do
+  begin
+    // Check if the current task is "h3copyfiles"
+    if WizardForm.TasksList.Items[i] = ExpandConstant('{cm:CopyH3Files}') then
+    begin
+      // Check if the "h3copyfiles" task is checked
+      if WizardForm.TasksList.Checked[i] then
+      begin
+        
+        if IsCopyFilesNeeded then
+        begin
+          // Copy folders if conditions are met
+          if (IsFolderValid(Heroes3MapsFolder) and not IsFolderValid(VCMIMapsFolder)) then
+            CopyFolderContents(Heroes3MapsFolder, VCMIMapsFolder, True);
+
+          if (IsFolderValid(Heroes3DataFolder) and not IsFolderValid(VCMIDataFolder)) then
+            CopyFolderContents(Heroes3DataFolder, VCMIDataFolder, True);
+
+          if (IsFolderValid(Heroes3Mp3Folder) and not IsFolderValid(VCMIMp3Folder)) then
+            CopyFolderContents(Heroes3Mp3Folder, VCMIMp3Folder, True);
+        end;
+      end;
+      Exit; // Task found, exit the loop
+    end;
+  end;
+end;
+
+
+/// Uninstall ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+var
+  DeleteUserDataCheckbox: TNewCheckBox;
+  DeleteUserDataLabel: TLabel;
+
+
+function DeleteFolderContents(const FolderPath: String): Boolean;
+var
+  FindResult: TFindRec;
+  SubPath: String;
+begin
+  Result := True;
+
+  if FindFirst(FolderPath + '\*', FindResult) then
+  begin
+    try
+      repeat
+        if (FindResult.Name <> '.') and (FindResult.Name <> '..') then
+        begin
+          SubPath := FolderPath + '\' + FindResult.Name;
+
+          if (FindResult.Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
+          begin
+            if not DeleteFolderContents(SubPath) then
+            begin
+              Result := False;
+              Exit;
+            end;
+            if not RemoveDir(SubPath) then
+            begin
+              Result := False;
+              Exit;
+            end;
+          end
+          else
+          begin
+            if not DeleteFile(SubPath) then
+            begin
+              Result := False;
+              Exit;
+            end;
+          end;
+        end;
+      until not FindNext(FindResult);
+    finally
+      FindClose(FindResult);
+    end;
+  end;
+end;
+
+
+procedure PerformFileDeletion;
+var
+  UserDataFolder: String;
+begin
+  if (DeleteUserDataCheckbox <> nil) and DeleteUserDataCheckbox.Checked then
+  begin
+    UserDataFolder := GlobalUserDocsFolder + '\' + '{#VCMIFilesFolder}';
+
+    if DirExists(UserDataFolder) then
+    begin
+      if DeleteFolderContents(UserDataFolder) then
+      begin
+        if not RemoveDir(UserDataFolder) then
+        begin
+          // Log or handle failed root directory removal if necessary
+        end;
+      end;
+    end;
+  end;
+end;
+
+
+procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
+begin
+  if CurUninstallStep = usUninstall then
+    PerformFileDeletion;
+  // Repeat delete process after uninstall due logs from killed processes during uninstall
+  if CurUninstallStep = usPostUninstall then
+    PerformFileDeletion;
+end;
+
+
+procedure UninsNextButtonOnClick(Sender: TObject);
+begin
+  with UninstallProgressForm.InnerNotebook do
+  begin
+    ActivePage := Pages[ActivePage.PageIndex + 1];
+    if ActivePage.PageIndex = PageCount - 1 then
+    begin
+      TButton(Sender).Hide;
+      UninstallProgressForm.Close;
+    end;
+  end;
+end;
+
+
+procedure UninsCancelButtonOnClick(Sender: TObject);
+begin
+  // Optionally handle user cancellation
+end;
+
+
+procedure InitializeUninstallProgressForm();
+var
+  Page: TNewNotebookPage;
+  UninsNextButton: TButton;
+begin
+  with UninstallProgressForm do
+  begin
+    // -- Create the "Uninstall" button
+    UninsNextButton := TButton.Create(UninstallProgressForm);
+    with UninsNextButton do
+    begin
+      Parent := UninstallProgressForm;
+      Top := CancelButton.Top;
+      Width := CancelButton.Width;
+      Height := CancelButton.Height;
+      Left := CancelButton.Left - Width - ScaleX(10);
+      Caption := ExpandConstant('{cm:Uninstall}');
+      OnClick := @UninsNextButtonOnClick;
+      TabOrder := 1; // Ensure this button is first in the tab order
+      Default := True; // Make it the default button (triggered by Enter key)
+    end;
+
+    // -- Configure the Cancel button so it aborts the form
+    CancelButton.Enabled := True;
+    CancelButton.ModalResult := mrAbort; 
+    CancelButton.OnClick := @UninsCancelButtonOnClick;
+
+    // -- Create a custom page (as the first page in the notebook)
+    Page := TNewNotebookPage.Create(InnerNotebook);
+    with Page do
+    begin
+      Parent := InnerNotebook;
+      Notebook := InnerNotebook;
+      PageIndex := 0; // first page
+    end;
+
+    // -- Create our "Delete user data" checkbox on that custom page
+    DeleteUserDataCheckbox := TNewCheckBox.Create(UninstallProgressForm);
+    with DeleteUserDataCheckbox do
+    begin
+      Parent := Page;
+      Top := ScaleX(20);
+      Left := ScaleX(20);
+      Width := ScaleX(400);
+      Checked := False;
+      Caption := ExpandConstant('{cm:DeleteUserData}');
+      TabOrder := 0; // Tab focus goes to this control after the Uninstall button
+    end;
+
+    // -- Add a label for the additional text
+    DeleteUserDataLabel := TLabel.Create(UninstallProgressForm);
+    with DeleteUserDataLabel do
+    begin
+      Parent := Page;
+      Top := DeleteUserDataCheckbox.Top + ScaleY(20); // Position below the checkbox
+      Left := DeleteUserDataCheckbox.Left + ScaleX(20); // Indent slightly to align with the text
+      Width := ScaleX(400);
+      Caption := GlobalUserDocsFolder + '\' + '{#VCMIFilesFolder}';
+    end;
+
+    // -- Activate the first page
+    InnerNotebook.ActivePage := Page;
+
+    // -- Make InstallingPage the last page
+    InstallingPage.PageIndex := InnerNotebook.PageCount - 1;
+
+    // -- Show the form modally; if user clicks Cancel, ShowModal = mrAbort -> Abort uninstallation
+    if ShowModal = mrAbort then
+      Abort;
+  end;
+end;

+ 417 - 0
CI/wininstaller/lang/BrazilianPortuguese.isl

@@ -0,0 +1,417 @@
+; *** Inno Setup version 6.1.0+ Brazilian Portuguese messages made by Cesar82 [email protected] ***
+;
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Português Brasileiro
+LanguageID=$0416
+LanguageCodePage=1252
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Instalador
+SetupWindowTitle=%1 - Instalador
+UninstallAppTitle=Desinstalar
+UninstallAppFullTitle=Desinstalar %1
+
+; *** Misc. common
+InformationTitle=Informação
+ConfirmTitle=Confirmar
+ErrorTitle=Erro
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Isto instalará o %1. Você deseja continuar?
+LdrCannotCreateTemp=Incapaz de criar um arquivo temporário. Instalação abortada
+LdrCannotExecTemp=Incapaz de executar o arquivo no diretório temporário. Instalação abortada
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nErro %2: %3
+SetupFileMissing=Está faltando o arquivo %1 do diretório de instalação. Por favor corrija o problema ou obtenha uma nova cópia do programa.
+SetupFileCorrupt=Os arquivos de instalação estão corrompidos. Por favor obtenha uma nova cópia do programa.
+SetupFileCorruptOrWrongVer=Os arquivos de instalação estão corrompidos ou são incompatíveis com esta versão do instalador. Por favor corrija o problema ou obtenha uma nova cópia do programa.
+InvalidParameter=Um parâmetro inválido foi passado na linha de comando:%n%n%1
+SetupAlreadyRunning=O instalador já está em execução.
+WindowsVersionNotSupported=Este programa não pode ser executado na versão do Windows instalada. Certifique-se de estar usando a arquitetura correta do Windows (32 bits ou 64 bits) e a versão adequada deste programa.
+WindowsServicePackRequired=Este programa requer o %1 Service Pack %2 ou superior.
+NotOnThisPlatform=Este programa não executará no %1.
+OnlyOnThisPlatform=Este programa deve ser executado no %1.
+OnlyOnTheseArchitectures=Este programa só pode ser instalado em versões do Windows projetadas para as seguintes arquiteturas de processadores:%n%n% 1
+WinVersionTooLowError=Este programa requer a %1 versão %2 ou superior.
+WinVersionTooHighError=Este programa não pode ser instalado na %1 versão %2 ou superior.
+AdminPrivilegesRequired=Você deve estar logado como administrador quando instalar este programa.
+PowerUserPrivilegesRequired=Você deve estar logado como administrador ou como um membro do grupo de Usuários Power quando instalar este programa.
+SetupAppRunningError=O instalador detectou que o %1 está atualmente em execução.%n%nPor favor feche todas as instâncias dele agora, então clique em OK pra continuar ou em Cancelar pra sair.
+UninstallAppRunningError=O Desinstalador detectou que o %1 está atualmente em execução.%n%nPor favor feche todas as instâncias dele agora, então clique em OK pra continuar ou em Cancelar pra sair.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Selecione o Modo de Instalação do Instalador
+PrivilegesRequiredOverrideInstruction=Selecione o modo de instalação
+PrivilegesRequiredOverrideText1=O %1 pode ser instalado pra todos os usuários (requer privilégios administrativos) ou só pra você.
+PrivilegesRequiredOverrideText2=O %1 pode ser instalado só pra você ou pra todos os usuários (requer privilégios administrativos).
+PrivilegesRequiredOverrideAllUsers=Instalar pra &todos os usuários
+PrivilegesRequiredOverrideAllUsersRecommended=Instalar pra &todos os usuários (recomendado)
+PrivilegesRequiredOverrideCurrentUser=Instalar só &pra mim
+PrivilegesRequiredOverrideCurrentUserRecommended=Instalar só &pra mim (recomendado)
+
+; *** Misc. errors
+ErrorCreatingDir=O instalador foi incapaz de criar o diretório "%1"
+ErrorTooManyFilesInDir=Incapaz de criar um arquivo no diretório "%1" porque ele contém arquivos demais
+
+; *** Setup common messages
+ExitSetupTitle=Sair do Instalador
+ExitSetupMessage=A Instalação não está completa. Se você sair agora o programa não será instalado.%n%nVocê pode executar o instalador de novo outra hora pra completar a instalação.%n%nSair do instalador?
+AboutSetupMenuItem=&Sobre o Instalador...
+AboutSetupTitle=Sobre o Instalador
+AboutSetupMessage=%1 versão %2%n%3%n%n%1 home page:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< &Voltar
+ButtonNext=&Avançar >
+ButtonInstall=&Instalar
+ButtonOK=OK
+ButtonCancel=Cancelar
+ButtonYes=&Sim
+ButtonYesToAll=Sim pra &Todos
+ButtonNo=&Não
+ButtonNoToAll=Nã&o pra Todos
+ButtonFinish=&Concluir
+ButtonBrowse=&Procurar...
+ButtonWizardBrowse=P&rocurar...
+ButtonNewFolder=&Criar Nova Pasta
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Selecione o Idioma do Instalador
+SelectLanguageLabel=Selecione o idioma pra usar durante a instalação:
+
+; *** Common wizard text
+ClickNext=Clique em Avançar pra continuar ou em Cancelar pra sair do instalador.
+BeveledLabel=
+BrowseDialogTitle=Procurar Pasta
+BrowseDialogLabel=Selecione uma pasta na lista abaixo, então clique em OK.
+NewFolderName=Nova Pasta
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Bem-vindo ao Assistente do Instalador do [name]
+WelcomeLabel2=Isto instalará o [name/ver] no seu computador.%n%nÉ recomendado que você feche todos os outros aplicativos antes de continuar.
+
+; *** "Password" wizard page
+WizardPassword=Senha
+PasswordLabel1=Esta instalação está protegida por senha.
+PasswordLabel3=Por favor forneça a senha, então clique em Avançar pra continuar. As senhas são caso-sensitivo.
+PasswordEditLabel=&Senha:
+IncorrectPassword=A senha que você inseriu não está correta. Por favor tente de novo.
+
+; *** "License Agreement" wizard page
+WizardLicense=Acordo de Licença
+LicenseLabel=Por favor leia as seguintes informações importantes antes de continuar.
+LicenseLabel3=Por favor leia o seguinte Acordo de Licença. Você deve aceitar os termos deste acordo antes de continuar com a instalação.
+LicenseAccepted=Eu &aceito o acordo
+LicenseNotAccepted=Eu &não aceito o acordo
+
+; *** "Information" wizard pages
+WizardInfoBefore=Informação
+InfoBeforeLabel=Por favor leia as seguintes informações importantes antes de continuar.
+InfoBeforeClickLabel=Quando você estiver pronto pra continuar com o instalador, clique em Avançar.
+WizardInfoAfter=Informação
+InfoAfterLabel=Por favor leia as seguintes informações importantes antes de continuar.
+InfoAfterClickLabel=Quando você estiver pronto pra continuar com o instalador, clique em Avançar.
+
+; *** "User Information" wizard page
+WizardUserInfo=Informação do Usuário
+UserInfoDesc=Por favor insira suas informações.
+UserInfoName=&Nome do Usuário:
+UserInfoOrg=&Organização:
+UserInfoSerial=&Número de Série:
+UserInfoNameRequired=Você deve inserir um nome.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Selecione o Local de Destino
+SelectDirDesc=Aonde o [name] deve ser instalado?
+SelectDirLabel3=O instalador instalará o [name] na seguinte pasta.
+SelectDirBrowseLabel=Pra continuar clique em Avançar. Se você gostaria de selecionar uma pasta diferente, clique em Procurar.
+DiskSpaceGBLabel=Pelo menos [gb] MBs de espaço livre em disco são requeridos.
+DiskSpaceMBLabel=Pelo menos [mb] MBs de espaço livre em disco são requeridos.
+CannotInstallToNetworkDrive=O instalador não pode instalar em um drive de rede.
+CannotInstallToUNCPath=O instalador não pode instalar em um caminho UNC.
+InvalidPath=Você deve inserir um caminho completo com a letra do drive; por exemplo:%n%nC:\APP%n%não um caminho UNC no formulário:%n%n\\server\share
+InvalidDrive=O drive ou compartilhamento UNC que você selecionou não existe ou não está acessível. Por favor selecione outro.
+DiskSpaceWarningTitle=Sem Espaço em Disco o Bastante
+DiskSpaceWarning=O instalador requer pelo menos %1 KBs de espaço livre pra instalar mas o drive selecionado só tem %2 KBs disponíveis.%n%nVocê quer continuar de qualquer maneira?
+DirNameTooLong=O nome ou caminho da pasta é muito longo.
+InvalidDirName=O nome da pasta não é válido.
+BadDirName32=Os nomes das pastas não pode incluir quaisquer dos seguintes caracteres:%n%n%1
+DirExistsTitle=A Pasta Existe
+DirExists=A pasta:%n%n%1%n%njá existe. Você gostaria de instalar nesta pasta de qualquer maneira?
+DirDoesntExistTitle=A Pasta Não Existe
+DirDoesntExist=A pasta:%n%n%1%n%nnão existe. Você gostaria quer a pasta fosse criada?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Selecionar Componentes
+SelectComponentsDesc=Quais componentes devem ser instalados?
+SelectComponentsLabel2=Selecione os componentes que você quer instalar; desmarque os componentes que você não quer instalar. Clique em Avançar quando você estiver pronto pra continuar.
+FullInstallation=Instalação completa
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Instalação compacta
+CustomInstallation=Instalação personalizada
+NoUninstallWarningTitle=O Componente Existe
+NoUninstallWarning=O instalador detectou que os seguintes componentes já estão instalados no seu computador:%n%n%1%n%nNão selecionar estes componentes não desinstalará eles.%n%nVocê gostaria de continuar de qualquer maneira?
+ComponentSize1=%1 KBs
+ComponentSize2=%1 MBs
+ComponentsDiskSpaceGBLabel=A seleção atual requer pelo menos [gb] MBs de espaço em disco.
+ComponentsDiskSpaceMBLabel=A seleção atual requer pelo menos [mb] MBs de espaço em disco.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Selecionar Tarefas Adicionais
+SelectTasksDesc=Quais tarefas adicionais devem ser executadas?
+SelectTasksLabel2=Selecione as tarefas adicionais que você gostaria que o instalador executasse enquanto instala o [name], então clique em Avançar.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Selecionar a Pasta do Menu Iniciar
+SelectStartMenuFolderDesc=Aonde o instalador deve colocar os atalhos do programa?
+SelectStartMenuFolderLabel3=O instalador criará os atalhos do programa na seguinte pasta do Menu Iniciar.
+SelectStartMenuFolderBrowseLabel=Pra continuar clique em Avançar. Se você gostaria de selecionar uma pasta diferente, clique em Procurar.
+MustEnterGroupName=Você deve inserir um nome de pasta.
+GroupNameTooLong=O nome ou caminho da pasta é muito longo.
+InvalidGroupName=O nome da pasta não é válido.
+BadGroupName=O nome da pasta não pode incluir quaisquer dos seguintes caracteres:%n%n%1
+NoProgramGroupCheck2=&Não criar uma pasta no Menu Iniciar
+
+; *** "Ready to Install" wizard page
+WizardReady=Pronto pra Instalar
+ReadyLabel1=O instalador está agora pronto pra começar a instalar o [name] no seu computador.
+ReadyLabel2a=Clique em Instalar pra continuar com a instalação ou clique em Voltar se você quer revisar ou mudar quaisquer configurações.
+ReadyLabel2b=Clique em Instalar pra continuar com a instalação.
+ReadyMemoUserInfo=Informação do usuário:
+ReadyMemoDir=Local de destino:
+ReadyMemoType=Tipo de instalação:
+ReadyMemoComponents=Componentes selecionados:
+ReadyMemoGroup=Pasta do Menu Iniciar:
+ReadyMemoTasks=Tarefas adicionais:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Baixando arquivos adicionais...
+ButtonStopDownload=&Parar download
+StopDownload=Tem certeza que deseja parar o download?
+ErrorDownloadAborted=Download abortado
+ErrorDownloadFailed=Download falhou: %1 %2
+ErrorDownloadSizeFailed=Falha ao obter o tamanho: %1 %2
+ErrorFileHash1=Falha no hash do arquivo: %1
+ErrorFileHash2=Hash de arquivo inválido: esperado %1, encontrado %2
+ErrorProgress=Progresso inválido: %1 de %2
+ErrorFileSize=Tamanho de arquivo inválido: esperado %1, encontrado %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Preparando pra Instalar
+PreparingDesc=O instalador está se preparando pra instalar o [name] no seu computador.
+PreviousInstallNotCompleted=A instalação/remoção de um programa anterior não foi completada. Você precisará reiniciar o computador pra completar essa instalação.%n%nApós reiniciar seu computador execute o instalador de novo pra completar a instalação do [name].
+CannotContinue=O instalador não pode continuar. Por favor clique em Cancelar pra sair.
+ApplicationsFound=Os aplicativos a seguir estão usando arquivos que precisam ser atualizados pelo instalador. É recomendados que você permita ao instalador fechar automaticamente estes aplicativos.
+ApplicationsFound2=Os aplicativos a seguir estão usando arquivos que precisam ser atualizados pelo instalador. É recomendados que você permita ao instalador fechar automaticamente estes aplicativos. Após a instalação ter completado, o instalador tentará reiniciar os aplicativos.
+CloseApplications=&Fechar os aplicativos automaticamente
+DontCloseApplications=&Não fechar os aplicativos
+ErrorCloseApplications=O instalador foi incapaz de fechar automaticamente todos os aplicativos. É recomendado que você feche todos os aplicativos usando os arquivos que precisam ser atualizados pelo instalador antes de continuar.
+PrepareToInstallNeedsRestart=A instalação deve reiniciar seu computador. Depois de reiniciar o computador, execute a Instalação novamente para concluir a instalação de [name].%n%nDeseja reiniciar agora?
+
+; *** "Installing" wizard page
+WizardInstalling=Instalando
+InstallingLabel=Por favor espere enquanto o instalador instala o [name] no seu computador.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Completando o Assistente do Instalador do [name]
+FinishedLabelNoIcons=O instalador terminou de instalar o [name] no seu computador.
+FinishedLabel=O instalador terminou de instalar o [name] no seu computador. O aplicativo pode ser iniciado selecionando os atalhos instalados.
+ClickFinish=Clique em Concluir pra sair do Instalador.
+FinishedRestartLabel=Pra completar a instalação do [name], o instalador deve reiniciar seu computador. Você gostaria de reiniciar agora?
+FinishedRestartMessage=Pra completar a instalação do [name], o instalador deve reiniciar seu computador.%n%nVocê gostaria de reiniciar agora?
+ShowReadmeCheck=Sim, eu gostaria de visualizar o arquivo README
+YesRadio=&Sim, reiniciar o computador agora
+NoRadio=&Não, eu reiniciarei o computador depois
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Executar %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Visualizar %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=O Instalador Precisa do Próximo Disco
+SelectDiskLabel2=Por favor insira o Disco %1 e clique em OK.%n%nSe os arquivos neste disco podem ser achados numa pasta diferente do que a exibida abaixo, insira o caminho correto ou clique em Procurar.
+PathLabel=&Caminho:
+FileNotInDir2=O arquivo "%1" não pôde ser localizado em "%2". Por favor insira o disco correto ou selecione outra pasta.
+SelectDirectoryLabel=Por favor especifique o local do próximo disco.
+
+; *** Installation phase messages
+SetupAborted=A instalação não foi completada.%n%nPor favor corrija o problema e execute o instalador de novo.
+AbortRetryIgnoreSelectAction=Selecionar ação
+AbortRetryIgnoreRetry=&Tentar de novo
+AbortRetryIgnoreIgnore=&Ignorar o erro e continuar
+AbortRetryIgnoreCancel=Cancelar instalação
+
+; *** Installation status messages
+StatusClosingApplications=Fechando aplicativos...
+StatusCreateDirs=Criando diretórios...
+StatusExtractFiles=Extraindo arquivos...
+StatusCreateIcons=Criando atalhos...
+StatusCreateIniEntries=Criando entradas INI...
+StatusCreateRegistryEntries=Criando entradas do registro...
+StatusRegisterFiles=Registrando arquivos...
+StatusSavingUninstall=Salvando informações de desinstalação...
+StatusRunProgram=Concluindo a instalação...
+StatusRestartingApplications=Reiniciando os aplicativos...
+StatusRollback=Desfazendo as mudanças...
+
+; *** Misc. errors
+ErrorInternal2=Erro interno: %1
+ErrorFunctionFailedNoCode=%1 falhou
+ErrorFunctionFailed=%1 falhou; código %2
+ErrorFunctionFailedWithMessage=%1 falhou; código %2.%n%3
+ErrorExecutingProgram=Incapaz de executar o arquivo:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Erro ao abrir a chave do registro:%n%1\%2
+ErrorRegCreateKey=Erro ao criar a chave do registro:%n%1\%2
+ErrorRegWriteKey=Erro ao gravar a chave do registro:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Erro ao criar a entrada INI no arquivo "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Ignorar este arquivo (não recomendado)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar o erro e continuar (não recomendado)
+SourceIsCorrupted=O arquivo de origem está corrompido
+SourceDoesntExist=O arquivo de origem "%1" não existe
+ExistingFileReadOnly2=O arquivo existente não pôde ser substituído porque está marcado como somente-leitura.
+ExistingFileReadOnlyRetry=&Remover o atributo somente-leitura e tentar de novo
+ExistingFileReadOnlyKeepExisting=&Manter o arquivo existente
+ErrorReadingExistingDest=Um erro ocorreu enquanto tentava ler o arquivo existente:
+FileExistsSelectAction=Selecione a ação
+FileExists2=O arquivo já existe.
+FileExistsOverwriteExisting=&Sobrescrever o arquivo existente
+FileExistsKeepExisting=&Mantenha o arquivo existente
+FileExistsOverwriteOrKeepAll=&Faça isso para os próximos conflitos
+ExistingFileNewerSelectAction=Selecione a ação
+ExistingFileNewer2=O arquivo existente é mais recente do que aquele que o Setup está tentando instalar.
+ExistingFileNewerOverwriteExisting=&Sobrescrever o arquivo existente
+ExistingFileNewerKeepExisting=&Mantenha o arquivo existente (recomendado)
+ExistingFileNewerOverwriteOrKeepAll=&Faça isso para os próximos conflitos
+ErrorChangingAttr=Um erro ocorreu enquanto tentava mudar os atributos do arquivo existente:
+ErrorCreatingTemp=Um erro ocorreu enquanto tentava criar um arquivo no diretório destino:
+ErrorReadingSource=Um erro ocorreu enquanto tentava ler o arquivo de origem:
+ErrorCopying=Um erro ocorreu enquanto tentava copiar um arquivo:
+ErrorReplacingExistingFile=Um erro ocorreu enquanto tentava substituir o arquivo existente:
+ErrorRestartReplace=ReiniciarSubstituir falhou:
+ErrorRenamingTemp=Um erro ocorreu enquanto tentava renomear um arquivo no diretório destino:
+ErrorRegisterServer=Incapaz de registrar a DLL/OCX: %1
+ErrorRegSvr32Failed=O RegSvr32 falhou com o código de saída %1
+ErrorRegisterTypeLib=Incapaz de registrar a biblioteca de tipos: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32 bits
+UninstallDisplayNameMark64Bit=64 bits
+UninstallDisplayNameMarkAllUsers=Todos os usuários
+UninstallDisplayNameMarkCurrentUser=Usuário atual
+
+; *** Post-installation errors
+ErrorOpeningReadme=Um erro ocorreu enquanto tentava abrir o arquivo README.
+ErrorRestartingComputer=O instalador foi incapaz de reiniciar o computador. Por favor faça isto manualmente.
+
+; *** Uninstaller messages
+UninstallNotFound=O arquivo "%1" não existe. Não consegue desinstalar.
+UninstallOpenError=O arquivo "%1" não pôde ser aberto. Não consegue desinstalar
+UninstallUnsupportedVer=O arquivo do log da desinstalação "%1" está num formato não reconhecido por esta versão do desinstalador. Não consegue desinstalar
+UninstallUnknownEntry=Uma entrada desconhecida (%1) foi encontrada no log da desinstalação
+ConfirmUninstall=Tem certeza de que deseja executar o assistente de desinstalação %1?
+UninstallOnlyOnWin64=Esta instalação só pode ser desinstalada em Windows 64 bits.
+OnlyAdminCanUninstall=Esta instalação só pode ser desinstalada por um usuário com privilégios administrativos.
+UninstallStatusLabel=Por favor espere enquanto o %1 é removido do seu computador.
+UninstalledAll=O %1 foi removido com sucesso do seu computador.
+UninstalledMost=Desinstalação do %1 completa.%n%nAlguns elementos não puderam ser removidos. Estes podem ser removidos manualmente.
+UninstalledAndNeedsRestart=Pra completar a desinstalação do %1, seu computador deve ser reiniciado.%n%nVocê gostaria de reiniciar agora?
+UninstallDataCorrupted=O arquivo "%1" está corrompido. Não consegue desinstalar
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Remover Arquivo Compartilhado?
+ConfirmDeleteSharedFile2=O sistema indica que o seguinte arquivo compartilhado não está mais em uso por quaisquer programas. Você gostaria que a Desinstalação removesse este arquivo compartilhado?%n%nSe quaisquer programas ainda estão usando este arquivo e ele é removido, esses programas podem não funcionar apropriadamente. Se você não tiver certeza escolha Não. Deixar o arquivo no seu sistema não causará qualquer dano.
+SharedFileNameLabel=Nome do arquivo:
+SharedFileLocationLabel=Local:
+WizardUninstalling=Status da Desinstalação
+StatusUninstalling=Desinstalando o %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Instalando o %1.
+ShutdownBlockReasonUninstallingApp=Desinstalando o %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 versão %2
+AdditionalIcons=Atalhos adicionais:
+CreateDesktopIcon=Criar um atalho &na área de trabalho
+CreateQuickLaunchIcon=Criar um atalho na &barra de inicialização rápida
+ProgramOnTheWeb=%1 na Web
+UninstallProgram=Desinstalar o %1
+LaunchProgram=Iniciar o %1
+AssocFileExtension=&Associar o %1 com a extensão do arquivo %2
+AssocingFileExtension=Associando o %1 com a extensão do arquivo %2...
+AutoStartProgramGroupDescription=Inicialização:
+AutoStartProgram=Iniciar o %1 automaticamente
+AddonHostProgramNotFound=O %1 não pôde ser localizado na pasta que você selecionou.%n%nVocê quer continuar de qualquer maneira?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Escolha o Modo de Instalação
+SelectSetupInstallModeDesc=VCMI pode ser instalado para todos os usuários ou apenas para você.
+SelectSetupInstallModeSubTitle=Selecione o modo de instalação preferido:
+InstallForAllUsers=Instalar para todos os usuários
+InstallForAllUsers1=Requer privilégios administrativos
+InstallForMeOnly=Instalar apenas para mim
+InstallForMeOnly1=Um aviso do firewall aparecerá ao iniciar o jogo pela primeira vez
+InstallForMeOnly2=Jogos em LAN não funcionarão se a regra do firewall não for permitida
+SystemIntegration=Integração com o sistema
+CreateDesktopShortcuts=Criar atalhos na área de trabalho
+CreateStartMenuShortcuts=Criar atalhos no menu Iniciar
+AssociateH3MFiles=Associar arquivos .h3m ao Editor de Mapas VCMI
+AssociateVCMIMapFiles=Associar arquivos .vmap e .vcmp ao Editor de Mapas VCMI
+VCMISettings=Configuração do VCMI
+AddFirewallRules=Adicionar regras de firewall para VCMI
+CopyH3Files=Copiar automaticamente os arquivos necessários do Heroes III para o VCMI
+RunVCMILauncherAfterInstall=Iniciar o Launcher do VCMI
+ShortcutMapEditor=Editor de Mapas VCMI
+ShortcutLauncher=Launcher do VCMI
+ShortcutWebPage=Site Oficial do VCMI
+ShortcutDiscord=Discord do VCMI
+ShortcutLauncherComment=Iniciar o Launcher do VCMI
+ShortcutMapEditorComment=Abrir o Editor de Mapas do VCMI
+ShortcutWebPageComment=Visite o site oficial do VCMI
+ShortcutDiscordComment=Visite o Discord oficial do VCMI
+DeleteUserData=Excluir dados do usuário
+Uninstall=Desinstalar
+Warning=Aviso
+VMAPDescription=Arquivo de mapa do VCMI
+VCMPDescription=Arquivo de campanha do VCMI
+H3MDescription=Arquivo de mapa do Heroes 3

+ 427 - 0
CI/wininstaller/lang/ChineseSimplified.isl

@@ -0,0 +1,427 @@
+; *** Inno Setup version 6.1.0+ Chinese Simplified messages ***
+;
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+;
+; Maintained by Zhenghan Yang
+; Email: [email protected]
+; Translation based on network resource
+; The latest Translation is on https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation
+;
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=简体中文
+; If Language Name display incorrect, uncomment next line
+; LanguageName=<7B80><4F53><4E2D><6587>
+; About LanguageID, to reference link:
+; https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c
+LanguageID=$0804
+LanguageCodePage=936
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+DialogFontName=Microsoft YaHei UI
+;DialogFontSize=8
+WelcomeFontName=Microsoft YaHei UI
+;WelcomeFontSize=12
+TitleFontName=Microsoft YaHei UI
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** 应用程序标题
+SetupAppTitle=安装
+SetupWindowTitle=安装 - %1
+UninstallAppTitle=卸载
+UninstallAppFullTitle=%1 卸载
+
+; *** Misc. common
+InformationTitle=信息
+ConfirmTitle=确认
+ErrorTitle=错误
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=现在将安装 %1。您想要继续吗?
+LdrCannotCreateTemp=不能创建临时文件。安装中断。
+LdrCannotExecTemp=不能执行临时目录中的文件。安装中断。
+HelpTextNote=
+
+; *** 启动错误消息
+LastErrorMessage=%1.%n%n错误 %2: %3
+SetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或者获取程序的新副本。
+SetupFileCorrupt=安装文件已损坏。请获取程序的新副本。
+SetupFileCorruptOrWrongVer=安装文件已损坏,或是与这个安装程序的版本不兼容。请修正这个问题或获取新的程序副本。
+InvalidParameter=无效的命令行参数:%n%n%1
+SetupAlreadyRunning=安装程序正在运行。
+WindowsVersionNotSupported=此程序无法在您的 Windows 版本上运行。请确保您使用的是正确的 Windows 架构(32 位或 64 位)和此程序的正确版本。
+WindowsServicePackRequired=这个程序需要 %1 服务包 %2 或更高。
+NotOnThisPlatform=这个程序将不能运行于 %1。
+OnlyOnThisPlatform=这个程序必须运行于 %1。
+OnlyOnTheseArchitectures=这个程序只能在为下列处理器架构的 Windows 版本中进行安装:%n%n%1
+WinVersionTooLowError=这个程序需要 %1 版本 %2 或更高。
+WinVersionTooHighError=这个程序不能安装于 %1 版本 %2 或更高。
+AdminPrivilegesRequired=在安装这个程序时您必须以管理员身份登录。
+PowerUserPrivilegesRequired=在安装这个程序时您必须以管理员身份或有权限的用户组身份登录。
+SetupAppRunningError=安装程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。
+UninstallAppRunningError=卸载程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。
+
+; *** 启动问题
+PrivilegesRequiredOverrideTitle=选择安装程序模式
+PrivilegesRequiredOverrideInstruction=选择安装模式
+PrivilegesRequiredOverrideText1=%1 可以为所有用户安装(需要管理员权限),或仅为您安装。
+PrivilegesRequiredOverrideText2=%1 只能为您安装,或为所有用户安装(需要管理员权限)。
+PrivilegesRequiredOverrideAllUsers=为所有用户安装(&A)
+PrivilegesRequiredOverrideAllUsersRecommended=为所有用户安装(&A) (建议选项)
+PrivilegesRequiredOverrideCurrentUser=仅为我安装(&M)
+PrivilegesRequiredOverrideCurrentUserRecommended=仅为我安装(&M) (建议选项)
+
+; *** 其它错误
+ErrorCreatingDir=安装程序不能创建目录“%1”。
+ErrorTooManyFilesInDir=不能在目录“%1”中创建文件,因为里面的文件太多
+
+; *** 安装程序公共消息
+ExitSetupTitle=退出安装程序
+ExitSetupMessage=安装程序尚未完成安装。如果您现在退出,程序将不能安装。%n%n您可以以后再运行安装程序完成安装。%n%n现在退出安装程序吗?
+AboutSetupMenuItem=关于安装程序(&A)...
+AboutSetupTitle=关于安装程序
+AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4
+AboutSetupNote=
+TranslatorNote=Translated by Zhenghan Yang.
+
+; *** 按钮
+ButtonBack=< 上一步(&B)
+ButtonNext=下一步(&N) >
+ButtonInstall=安装(&I)
+ButtonOK=确定
+ButtonCancel=取消
+ButtonYes=是(&Y)
+ButtonYesToAll=全是(&A)
+ButtonNo=否(&N)
+ButtonNoToAll=全否(&O)
+ButtonFinish=完成(&F)
+ButtonBrowse=浏览(&B)...
+ButtonWizardBrowse=浏览(&R)...
+ButtonNewFolder=新建文件夹(&M)
+
+; *** “选择语言”对话框消息
+SelectLanguageTitle=选择安装语言
+SelectLanguageLabel=选择安装时要使用的语言。
+
+; *** 公共向导文字
+ClickNext=点击“下一步”继续,或点击“取消”退出安装程序。
+BeveledLabel=
+BrowseDialogTitle=浏览文件夹
+BrowseDialogLabel=在下列列表中选择一个文件夹,然后点击“确定”。
+NewFolderName=新建文件夹
+
+; *** “欢迎”向导页
+WelcomeLabel1=欢迎使用 [name] 安装向导
+WelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%n推荐您在继续安装前关闭所有其它应用程序。
+
+; *** “密码”向导页
+WizardPassword=密码
+PasswordLabel1=这个安装程序有密码保护。
+PasswordLabel3=请输入密码,然后点击“下一步”继续。密码区分大小写。
+PasswordEditLabel=密码(&P):
+IncorrectPassword=您所输入的密码不正确,请重试。
+
+; *** “许可协议”向导页
+WizardLicense=许可协议
+LicenseLabel=继续安装前请阅读下列重要信息。
+LicenseLabel3=请仔细阅读下列许可协议。您在继续安装前必须同意这些协议条款。
+LicenseAccepted=我同意此协议(&A)
+LicenseNotAccepted=我拒绝此协议(&D)
+
+; *** “信息”向导页
+WizardInfoBefore=信息
+InfoBeforeLabel=请在继续安装前阅读下列重要信息。
+InfoBeforeClickLabel=如果您想继续安装,点击“下一步”。
+WizardInfoAfter=信息
+InfoAfterLabel=请在继续安装前阅读下列重要信息。
+InfoAfterClickLabel=如果您想继续安装,点击“下一步”。
+
+; *** “用户信息”向导页
+WizardUserInfo=用户信息
+UserInfoDesc=请输入您的信息。
+UserInfoName=用户名(&U):
+UserInfoOrg=组织(&O):
+UserInfoSerial=序列号(&S):
+UserInfoNameRequired=您必须输入用户名。
+
+; *** “选择目标目录”向导页
+WizardSelectDir=选择目标位置
+SelectDirDesc=您想将 [name] 安装在哪里?
+SelectDirLabel3=安装程序将安装 [name] 到下列文件夹中。
+SelectDirBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。
+DiskSpaceGBLabel=至少需要有 [gb] GB 的可用磁盘空间。
+DiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盘空间。
+CannotInstallToNetworkDrive=安装程序无法安装到一个网络驱动器。
+CannotInstallToUNCPath=安装程序无法安装到一个UNC路径。
+InvalidPath=您必须输入一个带驱动器卷标的完整路径,例如:%n%nC:\APP%n%n或下列形式的UNC路径:%n%n\\server\share
+InvalidDrive=您选定的驱动器或 UNC 共享不存在或不能访问。请选选择其它位置。
+DiskSpaceWarningTitle=没有足够的磁盘空间
+DiskSpaceWarning=安装程序至少需要 %1 KB 的可用空间才能安装,但选定驱动器只有 %2 KB 的可用空间。%n%n您一定要继续吗?
+DirNameTooLong=文件夹名称或路径太长。
+InvalidDirName=文件夹名称无效。
+BadDirName32=文件夹名称不能包含下列任何字符:%n%n%1
+DirExistsTitle=文件夹已存在
+DirExists=文件夹:%n%n%1%n%n已经存在。您一定要安装到这个文件夹中吗?
+DirDoesntExistTitle=文件夹不存在
+DirDoesntExist=文件夹:%n%n%1%n%n不存在。您想要创建此文件夹吗?
+
+; *** “选择组件”向导页
+WizardSelectComponents=选择组件
+SelectComponentsDesc=您想安装哪些程序的组件?
+SelectComponentsLabel2=选择您想要安装的组件;清除您不想安装的组件。然后点击“下一步”继续。
+FullInstallation=完全安装
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=简洁安装
+CustomInstallation=自定义安装
+NoUninstallWarningTitle=组件已存在
+NoUninstallWarning=安装程序检测到下列组件已在您的电脑中安装:%n%n%1%n%n取消选定这些组件将不能卸载它们。%n%n您一定要继续吗?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=当前选择的组件至少需要 [gb] GB 的磁盘空间。
+ComponentsDiskSpaceMBLabel=当前选择的组件至少需要 [mb] MB 的磁盘空间。
+
+; *** “选择附加任务”向导页
+WizardSelectTasks=选择附加任务
+SelectTasksDesc=您想要安装程序执行哪些附加任务?
+SelectTasksLabel2=选择您想要安装程序在安装 [name] 时执行的附加任务,然后点击“下一步”。
+
+; *** “选择开始菜单文件夹”向导页
+WizardSelectProgramGroup=选择开始菜单文件夹
+SelectStartMenuFolderDesc=安装程序应该在哪里放置程序的快捷方式?
+SelectStartMenuFolderLabel3=安装程序现在将在下列开始菜单文件夹中创建程序的快捷方式。
+SelectStartMenuFolderBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。
+MustEnterGroupName=您必须输入一个文件夹名。
+GroupNameTooLong=文件夹名或路径太长。
+InvalidGroupName=文件夹名无效。
+BadGroupName=文件夹名不能包含下列任何字符:%n%n%1
+NoProgramGroupCheck2=不创建开始菜单文件夹(&D)
+
+; *** “准备安装”向导页
+WizardReady=准备安装
+ReadyLabel1=安装程序现在准备开始安装 [name] 到您的电脑中。
+ReadyLabel2a=点击“安装”继续此安装程序。如果您想要回顾或修改设置,请点击“上一步”。
+ReadyLabel2b=点击“安装”继续此安装程序?
+ReadyMemoUserInfo=用户信息:
+ReadyMemoDir=目标位置:
+ReadyMemoType=安装类型:
+ReadyMemoComponents=选定组件:
+ReadyMemoGroup=开始菜单文件夹:
+ReadyMemoTasks=附加任务:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=正在下载附加文件...
+ButtonStopDownload=停止下载(&S)
+StopDownload=您确定要停止下载吗?
+ErrorDownloadAborted=下载已中止
+ErrorDownloadFailed=下载失败:%1 %2
+ErrorDownloadSizeFailed=获取下载大小失败:%1 %2
+ErrorFileHash1=校验文件哈希失败:%1
+ErrorFileHash2=无效的文件哈希:预期为 %1,实际为 %2
+ErrorProgress=无效的进度:%1,总共%2
+ErrorFileSize=文件大小错误:预期为 %1,实际为 %2
+
+; *** “正在准备安装”向导页
+WizardPreparing=正在准备安装
+PreparingDesc=安装程序正在准备安装 [name] 到您的电脑中。
+PreviousInstallNotCompleted=先前程序的安装/卸载未完成。您需要重新启动您的电脑才能完成安装。%n%n在重新启动电脑后,再运行安装完成 [name] 的安装。
+CannotContinue=安装程序不能继续。请点击“取消”退出。
+ApplicationsFound=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。
+ApplicationsFound2=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。安装完成后,安装程序将尝试重新启动应用程序。
+CloseApplications=自动关闭该应用程序(&A)
+DontCloseApplications=不要关闭该应用程序(&D)
+ErrorCloseApplications=安装程序无法自动关闭所有应用程序。在继续之前,我们建议您关闭所有使用需要更新的安装程序文件。
+PrepareToInstallNeedsRestart=安装程序必须重新启动计算机。重新启动计算机后,请再次运行安装程序以完成 [name] 的安装。%n%n是否立即重新启动?
+
+; *** “正在安装”向导页
+WizardInstalling=正在安装
+InstallingLabel=安装程序正在安装 [name] 到您的电脑中,请稍等。
+
+; *** “安装完成”向导页
+FinishedHeadingLabel=[name] 安装完成
+FinishedLabelNoIcons=安装程序已在您的电脑中安装了 [name]。
+FinishedLabel=安装程序已在您的电脑中安装了 [name]。此应用程序可以通过选择安装的快捷方式运行。
+ClickFinish=点击“完成”退出安装程序。
+FinishedRestartLabel=要完成 [name] 的安装,安装程序必须重新启动您的电脑。您想要立即重新启动吗?
+FinishedRestartMessage=要完成 [name] 的安装,安装程序必须重新启动您的电脑。%n%n您想要立即重新启动吗?
+ShowReadmeCheck=是,我想查阅自述文件
+YesRadio=是,立即重新启动电脑(&Y)
+NoRadio=否,稍后重新启动电脑(&N)
+; used for example as 'Run MyProg.exe'
+RunEntryExec=运行 %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=查阅 %1
+
+; *** “安装程序需要下一张磁盘”提示
+ChangeDiskTitle=安装程序需要下一张磁盘
+SelectDiskLabel2=请插入磁盘 %1 并点击“确定”。%n%n如果这个磁盘中的文件可以在下列文件夹之外的文件夹中找到,请输入正确的路径或点击“浏览”。
+PathLabel=路径(&P):
+FileNotInDir2=文件“%1”不能在“%2”定位。请插入正确的磁盘或选择其它文件夹。
+SelectDirectoryLabel=请指定下一张磁盘的位置。
+
+; *** 安装状态消息
+SetupAborted=安装程序未完成安装。%n%n请修正这个问题并重新运行安装程序。
+AbortRetryIgnoreSelectAction=选择操作
+AbortRetryIgnoreRetry=重试(&T)
+AbortRetryIgnoreIgnore=忽略错误并继续(&I)
+AbortRetryIgnoreCancel=关闭安装程序
+
+; *** 安装状态消息
+StatusClosingApplications=正在关闭应用程序...
+StatusCreateDirs=正在创建目录...
+StatusExtractFiles=正在解压缩文件...
+StatusCreateIcons=正在创建快捷方式...
+StatusCreateIniEntries=正在创建 INI 条目...
+StatusCreateRegistryEntries=正在创建注册表条目...
+StatusRegisterFiles=正在注册文件...
+StatusSavingUninstall=正在保存卸载信息...
+StatusRunProgram=正在完成安装...
+StatusRestartingApplications=正在重启应用程序...
+StatusRollback=正在撤销更改...
+
+; *** 其它错误
+ErrorInternal2=内部错误:%1
+ErrorFunctionFailedNoCode=%1 失败
+ErrorFunctionFailed=%1 失败;错误代码 %2
+ErrorFunctionFailedWithMessage=%1 失败;错误代码 %2.%n%3
+ErrorExecutingProgram=不能执行文件:%n%1
+
+; *** 注册表错误
+ErrorRegOpenKey=打开注册表项时出错:%n%1\%2
+ErrorRegCreateKey=创建注册表项时出错:%n%1\%2
+ErrorRegWriteKey=写入注册表项时出错:%n%1\%2
+
+; *** INI 错误
+ErrorIniEntry=在文件“%1”中创建INI条目时出错。
+
+; *** 文件复制错误
+FileAbortRetryIgnoreSkipNotRecommended=跳过这个文件(&S) (不推荐)
+FileAbortRetryIgnoreIgnoreNotRecommended=忽略错误并继续(&I) (不推荐)
+SourceIsCorrupted=源文件已损坏
+SourceDoesntExist=源文件“%1”不存在
+ExistingFileReadOnly2=无法替换现有文件,因为它是只读的。
+ExistingFileReadOnlyRetry=移除只读属性并重试(&R)
+ExistingFileReadOnlyKeepExisting=保留现有文件(&K)
+ErrorReadingExistingDest=尝试读取现有文件时出错:
+FileExistsSelectAction=选择操作
+FileExists2=文件已经存在。
+FileExistsOverwriteExisting=覆盖已经存在的文件(&O)
+FileExistsKeepExisting=保留现有的文件(&K)
+FileExistsOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D)
+ExistingFileNewerSelectAction=选择操作
+ExistingFileNewer2=现有的文件比安装程序将要安装的文件更新。
+ExistingFileNewerOverwriteExisting=覆盖已经存在的文件(&O)
+ExistingFileNewerKeepExisting=保留现有的文件(&K) (推荐)
+ExistingFileNewerOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D)
+ErrorChangingAttr=尝试改变下列现有的文件的属性时出错:
+ErrorCreatingTemp=尝试在目标目录创建文件时出错:
+ErrorReadingSource=尝试读取下列源文件时出错:
+ErrorCopying=尝试复制下列文件时出错:
+ErrorReplacingExistingFile=尝试替换现有的文件时出错:
+ErrorRestartReplace=重新启动替换失败:
+ErrorRenamingTemp=尝试重新命名以下目标目录中的一个文件时出错:
+ErrorRegisterServer=无法注册 DLL/OCX:%1
+ErrorRegSvr32Failed=RegSvr32 失败;退出代码 %1
+ErrorRegisterTypeLib=无法注册类型库:%1
+
+; *** 卸载显示名字标记
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32位
+UninstallDisplayNameMark64Bit=64位
+UninstallDisplayNameMarkAllUsers=所有用户
+UninstallDisplayNameMarkCurrentUser=当前用户
+
+; *** 安装后错误
+ErrorOpeningReadme=尝试打开自述文件时出错。
+ErrorRestartingComputer=安装程序不能重新启动电脑,请手动重启。
+
+; *** 卸载消息
+UninstallNotFound=文件“%1”不存在。无法卸载。
+UninstallOpenError=文件“%1”不能打开。无法卸载。
+UninstallUnsupportedVer=此版本的卸载程序无法识别卸载日志文件“%1”的格式。无法卸载
+UninstallUnknownEntry=在卸载日志中遇到一个未知的条目 (%1)
+ConfirmUninstall=您确定要运行 %1 卸载向导吗?
+UninstallOnlyOnWin64=这个安装程序只能在64位Windows中进行卸载。
+OnlyAdminCanUninstall=这个安装的程序需要有管理员权限的用户才能卸载。
+UninstallStatusLabel=正在从您的电脑中删除 %1,请稍等。
+UninstalledAll=%1 已顺利地从您的电脑中删除。
+UninstalledMost=%1 卸载完成。%n%n有一些内容无法被删除。您可以手动删除它们。
+UninstalledAndNeedsRestart=要完成 %1 的卸载,您的电脑必须重新启动。%n%n您想立即重新启动电脑吗?
+UninstallDataCorrupted=文件“%1”已损坏,无法卸载
+
+; *** 卸载状态消息
+ConfirmDeleteSharedFileTitle=删除共享文件吗?
+ConfirmDeleteSharedFile2=系统中包含的下列共享文件已经不再被其它程序使用。您想要卸载程序删除这些共享文件吗?%n%n如果这些文件被删除,但还有程序正在使用这些文件,这些程序可能不能正确执行。如果您不能确定,选择“否”。把这些文件保留在系统中以免引起问题。
+SharedFileNameLabel=文件名:
+SharedFileLocationLabel=位置:
+WizardUninstalling=卸载状态
+StatusUninstalling=正在卸载 %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=正在安装 %1。
+ShutdownBlockReasonUninstallingApp=正在卸载 %1。
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 版本 %2
+AdditionalIcons=附加快捷方式:
+CreateDesktopIcon=创建桌面快捷方式(&D)
+CreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q)
+ProgramOnTheWeb=%1 网站
+UninstallProgram=卸载 %1
+LaunchProgram=运行 %1
+AssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A)
+AssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联...
+AutoStartProgramGroupDescription=启动组:
+AutoStartProgram=自动启动 %1
+AddonHostProgramNotFound=%1无法找到您所选择的文件夹。%n%n您想要继续吗?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=选择安装模式
+SelectSetupInstallModeDesc=VCMI 可以为所有用户或仅为您安装。
+SelectSetupInstallModeSubTitle=选择您的首选安装模式:
+InstallForAllUsers=为所有用户安装
+InstallForAllUsers1=需要管理员权限
+InstallForMeOnly=仅为我安装
+InstallForMeOnly1=首次启动游戏时会出现防火墙提示
+InstallForMeOnly2=如果无法允许防火墙规则,则局域网游戏将无法运行
+SystemIntegration=系统集成
+CreateDesktopShortcuts=创建桌面快捷方式
+CreateStartMenuShortcuts=创建开始菜单快捷方式
+AssociateH3MFiles=将 .h3m 文件与 VCMI 地图编辑器关联
+AssociateVCMIMapFiles=将 .vmap 和 .vcmp 文件与 VCMI 地图编辑器关联
+VCMISettings=VCMI 配置
+AddFirewallRules=为 VCMI 添加防火墙规则
+CopyH3Files=自动将 Heroes III 所需文件复制到 VCMI
+RunVCMILauncherAfterInstall=启动 VCMI 启动器
+ShortcutMapEditor=VCMI 地图编辑器
+ShortcutLauncher=VCMI 启动器
+ShortcutWebPage=VCMI 网站
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=启动 VCMI 启动器
+ShortcutMapEditorComment=打开 VCMI 地图编辑器
+ShortcutWebPageComment=访问 VCMI 官方网站
+ShortcutDiscordComment=访问 VCMI 官方 Discord
+DeleteUserData=删除用户数据
+Uninstall=卸载
+Warning=警告
+VMAPDescription=VCMI 地图文件
+VCMPDescription=VCMI 战役文件
+H3MDescription=Heroes 3 地图文件

+ 411 - 0
CI/wininstaller/lang/Czech.isl

@@ -0,0 +1,411 @@
+; *******************************************************
+; ***                                                 ***
+; *** Inno Setup version 6.1.0+ Czech messages        ***
+; ***                                                 ***
+; *** Original Author:                                ***
+; ***                                                 ***
+; ***   Ivo Bauer ([email protected])                      ***
+; ***                                                 ***
+; *** Contributors:                                   ***
+; ***                                                 ***
+; ***   Lubos Stanek ([email protected])    ***
+; ***   Vitezslav Svejdar ([email protected]) ***
+; ***   Jiri Fenz ([email protected])                ***
+; ***                                                 ***
+; *******************************************************
+
+[LangOptions]
+LanguageName=<010C>e<0161>tina
+LanguageID=$0405
+LanguageCodePage=1250
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Průvodce instalací
+SetupWindowTitle=Průvodce instalací - %1
+UninstallAppTitle=Průvodce odinstalací
+UninstallAppFullTitle=Průvodce odinstalací - %1
+
+; *** Misc. common
+InformationTitle=Informace
+ConfirmTitle=Potvrzení
+ErrorTitle=Chyba
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Vítá Vás průvodce instalací produktu %1. Chcete pokračovat?
+LdrCannotCreateTemp=Nelze vytvořit dočasný soubor. Průvodce instalací bude ukončen
+LdrCannotExecTemp=Nelze spustit soubor v dočasné složce. Průvodce instalací bude ukončen
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nChyba %2: %3
+SetupFileMissing=Instalační složka neobsahuje soubor %1. Opravte prosím tuto chybu nebo si opatřete novou kopii tohoto produktu.
+SetupFileCorrupt=Soubory průvodce instalací jsou poškozeny. Opatřete si prosím novou kopii tohoto produktu.
+SetupFileCorruptOrWrongVer=Soubory průvodce instalací jsou poškozeny nebo se neslučují s touto verzí průvodce instalací. Opravte prosím tuto chybu nebo si opatřete novou kopii tohoto produktu.
+InvalidParameter=Příkazový řádek obsahuje neplatný parametr:%n%n%1
+SetupAlreadyRunning=Průvodce instalací je již spuštěn.
+WindowsVersionNotSupported=Tento program nelze spustit na vaší verzi Windows. Ujistěte se, že používáte správnou architekturu Windows (32bitovou nebo 64bitovou) a odpovídající verzi tohoto programu.
+WindowsServicePackRequired=Tento produkt vyžaduje %1 Service Pack %2 nebo vyšší.
+NotOnThisPlatform=Tento produkt nelze spustit ve %1.
+OnlyOnThisPlatform=Tento produkt musí být spuštěn ve %1.
+OnlyOnTheseArchitectures=Tento produkt lze nainstalovat pouze ve verzích MS Windows s podporou architektury procesorů:%n%n%1
+WinVersionTooLowError=Tento produkt vyžaduje %1 verzi %2 nebo vyšší.
+WinVersionTooHighError=Tento produkt nelze nainstalovat ve %1 verzi %2 nebo vyšší.
+AdminPrivilegesRequired=K instalaci tohoto produktu musíte být přihlášeni s oprávněními správce.
+PowerUserPrivilegesRequired=K instalaci tohoto produktu musíte být přihlášeni s oprávněními správce nebo člena skupiny Power Users.
+SetupAppRunningError=Průvodce instalací zjistil, že produkt %1 je nyní spuštěn.%n%nZavřete prosím všechny instance tohoto produktu a pak pokračujte klepnutím na tlačítko OK, nebo ukončete instalaci tlačítkem Zrušit.
+UninstallAppRunningError=Průvodce odinstalací zjistil, že produkt %1 je nyní spuštěn.%n%nZavřete prosím všechny instance tohoto produktu a pak pokračujte klepnutím na tlačítko OK, nebo ukončete odinstalaci tlačítkem Zrušit.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Výběr režimu průvodce instalací
+PrivilegesRequiredOverrideInstruction=Zvolte režim instalace
+PrivilegesRequiredOverrideText1=Produkt %1 lze nainstalovat pro všechny uživatele (musíte být přihlášeni s oprávněními správce), nebo pouze pro Vás.
+PrivilegesRequiredOverrideText2=Produkt %1 lze nainstalovat pouze pro Vás, nebo pro všechny uživatele (musíte být přihlášeni s oprávněními správce).
+PrivilegesRequiredOverrideAllUsers=Nainstalovat pro &všechny uživatele
+PrivilegesRequiredOverrideAllUsersRecommended=Nainstalovat pro &všechny uživatele (doporučuje se)
+PrivilegesRequiredOverrideCurrentUser=Nainstalovat pouze pro &mě
+PrivilegesRequiredOverrideCurrentUserRecommended=Nainstalovat pouze pro &mě (doporučuje se)
+
+; *** Misc. errors
+ErrorCreatingDir=Průvodci instalací se nepodařilo vytvořit složku "%1"
+ErrorTooManyFilesInDir=Nelze vytvořit soubor ve složce "%1", protože tato složka již obsahuje příliš mnoho souborů
+
+; *** Setup common messages
+ExitSetupTitle=Ukončit průvodce instalací
+ExitSetupMessage=Instalace nebyla zcela dokončena. Jestliže nyní průvodce instalací ukončíte, produkt nebude nainstalován.%n%nPrůvodce instalací můžete znovu spustit kdykoliv jindy a instalaci dokončit.%n%nChcete průvodce instalací ukončit?
+AboutSetupMenuItem=&O průvodci instalací...
+AboutSetupTitle=O průvodci instalací
+AboutSetupMessage=%1 verze %2%n%3%n%n%1 domovská stránka:%n%4
+AboutSetupNote=
+TranslatorNote=Czech translation maintained by Ivo Bauer ([email protected]), Lubos Stanek ([email protected]), Vitezslav Svejdar ([email protected]) and Jiri Fenz ([email protected])
+
+; *** Buttons
+ButtonBack=< &Zpět
+ButtonNext=&Další >
+ButtonInstall=&Instalovat
+ButtonOK=OK
+ButtonCancel=Zrušit
+ButtonYes=&Ano
+ButtonYesToAll=Ano &všem
+ButtonNo=&Ne
+ButtonNoToAll=N&e všem
+ButtonFinish=&Dokončit
+ButtonBrowse=&Procházet...
+ButtonWizardBrowse=&Procházet...
+ButtonNewFolder=&Vytvořit novou složku
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Výběr jazyka průvodce instalací
+SelectLanguageLabel=Zvolte jazyk, který se má použít během instalace.
+
+; *** Common wizard text
+ClickNext=Pokračujte klepnutím na tlačítko Další, nebo ukončete průvodce instalací tlačítkem Zrušit.
+BeveledLabel=
+BrowseDialogTitle=Vyhledat složku
+BrowseDialogLabel=Z níže uvedeného seznamu vyberte složku a klepněte na tlačítko OK.
+NewFolderName=Nová složka
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Vítá Vás průvodce instalací produktu [name].
+WelcomeLabel2=Produkt [name/ver] bude nainstalován na Váš počítač.%n%nDříve než budete pokračovat, doporučuje se zavřít veškeré spuštěné aplikace.
+
+; *** "Password" wizard page
+WizardPassword=Heslo
+PasswordLabel1=Tato instalace je chráněna heslem.
+PasswordLabel3=Zadejte prosím heslo a pokračujte klepnutím na tlačítko Další. Při zadávání hesla rozlišujte malá a velká písmena.
+PasswordEditLabel=&Heslo:
+IncorrectPassword=Zadané heslo není správné. Zkuste to prosím znovu.
+
+; *** "License Agreement" wizard page
+WizardLicense=Licenční smlouva
+LicenseLabel=Dříve než budete pokračovat, přečtěte si prosím pozorně následující důležité informace.
+LicenseLabel3=Přečtěte si prosím následující licenční smlouvu. Aby instalace mohla pokračovat, musíte souhlasit s podmínkami této smlouvy.
+LicenseAccepted=&Souhlasím s podmínkami licenční smlouvy
+LicenseNotAccepted=&Nesouhlasím s podmínkami licenční smlouvy
+
+; *** "Information" wizard pages
+WizardInfoBefore=Informace
+InfoBeforeLabel=Dříve než budete pokračovat, přečtěte si prosím pozorně následující důležité informace.
+InfoBeforeClickLabel=Pokračujte v instalaci klepnutím na tlačítko Další.
+WizardInfoAfter=Informace
+InfoAfterLabel=Dříve než budete pokračovat, přečtěte si prosím pozorně následující důležité informace.
+InfoAfterClickLabel=Pokračujte v instalaci klepnutím na tlačítko Další.
+
+; *** "User Information" wizard page
+WizardUserInfo=Informace o uživateli
+UserInfoDesc=Zadejte prosím požadované údaje.
+UserInfoName=&Uživatelské jméno:
+UserInfoOrg=&Společnost:
+UserInfoSerial=Sé&riové číslo:
+UserInfoNameRequired=Musíte zadat uživatelské jméno.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Zvolte cílové umístění
+SelectDirDesc=Kam má být produkt [name] nainstalován?
+SelectDirLabel3=Průvodce nainstaluje produkt [name] do následující složky.
+SelectDirBrowseLabel=Pokračujte klepnutím na tlačítko Další. Chcete-li zvolit jinou složku, klepněte na tlačítko Procházet.
+DiskSpaceGBLabel=Instalace vyžaduje nejméně [gb] GB volného místa na disku.
+DiskSpaceMBLabel=Instalace vyžaduje nejméně [mb] MB volného místa na disku.
+CannotInstallToNetworkDrive=Průvodce instalací nemůže instalovat do síťové jednotky.
+CannotInstallToUNCPath=Průvodce instalací nemůže instalovat do cesty UNC.
+InvalidPath=Musíte zadat úplnou cestu včetně písmene jednotky; například:%n%nC:\Aplikace%n%nnebo cestu UNC ve tvaru:%n%n\\server\sdílená složka
+InvalidDrive=Vámi zvolená jednotka nebo cesta UNC neexistuje nebo není dostupná. Zvolte prosím jiné umístění.
+DiskSpaceWarningTitle=Nedostatek místa na disku
+DiskSpaceWarning=Průvodce instalací vyžaduje nejméně %1 KB volného místa pro instalaci produktu, ale na zvolené jednotce je dostupných pouze %2 KB.%n%nChcete přesto pokračovat?
+DirNameTooLong=Název složky nebo cesta jsou příliš dlouhé.
+InvalidDirName=Název složky není platný.
+BadDirName32=Název složky nemůže obsahovat žádný z následujících znaků:%n%n%1
+DirExistsTitle=Složka existuje
+DirExists=Složka:%n%n%1%n%njiž existuje. Má se přesto instalovat do této složky?
+DirDoesntExistTitle=Složka neexistuje
+DirDoesntExist=Složka:%n%n%1%n%nneexistuje. Má být tato složka vytvořena?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Zvolte součásti
+SelectComponentsDesc=Jaké součásti mají být nainstalovány?
+SelectComponentsLabel2=Zaškrtněte součásti, které mají být nainstalovány; součásti, které se nemají instalovat, ponechte nezaškrtnuté. Pokračujte klepnutím na tlačítko Další.
+FullInstallation=Úplná instalace
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Kompaktní instalace
+CustomInstallation=Volitelná instalace
+NoUninstallWarningTitle=Součásti existují
+NoUninstallWarning=Průvodce instalací zjistil, že následující součásti jsou již na Vašem počítači nainstalovány:%n%n%1%n%nNezahrnete-li tyto součásti do výběru, nebudou nyní odinstalovány.%n%nChcete přesto pokračovat?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Vybrané součásti vyžadují nejméně [gb] GB místa na disku.
+ComponentsDiskSpaceMBLabel=Vybrané součásti vyžadují nejméně [mb] MB místa na disku.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Zvolte další úlohy
+SelectTasksDesc=Které další úlohy mají být provedeny?
+SelectTasksLabel2=Zvolte další úlohy, které mají být provedeny v průběhu instalace produktu [name], a pak pokračujte klepnutím na tlačítko Další.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Vyberte složku v nabídce Start
+SelectStartMenuFolderDesc=Kam má průvodce instalací umístit zástupce aplikace?
+SelectStartMenuFolderLabel3=Průvodce instalací vytvoří zástupce aplikace v následující složce nabídky Start.
+SelectStartMenuFolderBrowseLabel=Pokračujte klepnutím na tlačítko Další. Chcete-li zvolit jinou složku, klepněte na tlačítko Procházet.
+MustEnterGroupName=Musíte zadat název složky.
+GroupNameTooLong=Název složky nebo cesta jsou příliš dlouhé.
+InvalidGroupName=Název složky není platný.
+BadGroupName=Název složky nemůže obsahovat žádný z následujících znaků:%n%n%1
+NoProgramGroupCheck2=&Nevytvářet složku v nabídce Start
+
+; *** "Ready to Install" wizard page
+WizardReady=Instalace je připravena
+ReadyLabel1=Průvodce instalací je nyní připraven nainstalovat produkt [name] na Váš počítač.
+ReadyLabel2a=Pokračujte v instalaci klepnutím na tlačítko Instalovat. Přejete-li si změnit některá nastavení instalace, klepněte na tlačítko Zpět.
+ReadyLabel2b=Pokračujte v instalaci klepnutím na tlačítko Instalovat.
+ReadyMemoUserInfo=Informace o uživateli:
+ReadyMemoDir=Cílové umístění:
+ReadyMemoType=Typ instalace:
+ReadyMemoComponents=Vybrané součásti:
+ReadyMemoGroup=Složka v nabídce Start:
+ReadyMemoTasks=Další úlohy:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Stahují se další soubory...
+ButtonStopDownload=&Zastavit stahování
+StopDownload=Určitě chcete stahování zastavit?
+ErrorDownloadAborted=Stahování přerušeno
+ErrorDownloadFailed=Stahování selhalo: %1 %2
+ErrorDownloadSizeFailed=Nepodařilo se zjistit velikost: %1 %2
+ErrorFileHash1=Nepodařilo se určit kontrolní součet souboru: %1
+ErrorFileHash2=Neplatný kontrolní součet souboru: očekáváno %1, nalezeno %2
+ErrorProgress=Neplatný průběh: %1 of %2
+ErrorFileSize=Neplatná velikost souboru: očekáváno %1, nalezeno %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Příprava k instalaci
+PreparingDesc=Průvodce instalací připravuje instalaci produktu [name] na Váš počítač.
+PreviousInstallNotCompleted=Instalace/odinstalace předchozího produktu nebyla zcela dokončena. Aby mohla být dokončena, musíte restartovat Váš počítač.%n%nPo restartování Vašeho počítače spusťte znovu průvodce instalací, aby bylo možné dokončit instalaci produktu [name].
+CannotContinue=Průvodce instalací nemůže pokračovat. Ukončete prosím průvodce instalací klepnutím na tlačítko Zrušit.
+ApplicationsFound=Následující aplikace přistupují k souborům, které je třeba během instalace aktualizovat. Doporučuje se povolit průvodci instalací, aby tyto aplikace automaticky zavřel.
+ApplicationsFound2=Následující aplikace přistupují k souborům, které je třeba během instalace aktualizovat. Doporučuje se povolit průvodci instalací, aby tyto aplikace automaticky zavřel. Po dokončení instalace se průvodce instalací pokusí aplikace restartovat.
+CloseApplications=&Zavřít aplikace automaticky
+DontCloseApplications=&Nezavírat aplikace
+ErrorCloseApplications=Průvodci instalací se nepodařilo automaticky zavřít všechny aplikace. Dříve než budete pokračovat, doporučuje se zavřít veškeré aplikace přistupující k souborům, které je třeba během instalace aktualizovat.
+PrepareToInstallNeedsRestart=Průvodce instalací musí restartovat Váš počítač. Po restartování Vašeho počítače spusťte průvodce instalací znovu, aby bylo možné dokončit instalaci produktu [name].%n%nChcete jej restartovat nyní?
+
+; *** "Installing" wizard page
+WizardInstalling=Instalování
+InstallingLabel=Čekejte prosím, dokud průvodce instalací nedokončí instalaci produktu [name] na Váš počítač.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Dokončuje se instalace produktu [name]
+FinishedLabelNoIcons=Průvodce instalací dokončil instalaci produktu [name] na Váš počítač.
+FinishedLabel=Průvodce instalací dokončil instalaci produktu [name] na Váš počítač. Produkt lze spustit pomocí nainstalovaných zástupců.
+ClickFinish=Ukončete průvodce instalací klepnutím na tlačítko Dokončit.
+FinishedRestartLabel=K dokončení instalace produktu [name] je nezbytné, aby průvodce instalací restartoval Váš počítač. Chcete jej restartovat nyní?
+FinishedRestartMessage=K dokončení instalace produktu [name] je nezbytné, aby průvodce instalací restartoval Váš počítač.%n%nChcete jej restartovat nyní?
+ShowReadmeCheck=Ano, chci zobrazit dokument "ČTIMNE"
+YesRadio=&Ano, chci nyní restartovat počítač
+NoRadio=&Ne, počítač restartuji později
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Spustit %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Zobrazit %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Průvodce instalací vyžaduje další disk
+SelectDiskLabel2=Vložte prosím disk %1 a klepněte na tlačítko OK.%n%nPokud se soubory na tomto disku nacházejí v jiné složce než v té, která je zobrazena níže, pak zadejte správnou cestu nebo ji zvolte klepnutím na tlačítko Procházet.
+PathLabel=&Cesta:
+FileNotInDir2=Soubor "%1" nelze najít v "%2". Vložte prosím správný disk nebo zvolte jinou složku.
+SelectDirectoryLabel=Specifikujte prosím umístění dalšího disku.
+
+; *** Installation phase messages
+SetupAborted=Instalace nebyla zcela dokončena.%n%nOpravte prosím chybu a spusťte průvodce instalací znovu.
+AbortRetryIgnoreSelectAction=Zvolte akci
+AbortRetryIgnoreRetry=&Zopakovat akci
+AbortRetryIgnoreIgnore=&Ignorovat chybu a pokračovat
+AbortRetryIgnoreCancel=Zrušit instalaci
+
+; *** Installation status messages
+StatusClosingApplications=Zavírají se aplikace...
+StatusCreateDirs=Vytvářejí se složky...
+StatusExtractFiles=Extrahují se soubory...
+StatusCreateIcons=Vytvářejí se zástupci...
+StatusCreateIniEntries=Vytvářejí se záznamy v inicializačních souborech...
+StatusCreateRegistryEntries=Vytvářejí se záznamy v systémovém registru...
+StatusRegisterFiles=Registrují se soubory...
+StatusSavingUninstall=Ukládají se informace pro odinstalaci produktu...
+StatusRunProgram=Dokončuje se instalace...
+StatusRestartingApplications=Restartují se aplikace...
+StatusRollback=Provedené změny se vracejí zpět...
+
+; *** Misc. errors
+ErrorInternal2=Interní chyba: %1
+ErrorFunctionFailedNoCode=Funkce %1 selhala
+ErrorFunctionFailed=Funkce %1 selhala; kód %2
+ErrorFunctionFailedWithMessage=Funkce %1 selhala; kód %2.%n%3
+ErrorExecutingProgram=Nelze spustit soubor:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Došlo k chybě při otevírání klíče systémového registru:%n%1\%2
+ErrorRegCreateKey=Došlo k chybě při vytváření klíče systémového registru:%n%1\%2
+ErrorRegWriteKey=Došlo k chybě při zápisu do klíče systémového registru:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Došlo k chybě při vytváření záznamu v inicializačním souboru "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Přeskočit tento soubor (nedoporučuje se)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorovat chybu a pokračovat (nedoporučuje se)
+SourceIsCorrupted=Zdrojový soubor je poškozen
+SourceDoesntExist=Zdrojový soubor "%1" neexistuje
+ExistingFileReadOnly2=Nelze nahradit existující soubor, protože je určen pouze pro čtení.
+ExistingFileReadOnlyRetry=&Odstranit atribut "pouze pro čtení" a zopakovat akci
+ExistingFileReadOnlyKeepExisting=&Ponechat existující soubor
+ErrorReadingExistingDest=Došlo k chybě při pokusu o čtení existujícího souboru:
+FileExistsSelectAction=Zvolte akci
+FileExists2=Soubor již existuje.
+FileExistsOverwriteExisting=&Nahradit existující soubor
+FileExistsKeepExisting=&Ponechat existující soubor
+FileExistsOverwriteOrKeepAll=&Zachovat se stejně u dalších konfliktů
+ExistingFileNewerSelectAction=Zvolte akci
+ExistingFileNewer2=Existující soubor je novější než ten, který se průvodce instalací pokouší instalovat.
+ExistingFileNewerOverwriteExisting=&Nahradit existující soubor
+ExistingFileNewerKeepExisting=&Ponechat existující soubor (doporučuje se)
+ExistingFileNewerOverwriteOrKeepAll=&Zachovat se stejně u dalších konfliktů
+ErrorChangingAttr=Došlo k chybě při pokusu o změnu atributů existujícího souboru:
+ErrorCreatingTemp=Došlo k chybě při pokusu o vytvoření souboru v cílové složce:
+ErrorReadingSource=Došlo k chybě při pokusu o čtení zdrojového souboru:
+ErrorCopying=Došlo k chybě při pokusu o zkopírování souboru:
+ErrorReplacingExistingFile=Došlo k chybě při pokusu o nahrazení existujícího souboru:
+ErrorRestartReplace=Funkce "RestartReplace" průvodce instalací selhala:
+ErrorRenamingTemp=Došlo k chybě při pokusu o přejmenování souboru v cílové složce:
+ErrorRegisterServer=Nelze zaregistrovat DLL/OCX: %1
+ErrorRegSvr32Failed=Volání RegSvr32 selhalo s návratovým kódem %1
+ErrorRegisterTypeLib=Nelze zaregistrovat typovou knihovnu: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32bitový
+UninstallDisplayNameMark64Bit=64bitový
+UninstallDisplayNameMarkAllUsers=Všichni uživatelé
+UninstallDisplayNameMarkCurrentUser=Aktuální uživatel
+
+; *** Post-installation errors
+ErrorOpeningReadme=Došlo k chybě při pokusu o otevření dokumentu "ČTIMNE".
+ErrorRestartingComputer=Průvodci instalací se nepodařilo restartovat Váš počítač. Restartujte jej prosím ručně.
+
+; *** Uninstaller messages
+UninstallNotFound=Soubor "%1" neexistuje. Produkt nelze odinstalovat.
+UninstallOpenError=Soubor "%1" nelze otevřít. Produkt nelze odinstalovat.
+UninstallUnsupportedVer=Formát souboru se záznamy k odinstalaci produktu "%1" nebyl touto verzí průvodce odinstalací rozpoznán. Produkt nelze odinstalovat
+UninstallUnknownEntry=V souboru obsahujícím informace k odinstalaci produktu byla zjištěna neznámá položka (%1)
+ConfirmUninstall=Opravdu chcete spustit průvodce odinstalací %1?
+UninstallOnlyOnWin64=Tento produkt lze odinstalovat pouze v 64-bitových verzích MS Windows.
+OnlyAdminCanUninstall=K odinstalaci tohoto produktu musíte být přihlášeni s oprávněními správce.
+UninstallStatusLabel=Čekejte prosím, dokud produkt %1 nebude odinstalován z Vašeho počítače.
+UninstalledAll=Produkt %1 byl z Vašeho počítače úspěšně odinstalován.
+UninstalledMost=Produkt %1 byl odinstalován.%n%nNěkteré jeho součásti se odinstalovat nepodařilo. Můžete je však odstranit ručně.
+UninstalledAndNeedsRestart=K dokončení odinstalace produktu %1 je nezbytné, aby průvodce odinstalací restartoval Váš počítač.%n%nChcete jej restartovat nyní?
+UninstallDataCorrupted=Soubor "%1" je poškozen. Produkt nelze odinstalovat
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Odebrat sdílený soubor?
+ConfirmDeleteSharedFile2=Systém indikuje, že následující sdílený soubor není používán žádnými jinými aplikacemi. Má být tento sdílený soubor průvodcem odinstalací odstraněn?%n%nPokud některé aplikace tento soubor používají, pak po jeho odstranění nemusejí pracovat správně. Pokud si nejste jisti, zvolte Ne. Ponechání tohoto souboru ve Vašem systému nezpůsobí žádnou škodu.
+SharedFileNameLabel=Název souboru:
+SharedFileLocationLabel=Umístění:
+WizardUninstalling=Stav odinstalace
+StatusUninstalling=Probíhá odinstalace produktu %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Probíhá instalace produktu %1.
+ShutdownBlockReasonUninstallingApp=Probíhá odinstalace produktu %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 verze %2
+AdditionalIcons=Další zástupci:
+CreateDesktopIcon=Vytvořit zástupce na &ploše
+CreateQuickLaunchIcon=Vytvořit zástupce na panelu &Snadné spuštění
+ProgramOnTheWeb=Aplikace %1 na internetu
+UninstallProgram=Odinstalovat aplikaci %1
+LaunchProgram=Spustit aplikaci %1
+AssocFileExtension=Vytvořit &asociaci mezi soubory typu %2 a aplikací %1
+AssocingFileExtension=Vytváří se asociace mezi soubory typu %2 a aplikací %1...
+AutoStartProgramGroupDescription=Po spuštění:
+AutoStartProgram=Spouštět aplikaci %1 automaticky
+AddonHostProgramNotFound=Aplikace %1 nebyla ve Vámi zvolené složce nalezena.%n%nChcete přesto pokračovat?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Vyberte režim instalace
+SelectSetupInstallModeDesc=VCMI může být nainstalováno pro všechny uživatele nebo pouze pro vás.
+SelectSetupInstallModeSubTitle=Vyberte preferovaný režim instalace:
+InstallForAllUsers=Nainstalovat pro všechny uživatele
+InstallForAllUsers1=Vyžaduje administrátorská práva
+InstallForMeOnly=Nainstalovat pouze pro mě
+InstallForMeOnly1=Při prvním spuštění hry se zobrazí výzva brány firewall
+InstallForMeOnly2=LAN hry nebudou fungovat, pokud nebude možné povolit pravidlo brány firewall
+SystemIntegration=Systémová integrace
+CreateDesktopShortcuts=Vytvořit zástupce na ploše
+CreateStartMenuShortcuts=Vytvořit zástupce v nabídce Start
+AssociateH3MFiles=Asociovat .h3m soubory s editorem map VCMI
+AssociateVCMIMapFiles=Asociovat .vmap a .vcmp soubory s editorem map VCMI
+VCMISettings=Konfigurace VCMI
+AddFirewallRules=Přidat pravidla brány firewall pro VCMI
+CopyH3Files=Automaticky zkopírovat požadované soubory Heroes III do VCMI
+RunVCMILauncherAfterInstall=Spustit VCMI Launcher
+ShortcutMapEditor=Editor map VCMI
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=VCMI Web
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=Spustit VCMI Launcher
+ShortcutMapEditorComment=Otevřít editor map VCMI
+ShortcutWebPageComment=Navštivte oficiální web VCMI
+ShortcutDiscordComment=Navštivte oficiální Discord VCMI
+DeleteUserData=Odstranit uživatelská data
+Uninstall=Odinstalovat
+Warning=Varování
+VMAPDescription=Soubor mapy VCMI
+VCMPDescription=Soubor kampaně VCMI
+H3MDescription=Soubor mapy Heroes 3

+ 419 - 0
CI/wininstaller/lang/English.isl

@@ -0,0 +1,419 @@
+; *** Inno Setup version 6.1.0+ English messages ***
+;
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=English
+LanguageID=$0409
+LanguageCodePage=0
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Setup
+SetupWindowTitle=Setup - %1
+UninstallAppTitle=Uninstall
+UninstallAppFullTitle=%1 Uninstall
+
+; *** Misc. common
+InformationTitle=Information
+ConfirmTitle=Confirm
+ErrorTitle=Error
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=This will install %1. Do you wish to continue?
+LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted
+LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nError %2: %3
+SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program.
+SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program.
+SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program.
+InvalidParameter=An invalid parameter was passed on the command line:%n%n%1
+SetupAlreadyRunning=Setup is already running.
+WindowsVersionNotSupported=This program cannot run on your version of Windows. Please ensure you are using the correct Windows architecture (32-bit or 64-bit) and version for this program.
+WindowsServicePackRequired=This program requires %1 Service Pack %2 or later.
+NotOnThisPlatform=This program will not run on %1.
+OnlyOnThisPlatform=This program must be run on %1.
+OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1
+WinVersionTooLowError=This program requires %1 version %2 or later.
+WinVersionTooHighError=This program cannot be installed on %1 version %2 or later.
+AdminPrivilegesRequired=You must be logged in as an administrator when installing this program.
+PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program.
+SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit.
+UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Select Setup Install Mode
+PrivilegesRequiredOverrideInstruction=Select install mode
+PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only.
+PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges).
+PrivilegesRequiredOverrideAllUsers=Install for &all users
+PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended)
+PrivilegesRequiredOverrideCurrentUser=Install for &me only
+PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended)
+
+; *** Misc. errors
+ErrorCreatingDir=Setup was unable to create the directory "%1"
+ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files
+
+; *** Setup common messages
+ExitSetupTitle=Exit Setup
+ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup?
+AboutSetupMenuItem=&About Setup...
+AboutSetupTitle=About Setup
+AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< &Back
+ButtonNext=&Next >
+ButtonInstall=&Install
+ButtonOK=OK
+ButtonCancel=Cancel
+ButtonYes=&Yes
+ButtonYesToAll=Yes to &All
+ButtonNo=&No
+ButtonNoToAll=N&o to All
+ButtonFinish=&Finish
+ButtonBrowse=&Browse...
+ButtonWizardBrowse=B&rowse...
+ButtonNewFolder=&Make New Folder
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Select Setup Language
+SelectLanguageLabel=Select the language to use during the installation.
+
+; *** Common wizard text
+ClickNext=Click Next to continue, or Cancel to exit Setup.
+BeveledLabel=
+BrowseDialogTitle=Browse For Folder
+BrowseDialogLabel=Select a folder in the list below, then click OK.
+NewFolderName=New Folder
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Welcome to the [name] Setup Wizard
+WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing.
+
+; *** "Password" wizard page
+WizardPassword=Password
+PasswordLabel1=This installation is password protected.
+PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive.
+PasswordEditLabel=&Password:
+IncorrectPassword=The password you entered is not correct. Please try again.
+
+; *** "License Agreement" wizard page
+WizardLicense=License Agreement
+LicenseLabel=Please read the following important information before continuing.
+LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation.
+LicenseAccepted=I &accept the agreement
+LicenseNotAccepted=I &do not accept the agreement
+
+; *** "Information" wizard pages
+WizardInfoBefore=Information
+InfoBeforeLabel=Please read the following important information before continuing.
+InfoBeforeClickLabel=When you are ready to continue with Setup, click Next.
+WizardInfoAfter=Information
+InfoAfterLabel=Please read the following important information before continuing.
+InfoAfterClickLabel=When you are ready to continue with Setup, click Next.
+
+; *** "User Information" wizard page
+WizardUserInfo=User Information
+UserInfoDesc=Please enter your information.
+UserInfoName=&User Name:
+UserInfoOrg=&Organization:
+UserInfoSerial=&Serial Number:
+UserInfoNameRequired=You must enter a name.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Select Destination Location
+SelectDirDesc=Where should [name] be installed?
+SelectDirLabel3=Setup will install [name] into the following folder.
+SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.
+DiskSpaceGBLabel=At least [gb] GB of free disk space is required.
+DiskSpaceMBLabel=At least [mb] MB of free disk space is required.
+CannotInstallToNetworkDrive=Setup cannot install to a network drive.
+CannotInstallToUNCPath=Setup cannot install to a UNC path.
+InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share
+InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another.
+DiskSpaceWarningTitle=Not Enough Disk Space
+DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway?
+DirNameTooLong=The folder name or path is too long.
+InvalidDirName=The folder name is not valid.
+BadDirName32=Folder names cannot include any of the following characters:%n%n%1
+DirExistsTitle=Folder Exists
+DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway?
+DirDoesntExistTitle=Folder Does Not Exist
+DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Select Components
+SelectComponentsDesc=Which components should be installed?
+SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue.
+FullInstallation=Full installation
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Compact installation
+CustomInstallation=Custom installation
+NoUninstallWarningTitle=Components Exist
+NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Current selection requires at least [gb] GB of disk space.
+ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Select Additional Tasks
+SelectTasksDesc=Which additional tasks should be performed?
+SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Select Start Menu Folder
+SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts?
+SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder.
+SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.
+MustEnterGroupName=You must enter a folder name.
+GroupNameTooLong=The folder name or path is too long.
+InvalidGroupName=The folder name is not valid.
+BadGroupName=The folder name cannot include any of the following characters:%n%n%1
+NoProgramGroupCheck2=&Don't create a Start Menu folder
+
+; *** "Ready to Install" wizard page
+WizardReady=Ready to Install
+ReadyLabel1=Setup is now ready to begin installing [name] on your computer.
+ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings.
+ReadyLabel2b=Click Install to continue with the installation.
+ReadyMemoUserInfo=User information:
+ReadyMemoDir=Destination location:
+ReadyMemoType=Setup type:
+ReadyMemoComponents=Selected components:
+ReadyMemoGroup=Start Menu folder:
+ReadyMemoTasks=Additional tasks:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Downloading additional files...
+ButtonStopDownload=&Stop download
+StopDownload=Are you sure you want to stop the download?
+ErrorDownloadAborted=Download aborted
+ErrorDownloadFailed=Download failed: %1 %2
+ErrorDownloadSizeFailed=Getting size failed: %1 %2
+ErrorFileHash1=File hash failed: %1
+ErrorFileHash2=Invalid file hash: expected %1, found %2
+ErrorProgress=Invalid progress: %1 of %2
+ErrorFileSize=Invalid file size: expected %1, found %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Preparing to Install
+PreparingDesc=Setup is preparing to install [name] on your computer.
+PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name].
+CannotContinue=Setup cannot continue. Please click Cancel to exit.
+ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications.
+ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications.
+CloseApplications=&Automatically close the applications
+DontCloseApplications=&Do not close the applications
+ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing.
+PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now?
+
+; *** "Installing" wizard page
+WizardInstalling=Installing
+InstallingLabel=Please wait while Setup installs [name] on your computer.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Completing the [name] Setup Wizard
+FinishedLabelNoIcons=Setup has finished installing [name] on your computer.
+FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts.
+ClickFinish=Click Finish to exit Setup.
+FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now?
+FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now?
+ShowReadmeCheck=Yes, I would like to view the README file
+YesRadio=&Yes, restart the computer now
+NoRadio=&No, I will restart the computer later
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Run %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=View %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Setup Needs the Next Disk
+SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse.
+PathLabel=&Path:
+FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder.
+SelectDirectoryLabel=Please specify the location of the next disk.
+
+; *** Installation phase messages
+SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again.
+AbortRetryIgnoreSelectAction=Select action
+AbortRetryIgnoreRetry=&Try again
+AbortRetryIgnoreIgnore=&Ignore the error and continue
+AbortRetryIgnoreCancel=Cancel installation
+
+; *** Installation status messages
+StatusClosingApplications=Closing applications...
+StatusCreateDirs=Creating directories...
+StatusExtractFiles=Extracting files...
+StatusCreateIcons=Creating shortcuts...
+StatusCreateIniEntries=Creating INI entries...
+StatusCreateRegistryEntries=Creating registry entries...
+StatusRegisterFiles=Registering files...
+StatusSavingUninstall=Saving uninstall information...
+StatusRunProgram=Finishing installation...
+StatusRestartingApplications=Restarting applications...
+StatusRollback=Rolling back changes...
+
+; *** Misc. errors
+ErrorInternal2=Internal error: %1
+ErrorFunctionFailedNoCode=%1 failed
+ErrorFunctionFailed=%1 failed; code %2
+ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3
+ErrorExecutingProgram=Unable to execute file:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Error opening registry key:%n%1\%2
+ErrorRegCreateKey=Error creating registry key:%n%1\%2
+ErrorRegWriteKey=Error writing to registry key:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Error creating INI entry in file "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Skip this file (not recommended)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignore the error and continue (not recommended)
+SourceIsCorrupted=The source file is corrupted
+SourceDoesntExist=The source file "%1" does not exist
+ExistingFileReadOnly2=The existing file could not be replaced because it is marked read-only.
+ExistingFileReadOnlyRetry=&Remove the read-only attribute and try again
+ExistingFileReadOnlyKeepExisting=&Keep the existing file
+ErrorReadingExistingDest=An error occurred while trying to read the existing file:
+FileExistsSelectAction=Select action
+FileExists2=The file already exists.
+FileExistsOverwriteExisting=&Overwrite the existing file
+FileExistsKeepExisting=&Keep the existing file
+FileExistsOverwriteOrKeepAll=&Do this for the next conflicts
+ExistingFileNewerSelectAction=Select action
+ExistingFileNewer2=The existing file is newer than the one Setup is trying to install.
+ExistingFileNewerOverwriteExisting=&Overwrite the existing file
+ExistingFileNewerKeepExisting=&Keep the existing file (recommended)
+ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts
+ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file:
+ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory:
+ErrorReadingSource=An error occurred while trying to read the source file:
+ErrorCopying=An error occurred while trying to copy a file:
+ErrorReplacingExistingFile=An error occurred while trying to replace the existing file:
+ErrorRestartReplace=RestartReplace failed:
+ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory:
+ErrorRegisterServer=Unable to register the DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 failed with exit code %1
+ErrorRegisterTypeLib=Unable to register the type library: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bit
+UninstallDisplayNameMark64Bit=64-bit
+UninstallDisplayNameMarkAllUsers=All users
+UninstallDisplayNameMarkCurrentUser=Current user
+
+; *** Post-installation errors
+ErrorOpeningReadme=An error occurred while trying to open the README file.
+ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually.
+
+; *** Uninstaller messages
+UninstallNotFound=File "%1" does not exist. Cannot uninstall.
+UninstallOpenError=File "%1" could not be opened. Cannot uninstall
+UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall
+UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log
+; ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components?
+; VCMI Custom message
+ConfirmUninstall=Are you sure you want to run the %1 uninstall wizard?
+UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows.
+OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges.
+UninstallStatusLabel=Please wait while %1 is removed from your computer.
+UninstalledAll=%1 was successfully removed from your computer.
+UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually.
+UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now?
+UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Remove Shared File?
+ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm.
+SharedFileNameLabel=File name:
+SharedFileLocationLabel=Location:
+WizardUninstalling=Uninstall Status
+StatusUninstalling=Uninstalling %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Installing %1.
+ShutdownBlockReasonUninstallingApp=Uninstalling %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 version %2
+AdditionalIcons=Additional shortcuts:
+CreateDesktopIcon=Create a &desktop shortcut
+CreateQuickLaunchIcon=Create a &Quick Launch shortcut
+ProgramOnTheWeb=%1 on the Web
+UninstallProgram=Uninstall %1
+LaunchProgram=Launch %1
+AssocFileExtension=&Associate %1 with the %2 file extension
+AssocingFileExtension=Associating %1 with the %2 file extension...
+AutoStartProgramGroupDescription=Startup:
+AutoStartProgram=Automatically start %1
+AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Choose Installation Mode
+SelectSetupInstallModeDesc=VCMI can be installed for all users or only for you.
+SelectSetupInstallModeSubTitle=Select your preferred installation mode:
+InstallForAllUsers=Install for all users
+InstallForAllUsers1=Requires administrative privileges
+InstallForMeOnly=Install for me only
+InstallForMeOnly1=A firewall prompt will appear when launching the game for the first time
+InstallForMeOnly2=LAN games will not work if the firewall rule cannot be allowed
+SystemIntegration=System integration
+CreateDesktopShortcuts=Create desktop shortcuts
+CreateStartMenuShortcuts=Create Start Menu shortcuts
+AssociateH3MFiles=Associate .h3m files with the VCMI Map Editor
+AssociateVCMIMapFiles=Associate .vmap and .vcmp files with the VCMI Map Editor
+VCMISettings=VCMI configuration
+AddFirewallRules=Add firewall rules for VCMI
+CopyH3Files=Automatically copy required Heroes III files to VCMI
+RunVCMILauncherAfterInstall=Launch the VCMI Launcher
+ShortcutMapEditor=VCMI Map Editor
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=VCMI Website
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=Launch the VCMI Launcher
+ShortcutMapEditorComment=Open the VCMI Map Editor
+ShortcutWebPageComment=Visit the official VCMI website
+ShortcutDiscordComment=Visit the official VCMI Discord
+DeleteUserData=Delete user data
+Uninstall=Uninstall
+Warning=Warning
+VMAPDescription=VCMI Map File
+VCMPDescription=VCMI Campaign File
+H3MDescription=Heroes 3 Map File

+ 392 - 0
CI/wininstaller/lang/Finnish.isl

@@ -0,0 +1,392 @@
+; *** Inno Setup version 6.1.0+ Finnish messages ***
+;
+; Finnish translation by Antti Karttunen
+; E-mail: [email protected]
+; Last modification date: 2020-08-02
+
+[LangOptions]
+LanguageName=Suomi
+LanguageID=$040B
+LanguageCodePage=1252
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Asennus
+SetupWindowTitle=%1 - Asennus
+UninstallAppTitle=Asennuksen poisto
+UninstallAppFullTitle=%1 - Asennuksen poisto
+
+; *** Misc. common
+InformationTitle=Ilmoitus
+ConfirmTitle=Varmistus
+ErrorTitle=Virhe
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Tällä asennusohjelmalla asennetaan %1. Haluatko jatkaa?
+LdrCannotCreateTemp=Väliaikaistiedostoa ei voitu luoda. Asennus keskeytettiin
+LdrCannotExecTemp=Väliaikaisessa hakemistossa olevaa tiedostoa ei voitu suorittaa. Asennus keskeytettiin
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nVirhe %2: %3
+SetupFileMissing=Tiedostoa %1 ei löydy asennushakemistosta. Korjaa ongelma tai hanki uusi kopio ohjelmasta.
+SetupFileCorrupt=Asennustiedostot ovat vaurioituneet. Hanki uusi kopio ohjelmasta.
+SetupFileCorruptOrWrongVer=Asennustiedostot ovat vaurioituneet tai ovat epäyhteensopivia tämän Asennuksen version kanssa. Korjaa ongelma tai hanki uusi kopio ohjelmasta.
+InvalidParameter=Virheellinen komentoriviparametri:%n%n%1
+SetupAlreadyRunning=Asennus on jo käynnissä.
+WindowsVersionNotSupported=Tämä ohjelma ei voi toimia Windows-versiossasi. Varmista, että käytät oikeaa Windows-arkkitehtuuria (32-bittinen tai 64-bittinen) ja oikeaa ohjelmaversiota.
+WindowsServicePackRequired=Tämä ohjelma vaatii %1 Service Pack %2 -päivityksen tai myöhemmän.
+NotOnThisPlatform=Tämä ohjelma ei toimi %1-käyttöjärjestelmässä.
+OnlyOnThisPlatform=Tämä ohjelma toimii vain %1-käyttöjärjestelmässä.
+OnlyOnTheseArchitectures=Tämä ohjelma voidaan asentaa vain niihin Windowsin versioihin, jotka on suunniteltu seuraaville prosessorityypeille:%n%n%1
+WinVersionTooLowError=Tämä ohjelma vaatii version %2 tai myöhemmän %1-käyttöjärjestelmästä.
+WinVersionTooHighError=Tätä ohjelmaa ei voi asentaa %1-käyttöjärjestelmän versioon %2 tai myöhempään.
+AdminPrivilegesRequired=Sinun täytyy kirjautua sisään järjestelmänvalvojana asentaaksesi tämän ohjelman.
+PowerUserPrivilegesRequired=Sinun täytyy kirjautua sisään järjestelmänvalvojana tai tehokäyttäjänä asentaaksesi tämän ohjelman.
+SetupAppRunningError=Asennus löysi käynnissä olevan kopion ohjelmasta %1.%n%nSulje kaikki käynnissä olevat kopiot ohjelmasta ja valitse OK jatkaaksesi, tai valitse Peruuta poistuaksesi.
+UninstallAppRunningError=Asennuksen poisto löysi käynnissä olevan kopion ohjelmasta %1.%n%nSulje kaikki käynnissä olevat kopiot ohjelmasta ja valitse OK jatkaaksesi, tai valitse Peruuta poistuaksesi.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Valitse asennustapa
+PrivilegesRequiredOverrideInstruction=Valitse, kenen käyttöön ohjelma asennetaan
+PrivilegesRequiredOverrideText1=%1 voidaan asentaa kaikille käyttäjille (vaatii järjestelmänvalvojan oikeudet) tai vain sinun käyttöösi.
+PrivilegesRequiredOverrideText2=%1 voidaan asentaa vain sinun käyttöösi tai kaikille käyttäjille (vaatii järjestelmänvalvojan oikeudet).
+PrivilegesRequiredOverrideAllUsers=Asenna &kaikille käyttäjille
+PrivilegesRequiredOverrideAllUsersRecommended=Asenna &kaikille käyttäjille (suositus)
+PrivilegesRequiredOverrideCurrentUser=Asenna vain &minun käyttööni
+PrivilegesRequiredOverrideCurrentUserRecommended=Asenna vain &minun käyttööni (suositus)
+
+; *** Misc. errors
+ErrorCreatingDir=Asennus ei voinut luoda hakemistoa "%1"
+ErrorTooManyFilesInDir=Tiedoston luominen hakemistoon "%1" epäonnistui, koska se sisältää liian monta tiedostoa
+
+; *** Setup common messages
+ExitSetupTitle=Poistu Asennuksesta
+ExitSetupMessage=Asennus ei ole valmis. Jos lopetat nyt, ohjelmaa ei asenneta.%n%nVoit ajaa Asennuksen toiste asentaaksesi ohjelman.%n%nLopetetaanko Asennus?
+AboutSetupMenuItem=&Tietoja Asennuksesta...
+AboutSetupTitle=Tietoja Asennuksesta
+AboutSetupMessage=%1 versio %2%n%3%n%n%1 -ohjelman kotisivu:%n%4
+AboutSetupNote=
+TranslatorNote=Suomenkielinen käännös: Antti Karttunen ([email protected])
+
+; *** Buttons
+ButtonBack=< &Takaisin
+ButtonNext=&Seuraava >
+ButtonInstall=&Asenna
+ButtonOK=OK
+ButtonCancel=Peruuta
+ButtonYes=&Kyllä
+ButtonYesToAll=Kyllä k&aikkiin
+ButtonNo=&Ei
+ButtonNoToAll=E&i kaikkiin
+ButtonFinish=&Lopeta
+ButtonBrowse=S&elaa...
+ButtonWizardBrowse=S&elaa...
+ButtonNewFolder=&Luo uusi kansio
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Valitse Asennuksen kieli
+SelectLanguageLabel=Valitse asentamisen aikana käytettävä kieli.
+
+; *** Common wizard text
+ClickNext=Valitse Seuraava jatkaaksesi tai Peruuta poistuaksesi.
+BeveledLabel=
+BrowseDialogTitle=Selaa kansioita
+BrowseDialogLabel=Valitse kansio allaolevasta listasta ja valitse sitten OK jatkaaksesi.
+NewFolderName=Uusi kansio
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Tervetuloa [name] -asennusohjelmaan.
+WelcomeLabel2=Tällä asennusohjelmalla koneellesi asennetaan [name/ver]. %n%nOn suositeltavaa, että suljet kaikki muut käynnissä olevat sovellukset ennen jatkamista. Tämä auttaa välttämään ristiriitatilanteita asennuksen aikana.
+
+; *** "Password" wizard page
+WizardPassword=Salasana
+PasswordLabel1=Tämä asennusohjelma on suojattu salasanalla.
+PasswordLabel3=Anna salasana ja valitse sitten Seuraava jatkaaksesi.%n%nIsot ja pienet kirjaimet ovat eriarvoisia.
+PasswordEditLabel=&Salasana:
+IncorrectPassword=Antamasi salasana oli virheellinen. Anna salasana uudelleen.
+
+; *** "License Agreement" wizard page
+WizardLicense=Käyttöoikeussopimus
+LicenseLabel=Lue seuraava tärkeä tiedotus ennen kuin jatkat.
+LicenseLabel3=Lue seuraava käyttöoikeussopimus tarkasti. Sinun täytyy hyväksyä sopimus, jos haluat jatkaa asentamista.
+LicenseAccepted=&Hyväksyn sopimuksen
+LicenseNotAccepted=&En hyväksy sopimusta
+
+; *** "Information" wizard pages
+WizardInfoBefore=Tiedotus
+InfoBeforeLabel=Lue seuraava tärkeä tiedotus ennen kuin jatkat.
+InfoBeforeClickLabel=Kun olet valmis jatkamaan asentamista, valitse Seuraava.
+WizardInfoAfter=Tiedotus
+InfoAfterLabel=Lue seuraava tärkeä tiedotus ennen kuin jatkat.
+InfoAfterClickLabel=Kun olet valmis jatkamaan asentamista, valitse Seuraava.
+
+; *** "Select Destination Directory" wizard page
+WizardUserInfo=Käyttäjätiedot
+UserInfoDesc=Anna pyydetyt tiedot.
+UserInfoName=Käyttäjän &nimi:
+UserInfoOrg=&Yritys:
+UserInfoSerial=&Tunnuskoodi:
+UserInfoNameRequired=Sinun täytyy antaa nimi.
+
+; *** "Select Destination Location" wizard page	
+WizardSelectDir=Valitse kohdekansio
+SelectDirDesc=Mihin [name] asennetaan?
+SelectDirLabel3=[name] asennetaan tähän kansioon.
+SelectDirBrowseLabel=Valitse Seuraava jatkaaksesi. Jos haluat vaihtaa kansiota, valitse Selaa.
+DiskSpaceGBLabel=Vapaata levytilaa tarvitaan vähintään [gb] Gt.
+DiskSpaceMBLabel=Vapaata levytilaa tarvitaan vähintään [mb] Mt.
+CannotInstallToNetworkDrive=Asennus ei voi asentaa ohjelmaa verkkoasemalle.
+CannotInstallToUNCPath=Asennus ei voi asentaa ohjelmaa UNC-polun alle.
+InvalidPath=Anna täydellinen polku levyaseman kirjaimen kanssa. Esimerkiksi %nC:\OHJELMA%n%ntai UNC-polku muodossa %n%n\\palvelin\resurssi
+InvalidDrive=Valitsemaasi asemaa tai UNC-polkua ei ole olemassa tai sitä ei voi käyttää. Valitse toinen asema tai UNC-polku.
+DiskSpaceWarningTitle=Ei tarpeeksi vapaata levytilaa
+DiskSpaceWarning=Asennus vaatii vähintään %1 kt vapaata levytilaa, mutta valitulla levyasemalla on vain %2 kt vapaata levytilaa.%n%nHaluatko jatkaa tästä huolimatta?
+DirNameTooLong=Kansion nimi tai polku on liian pitkä.
+InvalidDirName=Virheellinen kansion nimi.
+BadDirName32=Kansion nimessä ei saa olla seuraavia merkkejä:%n%n%1
+DirExistsTitle=Kansio on olemassa
+DirExists=Kansio:%n%n%1%n%non jo olemassa. Haluatko kuitenkin suorittaa asennuksen tähän kansioon?
+DirDoesntExistTitle=Kansiota ei ole olemassa
+DirDoesntExist=Kansiota%n%n%1%n%nei ole olemassa. Luodaanko kansio?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Valitse asennettavat osat
+SelectComponentsDesc=Mitkä osat asennetaan?
+SelectComponentsLabel2=Valitse ne osat, jotka haluat asentaa, ja poista niiden osien valinta, joita et halua asentaa. Valitse Seuraava, kun olet valmis.
+FullInstallation=Normaali asennus
+CompactInstallation=Suppea asennus
+CustomInstallation=Mukautettu asennus
+NoUninstallWarningTitle=Asennettuja osia löydettiin
+NoUninstallWarning=Seuraavat osat on jo asennettu koneelle:%n%n%1%n%nNäiden osien valinnan poistaminen ei poista niitä koneelta.%n%nHaluatko jatkaa tästä huolimatta?
+ComponentSize1=%1 kt
+ComponentSize2=%1 Mt
+ComponentsDiskSpaceGBLabel=Nykyiset valinnat vaativat vähintään [gb] Gt levytilaa.
+ComponentsDiskSpaceMBLabel=Nykyiset valinnat vaativat vähintään [mb] Mt levytilaa.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Valitse muut toiminnot
+SelectTasksDesc=Mitä muita toimintoja suoritetaan?
+SelectTasksLabel2=Valitse muut toiminnot, jotka haluat Asennuksen suorittavan samalla kun [name] asennetaan. Valitse Seuraava, kun olet valmis.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Valitse Käynnistä-valikon kansio
+SelectStartMenuFolderDesc=Mihin ohjelman pikakuvakkeet sijoitetaan?
+SelectStartMenuFolderLabel3=Ohjelman pikakuvakkeet luodaan tähän Käynnistä-valikon kansioon.
+SelectStartMenuFolderBrowseLabel=Valitse Seuraava jatkaaksesi. Jos haluat vaihtaa kansiota, valitse Selaa.
+MustEnterGroupName=Kansiolle pitää antaa nimi.
+GroupNameTooLong=Kansion nimi tai polku on liian pitkä.
+InvalidGroupName=Virheellinen kansion nimi.
+BadGroupName=Kansion nimessä ei saa olla seuraavia merkkejä:%n%n%1
+NoProgramGroupCheck2=Älä luo k&ansiota Käynnistä-valikkoon
+
+; *** "Ready to Install" wizard page
+WizardReady=Valmiina asennukseen
+ReadyLabel1=[name] on nyt valmis asennettavaksi.
+ReadyLabel2a=Valitse Asenna jatkaaksesi asentamista tai valitse Takaisin, jos haluat tarkastella tekemiäsi asetuksia tai muuttaa niitä.
+ReadyLabel2b=Valitse Asenna jatkaaksesi asentamista.
+ReadyMemoUserInfo=Käyttäjätiedot:
+ReadyMemoDir=Kohdekansio:
+ReadyMemoType=Asennustyyppi:
+ReadyMemoComponents=Asennettavaksi valitut osat:
+ReadyMemoGroup=Käynnistä-valikon kansio:
+ReadyMemoTasks=Muut toiminnot:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Ladataan tarvittavia tiedostoja...
+ButtonStopDownload=&Pysäytä lataus
+StopDownload=Oletko varma, että haluat pysäyttää tiedostojen latauksen?
+ErrorDownloadAborted=Tiedostojen lataaminen keskeytettiin
+ErrorDownloadFailed=Tiedoston lataaminen epäonnistui: %1 %2
+ErrorDownloadSizeFailed=Latauksen koon noutaminen epäonnistui: %1 %2
+ErrorFileHash1=Tiedoston tiivisteen luominen epäonnistui: %1
+ErrorFileHash2=Tiedoston tiiviste on virheellinen: odotettu %1, löydetty %2
+ErrorProgress=Virheellinen edistyminen: %1 / %2
+ErrorFileSize=Virheellinen tiedoston koko: odotettu %1, löydetty %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Valmistellaan asennusta
+PreparingDesc=Valmistaudutaan asentamaan [name] koneellesi.
+PreviousInstallNotCompleted=Edellisen ohjelman asennus tai asennuksen poisto ei ole valmis. Sinun täytyy käynnistää kone uudelleen viimeistelläksesi edellisen asennuksen.%n%nAja [name] -asennusohjelma uudestaan, kun olet käynnistänyt koneen uudelleen.
+CannotContinue=Asennusta ei voida jatkaa. Valitse Peruuta poistuaksesi.
+ApplicationsFound=Seuraavat sovellukset käyttävät tiedostoja, joita Asennuksen pitää päivittää. On suositeltavaa, että annat Asennuksen sulkea nämä sovellukset automaattisesti.
+ApplicationsFound2=Seuraavat sovellukset käyttävät tiedostoja, joita Asennuksen pitää päivittää. On suositeltavaa, että annat Asennuksen sulkea nämä sovellukset automaattisesti. Valmistumisen jälkeen Asennus yrittää uudelleenkäynnistää sovellukset.
+CloseApplications=&Sulje sovellukset automaattisesti
+DontCloseApplications=&Älä sulje sovelluksia
+ErrorCloseApplications=Asennus ei pystynyt sulkemaan tarvittavia sovelluksia automaattisesti. On suositeltavaa, että ennen jatkamista suljet sovellukset, jotka käyttävät asennuksen aikana päivitettäviä tiedostoja.
+PrepareToInstallNeedsRestart=Asennuksen täytyy käynnistää tietokone uudelleen. Aja Asennus uudelleenkäynnistyksen jälkeen, jotta [name] voidaan asentaa.%n%nHaluatko käynnistää tietokoneen uudelleen nyt?
+
+; *** "Installing" wizard page
+WizardInstalling=Asennus käynnissä
+InstallingLabel=Odota, kun [name] asennetaan koneellesi.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=[name] - Asennuksen viimeistely
+FinishedLabelNoIcons=[name] on nyt asennettu koneellesi.
+FinishedLabel=[name] on nyt asennettu. Sovellus voidaan käynnistää valitsemalla jokin asennetuista kuvakkeista.
+ClickFinish=Valitse Lopeta poistuaksesi Asennuksesta.
+FinishedRestartLabel=Jotta [name] saataisiin asennettua loppuun, pitää kone käynnistää uudelleen. Haluatko käynnistää koneen uudelleen nyt?
+FinishedRestartMessage=Jotta [name] saataisiin asennettua loppuun, pitää kone käynnistää uudelleen.%n%nHaluatko käynnistää koneen uudelleen nyt?
+ShowReadmeCheck=Kyllä, haluan nähdä LUEMINUT-tiedoston
+YesRadio=&Kyllä, käynnistä kone uudelleen
+NoRadio=&Ei, käynnistän koneen uudelleen myöhemmin
+RunEntryExec=Käynnistä %1
+RunEntryShellExec=Näytä %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Asennus tarvitsee seuraavan levykkeen
+SelectDiskLabel2=Aseta levyke %1 asemaan ja valitse OK. %n%nJos joku toinen kansio sisältää levykkeen tiedostot, anna oikea polku tai valitse Selaa.
+PathLabel=&Polku:
+FileNotInDir2=Tiedostoa "%1" ei löytynyt lähteestä "%2". Aseta oikea levyke asemaan tai valitse toinen kansio.
+SelectDirectoryLabel=Määritä seuraavan levykkeen sisällön sijainti.
+
+; *** Installation phase messages
+SetupAborted=Asennusta ei suoritettu loppuun.%n%nKorjaa ongelma ja suorita Asennus uudelleen.
+AbortRetryIgnoreSelectAction=Valitse toiminto
+AbortRetryIgnoreRetry=&Yritä uudelleen
+AbortRetryIgnoreIgnore=&Jatka virheestä huolimatta
+AbortRetryIgnoreCancel=Peruuta asennus
+
+; *** Installation status messages
+StatusClosingApplications=Suljetaan sovellukset...
+StatusCreateDirs=Luodaan hakemistoja...
+StatusExtractFiles=Puretaan tiedostoja...
+StatusCreateIcons=Luodaan pikakuvakkeita...
+StatusCreateIniEntries=Luodaan INI-merkintöjä...
+StatusCreateRegistryEntries=Luodaan rekisterimerkintöjä...
+StatusRegisterFiles=Rekisteröidään tiedostoja...
+StatusSavingUninstall=Tallennetaan Asennuksen poiston tietoja...
+StatusRunProgram=Viimeistellään asennusta...
+StatusRestartingApplications=Uudelleenkäynnistetään sovellukset...
+StatusRollback=Peruutetaan tehdyt muutokset...
+
+; *** Misc. errors
+ErrorInternal2=Sisäinen virhe: %1
+ErrorFunctionFailedNoCode=%1 epäonnistui
+ErrorFunctionFailed=%1 epäonnistui; virhekoodi %2
+ErrorFunctionFailedWithMessage=%1 epäonnistui; virhekoodi %2.%n%3
+ErrorExecutingProgram=Virhe suoritettaessa tiedostoa%n%1
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Asennetaan %1.
+ShutdownBlockReasonUninstallingApp=Poistetaan %1.
+
+; *** Registry errors
+ErrorRegOpenKey=Virhe avattaessa rekisteriavainta%n%1\%2
+ErrorRegCreateKey=Virhe luotaessa rekisteriavainta%n%1\%2
+ErrorRegWriteKey=Virhe kirjoitettaessa rekisteriavaimeen%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Virhe luotaessa INI-merkintää tiedostoon "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Ohita tämä tiedosto (ei suositeltavaa)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Jatka virheestä huolimatta (ei suositeltavaa)
+SourceIsCorrupted=Lähdetiedosto on vaurioitunut
+SourceDoesntExist=Lähdetiedostoa "%1" ei ole olemassa
+ExistingFileReadOnly2=Nykyistä tiedostoa ei voitu korvata, koska se on Vain luku -tiedosto.
+ExistingFileReadOnlyRetry=&Poista Vain luku -asetus ja yritä uudelleen
+ExistingFileReadOnlyKeepExisting=&Säilytä nykyinen tiedosto
+ErrorReadingExistingDest=Virhe luettaessa nykyistä tiedostoa:
+FileExistsSelectAction=Valitse toiminto
+FileExists2=Tiedosto on jo olemassa.
+FileExistsOverwriteExisting=Korvaa &olemassa oleva tiedosto
+FileExistsKeepExisting=&Säilytä olemassa oleva tiedosto
+FileExistsOverwriteOrKeepAll=&Hoida muut vastaavat tilanteet samalla tavalla
+ExistingFileNewerSelectAction=Valitse toiminto
+ExistingFileNewer2=Olemassa oleva tiedosto on uudempi kuin Asennuksen sisältämä tiedosto.
+ExistingFileNewerOverwriteExisting=Korvaa &olemassa oleva tiedosto
+ExistingFileNewerKeepExisting=&Säilytä olemassa oleva tiedosto (suositeltavaa)
+ExistingFileNewerOverwriteOrKeepAll=&Hoida muut vastaavat tilanteet samalla tavalla
+ErrorChangingAttr=Virhe vaihdettaessa nykyisen tiedoston määritteitä:
+ErrorCreatingTemp=Virhe luotaessa tiedostoa kohdehakemistoon:
+ErrorReadingSource=Virhe luettaessa lähdetiedostoa:
+ErrorCopying=Virhe kopioitaessa tiedostoa:
+ErrorReplacingExistingFile=Virhe korvattaessa nykyistä tiedostoa:
+ErrorRestartReplace=RestartReplace-komento epäonnistui:
+ErrorRenamingTemp=Virhe uudelleennimettäessä tiedostoa kohdehakemistossa:
+ErrorRegisterServer=DLL/OCX -laajennuksen rekisteröinti epäonnistui: %1
+ErrorRegSvr32Failed=RegSvr32-toiminto epäonnistui. Virhekoodi: %1
+ErrorRegisterTypeLib=Tyyppikirjaston rekisteröiminen epäonnistui: %1
+
+; *** Uninstall display name markings
+UninstallDisplayNameMark=%1 (%2)
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bittinen
+UninstallDisplayNameMark64Bit=64-bittinen
+UninstallDisplayNameMarkAllUsers=Kaikki käyttäjät
+UninstallDisplayNameMarkCurrentUser=Tämänhetkinen käyttäjä
+
+; *** Post-installation errors
+ErrorOpeningReadme=Virhe avattaessa LUEMINUT-tiedostoa.
+ErrorRestartingComputer=Koneen uudelleenkäynnistäminen ei onnistunut. Suorita uudelleenkäynnistys itse.
+
+; *** Uninstaller messages
+UninstallNotFound=Tiedostoa "%1" ei löytynyt. Asennuksen poisto ei onnistu.
+UninstallOpenError=Tiedostoa "%1" ei voitu avata. Asennuksen poisto ei onnistu.
+UninstallUnsupportedVer=Tämä versio Asennuksen poisto-ohjelmasta ei pysty lukemaan lokitiedostoa "%1". Asennuksen poisto ei onnistu
+UninstallUnknownEntry=Asennuksen poisto-ohjelman lokitiedostosta löytyi tuntematon merkintä (%1)
+ConfirmUninstall=Haluatko varmasti suorittaa %1 asennuksen poistotyökalun?
+UninstallOnlyOnWin64=Tämä ohjelma voidaan poistaa vain 64-bittisestä Windowsista käsin.
+OnlyAdminCanUninstall=Tämän asennuksen poistaminen vaatii järjestelmänvalvojan oikeudet.
+UninstallStatusLabel=Odota, kun %1 poistetaan koneeltasi.
+UninstalledAll=%1 poistettiin onnistuneesti.
+UninstalledMost=%1 poistettiin koneelta.%n%nJoitakin osia ei voitu poistaa. Voit poistaa osat itse.
+UninstalledAndNeedsRestart=Kone täytyy käynnistää uudelleen, jotta %1 voidaan poistaa kokonaan.%n%nHaluatko käynnistää koneen uudeelleen nyt?
+UninstallDataCorrupted=Tiedosto "%1" on vaurioitunut. Asennuksen poisto ei onnistu.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Poistetaanko jaettu tiedosto?
+ConfirmDeleteSharedFile2=Järjestelmän mukaan seuraava jaettu tiedosto ei ole enää minkään muun sovelluksen käytössä. Poistetaanko tiedosto?%n%nJos jotkut sovellukset käyttävät vielä tätä tiedostoa ja se poistetaan, ne eivät välttämättä toimi enää kunnolla. Jos olet epävarma, valitse Ei. Tiedoston jättäminen koneelle ei aiheuta ongelmia.
+SharedFileNameLabel=Tiedoston nimi:
+SharedFileLocationLabel=Sijainti:
+WizardUninstalling=Asennuksen poiston tila
+StatusUninstalling=Poistetaan %1...
+
+[CustomMessages]
+
+NameAndVersion=%1 versio %2
+AdditionalIcons=Lisäkuvakkeet:
+CreateDesktopIcon=Lu&o kuvake työpöydälle
+CreateQuickLaunchIcon=Luo kuvake &pikakäynnistyspalkkiin
+ProgramOnTheWeb=%1 Internetissä
+UninstallProgram=Poista %1
+LaunchProgram=&Käynnistä %1
+AssocFileExtension=&Yhdistä %1 tiedostopäätteeseen %2
+AssocingFileExtension=Yhdistetään %1 tiedostopäätteeseen %2 ...
+AutoStartProgramGroupDescription=Käynnistys:
+AutoStartProgram=Käynnistä %1 automaattisesti
+AddonHostProgramNotFound=%1 ei ole valitsemassasi kansiossa.%n%nHaluatko jatkaa tästä huolimatta?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Valitse asennustila
+SelectSetupInstallModeDesc=VCMI voidaan asentaa kaikille käyttäjille tai vain sinulle.
+SelectSetupInstallModeSubTitle=Valitse haluamasi asennustila:
+InstallForAllUsers=Asenna kaikille käyttäjille
+InstallForAllUsers1=Vaatii järjestelmänvalvojan oikeudet
+InstallForMeOnly=Asenna vain minulle
+InstallForMeOnly1=Palomuurikehote ilmestyy pelin ensimmäisen käynnistyksen yhteydessä
+InstallForMeOnly2=LAN-pelit eivät toimi, jos palomuurisääntöä ei voida sallia
+SystemIntegration=Järjestelmäintegraatio
+CreateDesktopShortcuts=Luo työpöytäkuvakkeet
+CreateStartMenuShortcuts=Luo kuvakkeet Käynnistä-valikkoon
+AssociateH3MFiles=Liitä .h3m-tiedostot VCMI-karttaeditoriin
+AssociateVCMIMapFiles=Liitä .vmap- ja .vcmp-tiedostot VCMI-karttaeditoriin
+VCMISettings=VCMI-asetukset
+AddFirewallRules=Lisää palomuurisäännöt VCMI:lle
+CopyH3Files=Kopioi automaattisesti Heroes III:n vaaditut tiedostot VCMI:hin
+RunVCMILauncherAfterInstall=Käynnistä VCMI Launcher
+ShortcutMapEditor=VCMI Karttaeditori
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=VCMI-verkkosivu
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=Käynnistä VCMI Launcher
+ShortcutMapEditorComment=Avaa VCMI Karttaeditori
+ShortcutWebPageComment=Vieraile VCMI:n virallisella verkkosivustolla
+ShortcutDiscordComment=Vieraile VCMI:n virallisella Discord-kanavalla
+DeleteUserData=Poista käyttäjätiedot
+Uninstall=Poista asennus
+Warning=Varoitus
+VMAPDescription=VCMI Karttatiedosto
+VCMPDescription=VCMI Kampanjatiedosto
+H3MDescription=Heroes 3 Karttatiedosto

+ 437 - 0
CI/wininstaller/lang/French.isl

@@ -0,0 +1,437 @@
+; *** Inno Setup version 6.1.0+ French messages ***
+;
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+;
+; Maintained by Pierre Yager ([email protected])
+;
+; Contributors : Frédéric Bonduelle, Francis Pallini, Lumina, Pascal Peyrot
+;
+; Changes :
+; + Accents on uppercase letters
+;      http://www.academie-francaise.fr/langue/questions.html#accentuation (lumina)
+; + Typography quotes [see ISBN: 978-2-7433-0482-9]
+;      http://fr.wikipedia.org/wiki/Guillemet (lumina)
+; + Binary units (Kio, Mio) [IEC 80000-13:2008]
+;      http://fr.wikipedia.org/wiki/Octet (lumina)
+; + Reverted to standard units (Ko, Mo) to follow Windows Explorer Standard
+;      http://blogs.msdn.com/b/oldnewthing/archive/2009/06/11/9725386.aspx
+; + Use more standard verbs for click and retry
+;     "click": "Clicker" instead of "Appuyer" 
+;     "retry": "Recommencer" au lieu de "Réessayer"
+; + Added new 6.0.0 messages
+; + Added new 6.1.0 messages
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Français
+LanguageID=$040C
+LanguageCodePage=1252
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Installation
+SetupWindowTitle=Installation - %1
+UninstallAppTitle=Désinstallation
+UninstallAppFullTitle=Désinstallation - %1
+
+; *** Misc. common
+InformationTitle=Information
+ConfirmTitle=Confirmation
+ErrorTitle=Erreur
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Cet assistant va installer %1. Voulez-vous continuer ?
+LdrCannotCreateTemp=Impossible de créer un fichier temporaire. Abandon de l'installation
+LdrCannotExecTemp=Impossible d'exécuter un fichier depuis le dossier temporaire. Abandon de l'installation
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nErreur %2 : %3
+SetupFileMissing=Le fichier %1 est absent du dossier d'installation. Veuillez corriger le problème ou vous procurer une nouvelle copie du programme.
+SetupFileCorrupt=Les fichiers d'installation sont altérés. Veuillez vous procurer une nouvelle copie du programme.
+SetupFileCorruptOrWrongVer=Les fichiers d'installation sont altérés ou ne sont pas compatibles avec cette version de l'assistant d'installation. Veuillez corriger le problème ou vous procurer une nouvelle copie du programme.
+InvalidParameter=Un paramètre non valide a été passé à la ligne de commande :%n%n%1
+SetupAlreadyRunning=L'assistant d'installation est déjà en cours d'exécution.
+WindowsVersionNotSupported=Ce programme ne peut pas s'exécuter sur votre version de Windows. Veuillez vous assurer d'utiliser l'architecture Windows correcte (32 bits ou 64 bits) et la version adaptée de ce programme.
+WindowsServicePackRequired=Ce programme a besoin de %1 Service Pack %2 ou d'une version plus récente.
+NotOnThisPlatform=Ce programme ne fonctionne pas sous %1.
+OnlyOnThisPlatform=Ce programme ne peut fonctionner que sous %1.
+OnlyOnTheseArchitectures=Ce programme ne peut être installé que sur des versions de Windows qui supportent ces architectures : %n%n%1
+WinVersionTooLowError=Ce programme requiert la version %2 ou supérieure de %1.
+WinVersionTooHighError=Ce programme ne peut pas être installé sous %1 version %2 ou supérieure.
+AdminPrivilegesRequired=Vous devez disposer des droits d'administration de cet ordinateur pour installer ce programme.
+PowerUserPrivilegesRequired=Vous devez disposer des droits d'administration ou faire partie du groupe « Utilisateurs avec pouvoir » de cet ordinateur pour installer ce programme.
+SetupAppRunningError=L'assistant d'installation a détecté que %1 est actuellement en cours d'exécution.%n%nVeuillez fermer toutes les instances de cette application puis cliquer sur OK pour continuer, ou bien cliquer sur Annuler pour abandonner l'installation.
+UninstallAppRunningError=La procédure de désinstallation a détecté que %1 est actuellement en cours d'exécution.%n%nVeuillez fermer toutes les instances de cette application  puis cliquer sur OK pour continuer, ou bien cliquer sur Annuler pour abandonner la désinstallation.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Choix du Mode d'Installation
+PrivilegesRequiredOverrideInstruction=Choisissez le mode d'installation
+PrivilegesRequiredOverrideText1=%1 peut être installé pour tous les utilisateurs (nécessite des privilèges administrateur), ou seulement pour vous.
+PrivilegesRequiredOverrideText2=%1 peut-être installé seulement pour vous, ou pour tous les utilisateurs (nécessite des privilèges administrateur).
+PrivilegesRequiredOverrideAllUsers=Installer pour &tous les utilisateurs
+PrivilegesRequiredOverrideAllUsersRecommended=Installer pour &tous les utilisateurs (recommandé)
+PrivilegesRequiredOverrideCurrentUser=Installer seulement pour &moi
+PrivilegesRequiredOverrideCurrentUserRecommended=Installer seulement pour &moi (recommandé)
+
+; *** Misc. errors
+ErrorCreatingDir=L'assistant d'installation n'a pas pu créer le dossier "%1"
+ErrorTooManyFilesInDir=L'assistant d'installation n'a pas pu créer un fichier dans le dossier "%1" car celui-ci contient trop de fichiers
+
+; *** Setup common messages
+ExitSetupTitle=Quitter l'installation
+ExitSetupMessage=L'installation n'est pas terminée. Si vous abandonnez maintenant, le programme ne sera pas installé.%n%nVous devrez relancer cet assistant pour finir l'installation.%n%nVoulez-vous quand même quitter l'assistant d'installation ?
+AboutSetupMenuItem=À &propos...
+AboutSetupTitle=À Propos de l'assistant d'installation
+AboutSetupMessage=%1 version %2%n%3%n%nPage d'accueil de %1 :%n%4
+AboutSetupNote=
+TranslatorNote=Traduction française maintenue par Pierre Yager ([email protected])
+
+; *** Buttons
+ButtonBack=< &Précédent
+ButtonNext=&Suivant >
+ButtonInstall=&Installer
+ButtonOK=OK
+ButtonCancel=Annuler
+ButtonYes=&Oui
+ButtonYesToAll=Oui pour &tout
+ButtonNo=&Non
+ButtonNoToAll=N&on pour tout
+ButtonFinish=&Terminer
+ButtonBrowse=Pa&rcourir...
+ButtonWizardBrowse=Pa&rcourir...
+ButtonNewFolder=Nouveau &dossier
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Langue de l'assistant d'installation
+SelectLanguageLabel=Veuillez sélectionner la langue qui sera utilisée par l'assistant d'installation.
+
+; *** Common wizard text
+ClickNext=Cliquez sur Suivant pour continuer ou sur Annuler pour abandonner l'installation.
+BeveledLabel=
+BrowseDialogTitle=Parcourir les dossiers
+BrowseDialogLabel=Veuillez choisir un dossier de destination, puis cliquez sur OK.
+NewFolderName=Nouveau dossier
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Bienvenue dans l'assistant d'installation de [name]
+WelcomeLabel2=Cet assistant va vous guider dans l'installation de [name/ver] sur votre ordinateur.%n%nIl est recommandé de fermer toutes les applications actives avant de continuer.
+
+; *** "Password" wizard page
+WizardPassword=Mot de passe
+PasswordLabel1=Cette installation est protégée par un mot de passe.
+PasswordLabel3=Veuillez saisir le mot de passe (attention à la distinction entre majuscules et minuscules) puis cliquez sur Suivant pour continuer.
+PasswordEditLabel=&Mot de passe :
+IncorrectPassword=Le mot de passe saisi n'est pas valide. Veuillez essayer à nouveau.
+
+; *** "License Agreement" wizard page
+WizardLicense=Accord de licence
+LicenseLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer.
+LicenseLabel3=Veuillez lire le contrat de licence suivant. Vous devez en accepter tous les termes avant de continuer l'installation.
+LicenseAccepted=Je comprends et j'&accepte les termes du contrat de licence
+LicenseNotAccepted=Je &refuse les termes du contrat de licence
+
+; *** "Information" wizard pages
+WizardInfoBefore=Information
+InfoBeforeLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer.
+InfoBeforeClickLabel=Lorsque vous êtes prêt à continuer, cliquez sur Suivant.
+WizardInfoAfter=Information
+InfoAfterLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer.
+InfoAfterClickLabel=Lorsque vous êtes prêt à continuer, cliquez sur Suivant.
+
+; *** "User Information" wizard page
+WizardUserInfo=Informations sur l'Utilisateur
+UserInfoDesc=Veuillez saisir les informations qui vous concernent.
+UserInfoName=&Nom d'utilisateur :
+UserInfoOrg=&Organisation :
+UserInfoSerial=Numéro de &série :
+UserInfoNameRequired=Vous devez au moins saisir un nom.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Dossier de destination
+SelectDirDesc=Où [name] doit-il être installé ?
+SelectDirLabel3=L'assistant va installer [name] dans le dossier suivant.
+SelectDirBrowseLabel=Pour continuer, cliquez sur Suivant. Si vous souhaitez choisir un dossier différent, cliquez sur Parcourir.
+DiskSpaceGBLabel=Le programme requiert au moins [gb] Go d'espace disque disponible.
+DiskSpaceMBLabel=Le programme requiert au moins [mb] Mo d'espace disque disponible.
+CannotInstallToNetworkDrive=L'assistant ne peut pas installer sur un disque réseau.
+CannotInstallToUNCPath=L'assistant ne peut pas installer sur un chemin UNC.
+InvalidPath=Vous devez saisir un chemin complet avec sa lettre de lecteur ; par exemple :%n%nC:\APP%n%nou un chemin réseau de la forme :%n%n\\serveur\partage
+InvalidDrive=L'unité ou l'emplacement réseau que vous avez sélectionné n'existe pas ou n'est pas accessible. Veuillez choisir une autre destination.
+DiskSpaceWarningTitle=Espace disponible insuffisant
+DiskSpaceWarning=L'assistant a besoin d'au moins %1 Ko d'espace disponible pour effectuer l'installation, mais l'unité que vous avez sélectionnée ne dispose que de %2 Ko d'espace disponible.%n%nSouhaitez-vous continuer malgré tout ?
+DirNameTooLong=Le nom ou le chemin du dossier est trop long.
+InvalidDirName=Le nom du dossier est invalide.
+BadDirName32=Le nom du dossier ne doit contenir aucun des caractères suivants :%n%n%1
+DirExistsTitle=Dossier existant
+DirExists=Le dossier :%n%n%1%n%nexiste déjà. Souhaitez-vous installer dans ce dossier malgré tout ?
+DirDoesntExistTitle=Le dossier n'existe pas
+DirDoesntExist=Le dossier %n%n%1%n%nn'existe pas. Souhaitez-vous que ce dossier soit créé ?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Composants à installer
+SelectComponentsDesc=Quels composants de l'application souhaitez-vous installer ?
+SelectComponentsLabel2=Sélectionnez les composants que vous désirez installer ; décochez les composants que vous ne désirez pas installer. Cliquez ensuite sur Suivant pour continuer l'installation.
+FullInstallation=Installation complète
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Installation compacte
+CustomInstallation=Installation personnalisée
+NoUninstallWarningTitle=Composants existants
+NoUninstallWarning=L'assistant d'installation a détecté que les composants suivants sont déjà installés sur votre système :%n%n%1%n%nDésélectionner ces composants ne les désinstallera pas pour autant.%n%nVoulez-vous continuer malgré tout ?
+ComponentSize1=%1 Ko
+ComponentSize2=%1 Mo
+ComponentsDiskSpaceGBLabel=Les composants sélectionnés nécessitent au moins [gb] Go d'espace disponible.
+ComponentsDiskSpaceMBLabel=Les composants sélectionnés nécessitent au moins [mb] Mo d'espace disponible.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Tâches supplémentaires
+SelectTasksDesc=Quelles sont les tâches supplémentaires qui doivent être effectuées ?
+SelectTasksLabel2=Sélectionnez les tâches supplémentaires que l'assistant d'installation doit effectuer pendant l'installation de [name], puis cliquez sur Suivant.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Sélection du dossier du menu Démarrer
+SelectStartMenuFolderDesc=Où l'assistant d'installation doit-il placer les raccourcis du programme ?
+SelectStartMenuFolderLabel3=L'assistant va créer les raccourcis du programme dans le dossier du menu Démarrer indiqué ci-dessous.
+SelectStartMenuFolderBrowseLabel=Cliquez sur Suivant pour continuer. Cliquez sur Parcourir si vous souhaitez sélectionner un autre dossier du menu Démarrer.
+MustEnterGroupName=Vous devez saisir un nom de dossier du menu Démarrer.
+GroupNameTooLong=Le nom ou le chemin du dossier est trop long.
+InvalidGroupName=Le nom du dossier n'est pas valide.
+BadGroupName=Le nom du dossier ne doit contenir aucun des caractères suivants :%n%n%1
+NoProgramGroupCheck2=Ne pas créer de &dossier dans le menu Démarrer
+
+; *** "Ready to Install" wizard page
+WizardReady=Prêt à installer
+ReadyLabel1=L'assistant dispose à présent de toutes les informations pour installer [name] sur votre ordinateur.
+ReadyLabel2a=Cliquez sur Installer pour procéder à l'installation ou sur Précédent pour revoir ou modifier une option d'installation.
+ReadyLabel2b=Cliquez sur Installer pour procéder à l'installation.
+ReadyMemoUserInfo=Informations sur l'utilisateur :
+ReadyMemoDir=Dossier de destination :
+ReadyMemoType=Type d'installation :
+ReadyMemoComponents=Composants sélectionnés :
+ReadyMemoGroup=Dossier du menu Démarrer :
+ReadyMemoTasks=Tâches supplémentaires :
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Téléchargement de fichiers supplémentaires...
+ButtonStopDownload=&Arrêter le téléchargement
+StopDownload=Êtes-vous sûr de vouloir arrêter le téléchargement ?
+ErrorDownloadAborted=Téléchargement annulé
+ErrorDownloadFailed=Le téléchargement a échoué : %1 %2
+ErrorDownloadSizeFailed=La récupération de la taille du fichier a échouée : %1 %2
+ErrorFileHash1=Le calcul de l'empreinte du fichier a échoué : %1
+ErrorFileHash2=Empreinte du fichier invalide : attendue %1, trouvée %2
+ErrorProgress=Progression invalide : %1 sur %2
+ErrorFileSize=Taille du fichier invalide : attendue %1, trouvée %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Préparation de l'installation
+PreparingDesc=L'assistant d'installation prépare l'installation de [name] sur votre ordinateur.
+PreviousInstallNotCompleted=L'installation ou la suppression d'un programme précédent n'est pas totalement achevée. Veuillez redémarrer votre ordinateur pour achever cette installation ou suppression.%n%nUne fois votre ordinateur redémarré, veuillez relancer cet assistant pour reprendre l'installation de [name].
+CannotContinue=L'assistant ne peut pas continuer. Veuillez cliquer sur Annuler pour abandonner l'installation.
+ApplicationsFound=Les applications suivantes utilisent des fichiers qui doivent être mis à jour par l'assistant. Il est recommandé d'autoriser l'assistant à fermer ces applications automatiquement.
+ApplicationsFound2=Les applications suivantes utilisent des fichiers qui doivent être mis à jour par l'assistant. Il est recommandé d'autoriser l'assistant à fermer ces applications automatiquement. Une fois l'installation terminée, l'assistant essaiera de relancer ces applications.
+CloseApplications=&Arrêter les applications automatiquement
+DontCloseApplications=&Ne pas arrêter les applications
+ErrorCloseApplications=L'assistant d'installation n'a pas pu arrêter toutes les applications automatiquement. Nous vous recommandons de fermer toutes les applications qui utilisent des fichiers devant être mis à jour par l'assistant d'installation avant de continuer.
+PrepareToInstallNeedsRestart=L'assistant d'installation doit redémarrer votre ordinateur. Une fois votre ordinateur redémarré, veuillez relancer cet assistant d'installation pour terminer l'installation de [name].%n%nVoulez-vous redémarrer votre ordinateur maintenant ?
+
+; *** "Installing" wizard page
+WizardInstalling=Installation en cours
+InstallingLabel=Veuillez patienter pendant que l'assistant installe [name] sur votre ordinateur.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Fin de l'installation de [name]
+FinishedLabelNoIcons=L'assistant a terminé l'installation de [name] sur votre ordinateur.
+FinishedLabel=L'assistant a terminé l'installation de [name] sur votre ordinateur. L'application peut être lancée à l'aide des icônes créées sur le Bureau par l'installation.
+ClickFinish=Veuillez cliquer sur Terminer pour quitter l'assistant d'installation.
+FinishedRestartLabel=L'assistant doit redémarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redémarrer maintenant ?
+FinishedRestartMessage=L'assistant doit redémarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redémarrer maintenant ?
+ShowReadmeCheck=Oui, je souhaite lire le fichier LISEZMOI
+YesRadio=&Oui, redémarrer mon ordinateur maintenant
+NoRadio=&Non, je préfère redémarrer mon ordinateur plus tard
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Exécuter %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Voir %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=L'assistant a besoin du disque suivant
+SelectDiskLabel2=Veuillez insérer le disque %1 et cliquer sur OK.%n%nSi les fichiers de ce disque se trouvent à un emplacement différent de celui indiqué ci-dessous, veuillez saisir le chemin correspondant ou cliquez sur Parcourir.
+PathLabel=&Chemin :
+FileNotInDir2=Le fichier "%1" ne peut pas être trouvé dans "%2". Veuillez insérer le bon disque ou sélectionner un autre dossier.
+SelectDirectoryLabel=Veuillez indiquer l'emplacement du disque suivant.
+
+; *** Installation phase messages
+SetupAborted=L'installation n'est pas terminée.%n%nVeuillez corriger le problème et relancer l'installation.
+AbortRetryIgnoreSelectAction=Choisissez une action
+AbortRetryIgnoreRetry=&Recommencer
+AbortRetryIgnoreIgnore=&Ignorer l'erreur et continuer
+AbortRetryIgnoreCancel=Annuler l'installation
+
+; *** Installation status messages
+StatusClosingApplications=Ferme les applications...
+StatusCreateDirs=Création des dossiers...
+StatusExtractFiles=Extraction des fichiers...
+StatusCreateIcons=Création des raccourcis...
+StatusCreateIniEntries=Création des entrées du fichier INI...
+StatusCreateRegistryEntries=Création des entrées de registre...
+StatusRegisterFiles=Enregistrement des fichiers...
+StatusSavingUninstall=Sauvegarde des informations de désinstallation...
+StatusRunProgram=Finalisation de l'installation...
+StatusRestartingApplications=Relance les applications...
+StatusRollback=Annulation des modifications...
+
+; *** Misc. errors
+ErrorInternal2=Erreur interne : %1
+ErrorFunctionFailedNoCode=%1 a échoué
+ErrorFunctionFailed=%1 a échoué ; code %2
+ErrorFunctionFailedWithMessage=%1 a échoué ; code %2.%n%3
+ErrorExecutingProgram=Impossible d'exécuter le fichier :%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Erreur lors de l'ouverture de la clé de registre :%n%1\%2
+ErrorRegCreateKey=Erreur lors de la création de la clé de registre :%n%1\%2
+ErrorRegWriteKey=Erreur lors de l'écriture de la clé de registre :%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Erreur d'écriture d'une entrée dans le fichier INI "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Ignorer ce fichier (non recommandé)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer l'erreur et continuer (non recommandé)
+SourceIsCorrupted=Le fichier source est altéré
+SourceDoesntExist=Le fichier source "%1" n'existe pas
+ExistingFileReadOnly2=Le fichier existant ne peut pas être remplacé parce qu'il est protégé par l'attribut lecture seule.
+ExistingFileReadOnlyRetry=&Supprimer l'attribut lecture seule et réessayer
+ExistingFileReadOnlyKeepExisting=&Conserver le fichier existant
+ErrorReadingExistingDest=Une erreur s'est produite lors de la tentative de lecture du fichier existant :
+FileExistsSelectAction=Choisissez une action
+FileExists2=Le fichier existe déjà.
+FileExistsOverwriteExisting=&Ecraser le fichier existant
+FileExistsKeepExisting=&Conserver le fichier existant
+FileExistsOverwriteOrKeepAll=&Faire ceci pour les conflits à venir
+ExistingFileNewerSelectAction=Choisissez une action
+ExistingFileNewer2=Le fichier existant est plus récent que celui que l'assistant d'installation est en train d'installer.
+ExistingFileNewerOverwriteExisting=&Ecraser le fichier existant
+ExistingFileNewerKeepExisting=&Conserver le fichier existant (recommandé)
+ExistingFileNewerOverwriteOrKeepAll=&Faire ceci pour les conflits à venir
+ErrorChangingAttr=Une erreur est survenue en essayant de modifier les attributs du fichier existant :
+ErrorCreatingTemp=Une erreur est survenue en essayant de créer un fichier dans le dossier de destination :
+ErrorReadingSource=Une erreur est survenue lors de la lecture du fichier source :
+ErrorCopying=Une erreur est survenue lors de la copie d'un fichier :
+ErrorReplacingExistingFile=Une erreur est survenue lors du remplacement d'un fichier existant :
+ErrorRestartReplace=Le marquage d'un fichier pour remplacement au redémarrage de l'ordinateur a échoué :
+ErrorRenamingTemp=Une erreur est survenue en essayant de renommer un fichier dans le dossier de destination :
+ErrorRegisterServer=Impossible d'enregistrer la bibliothèque DLL/OCX : %1
+ErrorRegSvr32Failed=RegSvr32 a échoué et a retourné le code d'erreur %1
+ErrorRegisterTypeLib=Impossible d'enregistrer la bibliothèque de type : %1
+
+; *** Nom d'affichage pour la désinstallaton
+; par exemple 'Mon Programme (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; ou par exemple 'Mon Programme (32-bit, Tous les utilisateurs)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bit
+UninstallDisplayNameMark64Bit=64-bit
+UninstallDisplayNameMarkAllUsers=Tous les utilisateurs
+UninstallDisplayNameMarkCurrentUser=Utilisateur courant
+
+; *** Post-installation errors
+ErrorOpeningReadme=Une erreur est survenue à l'ouverture du fichier LISEZMOI.
+ErrorRestartingComputer=L'installation n'a pas pu redémarrer l'ordinateur. Merci de bien vouloir le faire vous-même.
+
+; *** Uninstaller messages
+UninstallNotFound=Le fichier "%1" n'existe pas. Impossible de désinstaller.
+UninstallOpenError=Le fichier "%1" n'a pas pu être ouvert. Impossible de désinstaller
+UninstallUnsupportedVer=Le format du fichier journal de désinstallation "%1" n'est pas reconnu par cette version de la procédure de désinstallation. Impossible de désinstaller
+UninstallUnknownEntry=Une entrée inconnue (%1) a été rencontrée dans le fichier journal de désinstallation
+ConfirmUninstall=Êtes-vous sûr de vouloir exécuter l'assistant de désinstallation %1 ?
+UninstallOnlyOnWin64=La désinstallation de ce programme ne fonctionne qu'avec une version 64 bits de Windows.
+OnlyAdminCanUninstall=Ce programme ne peut être désinstallé que par un utilisateur disposant des droits d'administration.
+UninstallStatusLabel=Veuillez patienter pendant que %1 est retiré de votre ordinateur.
+UninstalledAll=%1 a été correctement désinstallé de cet ordinateur.
+UninstalledMost=La désinstallation de %1 est terminée.%n%nCertains éléments n'ont pas pu être supprimés automatiquement. Vous pouvez les supprimer manuellement.
+UninstalledAndNeedsRestart=Vous devez redémarrer l'ordinateur pour terminer la désinstallation de %1.%n%nVoulez-vous redémarrer maintenant ?
+UninstallDataCorrupted=Le ficher "%1" est altéré. Impossible de désinstaller
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Supprimer les fichiers partagés ?
+ConfirmDeleteSharedFile2=Le système indique que le fichier partagé suivant n'est plus utilisé par aucun programme. Souhaitez-vous que la désinstallation supprime ce fichier partagé ?%n%nSi des programmes utilisent encore ce fichier et qu'il est supprimé, ces programmes ne pourront plus fonctionner correctement. Si vous n'êtes pas sûr, choisissez Non. Laisser ce fichier dans votre système ne posera pas de problème.
+SharedFileNameLabel=Nom du fichier :
+SharedFileLocationLabel=Emplacement :
+WizardUninstalling=État de la désinstallation
+StatusUninstalling=Désinstallation de %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Installe %1.
+ShutdownBlockReasonUninstallingApp=Désinstalle %1.
+
+; Les messages personnalisés suivants ne sont pas utilisé par l'installation
+; elle-même, mais si vous les utilisez dans vos scripts, vous devez les
+; traduire
+
+[CustomMessages]
+
+NameAndVersion=%1 version %2
+AdditionalIcons=Icônes supplémentaires :
+CreateDesktopIcon=Créer une icône sur le &Bureau
+CreateQuickLaunchIcon=Créer une icône dans la barre de &Lancement rapide
+ProgramOnTheWeb=Page d'accueil de %1
+UninstallProgram=Désinstaller %1
+LaunchProgram=Exécuter %1
+AssocFileExtension=&Associer %1 avec l'extension de fichier %2
+AssocingFileExtension=Associe %1 avec l'extension de fichier %2...
+AutoStartProgramGroupDescription=Démarrage :
+AutoStartProgram=Démarrer automatiquement %1
+AddonHostProgramNotFound=%1 n'a pas été trouvé dans le dossier que vous avez choisi.%n%nVoulez-vous continuer malgré tout ?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Choisissez le mode d'installation
+SelectSetupInstallModeDesc=VCMI peut être installé pour tous les utilisateurs ou seulement pour vous.
+SelectSetupInstallModeSubTitle=Saisissez votre mode d'installation préféré :
+InstallForAllUsers=Installer pour tous les utilisateurs
+InstallForAllUsers1=Nécessite des privilèges administratifs
+InstallForMeOnly=Installer uniquement pour moi
+InstallForMeOnly1=Un message du pare-feu apparaîtra lors du premier lancement du jeu
+InstallForMeOnly2=Les jeux en réseau local ne fonctionneront pas si la règle du pare-feu ne peut pas être autorisée
+SystemIntegration=Intégration système
+CreateDesktopShortcuts=Créer des raccourcis sur le bureau
+CreateStartMenuShortcuts=Créer des raccourcis dans le menu Démarrer
+AssociateH3MFiles=Associer les fichiers .h3m avec l'éditeur de cartes VCMI
+AssociateVCMIMapFiles=Associer les fichiers .vmap et .vcmp avec l'éditeur de cartes VCMI
+VCMISettings=Configuration de VCMI
+AddFirewallRules=Ajouter des règles de pare-feu pour VCMI
+CopyH3Files=Copier automatiquement les fichiers nécessaires de Heroes III vers VCMI
+RunVCMILauncherAfterInstall=Lancer le lanceur VCMI
+ShortcutMapEditor=Éditeur de cartes VCMI
+ShortcutLauncher=Lanceur VCMI
+ShortcutWebPage=Site officiel de VCMI
+ShortcutDiscord=Discord officiel de VCMI
+ShortcutLauncherComment=Lancer le lanceur VCMI
+ShortcutMapEditorComment=Ouvrir l'éditeur de cartes VCMI
+ShortcutWebPageComment=Visiter le site officiel de VCMI
+ShortcutDiscordComment=Visiter le Discord officiel de VCMI
+DeleteUserData=Supprimer les données utilisateur
+Uninstall=Désinstaller
+Warning=Avertissement
+VMAPDescription=Fichier de carte VCMI
+VCMPDescription=Fichier de campagne VCMI
+H3MDescription=Fichier de carte Heroes 3

+ 438 - 0
CI/wininstaller/lang/German.isl

@@ -0,0 +1,438 @@
+; ******************************************************
+; ***                                                ***
+; *** Inno Setup version 6.1.0+ German messages      ***
+; ***                                                ***
+; *** Changes 6.0.0+ Author:                         ***
+; ***                                                ***
+; ***   Jens Brand ([email protected])     ***
+; ***                                                ***
+; *** Original Authors:                              ***
+; ***                                                ***
+; ***   Peter Stadler ([email protected])   ***
+; ***   Michael Reitz ([email protected])      ***
+; ***                                                ***
+; *** Contributors:                                  ***
+; ***                                                ***
+; ***   Roland Ruder ([email protected])                  ***
+; ***   Hans Sperber ([email protected])     ***
+; ***   LaughingMan ([email protected])                  ***
+; ***                                                ***
+; ******************************************************
+;
+; Diese Übersetzung hält sich an die neue deutsche Rechtschreibung.
+
+; To download user-contributed translations of this file, go to:
+; https://jrsoftware.org/files/istrans/
+
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Deutsch
+LanguageID=$0407
+LanguageCodePage=1252
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Setup
+SetupWindowTitle=Setup - %1
+UninstallAppTitle=Entfernen
+UninstallAppFullTitle=%1 entfernen
+
+; *** Misc. common
+InformationTitle=Information
+ConfirmTitle=Bestätigen
+ErrorTitle=Fehler
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=%1 wird jetzt installiert. Möchten Sie fortfahren?
+LdrCannotCreateTemp=Es konnte keine temporäre Datei erstellt werden. Das Setup wurde abgebrochen
+LdrCannotExecTemp=Die Datei konnte nicht im temporären Ordner ausgeführt werden. Das Setup wurde abgebrochen
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nFehler %2: %3
+SetupFileMissing=Die Datei %1 fehlt im Installationsordner. Bitte beheben Sie das Problem oder besorgen Sie sich eine neue Kopie des Programms.
+SetupFileCorrupt=Die Setup-Dateien sind beschädigt. Besorgen Sie sich bitte eine neue Kopie des Programms.
+SetupFileCorruptOrWrongVer=Die Setup-Dateien sind beschädigt oder inkompatibel zu dieser Version des Setups. Bitte beheben Sie das Problem oder besorgen Sie sich eine neue Kopie des Programms.
+InvalidParameter=Ein ungültiger Parameter wurde auf der Kommandozeile übergeben:%n%n%1
+SetupAlreadyRunning=Setup läuft bereits.
+WindowsVersionNotSupported=Dieses Programm kann auf Ihrer Windows-Version nicht ausgeführt werden. Stellen Sie sicher, dass Sie die richtige Windows-Architektur (32-Bit oder 64-Bit) und die entsprechende Version dieses Programms verwenden.
+WindowsServicePackRequired=Dieses Programm benötigt %1 Service Pack %2 oder höher.
+NotOnThisPlatform=Dieses Programm kann nicht unter %1 ausgeführt werden.
+OnlyOnThisPlatform=Dieses Programm muss unter %1 ausgeführt werden.
+OnlyOnTheseArchitectures=Dieses Programm kann nur auf Windows-Versionen installiert werden, die folgende Prozessor-Architekturen unterstützen:%n%n%1
+WinVersionTooLowError=Dieses Programm benötigt %1 Version %2 oder höher.
+WinVersionTooHighError=Dieses Programm kann nicht unter %1 Version %2 oder höher installiert werden.
+AdminPrivilegesRequired=Sie müssen als Administrator angemeldet sein, um dieses Programm installieren zu können.
+PowerUserPrivilegesRequired=Sie müssen als Administrator oder als Mitglied der Hauptbenutzer-Gruppe angemeldet sein, um dieses Programm installieren zu können.
+SetupAppRunningError=Das Setup hat entdeckt, dass %1 zurzeit ausgeführt wird.%n%nBitte schließen Sie jetzt alle laufenden Instanzen und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden.
+UninstallAppRunningError=Die Deinstallation hat entdeckt, dass %1 zurzeit ausgeführt wird.%n%nBitte schließen Sie jetzt alle laufenden Instanzen und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Installationsmodus auswählen
+PrivilegesRequiredOverrideInstruction=Bitte wählen Sie den Installationsmodus
+PrivilegesRequiredOverrideText1=%1 kann für alle Benutzer (erfordert Administrationsrechte) oder nur für Sie installiert werden.
+PrivilegesRequiredOverrideText2=%1 kann nur für Sie oder für alle Benutzer (erfordert Administrationsrechte) installiert werden.
+PrivilegesRequiredOverrideAllUsers=Installation für &alle Benutzer
+PrivilegesRequiredOverrideAllUsersRecommended=Installation für &alle Benutzer (empfohlen)
+PrivilegesRequiredOverrideCurrentUser=Installation nur für &Sie
+PrivilegesRequiredOverrideCurrentUserRecommended=Installation nur für &Sie (empfohlen)
+
+; *** Misc. errors
+ErrorCreatingDir=Das Setup konnte den Ordner "%1" nicht erstellen.
+ErrorTooManyFilesInDir=Das Setup konnte eine Datei im Ordner "%1" nicht erstellen, weil er zu viele Dateien enthält.
+
+; *** Setup common messages
+ExitSetupTitle=Setup verlassen
+ExitSetupMessage=Das Setup ist noch nicht abgeschlossen. Wenn Sie jetzt beenden, wird das Programm nicht installiert.%n%nSie können das Setup zu einem späteren Zeitpunkt nochmals ausführen, um die Installation zu vervollständigen.%n%nSetup verlassen?
+AboutSetupMenuItem=&Über das Setup ...
+AboutSetupTitle=Über das Setup
+AboutSetupMessage=%1 Version %2%n%3%n%n%1 Webseite:%n%4
+AboutSetupNote=
+TranslatorNote=German translation maintained by Jens Brand ([email protected])
+
+; *** Buttons
+ButtonBack=< &Zurück
+ButtonNext=&Weiter >
+ButtonInstall=&Installieren
+ButtonOK=OK
+ButtonCancel=Abbrechen
+ButtonYes=&Ja
+ButtonYesToAll=J&a für Alle
+ButtonNo=&Nein
+ButtonNoToAll=N&ein für Alle
+ButtonFinish=&Fertigstellen
+ButtonBrowse=&Durchsuchen ...
+ButtonWizardBrowse=Du&rchsuchen ...
+ButtonNewFolder=&Neuen Ordner erstellen
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Setup-Sprache auswählen
+SelectLanguageLabel=Wählen Sie die Sprache aus, die während der Installation benutzt werden soll:
+
+; *** Common wizard text
+ClickNext="Weiter" zum Fortfahren, "Abbrechen" zum Verlassen.
+BeveledLabel=
+BrowseDialogTitle=Ordner suchen
+BrowseDialogLabel=Wählen Sie einen Ordner aus und klicken Sie danach auf "OK".
+NewFolderName=Neuer Ordner
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Willkommen zum [name] Setup-Assistenten
+WelcomeLabel2=Dieser Assistent wird jetzt [name/ver] auf Ihrem Computer installieren.%n%nSie sollten alle anderen Anwendungen beenden, bevor Sie mit dem Setup fortfahren.
+
+; *** "Password" wizard page
+WizardPassword=Passwort
+PasswordLabel1=Diese Installation wird durch ein Passwort geschützt.
+PasswordLabel3=Bitte geben Sie das Passwort ein und klicken Sie danach auf "Weiter". Achten Sie auf korrekte Groß-/Kleinschreibung.
+PasswordEditLabel=&Passwort:
+IncorrectPassword=Das eingegebene Passwort ist nicht korrekt. Bitte versuchen Sie es noch einmal.
+
+; *** "License Agreement" wizard page
+WizardLicense=Lizenzvereinbarung
+LicenseLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren.
+LicenseLabel3=Lesen Sie bitte die folgenden Lizenzvereinbarungen. Benutzen Sie bei Bedarf die Bildlaufleiste oder drücken Sie die "Bild Ab"-Taste.
+LicenseAccepted=Ich &akzeptiere die Vereinbarung
+LicenseNotAccepted=Ich &lehne die Vereinbarung ab
+
+; *** "Information" wizard pages
+WizardInfoBefore=Information
+InfoBeforeLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren.
+InfoBeforeClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind, mit dem Setup fortzufahren.
+WizardInfoAfter=Information
+InfoAfterLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren.
+InfoAfterClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind, mit dem Setup fortzufahren.
+
+; *** "User Information" wizard page
+WizardUserInfo=Benutzerinformationen
+UserInfoDesc=Bitte tragen Sie Ihre Daten ein.
+UserInfoName=&Name:
+UserInfoOrg=&Organisation:
+UserInfoSerial=&Seriennummer:
+UserInfoNameRequired=Sie müssen einen Namen eintragen.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Ziel-Ordner wählen
+SelectDirDesc=Wohin soll [name] installiert werden?
+SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren.
+SelectDirBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswählen möchten.
+DiskSpaceGBLabel=Mindestens [gb] GB freier Speicherplatz ist erforderlich.
+DiskSpaceMBLabel=Mindestens [mb] MB freier Speicherplatz ist erforderlich.
+CannotInstallToNetworkDrive=Das Setup kann nicht in einen Netzwerk-Pfad installieren.
+CannotInstallToUNCPath=Das Setup kann nicht in einen UNC-Pfad installieren. Wenn Sie auf ein Netzlaufwerk installieren möchten, müssen Sie dem Netzwerkpfad einen Laufwerksbuchstaben zuordnen.
+InvalidPath=Sie müssen einen vollständigen Pfad mit einem Laufwerksbuchstaben angeben, z. B.:%n%nC:\Beispiel%n%noder einen UNC-Pfad in der Form:%n%n\\Server\Freigabe
+InvalidDrive=Das angegebene Laufwerk bzw. der UNC-Pfad existiert nicht oder es kann nicht darauf zugegriffen werden. Wählen Sie bitte einen anderen Ordner.
+DiskSpaceWarningTitle=Nicht genug freier Speicherplatz
+DiskSpaceWarning=Das Setup benötigt mindestens %1 KB freien Speicherplatz zum Installieren, aber auf dem ausgewählten Laufwerk sind nur %2 KB verfügbar.%n%nMöchten Sie trotzdem fortfahren?
+DirNameTooLong=Der Ordnername/Pfad ist zu lang.
+InvalidDirName=Der Ordnername ist nicht gültig.
+BadDirName32=Ordnernamen dürfen keine der folgenden Zeichen enthalten:%n%n%1
+DirExistsTitle=Ordner existiert bereits
+DirExists=Der Ordner:%n%n%1%n%n existiert bereits. Möchten Sie trotzdem in diesen Ordner installieren?
+DirDoesntExistTitle=Ordner ist nicht vorhanden
+DirDoesntExist=Der Ordner:%n%n%1%n%nist nicht vorhanden. Soll der Ordner erstellt werden?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Komponenten auswählen
+SelectComponentsDesc=Welche Komponenten sollen installiert werden?
+SelectComponentsLabel2=Wählen Sie die Komponenten aus, die Sie installieren möchten. Klicken Sie auf "Weiter", wenn Sie bereit sind, fortzufahren.
+FullInstallation=Vollständige Installation
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Kompakte Installation
+CustomInstallation=Benutzerdefinierte Installation
+NoUninstallWarningTitle=Komponenten vorhanden
+NoUninstallWarning=Das Setup hat festgestellt, dass die folgenden Komponenten bereits auf Ihrem Computer installiert sind:%n%n%1%n%nDiese nicht mehr ausgewählten Komponenten werden nicht vom Computer entfernt.%n%nMöchten Sie trotzdem fortfahren?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Die aktuelle Auswahl erfordert mindestens [gb] GB Speicherplatz.
+ComponentsDiskSpaceMBLabel=Die aktuelle Auswahl erfordert mindestens [mb] MB Speicherplatz.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Zusätzliche Aufgaben auswählen
+SelectTasksDesc=Welche zusätzlichen Aufgaben sollen ausgeführt werden?
+SelectTasksLabel2=Wählen Sie die zusätzlichen Aufgaben aus, die das Setup während der Installation von [name] ausführen soll, und klicken Sie danach auf "Weiter".
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Startmenü-Ordner auswählen
+SelectStartMenuFolderDesc=Wo soll das Setup die Programm-Verknüpfungen erstellen?
+SelectStartMenuFolderLabel3=Das Setup wird die Programm-Verknüpfungen im folgenden Startmenü-Ordner erstellen.
+SelectStartMenuFolderBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswählen möchten.
+MustEnterGroupName=Sie müssen einen Ordnernamen eingeben.
+GroupNameTooLong=Der Ordnername/Pfad ist zu lang.
+InvalidGroupName=Der Ordnername ist nicht gültig.
+BadGroupName=Der Ordnername darf keine der folgenden Zeichen enthalten:%n%n%1
+NoProgramGroupCheck2=&Keinen Ordner im Startmenü erstellen
+
+; *** "Ready to Install" wizard page
+WizardReady=Bereit zur Installation.
+ReadyLabel1=Das Setup ist jetzt bereit, [name] auf Ihrem Computer zu installieren.
+ReadyLabel2a=Klicken Sie auf "Installieren", um mit der Installation zu beginnen, oder auf "Zurück", um Ihre Einstellungen zu überprüfen oder zu ändern.
+ReadyLabel2b=Klicken Sie auf "Installieren", um mit der Installation zu beginnen.
+ReadyMemoUserInfo=Benutzerinformationen:
+ReadyMemoDir=Ziel-Ordner:
+ReadyMemoType=Setup-Typ:
+ReadyMemoComponents=Ausgewählte Komponenten:
+ReadyMemoGroup=Startmenü-Ordner:
+ReadyMemoTasks=Zusätzliche Aufgaben:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Lade zusätzliche Dateien herunter...
+ButtonStopDownload=Download &abbrechen
+StopDownload=Sind Sie sicher, dass Sie den Download abbrechen wollen?
+ErrorDownloadAborted=Download abgebrochen
+ErrorDownloadFailed=Download fehlgeschlagen: %1 %2
+ErrorDownloadSizeFailed=Fehler beim Ermitteln der Größe: %1 %2
+ErrorFileHash1=Fehler beim Ermitteln der Datei-Prüfsumme: %1
+ErrorFileHash2=Ungültige Datei-Prüfsumme: erwartet %1, gefunden %2
+ErrorProgress=Ungültiger Fortschritt: %1 von %2
+ErrorFileSize=Ungültige Dateigröße: erwartet %1, gefunden %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Vorbereitung der Installation
+PreparingDesc=Das Setup bereitet die Installation von [name] auf diesem Computer vor.
+PreviousInstallNotCompleted=Eine vorherige Installation/Deinstallation eines Programms wurde nicht abgeschlossen. Der Computer muss neu gestartet werden, um die Installation/Deinstallation zu beenden.%n%nStarten Sie das Setup nach dem Neustart Ihres Computers erneut, um die Installation von [name] durchzuführen.
+CannotContinue=Das Setup kann nicht fortfahren. Bitte klicken Sie auf "Abbrechen" zum Verlassen.
+ApplicationsFound=Die folgenden Anwendungen benutzen Dateien, die aktualisiert werden müssen. Es wird empfohlen, Setup zu erlauben, diese Anwendungen zu schließen.
+ApplicationsFound2=Die folgenden Anwendungen benutzen Dateien, die aktualisiert werden müssen. Es wird empfohlen, Setup zu erlauben, diese Anwendungen zu schließen. Nachdem die Installation fertiggestellt wurde, versucht Setup, diese Anwendungen wieder zu starten.
+CloseApplications=&Schließe die Anwendungen automatisch
+DontCloseApplications=Schließe die A&nwendungen nicht
+ErrorCloseApplications=Das Setup konnte nicht alle Anwendungen automatisch schließen. Es wird empfohlen, alle Anwendungen zu schließen, die Dateien benutzen, die vom Setup vor einer Fortsetzung aktualisiert werden müssen.  
+PrepareToInstallNeedsRestart=Das Setup muss Ihren Computer neu starten. Führen Sie nach dem Neustart Setup erneut aus, um die Installation von [name] abzuschließen.%n%nWollen Sie jetzt neu starten? 
+
+; *** "Installing" wizard page
+WizardInstalling=Installiere ...
+InstallingLabel=Warten Sie bitte, während [name] auf Ihrem Computer installiert wird.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Beenden des [name] Setup-Assistenten
+FinishedLabelNoIcons=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen.
+FinishedLabel=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. Die Anwendung kann über die installierten Programm-Verknüpfungen gestartet werden.
+ClickFinish=Klicken Sie auf "Fertigstellen", um das Setup zu beenden.
+FinishedRestartLabel=Um die Installation von [name] abzuschließen, muss das Setup Ihren Computer neu starten. Möchten Sie jetzt neu starten?
+FinishedRestartMessage=Um die Installation von [name] abzuschließen, muss das Setup Ihren Computer neu starten.%n%nMöchten Sie jetzt neu starten?
+ShowReadmeCheck=Ja, ich möchte die LIESMICH-Datei sehen
+YesRadio=&Ja, Computer jetzt neu starten
+NoRadio=&Nein, ich werde den Computer später neu starten
+; used for example as 'Run MyProg.exe'
+RunEntryExec=%1 starten
+; used for example as 'View Readme.txt'
+RunEntryShellExec=%1 anzeigen
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Nächsten Datenträger einlegen
+SelectDiskLabel2=Legen Sie bitte Datenträger %1 ein und klicken Sie auf "OK".%n%nWenn sich die Dateien von diesem Datenträger in einem anderen als dem angezeigten Ordner befinden, dann geben Sie bitte den korrekten Pfad ein oder klicken auf "Durchsuchen".
+PathLabel=&Pfad:
+FileNotInDir2=Die Datei "%1" befindet sich nicht in "%2". Bitte Ordner ändern oder richtigen Datenträger einlegen.
+SelectDirectoryLabel=Geben Sie bitte an, wo der nächste Datenträger eingelegt wird.
+
+; *** Installation phase messages
+SetupAborted=Das Setup konnte nicht abgeschlossen werden.%n%nBeheben Sie bitte das Problem und starten Sie das Setup erneut.
+AbortRetryIgnoreSelectAction=Bitte auswählen
+AbortRetryIgnoreRetry=&Nochmals versuchen
+AbortRetryIgnoreIgnore=&Den Fehler ignorieren und fortfahren
+AbortRetryIgnoreCancel=Installation abbrechen
+
+; *** Installation status messages
+StatusClosingApplications=Anwendungen werden geschlossen ...
+StatusCreateDirs=Ordner werden erstellt ...
+StatusExtractFiles=Dateien werden entpackt ...
+StatusCreateIcons=Verknüpfungen werden erstellt ...
+StatusCreateIniEntries=INI-Einträge werden erstellt ...
+StatusCreateRegistryEntries=Registry-Einträge werden erstellt ...
+StatusRegisterFiles=Dateien werden registriert ...
+StatusSavingUninstall=Deinstallationsinformationen werden gespeichert ...
+StatusRunProgram=Installation wird beendet ...
+StatusRestartingApplications=Neustart der Anwendungen ...
+StatusRollback=Änderungen werden rückgängig gemacht ...
+
+; *** Misc. errors
+ErrorInternal2=Interner Fehler: %1
+ErrorFunctionFailedNoCode=%1 schlug fehl
+ErrorFunctionFailed=%1 schlug fehl; Code %2
+ErrorFunctionFailedWithMessage=%1 schlug fehl; Code %2.%n%3
+ErrorExecutingProgram=Datei kann nicht ausgeführt werden:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Registry-Schlüssel konnte nicht geöffnet werden:%n%1\%2
+ErrorRegCreateKey=Registry-Schlüssel konnte nicht erstellt werden:%n%1\%2
+ErrorRegWriteKey=Fehler beim Schreiben des Registry-Schlüssels:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Fehler beim Erstellen eines INI-Eintrages in der Datei "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=Diese Datei &überspringen (nicht empfohlen)
+FileAbortRetryIgnoreIgnoreNotRecommended=Den Fehler &ignorieren und fortfahren (nicht empfohlen)
+SourceIsCorrupted=Die Quelldatei ist beschädigt
+SourceDoesntExist=Die Quelldatei "%1" existiert nicht
+ExistingFileReadOnly2=Die vorhandene Datei kann nicht ersetzt werden, da sie schreibgeschützt ist.
+ExistingFileReadOnlyRetry=&Den Schreibschutz entfernen und noch einmal versuchen
+ExistingFileReadOnlyKeepExisting=Die &vorhandene Datei behalten
+ErrorReadingExistingDest=Lesefehler in Datei:
+FileExistsSelectAction=Aktion auswählen
+FileExists2=Die Datei ist bereits vorhanden.
+FileExistsOverwriteExisting=Vorhandene Datei &überschreiben
+FileExistsKeepExisting=Vorhandene Datei &behalten
+FileExistsOverwriteOrKeepAll=&Dies auch für die nächsten Konflikte ausführen
+ExistingFileNewerSelectAction=Aktion auswählen
+ExistingFileNewer2=Die vorhandene Datei ist neuer als die Datei, die installiert werden soll.
+ExistingFileNewerOverwriteExisting=Vorhandene Datei &überschreiben
+ExistingFileNewerKeepExisting=Vorhandene Datei &behalten (empfohlen)
+ExistingFileNewerOverwriteOrKeepAll=&Dies auch für die nächsten Konflikte ausführen
+ErrorChangingAttr=Fehler beim Ändern der Datei-Attribute:
+ErrorCreatingTemp=Fehler beim Erstellen einer Datei im Ziel-Ordner:
+ErrorReadingSource=Fehler beim Lesen der Quelldatei:
+ErrorCopying=Fehler beim Kopieren einer Datei:
+ErrorReplacingExistingFile=Fehler beim Ersetzen einer vorhandenen Datei:
+ErrorRestartReplace="Ersetzen nach Neustart" fehlgeschlagen:
+ErrorRenamingTemp=Fehler beim Umbenennen einer Datei im Ziel-Ordner:
+ErrorRegisterServer=DLL/OCX konnte nicht registriert werden: %1
+ErrorRegSvr32Failed=RegSvr32-Aufruf scheiterte mit Exit-Code %1
+ErrorRegisterTypeLib=Typen-Bibliothek konnte nicht registriert werden: %1
+
+; *** Uninstall display name markings
+; used for example as 'Mein Programm (32 Bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'Mein Programm (32 Bit, Alle Benutzer)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32 Bit
+UninstallDisplayNameMark64Bit=64 Bit
+UninstallDisplayNameMarkAllUsers=Alle Benutzer
+UninstallDisplayNameMarkCurrentUser=Aktueller Benutzer
+
+; *** Post-installation errors
+ErrorOpeningReadme=Fehler beim Öffnen der LIESMICH-Datei.
+ErrorRestartingComputer=Das Setup konnte den Computer nicht neu starten. Bitte führen Sie den Neustart manuell durch.
+
+; *** Uninstaller messages
+UninstallNotFound=Die Datei "%1" existiert nicht. Entfernen der Anwendung fehlgeschlagen.
+UninstallOpenError=Die Datei "%1" konnte nicht geöffnet werden. Entfernen der Anwendung fehlgeschlagen.
+UninstallUnsupportedVer=Das Format der Deinstallationsdatei "%1" konnte nicht erkannt werden. Entfernen der Anwendung fehlgeschlagen.
+UninstallUnknownEntry=In der Deinstallationsdatei wurde ein unbekannter Eintrag (%1) gefunden.
+ConfirmUninstall=Möchten Sie den %1 Deinstallationsassistenten wirklich ausführen?
+UninstallOnlyOnWin64=Diese Installation kann nur unter 64-Bit-Windows-Versionen entfernt werden.
+OnlyAdminCanUninstall=Diese Installation kann nur von einem Benutzer mit Administrator-Rechten entfernt werden.
+UninstallStatusLabel=Warten Sie bitte, während %1 von Ihrem Computer entfernt wird.
+UninstalledAll=%1 wurde erfolgreich von Ihrem Computer entfernt.
+UninstalledMost=Entfernen von %1 beendet.%n%nEinige Komponenten konnten nicht entfernt werden. Diese können von Ihnen manuell gelöscht werden.
+UninstalledAndNeedsRestart=Um die Deinstallation von %1 abzuschließen, muss Ihr Computer neu gestartet werden.%n%nMöchten Sie jetzt neu starten?
+UninstallDataCorrupted="%1"-Datei ist beschädigt. Entfernen der Anwendung fehlgeschlagen.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Gemeinsame Datei entfernen?
+ConfirmDeleteSharedFile2=Das System zeigt an, dass die folgende gemeinsame Datei von keinem anderen Programm mehr benutzt wird. Möchten Sie diese Datei entfernen lassen?%nSollte es doch noch Programme geben, die diese Datei benutzen und sie wird entfernt, funktionieren diese Programme vielleicht nicht mehr richtig. Wenn Sie unsicher sind, wählen Sie "Nein", um die Datei im System zu belassen. Es schadet Ihrem System nicht, wenn Sie die Datei behalten.
+SharedFileNameLabel=Dateiname:
+SharedFileLocationLabel=Ordner:
+WizardUninstalling=Entfernen (Status)
+StatusUninstalling=Entferne %1 ...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Installation von %1.
+ShutdownBlockReasonUninstallingApp=Deinstallation von %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 Version %2
+AdditionalIcons=Zusätzliche Symbole:
+CreateDesktopIcon=&Desktop-Symbol erstellen
+CreateQuickLaunchIcon=Symbol in der Schnellstartleiste erstellen
+ProgramOnTheWeb=%1 im Internet
+UninstallProgram=%1 entfernen
+LaunchProgram=%1 starten
+AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung
+AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert...
+AutoStartProgramGroupDescription=Beginn des Setups:
+AutoStartProgram=Starte automatisch %1
+AddonHostProgramNotFound=%1 konnte im ausgewählten Ordner nicht gefunden werden.%n%nMöchten Sie dennoch fortfahren?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Wählen Sie den Installationsmodus
+SelectSetupInstallModeDesc=VCMI kann für alle Benutzer oder nur für Sie installiert werden.
+SelectSetupInstallModeSubTitle=Wählen Sie den bevorzugten Installationsmodus:
+InstallForAllUsers=Für alle Benutzer installieren
+InstallForAllUsers1=Erfordert Administratorrechte
+InstallForMeOnly=Nur für mich installieren
+InstallForMeOnly1=Beim ersten Start des Spiels erscheint eine Firewall-Benachrichtigung
+InstallForMeOnly2=LAN-Spiele funktionieren nicht, wenn die Firewall-Regel nicht zugelassen werden kann
+SystemIntegration=Systemintegration
+CreateDesktopShortcuts=Desktop-Verknüpfungen erstellen
+CreateStartMenuShortcuts=Verknüpfungen im Startmenü erstellen
+AssociateH3MFiles=.h3m-Dateien mit dem VCMI-Karteneditor verknüpfen
+AssociateVCMIMapFiles=.vmap- und .vcmp-Dateien mit dem VCMI-Karteneditor verknüpfen
+VCMISettings=VCMI-Konfiguration
+AddFirewallRules=Firewall-Regeln für VCMI hinzufügen
+CopyH3Files=Erforderliche Heroes-III-Dateien automatisch in VCMI kopieren
+RunVCMILauncherAfterInstall=VCMI Launcher starten
+ShortcutMapEditor=VCMI Karteneditor
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=VCMI Webseite
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=VCMI Launcher starten
+ShortcutMapEditorComment=VCMI Karteneditor öffnen
+ShortcutWebPageComment=Offizielle VCMI-Webseite besuchen
+ShortcutDiscordComment=Offiziellen VCMI Discord besuchen
+DeleteUserData=Benutzerdaten löschen
+Uninstall=Deinstallieren
+Warning=Warnung
+VMAPDescription=VCMI-Kartendatei
+VCMPDescription=VCMI-Kampagnendatei
+H3MDescription=Heroes-3-Kartendatei

+ 419 - 0
CI/wininstaller/lang/Hungarian.isl

@@ -0,0 +1,419 @@
+; *** Inno Setup version 6.1.0+ Hungarian messages ***
+;	Based on the translation of Kornél Pál, [email protected]
+;	István Szabó, E-mail: [email protected]
+;
+; To download user-contributed translations of this file, go to:
+;   http://www.jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Magyar
+LanguageID=$040E
+LanguageCodePage=1250
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial CE
+;TitleFontSize=29
+;CopyrightFontName=Arial CE
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Telepítő
+SetupWindowTitle=%1 - Telepítő
+UninstallAppTitle=Eltávolító
+UninstallAppFullTitle=%1 - Eltávolító
+
+; *** Misc. common
+InformationTitle=Információk
+ConfirmTitle=Megerősít
+ErrorTitle=Hiba
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=%1 telepítve lesz. Szeretné folytatni?
+LdrCannotCreateTemp=Átmeneti fájl létrehozása nem lehetséges. A telepítés megszakítva
+LdrCannotExecTemp=Fájl futattása nem lehetséges az átmeneti könyvtárban. A telepítés megszakítva
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nHiba %2: %3
+SetupFileMissing=A(z) %1 fájl hiányzik a telepítő könyvtárából. Kérem hárítsa el a problémát, vagy szerezzen be egy másik példányt a programból!
+SetupFileCorrupt=A telepítési fájlok sérültek. Kérem, szerezzen be új másolatot a programból!
+SetupFileCorruptOrWrongVer=A telepítési fájlok sérültek, vagy inkompatibilisek a telepítő ezen verziójával. Hárítsa el a problémát, vagy szerezzen be egy másik példányt a programból!
+InvalidParameter=A parancssorba átadott paraméter érvénytelen:%n%n%1
+SetupAlreadyRunning=A Telepítő már fut.
+WindowsVersionNotSupported=Ez a program nem futtatható az Ön Windows-verzióján. Kérjük, győződjön meg arról, hogy a megfelelő Windows-architektúrát (32 bites vagy 64 bites) és a program helyes verzióját használja.
+WindowsServicePackRequired=A program futtatásához %1 Service Pack %2 vagy újabb szükséges.
+NotOnThisPlatform=Ez a program nem futtatható %1 alatt.
+OnlyOnThisPlatform=Ezt a programot %1 alatt kell futtatni.
+OnlyOnTheseArchitectures=A program kizárólag a következő processzor architektúrákhoz tervezett Windows-on telepíthető:%n%n%1
+WinVersionTooLowError=A program futtatásához %1 %2 verziója vagy későbbi szükséges.
+WinVersionTooHighError=Ez a program nem telepíthető %1 %2 vagy későbbire.
+AdminPrivilegesRequired=Csak rendszergazdai módban telepíthető ez a program.
+PowerUserPrivilegesRequired=Csak rendszergazdaként vagy kiemelt felhasználóként telepíthető ez a program.
+SetupAppRunningError=A telepítő úgy észlelte %1 jelenleg fut.%n%nZárja be az összes példányt, majd kattintson az 'OK'-ra a folytatáshoz, vagy a 'Mégse'-re a kilépéshez.
+UninstallAppRunningError=Az eltávolító úgy észlelte %1 jelenleg fut.%n%nZárja be az összes példányt, majd kattintson az 'OK'-ra a folytatáshoz, vagy a 'Mégse'-re a kilépéshez.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Telepítési mód kiválasztása
+PrivilegesRequiredOverrideInstruction=Válasszon telepítési módot
+PrivilegesRequiredOverrideText1=%1 telepíthető az összes felhasználónak (rendszergazdai jogok szükségesek), vagy csak magának.
+PrivilegesRequiredOverrideText2=%1 csak magának telepíthető, vagy az összes felhasználónak (rendszergazdai jogok szükségesek).
+PrivilegesRequiredOverrideAllUsers=Telepítés &mindenkinek
+PrivilegesRequiredOverrideAllUsersRecommended=Telepítés &mindenkinek (ajánlott)
+PrivilegesRequiredOverrideCurrentUser=Telepítés csak &nekem
+PrivilegesRequiredOverrideCurrentUserRecommended=Telepítés csak &nekem (ajánlott)
+
+; *** Misc. errors
+ErrorCreatingDir=A Telepítő nem tudta létrehozni a(z) "%1" könyvtárat
+ErrorTooManyFilesInDir=Nem hozható létre fájl a(z) "%1" könyvtárban, mert az már túl sok fájlt tartalmaz
+
+; *** Setup common messages
+ExitSetupTitle=Kilépés a telepítőből
+ExitSetupMessage=A telepítés még folyamatban van. Ha most kilép, a program nem kerül telepítésre.%n%nMásik alkalommal is futtatható a telepítés befejezéséhez%n%nKilép a telepítőből?
+AboutSetupMenuItem=&Névjegy...
+AboutSetupTitle=Telepítő névjegye
+AboutSetupMessage=%1 %2 verzió%n%3%n%nAz %1 honlapja:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< &Vissza
+ButtonNext=&Tovább >
+ButtonInstall=&Telepít
+ButtonOK=OK
+ButtonCancel=Mégse
+ButtonYes=&Igen
+ButtonYesToAll=&Mindet
+ButtonNo=&Nem
+ButtonNoToAll=&Egyiket se
+ButtonFinish=&Befejezés
+ButtonBrowse=&Tallózás...
+ButtonWizardBrowse=T&allózás...
+ButtonNewFolder=Új &könyvtár
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Telepítő nyelvi beállítás
+SelectLanguageLabel=Válassza ki a telepítés alatt használt nyelvet.
+
+; *** Common wizard text
+ClickNext=A folytatáshoz kattintson a 'Tovább'-ra, a kilépéshez a 'Mégse'-re.
+BeveledLabel=
+BrowseDialogTitle=Válasszon könyvtárt 
+BrowseDialogLabel=Válasszon egy könyvtárat az alábbi listából, majd kattintson az 'OK'-ra.
+NewFolderName=Új könyvtár
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Üdvözli a(z) [name] Telepítővarázslója.
+WelcomeLabel2=A(z) [name/ver] telepítésre kerül a számítógépén.%n%nAjánlott minden, egyéb futó alkalmazás bezárása a folytatás előtt.
+
+; *** "Password" wizard page
+WizardPassword=Jelszó
+PasswordLabel1=Ez a telepítés jelszóval védett.
+PasswordLabel3=Kérem adja meg a jelszót, majd kattintson a 'Tovább'-ra. A jelszavak kis- és nagy betű érzékenyek lehetnek.
+PasswordEditLabel=&Jelszó:
+IncorrectPassword=Az ön által megadott jelszó helytelen. Próbálja újra.
+
+; *** "License Agreement" wizard page
+WizardLicense=Licencszerződés
+LicenseLabel=Olvassa el figyelmesen az információkat folytatás előtt.
+LicenseLabel3=Kérem, olvassa el az alábbi licencszerződést. A telepítés folytatásához, el kell fogadnia a szerződést.
+LicenseAccepted=&Elfogadom a szerződést
+LicenseNotAccepted=&Nem fogadom el a szerződést
+
+; *** "Information" wizard pages
+WizardInfoBefore=Információk
+InfoBeforeLabel=Olvassa el a következő fontos információkat a folytatás előtt.
+InfoBeforeClickLabel=Ha készen áll, kattintson a 'Tovább'-ra.
+WizardInfoAfter=Információk
+InfoAfterLabel=Olvassa el a következő fontos információkat a folytatás előtt.
+InfoAfterClickLabel=Ha készen áll, kattintson a 'Tovább'-ra.
+
+; *** "User Information" wizard page
+WizardUserInfo=Felhasználó adatai
+UserInfoDesc=Kérem, adja meg az adatait!
+UserInfoName=&Felhasználónév:
+UserInfoOrg=&Szervezet:
+UserInfoSerial=&Sorozatszám:
+UserInfoNameRequired=Meg kell adnia egy nevet!
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Válasszon célkönyvtárat
+SelectDirDesc=Hova települjön a(z) [name]?
+SelectDirLabel3=A(z) [name] az alábbi könyvtárba lesz telepítve.
+SelectDirBrowseLabel=A folytatáshoz, kattintson a 'Tovább'-ra. Ha másik könyvtárat választana, kattintson a 'Tallózás'-ra.
+DiskSpaceGBLabel=Legalább [gb] GB szabad területre van szükség.
+DiskSpaceMBLabel=Legalább [mb] MB szabad területre van szükség.
+CannotInstallToNetworkDrive=A Telepítő nem tud hálózati meghajtóra telepíteni.
+CannotInstallToUNCPath=A Telepítő nem tud hálózati UNC elérési útra telepíteni.
+InvalidPath=Teljes útvonalat adjon meg, a meghajtó betűjelével; például:%n%nC:\Alkalmazás%n%nvagy egy hálózati útvonalat a következő alakban:%n%n\\kiszolgáló\megosztás
+InvalidDrive=A kiválasztott meghajtó vagy hálózati megosztás nem létezik vagy nem elérhető. Válasszon egy másikat.
+DiskSpaceWarningTitle=Nincs elég szabad terület
+DiskSpaceWarning=A Telepítőnek legalább %1 KB szabad lemezterületre van szüksége, viszont a kiválasztott meghajtón csupán %2 KB áll rendelkezésre.%n%nMindenképpen folytatja?
+DirNameTooLong=A könyvtár neve vagy az útvonal túl hosszú.
+InvalidDirName=A könyvtár neve érvénytelen.
+BadDirName32=A könyvtárak nevei ezen karakterek egyikét sem tartalmazhatják:%n%n%1
+DirExistsTitle=A könyvtár már létezik
+DirExists=A könyvtár:%n%n%1%n%nmár létezik. Mindenképp ide akar telepíteni?
+DirDoesntExistTitle=A könyvtár nem létezik
+DirDoesntExist=A könyvtár:%n%n%1%n%nnem létezik. Szeretné létrehozni?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Összetevők kiválasztása
+SelectComponentsDesc=Mely összetevők kerüljenek telepítésre?
+SelectComponentsLabel2=Jelölje ki a telepítendő összetevőket; törölje a telepíteni nem kívánt összetevőket. Kattintson a 'Tovább'-ra, ha készen áll a folytatásra.
+FullInstallation=Teljes telepítés
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Szokásos telepítés
+CustomInstallation=Egyéni telepítés
+NoUninstallWarningTitle=Létező összetevő
+NoUninstallWarning=A telepítő úgy találta, hogy a következő összetevők már telepítve vannak a számítógépre:%n%n%1%n%nEzen összetevők kijelölésének törlése, nem távolítja el azokat a számítógépről.%n%nMindenképpen folytatja?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=A jelenlegi kijelölés legalább [gb] GB lemezterületet igényel.																					 
+ComponentsDiskSpaceMBLabel=A jelenlegi kijelölés legalább [mb] MB lemezterületet igényel.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=További feladatok
+SelectTasksDesc=Mely kiegészítő feladatok kerüljenek végrehajtásra?
+SelectTasksLabel2=Jelölje ki, mely kiegészítő feladatokat hajtsa végre a Telepítő a(z) [name] telepítése során, majd kattintson a 'Tovább'-ra.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Start Menü könyvtára
+SelectStartMenuFolderDesc=Hova helyezze a Telepítő a program parancsikonjait?
+SelectStartMenuFolderLabel3=A Telepítő a program parancsikonjait a Start menü következő mappájában fogja létrehozni.
+SelectStartMenuFolderBrowseLabel=A folytatáshoz kattintson a 'Tovább'-ra. Ha másik mappát választana, kattintson a 'Tallózás'-ra.
+MustEnterGroupName=Meg kell adnia egy mappanevet.
+GroupNameTooLong=A könyvtár neve vagy az útvonal túl hosszú.
+InvalidGroupName=A könyvtár neve érvénytelen.
+BadGroupName=A könyvtárak nevei ezen karakterek egyikét sem tartalmazhatják:%n%n%1
+NoProgramGroupCheck2=&Ne hozzon létre mappát a Start menüben
+
+; *** "Ready to Install" wizard page
+WizardReady=Készen állunk a telepítésre
+ReadyLabel1=A Telepítő készen áll, a(z) [name] számítógépre telepítéshez.
+ReadyLabel2a=Kattintson a 'Telepítés'-re a folytatáshoz, vagy a "Vissza"-ra a beállítások áttekintéséhez vagy megváltoztatásához.
+ReadyLabel2b=Kattintson a 'Telepítés'-re a folytatáshoz.
+ReadyMemoUserInfo=Felhasználó adatai:
+ReadyMemoDir=Telepítés célkönyvtára:
+ReadyMemoType=Telepítés típusa:
+ReadyMemoComponents=Választott összetevők:
+ReadyMemoGroup=Start menü mappája:
+ReadyMemoTasks=Kiegészítő feladatok:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=További fájlok letöltése...
+ButtonStopDownload=&Letöltés megállítása
+StopDownload=Biztos, hogy leakarja állítani a letöltést?
+ErrorDownloadAborted=Letöltés megszakítva
+ErrorDownloadFailed=A letöltés meghiúsult: %1 %2
+ErrorDownloadSizeFailed=Hiba a fájlméret lekérése során: %1 %2
+ErrorFileHash1=Fájl Hash (hasítóérték) hiba: %1
+ErrorFileHash2=Érvénytelen hash fájl, várt érték: %1, számított: %2
+ErrorProgress=Érvénytelen folyamat: %1 : %2
+ErrorFileSize=Érvénytelen fájlméret, várt méret %1, számított: %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Felkészülés a telepítésre
+PreparingDesc=A Telepítő felkészül a(z) [name] számítógépre történő telepítéshez.
+PreviousInstallNotCompleted=Egy korábbi program telepítése/eltávolítása nem fejeződött be. Újra kell indítania a számítógépét a másik telepítés befejezéséhez.%n%nA számítógépe újraindítása után ismét futtassa a Telepítőt a(z) [name] telepítésének befejezéséhez.
+CannotContinue=A telepítés nem folytatható. A kilépéshez kattintson a 'Mégse'-re.
+ApplicationsFound=A következő alkalmazások olyan fájlokat használnak, amelyeket a Telepítőnek frissíteni kell. Ajánlott, hogy engedélyezze a Telepítőnek ezen alkalmazások automatikus bezárását.
+ApplicationsFound2=A következő alkalmazások olyan fájlokat használnak, amelyeket a Telepítőnek frissíteni kell. Ajánlott, hogy engedélyezze a Telepítőnek ezen alkalmazások automatikus bezárását. A telepítés befejezése után, a Telepítő megkísérli az alkalmazások újraindítását.
+CloseApplications=&Alkalmazások automatikus bezárása
+DontCloseApplications=&Ne zárja be az alkalmazásokat
+ErrorCloseApplications=A Telepítő nem tudott minden alkalmazást automatikusan bezárni. A folytatás előtt ajánlott minden, a Telepítő által frissítendő fájlokat használó alkalmazást bezárni.
+PrepareToInstallNeedsRestart=A telepítőnek most újra kell indítania a számítógépet. Az újraindítás után, futtassa újból ezt a telepítőt, hogy befejezze a [name] telepítését.%n%nÚjra szeretné most indítani a gépet?
+
+; *** "Installing" wizard page
+WizardInstalling=Telepítés
+InstallingLabel=Kérem várjon, amíg a(z) [name] telepítése zajlik.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=A(z) [name] telepítésének befejezése
+FinishedLabelNoIcons=A Telepítő végzett a(z) [name] telepítésével.
+FinishedLabel=A Telepítő végzett a(z) [name] telepítésével. Az alkalmazást a létrehozott ikonok kiválasztásával indíthatja.
+ClickFinish=Kattintson a 'Befejezés'-re a kilépéshez.
+FinishedRestartLabel=A(z) [name] telepítésének befejezéséhez újra kell indítani a számítógépet. Újraindítja most?
+FinishedRestartMessage=A(z) [name] telepítésének befejezéséhez, a Telepítőnek újra kell indítani a számítógépet.%n%nÚjraindítja most?
+ShowReadmeCheck=Igen, szeretném elolvasni a FONTOS fájlt
+YesRadio=&Igen, újraindítás most
+NoRadio=&Nem, később indítom újra
+; used for example as 'Run MyProg.exe'
+RunEntryExec=%1 futtatása
+; used for example as 'View Readme.txt'
+RunEntryShellExec=%1 megtekintése
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=A Telepítőnek szüksége van a következő lemezre
+SelectDiskLabel2=Helyezze be a(z) %1. lemezt és kattintson az 'OK'-ra.%n%nHa a fájlok a lemez egy a megjelenítettől különböző mappájában találhatók, írja be a helyes útvonalat vagy kattintson a 'Tallózás'-ra.
+PathLabel=Ú&tvonal:
+FileNotInDir2=A(z) "%1" fájl nem található a következő helyen: "%2". Helyezze be a megfelelő lemezt vagy válasszon egy másik mappát.
+SelectDirectoryLabel=Adja meg a következő lemez helyét.
+
+; *** Installation phase messages
+SetupAborted=A telepítés nem fejeződött be.%n%nHárítsa el a hibát és futtassa újból a Telepítőt.
+AbortRetryIgnoreSelectAction=Válasszon műveletet
+AbortRetryIgnoreRetry=&Újra
+AbortRetryIgnoreIgnore=&Hiba elvetése és folytatás
+AbortRetryIgnoreCancel=Telepítés megszakítása
+
+; *** Installation status messages
+StatusClosingApplications=Alkalmazások bezárása...
+StatusCreateDirs=Könyvtárak létrehozása...
+StatusExtractFiles=Fájlok kibontása...
+StatusCreateIcons=Parancsikonok létrehozása...
+StatusCreateIniEntries=INI bejegyzések létrehozása...
+StatusCreateRegistryEntries=Rendszerleíró bejegyzések létrehozása...
+StatusRegisterFiles=Fájlok regisztrálása...
+StatusSavingUninstall=Eltávolító információk mentése...
+StatusRunProgram=Telepítés befejezése...
+StatusRestartingApplications=Alkalmazások újraindítása...
+StatusRollback=Változtatások visszavonása...
+
+; *** Misc. errors
+ErrorInternal2=Belső hiba: %1
+ErrorFunctionFailedNoCode=Sikertelen %1
+ErrorFunctionFailed=Sikertelen %1; kód: %2
+ErrorFunctionFailedWithMessage=Sikertelen %1; kód: %2.%n%3
+ErrorExecutingProgram=Nem hajtható végre a fájl:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Nem nyitható meg a rendszerleíró kulcs:%n%1\%2
+ErrorRegCreateKey=Nem hozható létre a rendszerleíró kulcs:%n%1\%2
+ErrorRegWriteKey=Nem módosítható a rendszerleíró kulcs:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Hiba lépett fel az INI bejegyzés során, ebben a fájlban: "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Fájl kihagyása (nem ajánlott)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Hiba elvetése és folytatás (nem ajánlott)
+SourceIsCorrupted=A forrásfájl megsérült
+SourceDoesntExist=A(z) "%1" forrásfájl nem létezik
+ExistingFileReadOnly2=A fájl csak olvashatóként van jelölve, ezért nem cserélhető le.
+ExistingFileReadOnlyRetry=Csak &olvasható tulajdonság eltávolítása és újra próbálkozás
+ExistingFileReadOnlyKeepExisting=&Létező fájl megtartása
+ErrorReadingExistingDest=Hiba lépett fel a fájl olvasása közben:
+FileExistsSelectAction=Mit tegyünk?
+FileExists2=A fájl már létezik.
+FileExistsOverwriteExisting=A &létező fájl felülírása
+FileExistsKeepExisting=A &már létező fájl megtartása
+FileExistsOverwriteOrKeepAll=&Tegyük ezt, a következő fájlütközések esetén is
+ExistingFileNewerSelectAction=Mit kíván tenni?
+ExistingFileNewer2=A létező fájl újabb a telepítésre kerülőnél
+ExistingFileNewerOverwriteExisting=A &létező fájl felülírása
+ExistingFileNewerKeepExisting=&Tartsuk meg a létező fájlt (ajánlott)
+ExistingFileNewerOverwriteOrKeepAll=&Tegyük ezt, a következő fájlütközések esetén is
+ErrorChangingAttr=Hiba lépett fel a fájl attribútumának módosítása közben:
+ErrorCreatingTemp=Hiba lépett fel a fájl telepítési könyvtárban történő létrehozása közben:
+ErrorReadingSource=Hiba lépett fel a forrásfájl olvasása közben:
+ErrorCopying=Hiba lépett fel a fájl másolása közben:
+ErrorReplacingExistingFile=Hiba lépett fel a létező fájl cseréje közben:
+ErrorRestartReplace=A fájl cseréje az újraindítás után sikertelen volt:
+ErrorRenamingTemp=Hiba lépett fel fájl telepítési könyvtárban történő átnevezése közben:
+ErrorRegisterServer=Nem lehet regisztrálni a DLL-t/OCX-et: %1
+ErrorRegSvr32Failed=Sikertelen RegSvr32. A visszaadott kód: %1
+ErrorRegisterTypeLib=Nem lehet regisztrálni a típustárat: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bit
+UninstallDisplayNameMark64Bit=64-bit
+UninstallDisplayNameMarkAllUsers=Minden felhasználó
+UninstallDisplayNameMarkCurrentUser=Jelenlegi felhasználó
+
+; *** Post-installation errors
+ErrorOpeningReadme=Hiba lépett fel a FONTOS fájl megnyitása közben.
+ErrorRestartingComputer=A Telepítő nem tudta újraindítani a számítógépet. Indítsa újra kézileg.
+
+; *** Uninstaller messages
+UninstallNotFound=A(z) "%1" fájl nem létezik. Nem távolítható el.
+UninstallOpenError=A(z) "%1" fájl nem nyitható meg. Nem távolítható el
+UninstallUnsupportedVer=A(z) "%1" eltávolítási naplófájl formátumát nem tudja felismerni az eltávolító jelen verziója. Az eltávolítás nem folytatható
+UninstallUnknownEntry=Egy ismeretlen bejegyzés (%1) található az eltávolítási naplófájlban
+ConfirmUninstall=Biztosan futtatni szeretné a %1 eltávolítási varázslót?
+UninstallOnlyOnWin64=Ezt a telepítést csak 64-bites Windows operációs rendszerről lehet eltávolítani.
+OnlyAdminCanUninstall=Ezt a telepítést csak adminisztrációs jogokkal rendelkező felhasználó távolíthatja el.
+UninstallStatusLabel=Legyen türelemmel, amíg a(z) %1 számítógépéről történő eltávolítása befejeződik.
+UninstalledAll=A(z) %1 sikeresen el lett távolítva a számítógépről.
+UninstalledMost=A(z) %1 eltávolítása befejeződött.%n%nNéhány elemet nem lehetettet eltávolítani. Törölje kézileg.
+UninstalledAndNeedsRestart=A(z) %1 eltávolításának befejezéséhez újra kell indítania a számítógépét.%n%nÚjraindítja most?
+UninstallDataCorrupted=A(z) "%1" fájl sérült. Nem távolítható el.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Törli a megosztott fájlt?
+ConfirmDeleteSharedFile2=A rendszer azt jelzi, hogy a következő megosztott fájlra már nincs szüksége egyetlen programnak sem. Eltávolítja a megosztott fájlt?%n%nHa más programok még mindig használják a megosztott fájlt, akkor az eltávolítása után lehet, hogy nem fognak megfelelően működni. Ha bizonytalan, válassza a Nemet. A fájl megtartása nem okoz problémát a rendszerben.
+SharedFileNameLabel=Fájlnév:
+SharedFileLocationLabel=Helye:
+WizardUninstalling=Eltávolítás állapota
+StatusUninstalling=%1 eltávolítása...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=%1 telepítése.
+ShutdownBlockReasonUninstallingApp=%1 eltávolítása.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1, verzió: %2
+AdditionalIcons=További parancsikonok:
+CreateDesktopIcon=&Asztali ikon létrehozása
+CreateQuickLaunchIcon=&Gyorsindító parancsikon létrehozása
+ProgramOnTheWeb=%1 az interneten
+UninstallProgram=Eltávolítás - %1
+LaunchProgram=Indítás %1
+AssocFileExtension=A(z) %1 &társítása a(z) %2 fájlkiterjesztéssel
+AssocingFileExtension=A(z) %1 társítása a(z) %2 fájlkiterjesztéssel...
+AutoStartProgramGroupDescription=Indítópult:
+AutoStartProgram=%1 automatikus indítása
+AddonHostProgramNotFound=A(z) %1 nem található a kiválasztott könyvtárban.%n%nMindenképpen folytatja?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Wählen Sie den Installationsmodus
+SelectSetupInstallModeDesc=VCMI kann für alle Benutzer oder nur für Sie installiert werden.
+SelectSetupInstallModeSubTitle=Wählen Sie den bevorzugten Installationsmodus:
+InstallForAllUsers=Für alle Benutzer installieren
+InstallForAllUsers1=Erfordert Administratorrechte
+InstallForMeOnly=Nur für mich installieren
+InstallForMeOnly1=Beim ersten Start des Spiels erscheint eine Firewall-Benachrichtigung
+InstallForMeOnly2=LAN-Spiele funktionieren nicht, wenn die Firewall-Regel nicht zugelassen werden kann
+SystemIntegration=Systemintegration
+CreateDesktopShortcuts=Desktop-Verknüpfungen erstellen
+CreateStartMenuShortcuts=Verknüpfungen im Startmenü erstellen
+AssociateH3MFiles=.h3m-Dateien mit dem VCMI-Karteneditor verknüpfen
+AssociateVCMIMapFiles=.vmap- und .vcmp-Dateien mit dem VCMI-Karteneditor verknüpfen
+VCMISettings=VCMI-Konfiguration
+AddFirewallRules=Firewall-Regeln für VCMI hinzufügen
+CopyH3Files=Erforderliche Heroes-III-Dateien automatisch in VCMI kopieren
+RunVCMILauncherAfterInstall=VCMI Launcher starten
+ShortcutMapEditor=VCMI Karteneditor
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=VCMI Webseite
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=VCMI Launcher starten
+ShortcutMapEditorComment=VCMI Karteneditor öffnen
+ShortcutWebPageComment=Offizielle VCMI-Webseite besuchen
+ShortcutDiscordComment=Offiziellen VCMI Discord besuchen
+DeleteUserData=Benutzerdaten löschen
+Uninstall=Deinstallieren
+Warning=Warnung
+VMAPDescription=VCMI-Kartendatei
+VCMPDescription=VCMI-Kampagnendatei
+H3MDescription=Heroes-3-Kartendatei

+ 423 - 0
CI/wininstaller/lang/Italian.isl

@@ -0,0 +1,423 @@
+; [email protected]
+; *** Inno Setup version 6.1.0+ Italian messages ***
+;
+; To download user-contributed translations of this file, go to:
+;    https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+;
+; isl - Last Update: 25.07.2020  by bovirus ([email protected])
+;
+; Translator name:   bovirus
+; Translator e-mail: [email protected]
+; Based on previous translations of Rinaldo M. aka Whiteshark (based on ale5000 5.1.11+ translation)
+;
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Italiano
+LanguageID=$0410
+LanguageCodePage=1252
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Installazione
+SetupWindowTitle=Installazione di %1
+UninstallAppTitle=Disinstallazione
+UninstallAppFullTitle=Disinstallazione di %1
+
+; *** Misc. common
+InformationTitle=Informazioni
+ConfirmTitle=Conferma
+ErrorTitle=Errore
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Questa è l'installazione di %1.%n%nVuoi continuare?
+LdrCannotCreateTemp=Impossibile creare un file temporaneo.%n%nInstallazione annullata.
+LdrCannotExecTemp=Impossibile eseguire un file nella cartella temporanea.%n%nInstallazione annullata.
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nErrore %2: %3
+SetupFileMissing=File %1 non trovato nella cartella di installazione.%n%nCorreggi il problema o richiedi una nuova copia del programma.
+SetupFileCorrupt=I file di installazione sono danneggiati.%n%nRichiedi una nuova copia del programma.
+SetupFileCorruptOrWrongVer=I file di installazione sono danneggiati, o sono incompatibili con questa versione del programma di installazione.%n%nCorreggi il problema o richiedi una nuova copia del programma.
+InvalidParameter=È stato inserito nella riga di comando un parametro non valido:%n%n%1
+SetupAlreadyRunning=Il processo di installazione è già in funzione.
+WindowsVersionNotSupported=Questo programma non può essere eseguito sulla versione di Windows in uso. Assicurati di utilizzare l'architettura corretta di Windows (32-bit o 64-bit) e la versione corretta di questo programma.
+WindowsServicePackRequired=Questo programma richiede %1 Service Pack %2 o successivo.
+NotOnThisPlatform=Questo programma non è compatibile con %1.
+OnlyOnThisPlatform=Questo programma richiede %1.
+OnlyOnTheseArchitectures=Questo programma può essere installato solo su versioni di Windows progettate per le seguenti architetture della CPU:%n%n%1
+WinVersionTooLowError=Questo programma richiede %1 versione %2 o successiva.
+WinVersionTooHighError=Questo programma non può essere installato su %1 versione %2 o successiva.
+AdminPrivilegesRequired=Per installare questo programma sono richiesti privilegi di amministratore.
+PowerUserPrivilegesRequired=Per poter installare questo programma sono richiesti i privilegi di amministratore o di Power Users.
+SetupAppRunningError=%1 è attualmente in esecuzione.%n%nChiudi adesso tutte le istanze del programma e poi seleziona "OK", o seleziona "Annulla" per uscire.
+UninstallAppRunningError=%1 è attualmente in esecuzione.%n%nChiudi adesso tutte le istanze del programma e poi seleziona "OK", o seleziona "Annulla" per uscire.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Seleziona modo installazione
+PrivilegesRequiredOverrideInstruction=Seleziona modo installazione
+PrivilegesRequiredOverrideText1=%1 può essere installato per tutti gli utenti (richiede privilegi di amministratore), o solo per l'utente attuale.
+PrivilegesRequiredOverrideText2=%1 può essere installato solo per l'utente attuale, o per tutti gli utenti (richiede privilegi di amministratore).
+PrivilegesRequiredOverrideAllUsers=Inst&alla per tutti gli utenti
+PrivilegesRequiredOverrideAllUsersRecommended=Inst&alla per tutti gli utenti (suggerito)
+PrivilegesRequiredOverrideCurrentUser=Installa solo per l'&utente attuale
+PrivilegesRequiredOverrideCurrentUserRecommended=Installa solo per l'&utente attuale (suggerito)
+
+; *** Misc. errors
+ErrorCreatingDir=Impossibile creare la cartella "%1"
+ErrorTooManyFilesInDir=Impossibile creare i file nella cartella "%1" perché contiene troppi file.
+
+; *** Setup common messages
+ExitSetupTitle=Uscita dall'installazione
+ExitSetupMessage=L'installazione non è completa.%n%nUscendo dall'installazione in questo momento, il programma non sarà installato.%n%nÈ possibile eseguire l'installazione in un secondo tempo.%n%nVuoi uscire dall'installazione?
+AboutSetupMenuItem=&Informazioni sull'installazione...
+AboutSetupTitle=Informazioni sull'installazione
+AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4
+AboutSetupNote=
+TranslatorNote=Traduzione italiana a cura di Rinaldo M. aka Whiteshark e bovirus (v. 11.09.2018)
+
+; *** Buttons
+ButtonBack=< &Indietro
+ButtonNext=&Avanti >
+ButtonInstall=Inst&alla
+ButtonOK=OK
+ButtonCancel=Annulla
+ButtonYes=&Si
+ButtonYesToAll=Sì a &tutto
+ButtonNo=&No
+ButtonNoToAll=N&o a tutto
+ButtonFinish=&Fine
+ButtonBrowse=&Sfoglia...
+ButtonWizardBrowse=S&foglia...
+ButtonNewFolder=&Crea nuova cartella
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Seleziona la lingua dell'installazione
+SelectLanguageLabel=Seleziona la lingua da usare durante l'installazione.
+
+; *** Common wizard text
+ClickNext=Seleziona "Avanti" per continuare, o "Annulla" per uscire.
+BeveledLabel=
+BrowseDialogTitle=Sfoglia cartelle
+BrowseDialogLabel=Seleziona una cartella nell'elenco, e quindi seleziona "OK".
+NewFolderName=Nuova cartella
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Installazione di [name]
+WelcomeLabel2=[name/ver] sarà installato sul computer.%n%nPrima di procedere chiudi tutte le applicazioni attive.
+
+; *** "Password" wizard page
+WizardPassword=Password
+PasswordLabel1=Questa installazione è protetta da password.
+PasswordLabel3=Inserisci la password, quindi per continuare seleziona "Avanti".%nLe password sono sensibili alle maiuscole/minuscole.
+PasswordEditLabel=&Password:
+IncorrectPassword=La password inserita non è corretta. Riprova.
+
+; *** "License Agreement" wizard page
+WizardLicense=Contratto di licenza
+LicenseLabel=Prima di procedere leggi con attenzione le informazioni che seguono.
+LicenseLabel3=Leggi il seguente contratto di licenza.%nPer procedere con l'installazione è necessario accettare tutti i termini del contratto.
+LicenseAccepted=Accetto i termini del &contratto di licenza 
+LicenseNotAccepted=&Non accetto i termini del contratto di licenza
+
+; *** "Information" wizard pages
+WizardInfoBefore=Informazioni
+InfoBeforeLabel=Prima di procedere leggi le importanti informazioni che seguono.
+InfoBeforeClickLabel=Quando sei pronto per proseguire, seleziona "Avanti".
+WizardInfoAfter=Informazioni
+InfoAfterLabel=Prima di procedere leggi le importanti informazioni che seguono.
+InfoAfterClickLabel=Quando sei pronto per proseguire, seleziona "Avanti".
+
+; *** "User Information" wizard page
+WizardUserInfo=Informazioni utente
+UserInfoDesc=Inserisci le seguenti informazioni.
+UserInfoName=&Nome:
+UserInfoOrg=&Società:
+UserInfoSerial=&Numero di serie:
+UserInfoNameRequired=È necessario inserire un nome.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Selezione cartella di installazione
+SelectDirDesc=Dove vuoi installare [name]?
+SelectDirLabel3=[name] sarà installato nella seguente cartella.
+SelectDirBrowseLabel=Per continuare seleziona "Avanti".%nPer scegliere un'altra cartella seleziona "Sfoglia".
+DiskSpaceGBLabel=Sono richiesti almeno [gb] GB di spazio libero nel disco.
+DiskSpaceMBLabel=Sono richiesti almeno [mb] MB di spazio libero nel disco.
+CannotInstallToNetworkDrive=Non è possibile effettuare l'installazione in un disco in rete.
+CannotInstallToUNCPath=Non è possibile effettuare l'installazione in un percorso UNC.
+InvalidPath=Va inserito un percorso completo di lettera di unità; per esempio:%n%nC:\APP%n%no un percorso di rete nella forma:%n%n\\server\condivisione
+InvalidDrive=L'unità o il percorso di rete selezionato non esiste o non è accessibile.%n%nSelezionane un altro.
+DiskSpaceWarningTitle=Spazio su disco insufficiente
+DiskSpaceWarning=L'installazione richiede per eseguire l'installazione almeno %1 KB di spazio libero, ma l'unità selezionata ha solo %2 KB disponibili.%n%nVuoi continuare comunque?
+DirNameTooLong=Il nome della cartella o il percorso sono troppo lunghi.
+InvalidDirName=Il nome della cartella non è valido.
+BadDirName32=Il nome della cartella non può includere nessuno dei seguenti caratteri:%n%n%1
+DirExistsTitle=Cartella già esistente
+DirExists=La cartella%n%n  %1%n%nesiste già.%n%nVuoi comunque installare l'applicazione in questa cartella?
+DirDoesntExistTitle=Cartella inesistente
+DirDoesntExist=La cartella%n%n  %1%n%nnon esiste. Vuoi creare la cartella?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Selezione componenti
+SelectComponentsDesc=Quali componenti vuoi installare?
+SelectComponentsLabel2=Seleziona i componenti da installare, deseleziona quelli che non vuoi installare.%nPer continuare seleziona "Avanti".
+FullInstallation=Installazione completa
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Installazione compatta
+CustomInstallation=Installazione personalizzata
+NoUninstallWarningTitle=Componente esistente
+NoUninstallWarning=I seguenti componenti sono già installati nel computer:%n%n%1%n%nDeselezionando questi componenti essi non verranno rimossi.%n%nVuoi continuare comunque?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=La selezione attuale richiede almeno [gb] GB di spazio nel disco.
+ComponentsDiskSpaceMBLabel=La selezione attuale richiede almeno [mb] MB di spazio nel disco.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Selezione processi aggiuntivi
+SelectTasksDesc=Quali processi aggiuntivi vuoi eseguire?
+SelectTasksLabel2=Seleziona i processi aggiuntivi che verranno eseguiti durante l'installazione di [name], quindi seleziona "Avanti".
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Selezione della cartella nel menu Avvio/Start
+SelectStartMenuFolderDesc=Dove vuoi inserire i collegamenti al programma?
+SelectStartMenuFolderLabel3=Verranno creati i collegamenti al programma nella seguente cartella del menu Avvio/Start.
+SelectStartMenuFolderBrowseLabel=Per continuare, seleziona "Avanti".%nPer selezionare un'altra cartella, seleziona "Sfoglia".
+MustEnterGroupName=Devi inserire il nome della cartella.
+GroupNameTooLong=Il nome della cartella o il percorso sono troppo lunghi.
+InvalidGroupName=Il nome della cartella non è valido.
+BadGroupName=Il nome della cartella non può includere nessuno dei seguenti caratteri:%n%n%1
+NoProgramGroupCheck2=&Non creare una cartella nel menu Avvio/Start
+
+; *** "Ready to Install" wizard page
+WizardReady=Pronto per l'installazione
+ReadyLabel1=Il programma è pronto per iniziare l'installazione di [name] nel computer.
+ReadyLabel2a=Seleziona "Installa" per continuare con l'installazione, o "Indietro" per rivedere o modificare le impostazioni.
+ReadyLabel2b=Per procedere con l'installazione seleziona "Installa".
+ReadyMemoUserInfo=Informazioni utente:
+ReadyMemoDir=Cartella di installazione:
+ReadyMemoType=Tipo di installazione:
+ReadyMemoComponents=Componenti selezionati:
+ReadyMemoGroup=Cartella del menu Avvio/Start:
+ReadyMemoTasks=Processi aggiuntivi:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Download file aggiuntivi...
+ButtonStopDownload=&Stop download
+StopDownload=Sei sicuro di voler interrompere il download?
+ErrorDownloadAborted=Download annullato
+ErrorDownloadFailed=Download fallito: %1 %2
+ErrorDownloadSizeFailed=Rilevamento dimensione fallito: %1 %2
+ErrorFileHash1=Errore hash file: %1
+ErrorFileHash2=Hash file non valido: atteso %1, trovato %2
+ErrorProgress=Progresso non valido: %1 di %2
+ErrorFileSize=Dimensione file non valida: attesa %1, trovata %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Preparazione all'installazione
+PreparingDesc=Preparazione all'installazione di [name] nel computer.
+PreviousInstallNotCompleted=L'installazione/rimozione precedente del programma non è stata completata.%n%nÈ necessario riavviare il sistema per completare l'installazione.%n%nDopo il riavvio del sistema esegui di nuovo l'installazione di [name].
+CannotContinue=L'installazione non può continuare. Seleziona "Annulla" per uscire.
+ApplicationsFound=Le seguenti applicazioni stanno usando file che devono essere aggiornati dall'installazione.%n%nTi consigliamo di permettere al processo di chiudere automaticamente queste applicazioni.
+ApplicationsFound2=Le seguenti applicazioni stanno usando file che devono essere aggiornati dall'installazione.%n%nTi consigliamo di permettere al processo di chiudere automaticamente queste applicazioni.%n%nAl completamento dell'installazione, il processo tenterà di riavviare le applicazioni.
+CloseApplications=Chiudi &automaticamente le applicazioni
+DontCloseApplications=&Non chiudere le applicazioni
+ErrorCloseApplications=L'installazione non è riuscita a chiudere automaticamente tutte le applicazioni.%n%nPrima di proseguire ti raccomandiamo di chiudere tutte le applicazioni che usano file che devono essere aggiornati durante l'installazione.
+PrepareToInstallNeedsRestart=Il programma di installazione deve riavviare il computer.%nDopo aver riavviato il computer esegui di nuovo il programma di installazione per completare l'installazione di [name].%n%nVuoi riavviare il computer ora?
+
+; *** "Installing" wizard page
+WizardInstalling=Installazione in corso
+InstallingLabel=Attendi il completamento dell'installazione di [name] nel computer.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Installazione di [name] completata
+FinishedLabelNoIcons=Installazione di [name] completata.
+FinishedLabel=Installazione di [name] completata.%n%nL'applicazione può essere eseguita selezionando le relative icone.
+ClickFinish=Seleziona "Fine" per uscire dall'installazione.
+FinishedRestartLabel=Per completare l'installazione di [name], è necessario riavviare il sistema.%n%nVuoi riavviare adesso?
+FinishedRestartMessage=Per completare l'installazione di [name], è necessario riavviare il sistema.%n%nVuoi riavviare adesso?
+ShowReadmeCheck=Si, visualizza ora il file LEGGIMI
+YesRadio=&Si, riavvia il sistema adesso
+NoRadio=&No, riavvia il sistema più tardi
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Esegui %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Visualizza %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=L'installazione necessita del disco successivo
+SelectDiskLabel2=Inserisci il disco %1 e seleziona "OK".%n%nSe i file di questo disco si trovano in una cartella diversa da quella visualizzata sotto, inserisci il percorso corretto o seleziona "Sfoglia".
+PathLabel=&Percorso:
+FileNotInDir2=Il file "%1" non è stato trovato in "%2".%n%nInserisci il disco corretto o seleziona un'altra cartella.
+SelectDirectoryLabel=Specifica il percorso del prossimo disco.
+
+; *** Installation phase messages
+SetupAborted=L'installazione non è stata completata.%n%nCorreggi il problema e riesegui nuovamente l'installazione.
+AbortRetryIgnoreSelectAction=Seleziona azione
+AbortRetryIgnoreRetry=&Riprova
+AbortRetryIgnoreIgnore=&Ignora questo errore e continua
+AbortRetryIgnoreCancel=Annulla installazione
+
+; *** Installation status messages
+StatusClosingApplications=Chiusura applicazioni...
+StatusCreateDirs=Creazione cartelle...
+StatusExtractFiles=Estrazione file...
+StatusCreateIcons=Creazione icone...
+StatusCreateIniEntries=Creazione voci nei file INI...
+StatusCreateRegistryEntries=Creazione voci di registro...
+StatusRegisterFiles=Registrazione file...
+StatusSavingUninstall=Salvataggio delle informazioni di disinstallazione...
+StatusRunProgram=Termine dell'installazione...
+StatusRestartingApplications=Riavvio applicazioni...
+StatusRollback=Recupero delle modifiche...
+
+; *** Misc. errors
+ErrorInternal2=Errore interno %1
+ErrorFunctionFailedNoCode=%1 fallito
+ErrorFunctionFailed=%1 fallito; codice %2
+ErrorFunctionFailedWithMessage=%1 fallito; codice %2.%n%3
+ErrorExecutingProgram=Impossibile eseguire il file:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Errore di apertura della chiave di registro:%n%1\%2
+ErrorRegCreateKey=Errore di creazione della chiave di registro:%n%1\%2
+ErrorRegWriteKey=Errore di scrittura della chiave di registro:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Errore nella creazione delle voci INI nel file "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Salta questo file (non suggerito)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora questo errore e continua (non suggerito)
+SourceIsCorrupted=Il file sorgente è danneggiato
+SourceDoesntExist=Il file sorgente "%1" non esiste
+ExistingFileReadOnly2=Il file esistente non può essere sostituito in quanto segnato come in sola lettura.
+ExistingFileReadOnlyRetry=&Rimuovi attributo di sola lettura e riprova
+ExistingFileReadOnlyKeepExisting=&Mantieni il file esistente
+ErrorReadingExistingDest=Si è verificato un errore durante la lettura del file esistente:
+FileExistsSelectAction=Seleziona azione
+FileExists2=Il file esiste già.
+FileExistsOverwriteExisting=S&ovrascrivi il file esistente
+FileExistsKeepExisting=&Mantieni il file esistente
+FileExistsOverwriteOrKeepAll=&Applica questa azione per i prossimi conflitti
+ExistingFileNewerSelectAction=Seleziona azione
+ExistingFileNewer2=Il file esistente è più recente del file che si sta cercando di installare.
+ExistingFileNewerOverwriteExisting=S&ovrascrivi il file esistente
+ExistingFileNewerKeepExisting=&Mantieni il file esistente (suggerito)
+ExistingFileNewerOverwriteOrKeepAll=&Applica questa azione per i prossimi conflitti
+ErrorChangingAttr=Si è verificato un errore durante il tentativo di modifica dell'attributo del file esistente:
+ErrorCreatingTemp=Si è verificato un errore durante la creazione di un file nella cartella di installazione:
+ErrorReadingSource=Si è verificato un errore durante la lettura del file sorgente:
+ErrorCopying=Si è verificato un errore durante la copia di un file:
+ErrorReplacingExistingFile=Si è verificato un errore durante la sovrascrittura del file esistente:
+ErrorRestartReplace=Errore durante riavvio o sostituzione:
+ErrorRenamingTemp=Si è verificato un errore durante il tentativo di rinominare un file nella cartella di installazione:
+ErrorRegisterServer=Impossibile registrare la DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 è fallito con codice di uscita %1
+ErrorRegisterTypeLib=Impossibile registrare la libreria di tipo: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32bit
+UninstallDisplayNameMark64Bit=64bit
+UninstallDisplayNameMarkAllUsers=Tutti gli utenti
+UninstallDisplayNameMarkCurrentUser=Utente attuale
+
+; *** Post-installation errors
+ErrorOpeningReadme=Si è verificato un errore durante l'apertura del file LEGGIMI.
+ErrorRestartingComputer=Impossibile riavviare il sistema. Riavvia il sistema manualmente.
+
+; *** Uninstaller messages
+UninstallNotFound=Il file "%1" non esiste.%n%nImpossibile disinstallare.
+UninstallOpenError=Il file "%1" non può essere aperto.%n%nImpossibile disinstallare
+UninstallUnsupportedVer=Il file registro di disinstallazione "%1" è in un formato non riconosciuto da questa versione del programma di disinstallazione.%n%nImpossibile disinstallare
+UninstallUnknownEntry=Trovata una voce sconosciuta (%1) nel file registro di disinstallazione
+ConfirmUninstall=Sei sicuro di voler eseguire l'assistente di disinstallazione di %1?
+UninstallOnlyOnWin64=Questa applicazione può essere disinstallata solo in Windows a 64-bit.
+OnlyAdminCanUninstall=Questa applicazione può essere disinstallata solo da un utente con privilegi di amministratore.
+UninstallStatusLabel=Attendi fino a che %1 è stato rimosso dal computer.
+UninstalledAll=Disinstallazione di %1 completata.
+UninstalledMost=Disinstallazione di %1 completata.%n%nAlcuni elementi non possono essere rimossi.%n%nDovranno essere rimossi manualmente.
+UninstalledAndNeedsRestart=Per completare la disinstallazione di %1, è necessario riavviare il sistema.%n%nVuoi riavviare il sistema adesso?
+UninstallDataCorrupted=Il file "%1" è danneggiato. Impossibile disinstallare
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Vuoi rimuovere il file condiviso?
+ConfirmDeleteSharedFile2=Il sistema indica che il seguente file condiviso non è più usato da nessun programma.%nVuoi rimuovere questo file condiviso?%nSe qualche programma usasse questo file, potrebbe non funzionare più correttamente.%nSe non sei sicuro, seleziona "No".%nLasciare il file nel sistema non può causare danni.
+SharedFileNameLabel=Nome del file:
+SharedFileLocationLabel=Percorso:
+WizardUninstalling=Stato disinstallazione
+StatusUninstalling=Disinstallazione di %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Installazione di %1.
+ShutdownBlockReasonUninstallingApp=Disinstallazione di %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 versione %2
+AdditionalIcons=Icone aggiuntive:
+CreateDesktopIcon=Crea un'icona sul &desktop
+CreateQuickLaunchIcon=Crea un'icona nella &barra 'Avvio veloce'
+ProgramOnTheWeb=Sito web di %1
+UninstallProgram=Disinstalla %1
+LaunchProgram=Avvia %1
+AssocFileExtension=&Associa i file con estensione %2 a %1
+AssocingFileExtension=Associazione dei file con estensione %2 a %1...
+AutoStartProgramGroupDescription=Esecuzione automatica:
+AutoStartProgram=Esegui automaticamente %1
+AddonHostProgramNotFound=Impossibile individuare %1 nella cartella selezionata.%n%nVuoi continuare ugualmente?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Scegli il tipo di installazione
+SelectSetupInstallModeDesc=VCMI può essere installato per tutti gli utenti o solo per te.
+SelectSetupInstallModeSubTitle=Seleziona il tipo di installazione preferito:
+InstallForAllUsers=Installa per tutti gli utenti
+InstallForAllUsers1=Richiede privilegi amministrativi
+InstallForMeOnly=Installa solo per me
+InstallForMeOnly1=Quando il gioco viene avviato per la prima volta, apparirà un avviso del firewall
+InstallForMeOnly2=I giochi LAN non funzioneranno se la regola del firewall non può essere consentita
+SystemIntegration=Integrazione di sistema
+CreateDesktopShortcuts=Crea collegamenti sul desktop
+CreateStartMenuShortcuts=Crea collegamenti nel menu Start
+AssociateH3MFiles=Associa i file .h3m all'Editor Mappe VCMI
+AssociateVCMIMapFiles=Associa i file .vmap e .vcmp all'Editor Mappe VCMI
+VCMISettings=Configurazione VCMI
+AddFirewallRules=Aggiungi regole del firewall per VCMI
+CopyH3Files=Copia automaticamente i file richiesti di Heroes III in VCMI
+RunVCMILauncherAfterInstall=Avvia il Launcher di VCMI
+ShortcutMapEditor=Editor Mappe VCMI
+ShortcutLauncher=Launcher VCMI
+ShortcutWebPage=Sito Web di VCMI
+ShortcutDiscord=Discord VCMI
+ShortcutLauncherComment=Avvia il Launcher di VCMI
+ShortcutMapEditorComment=Apri l'Editor Mappe VCMI
+ShortcutWebPageComment=Visita il sito ufficiale di VCMI
+ShortcutDiscordComment=Visita il Discord ufficiale di VCMI
+DeleteUserData=Elimina i dati utente
+Uninstall=Disinstalla
+Warning=Avviso
+VMAPDescription=File mappa VCMI
+VCMPDescription=File campagna VCMI
+H3MDescription=File mappa Heroes 3

+ 424 - 0
CI/wininstaller/lang/Korean.isl

@@ -0,0 +1,424 @@
+; *** Inno Setup version 6.1.0+ Korean messages ***
+
+; ▒ 6.2.2+ Translator: VenusGirl ([email protected])
+; ▒ 6.2.0+ Translator: Logan.Hwang ([email protected])
+; ▒ 6.0.3+ Translator: SungDong Kim ([email protected])
+; ▒ 5.5.3+ Translator: Domddol ([email protected])
+; ▒ Contributors: Hansoo KIM ([email protected]), Woong-Jae An ([email protected])
+; ▒ 이 번역은 한국어 맞춤법을 준수합니다.
+;
+; 이 파일의 사용자 제공 번역을 다운로드하려면 다음으로 이동하십시오:
+;   https://jrsoftware.org/files/istrans/
+
+; 참고: 이 텍스트를 번역할 때는 InnoSetup 메시지에
+; 마침표가 자동으로 추가되므로 아직 없는 메시지의 끝에
+; 마침표(.)를 추가하지 마십시오 (마침표를 추가하면
+; 두 개의 마침표가 표시됩니다).
+
+[LangOptions]
+; 다음 세 항목은 매우 중요합니다. 도움말 파일의
+; '[LangOptions] 섹션' 항목을 읽고 이해하십시오.
+LanguageName=한국어
+LanguageID=$0412
+LanguageCodePage=949
+; 번역할 언어가 특수 글꼴 또는 크기를 필요로 하는 경우
+; 다음 항목 중 하나를 주석 해제하고 적절하게 변경하십시오.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=설치
+SetupWindowTitle=%1 설치
+UninstallAppTitle=제거
+UninstallAppFullTitle=%1 제거
+
+; *** Misc. common
+InformationTitle=정보
+ConfirmTitle=확인
+ErrorTitle=오류
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=%1을(를) 설치합니다, 계속하시겠습니까?
+LdrCannotCreateTemp=임시 파일을 만들 수 없습니다. 설치가 중단되었습니다.
+LdrCannotExecTemp=임시 디렉터리에서 파일을 실행할 수 없습니다. 설치가 중단되었습니다.
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%n오류 %2: %3
+SetupFileMissing=%1 파일이 설치 디렉터리에 없습니다. 문제를 해결하거나 프로그램의 새 사본을 구하십시오.
+SetupFileCorrupt=설치 파일이 손상되었습니다. 프로그램의 새 사본을 구하십시오.
+SetupFileCorruptOrWrongVer=설치 파일이 손상되었거나 이 버전의 설치 프로그램과 호환되지 않습니다. 문제를 해결하거나 프로그램의 새 복사본을 구하십시오.
+InvalidParameter=명령줄에 잘못된 매개변수가 전달되었습니다:%n%n%1
+SetupAlreadyRunning=설치가 이미 실행 중입니다.
+WindowsVersionNotSupported=이 프로그램은 현재 사용 중인 Windows 버전에서 실행할 수 없습니다. 올바른 Windows 아키텍처(32비트 또는 64비트)와 이 프로그램의 올바른 버전을 사용하는지 확인하십시오.
+WindowsServicePackRequired=이 프로그램을 사용하려면 %1 서비스 팩 %2 이상이 필요합니다.
+NotOnThisPlatform=이 프로그램은 %1에서 실행되지 않습니다.
+OnlyOnThisPlatform=이 프로그램은 %1에서 실행되어야 합니다.
+OnlyOnTheseArchitectures=이 프로그램은 다음 프로세서 아키텍처용으로 설계된 Windows 버전에만 설치할 수 있습니다:%n%n%1
+WinVersionTooLowError=이 프로그램에는 %1 버전 %2 이상이 필요합니다.
+WinVersionTooHighError=%1 버전 %2 이상에 이 프로그램을 설치할 수 없습니다.
+AdminPrivilegesRequired=이 프로그램을 설치할 때 관리자로 로그인해야 합니다.
+PowerUserPrivilegesRequired=이 프로그램을 설치할 때 관리자 또는 Power Users 그룹의 구성원으로 로그인해야 합니다.
+SetupAppRunningError=설치에서 %1이(가) 현재 실행 중임을 감지했습니다.%n%n지금 모든 인스턴스를 닫은 다음 확인을 클릭하여 계속하거나 취소를 클릭하여 종료하십시오.
+UninstallAppRunningError=제거에서 %1이(가) 현재 실행 중임을 감지했습니다.%n%n지금 모든 인스턴스를 닫은 다음 확인을 클릭하여 계속하거나 취소를 클릭하여 종료하십시오.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=설치 모드 선택
+PrivilegesRequiredOverrideInstruction=설치 모드를 선택해 주십시오
+PrivilegesRequiredOverrideText1=%1은 모든 사용자 (관리자 권한 필요) 또는 사용자용으로 설치합니다.
+PrivilegesRequiredOverrideText2=%1은 현재 사용자 또는 모든 사용자 (관리자 권한 필요)용으로 설치합니다.
+PrivilegesRequiredOverrideAllUsers=모든 사용자용으로 설치(&A)
+PrivilegesRequiredOverrideAllUsersRecommended=모든 사용자용으로 설치 (추천)(&A)
+PrivilegesRequiredOverrideCurrentUser=현재 사용자용으로 설치(&M)
+PrivilegesRequiredOverrideCurrentUserRecommended=현재 사용자용으로 설치 (추천)(&M)
+
+; *** Misc. errors
+ErrorCreatingDir=설치 프로그램에서 "%1" 디렉터리를 만들지 못했습니다.
+ErrorTooManyFilesInDir="%1" 디렉터리에 파일이 너무 많아서 파일을 만들 수 없습니다
+
+; *** Setup common messages
+ExitSetupTitle=설치 종료
+ExitSetupMessage=설치가 완료되지 않았습니다. 지금 종료하면 프로그램이 설치되지 않습니다.%n%n설치를 다시 실행하여 설치를 완료할 수 있습니다.%n%n설치를 종료하시겠습니까?
+AboutSetupMenuItem=설치 정보(&A)...
+AboutSetupTitle=설치 정보
+AboutSetupMessage=%1 버전 %2%n%3%n%n%1 홈 페이지:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Buttons
+ButtonBack=< 뒤로(&B)
+ButtonNext=다음(&N) >
+ButtonInstall=설치(&I)
+ButtonOK=확인
+ButtonCancel=취소
+ButtonYes=예(&Y)
+ButtonYesToAll=모두 예(&A)
+ButtonNo=아니오(&N)
+ButtonNoToAll=모두 아니오(&O)
+ButtonFinish=마침(&F)
+ButtonBrowse=찾아보기(&B)...
+ButtonWizardBrowse=찾아보기(&R)...
+ButtonNewFolder=새 폴더 만들기(&M)
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=설치 언어 선택
+SelectLanguageLabel=설치 중에 사용할 언어를 선택하십시오.
+
+; *** Common wizard text
+ClickNext=다음을 클릭하여 계속하거나 취소를 클릭하여 설치를 종료합니다.
+BeveledLabel=
+BrowseDialogTitle=폴더 찾아보기
+BrowseDialogLabel=아래 목록에서 폴더를 선택한 후 확인을 클릭하십시오.
+NewFolderName=새 폴더
+
+; *** "Welcome" wizard page
+WelcomeLabel1=[name] 설치 마법사에 오신 것을 환영합니다
+WelcomeLabel2=컴퓨터에 [name/ver]가 설치됩니다.%n%n계속하기 전에 다른 모든 응용 프로그램을 닫는 것이 좋습니다.
+
+; *** "Password" wizard page
+WizardPassword=암호
+PasswordLabel1=이 설치는 암호로 보호됩니다.
+PasswordLabel3=암호를 입력한 후 다음을 클릭하여 계속하십시오. 암호는 대소문자를 구분합니다.
+PasswordEditLabel=암호(&P):
+IncorrectPassword=입력한 암호가 올바르지 않습니다. 다시 시도하십시오.
+
+; *** "License Agreement" wizard page
+WizardLicense=사용권 계약
+LicenseLabel=계속하기 전에 다음 중요한 정보를 읽어보십시오.
+LicenseLabel3=다음 사용권 계약을 읽어보십시오. 설치를 계속하기 전에 이 계약 조건에 동의해야 합니다.
+LicenseAccepted=동의합니다(&A)
+LicenseNotAccepted=동의하지 않습니다(&D)
+
+; *** "Information" wizard pages
+WizardInfoBefore=정보
+InfoBeforeLabel=계속하기 전에 다음 중요한 정보를 읽어보십시오.
+InfoBeforeClickLabel=설치를 계속할 준비가 되었으면 다음을 클릭합니다.
+WizardInfoAfter=정보
+InfoAfterLabel=계속하기 전에 다음 중요한 정보를 읽어보십시오.
+InfoAfterClickLabel=설치를 계속할 준비가 되었으면 다음을 클릭합니다.
+
+; *** "User Information" wizard page
+WizardUserInfo=사용자 정보
+UserInfoDesc=사용자 정보를 입력하십시오.
+UserInfoName=사용자 이름(&U):
+UserInfoOrg=조직(&O):
+UserInfoSerial=일련 번호:(&S):
+UserInfoNameRequired=이름을 입력해야 합니다.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=대상 위치 선택
+SelectDirDesc=[name]을(를) 어디에 설치하시겠습니까?
+SelectDirLabel3=다음 폴더에 [name]을(를) 설치합니다.
+SelectDirBrowseLabel=계속하려면 다음을 클릭합니다. 다른 폴더를 선택하려면 찾아보기를 클릭합니다.
+DiskSpaceGBLabel=이 프로그램은 최소 [gb] GB의 디스크 여유 공간이 필요합니다.
+DiskSpaceMBLabel=이 프로그램은 최소 [mb] MB의 디스크 여유 공간이 필요합니다.
+CannotInstallToNetworkDrive=네트워크 드라이브에 설치할 수 없습니다.
+CannotInstallToUNCPath=UNC 경로에 설치할 수 없습니다.
+InvalidPath=드라이브 문자를 포함한 전체 경로를 입력해야 합니다. 예:%n%nC:\APP%n%n 또는 UNC 경로 형식:%n%n\\server\share
+InvalidDrive=선택한 드라이브 또는 UNC 공유가 존재하지 않거나 액세스할 수 없습니다, 다른 경로를 선택하십시오.
+DiskSpaceWarningTitle=디스크 공간이 부족합니다
+DiskSpaceWarning=설치 시 최소 %1 KB 디스크 공간이 필요하지만, 선택한 드라이브의 여유 공간은 %2 KB 밖에 없습니다.%n%n그래도 계속하시겠습니까?
+DirNameTooLong=폴더 이름 또는 경로가 너무 깁니다.
+InvalidDirName=폴더 이름이 유효하지 않습니다.
+BadDirName32=폴더 이름은 다음 문자를 포함할 수 없습니다:%n%n%1
+DirExistsTitle=폴더가 존재합니다
+DirExists=폴더 %n%n%1%n%n이(가) 이미 존재합니다, 그래도 해당 폴더에 설치하시겠습니까?
+DirDoesntExistTitle=폴더가 존재하지 않습니다
+DirDoesntExist=폴더 %n%n%1%n%n이(가) 존재하지 않습니다, 폴더를 만드시겠습니까?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=구성 요소 선택
+SelectComponentsDesc=어떤 구성 요소를 설치해야 합니까?
+SelectComponentsLabel2=설치할 구성 요소를 선택하고 설치하지 않을 구성 요소를 지웁니다. 계속할 준비가 되면 다음을 클릭합니다.
+FullInstallation=모두 설치
+; 가능하면 'Compact'를 'Minimal'로 번역하지 마십시오 (귀하의 언어로 '최소'를 의미합니다).
+CompactInstallation=최소 설치
+CustomInstallation=사용자 지정 설치
+NoUninstallWarningTitle=구성 요소가 존재합니다
+NoUninstallWarning=다음 구성 요소가 컴퓨터에 이미 설치되어 있습니다: %n%n%1%n%n이러한 구성 요소를 선택해도 제거되지 않습니다.%n%n계속하시겠습니까?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=현재 선택은 최소 [gb] GB의 디스크 여유 공간이 필요합니다.
+ComponentsDiskSpaceMBLabel=현재 선택은 최소 [mb] MB의 디스크 여유 공간이 필요합니다.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=추가 작업 선택
+SelectTasksDesc=어떤 추가 작업을 수행해야 합니까?
+SelectTasksLabel2=[name]을(를) 설치하는 동안 수행할 추가 작업을 선택하고 다음을 클릭합니다.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=시작 메뉴 폴더 선택
+SelectStartMenuFolderDesc=프로그램의 바로가기를 어디에 설치하시겠습니까?
+SelectStartMenuFolderLabel3=설치는 다음 시작 메뉴 폴더에 프로그램 바로가기를 만듭니다.
+SelectStartMenuFolderBrowseLabel=계속하려면 다음을 클릭합니다. 다른 폴더를 선택하려면 찾아보기를 클릭합니다.
+MustEnterGroupName=폴더 이름을 입력하십시오.
+GroupNameTooLong=폴더 이름 또는 경로가 너무 깁니다.
+InvalidGroupName=폴더 이름이 유효하지 않습니다.
+BadGroupName=폴더 이름은 다음 문자를 포함할 수 없습니다:%n%n%1
+NoProgramGroupCheck2=시작 메뉴 폴더를 만들지 않음(&D)
+
+; *** "Ready to Install" wizard page
+WizardReady=설치 준비 완료
+ReadyLabel1=[name]을(를) 컴퓨터에 설치할 준비가 되었습니다.
+ReadyLabel2a=설치를 클릭하여 설치를 계속하거나 설정을 검토하거나 변경하려면 뒤로를 클릭합니다.
+ReadyLabel2b=설치를 클릭하여 설치를 계속합니다.
+ReadyMemoUserInfo=사용자 정보:
+ReadyMemoDir=대상 위치:
+ReadyMemoType=설치 유형:
+ReadyMemoComponents=선택한 구성 요소:
+ReadyMemoGroup=시작 메뉴 폴더:
+ReadyMemoTasks=추가 작업:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=추가 파일 다운로드 중...
+ButtonStopDownload=다운로드 중지(&S)
+StopDownload=다운로드를 중지하시겠습니까?
+ErrorDownloadAborted=다운로드가 중지되었습니다
+ErrorDownloadFailed=다운로드에 실패했습니다: %1 %2
+ErrorDownloadSizeFailed=크기를 가져오지 못했습니다: %1 %2
+ErrorFileHash1=파일 해시에 실패했습니다: %1
+ErrorFileHash2=잘못된 파일 해시: 예상 %1, 찾음 %2
+ErrorProgress=잘못된 진행 상황: %1 / %2
+ErrorFileSize=잘못된 파일 크기: 예상 %1, 찾음 %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=설치 준비 중
+PreparingDesc=컴퓨터에 [name] 설치를 준비하는 중입니다.
+PreviousInstallNotCompleted=이전 프로그램의 설치/제거가 완료되지 않았습니다. 설치를 완료하려면 컴퓨터를 다시 시작해야 합니다.%n%n컴퓨터를 재시작한 후 설치를 다시 실행하여 [name] 설치를 완료하십시오.
+CannotContinue=설치를 계속할 수 없습니다. 종료하려면 취소를 클릭하십시오.
+ApplicationsFound=다음 응용 프로그램에서 설치 프로그램에서 업데이트해야 하는 파일을 사용하고 있습니다. 이러한 응용 프로그램을 자동으로 닫도록 허용하는 것이 좋습니다.
+ApplicationsFound2=다음 응용 프로그램에서 설치 프로그램에서 업데이트해야 하는 파일을 사용하고 있습니다. 이러한 응용 프로그램을 자동으로 닫도록 허용하는 것이 좋습니다. 설치가 완료되면 응용 프로그램을 다시 시작하려고 시도합니다.
+CloseApplications=응용 프로그램 자동 닫기(&A)
+DontCloseApplications=응용 프로그램을 닫지 않음(&D)
+ErrorCloseApplications=모든 응용 프로그램을 자동으로 닫지 못했습니다. 계속하기 전에 설치 프로그램에서 업데이트해야 하는 파일을 사용하여 모든 응용 프로그램을 닫는 것이 좋습니다.
+PrepareToInstallNeedsRestart=컴퓨터를 다시 시작해야 합니다. 컴퓨터를 다시 시작한 후 설치를 다시 실행하여 [name] 설치를 완료하십시오.%n%n지금 다시 시작하시겠습니까?
+
+; *** "Installing" wizard page
+WizardInstalling=설치 중
+InstallingLabel=컴퓨터에 [name]을(를) 설치하는 동안 잠시 기다려 주십시오.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=[name] 설치 마법사 완료
+FinishedLabelNoIcons=컴퓨터에 [name] 설치를 완료했습니다.
+FinishedLabel=컴퓨터에 [name] 설치를 완료했습니다. 설치된 바로가기를 선택하여 응용 프로그램을 시작할 수 있습니다.
+ClickFinish=설치를 종료하려면 마침을 클릭하십시오.
+FinishedRestartLabel=[name] 설치를 완료하려면 컴퓨터를 다시 시작해야 합니다. 지금 다시 시작하시겠습니까?
+FinishedRestartMessage=[name] 설치를 완료하려면 컴퓨터를 다시 시작해야 합니다.%n%n지금 다시 시작하시겠습니까?
+ShowReadmeCheck=예, README 파일을 보고 싶습니다.
+YesRadio=예, 지금 컴퓨터를 다시 시작합니다(&Y)
+NoRadio=아니오, 나중에 컴퓨터를 다시 시작하겠습니다(&N)
+; 예를 들어 'Run MyProg.exe'로 사용됩니다'
+RunEntryExec=%1 실행
+; 예를 들어 'Readme.txt 보기'로 사용됩니다'
+RunEntryShellExec=%1 보기
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=설치에 다음 디스크가 필요합니다
+SelectDiskLabel2=디스크 %1을(를) 삽입하고 확인을 클릭하십시오.%n%n이 디스크의 파일을 아래에 표시된 폴더 이외의 폴더에서 찾을 수 있으면 올바른 경로를 입력하거나 찾아보기를 클릭하십시오.
+PathLabel=경로(&P):
+FileNotInDir2="%1" 파일을 "%2"에서 찾을 수 없습니다. 올바른 디스크를 넣거나 다른 폴더를 선택하십시오.
+SelectDirectoryLabel=다음 디스크의 위치를 지정하십시오.
+
+; *** Installation phase messages
+SetupAborted=설치가 완료되지 않았습니다.%n%n문제를 해결한 후 설치를 다시 실행하십시오.
+AbortRetryIgnoreSelectAction=작업 선택
+AbortRetryIgnoreRetry=재시도(&T)
+AbortRetryIgnoreIgnore=오류를 무시하고 진행(&I)
+AbortRetryIgnoreCancel=설치 취소
+
+; *** Installation status messages
+StatusClosingApplications=응용 프로그램을 닫는 중...
+StatusCreateDirs=디렉터리를 만드는 중...
+StatusExtractFiles=파일을 추출하는 중...
+StatusCreateIcons=바로가기를 만드는 중...
+StatusCreateIniEntries=INI 항목을 만드는 중...
+StatusCreateRegistryEntries=레지스트리 항목을 만드는 중...
+StatusRegisterFiles=파일을 등록하는 중...
+StatusSavingUninstall=제거 정보를 저장하는 중...
+StatusRunProgram=설치를 완료하는 중...
+StatusRestartingApplications=응용 프로그램을 다시 시작하는 중...
+StatusRollback=변경 내용을 롤백하는 중...
+
+; *** Misc. errors
+ErrorInternal2=내부 오류: %1
+ErrorFunctionFailedNoCode=%1 실패
+ErrorFunctionFailed=%1 실패; 코드 %2
+ErrorFunctionFailedWithMessage=%1 실패, 코드: %2.%n%3
+ErrorExecutingProgram=파일 실행 오류:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=레지스트리 키 열기 오류:%n%1\%2
+ErrorRegCreateKey=레지스트리 키 생성 오류:%n%1\%2
+ErrorRegWriteKey=레지스트리 키 쓰기 오류:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry="%1" 파일에 INI 항목 만들기 오류입니다.
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=이 파일 건너뛰기 (추천하지 않음)(&S)
+FileAbortRetryIgnoreIgnoreNotRecommended=오류를 무시하고 계속 (추천하지 않음)(&I)
+SourceIsCorrupted=원본 파일이 손상되었습니다
+SourceDoesntExist=원본 파일 "%1"이(가) 없습니다
+ExistingFileReadOnly2=읽기 전용으로 표시되어 있으므로 기존 파일을 교체할 수 없습니다.
+ExistingFileReadOnlyRetry=읽기 전용 속성을 제거하고 다시 시도(&R)
+ExistingFileReadOnlyKeepExisting=기존 파일 유지(&K)
+ErrorReadingExistingDest=기존 파일을 읽는 동안 오류 발생:
+FileExistsSelectAction=작업 선택
+FileExists2=파일이 이미 존재합니다.
+FileExistsOverwriteExisting=기존 파일 덮어쓰기(&O)
+FileExistsKeepExisting=기존 파일 유지(&K)
+FileExistsOverwriteOrKeepAll=다음 충돌에 대해 이 작업 수행(&D)
+ExistingFileNewerSelectAction=작업 선택
+ExistingFileNewer2=설치 프로그램에서 설치하려는 파일보다 기존 파일이 더 최신입니다.
+ExistingFileNewerOverwriteExisting=기존 파일 덮어쓰기(&O)
+ExistingFileNewerKeepExisting=기존 파일 유지 (추천)(&K)
+ExistingFileNewerOverwriteOrKeepAll=다음 충돌에 대해 이 작업 수행(&D)
+ErrorChangingAttr=기존 파일의 속성을 변경하는 동안 오류 발생:
+ErrorCreatingTemp=대상 디렉터리에 파일을 만드는 동안 오류 발생:
+ErrorReadingSource=원본 파일을 읽는 동안 오류 발생:
+ErrorCopying=파일을 복사하는 동안 오류 발생:
+ErrorReplacingExistingFile=기존 파일을 교체하는 동안 오류 발생:
+ErrorRestartReplace=RestartReplace 실패:
+ErrorRenamingTemp=대상 디렉터리 내의 파일 이름을 바꾸는 동안 오류 발생:
+ErrorRegisterServer=DLL/OCX를 등록할 수 없습니다: %1
+ErrorRegSvr32Failed=종료 코드 %1로 인해 RegSvr32가 실패했습니다
+ErrorRegisterTypeLib=유형 라이브러리를 등록할 수 없습니다: %1
+
+; *** Uninstall display name markings
+; 예를 들어 '내 프로그램'으로 사용됩니다 (32비트)'
+UninstallDisplayNameMark=%1 (%2)비트
+; 예를 들어 '내 프로그램'으로 사용됩니다 (32비트, 모든 사용자)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32비트
+UninstallDisplayNameMark64Bit=64비트
+UninstallDisplayNameMarkAllUsers=모든 사용자
+UninstallDisplayNameMarkCurrentUser=현재 사용자
+
+; *** Post-installation errors
+ErrorOpeningReadme=README 파일을 여는 동안 오류가 발생했습니다.
+ErrorRestartingComputer=컴퓨터를 다시 시작하지 못했습니다. 이 작업을 수동으로 수행하십시오.
+
+; *** Uninstaller messages
+UninstallNotFound="%1" 파일이 없습니다. 제거할 수 없습니다.
+UninstallOpenError="%1" 파일을 열 수 없습니다. 제거할 수 없습니다
+UninstallUnsupportedVer="%1" 제거 로그 파일이 현재 버전의 제거 프로그램에서 인식할 수 없는 형식입니다. 제거할 수 없습니다
+UninstallUnknownEntry=제거 로그에 알 수 없는 항목 (%1)이 있습니다
+ConfirmUninstall=%1 제거 마법사를 실행하시겠습니까?
+UninstallOnlyOnWin64=이 설치는 64비트 Windows에서만 제거할 수 있습니다.
+OnlyAdminCanUninstall=이 설치는 관리자 권한이 있는 사용자만 제거할 수 있습니다.
+UninstallStatusLabel=%1이(가) 컴퓨터에서 제거되는 동안 기다려 주십시오.
+UninstalledAll=%1이(가) 컴퓨터에서 성공적으로 제거되었습니다.
+UninstalledMost=%1 제거가 완료되었습니다.%n%n일부 요소를 제거할 수 없습니다. 수동으로 제거할 수 있습니다.
+UninstalledAndNeedsRestart=%1 제거를 완료하려면 컴퓨터를 다시 시작해야 합니다.%n%n지금 다시 시작하시겠습니까?
+UninstallDataCorrupted="%1" 파일이 손상되었습니다. 제거할 수 없습니다.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=공유 파일을 제거하시겠습니까?
+ConfirmDeleteSharedFile2=시스템에 다음 공유 파일이 더 이상 어떤 프로그램에서도 사용되지 않는 것으로 표시됩니다. 제거에서 이 공유 파일을 제거하시겠습니까?%n%n이 파일을 계속 사용하고 있고 파일이 제거된 프로그램이 있으면 해당 프로그램이 제대로 작동하지 않을 수 있습니다. 확실하지 않은 경우 아니요를 선택합니다. 파일을 시스템에 남겨두어도 아무런 해가 되지 않습니다.
+SharedFileNameLabel=파일 이름:
+SharedFileLocationLabel=위치:
+WizardUninstalling=제거 상태
+StatusUninstalling=%1을(를) 제거하는 중...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=%1을(를) 설치하는 중입니다.
+ShutdownBlockReasonUninstallingApp=%1을(를) 제거하는 중입니다.
+
+; 아래 사용자 지정 메시지는 설치 프로그램 자체에서 사용하지 않지만
+; 스크립트에서 사용할 경우 해당 메시지를 번역할 수 있습니다.
+
+[CustomMessages]
+
+NameAndVersion=%1 버전 %2
+AdditionalIcons=바로가기 추가:
+CreateDesktopIcon=바탕 화면에 바로가기 만들기(&D)
+CreateQuickLaunchIcon=빠른 실행 아이콘 만들기(&Q)
+ProgramOnTheWeb=%1 웹페이지
+UninstallProgram=%1 제거
+LaunchProgram=%1 실행
+AssocFileExtension=%1을 %2 파일 확장자에 연결
+AssocingFileExtension=%1을 %2 파일 확장자와 연결하는 중...
+AutoStartProgramGroupDescription=시작:
+AutoStartProgram=%1 자동 시작
+AddonHostProgramNotFound=%1을(를) 선택한 폴더에서 찾을 수 없습니다.%n%n계속하시겠습니까?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=설치 모드 선택
+SelectSetupInstallModeDesc=VCMI는 모든 사용자 또는 본인만을 위해 설치할 수 있습니다.
+SelectSetupInstallModeSubTitle=선호하는 설치 모드를 선택하세요:
+InstallForAllUsers=모든 사용자에게 설치
+InstallForAllUsers1=관리자 권한이 필요합니다
+InstallForMeOnly=본인만을 위해 설치
+InstallForMeOnly1=게임을 처음 실행할 때 방화벽 알림이 표시됩니다
+InstallForMeOnly2=방화벽 규칙을 허용하지 않으면 LAN 게임이 작동하지 않습니다
+SystemIntegration=시스템 통합
+CreateDesktopShortcuts=바탕 화면 바로 가기 생성
+CreateStartMenuShortcuts=시작 메뉴 바로 가기 생성
+AssociateH3MFiles=.h3m 파일을 VCMI 맵 에디터와 연결
+AssociateVCMIMapFiles=.vmap 및 .vcmp 파일을 VCMI 맵 에디터와 연결
+VCMISettings=VCMI 설정
+AddFirewallRules=VCMI를 위한 방화벽 규칙 추가
+CopyH3Files=필요한 Heroes III 파일을 VCMI로 자동 복사
+RunVCMILauncherAfterInstall=VCMI 런처 실행
+ShortcutMapEditor=VCMI 맵 에디터
+ShortcutLauncher=VCMI 런처
+ShortcutWebPage=VCMI 웹사이트
+ShortcutDiscord=VCMI 디스코드
+ShortcutLauncherComment=VCMI 런처 실행
+ShortcutMapEditorComment=VCMI 맵 에디터 열기
+ShortcutWebPageComment=VCMI 공식 웹사이트 방문
+ShortcutDiscordComment=VCMI 공식 디스코드 방문
+DeleteUserData=사용자 데이터 삭제
+Uninstall=제거
+Warning=경고
+VMAPDescription=VCMI 맵 파일
+VCMPDescription=VCMI 캠페인 파일
+H3MDescription=Heroes 3 맵 파일

+ 410 - 0
CI/wininstaller/lang/Polish.isl

@@ -0,0 +1,410 @@
+; *** Inno Setup version 6.1.0+ Polish messages ***
+; Krzysztof Cynarski <krzysztof at cynarski.net>
+; Proofreading, corrections and 5.5.7-6.1.0+ updates:
+; Łukasz Abramczuk <lukasz.abramczuk at gmail.com>
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+; last update: 2020/07/26 
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Polski
+LanguageID=$0415
+LanguageCodePage=1250
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Instalator
+SetupWindowTitle=Instalacja - %1
+UninstallAppTitle=Dezinstalator
+UninstallAppFullTitle=Dezinstalacja - %1
+
+; *** Misc. common
+InformationTitle=Informacja
+ConfirmTitle=Potwierdź
+ErrorTitle=Błąd
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Ten program zainstaluje aplikację %1. Czy chcesz kontynuować?
+LdrCannotCreateTemp=Nie można utworzyć pliku tymczasowego. Instalacja przerwana
+LdrCannotExecTemp=Nie można uruchomić pliku z folderu tymczasowego. Instalacja przerwana
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nBłąd %2: %3
+SetupFileMissing=W folderze instalacyjnym brakuje pliku %1.%nProszę o przywrócenie brakujących plików lub uzyskanie nowej kopii programu instalacyjnego.
+SetupFileCorrupt=Pliki instalacyjne są uszkodzone. Zaleca się uzyskanie nowej kopii programu instalacyjnego.
+SetupFileCorruptOrWrongVer=Pliki instalacyjne są uszkodzone lub niezgodne z tą wersją instalatora. Proszę rozwiązać problem lub uzyskać nową kopię programu instalacyjnego.
+InvalidParameter=W linii komend przekazano nieprawidłowy parametr:%n%n%1
+SetupAlreadyRunning=Instalator jest już uruchomiony.
+WindowsVersionNotSupported=Ten program nie moze zostac uruchomiony na uzywanej wersji systemu Windows. Upewnij sie, ze uzywasz odpowiedniej architektury systemu Windows (32-bitowej lub 64-bitowej) i wlasciwej wersji tego programu.
+WindowsServicePackRequired=Ta aplikacja wymaga systemu %1 z dodatkiem Service Pack %2 lub nowszym.
+NotOnThisPlatform=Tej aplikacji nie można uruchomić w systemie %1.
+OnlyOnThisPlatform=Ta aplikacja wymaga systemu %1.
+OnlyOnTheseArchitectures=Ta aplikacja może być uruchomiona tylko w systemie Windows zaprojektowanym dla procesorów o architekturze:%n%n%1
+WinVersionTooLowError=Ta aplikacja wymaga systemu %1 w wersji %2 lub nowszej.
+WinVersionTooHighError=Ta aplikacja nie może być zainstalowana w systemie %1 w wersji %2 lub nowszej.
+AdminPrivilegesRequired=Aby przeprowadzić instalację tej aplikacji, konto użytkownika systemu musi posiadać uprawnienia administratora.
+PowerUserPrivilegesRequired=Aby przeprowadzić instalację tej aplikacji, konto użytkownika systemu musi posiadać uprawnienia administratora lub użytkownika zaawansowanego.
+SetupAppRunningError=Instalator wykrył, iż aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciśnięciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwać instalację.
+UninstallAppRunningError=Dezinstalator wykrył, iż aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciśnięciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwać dezinstalację.
+
+; *** Startup questions	 ---
+PrivilegesRequiredOverrideTitle=Wybierz typ instalacji aplikacji
+PrivilegesRequiredOverrideInstruction=Wybierz typ instalacji
+PrivilegesRequiredOverrideText1=Aplikacja %1 może zostać zainstalowana dla wszystkich użytkowników (wymagane są uprawnienia administratora) lub tylko dla bieżącego użytkownika.
+PrivilegesRequiredOverrideText2=Aplikacja %1 może zostać zainstalowana dla bieżącego użytkownika lub wszystkich użytkowników (wymagane są uprawnienia administratora).
+PrivilegesRequiredOverrideAllUsers=Zainstaluj dla &wszystkich użytkowników
+PrivilegesRequiredOverrideAllUsersRecommended=Zainstaluj dla &wszystkich użytkowników (zalecane)
+PrivilegesRequiredOverrideCurrentUser=Zainstaluj dla &bieżącego użytkownika
+PrivilegesRequiredOverrideCurrentUserRecommended=Zainstaluj dla &bieżącego użytkownika (zalecane)
+
+; *** Misc. errors
+ErrorCreatingDir=Instalator nie mógł utworzyć katalogu "%1"
+ErrorTooManyFilesInDir=Nie można utworzyć pliku w katalogu "%1", ponieważ zawiera on zbyt wiele plików
+
+; *** Setup common messages
+ExitSetupTitle=Zakończ instalację
+ExitSetupMessage=Instalacja nie została zakończona. Jeżeli przerwiesz ją teraz, aplikacja nie zostanie zainstalowana. Można ponowić instalację później poprzez uruchamianie instalatora.%n%nCzy chcesz przerwać instalację?
+AboutSetupMenuItem=&O instalatorze...
+AboutSetupTitle=O instalatorze
+AboutSetupMessage=%1 wersja %2%n%3%n%n Strona domowa %1:%n%4
+AboutSetupNote=
+TranslatorNote=Wersja polska: Krzysztof Cynarski%n<krzysztof at cynarski.net>%nOd wersji 5.5.7: Łukasz Abramczuk%n<lukasz.abramczuk at gmail.com>
+
+; *** Buttons
+ButtonBack=< &Wstecz
+ButtonNext=&Dalej >
+ButtonInstall=&Instaluj
+ButtonOK=OK
+ButtonCancel=Anuluj
+ButtonYes=&Tak
+ButtonYesToAll=Tak na &wszystkie
+ButtonNo=&Nie
+ButtonNoToAll=N&ie na wszystkie
+ButtonFinish=&Zakończ
+ButtonBrowse=&Przeglądaj...
+ButtonWizardBrowse=P&rzeglądaj...
+ButtonNewFolder=&Utwórz nowy folder
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Język instalacji
+SelectLanguageLabel=Wybierz język używany podczas instalacji:
+
+; *** Common wizard text
+ClickNext=Kliknij przycisk Dalej, aby kontynuować, lub Anuluj, aby zakończyć instalację.
+BeveledLabel=
+BrowseDialogTitle=Wskaż folder
+BrowseDialogLabel=Wybierz folder z poniższej listy, a następnie kliknij przycisk OK.
+NewFolderName=Nowy folder
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Witamy w instalatorze aplikacji [name]
+WelcomeLabel2=Aplikacja [name/ver] zostanie teraz zainstalowana na komputerze.%n%nZalecane jest zamknięcie wszystkich innych uruchomionych programów przed rozpoczęciem procesu instalacji.
+
+; *** "Password" wizard page
+WizardPassword=Hasło
+PasswordLabel1=Ta instalacja jest zabezpieczona hasłem.
+PasswordLabel3=Podaj hasło, a następnie kliknij przycisk Dalej, aby kontynuować. W hasłach rozróżniane są wielkie i małe litery.
+PasswordEditLabel=&Hasło:
+IncorrectPassword=Wprowadzone hasło jest nieprawidłowe. Spróbuj ponownie.
+
+; *** "License Agreement" wizard page
+WizardLicense=Umowa Licencyjna
+LicenseLabel=Przed kontynuacją należy zapoznać się z poniższą ważną informacją.
+LicenseLabel3=Proszę przeczytać tekst Umowy Licencyjnej. Przed kontynuacją instalacji należy zaakceptować warunki umowy.
+LicenseAccepted=&Akceptuję warunki umowy
+LicenseNotAccepted=&Nie akceptuję warunków umowy
+
+; *** "Information" wizard pages
+WizardInfoBefore=Informacja
+InfoBeforeLabel=Przed kontynuacją należy zapoznać się z poniższą informacją.
+InfoBeforeClickLabel=Kiedy będziesz gotowy do instalacji, kliknij przycisk Dalej.
+WizardInfoAfter=Informacja
+InfoAfterLabel=Przed kontynuacją należy zapoznać się z poniższą informacją.
+InfoAfterClickLabel=Gdy będziesz gotowy do zakończenia instalacji, kliknij przycisk Dalej.
+
+; *** "User Information" wizard page
+WizardUserInfo=Dane użytkownika
+UserInfoDesc=Proszę podać swoje dane.
+UserInfoName=Nazwa &użytkownika:
+UserInfoOrg=&Organizacja:
+UserInfoSerial=Numer &seryjny:
+UserInfoNameRequired=Nazwa użytkownika jest wymagana.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Lokalizacja docelowa
+SelectDirDesc=Gdzie ma zostać zainstalowana aplikacja [name]?
+SelectDirLabel3=Instalator zainstaluje aplikację [name] do wskazanego poniżej folderu.
+SelectDirBrowseLabel=Kliknij przycisk Dalej, aby kontynuować. Jeśli chcesz wskazać inny folder, kliknij przycisk Przeglądaj.
+DiskSpaceGBLabel=Instalacja wymaga przynajmniej [gb] GB wolnego miejsca na dysku.
+DiskSpaceMBLabel=Instalacja wymaga przynajmniej [mb] MB wolnego miejsca na dysku.
+CannotInstallToNetworkDrive=Instalator nie może zainstalować aplikacji na dysku sieciowym.
+CannotInstallToUNCPath=Instalator nie może zainstalować aplikacji w ścieżce UNC.
+InvalidPath=Należy wprowadzić pełną ścieżkę wraz z literą dysku, np.:%n%nC:\PROGRAM%n%nlub ścieżkę sieciową (UNC) w formacie:%n%n\\serwer\udział
+InvalidDrive=Wybrany dysk lub udostępniony folder sieciowy nie istnieje. Proszę wybrać inny.
+DiskSpaceWarningTitle=Niewystarczająca ilość wolnego miejsca na dysku
+DiskSpaceWarning=Instalator wymaga co najmniej %1 KB wolnego miejsca na dysku. Wybrany dysk posiada tylko %2 KB dostępnego miejsca.%n%nCzy mimo to chcesz kontynuować?
+DirNameTooLong=Nazwa folderu lub ścieżki jest za długa.
+InvalidDirName=Niepoprawna nazwa folderu.
+BadDirName32=Nazwa folderu nie może zawierać żadnego z następujących znaków:%n%n%1
+DirExistsTitle=Folder już istnieje
+DirExists=Poniższy folder już istnieje:%n%n%1%n%nCzy mimo to chcesz zainstalować aplikację w tym folderze?
+DirDoesntExistTitle=Folder nie istnieje
+DirDoesntExist=Poniższy folder nie istnieje:%n%n%1%n%nCzy chcesz, aby został utworzony?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Komponenty instalacji
+SelectComponentsDesc=Które komponenty mają zostać zainstalowane?
+SelectComponentsLabel2=Zaznacz komponenty, które chcesz zainstalować i odznacz te, których nie chcesz zainstalować. Kliknij przycisk Dalej, aby kontynuować.
+FullInstallation=Instalacja pełna
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Instalacja podstawowa
+CustomInstallation=Instalacja użytkownika
+NoUninstallWarningTitle=Zainstalowane komponenty
+NoUninstallWarning=Instalator wykrył, że na komputerze są już zainstalowane następujące komponenty:%n%n%1%n%nOdznaczenie któregokolwiek z nich nie spowoduje ich dezinstalacji.%n%nCzy pomimo tego chcesz kontynuować?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Wybrane komponenty wymagają co najmniej [gb] GB na dysku.
+ComponentsDiskSpaceMBLabel=Wybrane komponenty wymagają co najmniej [mb] MB na dysku.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Zadania dodatkowe
+SelectTasksDesc=Które zadania dodatkowe mają zostać wykonane?
+SelectTasksLabel2=Zaznacz dodatkowe zadania, które instalator ma wykonać podczas instalacji aplikacji [name], a następnie kliknij przycisk Dalej, aby kontynuować.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Folder Menu Start
+SelectStartMenuFolderDesc=Gdzie mają zostać umieszczone skróty do aplikacji?
+SelectStartMenuFolderLabel3=Instalator utworzy skróty do aplikacji we wskazanym poniżej folderze Menu Start.
+SelectStartMenuFolderBrowseLabel=Kliknij przycisk Dalej, aby kontynuować. Jeśli chcesz wskazać inny folder, kliknij przycisk Przeglądaj.
+MustEnterGroupName=Musisz wprowadzić nazwę folderu.
+GroupNameTooLong=Nazwa folderu lub ścieżki jest za długa.
+InvalidGroupName=Niepoprawna nazwa folderu.
+BadGroupName=Nazwa folderu nie może zawierać żadnego z następujących znaków:%n%n%1
+NoProgramGroupCheck2=&Nie twórz folderu w Menu Start
+
+; *** "Ready to Install" wizard page
+WizardReady=Gotowy do rozpoczęcia instalacji
+ReadyLabel1=Instalator jest już gotowy do rozpoczęcia instalacji aplikacji [name] na komputerze.
+ReadyLabel2a=Kliknij przycisk Instaluj, aby rozpocząć instalację lub Wstecz, jeśli chcesz przejrzeć lub zmienić ustawienia.
+ReadyLabel2b=Kliknij przycisk Instaluj, aby kontynuować instalację.
+ReadyMemoUserInfo=Dane użytkownika:
+ReadyMemoDir=Lokalizacja docelowa:
+ReadyMemoType=Rodzaj instalacji:
+ReadyMemoComponents=Wybrane komponenty:
+ReadyMemoGroup=Folder w Menu Start:
+ReadyMemoTasks=Dodatkowe zadania:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Pobieranie dodatkowych plików...
+ButtonStopDownload=&Zatrzymaj pobieranie
+StopDownload=Czy na pewno chcesz zatrzymać pobieranie?
+ErrorDownloadAborted=Pobieranie przerwane
+ErrorDownloadFailed=Błąd pobierania: %1 %2
+ErrorDownloadSizeFailed=Pobieranie informacji o rozmiarze nie powiodło się: %1 %2
+ErrorFileHash1=Błąd sumy kontrolnej pliku: %1
+ErrorFileHash2=Nieprawidłowa suma kontrolna pliku: oczekiwano %1, otrzymano %2
+ErrorProgress=Nieprawidłowy postęp: %1 z %2
+ErrorFileSize=Nieprawidłowy rozmiar pliku: oczekiwano %1, otrzymano %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Przygotowanie do instalacji
+PreparingDesc=Instalator przygotowuje instalację aplikacji [name] na komputerze.
+PreviousInstallNotCompleted=Instalacja/dezinstalacja poprzedniej wersji aplikacji nie została zakończona. Aby zakończyć instalację, należy ponownie uruchomić komputer. %n%nNastępnie ponownie uruchom instalator, aby zakończyć instalację aplikacji [name].
+CannotContinue=Instalator nie może kontynuować. Kliknij przycisk Anuluj, aby przerwać instalację.
+ApplicationsFound=Poniższe aplikacje używają plików, które muszą zostać uaktualnione przez instalator. Zaleca się zezwolić na automatyczne zamknięcie tych aplikacji przez program instalacyjny.
+ApplicationsFound2=Poniższe aplikacje używają plików, które muszą zostać uaktualnione przez instalator. Zaleca się zezwolić na automatyczne zamknięcie tych aplikacji przez program instalacyjny. Po zakończonej instalacji instalator podejmie próbę ich ponownego uruchomienia.
+CloseApplications=&Automatycznie zamknij aplikacje
+DontCloseApplications=&Nie zamykaj aplikacji
+ErrorCloseApplications=Instalator nie był w stanie automatycznie zamknąć wymaganych aplikacji. Zalecane jest zamknięcie wszystkich aplikacji, które aktualnie używają uaktualnianych przez program instalacyjny plików.
+PrepareToInstallNeedsRestart=Instalator wymaga ponownego uruchomienia komputera. Po restarcie komputera uruchom instalator ponownie, by dokończyć proces instalacji aplikacji [name].%n%nCzy chcesz teraz uruchomić komputer ponownie?
+
+; *** "Installing" wizard page
+WizardInstalling=Instalacja
+InstallingLabel=Poczekaj, aż instalator zainstaluje aplikację [name] na komputerze.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Zakończono instalację aplikacji [name]
+FinishedLabelNoIcons=Instalator zakończył instalację aplikacji [name] na komputerze.
+FinishedLabel=Instalator zakończył instalację aplikacji [name] na komputerze. Aplikacja może być uruchomiona poprzez użycie zainstalowanych skrótów.
+ClickFinish=Kliknij przycisk Zakończ, aby zakończyć instalację.
+FinishedRestartLabel=Aby zakończyć instalację aplikacji [name], instalator musi ponownie uruchomić komputer. Czy chcesz teraz uruchomić komputer ponownie?
+FinishedRestartMessage=Aby zakończyć instalację aplikacji [name], instalator musi ponownie uruchomić komputer.%n%nCzy chcesz teraz uruchomić komputer ponownie?
+ShowReadmeCheck=Tak, chcę przeczytać dodatkowe informacje
+YesRadio=&Tak, uruchom ponownie teraz
+NoRadio=&Nie, uruchomię ponownie później
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Uruchom aplikację %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Wyświetl plik %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Instalator potrzebuje kolejnego archiwum
+SelectDiskLabel2=Proszę włożyć dysk %1 i kliknąć przycisk OK.%n%nJeśli wymieniony poniżej folder nie określa położenia plików z tego dysku, proszę wprowadzić poprawną ścieżkę lub kliknąć przycisk Przeglądaj.
+PathLabel=Ś&cieżka:
+FileNotInDir2=Ścieżka "%2" nie zawiera pliku "%1". Proszę włożyć właściwy dysk lub wybrać inny folder.
+SelectDirectoryLabel=Proszę określić lokalizację kolejnego archiwum instalatora.
+
+; *** Installation phase messages
+SetupAborted=Instalacja nie została zakończona.%n%nProszę rozwiązać problem i ponownie rozpocząć instalację.
+AbortRetryIgnoreSelectAction=Wybierz operację
+AbortRetryIgnoreRetry=Spróbuj &ponownie
+AbortRetryIgnoreIgnore=Z&ignoruj błąd i kontynuuj
+AbortRetryIgnoreCancel=Przerwij instalację
+
+; *** Installation status messages
+StatusClosingApplications=Zamykanie aplikacji...
+StatusCreateDirs=Tworzenie folderów...
+StatusExtractFiles=Dekompresja plików...
+StatusCreateIcons=Tworzenie skrótów aplikacji...
+StatusCreateIniEntries=Tworzenie zapisów w plikach INI...
+StatusCreateRegistryEntries=Tworzenie zapisów w rejestrze...
+StatusRegisterFiles=Rejestracja plików...
+StatusSavingUninstall=Zapisywanie informacji o dezinstalacji...
+StatusRunProgram=Kończenie instalacji...
+StatusRestartingApplications=Ponowne uruchamianie aplikacji...
+StatusRollback=Cofanie zmian...
+
+; *** Misc. errors
+ErrorInternal2=Wewnętrzny błąd: %1
+ErrorFunctionFailedNoCode=Błąd podczas wykonywania %1
+ErrorFunctionFailed=Błąd podczas wykonywania %1; kod %2
+ErrorFunctionFailedWithMessage=Błąd podczas wykonywania %1; kod %2.%n%3
+ErrorExecutingProgram=Nie można uruchomić:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Błąd podczas otwierania klucza rejestru:%n%1\%2
+ErrorRegCreateKey=Błąd podczas tworzenia klucza rejestru:%n%1\%2
+ErrorRegWriteKey=Błąd podczas zapisu do klucza rejestru:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Błąd podczas tworzenia pozycji w pliku INI: "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Pomiń plik (niezalecane)
+FileAbortRetryIgnoreIgnoreNotRecommended=Z&ignoruj błąd i kontynuuj (niezalecane)
+SourceIsCorrupted=Plik źródłowy jest uszkodzony
+SourceDoesntExist=Plik źródłowy "%1" nie istnieje
+ExistingFileReadOnly2=Istniejący plik nie może zostać zastąpiony, gdyż jest oznaczony jako "Tylko do odczytu".
+ExistingFileReadOnlyRetry=&Usuń atrybut "Tylko do odczytu" i spróbuj ponownie
+ExistingFileReadOnlyKeepExisting=&Zachowaj istniejący plik
+ErrorReadingExistingDest=Wystąpił błąd podczas próby odczytu istniejącego pliku:
+FileExistsSelectAction=Wybierz czynność
+FileExists2=Plik już istnieje.
+FileExistsOverwriteExisting=&Nadpisz istniejący plik
+FileExistsKeepExisting=&Zachowaj istniejący plik
+FileExistsOverwriteOrKeepAll=&Wykonaj tę czynność dla kolejnych przypadków
+ExistingFileNewerSelectAction=Wybierz czynność
+ExistingFileNewer2=Istniejący plik jest nowszy niż ten, który instalator próbuje skopiować.
+ExistingFileNewerOverwriteExisting=&Nadpisz istniejący plik
+ExistingFileNewerKeepExisting=&Zachowaj istniejący plik (zalecane)
+ExistingFileNewerOverwriteOrKeepAll=&Wykonaj tę czynność dla kolejnych przypadków
+ErrorChangingAttr=Wystąpił błąd podczas próby zmiany atrybutów pliku docelowego:
+ErrorCreatingTemp=Wystąpił błąd podczas próby utworzenia pliku w folderze docelowym:
+ErrorReadingSource=Wystąpił błąd podczas próby odczytu pliku źródłowego:
+ErrorCopying=Wystąpił błąd podczas próby kopiowania pliku:
+ErrorReplacingExistingFile=Wystąpił błąd podczas próby zamiany istniejącego pliku:
+ErrorRestartReplace=Próba zastąpienia plików przy ponownym uruchomieniu komputera nie powiodła się.
+ErrorRenamingTemp=Wystąpił błąd podczas próby zmiany nazwy pliku w folderze docelowym:
+ErrorRegisterServer=Nie można zarejestrować DLL/OCX: %1
+ErrorRegSvr32Failed=Funkcja RegSvr32 zakończyła się z kodem błędu %1
+ErrorRegisterTypeLib=Nie mogę zarejestrować biblioteki typów: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=wersja 32-bitowa
+UninstallDisplayNameMark64Bit=wersja 64-bitowa
+UninstallDisplayNameMarkAllUsers=wszyscy użytkownicy
+UninstallDisplayNameMarkCurrentUser=bieżący użytkownik
+
+; *** Post-installation errors
+ErrorOpeningReadme=Wystąpił błąd podczas próby otwarcia pliku z informacjami dodatkowymi.
+ErrorRestartingComputer=Instalator nie mógł ponownie uruchomić tego komputera. Proszę wykonać tę czynność samodzielnie.
+
+; *** Uninstaller messages
+UninstallNotFound=Plik "%1" nie istnieje. Nie można przeprowadzić dezinstalacji.
+UninstallOpenError=Plik "%1" nie mógł zostać otwarty. Nie można przeprowadzić dezinstalacji.
+UninstallUnsupportedVer=Ta wersja programu dezinstalacyjnego nie rozpoznaje formatu logu dezinstalacji w pliku "%1". Nie można przeprowadzić dezinstalacji.
+UninstallUnknownEntry=W logu dezinstalacji wystąpiła nieznana pozycja (%1)
+ConfirmUninstall=Czy na pewno chcesz uruchomic kreatora deinstalacji %1?
+UninstallOnlyOnWin64=Ta aplikacja może być odinstalowana tylko w 64-bitowej wersji systemu Windows.
+OnlyAdminCanUninstall=Ta instalacja może być odinstalowana tylko przez użytkownika z uprawnieniami administratora.
+UninstallStatusLabel=Poczekaj, aż aplikacja %1 zostanie usunięta z komputera.
+UninstalledAll=Aplikacja %1 została usunięta z komputera.
+UninstalledMost=Dezinstalacja aplikacji %1 zakończyła się.%n%nNiektóre elementy nie mogły zostać usunięte. Należy usunąć je samodzielnie.
+UninstalledAndNeedsRestart=Komputer musi zostać ponownie uruchomiony, aby zakończyć proces dezinstalacji aplikacji %1.%n%nCzy chcesz teraz ponownie uruchomić komputer?
+UninstallDataCorrupted=Plik "%1" jest uszkodzony. Nie można przeprowadzić dezinstalacji.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Usunąć plik współdzielony?
+ConfirmDeleteSharedFile2=System wskazuje, iż następujący plik nie jest już używany przez żaden program. Czy chcesz odinstalować ten plik współdzielony?%n%nJeśli inne programy nadal używają tego pliku, a zostanie on usunięty, mogą one przestać działać prawidłowo. W przypadku braku pewności, kliknij przycisk Nie. Pozostawienie tego pliku w systemie nie spowoduje żadnych szkód.
+SharedFileNameLabel=Nazwa pliku:
+SharedFileLocationLabel=Położenie:
+WizardUninstalling=Stan dezinstalacji
+StatusUninstalling=Dezinstalacja aplikacji %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Instalacja aplikacji %1.
+ShutdownBlockReasonUninstallingApp=Dezinstalacja aplikacji %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 (wersja %2)
+AdditionalIcons=Dodatkowe skróty:
+CreateDesktopIcon=Utwórz skrót na &pulpicie
+CreateQuickLaunchIcon=Utwórz skrót na pasku &szybkiego uruchamiania
+ProgramOnTheWeb=Strona internetowa aplikacji %1
+UninstallProgram=Dezinstalacja aplikacji %1
+LaunchProgram=Uruchom aplikację %1
+AssocFileExtension=&Przypisz aplikację %1 do rozszerzenia pliku %2
+AssocingFileExtension=Przypisywanie aplikacji %1 do rozszerzenia pliku %2...
+AutoStartProgramGroupDescription=Autostart:
+AutoStartProgram=Automatycznie uruchamiaj aplikację %1
+AddonHostProgramNotFound=Aplikacja %1 nie została znaleziona we wskazanym przez Ciebie folderze.%n%nCzy pomimo tego chcesz kontynuować?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Wybierz tryb instalacji
+SelectSetupInstallModeDesc=VCMI moze zostac zainstalowane dla wszystkich uzytkowników lub tylko dla Ciebie.
+SelectSetupInstallModeSubTitle=Wybierz preferowany tryb instalacji:
+InstallForAllUsers=Zainstaluj dla wszystkich uzytkowników
+InstallForAllUsers1=Wymagane uprawnienia administratora
+InstallForMeOnly=Zainstaluj tylko dla mnie
+InstallForMeOnly1=Podczas pierwszego uruchomienia gry pojawi sie komunikat zapory
+InstallForMeOnly2=Gry LAN nie beda dzialac, jesli regula zapory nie zostanie zaakceptowana
+SystemIntegration=Integracja z systemem
+CreateDesktopShortcuts=Utwórz skróty na pulpicie
+CreateStartMenuShortcuts=Utwórz skróty w menu Start
+AssociateH3MFiles=Powiaz pliki .h3m z Edytorem Map VCMI
+AssociateVCMIMapFiles=Powiaz pliki .vmap i .vcmp z Edytorem Map VCMI
+VCMISettings=Konfiguracja VCMI
+AddFirewallRules=Dodaj reguly zapory dla VCMI
+CopyH3Files=Automatycznie skopiuj wymagane pliki Heroes III do VCMI
+RunVCMILauncherAfterInstall=Uruchom Launcher VCMI
+ShortcutMapEditor=Edytor Map VCMI
+ShortcutLauncher=Launcher VCMI
+ShortcutWebPage=Strona internetowa VCMI
+ShortcutDiscord=Discord VCMI
+ShortcutLauncherComment=Uruchom Launcher VCMI
+ShortcutMapEditorComment=Otwórz Edytor Map VCMI
+ShortcutWebPageComment=Odwiedz oficjalna strone VCMI
+ShortcutDiscordComment=Odwiedz oficjalny Discord VCMI
+DeleteUserData=Usun dane uzytkownika
+Uninstall=Odinstaluj
+Warning=Ostrzezenie
+VMAPDescription=Plik mapy VCMI
+VCMPDescription=Plik kampanii VCMI
+H3MDescription=Plik mapy Heroes 3

+ 403 - 0
CI/wininstaller/lang/Russian.isl

@@ -0,0 +1,403 @@
+; *** Inno Setup version 6.1.0+ Russian messages ***
+;
+; Translated from English by Dmitry Kann, yktooo at gmail.com
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+LanguageName=<0420><0443><0441><0441><043A><0438><0439>
+LanguageID=$0419
+LanguageCodePage=1251
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Установка
+SetupWindowTitle=Установка — %1
+UninstallAppTitle=Деинсталляция
+UninstallAppFullTitle=Деинсталляция — %1
+
+; *** Misc. common
+InformationTitle=Информация
+ConfirmTitle=Подтверждение
+ErrorTitle=Ошибка
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Данная программа установит %1 на ваш компьютер, продолжить?
+LdrCannotCreateTemp=Невозможно создать временный файл. Установка прервана
+LdrCannotExecTemp=Невозможно выполнить файл во временном каталоге. Установка прервана
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nОшибка %2: %3
+SetupFileMissing=Файл %1 отсутствует в папке установки. Пожалуйста, устраните проблему или получите новую версию программы.
+SetupFileCorrupt=Установочные файлы повреждены. Пожалуйста, получите новую копию программы.
+SetupFileCorruptOrWrongVer=Эти установочные файлы повреждены или несовместимы с данной версией программы установки. Пожалуйста, устраните проблему или получите новую копию программы.
+InvalidParameter=Командная строка содержит недопустимый параметр:%n%n%1
+SetupAlreadyRunning=Программа установки уже запущена.
+WindowsVersionNotSupported=Эта программа не может работать с вашей версией Windows. Убедитесь, что вы используете правильную архитектуру Windows (32-битную или 64-битную) и соответствующую версию программы.
+WindowsServicePackRequired=Эта программа требует %1 Service Pack %2 или более позднюю версию.
+NotOnThisPlatform=Эта программа не будет работать в %1.
+OnlyOnThisPlatform=Эту программу можно запускать только в %1.
+OnlyOnTheseArchitectures=Установка этой программы возможна только в версиях Windows для следующих архитектур процессоров:%n%n%1
+WinVersionTooLowError=Эта программа требует %1 версии %2 или выше.
+WinVersionTooHighError=Программа не может быть установлена в %1 версии %2 или выше.
+AdminPrivilegesRequired=Чтобы установить данную программу, вы должны выполнить вход в систему как Администратор.
+PowerUserPrivilegesRequired=Чтобы установить эту программу, вы должны выполнить вход в систему как Администратор или член группы «Опытные пользователи» (Power Users).
+SetupAppRunningError=Обнаружен запущенный экземпляр %1.%n%nПожалуйста, закройте все экземпляры приложения, затем нажмите «OK», чтобы продолжить, или «Отмена», чтобы выйти.
+UninstallAppRunningError=Деинсталлятор обнаружил запущенный экземпляр %1.%n%nПожалуйста, закройте все экземпляры приложения, затем нажмите «OK», чтобы продолжить, или «Отмена», чтобы выйти.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Выбор режима установки
+PrivilegesRequiredOverrideInstruction=Выберите режим установки
+PrivilegesRequiredOverrideText1=%1 может быть установлена либо для всех пользователей (требуются привилегии администратора), либо только для вас.
+PrivilegesRequiredOverrideText2=%1 может быть установлена либо только для вас, либо для всех пользователей (требуются привилегии администратора).
+PrivilegesRequiredOverrideAllUsers=Установить для &всех пользователей
+PrivilegesRequiredOverrideAllUsersRecommended=Установить для &всех пользователей (рекомендуется)
+PrivilegesRequiredOverrideCurrentUser=Установить только для &меня
+PrivilegesRequiredOverrideCurrentUserRecommended=Установить только для &меня (рекомендуется)
+
+; *** Misc. errors
+ErrorCreatingDir=Невозможно создать папку "%1"
+ErrorTooManyFilesInDir=Невозможно создать файл в каталоге "%1", так как в нём слишком много файлов
+
+; *** Setup common messages
+ExitSetupTitle=Выход из программы установки
+ExitSetupMessage=Установка не завершена. Если вы выйдете, программа не будет установлена.%n%nВы сможете завершить установку, запустив программу установки позже.%n%nВыйти из программы установки?
+AboutSetupMenuItem=&О программе...
+AboutSetupTitle=О программе
+AboutSetupMessage=%1, версия %2%n%3%n%nСайт %1:%n%4
+AboutSetupNote=
+TranslatorNote=Russian translation by Dmitry Kann, http://www.dk-soft.org/
+
+; *** Buttons
+ButtonBack=< &Назад
+ButtonNext=&Далее >
+ButtonInstall=&Установить
+ButtonOK=OK
+ButtonCancel=Отмена
+ButtonYes=&Да
+ButtonYesToAll=Да для &Всех
+ButtonNo=&Нет
+ButtonNoToAll=Н&ет для Всех
+ButtonFinish=&Завершить
+ButtonBrowse=&Обзор...
+ButtonWizardBrowse=&Обзор...
+ButtonNewFolder=&Создать папку
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Выберите язык установки
+SelectLanguageLabel=Выберите язык, который будет использован в процессе установки.
+
+; *** Common wizard text
+ClickNext=Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.
+BeveledLabel=
+BrowseDialogTitle=Обзор папок
+BrowseDialogLabel=Выберите папку из списка и нажмите «ОК».
+NewFolderName=Новая папка
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Вас приветствует Мастер установки [name]
+WelcomeLabel2=Программа установит [name/ver] на ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.
+
+; *** "Password" wizard page
+WizardPassword=Пароль
+PasswordLabel1=Эта программа защищена паролем.
+PasswordLabel3=Пожалуйста, наберите пароль, потом нажмите «Далее». Пароли необходимо вводить с учётом регистра.
+PasswordEditLabel=&Пароль:
+IncorrectPassword=Введенный вами пароль неверен. Пожалуйста, попробуйте снова.
+
+; *** "License Agreement" wizard page
+WizardLicense=Лицензионное Соглашение
+LicenseLabel=Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.
+LicenseLabel3=Пожалуйста, прочтите следующее Лицензионное Соглашение. Вы должны принять условия этого соглашения перед тем, как продолжить.
+LicenseAccepted=Я &принимаю условия соглашения
+LicenseNotAccepted=Я &не принимаю условия соглашения
+
+; *** "Information" wizard pages
+WizardInfoBefore=Информация
+InfoBeforeLabel=Пожалуйста, прочитайте следующую важную информацию перед тем, как продолжить.
+InfoBeforeClickLabel=Когда вы будете готовы продолжить установку, нажмите «Далее».
+WizardInfoAfter=Информация
+InfoAfterLabel=Пожалуйста, прочитайте следующую важную информацию перед тем, как продолжить.
+InfoAfterClickLabel=Когда вы будете готовы продолжить установку, нажмите «Далее».
+
+; *** "User Information" wizard page
+WizardUserInfo=Информация о пользователе
+UserInfoDesc=Пожалуйста, введите данные о себе.
+UserInfoName=&Имя и фамилия пользователя:
+UserInfoOrg=&Организация:
+UserInfoSerial=&Серийный номер:
+UserInfoNameRequired=Вы должны ввести имя.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Выбор папки установки
+SelectDirDesc=В какую папку вы хотите установить [name]?
+SelectDirLabel3=Программа установит [name] в следующую папку.
+SelectDirBrowseLabel=Нажмите «Далее», чтобы продолжить. Если вы хотите выбрать другую папку, нажмите «Обзор».
+DiskSpaceGBLabel=Требуется как минимум [gb] Гб свободного дискового пространства.
+DiskSpaceMBLabel=Требуется как минимум [mb] Мб свободного дискового пространства.
+CannotInstallToNetworkDrive=Установка не может производиться на сетевой диск.
+CannotInstallToUNCPath=Установка не может производиться в папку по UNC-пути.
+InvalidPath=Вы должны указать полный путь с буквой диска; например:%n%nC:\APP%n%nили в форме UNC:%n%n\\имя_сервера\имя_ресурса
+InvalidDrive=Выбранный вами диск или сетевой путь не существует или недоступен. Пожалуйста, выберите другой.
+DiskSpaceWarningTitle=Недостаточно места на диске
+DiskSpaceWarning=Установка требует не менее %1 Кб свободного места, а на выбранном вами диске доступно только %2 Кб.%n%nВы желаете тем не менее продолжить установку?
+DirNameTooLong=Имя папки или путь к ней превышают допустимую длину.
+InvalidDirName=Указанное имя папки недопустимо.
+BadDirName32=Имя папки не может содержать символов: %n%n%1
+DirExistsTitle=Папка существует
+DirExists=Папка%n%n%1%n%nуже существует. Всё равно установить в эту папку?
+DirDoesntExistTitle=Папка не существует
+DirDoesntExist=Папка%n%n%1%n%nне существует. Вы хотите создать её?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Выбор компонентов
+SelectComponentsDesc=Какие компоненты должны быть установлены?
+SelectComponentsLabel2=Выберите компоненты, которые вы хотите установить; снимите флажки с компонентов, устанавливать которые не требуется. Нажмите «Далее», когда вы будете готовы продолжить.
+FullInstallation=Полная установка
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Компактная установка
+CustomInstallation=Выборочная установка
+NoUninstallWarningTitle=Установленные компоненты
+NoUninstallWarning=Программа установки обнаружила, что следующие компоненты уже установлены на вашем компьютере:%n%n%1%n%nОтмена выбора этих компонентов не удалит их.%n%nПродолжить?
+ComponentSize1=%1 Кб
+ComponentSize2=%1 Мб
+ComponentsDiskSpaceGBLabel=Текущий выбор требует не менее [gb] Гб на диске.
+ComponentsDiskSpaceMBLabel=Текущий выбор требует не менее [mb] Мб на диске.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Выберите дополнительные задачи
+SelectTasksDesc=Какие дополнительные задачи необходимо выполнить?
+SelectTasksLabel2=Выберите дополнительные задачи, которые должны выполниться при установке [name], после этого нажмите «Далее»:
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Выберите папку в меню «Пуск»
+SelectStartMenuFolderDesc=Где программа установки должна создать ярлыки?
+SelectStartMenuFolderLabel3=Программа создаст ярлыки в следующей папке меню «Пуск».
+SelectStartMenuFolderBrowseLabel=Нажмите «Далее», чтобы продолжить. Если вы хотите выбрать другую папку, нажмите «Обзор».
+MustEnterGroupName=Вы должны ввести имя папки.
+GroupNameTooLong=Имя папки группы или путь к ней превышают допустимую длину.
+InvalidGroupName=Указанное имя папки недопустимо.
+BadGroupName=Имя папки не может содержать символов:%n%n%1
+NoProgramGroupCheck2=&Не создавать папку в меню «Пуск»
+
+; *** "Ready to Install" wizard page
+WizardReady=Всё готово к установке
+ReadyLabel1=Программа установки готова начать установку [name] на ваш компьютер.
+ReadyLabel2a=Нажмите «Установить», чтобы продолжить, или «Назад», если вы хотите просмотреть или изменить опции установки.
+ReadyLabel2b=Нажмите «Установить», чтобы продолжить.
+ReadyMemoUserInfo=Информация о пользователе:
+ReadyMemoDir=Папка установки:
+ReadyMemoType=Тип установки:
+ReadyMemoComponents=Выбранные компоненты:
+ReadyMemoGroup=Папка в меню «Пуск»:
+ReadyMemoTasks=Дополнительные задачи:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Загрузка дополнительных файлов...
+ButtonStopDownload=&Прервать загрузку
+StopDownload=Вы действительно хотите прекратить загрузку?
+ErrorDownloadAborted=Загрузка прервана
+ErrorDownloadFailed=Ошибка загрузки: %1 %2
+ErrorDownloadSizeFailed=Ошибка получения размера: %1 %2
+ErrorFileHash1=Ошибка хэша файла: %1
+ErrorFileHash2=Неверный хэш файла: ожидался %1, получен %2
+ErrorProgress=Ошибка выполнения: %1 из %2
+ErrorFileSize=Неверный размер файла: ожидался %1, получен %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Подготовка к установке
+PreparingDesc=Программа установки подготавливается к установке [name] на ваш компьютер.
+PreviousInstallNotCompleted=Установка или удаление предыдущей программы не были завершены. Вам потребуется перезагрузить компьютер, чтобы завершить ту установку.%n%nПосле перезагрузки запустите вновь Программу установки, чтобы завершить установку [name].
+CannotContinue=Невозможно продолжить установку. Нажмите «Отмена» для выхода из программы.
+ApplicationsFound=Следующие приложения используют файлы, которые программа установки должна обновить. Рекомендуется позволить программе установки автоматически закрыть эти приложения.
+ApplicationsFound2=Следующие приложения используют файлы, которые программа установки должна обновить. Рекомендуется позволить программе установки автоматически закрыть эти приложения. Когда установка будет завершена, программа установки попытается вновь запустить их.
+CloseApplications=&Автоматически закрыть эти приложения
+DontCloseApplications=&Не закрывать эти приложения
+ErrorCloseApplications=Программе установки не удалось автоматически закрыть все приложения. Рекомендуется закрыть все приложения, которые используют подлежащие обновлению файлы, прежде чем продолжить установку.
+PrepareToInstallNeedsRestart=Программе установки требуется перезагрузить ваш компьютер. Когда перезагрузка завершится, пожалуйста, запустите программу установки вновь, чтобы завершить процесс установки [name].%n%nПроизвести перезагрузку сейчас?
+
+; *** "Installing" wizard page
+WizardInstalling=Установка...
+InstallingLabel=Пожалуйста, подождите, пока [name] установится на ваш компьютер.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Завершение Мастера установки [name]
+FinishedLabelNoIcons=Программа [name] установлена на ваш компьютер.
+FinishedLabel=Программа [name] установлена на ваш компьютер. Приложение можно запустить с помощью соответствующего значка.
+ClickFinish=Нажмите «Завершить», чтобы выйти из программы установки.
+FinishedRestartLabel=Для завершения установки [name] требуется перезагрузить компьютер. Произвести перезагрузку сейчас?
+FinishedRestartMessage=Для завершения установки [name] требуется перезагрузить компьютер.%n%nПроизвести перезагрузку сейчас?
+ShowReadmeCheck=Я хочу просмотреть файл README
+YesRadio=&Да, перезагрузить компьютер сейчас
+NoRadio=&Нет, я произведу перезагрузку позже
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Запустить %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Просмотреть %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Необходимо вставить следующий диск
+SelectDiskLabel2=Пожалуйста, вставьте диск %1 и нажмите «OK».%n%nЕсли файлы этого диска могут быть найдены в папке, отличающейся от показанной ниже, введите правильный путь или нажмите «Обзор».
+PathLabel=&Путь:
+FileNotInDir2=Файл "%1" не найден в "%2". Пожалуйста, вставьте правильный диск или выберите другую папку.
+SelectDirectoryLabel=Пожалуйста, укажите путь к следующему диску.
+
+; *** Installation phase messages
+SetupAborted=Установка не была завершена.%n%nПожалуйста, устраните проблему и запустите установку снова.
+AbortRetryIgnoreSelectAction=Выберите действие
+AbortRetryIgnoreRetry=Попробовать &снова
+AbortRetryIgnoreIgnore=&Игнорировать ошибку и продолжить
+AbortRetryIgnoreCancel=Отменить установку
+
+; *** Installation status messages
+StatusClosingApplications=Закрытие приложений...
+StatusCreateDirs=Создание папок...
+StatusExtractFiles=Распаковка файлов...
+StatusCreateIcons=Создание ярлыков программы...
+StatusCreateIniEntries=Создание INI-файлов...
+StatusCreateRegistryEntries=Создание записей реестра...
+StatusRegisterFiles=Регистрация файлов...
+StatusSavingUninstall=Сохранение информации для деинсталляции...
+StatusRunProgram=Завершение установки...
+StatusRestartingApplications=Перезапуск приложений...
+StatusRollback=Откат изменений...
+
+; *** Misc. errors
+ErrorInternal2=Внутренняя ошибка: %1
+ErrorFunctionFailedNoCode=%1: сбой
+ErrorFunctionFailed=%1: сбой; код %2
+ErrorFunctionFailedWithMessage=%1: сбой; код %2.%n%3
+ErrorExecutingProgram=Невозможно выполнить файл:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Ошибка открытия ключа реестра:%n%1\%2
+ErrorRegCreateKey=Ошибка создания ключа реестра:%n%1\%2
+ErrorRegWriteKey=Ошибка записи в ключ реестра:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Ошибка создания записи в INI-файле "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Пропустить этот файл (не рекомендуется)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Игнорировать ошибку и продолжить (не рекомендуется)
+SourceIsCorrupted=Исходный файл поврежден
+SourceDoesntExist=Исходный файл "%1" не существует
+ExistingFileReadOnly2=Невозможно заменить существующий файл, так как он помечен как «файл только для чтения».
+ExistingFileReadOnlyRetry=&Удалить атрибут «только для чтения» и повторить попытку
+ExistingFileReadOnlyKeepExisting=&Оставить файл на месте
+ErrorReadingExistingDest=Произошла ошибка при попытке чтения существующего файла:
+FileExistsSelectAction=Выберите действие
+FileExists2=Файл уже существует.
+FileExistsOverwriteExisting=&Заменить существующий файл
+FileExistsKeepExisting=&Сохранить существующий файл
+FileExistsOverwriteOrKeepAll=&Повторить действие для всех последующих конфликтов
+ExistingFileNewerSelectAction=Выберите действие
+ExistingFileNewer2=Существующий файл более новый, чем устанавливаемый.
+ExistingFileNewerOverwriteExisting=&Заменить существующий файл
+ExistingFileNewerKeepExisting=&Сохранить существующий файл (рекомендуется)
+ExistingFileNewerOverwriteOrKeepAll=&Повторить действие для всех последующих конфликтов
+ErrorChangingAttr=Произошла ошибка при попытке изменения атрибутов существующего файла:
+ErrorCreatingTemp=Произошла ошибка при попытке создания файла в папке назначения:
+ErrorReadingSource=Произошла ошибка при попытке чтения исходного файла:
+ErrorCopying=Произошла ошибка при попытке копирования файла:
+ErrorReplacingExistingFile=Произошла ошибка при попытке замены существующего файла:
+ErrorRestartReplace=Ошибка RestartReplace:
+ErrorRenamingTemp=Произошла ошибка при попытке переименования файла в папке назначения:
+ErrorRegisterServer=Невозможно зарегистрировать DLL/OCX: %1
+ErrorRegSvr32Failed=Ошибка при выполнении RegSvr32, код возврата %1
+ErrorRegisterTypeLib=Невозможно зарегистрировать библиотеку типов (Type Library): %1
+
+; *** Uninstall display name markings
+UninstallDisplayNameMark=%1 (%2)
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32 бита
+UninstallDisplayNameMark64Bit=64 бита
+UninstallDisplayNameMarkAllUsers=Все пользователи
+UninstallDisplayNameMarkCurrentUser=Текущий пользователь
+
+; *** Post-installation errors
+ErrorOpeningReadme=Произошла ошибка при попытке открытия файла README.
+ErrorRestartingComputer=Программе установки не удалось перезапустить компьютер. Пожалуйста, выполните это самостоятельно.
+
+; *** Uninstaller messages
+UninstallNotFound=Файл "%1" не существует, деинсталляция невозможна.
+UninstallOpenError=Невозможно открыть файл "%1". Деинсталляция невозможна
+UninstallUnsupportedVer=Файл протокола для деинсталляции "%1" не распознан данной версией программы-деинсталлятора. Деинсталляция невозможна
+UninstallUnknownEntry=Встретился неизвестный пункт (%1) в файле протокола для деинсталляции
+ConfirmUninstall=Вы уверены, что хотите запустить мастер удаления %1?
+UninstallOnlyOnWin64=Данную программу возможно деинсталлировать только в среде 64-битной Windows.
+OnlyAdminCanUninstall=Эта программа может быть деинсталлирована только пользователем с административными привилегиями.
+UninstallStatusLabel=Пожалуйста, подождите, пока %1 будет удалена с вашего компьютера.
+UninstalledAll=Программа %1 была полностью удалена с вашего компьютера.
+UninstalledMost=Деинсталляция %1 завершена.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно.
+UninstalledAndNeedsRestart=Для завершения деинсталляции %1 необходимо произвести перезагрузку вашего компьютера.%n%nВыполнить перезагрузку сейчас?
+UninstallDataCorrupted=Файл "%1" поврежден. Деинсталляция невозможна
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Удалить совместно используемый файл?
+ConfirmDeleteSharedFile2=Система указывает, что следующий совместно используемый файл больше не используется никакими другими приложениями. Подтверждаете удаление файла?%n%nЕсли какие-либо программы всё еще используют этот файл, и он будет удалён, они не смогут работать правильно. Если Вы не уверены, выберите «Нет». Оставленный файл не навредит вашей системе.
+SharedFileNameLabel=Имя файла:
+SharedFileLocationLabel=Расположение:
+WizardUninstalling=Состояние деинсталляции
+StatusUninstalling=Деинсталляция %1...
+
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Установка %1.
+ShutdownBlockReasonUninstallingApp=Деинсталляция %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1, версия %2
+AdditionalIcons=Дополнительные значки:
+CreateDesktopIcon=Создать значок на &Рабочем столе
+CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
+ProgramOnTheWeb=Сайт %1 в Интернете
+UninstallProgram=Деинсталлировать %1
+LaunchProgram=Запустить %1
+AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
+AssocingFileExtension=Связывание %1 с файлами %2...
+AutoStartProgramGroupDescription=Автозапуск:
+AutoStartProgram=Автоматически запускать %1
+AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Выберите режим установки
+SelectSetupInstallModeDesc=VCMI можно установить для всех пользователей или только для вас.
+SelectSetupInstallModeSubTitle=Выберите предпочтительный режим установки:
+InstallForAllUsers=Установить для всех пользователей
+InstallForAllUsers1=Требуются права администратора
+InstallForMeOnly=Установить только для меня
+InstallForMeOnly1=При первом запуске игры появится запрос от брандмауэра
+InstallForMeOnly2=LAN-игры не будут работать, если правило брандмауэра не будет разрешено
+SystemIntegration=Интеграция с системой
+CreateDesktopShortcuts=Создать ярлыки на рабочем столе
+CreateStartMenuShortcuts=Создать ярлыки в меню Пуск
+AssociateH3MFiles=Ассоциировать файлы .h3m с редактором карт VCMI
+AssociateVCMIMapFiles=Ассоциировать файлы .vmap и .vcmp с редактором карт VCMI
+VCMISettings=Настройки VCMI
+AddFirewallRules=Добавить правила брандмауэра для VCMI
+CopyH3Files=Автоматически скопировать необходимые файлы Heroes III в VCMI
+RunVCMILauncherAfterInstall=Запустить VCMI Launcher
+ShortcutMapEditor=Редактор карт VCMI
+ShortcutLauncher=Запускатор VCMI
+ShortcutWebPage=Официальный сайт VCMI
+ShortcutDiscord=Discord VCMI
+ShortcutLauncherComment=Запустить VCMI Launcher
+ShortcutMapEditorComment=Открыть редактор карт VCMI
+ShortcutWebPageComment=Посетите официальный сайт VCMI
+ShortcutDiscordComment=Посетите официальный Discord VCMI
+DeleteUserData=Удалить пользовательские данные
+Uninstall=Удалить
+Warning=Предупреждение
+VMAPDescription=Файл карты VCMI
+VCMPDescription=Файл кампании VCMI
+H3MDescription=Файл карты Heroes 3

+ 416 - 0
CI/wininstaller/lang/Spanish.isl

@@ -0,0 +1,416 @@
+; *** Inno Setup version 6.1.0+ Spanish messages ***
+;
+; Maintained by Jorge Andres Brugger ([email protected])
+; isl version 1.5.2 (20211123)
+; Default.isl version 6.1.0
+; 
+; Thanks to Germán Giraldo, Jordi Latorre, Ximo Tamarit, Emiliano Llano, 
+; Ramón Verduzco, Graciela García, Carles Millan and Rafael Barranco-Droege
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Espa<00F1>ol
+LanguageID=$0c0a
+LanguageCodePage=1252
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Instalar
+SetupWindowTitle=Instalar - %1
+UninstallAppTitle=Desinstalar
+UninstallAppFullTitle=Desinstalar - %1
+
+; *** Misc. common
+InformationTitle=Información
+ConfirmTitle=Confirmar
+ErrorTitle=Error
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Este programa instalará %1. ¿Desea continuar?
+LdrCannotCreateTemp=Imposible crear archivo temporal. Instalación interrumpida
+LdrCannotExecTemp=Imposible ejecutar archivo en la carpeta temporal. Instalación interrumpida
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nError %2: %3
+SetupFileMissing=El archivo %1 no se encuentra en la carpeta de instalación. Por favor, solucione el problema u obtenga una copia nueva del programa.
+SetupFileCorrupt=Los archivos de instalación están dañados. Por favor, obtenga una copia nueva del programa.
+SetupFileCorruptOrWrongVer=Los archivos de instalación están dañados o son incompatibles con esta versión del programa de instalación. Por favor, solucione el problema u obtenga una copia nueva del programa.
+InvalidParameter=Se ha utilizado un parámetro no válido en la línea de comandos:%n%n%1
+SetupAlreadyRunning=El programa de instalación aún está ejecutándose.
+WindowsVersionNotSupported=Este programa no puede ejecutarse en su versión de Windows. Asegúrese de estar utilizando la arquitectura correcta de Windows (32 bits o 64 bits) y la versión adecuada de este programa.
+WindowsServicePackRequired=Este programa requiere %1 Service Pack %2 o posterior.
+NotOnThisPlatform=Este programa no se ejecutará en %1.
+OnlyOnThisPlatform=Este programa debe ejecutarse en %1.
+OnlyOnTheseArchitectures=Este programa solo puede instalarse en versiones de Windows diseñadas para las siguientes arquitecturas de procesadores:%n%n%1
+WinVersionTooLowError=Este programa requiere %1 versión %2 o posterior.
+WinVersionTooHighError=Este programa no puede instalarse en %1 versión %2 o posterior.
+AdminPrivilegesRequired=Debe iniciar la sesión como administrador para instalar este programa.
+PowerUserPrivilegesRequired=Debe iniciar la sesión como administrador o como miembro del grupo de Usuarios Avanzados para instalar este programa.
+SetupAppRunningError=El programa de instalación ha detectado que %1 está ejecutándose.%n%nPor favor, ciérrelo ahora, luego haga clic en Aceptar para continuar o en Cancelar para salir.
+UninstallAppRunningError=El desinstalador ha detectado que %1 está ejecutándose.%n%nPor favor, ciérrelo ahora, luego haga clic en Aceptar para continuar o en Cancelar para salir.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Selección del Modo de Instalación
+PrivilegesRequiredOverrideInstruction=Seleccione el modo de instalación
+PrivilegesRequiredOverrideText1=%1 puede ser instalado para todos los usuarios (requiere privilegios administrativos), o solo para Ud.
+PrivilegesRequiredOverrideText2=%1 puede ser instalado solo para Ud, o para todos los usuarios (requiere privilegios administrativos).
+PrivilegesRequiredOverrideAllUsers=Instalar para &todos los usuarios
+PrivilegesRequiredOverrideAllUsersRecommended=Instalar para &todos los usuarios (recomendado)
+PrivilegesRequiredOverrideCurrentUser=Instalar para &mí solamente
+PrivilegesRequiredOverrideCurrentUserRecommended=Instalar para &mí solamente (recomendado)
+
+; *** Misc. errors
+ErrorCreatingDir=El programa de instalación no pudo crear la carpeta "%1"
+ErrorTooManyFilesInDir=Imposible crear un archivo en la carpeta "%1" porque contiene demasiados archivos
+
+; *** Setup common messages
+ExitSetupTitle=Salir de la Instalación
+ExitSetupMessage=La instalación no se ha completado aún. Si cancela ahora, el programa no se instalará.%n%nPuede ejecutar nuevamente el programa de instalación en otra ocasión para completarla.%n%n¿Salir de la instalación?
+AboutSetupMenuItem=&Acerca de Instalar...
+AboutSetupTitle=Acerca de Instalar
+AboutSetupMessage=%1 versión %2%n%3%n%n%1 sitio Web:%n%4
+AboutSetupNote=
+TranslatorNote=Spanish translation maintained by Jorge Andres Brugger ([email protected])
+
+; *** Buttons
+ButtonBack=< &Atrás
+ButtonNext=&Siguiente >
+ButtonInstall=&Instalar
+ButtonOK=Aceptar
+ButtonCancel=Cancelar
+ButtonYes=&Sí
+ButtonYesToAll=Sí a &Todo
+ButtonNo=&No
+ButtonNoToAll=N&o a Todo
+ButtonFinish=&Finalizar
+ButtonBrowse=&Examinar...
+ButtonWizardBrowse=&Examinar...
+ButtonNewFolder=&Crear Nueva Carpeta
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Seleccione el Idioma de la Instalación
+SelectLanguageLabel=Seleccione el idioma a utilizar durante la instalación.
+
+; *** Common wizard text
+ClickNext=Haga clic en Siguiente para continuar o en Cancelar para salir de la instalación.
+BeveledLabel=
+BrowseDialogTitle=Buscar Carpeta
+BrowseDialogLabel=Seleccione una carpeta y luego haga clic en Aceptar.
+NewFolderName=Nueva Carpeta
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Bienvenido al asistente de instalación de [name]
+WelcomeLabel2=Este programa instalará [name/ver] en su sistema.%n%nSe recomienda cerrar todas las demás aplicaciones antes de continuar.
+
+; *** "Password" wizard page
+WizardPassword=Contraseña
+PasswordLabel1=Esta instalación está protegida por contraseña.
+PasswordLabel3=Por favor, introduzca la contraseña y haga clic en Siguiente para continuar. En las contraseñas se hace diferencia entre mayúsculas y minúsculas.
+PasswordEditLabel=&Contraseña:
+IncorrectPassword=La contraseña introducida no es correcta. Por favor, inténtelo nuevamente.
+
+; *** "License Agreement" wizard page
+WizardLicense=Acuerdo de Licencia
+LicenseLabel=Es importante que lea la siguiente información antes de continuar.
+LicenseLabel3=Por favor, lea el siguiente acuerdo de licencia. Debe aceptar las cláusulas de este acuerdo antes de continuar con la instalación.
+LicenseAccepted=A&cepto el acuerdo
+LicenseNotAccepted=&No acepto el acuerdo
+
+; *** "Information" wizard pages
+WizardInfoBefore=Información
+InfoBeforeLabel=Es importante que lea la siguiente información antes de continuar.
+InfoBeforeClickLabel=Cuando esté listo para continuar con la instalación, haga clic en Siguiente.
+WizardInfoAfter=Información
+InfoAfterLabel=Es importante que lea la siguiente información antes de continuar.
+InfoAfterClickLabel=Cuando esté listo para continuar, haga clic en Siguiente.
+
+; *** "User Information" wizard page
+WizardUserInfo=Información de Usuario
+UserInfoDesc=Por favor, introduzca sus datos.
+UserInfoName=Nombre de &Usuario:
+UserInfoOrg=&Organización:
+UserInfoSerial=Número de &Serie:
+UserInfoNameRequired=Debe introducir un nombre.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Seleccione la Carpeta de Destino
+SelectDirDesc=¿Dónde debe instalarse [name]?
+SelectDirLabel3=El programa instalará [name] en la siguiente carpeta.
+SelectDirBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta diferente, haga clic en Examinar.
+DiskSpaceGBLabel=Se requieren al menos [gb] GB de espacio libre en el disco.
+DiskSpaceMBLabel=Se requieren al menos [mb] MB de espacio libre en el disco.
+CannotInstallToNetworkDrive=El programa de instalación no puede realizar la instalación en una unidad de red.
+CannotInstallToUNCPath=El programa de instalación no puede realizar la instalación en una ruta de acceso UNC.
+InvalidPath=Debe introducir una ruta completa con la letra de la unidad; por ejemplo:%n%nC:\APP%n%no una ruta de acceso UNC de la siguiente forma:%n%n\\servidor\compartido
+InvalidDrive=La unidad o ruta de acceso UNC que seleccionó no existe o no es accesible. Por favor, seleccione otra.
+DiskSpaceWarningTitle=Espacio Insuficiente en Disco
+DiskSpaceWarning=La instalación requiere al menos %1 KB de espacio libre, pero la unidad seleccionada solo cuenta con %2 KB disponibles.%n%n¿Desea continuar de todas formas?
+DirNameTooLong=El nombre de la carpeta o la ruta son demasiado largos.
+InvalidDirName=El nombre de la carpeta no es válido.
+BadDirName32=Los nombres de carpetas no pueden incluir los siguientes caracteres:%n%n%1
+DirExistsTitle=La Carpeta Ya Existe
+DirExists=La carpeta:%n%n%1%n%nya existe. ¿Desea realizar la instalación en esa carpeta de todas formas?
+DirDoesntExistTitle=La Carpeta No Existe
+DirDoesntExist=La carpeta:%n%n%1%n%nno existe. ¿Desea crear esa carpeta?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Seleccione los Componentes
+SelectComponentsDesc=¿Qué componentes deben instalarse?
+SelectComponentsLabel2=Seleccione los componentes que desea instalar y desmarque los componentes que no desea instalar. Haga clic en Siguiente cuando esté listo para continuar.
+FullInstallation=Instalación Completa
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Instalación Compacta
+CustomInstallation=Instalación Personalizada
+NoUninstallWarningTitle=Componentes Encontrados
+NoUninstallWarning=El programa de instalación ha detectado que los siguientes componentes ya están instalados en su sistema:%n%n%1%n%nDesmarcar estos componentes no los desinstalará.%n%n¿Desea continuar de todos modos?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=La selección actual requiere al menos [gb] GB de espacio en disco.
+ComponentsDiskSpaceMBLabel=La selección actual requiere al menos [mb] MB de espacio en disco.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Seleccione las Tareas Adicionales
+SelectTasksDesc=¿Qué tareas adicionales deben realizarse?
+SelectTasksLabel2=Seleccione las tareas adicionales que desea que se realicen durante la instalación de [name] y haga clic en Siguiente.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Seleccione la Carpeta del Menú Inicio
+SelectStartMenuFolderDesc=¿Dónde deben colocarse los accesos directos del programa?
+SelectStartMenuFolderLabel3=El programa de instalación creará los accesos directos del programa en la siguiente carpeta del Menú Inicio.
+SelectStartMenuFolderBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta distinta, haga clic en Examinar.
+MustEnterGroupName=Debe proporcionar un nombre de carpeta.
+GroupNameTooLong=El nombre de la carpeta o la ruta son demasiado largos.
+InvalidGroupName=El nombre de la carpeta no es válido.
+BadGroupName=El nombre de la carpeta no puede incluir ninguno de los siguientes caracteres:%n%n%1
+NoProgramGroupCheck2=&No crear una carpeta en el Menú Inicio
+
+; *** "Ready to Install" wizard page
+WizardReady=Listo para Instalar
+ReadyLabel1=Ahora el programa está listo para iniciar la instalación de [name] en su sistema.
+ReadyLabel2a=Haga clic en Instalar para continuar con el proceso o haga clic en Atrás si desea revisar o cambiar alguna configuración.
+ReadyLabel2b=Haga clic en Instalar para continuar con el proceso.
+ReadyMemoUserInfo=Información del usuario:
+ReadyMemoDir=Carpeta de Destino:
+ReadyMemoType=Tipo de Instalación:
+ReadyMemoComponents=Componentes Seleccionados:
+ReadyMemoGroup=Carpeta del Menú Inicio:
+ReadyMemoTasks=Tareas Adicionales:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Descargando archivos adicionales...
+ButtonStopDownload=&Detener descarga
+StopDownload=¿Está seguiro que desea detener la descarga?
+ErrorDownloadAborted=Descarga cancelada
+ErrorDownloadFailed=Falló descarga: %1 %2
+ErrorDownloadSizeFailed=Falló obtención de tamaño: %1 %2
+ErrorFileHash1=Falló hash del archivo: %1
+ErrorFileHash2=Hash de archivo no válido: esperado %1, encontrado %2
+ErrorProgress=Progreso no válido: %1 de %2
+ErrorFileSize=Tamaño de archivo no válido: esperado %1, encontrado %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Preparándose para Instalar
+PreparingDesc=El programa de instalación está preparándose para instalar [name] en su sistema.
+PreviousInstallNotCompleted=La instalación/desinstalación previa de un programa no se completó. Deberá reiniciar el sistema para completar esa instalación.%n%nUna vez reiniciado el sistema, ejecute el programa de instalación nuevamente para completar la instalación de [name].
+CannotContinue=El programa de instalación no puede continuar. Por favor, presione Cancelar para salir.
+ApplicationsFound=Las siguientes aplicaciones están usando archivos que necesitan ser actualizados por el programa de instalación. Se recomienda que permita al programa de instalación cerrar automáticamente estas aplicaciones.
+ApplicationsFound2=Las siguientes aplicaciones están usando archivos que necesitan ser actualizados por el programa de instalación. Se recomienda que permita al programa de instalación cerrar automáticamente estas aplicaciones. Al completarse la instalación, el programa de instalación intentará reiniciar las aplicaciones.
+CloseApplications=&Cerrar automáticamente las aplicaciones
+DontCloseApplications=&No cerrar las aplicaciones
+ErrorCloseApplications=El programa de instalación no pudo cerrar de forma automática todas las aplicaciones. Se recomienda que, antes de continuar, cierre todas las aplicaciones que utilicen archivos que necesitan ser actualizados por el programa de instalación.
+PrepareToInstallNeedsRestart=El programa de instalación necesita reiniciar el sistema. Una vez que se haya reiniciado ejecute nuevamente el programa de instalación para completar la instalación de [name].%n%n¿Desea reiniciar el sistema ahora?
+
+; *** "Installing" wizard page
+WizardInstalling=Instalando
+InstallingLabel=Por favor, espere mientras se instala [name] en su sistema.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Completando la instalación de [name]
+FinishedLabelNoIcons=El programa completó la instalación de [name] en su sistema.
+FinishedLabel=El programa completó la instalación de [name] en su sistema. Puede ejecutar la aplicación utilizando los accesos directos creados.
+ClickFinish=Haga clic en Finalizar para salir del programa de instalación.
+FinishedRestartLabel=Para completar la instalación de [name], su sistema debe reiniciarse. ¿Desea reiniciarlo ahora?
+FinishedRestartMessage=Para completar la instalación de [name], su sistema debe reiniciarse.%n%n¿Desea reiniciarlo ahora?
+ShowReadmeCheck=Sí, deseo ver el archivo LÉAME
+YesRadio=&Sí, deseo reiniciar el sistema ahora
+NoRadio=&No, reiniciaré el sistema más tarde
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Ejecutar %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Ver %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=El Programa de Instalación Necesita el Siguiente Disco
+SelectDiskLabel2=Por favor, inserte el Disco %1 y haga clic en Aceptar.%n%nSi los archivos pueden ser hallados en una carpeta diferente a la indicada abajo, introduzca la ruta correcta o haga clic en Examinar.
+PathLabel=&Ruta:
+FileNotInDir2=El archivo "%1" no se ha podido hallar en "%2". Por favor, inserte el disco correcto o seleccione otra carpeta.
+SelectDirectoryLabel=Por favor, especifique la ubicación del siguiente disco.
+
+; *** Installation phase messages
+SetupAborted=La instalación no se ha completado.%n%nPor favor solucione el problema y ejecute nuevamente el programa de instalación.
+AbortRetryIgnoreSelectAction=Seleccione acción
+AbortRetryIgnoreRetry=&Reintentar
+AbortRetryIgnoreIgnore=&Ignorar el error y continuar
+AbortRetryIgnoreCancel=Cancelar instalación
+
+; *** Installation status messages
+StatusClosingApplications=Cerrando aplicaciones...
+StatusCreateDirs=Creando carpetas...
+StatusExtractFiles=Extrayendo archivos...
+StatusCreateIcons=Creando accesos directos...
+StatusCreateIniEntries=Creando entradas INI...
+StatusCreateRegistryEntries=Creando entradas de registro...
+StatusRegisterFiles=Registrando archivos...
+StatusSavingUninstall=Guardando información para desinstalar...
+StatusRunProgram=Terminando la instalación...
+StatusRestartingApplications=Reiniciando aplicaciones...
+StatusRollback=Deshaciendo cambios...
+
+; *** Misc. errors
+ErrorInternal2=Error interno: %1
+ErrorFunctionFailedNoCode=%1 falló
+ErrorFunctionFailed=%1 falló; código %2
+ErrorFunctionFailedWithMessage=%1 falló; código %2.%n%3
+ErrorExecutingProgram=Imposible ejecutar el archivo:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Error al abrir la clave del registro:%n%1\%2
+ErrorRegCreateKey=Error al crear la clave del registro:%n%1\%2
+ErrorRegWriteKey=Error al escribir la clave del registro:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Error al crear entrada INI en el archivo "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Omitir este archivo (no recomendado)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar el error y continuar (no recomendado)
+SourceIsCorrupted=El archivo de origen está dañado
+SourceDoesntExist=El archivo de origen "%1" no existe
+ExistingFileReadOnly2=El archivo existente no puede ser reemplazado debido a que está marcado como solo-lectura.
+ExistingFileReadOnlyRetry=&Elimine el atributo de solo-lectura y reintente
+ExistingFileReadOnlyKeepExisting=&Mantener el archivo existente
+ErrorReadingExistingDest=Ocurrió un error mientras se intentaba leer el archivo:
+FileExistsSelectAction=Seleccione acción
+FileExists2=El archivo ya existe.
+FileExistsOverwriteExisting=&Sobreescribir el archivo existente
+FileExistsKeepExisting=&Mantener el archivo existente
+FileExistsOverwriteOrKeepAll=&Hacer lo mismo para lo siguientes conflictos
+ExistingFileNewerSelectAction=Seleccione acción
+ExistingFileNewer2=El archivo existente es más reciente que el que se está tratando de instalar.
+ExistingFileNewerOverwriteExisting=&Sobreescribir el archivo existente
+ExistingFileNewerKeepExisting=&Mantener el archivo existente (recomendado)
+ExistingFileNewerOverwriteOrKeepAll=&Hacer lo mismo para lo siguientes conflictos
+ErrorChangingAttr=Ocurrió un error al intentar cambiar los atributos del archivo:
+ErrorCreatingTemp=Ocurrió un error al intentar crear un archivo en la carpeta de destino:
+ErrorReadingSource=Ocurrió un error al intentar leer el archivo de origen:
+ErrorCopying=Ocurrió un error al intentar copiar el archivo:
+ErrorReplacingExistingFile=Ocurrió un error al intentar reemplazar el archivo existente:
+ErrorRestartReplace=Falló reintento de reemplazar:
+ErrorRenamingTemp=Ocurrió un error al intentar renombrar un archivo en la carpeta de destino:
+ErrorRegisterServer=Imposible registrar el DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 falló con el código de salida %1
+ErrorRegisterTypeLib=Imposible registrar la librería de tipos: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bit
+UninstallDisplayNameMark64Bit=64-bit
+UninstallDisplayNameMarkAllUsers=Todos los usuarios
+UninstallDisplayNameMarkCurrentUser=Usuario actual
+
+; *** Post-installation errors
+ErrorOpeningReadme=Ocurrió un error al intentar abrir el archivo LÉAME.
+ErrorRestartingComputer=El programa de instalación no pudo reiniciar el equipo. Por favor, hágalo manualmente.
+
+; *** Uninstaller messages
+UninstallNotFound=El archivo "%1" no existe. Imposible desinstalar.
+UninstallOpenError=El archivo "%1" no pudo ser abierto. Imposible desinstalar
+UninstallUnsupportedVer=El archivo de registro para desinstalar "%1" está en un formato no reconocido por esta versión del desinstalador. Imposible desinstalar
+UninstallUnknownEntry=Se encontró una entrada desconocida (%1) en el registro de desinstalación
+ConfirmUninstall=¿Está seguro de que desea ejecutar el asistente de desinstalación de %1?
+UninstallOnlyOnWin64=Este programa solo puede ser desinstalado en Windows de 64-bits.
+OnlyAdminCanUninstall=Este programa solo puede ser desinstalado por un usuario con privilegios administrativos.
+UninstallStatusLabel=Por favor, espere mientras %1 es desinstalado de su sistema.
+UninstalledAll=%1 se desinstaló satisfactoriamente de su sistema.
+UninstalledMost=La desinstalación de %1 ha sido completada.%n%nAlgunos elementos no pudieron eliminarse, pero podrá eliminarlos manualmente si lo desea.
+UninstalledAndNeedsRestart=Para completar la desinstalación de %1, su sistema debe reiniciarse.%n%n¿Desea reiniciarlo ahora?
+UninstallDataCorrupted=El archivo "%1" está dañado. No puede desinstalarse
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=¿Eliminar Archivo Compartido?
+ConfirmDeleteSharedFile2=El sistema indica que el siguiente archivo compartido no es utilizado por ningún otro programa. ¿Desea eliminar este archivo compartido?%n%nSi elimina el archivo y hay programas que lo utilizan, esos programas podrían dejar de funcionar correctamente. Si no está seguro, elija No. Dejar el archivo en su sistema no producirá ningún daño.
+SharedFileNameLabel=Archivo:
+SharedFileLocationLabel=Ubicación:
+WizardUninstalling=Estado de la Desinstalación
+StatusUninstalling=Desinstalando %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Instalando %1.
+ShutdownBlockReasonUninstallingApp=Desinstalando %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 versión %2
+AdditionalIcons=Accesos directos adicionales:
+CreateDesktopIcon=Crear un acceso directo en el &escritorio
+CreateQuickLaunchIcon=Crear un acceso directo en &Inicio Rápido
+ProgramOnTheWeb=%1 en la Web
+UninstallProgram=Desinstalar %1
+LaunchProgram=Ejecutar %1
+AssocFileExtension=&Asociar %1 con la extensión de archivo %2
+AssocingFileExtension=Asociando %1 con la extensión de archivo %2...
+AutoStartProgramGroupDescription=Inicio:
+AutoStartProgram=Iniciar automáticamente %1
+AddonHostProgramNotFound=%1 no pudo ser localizado en la carpeta seleccionada.%n%n¿Desea continuar de todas formas?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Elige el modo de instalación
+SelectSetupInstallModeDesc=VCMI puede instalarse para todos los usuarios o solo para ti.
+SelectSetupInstallModeSubTitle=Selecciona el modo de instalación preferido:
+InstallForAllUsers=Instalar para todos los usuarios
+InstallForAllUsers1=Requiere privilegios administrativos
+InstallForMeOnly=Instalar solo para mí
+InstallForMeOnly1=Aparecerá una advertencia del firewall al iniciar el juego por primera vez
+InstallForMeOnly2=Los juegos en LAN no funcionarán si no se permite la regla del firewall
+SystemIntegration=Integración con el sistema
+CreateDesktopShortcuts=Crear accesos directos en el escritorio
+CreateStartMenuShortcuts=Crear accesos directos en el menú Inicio
+AssociateH3MFiles=Asociar archivos .h3m con el Editor de Mapas de VCMI
+AssociateVCMIMapFiles=Asociar archivos .vmap y .vcmp con el Editor de Mapas de VCMI
+VCMISettings=Configuración de VCMI
+AddFirewallRules=Añadir reglas de firewall para VCMI
+CopyH3Files=Copiar automáticamente los archivos necesarios de Heroes III a VCMI
+RunVCMILauncherAfterInstall=Iniciar el Launcher de VCMI
+ShortcutMapEditor=Editor de Mapas de VCMI
+ShortcutLauncher=Launcher de VCMI
+ShortcutWebPage=Sitio web oficial de VCMI
+ShortcutDiscord=Discord oficial de VCMI
+ShortcutLauncherComment=Iniciar el Launcher de VCMI
+ShortcutMapEditorComment=Abrir el Editor de Mapas de VCMI
+ShortcutWebPageComment=Visitar el sitio web oficial de VCMI
+ShortcutDiscordComment=Visitar el Discord oficial de VCMI
+DeleteUserData=Eliminar datos de usuario
+Uninstall=Desinstalar
+Warning=Advertencia
+VMAPDescription=Archivo de mapa de VCMI
+VCMPDescription=Archivo de campaña de VCMI
+H3MDescription=Archivo de mapa de Heroes 3

+ 559 - 0
CI/wininstaller/lang/Swedish.isl

@@ -0,0 +1,559 @@
+; *** Inno Setup version 6.1.0+ Swedish messages ***
+;
+; To download user-contributed translations of this file, go to:
+;   http://www.jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+;
+; Translated by [email protected] (Stefan Bodingh)
+;
+
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+
+
+[LangOptions]
+LanguageName=Svenska	
+LanguageID=$041D
+LanguageCodePage=1252
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+
+; *** Application titles
+
+
+[Messages]
+SetupAppTitle=Installationsprogram
+SetupWindowTitle=Installationsprogram för %1
+UninstallAppTitle=Avinstallation
+UninstallAppFullTitle=%1 Avinstallation
+
+; *** Misc. common
+
+
+InformationTitle=Information
+ConfirmTitle=Bekräfta
+ErrorTitle=Fel
+
+; *** SetupLdr messages
+
+
+SetupLdrStartupMessage=%1 kommer att installeras. Vill du fortsätta?
+LdrCannotCreateTemp=Kan inte skapa en temporär fil. Installationen avbryts
+LdrCannotExecTemp=Kan inte köra fil i temporär katalog. Installationen avbryts
+HelpTextNote=
+
+; *** Startup error messages
+
+
+LastErrorMessage=%1.%n%nFel %2: %3
+SetupFileMissing=Filen %1 saknas i installationskatalogen. Rätta till problemet eller hämta en ny kopia av programmet.
+SetupFileCorrupt=Installationsfilerna är felaktiga. Hämta en ny kopia av programmet
+SetupFileCorruptOrWrongVer=Installationsfilerna är felaktiga, eller stämmer ej överens med denna version av installationsprogrammet. Rätta till felet eller hämta en ny programkopia.
+InvalidParameter=En ogiltig parameter angavs på kommandoraden:%n%n%1
+SetupAlreadyRunning=Setup körs redan.
+WindowsVersionNotSupported=Det här programmet kan inte köras på din version av Windows. Se till att du använder rätt Windows-arkitektur (32-bitars eller 64-bitars) och rätt version av programmet.
+WindowsServicePackRequired=Programmet kräver %1 Service Pack %2 eller nyare.
+NotOnThisPlatform=Detta program kan ej köras på %1.
+OnlyOnThisPlatform=Detta program måste ha %1.
+OnlyOnTheseArchitectures=Detta program kan bara installeras på Windows versioner med följande processorarkitekturer:%n%n%1
+WinVersionTooLowError=Detta program kräver %1, version %2 eller senare.
+WinVersionTooHighError=Programmet kan inte installeras på %1 version %2 eller senare.
+AdminPrivilegesRequired=Du måste vara inloggad som administratör när du installerar detta program.
+PowerUserPrivilegesRequired=Du måste vara inloggad som administratör eller medlem av gruppen Privilegierade användare (Power Users) när du installerar  detta program.
+SetupAppRunningError=Installationsprogrammet har upptäckt att %1 är igång.%n%nAvsluta det angivna programmet nu. Klicka sedan på OK för att gå vidare, eller på Avbryt för att avsluta.
+UninstallAppRunningError=Avinstalleraren har upptäckt att %1 körs för tillfället.%n%nStäng all öppna instanser av det nu, klicka sedan på OK för att gå vidare, eller på Avbryt för att avsluta.
+PrivilegesRequiredOverrideTitle=Installationstyp
+PrivilegesRequiredOverrideInstruction=Välj installationstyp
+PrivilegesRequiredOverrideText1=%1 kan installeras för alla användare (kräver administratons-rättigheter), eller bara för dig.
+PrivilegesRequiredOverrideText2=%1 kan installeras bara för dig, eller för alla användare (kräver administratons-rättigheter).
+PrivilegesRequiredOverrideAllUsers=Installera för &alla användare
+PrivilegesRequiredOverrideAllUsersRecommended=Installera för &alla användare (rekommenderas)
+PrivilegesRequiredOverrideCurrentUser=Installera för &mig enbart
+PrivilegesRequiredOverrideCurrentUserRecommended=Installera för &mig enbart (rekommenderas)
+
+; *** Misc. errors
+
+
+ErrorCreatingDir=Kunde inte skapa katalogen "%1"
+ErrorTooManyFilesInDir=Kunde inte skapa en fil i katalogen "%1" därför att den innehåller för många filer
+
+; *** Setup common messages
+
+
+ExitSetupTitle=Avsluta installationen
+ExitSetupMessage=Installationen är inte färdig. Om du avslutar nu, kommer programmet inte att installeras.%n%nDu kan köra installationsprogrammet  vid ett senare tillfälle för att slutföra installationen.%n%nVill du avbryta installationen?
+AboutSetupMenuItem=&Om installationsprogrammet...
+AboutSetupTitle=Om installationsprogrammet
+AboutSetupMessage=%1 version %2%n%3%n%n%1 hemsida:%n%4
+AboutSetupNote=Svensk översättning är gjord av [email protected] 1999, 2002%n%nUppdatering till 3.0.2+ av [email protected], 4.+ av [email protected]
+TranslatorNote=
+
+; *** Buttons
+
+
+ButtonBack=< &Tillbaka
+ButtonNext=&Nästa >
+ButtonInstall=&Installera
+ButtonOK=OK
+ButtonCancel=Avbryt
+ButtonYes=&Ja
+ButtonYesToAll=Ja till &Allt
+ButtonNo=&Nej
+ButtonNoToAll=N&ej till allt
+ButtonFinish=&Slutför
+ButtonBrowse=&Bläddra...
+ButtonWizardBrowse=&Bläddra...
+ButtonNewFolder=Skapa ny katalog
+
+; *** "Select Language" dialog messages
+
+
+SelectLanguageTitle=Välj språk för installationen
+SelectLanguageLabel=Välj språk som skall användas under installationen:
+
+; *** Common wizard text
+
+
+ClickNext=Klicka på Nästa för att fortsätta eller på Avbryt för att avsluta installationen.
+BeveledLabel=
+BrowseDialogTitle=Välj katalog
+BrowseDialogLabel=Välj en katalog i listan nedan, klicka sedan på OK.
+NewFolderName=Ny katalog
+
+; *** "Welcome" wizard page
+
+
+WelcomeLabel1=Välkommen till installationsprogrammet för [name].
+WelcomeLabel2=Detta kommer att installera [name/ver] på din dator.%n%nDet rekommenderas att du avslutar alla andra program innan du fortsätter. Det förebygger konflikter under installationens gång.
+
+; *** "Password" wizard page
+
+
+WizardPassword=Lösenord
+PasswordLabel1=Denna installation är skyddad med lösenord.
+PasswordLabel3=Var god ange lösenordet, klicka sedan på Nästa för att fortsätta. Lösenord skiljer på versaler/gemener.
+PasswordEditLabel=&Lösenord:
+IncorrectPassword=Lösenordet du angav är inkorrekt. Försök igen.
+
+; *** "License Agreement" wizard page
+
+
+
+
+
+WizardLicense=Licensavtal
+LicenseLabel=Var god och läs följande viktiga information innan du fortsätter.
+LicenseLabel3=Var god och läs följande licensavtal. Du måste acceptera villkoren i avtalet innan du kan fortsätta med installationen.
+LicenseAccepted=Jag &accepterar avtalet
+LicenseNotAccepted=Jag accepterar &inte avtalet
+
+; *** "Information" wizard pages
+
+
+
+
+
+WizardInfoBefore=Information
+InfoBeforeLabel=Var god läs följande viktiga information innan du fortsätter.
+InfoBeforeClickLabel=När du är klar att fortsätta med installationen klickar du på Nästa.
+WizardInfoAfter=Information
+InfoAfterLabel=Var god läs följande viktiga information innan du fortsätter.
+InfoAfterClickLabel=När du är klar att fortsätta med installationen klickar du på Nästa.
+
+; *** "User Information" wizard page
+
+
+
+
+
+WizardUserInfo=Användarinformation
+UserInfoDesc=Var god och fyll i följande uppgifter.
+UserInfoName=&Namn:
+UserInfoOrg=&Organisation:
+UserInfoSerial=&Serienummer:
+UserInfoNameRequired=Du måste fylla i ett namn.
+
+; *** "Select Destination Directory" wizard page
+
+
+
+
+
+WizardSelectDir=Välj installationsplats
+SelectDirDesc=Var skall [name] installeras?
+SelectDirLabel3=Installationsprogrammet kommer att installera [name] i följande katalog
+SelectDirBrowseLabel=För att fortsätta klickar du på Nästa. Om du vill välja en annan katalog klickar du på Bläddra.
+DiskSpaceGBLabel=Programmet kräver minst [gb] MB hårddiskutrymme.
+DiskSpaceMBLabel=Programmet kräver minst [mb] MB hårddiskutrymme.
+CannotInstallToNetworkDrive=Setup kan inte installeras på nätverksdisk.
+CannotInstallToUNCPath=Setup kan inte installeras på UNC sökväg.
+InvalidPath=Du måste skriva en fullständig sökväg med enhetsbeteckning; till exempel:%n%nC:\Program%n%neller en UNC-sökväg i formatet:%n%n\\server\resurs
+InvalidDrive=Enheten du har valt finns inte eller är inte tillgänglig. Välj en annan.
+DiskSpaceWarningTitle=Ej tillräckligt med diskutrymme
+DiskSpaceWarning=Installationsprogrammet behöver åtminstone %1 KB ledigt diskutrymme för installationen, men den valda enheten har bara %2  KB tillgängligt.%n%nVill du fortsätta ändå?
+DirNameTooLong=Katalogens namn eller sökväg är för lång.
+InvalidDirName=Katalogen du har valt är inte tillgänglig.
+BadDirName32=Katalogens namn får ej innehålla något av följande tecken:%n%n%1
+DirExistsTitle=Katalogen finns
+DirExists=Katalogen:%n%n%1%n%nfinns redan. Vill du ändå fortsätta installationen till den valda katalogen?
+DirDoesntExistTitle=Katalogen finns inte
+DirDoesntExist=Katalogen:%n%n%1%n%nfinns inte. Vill du skapa den?
+
+; *** "Select Components" wizard page
+
+
+
+
+
+WizardSelectComponents=Välj komponenter
+SelectComponentsDesc=Vilka komponenter skall installeras?
+SelectComponentsLabel2=Välj de komponenter som du vill ska installeras; avmarkera de komponenter som du inte vill ha. Klicka sedan på Nästa när du är klar att  fortsätta.
+FullInstallation=Fullständig installation
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+
+
+
+
+
+CompactInstallation=Kompakt installation
+CustomInstallation=Anpassad installation
+NoUninstallWarningTitle=Komponenter finns
+NoUninstallWarning=Installationsprogrammet har upptäckt att följande komponenter redan finns installerade på din dator:%n%n%1%n%nAtt  avmarkera dessa komponenter kommer inte att avinstallera dom.%n%nVill du fortsätta ändå?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Aktuella val kräver minst [gb] GB diskutrymme.
+ComponentsDiskSpaceMBLabel=Aktuella val kräver minst [mb] MB diskutrymme.
+
+; *** "Select Additional Tasks" wizard page
+
+
+
+
+
+WizardSelectTasks=Välj extra uppgifter
+SelectTasksDesc=Vilka extra uppgifter skall utföras?
+SelectTasksLabel2=Markera ytterligare uppgifter att utföra vid installation av [name], tryck sedan på Nästa.
+
+; *** "Select Start Menu Folder" wizard page
+
+
+
+
+
+WizardSelectProgramGroup=Välj Startmenykatalogen
+SelectStartMenuFolderDesc=Var skall installationsprogrammet placera programmets genvägar?
+SelectStartMenuFolderLabel3=Installationsprogrammet kommer att skapa programmets genvägar i följande katalog.
+SelectStartMenuFolderBrowseLabel=För att fortsätta klickar du på Nästa. Om du vill välja en annan katalog, klickar du på Bläddra.
+MustEnterGroupName=Du måste ange en katalog.
+GroupNameTooLong=Katalogens namn eller sökväg är för lång.
+InvalidGroupName=Katalogen du har valt är inte tillgänglig.
+BadGroupName=Katalognamnet kan inte innehålla någon av följande tecken:%n%n%1
+NoProgramGroupCheck2=&Skapa ingen Startmenykatalog
+
+; *** "Ready to Install" wizard page
+
+
+
+
+
+WizardReady=Redo att installera
+ReadyLabel1=Installationsprogrammet är nu redo att installera [name] på din dator.
+ReadyLabel2a=Tryck på Installera om du vill fortsätta, eller på gå Tillbaka om du vill granska eller ändra på något.
+ReadyLabel2b=Välj Installera för att påbörja installationen.
+ReadyMemoUserInfo=Användarinformation:
+ReadyMemoDir=Installationsplats:
+ReadyMemoType=Installationstyp:
+ReadyMemoComponents=Valda komponenter:
+ReadyMemoGroup=Startmenykatalog:
+ReadyMemoTasks=Extra uppgifter:
+DownloadingLabel=Laddar ner ytterligare filer...
+ButtonStopDownload=&Stoppa nedladdning
+StopDownload=Är du säker på att du vill stoppa nedladdningen?
+ErrorDownloadAborted=Nedladdningen avbruten
+ErrorDownloadFailed=Nedladdningen misslyckades: %1 %2
+ErrorDownloadSizeFailed=Få storlek misslyckades: %1 %2
+ErrorFileHash1=Filhash misslyckades: %1
+ErrorFileHash2=Ogiltig filhash: förväntat %1, hittat %2
+ErrorProgress=Ogiltig framfart: %1 of %2
+ErrorFileSize=Ogiltig filstorlek: förväntad %1, hittad %2
+
+; *** "Preparing to Install" wizard page
+
+
+
+
+
+WizardPreparing=Förbereder installationen
+PreparingDesc=Installationsprogrammet förbereder installationen av [name] på din dator.
+PreviousInstallNotCompleted=Installationen/avinstallationen av ett tidigare program har inte slutförts. Du måste starta om datorn för att avsluta den installationen.%n%nEfter att ha startat om datorn kör du installationsprogrammet igen för att slutföra installationen av [name].
+CannotContinue=Installationsprogrammet kan inte fortsätta. Klicka på Avbryt för att avsluta.
+ApplicationsFound=Följande program använder filer som måste uppdateras av Setup. Vi rekommenderar att du låter Setup automatiskt stänga dessa program.
+ApplicationsFound2=Följande program använder filer som måste uppdateras av Setup. Vi rekommenderar att du låter Setup automatiskt stänga dessa program. Efter installationen kommer Setup att försöka starta programmen igen.
+CloseApplications=&Stäng programmen automatiskt
+DontCloseApplications=&Stäng inte programmen
+ErrorCloseApplications=Installationsprogrammet kunde inte stänga alla program. Innan installationen fortsätter rekommenderar vi att du stänger alla program som använder filer som Setup behöver uppdatera. 
+PrepareToInstallNeedsRestart=Installationen måste starta om din dator. När du har startat om datorn kör du Setup igen för att slutföra installationen av [name].%n%nVill du starta om nu?
+
+; *** "Installing" wizard page
+
+
+
+
+
+WizardInstalling=Installerar
+InstallingLabel=Vänta medan [name] installeras på din dator.
+
+; *** "Setup Completed" wizard page
+
+
+
+
+
+FinishedHeadingLabel=Avslutar installationen av [name]
+FinishedLabelNoIcons=[name] har nu installerats på din dator.
+FinishedLabel=[name] har nu installerats på din dator. Programmet kan startas genom att välja någon av ikonerna.
+ClickFinish=Välj Slutför för att avsluta installationen.
+FinishedRestartLabel=För att slutföra installationen av [name], måste datorn startas om. Vill du starta om nu?
+FinishedRestartMessage=För att slutföra installationen av [name], måste datorn startas om.%n%nVill du starta om datorn nu?
+ShowReadmeCheck=Ja, jag vill se filen LÄS MIG
+YesRadio=&Ja, jag vill starta om datorn nu
+NoRadio=&Nej, jag startar själv om datorn senare
+; used for example as 'Run MyProg.exe'
+
+
+
+
+
+RunEntryExec=Kör %1
+; used for example as 'View Readme.txt'
+
+
+
+
+
+RunEntryShellExec=Läs %1
+
+; *** "Setup Needs the Next Disk" stuff
+
+
+
+
+
+ChangeDiskTitle=Installationsprogrammet behöver nästa diskett
+SelectDiskLabel2=Var god sätt i diskett %1 och tryck OK.%n%nOm filerna kan hittas i en annan katalog än den som visas nedan, skriv in rätt sökväg eller välj Bläddra.
+PathLabel=&Sökväg:
+FileNotInDir2=Kunde inte hitta filen "%1" i "%2". Var god sätt i korrekt diskett eller välj en annan katalog.
+SelectDirectoryLabel=Var god ange sökvägen för nästa diskett.
+
+; *** Installation phase messages
+
+
+
+
+
+SetupAborted=Installationen slutfördes inte.%n%nVar god rätta till felet och kör installationen igen.
+AbortRetryIgnoreSelectAction=Välj åtgärd
+AbortRetryIgnoreRetry=&Försök igen
+AbortRetryIgnoreIgnore=&Ignorera felet och fortsätt
+AbortRetryIgnoreCancel=Avbryt installationen
+
+; *** Installation status messages
+
+
+
+
+
+StatusClosingApplications=Stänger program...
+StatusCreateDirs=Skapar kataloger...
+StatusExtractFiles=Packar upp filer...
+StatusCreateIcons=Skapar programikoner...
+StatusCreateIniEntries=Skriver INI-värden...
+StatusCreateRegistryEntries=Skriver register-värden...
+StatusRegisterFiles=Registrerar filer...
+StatusSavingUninstall=Sparar information för avinstallation...
+StatusRunProgram=Slutför installationen...
+StatusRestartingApplications=Startar om program...
+StatusRollback=Återställer ändringar...
+
+; *** Misc. errors
+
+
+
+
+
+ErrorInternal2=Internt fel: %1
+ErrorFunctionFailedNoCode=%1 misslyckades
+ErrorFunctionFailed=%1 misslyckades; kod %2
+ErrorFunctionFailedWithMessage=%1 misslyckades; kod %2.%n%3
+ErrorExecutingProgram=Kan inte köra filen:%n%1
+
+; *** Registry errors
+
+
+
+
+
+ErrorRegOpenKey=Fel vid öppning av registernyckel:%n%1\%2
+ErrorRegCreateKey=Kan ej skapa registernyckel:%n%1\%2
+ErrorRegWriteKey=Kan ej skriva till registernyckel:%n%1\%2
+
+; *** INI errors
+
+
+
+
+
+ErrorIniEntry=Kan inte skriva nytt INI-värde i filen "%1".
+FileAbortRetryIgnoreSkipNotRecommended=&Hoppa över den här filen (rekommenderas inte)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorera felet och fortsätt (rekommenderas inte)
+SourceIsCorrupted=Källfilen är felaktig
+SourceDoesntExist=Källfilen "%1" finns inte
+ExistingFileReadOnly2=Den befintliga filen kunde inte bytas ut eftersom den är markerad skrivskyddad.
+ExistingFileReadOnlyRetry=&Ta bort skrivskyddad attributet och försök igen
+ExistingFileReadOnlyKeepExisting=&Behåll den befintliga filen
+ErrorReadingExistingDest=Ett fel uppstod vid försök att läsa den befintliga filen:
+FileExistsSelectAction=Välj åtgärd
+FileExists2=Filen finns redan.
+FileExistsOverwriteExisting=&Skriv över den befintliga filen
+FileExistsKeepExisting=&Behåll befintlig fil
+FileExistsOverwriteOrKeepAll=&Gör detta för nästa konflikt
+ExistingFileNewerSelectAction=Välj åtgärd
+ExistingFileNewer2=Den befintliga filen är nyare än den som Setup försöker installera.
+ExistingFileNewerOverwriteExisting=&Skriv över den befintliga filen
+ExistingFileNewerKeepExisting=&Behåll befintlig fil (rekommenderas)
+ExistingFileNewerOverwriteOrKeepAll=&Gör detta för nästa konflikt
+ErrorChangingAttr=Ett fel uppstod vid försök att ändra attribut på den befintliga filen:
+ErrorCreatingTemp=Ett fel uppstod vid ett försök att skapa installationskatalogen:
+ErrorReadingSource=Ett fel uppstod vid ett försök att läsa källfilen:
+ErrorCopying=Ett fel uppstod vid kopiering av filen:
+ErrorReplacingExistingFile=Ett fel uppstod vid ett försök att ersätta den befintliga filen:
+ErrorRestartReplace=ÅterstartaErsätt misslyckades:
+ErrorRenamingTemp=Ett fel uppstod vid ett försök att byta namn på en fil i installationskatalogen:
+ErrorRegisterServer=Kunde inte registrera DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 misslyckades med felkod %1
+ErrorRegisterTypeLib=Kunde inte registrera typbibliotek: %1
+UninstallDisplayNameMark=%1 (%2)
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bit
+UninstallDisplayNameMark64Bit=64-bit
+UninstallDisplayNameMarkAllUsers=Alla användare
+UninstallDisplayNameMarkCurrentUser=Nuvarande användare
+
+; *** Post-installation errors
+
+
+
+
+
+ErrorOpeningReadme=Ett fel uppstod vid öppnandet av LÄS MIG-filen.
+ErrorRestartingComputer=Installationsprogrammet kunde inte starta om datorn. Var god gör det manuellt.
+
+; *** Uninstaller messages
+
+
+
+
+
+UninstallNotFound=Filen "%1" finns inte. Kan inte avinstallera.
+UninstallOpenError=Filen "%1" kan inte öppnas. Kan inte avinstallera.
+UninstallUnsupportedVer=Avinstallationsloggen "%1" är i ett format som denna version inte känner igen. Kan ej avinstallera
+UninstallUnknownEntry=En okänd rad (%1) hittades i avinstallationsloggen
+ConfirmUninstall=Är du säker på att du vill köra avinstallationsguiden för %1?
+UninstallOnlyOnWin64=Denna installation kan endast avinstalleras på en 64-bitarsversion av Windows.
+OnlyAdminCanUninstall=Denna installation kan endast avinstalleras av en användare med administrativa rättigheter.
+UninstallStatusLabel=Var god och vänta medan %1 tas bort från din dator.
+UninstalledAll=%1 är nu borttaget från din dator.
+UninstalledMost=Avinstallationen av %1 är nu klar.%n%nEn del filer/kataloger gick ej att ta bort. Dessa kan tas bort manuellt.
+UninstalledAndNeedsRestart=För att slutföra avinstallationen av %1 måste datorn startas om.%n%nVill du starta om nu?
+UninstallDataCorrupted=Filen "%1" är felaktig. Kan inte avinstallera
+
+; *** Uninstallation phase messages
+
+
+
+
+
+ConfirmDeleteSharedFileTitle=Ta bort delad fil?
+ConfirmDeleteSharedFile2=Systemet indikerar att följande delade fil inte längre används av några program. Vill du ta bort den delade filen?%n%n%1%n%nOm något program fortfarande använder denna fil och den raderas, kommer programmet kanske att sluta fungera. Om du är osäker, välj Nej. Att låta filen ligga kvar i systemet kommer inte att orsaka någon skada.
+SharedFileNameLabel=Filnamn:
+SharedFileLocationLabel=Plats:
+WizardUninstalling=Avinstallationsstatus
+StatusUninstalling=Avinstallerar %1...
+
+; *** Shutdown block reasons
+
+
+
+
+
+ShutdownBlockReasonInstallingApp=Installerar %1.
+ShutdownBlockReasonUninstallingApp=Avinstallerar %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+
+
+
+
+
+
+[CustomMessages]
+NameAndVersion=%1 version %2
+AdditionalIcons=Återstående ikoner:
+CreateDesktopIcon=Skapa en genväg på skrivbordet
+CreateQuickLaunchIcon=Skapa en genväg i Snabbstartfältet
+ProgramOnTheWeb=%1 på Webben
+UninstallProgram=Avinstallera %1
+LaunchProgram=Starta %1
+AssocFileExtension=Associera %1 med %2 filnamnstillägg
+AssocingFileExtension=Associerar %1 med %2 filnamnstillägg...
+AutoStartProgramGroupDescription=Autostart:
+AutoStartProgram=Starta automatiskt %1
+AddonHostProgramNotFound=%1 kunde inte hittas i katalogen du valde.%n%nVill du fortsätta ändå?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Välj installationsläge
+SelectSetupInstallModeDesc=VCMI kan installeras för alla användare eller bara för dig.
+SelectSetupInstallModeSubTitle=Välj önskat installationsläge:
+InstallForAllUsers=Installera för alla användare
+InstallForAllUsers1=Kräver administratörsbehörigheter
+InstallForMeOnly=Installera endast för mig
+InstallForMeOnly1=En brandväggsvarning visas första gången spelet startas
+InstallForMeOnly2=LAN-spel fungerar inte om brandväggsregeln inte kan godkännas
+SystemIntegration=Systemintegration
+CreateDesktopShortcuts=Skapa genvägar på skrivbordet
+CreateStartMenuShortcuts=Skapa genvägar i Start-menyn
+AssociateH3MFiles=Associera .h3m-filer med VCMI Kartredigeraren
+AssociateVCMIMapFiles=Associera .vmap- och .vcmp-filer med VCMI Kartredigeraren
+VCMISettings=VCMI-konfiguration
+AddFirewallRules=Lägg till brandväggsregler för VCMI
+CopyH3Files=Kopiera automatiskt nödvändiga Heroes III-filer till VCMI
+RunVCMILauncherAfterInstall=Starta VCMI Launcher
+ShortcutMapEditor=VCMI Kartredigerare
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=VCMI Webbplats
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=Starta VCMI Launcher
+ShortcutMapEditorComment=Öppna VCMI Kartredigerare
+ShortcutWebPageComment=Besök den officiella VCMI-webbplatsen
+ShortcutDiscordComment=Besök den officiella VCMI Discord
+DeleteUserData=Radera användardata
+Uninstall=Avinstallera
+Warning=Varning
+VMAPDescription=VCMI Kartfil
+VCMPDescription=VCMI Kampanjfil
+H3MDescription=Heroes 3 Kartfil

+ 417 - 0
CI/wininstaller/lang/Turkish.isl

@@ -0,0 +1,417 @@
+; *** Inno Setup version 6.1.0+ Turkish messages ***
+; Language	"Turkce" Turkish Translate by "Ceviren"	Kaya Zeren [email protected]
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=T<00FC>rk<00E7>e
+LanguageID=$041f
+LanguageCodePage=1254
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Uygulama başlıkları
+SetupAppTitle=Kurulum yardımcısı
+SetupWindowTitle=%1 - Kurulum yardımcısı
+UninstallAppTitle=Kaldırma yardımcısı
+UninstallAppFullTitle=%1 kaldırma yardımcısı
+
+; *** Çeşitli ortak metinler
+InformationTitle=Bilgi
+ConfirmTitle=Onay
+ErrorTitle=Hata
+
+; *** Kurulum yükleyici iletileri
+SetupLdrStartupMessage=%1 uygulaması kurulacak. İlerlemek istiyor musunuz?
+LdrCannotCreateTemp=Geçici dosya oluşturulamadığından kurulum iptal edildi
+LdrCannotExecTemp=Geçici klasördeki dosya çalıştırılamadığından kurulum iptal edildi
+HelpTextNote=
+
+; *** Başlangıç hata iletileri
+LastErrorMessage=%1.%n%nHata %2: %3
+SetupFileMissing=Kurulum klasöründe %1 dosyası eksik. Lütfen sorunu çözün ya da uygulamanın yeni bir kopyasıyla yeniden deneyin.
+SetupFileCorrupt=Kurulum dosyaları bozulmuş. Lütfen uygulamanın yeni bir kopyasıyla yeniden kurmayı deneyin.
+SetupFileCorruptOrWrongVer=Kurulum dosyaları bozulmuş ya da bu kurulum yardımcısı sürümü ile uyumlu değil. Lütfen sorunu çözün ya da uygulamanın yeni bir kopyasıyla yeniden kurmayı deneyin.
+InvalidParameter=Komut satırında geçersiz bir parametre yazılmış:%n%n%1
+SetupAlreadyRunning=Kurulum yardımcısı zaten çalışıyor.
+WindowsVersionNotSupported=Bu program, Windows sürümünüzde çalistirilamaz. Lütfen dogru Windows mimarisini (32-bit veya 64-bit) ve bu programa uygun sürümü kullandiginizdan emin olun.
+WindowsServicePackRequired=Bu uygulama, %1 hizmet paketi %2 ve üzerindeki sürümler ile çalışır.
+NotOnThisPlatform=Bu uygulama, %1 üzerinde çalışmaz.
+OnlyOnThisPlatform=Bu uygulama, %1 üzerinde çalıştırılmalıdır.
+OnlyOnTheseArchitectures=Bu uygulama, yalnızca şu işlemci mimarileri için tasarlanmış Windows sürümleriyle çalışır:%n%n%1
+WinVersionTooLowError=Bu uygulama için %1 sürüm %2 ya da üzeri gereklidir.
+WinVersionTooHighError=Bu uygulama, '%1' sürüm '%2' ya da üzerine kurulamaz.
+AdminPrivilegesRequired=Bu uygulamayı kurmak için Yönetici yetkileri olan bir kullanıcı ile oturum açılmış olmalıdır.
+PowerUserPrivilegesRequired=Bu uygulamayı kurarken, Yönetici ya da Güçlü Kullanıcılar grubundaki bir kullanıcı ile oturum açılmış olması gereklidir.
+SetupAppRunningError=Kurulum yardımcısı %1 uygulamasının çalışmakta olduğunu algıladı.%n%nLütfen uygulamanın çalışan tüm kopyalarını kapatıp, ilerlemek için Tamam, kurulum yardımcısından çıkmak için İptal üzerine tıklayın.
+UninstallAppRunningError=Kaldırma yardımcısı, %1 uygulamasının çalışmakta olduğunu algıladı.%n%nLütfen uygulamanın çalışan tüm kopyalarını kapatıp, ilerlemek için Tamam ya da kaldırma yardımcısından çıkmak için İptal üzerine tıklayın.
+
+; *** Başlangıç soruları
+PrivilegesRequiredOverrideTitle=Kurulum kipini seçin
+PrivilegesRequiredOverrideInstruction=Kurulum kipini seçin
+PrivilegesRequiredOverrideText1=%1 tüm kullanıcılar için (yönetici izinleri gerekir) ya da yalnızca sizin hesabınız için kurulabilir.
+PrivilegesRequiredOverrideText2=%1 yalnızca sizin hesabınız için ya da tüm kullanıcılar için (yönetici izinleri gerekir) kurulabilir.
+PrivilegesRequiredOverrideAllUsers=&Tüm kullanıcılar için kurulsun
+PrivilegesRequiredOverrideAllUsersRecommended=&Tüm kullanıcılar için kurulsun (önerilir)
+PrivilegesRequiredOverrideCurrentUser=&Yalnızca geçerli kullanıcı için kurulsun
+PrivilegesRequiredOverrideCurrentUserRecommended=&Yalnızca geçerli kullanıcı için kurulsun (önerilir)
+
+; *** Çeşitli hata metinleri
+ErrorCreatingDir=Kurulum yardımcısı "%1" klasörünü oluşturamadı.
+ErrorTooManyFilesInDir="%1" klasörü içinde çok sayıda dosya olduğundan bir dosya oluşturulamadı
+
+; *** Ortak kurulum iletileri
+ExitSetupTitle=Kurulum yardımcısından çık
+ExitSetupMessage=Kurulum tamamlanmadı. Şimdi çıkarsanız, uygulama kurulmayacak.%n%nKurulumu tamamlamak için istediğiniz zaman kurulum yardımcısını yeniden çalıştırabilirsiniz.%n%nKurulum yardımcısından çıkılsın mı?
+AboutSetupMenuItem=Kurulum h&akkında...
+AboutSetupTitle=Kurulum hakkında
+AboutSetupMessage=%1 %2 sürümü%n%3%n%n%1 ana sayfa:%n%4
+AboutSetupNote=
+TranslatorNote=
+
+; *** Düğmeler
+ButtonBack=< Ö&nceki
+ButtonNext=&Sonraki >
+ButtonInstall=&Kur
+ButtonOK=Tamam
+ButtonCancel=İptal
+ButtonYes=E&vet
+ButtonYesToAll=&Tümüne evet
+ButtonNo=&Hayır
+ButtonNoToAll=Tümüne ha&yır
+ButtonFinish=&Bitti
+ButtonBrowse=&Göz at...
+ButtonWizardBrowse=Göz a&t...
+ButtonNewFolder=Ye&ni klasör oluştur
+
+; *** "Kurulum dilini seçin" sayfası iletileri
+SelectLanguageTitle=Kurulum Yardımcısı dilini seçin
+SelectLanguageLabel=Kurulum süresince kullanılacak dili seçin.
+
+; *** Ortak metinler
+ClickNext=İlerlemek için Sonraki, çıkmak için İptal üzerine tıklayın.
+BeveledLabel=
+BrowseDialogTitle=Klasöre göz at
+BrowseDialogLabel=Aşağıdaki listeden bir klasör seçip, Tamam üzerine tıklayın.
+NewFolderName=Yeni klasör 
+
+; *** "Karşılama" sayfası
+WelcomeLabel1=[name] Kurulum yardımcısına hoş geldiniz.
+WelcomeLabel2=Bilgisayarınıza [name/ver] uygulaması kurulacak.%n%nİlerlemeden önce çalışan diğer tüm uygulamaları kapatmanız önerilir.
+
+; *** "Parola" sayfası
+WizardPassword=Parola
+PasswordLabel1=Bu kurulum parola korumalıdır.
+PasswordLabel3=Lütfen parolayı yazın ve ilerlemek için Sonraki üzerine tıklayın. Parolalar büyük küçük harflere duyarlıdır.
+PasswordEditLabel=&Parola:
+IncorrectPassword=Yazdığınız parola doğru değil. Lütfen yeniden deneyin.
+
+; *** "Lisans anlaşması" sayfası
+WizardLicense=Lisans anlaşması
+LicenseLabel=Lütfen ilerlemeden önce aşağıdaki önemli bilgileri okuyun.
+LicenseLabel3=Lütfen aşağıdaki lisans anlaşmasını okuyun. Uygulamayı kurmak için bu anlaşmayı kabul etmelisiniz.
+LicenseAccepted=Anlaşmayı kabul &ediyorum.
+LicenseNotAccepted=Anlaşmayı kabul et&miyorum.
+
+; *** "Bilgiler" sayfası
+WizardInfoBefore=Bilgiler
+InfoBeforeLabel=Lütfen ilerlemeden önce aşağıdaki önemli bilgileri okuyun.
+InfoBeforeClickLabel=Uygulamayı kurmaya hazır olduğunuzda Sonraki üzerine tıklayın.
+WizardInfoAfter=Bilgiler
+InfoAfterLabel=Lütfen ilerlemeden önce aşağıdaki önemli bilgileri okuyun.
+InfoAfterClickLabel=Uygulamayı kurmaya hazır olduğunuzda Sonraki üzerine tıklayın.
+
+; *** "Kullanıcı bilgileri" sayfası
+WizardUserInfo=Kullanıcı bilgileri
+UserInfoDesc=Lütfen bilgilerinizi yazın.
+UserInfoName=K&ullanıcı adı:
+UserInfoOrg=Ku&rum:
+UserInfoSerial=&Seri numarası:
+UserInfoNameRequired=Bir ad yazmalısınız.
+
+; *** "Kurulum konumunu seçin" sayfası
+WizardSelectDir=Kurulum konumunu seçin
+SelectDirDesc=[name] nereye kurulsun?
+SelectDirLabel3=[name] uygulaması şu klasöre kurulacak.
+SelectDirBrowseLabel=İlerlemek icin Sonraki üzerine tıklayın. Farklı bir klasör seçmek için Göz at üzerine tıklayın.
+DiskSpaceGBLabel=En az [gb] GB boş disk alanı gereklidir.
+DiskSpaceMBLabel=En az [mb] MB boş disk alanı gereklidir.
+CannotInstallToNetworkDrive=Uygulama bir ağ sürücüsü üzerine kurulamaz.
+CannotInstallToUNCPath=Uygulama bir UNC yolu üzerine (\\yol gibi) kurulamaz.
+InvalidPath=Sürücü adı ile tam yolu yazmalısınız. Örnek: %n%nC:\APP%n%n ya da şu şekilde bir UNC yolu:%n%n\\sunucu\paylaşım
+InvalidDrive=Sürücü ya da UNC paylaşımı yok ya da erişilemiyor. Lütfen başka bir tane seçin.
+DiskSpaceWarningTitle=Yeterli boş disk alanı yok
+DiskSpaceWarning=Kurulum için %1 KB boş alan gerekli, ancak seçilmiş sürücüde yalnızca %2 KB boş alan var.%n%nGene de ilerlemek istiyor musunuz?
+DirNameTooLong=Klasör adı ya da yol çok uzun.
+InvalidDirName=Klasör adı geçersiz.
+BadDirName32=Klasör adlarında şu karakterler bulunamaz:%n%n%1
+DirExistsTitle=Klasör zaten var
+DirExists=Klasör:%n%n%1%n%nzaten var. Kurulum için bu klasörü kullanmak ister misiniz?
+DirDoesntExistTitle=Klasör bulunamadı
+DirDoesntExist=Klasör:%n%n%1%n%nbulunamadı.Klasörün oluşturmasını ister misiniz?
+
+; *** "Bileşenleri seçin" sayfası
+WizardSelectComponents=Bileşenleri seçin
+SelectComponentsDesc=Hangi bileşenler kurulacak?
+SelectComponentsLabel2=Kurmak istediğiniz bileşenleri seçin; kurmak istemediğiniz bileşenlerin işaretini kaldırın. İlerlemeye hazır olduğunuzda Sonraki üzerine tıklayın.
+FullInstallation=Tam kurulum
+; Olabiliyorsa 'Compact' ifadesini kendi dilinizde 'Minimal' anlamında çevirmeyin
+CompactInstallation=Normal kurulum
+CustomInstallation=Özel kurulum
+NoUninstallWarningTitle=Bileşenler zaten var
+NoUninstallWarning=Şu bileşenlerin bilgisayarınızda zaten kurulu olduğu algılandı:%n%n%1%n%n Bu bileşenlerin işaretlerinin kaldırılması bileşenleri kaldırmaz.%n%nGene de ilerlemek istiyor musunuz?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Seçilmiş bileşenler için diskte en az [gb] GB boş alan bulunması gerekli.
+ComponentsDiskSpaceMBLabel=Seçilmiş bileşenler için diskte en az [mb] MB boş alan bulunması gerekli.
+
+; *** "Ek işlemleri seçin" sayfası
+WizardSelectTasks=Ek işlemleri seçin
+SelectTasksDesc=Başka hangi işlemler yapılsın?
+SelectTasksLabel2=[name] kurulumu sırasında yapılmasını istediğiniz ek işleri seçin ve Sonraki üzerine tıklayın.
+
+; *** "Başlat menüsü klasörünü seçin" sayfası
+WizardSelectProgramGroup=Başlat menüsü klasörünü seçin
+SelectStartMenuFolderDesc=Uygulamanın kısayolları nereye eklensin?
+SelectStartMenuFolderLabel3=Kurulum yardımcısı uygulama kısayollarını aşağıdaki Başlat menüsü klasörüne ekleyecek.
+SelectStartMenuFolderBrowseLabel=İlerlemek için Sonraki üzerine tıklayın. Farklı bir klasör seçmek için Göz at üzerine tıklayın.
+MustEnterGroupName=Bir klasör adı yazmalısınız.
+GroupNameTooLong=Klasör adı ya da yol çok uzun.
+InvalidGroupName=Klasör adı geçersiz.
+BadGroupName=Klasör adında şu karakterler bulunamaz:%n%n%1
+NoProgramGroupCheck2=Başlat menüsü klasörü &oluşturulmasın
+
+; *** "Kurulmaya hazır" sayfası
+WizardReady=Kurulmaya hazır
+ReadyLabel1=[name] bilgisayarınıza kurulmaya hazır.
+ReadyLabel2a=Kuruluma başlamak için Sonraki üzerine, ayarları gözden geçirip değiştirmek için Önceki üzerine tıklayın.
+ReadyLabel2b=Kuruluma başlamak için Sonraki üzerine tıklayın.
+ReadyMemoUserInfo=Kullanıcı bilgileri:
+ReadyMemoDir=Kurulum konumu:
+ReadyMemoType=Kurulum türü:
+ReadyMemoComponents=Seçilmiş bileşenler:
+ReadyMemoGroup=Başlat menüsü klasörü:
+ReadyMemoTasks=Ek işlemler:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Ek dosyalar indiriliyor...
+ButtonStopDownload=İndirmeyi &durdur
+StopDownload=İndirmeyi durdurmak istediğinize emin misiniz?
+ErrorDownloadAborted=İndirme durduruldu
+ErrorDownloadFailed=İndirilemedi: %1 %2
+ErrorDownloadSizeFailed=Boyut alınamadı: %1 %2
+ErrorFileHash1=Dosya karması doğrulanamadı: %1
+ErrorFileHash2=Dosya karması geçersiz: %1 olması gerekirken %2
+ErrorProgress=Adım geçersiz: %1 / %2
+ErrorFileSize=Dosya boyutu geçersiz: %1 olması gerekirken %2
+
+; *** "Kuruluma hazırlanılıyor" sayfası
+WizardPreparing=Kuruluma hazırlanılıyor
+PreparingDesc=[name] bilgisayarınıza kurulmaya hazırlanıyor.
+PreviousInstallNotCompleted=Önceki uygulama kurulumu ya da kaldırılması tamamlanmamış. Bu kurulumun tamamlanması için bilgisayarınızı yeniden başlatmalısınız.%n%nBilgisayarınızı yeniden başlattıktan sonra işlemi tamamlamak için [name] kurulum yardımcısını yeniden çalıştırın.
+CannotContinue=Kurulum yapılamadı. Çıkmak için İptal üzerine tıklayın.
+ApplicationsFound=Kurulum yardımcısı tarafından güncellenmesi gereken dosyalar, şu uygulamalar tarafından kullanıyor. Kurulum yardımcısının bu uygulamaları otomatik olarak kapatmasına izin vermeniz önerilir.
+ApplicationsFound2=Kurulum yardımcısı tarafından güncellenmesi gereken dosyalar, şu uygulamalar tarafından kullanıyor. Kurulum yardımcısının bu uygulamaları otomatik olarak kapatmasına izin vermeniz önerilir. Kurulum tamamlandıktan sonra, uygulamalar yeniden başlatılmaya çalışılacak.
+CloseApplications=&Uygulamalar kapatılsın
+DontCloseApplications=Uygulamalar &kapatılmasın
+ErrorCloseApplications=Kurulum yardımcısı uygulamaları kapatamadı. Kurulum yardımcısı tarafından güncellenmesi gereken dosyaları kullanan uygulamaları el ile kapatmanız önerilir.
+PrepareToInstallNeedsRestart=Kurulum için bilgisayarın yeniden başlatılması gerekiyor. Bilgisayarı yeniden başlattıktan sonra [name] kurulumunu tamamlamak için kurulum yardımcısını yeniden çalıştırın.%n%nBilgisayarı şimdi yeniden başlatmak ister misiniz?
+
+; *** "Kuruluyor" sayfası
+WizardInstalling=Kuruluyor
+InstallingLabel=Lütfen [name] bilgisayarınıza kurulurken bekleyin.
+
+; *** "Kurulum Tamamlandı" sayfası
+FinishedHeadingLabel=[name] kurulum yardımcısı tamamlanıyor
+FinishedLabelNoIcons=Bilgisayarınıza [name] kurulumu tamamlandı.
+FinishedLabel=Bilgisayarınıza [name] kurulumu tamamlandı. Simgeleri yüklemeyi seçtiyseniz, simgelere tıklayarak uygulamayı başlatabilirsiniz.
+ClickFinish=Kurulum yardımcısından çıkmak için Bitti üzerine tıklayın.
+FinishedRestartLabel=[name] kurulumunun tamamlanması için, bilgisayarınız yeniden başlatılmalı. Şimdi yeniden başlatmak ister misiniz?
+FinishedRestartMessage=[name] kurulumunun tamamlanması için, bilgisayarınız yeniden başlatılmalı.%n%nŞimdi yeniden başlatmak ister misiniz?
+ShowReadmeCheck=Evet README dosyası görüntülensin
+YesRadio=&Evet, bilgisayar şimdi yeniden başlatılsın
+NoRadio=&Hayır, bilgisayarı daha sonra yeniden başlatacağım
+; used for example as 'Run MyProg.exe'
+RunEntryExec=%1 çalıştırılsın
+; used for example as 'View Readme.txt'
+RunEntryShellExec=%1 görüntülensin
+
+; *** "Kurulum için sıradaki disk gerekli" iletileri
+ChangeDiskTitle=Kurulum yardımcısı sıradaki diske gerek duyuyor
+SelectDiskLabel2=Lütfen %1 numaralı diski takıp Tamam üzerine tıklayın.%n%nDiskteki dosyalar aşağıdakinden farklı bir klasörde bulunuyorsa, doğru yolu yazın ya da Göz at üzerine tıklayarak doğru klasörü seçin.
+PathLabel=&Yol:
+FileNotInDir2="%1" dosyası "%2" içinde bulunamadı. Lütfen doğru diski takın ya da başka bir klasör seçin.
+SelectDirectoryLabel=Lütfen sonraki diskin konumunu belirtin.
+
+; *** Kurulum aşaması iletileri
+SetupAborted=Kurulum tamamlanamadı.%n%nLütfen sorunu düzelterek kurulum yardımcısını yeniden çalıştırın.
+AbortRetryIgnoreSelectAction=Yapılacak işlemi seçin
+AbortRetryIgnoreRetry=&Yeniden denensin
+AbortRetryIgnoreIgnore=&Sorun yok sayılıp ilerlensin
+AbortRetryIgnoreCancel=Kurulum iptal edilsin
+
+; *** Kurulum durumu iletileri
+StatusClosingApplications=Uygulamalar kapatılıyor...
+StatusCreateDirs=Klasörler oluşturuluyor...
+StatusExtractFiles=Dosyalar ayıklanıyor...
+StatusCreateIcons=Kısayollar oluşturuluyor...
+StatusCreateIniEntries=INI kayıtları oluşturuluyor...
+StatusCreateRegistryEntries=Kayıt Defteri kayıtları oluşturuluyor...
+StatusRegisterFiles=Dosyalar kaydediliyor...
+StatusSavingUninstall=Kaldırma bilgileri kaydediliyor...
+StatusRunProgram=Kurulum tamamlanıyor...
+StatusRestartingApplications=Uygulamalar yeniden başlatılıyor...
+StatusRollback=Değişiklikler geri alınıyor...
+
+; *** Çeşitli hata iletileri
+ErrorInternal2=İç hata: %1
+ErrorFunctionFailedNoCode=%1 tamamlanamadı.
+ErrorFunctionFailed=%1 tamamlanamadı; kod %2
+ErrorFunctionFailedWithMessage=%1 tamamlanamadı; kod %2.%n%3
+ErrorExecutingProgram=Şu dosya yürütülemedi:%n%1
+
+; *** Kayıt defteri hataları
+ErrorRegOpenKey=Kayıt defteri anahtarı açılırken bir sorun çıktı:%n%1%2
+ErrorRegCreateKey=Kayıt defteri anahtarı eklenirken bir sorun çıktı:%n%1%2
+ErrorRegWriteKey=Kayıt defteri anahtarı yazılırken bir sorun çıktı:%n%1%2
+
+; *** INI hataları
+ErrorIniEntry="%1" dosyasına INI kaydı eklenirken bir sorun çıktı.
+
+; *** Dosya kopyalama hataları
+FileAbortRetryIgnoreSkipNotRecommended=&Bu dosya atlansın (önerilmez)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Sorun yok sayılıp ilerlensin (önerilmez)
+SourceIsCorrupted=Kaynak dosya bozulmuş
+SourceDoesntExist="%1" kaynak dosyası bulunamadı
+ExistingFileReadOnly2=Var olan dosya salt okunabilir olarak işaretlenmiş olduğundan üzerine yazılamadı.
+ExistingFileReadOnlyRetry=&Salt okunur işareti kaldırılıp yeniden denensin
+ExistingFileReadOnlyKeepExisting=&Var olan dosya korunsun
+ErrorReadingExistingDest=Var olan dosya okunmaya çalışılırken bir sorun çıktı.
+FileExistsSelectAction=Yapılacak işlemi seçin
+FileExists2=Dosya zaten var.
+FileExistsOverwriteExisting=&Var olan dosyanın üzerine yazılsın
+FileExistsKeepExisting=Var &olan dosya korunsun
+FileExistsOverwriteOrKeepAll=&Sonraki çakışmalarda da bu işlem yapılsın
+ExistingFileNewerSelectAction=Yapılacak işlemi seçin
+ExistingFileNewer2=Var olan dosya, kurulum yardımcısı tarafından yazılmaya çalışılandan daha yeni.
+ExistingFileNewerOverwriteExisting=&Var olan dosyanın üzerine yazılsın
+ExistingFileNewerKeepExisting=Var &olan dosya korunsun (önerilir)
+ExistingFileNewerOverwriteOrKeepAll=&Sonraki çakışmalarda bu işlem yapılsın
+ErrorChangingAttr=Var olan dosyanın öznitelikleri değiştirilirken bir sorun çıktı:
+ErrorCreatingTemp=Kurulum klasöründe bir dosya oluşturulurken sorun çıktı:
+ErrorReadingSource=Kaynak dosya okunurken sorun çıktı:
+ErrorCopying=Dosya kopyalanırken sorun çıktı:
+ErrorReplacingExistingFile=Var olan dosya değiştirilirken sorun çıktı:
+ErrorRestartReplace=Yeniden başlatmada üzerine yazılamadı:
+ErrorRenamingTemp=Kurulum klasöründeki bir dosyanın adı değiştirilirken sorun çıktı:
+ErrorRegisterServer=DLL/OCX kayıt edilemedi: %1
+ErrorRegSvr32Failed=RegSvr32 işlemi şu kod ile tamamlanamadı: %1
+ErrorRegisterTypeLib=Tür kitaplığı kayıt defterine eklenemedi: %1
+
+; *** Kaldırma sırasında görüntülenecek ad işaretleri
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32 bit
+UninstallDisplayNameMark64Bit=64 bit
+UninstallDisplayNameMarkAllUsers=Tüm kullanıcılar
+UninstallDisplayNameMarkCurrentUser=Geçerli kullanıcı
+
+; *** Kurulum sonrası hataları
+ErrorOpeningReadme=README dosyası açılırken sorun çıktı.
+ErrorRestartingComputer=Kurulum yardımcısı bilgisayarınızı yeniden başlatamıyor. Lütfen bilgisayarınızı yeniden başlatın.
+
+; *** Kaldırma yardımcısı iletileri
+UninstallNotFound="%1" dosyası bulunamadı. Uygulama kaldırılamıyor.
+UninstallOpenError="%1" dosyası açılamadı. Uygulama kaldırılamıyor.
+UninstallUnsupportedVer="%1" uygulama kaldırma günlük dosyasının biçimi, bu kaldırma yardımcısı sürümü tarafından anlaşılamadı. Uygulama kaldırılamıyor.
+UninstallUnknownEntry=Kaldırma günlüğünde bilinmeyen bir kayıt (%1) bulundu.
+ConfirmUninstall=%1 kaldirma sihirbazini çalistirmak istediginizden emin misiniz?
+UninstallOnlyOnWin64=Bu kurulum yalnızca 64 bit Windows üzerinden kaldırılabilir.
+OnlyAdminCanUninstall=Bu kurulum yalnızca yönetici yetkileri olan bir kullanıcı tarafından kaldırılabilir.
+UninstallStatusLabel=Lütfen %1 uygulaması bilgisayarınızdan kaldırılırken bekleyin.
+UninstalledAll=%1 uygulaması bilgisayarınızdan kaldırıldı.
+UninstalledMost=%1 uygulaması kaldırıldı.%n%nBazı bileşenler kaldırılamadı. Bunları el ile silebilirsiniz.
+UninstalledAndNeedsRestart=%1 kaldırma işleminin tamamlanması için bilgisayarınızın yeniden başlatılması gerekli.%n%nŞimdi yeniden başlatmak ister misiniz?
+UninstallDataCorrupted="%1" dosyası bozulmuş. Kaldırılamıyor.
+
+; *** Kaldırma aşaması iletileri
+ConfirmDeleteSharedFileTitle=Paylaşılan dosya silinsin mi?
+ConfirmDeleteSharedFile2=Sisteme göre, paylaşılan şu dosya başka bir uygulama tarafından kullanılmıyor ve kaldırılabilir. Bu paylaşılmış dosyayı silmek ister misiniz?%n%nBu dosya, başka herhangi bir uygulama tarafından kullanılıyor ise, silindiğinde diğer uygulama düzgün çalışmayabilir. Emin değilseniz Hayır üzerine tıklayın. Dosyayı sisteminizde bırakmanın bir zararı olmaz.
+SharedFileNameLabel=Dosya adı:
+SharedFileLocationLabel=Konum:
+WizardUninstalling=Kaldırma durumu
+StatusUninstalling=%1 kaldırılıyor...
+
+; *** Kapatmayı engelleme nedenleri
+ShutdownBlockReasonInstallingApp=%1 kuruluyor.
+ShutdownBlockReasonUninstallingApp=%1 kaldırılıyor.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 %2 sürümü
+AdditionalIcons=Ek simgeler:
+CreateDesktopIcon=Masaüstü simg&esi oluşturulsun
+CreateQuickLaunchIcon=Hızlı başlat simgesi &oluşturulsun
+ProgramOnTheWeb=%1 sitesi
+UninstallProgram=%1 uygulamasını kaldır
+LaunchProgram=%1 uygulamasını çalıştır
+AssocFileExtension=%1 &uygulaması ile %2 dosya uzantısı ilişkilendirilsin
+AssocingFileExtension=%1 uygulaması ile %2 dosya uzantısı ilişkilendiriliyor...
+AutoStartProgramGroupDescription=Başlangıç:
+AutoStartProgram=%1 otomatik olarak başlatılsın
+AddonHostProgramNotFound=%1 seçtiğiniz klasörde bulunamadı.%n%nYine de ilerlemek istiyor musunuz?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Kurulum Modunu Seçin
+SelectSetupInstallModeDesc=VCMI tüm kullanicilar için veya sadece sizin için kurulabilir.
+SelectSetupInstallModeSubTitle=Tercih ettiginiz kurulum modunu seçin:
+InstallForAllUsers=Tüm kullanicilar için yükle
+InstallForAllUsers1=Yönetici yetkileri gerektirir
+InstallForMeOnly=Sadece benim için yükle
+InstallForMeOnly1=Oyunu ilk kez baslattiginizda bir güvenlik duvari uyarisi görüntülenecek
+InstallForMeOnly2=Güvenlik duvari kuralina izin verilmezse LAN oyunlari çalismaz
+SystemIntegration=Sistem Entegrasyonu
+CreateDesktopShortcuts=Masaüstü kisayollari olustur
+CreateStartMenuShortcuts=Baslat Menüsüne kisayollar ekle
+AssociateH3MFiles=.h3m dosyalarini VCMI Harita Editörü ile iliskilendir
+AssociateVCMIMapFiles=.vmap ve .vcmp dosyalarini VCMI Harita Editörü ile iliskilendir
+VCMISettings=VCMI Ayarlari
+AddFirewallRules=VCMI için güvenlik duvari kurallari ekle
+CopyH3Files=Gerekli Heroes III dosyalarini VCMI'ya otomatik olarak kopyala
+RunVCMILauncherAfterInstall=VCMI Baslaticiyi Çalistir
+ShortcutMapEditor=VCMI Harita Editörü
+ShortcutLauncher=VCMI Baslatici
+ShortcutWebPage=VCMI Web Sitesi
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=VCMI Baslaticiyi Çalistir
+ShortcutMapEditorComment=VCMI Harita Editörünü Aç
+ShortcutWebPageComment=VCMI Resmi Web Sitesini Ziyaret Et
+ShortcutDiscordComment=VCMI Resmi Discord Sunucusunu Ziyaret Et
+DeleteUserData=Kullanici verilerini sil
+Uninstall=Kaldir
+Warning=Uyari
+VMAPDescription=VCMI Harita Dosyasi
+VCMPDescription=VCMI Kampanya Dosyasi
+H3MDescription=Heroes 3 Harita Dosyasi

+ 418 - 0
CI/wininstaller/lang/Ukrainian.isl

@@ -0,0 +1,418 @@
+; *** Inno Setup version 6.1.0+ Ukrainian messages ***
+; Author: Dmytro Onyshchuk
+; E-Mail: [email protected]
+; Please report all spelling/grammar errors, and observations.
+; Version 2020.08.04
+
+; *** Український переклад Inno Setup для версії 6.1.0 та вище***
+; Автор перекладу: Дмитро Онищук
+; E-Mail: [email protected]
+; Будь ласка, повідомляйте про всі знайдені помилки та зауваження.
+; Версія перекладу 2020.08.04
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430>
+LanguageID=$0422
+LanguageCodePage=1251
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Заголовки програми
+SetupAppTitle=Встановлення
+SetupWindowTitle=Встановлення — %1
+UninstallAppTitle=Видалення
+UninstallAppFullTitle=Видалення — %1
+
+; *** Misc. common
+InformationTitle=Інформація
+ConfirmTitle=Підтвердження
+ErrorTitle=Помилка
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Ця програма встановить %1 на ваш комп'ютер, бажаєте продовжити?
+LdrCannotCreateTemp=Неможливо створити тимчасовий файл. Встановлення перервано
+LdrCannotExecTemp=Неможливо виконати файл в тимчасовій папці. Встановлення перервано
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nПомилка %2: %3
+SetupFileMissing=Файл %1 відсутній в папці встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
+SetupFileCorrupt=Файли встановлення пошкоджені. Будь ласка, отримайте нову копію програми.
+SetupFileCorruptOrWrongVer=Файли встановлення пошкоджені або несумісні з цією версією програми встановлення. Будь ласка, виправте цю помилку або отримайте нову копію програми.
+InvalidParameter=Командний рядок містить недопустимий параметр:%n%n%1
+SetupAlreadyRunning=Програма встановлення вже запущена.
+WindowsVersionNotSupported=Ця програма не може працювати на вашій версії Windows. Переконайтеся, що ви використовуєте правильну архітектуру Windows (32-розрядну або 64-розрядну) та відповідну версію програми.
+WindowsServicePackRequired=Ця програма вимагає %1 Service Pack %2 або більш пізню версію.
+NotOnThisPlatform=Ця програма не буде працювати під %1.
+OnlyOnThisPlatform=Ця програма повинна бути відкрита під %1.
+OnlyOnTheseArchitectures=Ця програма може бути встановлена лише на комп'ютерах під управлінням Windows для наступних архітектур процесорів:%n%n%1
+WinVersionTooLowError=Ця програма вимагає %1 версії %2 або більш пізню версію.
+WinVersionTooHighError=Ця програма не може бути встановлена на %1 версії %2 або більш пізню версію.
+AdminPrivilegesRequired=Щоб встановити цю програму ви повинні увійти до системи як адміністратор.
+PowerUserPrivilegesRequired=Щоб встановити цю програму ви повинні увійти до системи як адміністратор або як член групи «Досвідчені користувачі».
+SetupAppRunningError=Виявлено, що %1 вже відкрита.%n%nБудь ласка, закрийте всі копії програми та натисніть «OK» для продовження, або «Скасувати» для виходу.
+UninstallAppRunningError=Виявлено, що %1 вже відкрита.%n%nБудь ласка, закрийте всі копії програми та натисніть «OK» для продовження, або «Скасувати» для виходу.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Вибір режиму встановлення
+PrivilegesRequiredOverrideInstruction=Виберіть режим встановлення
+PrivilegesRequiredOverrideText1=%1 може бути встановлено для всіх користувачів (потребує права адміністратора), або тільки для вас.
+PrivilegesRequiredOverrideText2=%1 може бути встановлено тільки для вас, або для всіх користувачів (потребує права адміністратора).
+PrivilegesRequiredOverrideAllUsers=Встановити для &всіх користувачів
+PrivilegesRequiredOverrideAllUsersRecommended=Встановити для &всіх користувачів (рекомендується)
+PrivilegesRequiredOverrideCurrentUser=Встановити тільки для мене
+PrivilegesRequiredOverrideCurrentUserRecommended=Встановити тільки для &мене (рекомендується)
+
+; *** Різні помилки
+ErrorCreatingDir=Програмі встановлення не вдалося створити папку "%1"
+ErrorTooManyFilesInDir=Програмі встановлення не вдалося створити файл в папці "%1", тому що в ньому занадто багато файлів
+
+; *** Спільні повідомлення програми
+ExitSetupTitle=Вихід з програми встановлення
+ExitSetupMessage=Встановлення не завершено. Якщо ви вийдете зараз, програму не буде встановлено.%n%nВи можете відкрити програму встановлення в іншим часом.%n%nВийти з програми встановлення?
+AboutSetupMenuItem=&Про програму встановлення...
+AboutSetupTitle=Про програму встановлення
+AboutSetupMessage=%1 версія %2%n%3%n%n%1 домашня сторінка:%n%4
+AboutSetupNote=
+TranslatorNote=Ukrainian translation by Dmytro Onyshchuk
+
+; *** Кнопки
+ButtonBack=< &Назад
+ButtonNext=&Далі >
+ButtonInstall=&Встановити
+ButtonOK=OK
+ButtonCancel=Скасувати
+ButtonYes=&Так
+ButtonYesToAll=Так для &Всіх
+ButtonNo=&Ні
+ButtonNoToAll=Н&і для Всіх
+ButtonFinish=&Готово
+ButtonBrowse=&Огляд...
+ButtonWizardBrowse=О&гляд...
+ButtonNewFolder=&Створити папку
+
+; *** Діалогове повідомлення "Вибір мови"
+SelectLanguageTitle=Виберіть мову встановлення
+SelectLanguageLabel=Виберіть мову, яка буде використовуватися під час встановлення.
+
+; *** Спільний тест програми
+ClickNext=Натисніть «Далі», щоб продовжити, або «Скасувати» для виходу з програми встановлення.
+BeveledLabel=
+BrowseDialogTitle=Огляд папок
+BrowseDialogLabel=Виберіть папку зі списку та натисніть «ОК».
+NewFolderName=Нова папка
+
+; *** Сторінка "Привітання"
+WelcomeLabel1=Ласкаво просимо до програми встановлення [name].
+WelcomeLabel2=Ця програма встановить [name/ver] на ваш комп’ютер.%n%nРекомендується закрити всі інші програми перед продовженням.
+
+; *** Сторінка "Пароль"
+WizardPassword=Пароль
+PasswordLabel1=Ця програма встановлення захищена паролем.
+PasswordLabel3=Будь ласка, введіть пароль та натисніть «Далі», щоб продовжити. Пароль чутливий до регістру.
+PasswordEditLabel=&Пароль:
+IncorrectPassword=Ви ввели неправильний пароль. Будь ласка, спробуйте ще раз.
+
+; *** Сторінка "Ліцензійна угода"
+WizardLicense=Ліцензійна угода
+LicenseLabel=Будь ласка, прочитайте ліцензійну угоду.
+LicenseLabel3=Будь ласка, прочитайте ліцензійну угоду. Ви повинні прийняти умови цієї угоди, перш ніж продовжити встановлення.
+LicenseAccepted=Я &приймаю умови угоди
+LicenseNotAccepted=Я &не приймаю умови угоди
+
+; *** Сторінка "Інформація"
+WizardInfoBefore=Інформація
+InfoBeforeLabel=Будь ласка, прочитайте наступну важливу інформацію, перш ніж продовжити.
+InfoBeforeClickLabel=Якщо ви готові продовжити встановлення, натисніть «Далі».
+WizardInfoAfter=Інформація
+InfoAfterLabel=Будь ласка, прочитайте наступну важливу інформацію, перш ніж продовжити.
+InfoAfterClickLabel=Якщо ви готові продовжити встановлення, натисніть «Далі».
+
+; *** Сторінка "Інформація про користувача"
+WizardUserInfo=Інформація про користувача
+UserInfoDesc=Будь ласка, введіть дані про себе.
+UserInfoName=&Ім’я користувача:
+UserInfoOrg=&Організація:
+UserInfoSerial=&Серійний номер:
+UserInfoNameRequired=Ви повинні ввести ім'я.
+
+; *** Сторінка "Вибір шляху встановлення"
+WizardSelectDir=Вибір шляху встановлення
+SelectDirDesc=Куди ви бажаєте встановити [name]?
+SelectDirLabel3=Програма встановить [name] у наступну папку.
+SelectDirBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу папку, натисніть «Огляд».
+DiskSpaceGBLabel=Необхідно як мінімум [gb] Гб вільного дискового простору.
+DiskSpaceMBLabel=Необхідно як мінімум [mb] Mб вільного дискового простору.
+CannotInstallToNetworkDrive=Встановлення не може проводитися на мережевий диск.
+CannotInstallToUNCPath=Встановлення не може проводитися по мережевому шляху.
+InvalidPath=Ви повинні вказати повний шлях з буквою диску, наприклад:%n%nC:\APP%n%nабо в форматі UNC:%n%n\\сервер\ресурс
+InvalidDrive=Обраний Вами диск чи мережевий шлях не існує, або не доступний. Будь ласка, виберіть інший.
+DiskSpaceWarningTitle=Недостатньо дискового простору
+DiskSpaceWarning=Для встановлення необхідно як мінімум %1 Кб вільного простору, а на вибраному диску доступно лише %2 Кб.%n%nВи все одно бажаєте продовжити?
+DirNameTooLong=Ім'я папки або шлях до неї перевищують допустиму довжину.
+InvalidDirName=Вказане ім’я папки недопустиме.
+BadDirName32=Ім'я папки не може включати наступні символи:%n%n%1
+DirExistsTitle=Папка існує
+DirExists=Папка:%n%n%1%n%nвже існує. Ви все одно бажаєте встановити в цю папку?
+DirDoesntExistTitle=Папка не існує
+DirDoesntExist=Папка:%n%n%1%n%nне існує. Ви бажаєте створити її?
+
+; *** Сторінка "Вибір компонентів"
+WizardSelectComponents=Вибір компонентів
+SelectComponentsDesc=Які компоненти ви бажаєте встановити?
+SelectComponentsLabel2=Виберіть компоненти які ви бажаєте встановити; зніміть відмітку з компонентів які ви не бажаєте встановлювати. Натисніть «Далі», щоб продовжити.
+FullInstallation=Повне встановлення
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Компактне встановлення
+CustomInstallation=Вибіркове встановлення
+NoUninstallWarningTitle=Компоненти існують
+NoUninstallWarning=Виявлено, що наступні компоненти вже встановленні на вашому комп’ютері:%n%n%1%n%nВідміна вибору цих компонентів не видалить їх.%n%nВи бажаєте продовжити?
+ComponentSize1=%1 Kб
+ComponentSize2=%1 Mб
+ComponentsDiskSpaceGBLabel=Даний вибір вимагає як мінімум [gb] Гб дискового простору.
+ComponentsDiskSpaceMBLabel=Даний вибір вимагає як мінімум [mb] Mб дискового простору.
+
+; *** Сторінка "Вибір додаткових завдань"
+WizardSelectTasks=Вибір додаткових завдань
+SelectTasksDesc=Які додаткові завдання ви бажаєте виконати?
+SelectTasksLabel2=Виберіть додаткові завдання які програма встановлення [name] повинна виконати, потім натисніть «Далі».
+
+; *** Сторінка "Вибір папки в меню «Пуск»"
+WizardSelectProgramGroup=Вибір папки в меню «Пуск»
+SelectStartMenuFolderDesc=Де ви бажаєте створити ярлики?
+SelectStartMenuFolderLabel3=Програма встановлення створить ярлики у наступній папці меню «Пуск».
+SelectStartMenuFolderBrowseLabel=Натисніть «Далі», щоб продовжити. Якщо ви бажаєте вибрати іншу папку, натисніть «Огляд».
+MustEnterGroupName=Ви повинні ввести ім'я папки.
+GroupNameTooLong=Ім’я папки або шлях до неї перевищують допустиму довжину.
+InvalidGroupName=Вказане ім’я папки недопустиме.
+BadGroupName=Ім'я папки не може включати наступні символи:%n%n%1
+NoProgramGroupCheck2=&Не створювати папку в меню «Пуск»
+
+; *** Сторінка "Усе готово до встановлення"
+WizardReady=Усе готово до встановлення
+ReadyLabel1=Програма готова розпочати встановлення [name] на ваш комп’ютер.
+ReadyLabel2a=Натисніть «Встановити» для продовження встановлення, або «Назад», якщо ви бажаєте переглянути або змінити налаштування встановлення.
+ReadyLabel2b=Натисніть «Встановити» для продовження.
+ReadyMemoUserInfo=Дані про користувача:
+ReadyMemoDir=Шлях встановлення:
+ReadyMemoType=Тип встановлення:
+ReadyMemoComponents=Вибрані компоненти:
+ReadyMemoGroup=Папка в меню «Пуск»:
+ReadyMemoTasks=Додаткові завдання:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Завантаження додаткових файлів...
+ButtonStopDownload=&Перервати завантаження
+StopDownload=Ви дійсно бажаєте перервати завантаження?
+ErrorDownloadAborted=Завантаження перервано
+ErrorDownloadFailed=Помилка завантаження: %1 %2
+ErrorDownloadSizeFailed=Помилка отримання розміру: %1 %2
+ErrorFileHash1=Помилка хешу файлу: %1
+ErrorFileHash2=Невірний хеш файлу: очікувався %1, отриманий %2
+ErrorProgress=Помилка виконання: %1 з %2
+ErrorFileSize=Невірний розмір файлу: очікувався %1, отриманий %2
+
+; *** Сторінка "Підготовка до встановлення"
+WizardPreparing=Підготовка до встановлення
+PreparingDesc=Програма встановлення готується до встановлення [name] на ваш комп’ютер.
+PreviousInstallNotCompleted=Встановлення або видалення попередньої програми не було завершено. Вам потрібно перезавантажити ваш комп’ютер для завершення минулого встановлення.%n%nПісля перезавантаження відкрийте програму встановлення знову, щоб завершити встановлення [name].
+CannotContinue=Встановлення неможливо продовжити. Будь ласка, натисніть «Скасувати» для виходу.
+ApplicationsFound=Наступні програми використовують файли, які повинні бути оновлені програмою встановлення. Рекомендується дозволили програмі встановлення автоматично закрити ці програми.
+ApplicationsFound2=Наступні програми використовують файли, які повинні бути оновлені програмою встановлення. Рекомендується дозволили програмі встановлення автоматично закрити ці програми. Після завершення встановлення, програма встановлення спробує знову запустити їх.
+CloseApplications=&Автоматично закрити програми
+DontCloseApplications=&Не закривати програми
+ErrorCloseApplications=Програма встановлення не може автоматично закрити всі програми. Рекомендується закрити всі програми, що використовують файли, які повинні бути оновлені програмою встановлення, перш ніж продовжити.
+PrepareToInstallNeedsRestart=Програмі встановлення необхідно перезавантажити ваш ПК. Після перезавантаження ПК, запустіть встановлення знову для завершення встановлення [name]%n%nВи бажаєте перезавантажити зараз?
+
+; *** Сторінка "Встановлення"
+WizardInstalling=Встановлення
+InstallingLabel=Будь ласка, зачекайте, поки [name] встановиться на ваш комп'ютер.
+
+; *** Сторінка "Встановлення завершено"
+FinishedHeadingLabel=Завершення встановлення [name]
+FinishedLabelNoIcons=Встановлення [name] на ваш комп’ютер завершено.
+FinishedLabel=Встановлення [name] на ваш комп’ютер завершено. Встановлені програми можна відкрити за допомогою створених ярликів.
+ClickFinish=Натисніть «Готово» для виходу з програми встановлення.
+FinishedRestartLabel=Для завершення встановлення [name] необхідно перезавантажити ваш комп’ютер. Перезавантажити комп’ютер зараз?
+FinishedRestartMessage=Для завершення встановлення [name] необхідно перезавантажити ваш комп’ютер.%n%nПерезавантажити комп’ютер зараз?
+ShowReadmeCheck=Так, я хочу переглянути файл README
+YesRadio=&Так, перезавантажити комп’ютер зараз
+NoRadio=&Ні, я перезавантажу комп’ютер пізніше
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Відкрити %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Переглянути %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Необхідно вставити наступний диск
+SelectDiskLabel2=Будь ласка, вставте диск %1 і натисніть «OK».%n%nЯкщо потрібні файли можуть знаходитися в іншій папці, на відміну від вказаної нижче, введіть правильний шлях або натисніть «Огляд».
+PathLabel=&Шлях:
+FileNotInDir2=Файл "%1" не знайдений в "%2". Будь ласка, вставте належний диск або вкажіть іншу папку.
+SelectDirectoryLabel=Будь ласка, вкажіть шлях до наступного диску.
+
+; *** Installation phase messages
+SetupAborted=Встановлення не завершено.%n%nБудь ласка, усуньте проблему і відкрийте програму встановлення знову.
+AbortRetryIgnoreSelectAction=Виберіть дію
+AbortRetryIgnoreRetry=&Спробувати знову
+AbortRetryIgnoreIgnore=&Ігнорувати помилку та продовжити
+AbortRetryIgnoreCancel=Відмінити встановлення
+
+; *** Повідомлення стану встановлення
+StatusClosingApplications=Закриття програм...
+StatusCreateDirs=Створення папок...
+StatusExtractFiles=Розпакування файлів...
+StatusCreateIcons=Створення ярликів...
+StatusCreateIniEntries=Створення INI записів...
+StatusCreateRegistryEntries=Створення записів реєстру...
+StatusRegisterFiles=Реєстрація файлів...
+StatusSavingUninstall=Збереження інформації для видалення...
+StatusRunProgram=Завершення встановлення...
+StatusRestartingApplications=Перезапуск програм...
+StatusRollback=Скасування змін...
+
+; *** Різні помилки
+ErrorInternal2=Внутрішня помилка: %1
+ErrorFunctionFailedNoCode=%1 збій
+ErrorFunctionFailed=%1 збій; код %2
+ErrorFunctionFailedWithMessage=%1 збій; код %2.%n%3
+ErrorExecutingProgram=Неможливо виконати файл:%n%1
+
+; *** Помилки реєстру
+ErrorRegOpenKey=Помилка відкриття ключа реєстру:%n%1\%2
+ErrorRegCreateKey=Помилка створення ключа реєстру:%n%1\%2
+ErrorRegWriteKey=Помилка запису в ключ реєстру:%n%1\%2
+
+; *** Помилки INI
+ErrorIniEntry=Помилка при створенні запису в INI-файлі "%1".
+
+; *** Помилки копіювання файлів
+FileAbortRetryIgnoreSkipNotRecommended=&Пропустити файл (не рекомендується)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Ігнорувати помилку та продовжити (не рекомендується)
+SourceIsCorrupted=Вихідний файл пошкоджений
+SourceDoesntExist=Вихідний файл "%1" не існує
+ExistingFileReadOnly2=Неможливо замінити існуючий файл, оскільки він позначений лише для читання.
+ExistingFileReadOnlyRetry=&Видалити атрибут "лише читання" та спробувати знову
+ExistingFileReadOnlyKeepExisting=&Залишити існуючий файл
+ErrorReadingExistingDest=Виникла помилка при спробі читання існуючого файлу:
+FileExistsSelectAction=Виберіть дію
+FileExists2=Файл вже існує.
+FileExistsOverwriteExisting=&Замінити існуючий файл
+FileExistsKeepExisting=&Зберегти існуючий файл
+FileExistsOverwriteOrKeepAll=&Повторити дію для всіх подальших конфліктів
+ExistingFileNewerSelectAction=Виберіть дію
+ExistingFileNewer2=Існуючий файл новіший, ніж встановлюваємий.
+ExistingFileNewerOverwriteExisting=&Замінити існуючий файл
+ExistingFileNewerKeepExisting=&Зберегти існуючий файл (рекомендується)
+ExistingFileNewerOverwriteOrKeepAll=&Повторити дію для всіх подальших конфліктів
+ErrorChangingAttr=Виникла помилка при спробі зміни атрибутів існуючого файлу:
+ErrorCreatingTemp=Виникла помилка при спробі створення файлу в папці встановлення:
+ErrorReadingSource=Виникла помилка при спробі читання вихідного файлу:
+ErrorCopying=Виникла помилка при спробі копіювання файлу:
+ErrorReplacingExistingFile=Виникла помилка при спробі заміни існуючого файлу:
+ErrorRestartReplace=Помилка RestartReplace:
+ErrorRenamingTemp=Виникла помилка при спробі перейменування файлу в папці встановлення:
+ErrorRegisterServer=Неможливо зареєструвати DLL/OCX: %1
+ErrorRegSvr32Failed=Помилка при виконанні RegSvr32, код повернення %1
+ErrorRegisterTypeLib=Неможливо зареєструвати бібліотеку типів: %1
+
+; *** Uninstall display name markings
+UninstallDisplayNameMark=%1 (%2)
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-біт
+UninstallDisplayNameMark64Bit=64-біт
+UninstallDisplayNameMarkAllUsers=Всі користувачі
+UninstallDisplayNameMarkCurrentUser=Поточний користувач
+
+; *** Post-installation errors
+ErrorOpeningReadme=Виникла помилка при спробі відкриття файлу README.
+ErrorRestartingComputer=Програмі встановлення не вдалося перезавантажити комп'ютер. Будь ласка, виконайте це самостійно.
+
+; *** Повідомлення видалення
+UninstallNotFound=Файл "%1" не існує, видалення неможливе.
+UninstallOpenError=Неможливо відкрити файл "%1". Видалення неможливе
+UninstallUnsupportedVer=Файл протоколу для видалення "%1" не розпізнаний даною версією програми видалення. Видалення неможливе
+UninstallUnknownEntry=Невідомий запис (%1) в файлі протоколу для видалення
+ConfirmUninstall=Ви впевнені, що хочете запустити майстер видалення %1?
+UninstallOnlyOnWin64=Цю програму можливо видалити лише у середовищі 64-бітної версії Windows.
+OnlyAdminCanUninstall=Ця програма може бути видалена лише користувачем з правами адміністратора.
+UninstallStatusLabel=Будь ласка, зачекайте, поки %1 видалиться з вашого комп'ютера.
+UninstalledAll=%1 успішно видалено з вашого комп'ютера.
+UninstalledMost=Видалення %1 завершено.%n%nДеякі елемент неможливо видалити. Ви можете видалити їх вручну.
+UninstalledAndNeedsRestart=Для завершення видалення %1 необхідно перезавантажити ваш комп’ютер.%n%nПерезавантажити комп’ютер зараз?
+UninstallDataCorrupted=Файл "%1" пошкоджений. Видалення неможливе
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Видалити загальні файли?
+ConfirmDeleteSharedFile2=Система свідчить, що наступний спільний файл більше не використовується іншими програмами. Ви бажаєте видалити цей спільний файл?%n%nЯкщо інші програми все ще використовують цей файл і він видалиться, то ці програми можуть функціонувати неправильно. Якщо ви не впевнені, виберіть «Ні». Залишений файл не нашкодить вашій системі.
+SharedFileNameLabel=Ім'я файлу:
+SharedFileLocationLabel=Розміщення:
+WizardUninstalling=Стан видалення
+StatusUninstalling=Видалення %1...
+
+
+; *** Причини блокування вимкнення
+ShutdownBlockReasonInstallingApp=Встановлення %1.
+ShutdownBlockReasonUninstallingApp=Видалення %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1, версія %2
+AdditionalIcons=Додаткові ярлики:
+CreateDesktopIcon=Створити ярлики на &Робочому столі
+CreateQuickLaunchIcon=Створити ярлики на &Панелі швидкого запуску
+ProgramOnTheWeb=Сайт %1 в Інтернеті
+UninstallProgram=Видалити %1
+LaunchProgram=Відкрити %1
+AssocFileExtension=&Асоціювати %1 з розширенням файлу %2
+AssocingFileExtension=Асоціювання %1 з розширенням файлу %2...
+AutoStartProgramGroupDescription=Автозавантаження:
+AutoStartProgram=Автоматично завантажувати %1
+AddonHostProgramNotFound=%1 не знайдений у вказаній вами папці%n%nВи все одно бажаєте продовжити?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Виберіть режим встановлення
+SelectSetupInstallModeDesc=VCMI можна встановити для всіх користувачів або лише для вас.
+SelectSetupInstallModeSubTitle=Виберіть бажаний режим встановлення:
+InstallForAllUsers=Встановити для всіх користувачів
+InstallForAllUsers1=Потребує прав адміністратора
+InstallForMeOnly=Встановити лише для мене
+InstallForMeOnly1=При першому запуску гри з'явиться повідомлення брандмауера
+InstallForMeOnly2=LAN-ігри не працюватимуть, якщо правило брандмауера не буде дозволено
+SystemIntegration=Інтеграція з системою
+CreateDesktopShortcuts=Створити ярлики на робочому столі
+CreateStartMenuShortcuts=Створити ярлики в меню Пуск
+AssociateH3MFiles=Зв'язати файли .h3m з Редактором Карт VCMI
+AssociateVCMIMapFiles=Зв'язати файли .vmap і .vcmp з Редактором Карт VCMI
+VCMISettings=Налаштування VCMI
+AddFirewallRules=Додати правила брандмауера для VCMI
+CopyH3Files=Автоматично скопіювати необхідні файли Heroes III до VCMI
+RunVCMILauncherAfterInstall=Запустити VCMI Launcher
+ShortcutMapEditor=Редактор Карт VCMI
+ShortcutLauncher=Запускатор VCMI
+ShortcutWebPage=Офіційний сайт VCMI
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=Запустити VCMI Launcher
+ShortcutMapEditorComment=Відкрити Редактор Карт VCMI
+ShortcutWebPageComment=Відвідати офіційний сайт VCMI
+ShortcutDiscordComment=Відвідати офіційний Discord VCMI
+DeleteUserData=Видалити дані користувача
+Uninstall=Видалити
+Warning=Попередження
+VMAPDescription=Файл карти VCMI
+VCMPDescription=Файл кампанії VCMI
+H3MDescription=Файл карти Heroes 3

+ 417 - 0
CI/wininstaller/lang/Vietnamese.isl

@@ -0,0 +1,417 @@
+; *** Inno Setup version 6.1.0+ Vietnamese messages ***
+; Translated by Vu Khac Hiep (email: [email protected])
+; To download user-contributed translations of this file, go to:
+;   https://jrsoftware.org/files/istrans/
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=Vietnamese
+LanguageID=$042A
+LanguageCodePage=0
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=Cài đặt
+SetupWindowTitle=Cài đặt - %1
+UninstallAppTitle=Gỡ cài đặt
+UninstallAppFullTitle=Gỡ cài đặt - %1
+
+; *** Misc. common
+InformationTitle=Thông tin
+ConfirmTitle=Xác nhận
+ErrorTitle=Lỗi
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Chương trình này sẽ cài đặt %1. Bạn có muốn tiếp tục không?
+LdrCannotCreateTemp=Không thể tạo tệp tạm thời. Cài đặt bị hủy bỏ
+LdrCannotExecTemp=Không thể chạy tệp trong thư mục tạm thời. Cài đặt bị hủy bỏ
+HelpTextNote=
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nLỗi %2: %3
+SetupFileMissing=Tệp %1 bị thiếu trong thư mục cài đặt. Hãy sửa lỗi hoặc lấy một bản sao mới của chương trình.
+SetupFileCorrupt=Các tệp cài đặt đã bị hỏng. Hãy sửa lỗi hoặc lấy một bản sao của chương trình.
+SetupFileCorruptOrWrongVer=Các tệp cài đặt bị hỏng, hoặc không tương thích với bản cài đặt này. Hãy sửa lỗi hoặc lấy một bản sao mới của chương trình.
+InvalidParameter=Một thông số không hợp lệ đã được đưa vào dòng lệnh:%n%n%1
+SetupAlreadyRunning=Cài đặt này đang chạy.
+WindowsVersionNotSupported=Chương trình này không thể chạy trên phiên bản Windows của bạn. Vui lòng đảm bảo rằng bạn đang sử dụng kiến trúc Windows đúng (32-bit hoặc 64-bit) và phiên bản phù hợp của chương trình này.
+WindowsServicePackRequired=Chương trình này yêu cầu %1 Service Pack %2 hoặc mới hơn.
+NotOnThisPlatform=Chương trình này sẽ không chạy trên %1.
+OnlyOnThisPlatform=Chương trình này phải chạy trên %1.
+OnlyOnTheseArchitectures=Chương trình này chỉ có thể được cài đặt trên phiên bản Windows được thiết kế cho các hệ vi xử lí:%n%n%1
+WinVersionTooLowError=Chương trình này yêu cầu %1 phiên bản %2 hoặc mới hơn.
+WinVersionTooHighError=Chương trình này không thể được cài đặt trên %1 phiên bản %2 hoặc mới hơn.
+AdminPrivilegesRequired=Bạn phải được đăng nhập như người quản trị khi cài đặt chương trình này.
+PowerUserPrivilegesRequired=Bạn phải được đăng nhập như người quản trị hoặc thành viên trong nhóm Người dùng mạnh khi cài đặt chương trình này.
+SetupAppRunningError=Cài đặt phát hiện %1 đang chạy.%n%nHãy đóng tất cả các tiến trình của nó ngay, rồi click OK để tiếp tục, hoặc Hủy để thoát.
+UninstallAppRunningError=Gỡ cài đặt phát hiện %1 đang chạy.%n%nHãy đóng tất cả các tiến trình của nó ngay, rồi click OK để tiếp tục, hoặc Hủy để thoát.
+
+; *** Startup questions
+PrivilegesRequiredOverrideTitle=Select Setup Install Mode
+PrivilegesRequiredOverrideInstruction=Select install mode
+PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only.
+PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges).
+PrivilegesRequiredOverrideAllUsers=Install for &all users
+PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended)
+PrivilegesRequiredOverrideCurrentUser=Install for &me only
+PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended)
+
+; *** Misc. errors
+ErrorCreatingDir=Cài đặt không thể tạo ra thư mục "%1"
+ErrorTooManyFilesInDir=Không thể tạo một tệp trong thư mục "%1" vì nó chứa quá nhiều tệp
+
+; *** Setup common messages
+ExitSetupTitle=Thoát cài đặt
+ExitSetupMessage=Cài đặt chưa hoàn thành. Nếu bạn thoát bây giờ, chương trình sẽ không được cài đặt.%n%nBạn có thể chạy lại Cài đặt một lần khác để hoàn thành cài đặt.%n%nThoát ngay?
+AboutSetupMenuItem=&Về trình cài đặt...
+AboutSetupTitle=Về trình cài đặt
+AboutSetupMessage=%1 phiên bản %2%n%3%n%n%1 trang chủ:%n%4
+AboutSetupNote=
+TranslatorNote=Giao diện người dùng tiếng Việt bởi: Vũ Khắc Hiệp
+
+; *** Buttons
+ButtonBack=< &Trước
+ButtonNext=T&iếp >
+ButtonInstall=&Cài đặt
+ButtonOK=OK
+ButtonCancel=Hủy
+ButtonYes=&Có
+ButtonYesToAll=Có c&ho tất cả
+ButtonNo=&Không
+ButtonNoToAll=Khô&ng cho tất cả
+ButtonFinish=&Hoàn thành
+ButtonBrowse=&Duyệt...
+ButtonWizardBrowse=D&uyệt...
+ButtonNewFolder=Tạ&o thư mục mới
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=Chọn ngôn ngữ cài đặt
+SelectLanguageLabel=Chọn ngôn ngữ để sử dụng khi cài đặt:
+
+; *** Common wizard text
+ClickNext=Nhấn Tiếp để tiếp tục, hoặc Hủy để thoát cài đặt
+BeveledLabel=
+BrowseDialogTitle=Tìm thư mục
+BrowseDialogLabel=Chọn một thư mục trong danh sách sau rồi ấn OK.
+NewFolderName=Tạo thư mục mới
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Chào mừng tới trình cài đặt [name]
+WelcomeLabel2=Chương trình này sẽ cài [name/ver] trên máy tính của bạn.%n%nChúng tôi khuyên bạn đóng mọi chương trình khác lại trước khi cài đặt.
+
+; *** "Password" wizard page
+WizardPassword=Mật khẩu
+PasswordLabel1=Việc cài đặt được bảo vệ bằng mật khẩu.
+PasswordLabel3=Hãy nhập mật khẩu, rồi nhấn Tiếp để tiếp tục. Mật khẩu phân biệt chữ hoa/thường.
+PasswordEditLabel=&Mật khẩu:
+IncorrectPassword=Mật khẩu bạn đã nhập không đúng. Hãy thử lại.
+
+; *** "License Agreement" wizard page
+WizardLicense=Thỏa thuận cấp phép
+LicenseLabel=Hãy đọc những thông tin quan trọng sau trước khi tiếp tục.
+LicenseLabel3=Hãy đọc Thỏa thuận cấp phép sau. Bạn phải chấp nhận các điều khoản của cài đặt này trước khi tiếp tục.
+LicenseAccepted=Tô&i chấp nhận thỏa thuận
+LicenseNotAccepted=Tôi khôn&g chấp nhận thỏa thuận
+
+; *** "Information" wizard pages
+WizardInfoBefore=Thông tin
+InfoBeforeLabel=Hãy đọc những thông tin quan trọng sau trước khi tiếp tục.
+InfoBeforeClickLabel=Khi bạn đã sẵn sàng cài đặt tiếp, click Tiếp.
+WizardInfoAfter=Thông tin
+InfoAfterLabel=Hãy đọc những thông tin quan trọng sau trước khi tiếp tục.
+InfoAfterClickLabel=Khi bạn đã sẵn sàng cài đặt tiếp, click Tiếp.
+
+; *** "User Information" wizard page
+WizardUserInfo=Thông tin người dùng
+UserInfoDesc=Hãy nhập thông tin của bạn.
+UserInfoName=Tên n&gười dùng:
+UserInfoOrg=Tổ c&hức:
+UserInfoSerial=&Số serial:
+UserInfoNameRequired=Bạn phải nhập một tên.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=Chọn vị trí cài đặt
+SelectDirDesc=[name] nên được cài đặt ở đâu?
+SelectDirLabel3=[name] sẽ được cài đặt vào thư mục sau:
+SelectDirBrowseLabel=Để tiếp tục. nhấn Tiếp. Nếu bạn muốn chọn một thư mục khác, nhấn Duyệt.
+DiskSpaceGBLabel=Cần có ít nhất [gb] GB ổ đĩa trống.
+DiskSpaceMBLabel=Cần có ít nhất [mb] MB ổ đĩa trống.
+CannotInstallToNetworkDrive=Cài đặt không thể cài vào một ổ đĩa mạng.
+CannotInstallToUNCPath=Cài đặt không thể cài vào đường dẫn UNC.
+InvalidPath=Bạn phải nhập đường dẫn đầy đủ với chữ cái ổ đĩa, ví dụ:%n%nC:\APP%n%nhoặc một đường dẫn UNC theo mẫu:%n%n\\server\share
+InvalidDrive=Ổ đĩa hoặc chia sẻ UNC bạn đã chọn không tồn tại hoặc không truy cập được. Hãy chọn cái khác.
+DiskSpaceWarningTitle=Không đủ dung lượng đĩa
+DiskSpaceWarning=Cài đặt yêu cầu ít nhất %1 KB dung lượng trống để cài đặt, nhưng ổ đĩa đã chọn chỉ còn %2KB.%n%nBạn muốn tiếp tục bằng mọi giá?
+DirNameTooLong=Tên thư mục hoặc đường dẫn quá dài.
+InvalidDirName=Tên thư mục không hợp lệ.
+BadDirName32=Tên thư mục không được chứa các kí tự sau:%n%n%1
+DirExistsTitle=Thư mục đã tồn tại
+DirExists=Thư mục:%n%n%1%n%nđã tồn tại. Bạn có muốn cài đặt vào thư mục đó bằng mọi giá?
+DirDoesntExistTitle=Thư mục không tồn tại
+DirDoesntExist=Thư mục:%n%n%1%n%nkhông tồn tại. Bạn có muốn tạo thư mục không?
+
+; *** "Select Components" wizard page
+WizardSelectComponents=Chọn các thành phần
+SelectComponentsDesc=Những thành phần nào nên được cài đặt?
+SelectComponentsLabel2=Chọn các thành phần bạn muốn cài đặt, bỏ chọn các thành phần bạn không muốn. Click Tiếp khi bạn đã sẵn sàng để tiếp tục.
+FullInstallation=Cài đặt đầy đủ
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=Cài đặt rút gọn
+CustomInstallation=Cài đặt tủy chỉnh
+NoUninstallWarningTitle=Thành phần đã tồn tại
+NoUninstallWarning=Cài đặt phát hiện các thành phần sau đã được cài đặt trên máy tính của bạn:%n%n%1%n%nBỏ chọn những thành phần này sẽ không cài đặt chúng.%n%nBạn có muốn tiếp tục bằng mọi giá?
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceGBLabel=Lựa chọn này yêu cầu ít nhất [gb] GB không gian đĩa.
+ComponentsDiskSpaceMBLabel=Lựa chọn này yêu cầu ít nhất [mb] MB không gian đĩa.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=Chọn các tác vụ bổ sung
+SelectTasksDesc=Các tác vụ bổ sung nào nên được thực hiện?
+SelectTasksLabel2=Chọn các tác vụ bổ sung mà bạn muốn cài đặt thực hiện khi cài đặt [name], rồi nhấn Tiếp.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=Chọn thư mục bắt đầu
+SelectStartMenuFolderDesc=Các lối tắt đến chương trình nên được đặt ở đâu?
+SelectStartMenuFolderLabel3=Cài đặt sẽ tạo các lối tắt đến chương trình trong thư mục bắt đầu sau.
+SelectStartMenuFolderBrowseLabel=Để tiếp tục, click Tiếp. Nếu bạn muốn chọn thư mục khác, click Duyệt.
+MustEnterGroupName=Bạn phải nhập tên một thư mục.
+GroupNameTooLong=Tên thư mục hoặc đường dẫn quá dài.
+InvalidGroupName=Tên thư mục không hợp lệ.
+BadGroupName=Tên thư mục không được chứa các kí tự sau:%n%n%1
+NoProgramGroupCheck2=&Không tạo thư mục bắt đầu
+
+; *** "Ready to Install" wizard page
+WizardReady=Sẵn sàng cài đặt
+ReadyLabel1=[name] đã sẵn sàng để dược cài đặt trên máy tính của bạn.
+ReadyLabel2a=Click Cài đặt để tiếp tục, hoặc click Trước nếu bạn muốn xem lại/thay đổi bất kì cài đặt nào.
+ReadyLabel2b=Click Cài đặt để tiếp tục cài đặt.
+ReadyMemoUserInfo=Thông tin người dùng:
+ReadyMemoDir=Vị trí đích:
+ReadyMemoType=Kiểu cài đặt:
+ReadyMemoComponents=Các thành phần được chọn:
+ReadyMemoGroup=Thư mục bắt đầu:
+ReadyMemoTasks=Các tác vụ bổ sung:
+
+; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
+DownloadingLabel=Đang tải các tập tin bổ sung...
+ButtonStopDownload=&Dừng tải xuống
+StopDownload=Bạn có chắc chắn muốn dừng tải xuống không?
+ErrorDownloadAborted=Tải xuống bị hủy bỏ
+ErrorDownloadFailed=Tải xuống không thành công: %1 %2
+ErrorDownloadSizeFailed=Getting size failed: %1 %2
+ErrorFileHash1=File hash failed: %1
+ErrorFileHash2=Invalid file hash: expected %1, found %2
+ErrorProgress=Invalid progress: %1 of %2
+ErrorFileSize=Invalid file size: expected %1, found %2
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Chuẩn bị cài đặt
+PreparingDesc=[name] đang chuẩn bị được cài đặt trên máy tính của bạn.
+PreviousInstallNotCompleted=Việc cài đặt/gỡ bỏ một chương trình chưa được hoàn tất trước đó. Bạn sẽ phải khởi động lại máy tính để hoàn tất cài đặt đó.%n%nSau khi chởi động lại, chạy Cài đặt một lần nữa để hoàn tất cài đặt [name].
+CannotContinue=Cài đặt không thể tiếp tục. Nhấn Hủy để thoát.
+ApplicationsFound=Những chương trình sau đang sử dụng các tệp cần được cập nhật bởi trình cài đặt. Chúng tôi khuyên bạn cho phép Cài đặt đóng các chương trình này.
+ApplicationsFound2=Những chương trình sau đang sử dụng các tệp cần được cập nhật bởi trình cài đặt. Chúng tôi khuyên bạn cho phép Cài đặt đóng các chương trình này. Sau khi hoàn thành cài đặt, chúng tôi sẽ thử khởi động lại các chương trình này.
+CloseApplications=Tự độn&g đóng các chương trình này
+DontCloseApplications=Không đóng các chương t&rình này
+ErrorCloseApplications=Cài đặt không thể đóng mọi chương trình. Chúng tôi khuyên bạn đóng các chương trình đang sử dụng các tệp cần được cập nhật bởi Cài đặt một cách thủ công trước khi tiếp tục.
+PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now?
+
+; *** "Installing" wizard page
+WizardInstalling=Đang cài đặt
+InstallingLabel=Hãy đợi khi [name] đang được cài đặt trên máy tính của bạn.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Hoàn thành cài đặt [name]
+FinishedLabelNoIcons=[name] đã được cài đặt xong trên máy tính của bạn.
+FinishedLabel=[name] đã được cài đặt xong trên máy tính của bạn. Chương trình có thể được khởi động bằng cách click vào lối tắt đến chương trình.
+ClickFinish=Click Hoàn thành để thoát Cài đặt.
+FinishedRestartLabel=Để hoàn thành cài đặt [name], máy tính của bạn cần đươc khởi động lại. Bạn có muốn khởi động lại ngay?
+FinishedRestartMessage=Để hoàn thành cài đặt [name], máy tính của bạn cần đươc khởi động lại.%n%nBạn có muốn khởi động lại ngay?
+ShowReadmeCheck=Có, tôi muốn xem tệp README
+YesRadio=&Có, khởi động lại máy tính ngay
+NoRadio=&Không, tôi sẽ khởi động lại máy tính sau
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Chạy %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Xem %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=Cài đặt cần đĩa tiếp theo
+SelectDiskLabel2=Hãy chèn đĩa %1 và click OK.%n%nNếu các tệp trên đĩa này có thể được tìm thấy trên một thư mục khác với được hiển thị dưới đây, nhập đường dẫn hoặc click Duyệt.
+PathLabel=Đườ&ng dẫn:
+FileNotInDir2=Tệp "%1" không thể được xác định trong "%2". Hãy chọn đia xđúng hoặc chọn thư mục khác.
+SelectDirectoryLabel=Hãy chọn vị trí của đĩa tiếp theo.
+
+; *** Installation phase messages
+SetupAborted=Cài đặt không được hoàn thành.%n%nHãy sửa lỗi và chạy Cài đặt lại.
+AbortRetryIgnoreSelectAction=Chọn hành động
+AbortRetryIgnoreRetry=&Thử lại
+AbortRetryIgnoreIgnore=&Bỏ qua lỗi và tiếp tục
+AbortRetryIgnoreCancel=Hủy
+
+; *** Installation status messages
+StatusClosingApplications=Đang đóng các chương trình...
+StatusCreateDirs=Đang tạo các thư mục...
+StatusExtractFiles=Đang giải nén các tệp...
+StatusCreateIcons=Đang tạo các lối tắt...
+StatusCreateIniEntries=Đang tạo các đầu vào INI...
+StatusCreateRegistryEntries=Đang tạo các đầu vào registry...
+StatusRegisterFiles=Đang đăng kí các tệp...
+StatusSavingUninstall=Đang lưu thông tin gỡ cài đặt...
+StatusRunProgram=Đang hoàn thành cài đặt...
+StatusRestartingApplications=Đang khởi động lại các chương trình...
+StatusRollback=Đang hoàn lại các thay đổi...
+
+; *** Misc. errors
+ErrorInternal2=Lỗi nội bộ: %1
+ErrorFunctionFailedNoCode=%1 thất bại
+ErrorFunctionFailed=%1 thất bại với mã lỗi %2
+ErrorFunctionFailedWithMessage=%1 thất bại với mã lỗi %2.%n%3
+ErrorExecutingProgram=Không thể chạy tệp:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Lỗi khi mở registry:%n%1\%2
+ErrorRegCreateKey=Lỗi khi tạo registry:%n%1\%2
+ErrorRegWriteKey=Lỗi khi viết registry:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Lỗi tạo đầu vào INI cho tệp "%1".
+
+; *** File copying errors
+FileAbortRetryIgnoreSkipNotRecommended=&Bỏ qua tệp này (không khuyến nghị)
+FileAbortRetryIgnoreIgnoreNotRecommended=&Bỏ qua để tiếp tục bằng mọi giá (không khuyến nghị)
+SourceIsCorrupted=Tệp nguồn bị hỏng
+SourceDoesntExist=Tệp nguồn "%1" không tồn tại
+ExistingFileReadOnly2=Tệp đã tồn tại với đánh dấu chỉ đọc.
+ExistingFileReadOnlyRetry=&Xóa thuộc tính chỉ đọc và thử lại
+ExistingFileReadOnlyKeepExisting=&Giữ tập tin hiện có
+ErrorReadingExistingDest=Một lỗi đã xảy ra khi đọc tệp:
+FileExistsSelectAction=Select action
+FileExists2=Tệp đã tồn tại.
+FileExistsOverwriteExisting=G&hi đè tệp hiện có
+FileExistsKeepExisting=&Giữ tệp hiện có
+FileExistsOverwriteOrKeepAll=&Do this for the next conflicts
+ExistingFileNewerSelectAction=Select action
+ExistingFileNewer2=Tệp hiện có mới hơn tệp mà Thiết lập đang cố gắng cài đặt.
+ExistingFileNewerOverwriteExisting=&Ghi đè tệp hiện có
+ExistingFileNewerKeepExisting=&Giữ tệp hiện có (khuyến nghị)
+ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts
+ErrorChangingAttr=Một lỗi đã xảy ra khi thay đổi thuộc tính của tệp sau:
+ErrorCreatingTemp=Một lỗi đã xảy ra khi tạo một tệp trong thư mục đích:
+ErrorReadingSource=Một lỗi đã xảy ra khi đọc tệp nguồn:
+ErrorCopying=Một lỗi đã xảy ra khi sao chép tệp:
+ErrorReplacingExistingFile=Một lỗi đã xảy ra khi thay thế tệp:
+ErrorRestartReplace=Khởi động lại & Thay thế (RestartReplace) thất bại:
+ErrorRenamingTemp=Một lỗi đã xảy ra khi đổi tên tệp trong thư mục đích:
+ErrorRegisterServer=Không thể đăng kí DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 thất bại với mã thoát %1
+ErrorRegisterTypeLib=Không thể đăng kí thư viện kiểu: %1
+
+; *** Uninstall display name markings
+; used for example as 'My Program (32-bit)'
+UninstallDisplayNameMark=%1 (%2)
+; used for example as 'My Program (32-bit, All users)'
+UninstallDisplayNameMarks=%1 (%2, %3)
+UninstallDisplayNameMark32Bit=32-bit
+UninstallDisplayNameMark64Bit=64-bit
+UninstallDisplayNameMarkAllUsers=All users
+UninstallDisplayNameMarkCurrentUser=Current user
+
+; *** Post-installation errors
+ErrorOpeningReadme=Một lỗi đã xảy ra khi mở tệp README.
+ErrorRestartingComputer=Cài đặt không thể khởi động lại máy tính. Hãy làm việc này một cách thủ công.
+
+; *** Uninstaller messages
+UninstallNotFound=Tệp "%1" không tồn tại. Không thể gỡ cài đặt.
+UninstallOpenError=Tệp "%1" không thể được mở. Không thể gỡ cài đặt
+UninstallUnsupportedVer=Tệp nhật kí gỡ cài đặt "%1" có định dạng không thể được xác định bởi phiên bản gỡ cài đặt này. Không thể gỡ cài đặt
+UninstallUnknownEntry=Một đầu vào không xác định (%1) đã bị phát hiện trong nhật kí gỡ cài đặt
+ConfirmUninstall=Bạn có chắc chắn muốn chạy trình gỡ cài đặt %1 không?
+UninstallOnlyOnWin64=Cài đặt này chỉ có thể được gỡ bỏ trên Windows 64 bit.
+OnlyAdminCanUninstall=Cài đặt này chỉ có thể được gỡ bỏ bằng một người dùng có quyền người quản trị.
+UninstallStatusLabel=Hãy đợi khi %1 được gỡ khỏi máy tính của bạn.
+UninstalledAll=%1 đã được gỡ bỏ thành công khỏi máy tính của bạn.
+UninstalledMost=%1 đã được gỡ bỏ thành công.%n%nMột số thành phần không thể được gỡ bỏ. Hãy làm việc này một cách thủ công.
+UninstalledAndNeedsRestart=Để hoàn thành việc gỡ cài đặt %1, bạn phải khởi động lại máy tính.%n%nBạn có muốn khởi động lại ngay?
+UninstallDataCorrupted=Tệp "%1" bị hỏng. Không thể gỡ cài đặt
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=Gỡ bỏ tệp được chia sẻ?
+ConfirmDeleteSharedFile2=Hệ thống chỉ ra các tệp được chia sẻ sau không được sử dụng bởi chương trình nào. Bạn có muốn gỡ bỏ tệp này?%n%nNếu có một chương trình vẫn sử dụng tệp này mà tệp bị gỡ bỏ, chúng có thể không chạy tốt. Nếu bạn không chắc chắn, chọn Không. Để lại tệp trên hệ thống của bạn sẽ không gây ra tổn hại.
+SharedFileNameLabel=Tên tệp:
+SharedFileLocationLabel=Vị trí:
+WizardUninstalling=Trạng thái gỡ cài đặt
+StatusUninstalling=Đang gỡ cài đặt %1...
+
+; *** Shutdown block reasons
+ShutdownBlockReasonInstallingApp=Đang cài đặt %1.
+ShutdownBlockReasonUninstallingApp=Đang gỡ cài đặt %1.
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 phiên bản %2
+AdditionalIcons=Các lối tắt bổ sung:
+CreateDesktopIcon=Tạo một &lối tắt trên Desktop
+CreateQuickLaunchIcon=Tạo một lối tắt &Khởi động nhanh
+ProgramOnTheWeb=%1 trên Web
+UninstallProgram=Gỡ cài đặt %1
+LaunchProgram=Khởi động %1
+AssocFileExtension=&Gán %1 với đuôi tệp %2
+AssocingFileExtension=Đang gán %1 với đuôi tệp %2...
+AutoStartProgramGroupDescription=Khởi động:
+AutoStartProgram=Tự động khởi động %1
+AddonHostProgramNotFound=%1 không thể được xác định trong thư mục bạn đã chọn.%n%nBạn có muốn tiếp tục bằng mọi giá?
+
+; VCMI Custom Messages
+SelectSetupInstallModeTitle=Chọn Chế độ Cài đặt
+SelectSetupInstallModeDesc=VCMI có thể được cài đặt cho tất cả người dùng hoặc chỉ dành cho bạn.
+SelectSetupInstallModeSubTitle=Chọn chế độ cài đặt bạn muốn:
+InstallForAllUsers=Cài đặt cho tất cả người dùng
+InstallForAllUsers1=Yêu cầu quyền quản trị
+InstallForMeOnly=Chỉ cài đặt cho tôi
+InstallForMeOnly1=Khi khởi chạy trò chơi lần đầu tiên, sẽ xuất hiện thông báo tường lửa
+InstallForMeOnly2=Trò chơi LAN sẽ không hoạt động nếu không thể cho phép quy tắc tường lửa
+SystemIntegration=Tích hợp hệ thống
+CreateDesktopShortcuts=Tạo phím tắt trên màn hình
+CreateStartMenuShortcuts=Tạo phím tắt trong menu Bắt đầu
+AssociateH3MFiles=Liên kết các tệp .h3m với Trình chỉnh sửa Bản đồ VCMI
+AssociateVCMIMapFiles=Liên kết các tệp .vmap và .vcmp với Trình chỉnh sửa Bản đồ VCMI
+VCMISettings=Cấu hình VCMI
+AddFirewallRules=Thêm quy tắc tường lửa cho VCMI
+CopyH3Files=Tự động sao chép các tệp cần thiết của Heroes III vào VCMI
+RunVCMILauncherAfterInstall=Khởi chạy VCMI Launcher
+ShortcutMapEditor=Trình chỉnh sửa Bản đồ VCMI
+ShortcutLauncher=VCMI Launcher
+ShortcutWebPage=Trang web chính thức của VCMI
+ShortcutDiscord=VCMI Discord
+ShortcutLauncherComment=Khởi chạy VCMI Launcher
+ShortcutMapEditorComment=Mở Trình chỉnh sửa Bản đồ VCMI
+ShortcutWebPageComment=Truy cập trang web chính thức của VCMI
+ShortcutDiscordComment=Truy cập Discord chính thức của VCMI
+DeleteUserData=Xóa dữ liệu người dùng
+Uninstall=Gỡ cài đặt
+Warning=Cảnh báo
+VMAPDescription=Tệp bản đồ VCMI
+VCMPDescription=Tệp chiến dịch VCMI
+H3MDescription=Tệp bản đồ Heroes 3

BIN
CI/wininstaller/vcmilogo.bmp


BIN
CI/wininstaller/vcmismalllogo.bmp


+ 2 - 0
CMakeLists.txt

@@ -109,6 +109,8 @@ include(CMakeDependentOption)
 cmake_dependent_option(ENABLE_INNOEXTRACT "Enable innoextract for GOG file extraction in launcher" ON "ENABLE_LAUNCHER" OFF)
 cmake_dependent_option(ENABLE_GITVERSION "Enable Version.cpp with Git commit hash" ON "NOT ENABLE_GOLDMASTER" OFF)
 
+option(VCMI_PORTMASTER "PortMaster build" OFF)
+
 ############################################
 #        Miscellaneous options             #
 ############################################

+ 25 - 0
CMakePresets.json

@@ -319,6 +319,25 @@
             "cacheVariables": {
                 "ANDROID_GRADLE_PROPERTIES": "applicationIdSuffix=.daily;signingConfig=dailySigning;applicationLabel=VCMI daily;applicationVariant=daily"
             }
+        },
+        {
+            "name": "portmaster-release",
+            "displayName": "PortMaster",
+            "description": "VCMI PortMaster",
+            "inherits": "default-release",
+            "cacheVariables": {
+                "CMAKE_BUILD_TYPE": "Release",
+                "CMAKE_INSTALL_PREFIX": ".",
+                "ENABLE_DEBUG_CONSOLE": "OFF",
+                "ENABLE_EDITOR": "OFF",
+                "ENABLE_GITVERSION": "OFF",
+                "ENABLE_LAUNCHER": "OFF",
+                "ENABLE_SERVER": "OFF",
+                "ENABLE_TRANSLATIONS": "OFF",
+                "FORCE_BUNDLED_FL": "ON",
+                "ENABLE_GOLDMASTER": "ON",
+                "VCMI_PORTMASTER": "ON"
+            }
         }
     ],
     "buildPresets": [
@@ -447,6 +466,12 @@
             "name": "android-daily-release",
             "configurePreset": "android-daily-release",
             "inherits": "android-conan-ninja-release"
+        },
+        {
+            "name": "portmaster-release",
+            "configurePreset": "portmaster-release",
+            "inherits": "default-release",
+            "configuration": "Release"
         }
     ],
     "testPresets": [

+ 123 - 0
ChangeLog.md

@@ -1,5 +1,128 @@
 # VCMI Project Changelog
 
+## 1.6.7 -> 1.7.0
+
+* Added support for configuring icons for bonus icons in creature window per bonus subtype or per bonus value
+* Heroes that are marked as unavailable for specific player will now be correctly blocked from use as starting heroes
+* Added support for loading h3m maps from HotA 1.7 (also needs support from HotA mod)
+* Added BASE_TILE_MOVEMENT_COST bonus that allows configuring minimal cost for moving between tiles for heroes
+* Commanders will now automatically gain no melee penalty bonus on receiving ranged attack
+
+## 1.6.6 -> 1.6.7
+
+### Stability
+
+* Fixed regression causing crash when trying to create lobby room
+* Fixed regression causing crash when upscaling image in background thread on some systems
+* Fixed possible crash on opening Custom Campaigns window while having campaign with unsupported format in maps directory
+* Fixed possible crash on misconfigured `compatibilityIdentifiers` field in mods
+* Fixed rare crash on AI turn that could sometimes happen after AI dismissed a hero
+
+### General
+
+* Added alternative layout for global lobby window that supports H3-like 4:3 screen ratio
+* Added option in launcher to disable in-game overlay available with Alt or two-finger touch.
+* Game will now save and restore map zoom level between sessions.
+* Fixed regression that caused Brotherhood of the Sword to open the Thieves' Guild window instead of the Tavern window when clicked.
+* Fixed regression causing black pixels on some city building sprites from mods when played without upscaling filter
+* Improved handling of very slow taps on mobile systems
+* Added snapping of marker when mouse cursor is next to data point for easy selection in game statistics window
+* Fixed some graphical artifacts in the game statistics window.
+* Fixed client not checking if submod is compatible with current VCMI version
+
+## 1.6.5 -> 1.6.6
+
+### General
+
+* Game no longer requires local network connection for single player games
+* Reduced size of obstacle-filled junction zones in Coldshadow Fantasy template
+* Upscaling filter xbrz x2 is now enabled by default on mobile systems
+* Fixes failure to import Chronicles on Windows with non-ascii characters in username
+* Added support for importing Chronicles using old All-in-One installer from gog.com
+* It is now possible to enable portrait mode on mobile systems.
+* Fixed grey bar at top of screen when returning to app while in game on Android
+
+### Stability
+
+* Fixed possible crash on opening unit description with unavailable upgrades
+* Fixed crash on winning game after last player loses the game due to not controlling a town for 7 days
+
+### Interface
+
+* Pressing Q during hero exchange will now swap both army and artifacts and will no longer trigger a quest log
+* Spellbook search is no longer enabled by default, allowing standard h3 shortcuts to work. Search can now be activated by pressing Tab
+* Ctrl/Shift + click on arrow buttons below creature slots during hero exchange now works in the familiar way from hd mod
+* On mobile systems, clicking on a blocked tile of a visitable object on the adventure map will now build a path to it
+* It is now possible to activate the adventure map overlay on the mobile system using the two-finger tap gesture
+* Fixed incorrect pinch event calculation that caused problems when zooming with touchscreen gestures
+* Game now displays both total cost in movement points and estimated time to arrive in turns when hovering over an accessible location
+* Artifact sort buttons in the Hero Backpack window now have correct text describing the sort order
+* Fixed non-standard color handling for shadows under selection highlight in creature animations from mods such as HotA's Iron Golem
+* Effects such as Bloodlust, Clone, and Petrify will now display correctly when xbrz is in use
+* Fixed broken Chronicles campaign screen available with new main menu themes mod
+* Fixed empty bonus shown in unit info window when unit is in Necropolis with Cover of Darkness built
+* Right-clicking on the difficulty button will now display the difficulty description popup
+* Fixed regression causing two minus signs in Fountain of Fortune description
+* Added option to upgrade all creatures in the radial menu when in town
+* Added option to display remaining unit health in the form of a health bar
+* Fixed regression that caused unavailable tiles to be displayed on the left and right sides of the battlefield when hovering with the mouse
+* Fixed regression that caused all spells to be displayed as having a duration of 16 rounds
+* Scrolling in the lobby window now only happens when hovering over the appropriate item, instead of scrolling all scrollable widgets at once
+* Fixed regression that caused black pixels on some hero portraits in mods that use 8-bit palette images
+* Fixed memory leak when upscaling images with xbrz filter
+* Fixed creature windows text align and buttons background
+
+### Mechanics
+
+* It is no longer possible to attack heroes standing on a visitable object from blocked tiles or from water when the attacker uses Fly
+* Fixed regression from 1.6 that caused multiple taverns in towns of the same faction to not be counted towards the level of information available for the thieves' guild
+* Fixed regression that caused Cove towns placed on map to be replaced with Castles on HotA maps
+* The amount of gold a player can receive from a bonfire is now always equal to the amount of rare resources received multiplied by 100
+* Disabled default victory conditions on all Elixir of Life campaign maps that require an artifact to be found, in line with H3
+
+### Nullkiller AI
+
+* Improved scoring of town buildings by the AI
+* AI will now prefer to give faster units to its scout heroes to optimize their movement points in future turns
+* Fixed AI not constructing prerequisites for town buildings in some cases, like not building Stables when attempting to build Training Grounds
+* AI will now avoid recruiting heroes if AI is low on gold or if the town is threatened by an enemy hero
+* AI will no longer attempt to use more than one hero to defend a town
+* AI will now devalue non-flying units when attacking towns with fortifications to prevent suicides against castles
+* Increased the priority of building unupgraded dwellings, as they provide units that can be hired immediately, rather than next week like citadels and castles
+* When multiple cities are threatened, the AI will now prefer to defend the one that takes the least number of turns to reach
+* Fixed AI attempting to restore mana points in town without a mage guild built
+* Reduced AI prioritization of army merging to the same level as general gathering
+* AI will now prioritize army merging before attacking enemies
+* Increased AI defense prioritization
+* AI will no longer leave the defense of a threatened town in order to bring the army to another hero
+* AI will no longer send heroes to die outside of towns that already have a garrisoning hero inside, if there's a stronger enemy hero lurking around the town
+* AI will no longer focus excessively on reaching Keymaster tents
+* AI will no longer rush towns that don't have a citadel or better if there is a strong enemy hero in the area
+* AI will no longer try to maximize defenses by using the strongest defender possible, but will instead try to use the most appropriate defender
+* Heroes that are currently threatened will be braver and not worry about attacking things that are also threatened if nothing safe is in range
+
+### Launcher
+
+* Added context menu for mod lists that allows disabling, enabling, installing, uninstalling, updating, opening installed mod location, and opening mod repository
+
+## 1.6.4 -> 1.6.5
+
+### General
+
+* Fixed corrupted graphics of generated assets like water tiles on mobile systems
+* All generated assets are now used directly from memory without saving them to disk
+* Launcher will now correctly show screenshots for already installed mods
+* Fixed broken icons in commander information dialog
+
+### Stability
+
+* Fixed regression causing crashes in combat when touchscreen input is in use
+* Fixed regression causing crash on attempt to upscale empty image
+* Fixed crash on some creature abilities from mods that cast targeted spells on unit with battle propagator
+* Fixed crash on accepting next turn in multiplayer when local player has game settings window open
+* Fixed crash in multiplayer when one player changes his starting options while another player has hero overview window open
+* Fixed crash on double-clicking login to global lobby button
+
 ## 1.6.3 -> 1.6.4
 
 ### General

+ 3 - 5
Global.h

@@ -116,11 +116,12 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
 #include <atomic>
 #include <bitset>
 #include <cassert>
+#include <chrono>
 #include <climits>
 #include <cmath>
-#include <codecvt>
-#include <cstdlib>
+#include <condition_variable>
 #include <cstdio>
+#include <cstdlib>
 #include <fstream>
 #include <functional>
 #include <iomanip>
@@ -188,9 +189,6 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
 #include <boost/range/adaptor/reversed.hpp>
 #include <boost/range/algorithm.hpp>
 #include <boost/thread/thread_only.hpp>
-#include <boost/thread/shared_mutex.hpp>
-#include <boost/thread/recursive_mutex.hpp>
-#include <boost/thread/once.hpp>
 
 #ifndef M_PI
 #  define M_PI 3.14159265358979323846

BIN
Mods/vcmi/Content/Sprites/radialMenu/upgradeCreatures.png


BIN
Mods/vcmi/Content/Sprites/stackWindow/button-panel.png


+ 2 - 2
Mods/vcmi/Content/Sprites/stackWindow/switchModeIcons.json

@@ -1,7 +1,7 @@
 {
 	"images" :
 	[
-		{ "frame" : 0, "file" : "SECSK32:69"},
-		{ "frame" : 1, "file" : "SECSK32:28"}
+		{ "frame" : 0, "defFile" : "SECSK32", "defFrame" : 69 },
+		{ "frame" : 1, "defFile" : "SECSK32", "defFrame" : 28 }
 	]
 }

+ 4 - 6
Mods/vcmi/Content/config/chinese.json

@@ -23,8 +23,6 @@
 	"vcmi.adventureMap.noTownWithTavern"       : "没有酒馆可供查看。",
 	"vcmi.adventureMap.spellUnknownProblem"    : "无此魔法的信息。",
 	"vcmi.adventureMap.playerAttacked"         : "玩家遭受攻击: %s",
-	"vcmi.adventureMap.moveCostDetails"        : "移动点数 - 花费: %TURNS 轮 + %POINTS 点移动力, 剩余移动力: %REMAINING",
-	"vcmi.adventureMap.moveCostDetailsNoTurns" : "移动点数 - 花费: %POINTS 点移动力, 剩余移动力: %REMAINING",
 	"vcmi.adventureMap.movementPointsHeroInfo" 			 : "(移动点数: %REMAINING / %POINTS)",
 	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "抱歉,重放对手行动功能目前暂未实现!",
 
@@ -177,7 +175,7 @@
 	"vcmi.lobby.match.solo" : "单人游戏",
 	"vcmi.lobby.match.duel" : "与 %s 的游戏", // %s -> nickname of another player
 	"vcmi.lobby.match.multi" : "%d 个玩家",
-	"vcmi.lobby.room.create" : "创建房间",
+	"vcmi.lobby.room.create.hover" : "创建房间",
 	"vcmi.lobby.room.players.limit" : "玩家限制",
 	"vcmi.lobby.room.description.public" : "任何玩家都可以加入公开房间。",
 	"vcmi.lobby.room.description.private" : "只有被邀请的玩家能加入私有房间。",
@@ -422,11 +420,11 @@
 	"vcmi.heroWindow.openBackpack.hover" : "开启宝物背包界面",
 	"vcmi.heroWindow.openBackpack.help"  : "用更大的界面显示所有获得的宝物",
 	"vcmi.heroWindow.sortBackpackByCost.hover"  : "按价格排序",
-	"vcmi.heroWindow.sortBackpackByCost.help"  : "将行囊里的宝物按价格排序。",
+	"vcmi.heroWindow.sortBackpackByCost.help"  : "{按价格排序}\n\n将行囊里的宝物按价格排序。",
 	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "按装备槽排序",
-	"vcmi.heroWindow.sortBackpackBySlot.help"  : "将行囊里的宝物按装备槽排序。",
+	"vcmi.heroWindow.sortBackpackBySlot.help"  : "{按装备槽排序}\n\n将行囊里的宝物按装备槽排序。",
 	"vcmi.heroWindow.sortBackpackByClass.hover"  : "按类型排序",
-	"vcmi.heroWindow.sortBackpackByClass.help"  : "将行囊里的宝物按装备槽排序:低级宝物、中级宝物、高级宝物、圣物。",
+	"vcmi.heroWindow.sortBackpackByClass.help"  : "{按类型排序}\n\n将行囊里的宝物按装备槽排序:低级宝物、中级宝物、高级宝物、圣物。",
 	"vcmi.heroWindow.fusingArtifact.fusing" : "你已拥有融合%s所需的全部组件,想现在进行融合吗?{所有组件在融合后将被消耗。}",
 
 	"vcmi.tavernWindow.inviteHero"  : "邀请英雄",

+ 55 - 46
Mods/vcmi/Content/config/czech.json

@@ -23,9 +23,9 @@
 	"vcmi.adventureMap.noTownWithTavern"       : "Nejsou dostupná žádná města s putykou!",
 	"vcmi.adventureMap.spellUnknownProblem"    : "Neznámý problém s tímto kouzlem! Další informace nejsou k dispozici.",
 	"vcmi.adventureMap.playerAttacked"         : "Hráč byl napaden: %s",
-	"vcmi.adventureMap.moveCostDetails"        : "Body pohybu - Cena: %TURNS tahů + %POINTS bodů, zbylé body: %REMAINING",
-	"vcmi.adventureMap.moveCostDetailsNoTurns" : "Body pohybu - Cena: %POINTS bodů, zbylé body: %REMAINING",
-	"vcmi.adventureMap.movementPointsHeroInfo" 			 : "(Body pohybu: %REMAINING / %POINTS)",
+	"vcmi.adventureMap.moveCostDetails"                  : "Přesun sem tě bude stát {%TOTAL} bodů (za {%TURNS} tahů a {%POINTS} bodů). Po přesunu ti zbyde {%REMAINING} bodů.",
+	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Přesun sem tě bude stát {%POINTS} bodů. Po přesunu ti zbyde {%REMAINING} bodů.",
+	"vcmi.adventureMap.movementPointsHeroInfo"           : "(Body pohybu: %REMAINING / %POINTS)",
 	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Omlouváme se, přehrání tahu soupeře ještě není implementováno!",
 
 	"vcmi.bonusSource.artifact" : "Artefakt",
@@ -68,6 +68,7 @@
 	"vcmi.radialWheel.heroGetArtifacts" : "Získat artefakty od jiného hrdiny",
 	"vcmi.radialWheel.heroSwapArtifacts" : "Vyměnit artefakty s jiným hrdinou",
 	"vcmi.radialWheel.heroDismiss" : "Propustit hrdinu",
+	"vcmi.radialWheel.upgradeCreatures" : "Vylepšit všechny jednotky",
 
 	"vcmi.radialWheel.moveTop" : "Přesunout nahoru",
 	"vcmi.radialWheel.moveUp" : "Posunout výše",
@@ -86,9 +87,9 @@
 
 	"vcmi.spellBook.search" : "Hledat",
 
-	"vcmi.spellResearch.canNotAfford" : "Nemáte dostatek prostředků k nahrazení {%SPELL1} za {%SPELL2}. Stále však můžete toto kouzlo zrušit a pokračovat ve výzkumu dalších kouzel.",
-	"vcmi.spellResearch.comeAgain" : "Výzkum už byl dnes proveden. Vraťte se zítra.",
-	"vcmi.spellResearch.pay" : "Chcete nahradit {%SPELL1} za {%SPELL2}? Nebo zrušit toto kouzlo a pokračovat ve výzkumu dalších kouzel?",
+	"vcmi.spellResearch.canNotAfford" : "Nemáš dostatek prostředků na výměnu kouzla {%SPELL1} za {%SPELL2}. Můžeš ho však odstranit a pokračovat ve výzkumu.",
+	"vcmi.spellResearch.comeAgain" : "Výzkum už byl dnes proveden. Vrať se zítra.",
+	"vcmi.spellResearch.pay" : "Chceš nahradit {%SPELL1} za {%SPELL2}? Nebo zrušit toto kouzlo a pokračovat ve výzkumu dalších kouzel?",
 	"vcmi.spellResearch.research" : "Prozkoumat toto kouzlo",
 	"vcmi.spellResearch.skip" : "Přeskočit toto kouzlo",
 	"vcmi.spellResearch.abort" : "Přerušit",
@@ -168,16 +169,16 @@
 	"vcmi.lobby.login.as" : "Přihlásit se jako %s",
 	"vcmi.lobby.login.spectator" : "Divák",
 	"vcmi.lobby.header.rooms" : "Herní místnosti - %d",
-	"vcmi.lobby.header.channels" : "Kanály konverzace",
-	"vcmi.lobby.header.chat.global" : "Globální konverzace hry - %s", // %s -> language name
-	"vcmi.lobby.header.chat.match" : "Konverzace předchozí hry %s", // %s -> game start date & time
-	"vcmi.lobby.header.chat.player" : "Soukromá konverzace s %s", // %s -> nickname of another player
+	"vcmi.lobby.header.channels" : "Kanály chatu",
+	"vcmi.lobby.header.chat.global" : "Globální chat hry - %s", // %s -> language name
+	"vcmi.lobby.header.chat.match" : "Chat předchozí hry %s", // %s -> game start date & time
+	"vcmi.lobby.header.chat.player" : "Soukromý chat s %s", // %s -> nickname of another player
 	"vcmi.lobby.header.history" : "Vaše předchozí hry",
 	"vcmi.lobby.header.players" : "Online hráči - %d",
 	"vcmi.lobby.match.solo" : "Hra jednoho hráče",
 	"vcmi.lobby.match.duel" : "Hra s %s", // %s -> nickname of another player
 	"vcmi.lobby.match.multi" : "%d hráčů",
-	"vcmi.lobby.room.create" : "Vytvořit novou místnost",
+	"vcmi.lobby.room.create.hover" : "Vytvořit novou místnost",
 	"vcmi.lobby.room.players.limit" : "Omezení počtu hráčů",
 	"vcmi.lobby.room.description.public" : "Jakýkoliv hráč se může připojit do veřejné místnosti.",
 	"vcmi.lobby.room.description.private" : "Pouze pozvaní hráči se mohou připojit do soukromé místnosti.",
@@ -185,7 +186,7 @@
 	"vcmi.lobby.room.description.load" : "Pro start hry načtěte uloženou hru.",
 	"vcmi.lobby.room.description.limit" : "Až %d hráčů se může připojit do vaší místnosti (včetně vás).",
 	"vcmi.lobby.invite.header" : "Pozvat hráče",
-	"vcmi.lobby.invite.notification" : "Pozval vás hráč do jejich soukromé místnosti. Nyní se do ní můžete připojit.",
+	"vcmi.lobby.invite.notification" : "Hráč vás pozval do své soukromé místnosti. Nyní se k ní můžete připojit.",
 	"vcmi.lobby.preview.title" : "Připojit se do herní místnosti",
 	"vcmi.lobby.preview.subtitle" : "Hra na %s, pořádána %s", //TL Note: 1) name of map or RMG template 2) nickname of game host
 	"vcmi.lobby.preview.version" : "Verze hry:",
@@ -199,6 +200,7 @@
 	"vcmi.lobby.preview.error.invite" : "Nebyl jste pozván do této mísnosti.",
 	"vcmi.lobby.preview.error.mods" : "Použváte jinou sadu modifikací.",
 	"vcmi.lobby.preview.error.version" : "Používáte jinou verzi VCMI.",
+	"vcmi.lobby.channel.add" : "Přidat kanál",
 	"vcmi.lobby.room.new" : "Nová hra",
 	"vcmi.lobby.room.load" : "Načíst hru",
 	"vcmi.lobby.room.type" : "Druh místnosti",
@@ -215,9 +217,9 @@
 	"vcmi.lobby.pvp.coin.hover" : "Mince",
 	"vcmi.lobby.pvp.coin.help" : "Hodí mincí",
 	"vcmi.lobby.pvp.randomTown.hover" : "Náhodné město",
-	"vcmi.lobby.pvp.randomTown.help" : "Napsat náhodné město do konvezace",
+	"vcmi.lobby.pvp.randomTown.help" : "Napsat náhodné město do chatu",
 	"vcmi.lobby.pvp.randomTownVs.hover" : "Náhodné město vs.",
-	"vcmi.lobby.pvp.randomTownVs.help" : "Napsat 2 náhodná města do konvezace",
+	"vcmi.lobby.pvp.randomTownVs.help" : "Napsat 2 náhodná města do chatu",
 	"vcmi.lobby.pvp.versus" : "vs.",
 
 	"vcmi.client.errors.invalidMap" : "{Neplatná mapa nebo kampaň}\n\nChyba při startu hry! Vybraná mapa nebo kampaň může být neplatná nebo poškozená. Důvod:\n%s",
@@ -305,6 +307,8 @@
 	"vcmi.systemOptions.enableLargeSpellbookButton.help"   : "{Velká kniha kouzel}\n\nPovolí větší knihu kouzel, do které se vejde více kouzel na jednu stranu. Animace změny stránek s tímto nastavením nefunguje.",
 	"vcmi.systemOptions.audioMuteFocus.hover"  : "Ztlumit při neaktivitě",
 	"vcmi.systemOptions.audioMuteFocus.help"   : "{Ztlumit při neaktivitě}\n\nZtlumit zvuk, pokud je okno hry v pozadí. Výjimkou jsou zprávy ve hře a zvuk nového tahu.",
+	"vcmi.systemOptions.enableOverlayButton.hover" : "Povolit zobrazení informací",
+	"vcmi.systemOptions.enableOverlayButton.help" : "{Povolit zobrazení informací}\n\nZapne vrstvu zobrazující dodatečné informace, například názvy budov, pomocí klávesy ALT nebo gesta dvěma prsty.",
 
 	"vcmi.adventureOptions.infoBarPick.hover" : "Zobrazit zprávy v panelu informací",
 	"vcmi.adventureOptions.infoBarPick.help" : "{Zobrazit zprávy v panelu informací}\n\nKdyž bude možné, herní zprávy z návštěv míst na mapě budou zobrazeny v panelu informací místo ve zvláštním okně.",
@@ -326,9 +330,9 @@
 	"vcmi.adventureOptions.smoothDragging.help" : "{Plynulé posouvání mapy}\n\nPokud je tato možnost aktivována, posouvání mapy bude plynulé.",
 	"vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Přeskočit efekty mizení",
 	"vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Přeskočit efekty mizení}\n\nKdyž je povoleno, přeskočí se efekty mizení objektů a podobné efekty (sběr surovin, nalodění atd.). V některých případech zrychlí uživatelské rozhraní na úkor estetiky. Obzvláště užitečné v PvP hrách. Pro maximální rychlost pohybu je toto nastavení aktivní bez ohledu na další volby.",
-	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
-	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
-	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
+	"vcmi.adventureOptions.mapScrollSpeed1.hover" : "",
+	"vcmi.adventureOptions.mapScrollSpeed5.hover" : "",
+	"vcmi.adventureOptions.mapScrollSpeed6.hover" : "",
 	"vcmi.adventureOptions.mapScrollSpeed1.help" : "Nastavit posouvání mapy na velmi pomalé",
 	"vcmi.adventureOptions.mapScrollSpeed5.help" : "Nastavit posouvání mapy na velmi rychlé",
 	"vcmi.adventureOptions.mapScrollSpeed6.help" : "Nastavit posouvání mapy na okamžité",
@@ -337,16 +341,16 @@
 
 	"vcmi.battleOptions.queueSizeLabel.hover" : "Zobrazit frontu pořadí tahů",
 	"vcmi.battleOptions.queueSizeNoneButton.hover" : "VYPNUTO",
-	"vcmi.battleOptions.queueSizeAutoButton.hover": "AUTO",
+	"vcmi.battleOptions.queueSizeAutoButton.hover" : "AUTO",
 	"vcmi.battleOptions.queueSizeSmallButton.hover" : "MALÁ",
 	"vcmi.battleOptions.queueSizeBigButton.hover" : "VELKÁ",
 	"vcmi.battleOptions.queueSizeNoneButton.help" : "Nezobrazovat frontu pořadí tahů.",
 	"vcmi.battleOptions.queueSizeAutoButton.help" : "Nastavit automaticky velikost fronty pořadí tahů podle rozlišení obrazovky hry (Při výšce herního rozlišení menší než 700 pixelů je použita velikost MALÁ, jinak velikost VELKÁ)",
 	"vcmi.battleOptions.queueSizeSmallButton.help" : "Zobrazit MALOU frontu pořadí tahů.",
 	"vcmi.battleOptions.queueSizeBigButton.help" : "Zobrazit VELKOU frontu pořadí tahů (není podporováno, pokud výška rozlišení hry není alespoň 700 pixelů).",
-	"vcmi.battleOptions.animationsSpeed1.hover": "",
-	"vcmi.battleOptions.animationsSpeed5.hover": "",
-	"vcmi.battleOptions.animationsSpeed6.hover": "",
+	"vcmi.battleOptions.animationsSpeed1.hover" : "",
+	"vcmi.battleOptions.animationsSpeed5.hover" : "",
+	"vcmi.battleOptions.animationsSpeed6.hover" : "",
 	"vcmi.battleOptions.animationsSpeed1.help" : "Nastavit rychlost animací na velmi pomalé.",
 	"vcmi.battleOptions.animationsSpeed5.help" : "Nastavit rychlost animací na velmi rychlé.",
 	"vcmi.battleOptions.animationsSpeed6.help" : "Nastavit rychlost animací na okamžité.",
@@ -362,6 +366,8 @@
 	"vcmi.battleOptions.endWithAutocombat.help" : "{Přeskočit bitvu}\n\nAutomatický boj okamžitě dohraje bitvu do konce.",
 	"vcmi.battleOptions.showQuickSpell.hover" : "Zobrazit rychlý panel kouzel",
 	"vcmi.battleOptions.showQuickSpell.help" : "{Zobrazit rychlý panel kouzel}\n\nZobrazí panel pro rychlý výběr kouzel.",
+	"vcmi.battleOptions.showHealthBar.hover": "Zobrazit ukazatel zdraví",
+	"vcmi.battleOptions.showHealthBar.help": "{Zobrazit ukazatel zdraví}\n\nZobrazí ukazatel, který znázorňuje, kolik zdraví zbývá, než jednotka zemře.",
 
 	"vcmi.adventureMap.revisitObject.hover" : "Znovu navštívit objekt",
 	"vcmi.adventureMap.revisitObject.help" : "{Znovu navštívit objekt}\n\nPokud hrdina právě stojí na objektu na mapě, může toto místo znovu navštívit.",
@@ -414,6 +420,9 @@
 	"vcmi.townStructure.bank.borrow" : "Vstupujete do banky. Bankéř vás spatří a říká: \"Máme pro vás speciální nabídku. Můžete si vzít půjčku 2500 zlata na 5 dní. Každý den budete muset splácet 500 zlata.\"",
 	"vcmi.townStructure.bank.payBack" : "Vstupujete do banky. Bankéř vás spatří a říká: \"Již jste si vzali půjčku. Nejprve ji splaťte, než si vezmete další.\"",
 
+	"vcmi.townWindow.upgradeAll.notAllUpgradable" : "Nemáte dostatek surovin na vylepšení všech jednotek. Chcete vylepšit následující jednotky?",
+	"vcmi.townWindow.upgradeAll.notUpgradable" : "Nemáte dostatek surovin na vylepšení žádné z jednotek.",
+
 	"vcmi.logicalExpressions.anyOf"  : "Nějaké z následujících:",
 	"vcmi.logicalExpressions.allOf"  : "Všechny následující:",
 	"vcmi.logicalExpressions.noneOf" : "Žádné z následujících:",
@@ -423,11 +432,11 @@
 	"vcmi.heroWindow.openBackpack.hover" : "Otevřít okno s artefakty",
 	"vcmi.heroWindow.openBackpack.help"  : "Otevře okno, které umožňuje snadnější správu artefaktů v batohu.",
 	"vcmi.heroWindow.sortBackpackByCost.hover"  : "Seřadit podle ceny",
-	"vcmi.heroWindow.sortBackpackByCost.help"  : "Seřadí artefakty v batohu podle ceny.",
+	"vcmi.heroWindow.sortBackpackByCost.help"  : "{Seřadit podle ceny}\n\nSeřadí artefakty v batohu podle ceny.",
 	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "Seřadit podle slotu",
-	"vcmi.heroWindow.sortBackpackBySlot.help"  : "Seřadí artefakty v batohu podle přiřazeného slotu.",
+	"vcmi.heroWindow.sortBackpackBySlot.help"  : "{Seřadit podle slotu}\n\nSeřadí artefakty v batohu podle přiřazeného slotu.",
 	"vcmi.heroWindow.sortBackpackByClass.hover"  : "Seřadit podle třídy",
-	"vcmi.heroWindow.sortBackpackByClass.help"  : "Seřadí artefakty v batohu podle třídy artefaktu. Poklad, Menší, Větší, Relikvie.",
+	"vcmi.heroWindow.sortBackpackByClass.help"  : "{Seřadit podle třídy}\n\nSeřadí artefakty v batohu podle třídy artefaktu. Poklad, Menší, Větší, Relikvie.",
 	"vcmi.heroWindow.fusingArtifact.fusing" : "Máte všechny potřebné části k vytvoření %s. Chcete provést sloučení? {Při sloučení budou použity všechny části.}",
 
 	"vcmi.tavernWindow.inviteHero"  : "Pozvat hrdinu",
@@ -762,28 +771,28 @@
 	"core.bonus.MECHANICAL.name" : "Mechanický",
 	"core.bonus.PRISM_HEX_ATTACK_BREATH.name" : "Trojitý dech",
 	"core.bonus.PRISM_HEX_ATTACK_BREATH.description" : "Útok trojitým dechem (útok přes 3 směry)",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name": "Odolnost vůči kouzlům",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.air": "Odolnost vůči kouzlům vzduchu",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.fire": "Odolnost vůči kouzlům ohně",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.water": "Odolnost vůči kouzlům vody",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.earth": "Odolnost vůči kouzlům země",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description": "Poškození ze všech kouzel sníženo o ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.air": "Poškození kouzel magie vzduchu sníženo o ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.fire": "Poškození kouzel magie ohně sníženo o ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.water": "Poškození kouzel magie vody sníženo o ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.earth": "Poškození kouzel magie země sníženo o ${val}%.",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name": "Imunita vůči kouzlům",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air": "Vzdušná imunita",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire": "Ohnivá imunita",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water": "Vodní imunita",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth": "Zemská imunita",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description": "Jednotka je imunní vůči všem kouzlům.",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air": "Jednotka je imunní vůči všem kouzlům magie vzduchu.",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire": "Jednotka je imunní vůči všem kouzlům magie ohně.",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water": "Jednotka je imunní vůči všem kouzlům magie vody.",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth": "Jednotka je imunní vůči všem kouzlům magie země.",
-	"core.bonus.OPENING_BATTLE_SPELL.name": "Začíná kouzlem",
-	"core.bonus.OPENING_BATTLE_SPELL.description": "Sesílá ${subtype.spell} na začátku bitvy.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name" : "Odolnost vůči kouzlům",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.air" : "Odolnost vůči kouzlům vzduchu",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.fire" : "Odolnost vůči kouzlům ohně",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.water" : "Odolnost vůči kouzlům vody",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.earth" : "Odolnost vůči kouzlům země",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description" : "Poškození ze všech kouzel sníženo o ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.air" : "Poškození kouzel magie vzduchu sníženo o ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.fire" : "Poškození kouzel magie ohně sníženo o ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.water" : "Poškození kouzel magie vody sníženo o ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.earth" : "Poškození kouzel magie země sníženo o ${val}%.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name" : "Imunita vůči kouzlům",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air" : "Vzdušná imunita",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire" : "Ohnivá imunita",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water" : "Vodní imunita",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth" : "Zemská imunita",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "Jednotka je imunní vůči všem kouzlům.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air" : "Jednotka je imunní vůči všem kouzlům magie vzduchu.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire" : "Jednotka je imunní vůči všem kouzlům magie ohně.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water" : "Jednotka je imunní vůči všem kouzlům magie vody.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth" : "Jednotka je imunní vůči všem kouzlům magie země.",
+	"core.bonus.OPENING_BATTLE_SPELL.name" : "Začíná kouzlem",
+	"core.bonus.OPENING_BATTLE_SPELL.description" : "Sesílá ${subtype.spell} na začátku bitvy.",
 	
 	"spell.core.castleMoat.name" : "Hradní příkop",
 	"spell.core.castleMoatTrigger.name" : "Hradní příkop",

+ 231 - 220
Mods/vcmi/Content/config/english.json

@@ -23,16 +23,16 @@
 	"vcmi.adventureMap.noTownWithTavern"                 : "There are no available towns with taverns!",
 	"vcmi.adventureMap.spellUnknownProblem"              : "There is an unknown problem with this spell! No more information is available.",
 	"vcmi.adventureMap.playerAttacked"                   : "Player has been attacked: %s",
-	"vcmi.adventureMap.moveCostDetails"                  : "Movement points - Cost: %TURNS turns + %POINTS points, Remaining points: %REMAINING",
-	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Movement points - Cost: %POINTS points, Remaining points: %REMAINING",
-	"vcmi.adventureMap.movementPointsHeroInfo" 			 : "(Movement points: %REMAINING / %POINTS)",
+	"vcmi.adventureMap.moveCostDetails"                  : "Moving here will cost {%TOTAL} points in total ({%TURNS} turns and {%POINTS} points). {%REMAINING} points will remain after moving.",
+	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Moving here will cost {%POINTS} points. {%REMAINING} points will remain after moving.",
+	"vcmi.adventureMap.movementPointsHeroInfo"           : "(Movement points: %REMAINING / %POINTS)",
 	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Sorry, replay opponent turn is not implemented yet!",
 
 	"vcmi.bonusSource.artifact" : "Artifact",
 	"vcmi.bonusSource.creature" : "Ability",
 	"vcmi.bonusSource.spell" : "Spell",
 	"vcmi.bonusSource.hero" : "Hero",
-	"vcmi.bonusSource.commander" : "Commander",
+	"vcmi.bonusSource.commander" : "Command.",
 	"vcmi.bonusSource.other" : "Other",
 
 	"vcmi.capitalColors.0" : "Red",
@@ -68,6 +68,7 @@
 	"vcmi.radialWheel.heroGetArtifacts" : "Get artifacts from other hero",
 	"vcmi.radialWheel.heroSwapArtifacts" : "Swap artifacts with other hero",
 	"vcmi.radialWheel.heroDismiss" : "Dismiss hero",
+	"vcmi.radialWheel.upgradeCreatures" : "Upgrade all creatures",
 
 	"vcmi.radialWheel.moveTop" : "Move to top",
 	"vcmi.radialWheel.moveUp" : "Move up",
@@ -177,7 +178,8 @@
 	"vcmi.lobby.match.solo" : "Singleplayer Game",
 	"vcmi.lobby.match.duel" : "Game with %s", // %s -> nickname of another player
 	"vcmi.lobby.match.multi" : "%d players",
-	"vcmi.lobby.room.create" : "Create New Room",
+	"vcmi.lobby.room.create.hover" : "Create New Room",
+	"vcmi.lobby.room.create.help" : "Create a new room in the online lobby that other players can join.",
 	"vcmi.lobby.room.players.limit" : "Players Limit",
 	"vcmi.lobby.room.description.public" : "Any player can join public room.",
 	"vcmi.lobby.room.description.private" : "Only invited players can join private room.",
@@ -200,6 +202,8 @@
 	"vcmi.lobby.preview.error.mods" : "You are using different set of mods.",
 	"vcmi.lobby.preview.error.version" : "You are using different version of VCMI.",
 	"vcmi.lobby.channel.add" : "Add Channel",
+	"vcmi.lobby.channel.sendMessage.hover" : "Send message",
+	"vcmi.lobby.channel.sendMessage.help" : "Send message",
 	"vcmi.lobby.room.new" : "New Game",
 	"vcmi.lobby.room.load" : "Load Game",
 	"vcmi.lobby.room.type" : "Room Type",
@@ -306,6 +310,8 @@
 	"vcmi.systemOptions.enableLargeSpellbookButton.help"   : "{Large Spell Book}\n\nEnables larger spell book that fits more spells per page. Spell book page change animation does not work with this setting enabled.",
 	"vcmi.systemOptions.audioMuteFocus.hover"  : "Mute on inactivity",
 	"vcmi.systemOptions.audioMuteFocus.help"   : "{Mute on inactivity}\n\nMute audio on inactive window focus. Exceptions are ingame messages and new turn sound.",
+	"vcmi.systemOptions.enableOverlayButton.hover"  : "Enable Overlay",
+	"vcmi.systemOptions.enableOverlayButton.help"   : "{Enable Overlay}\n\nEnable overlays for showing additional infos such as building names using the ALT key or the two finger gesture.",
 
 	"vcmi.adventureOptions.infoBarPick.hover" : "Show Messages in Info Panel",
 	"vcmi.adventureOptions.infoBarPick.help" : "{Show Messages in Info Panel}\n\nWhenever possible, game messages from visiting map objects will be shown in the info panel, instead of popping up in a separate window.",
@@ -327,42 +333,44 @@
 	"vcmi.adventureOptions.smoothDragging.help" : "{Smooth Map Dragging}\n\nWhen enabled, map dragging has a modern run out effect.",
 	"vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Skip fading effects",
 	"vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Skip fading effects}\n\nWhen enabled, Skips object fadeout and similar effects (resource collection, ship embark etc). Makes UI more reactive in some cases at the expense of aesthetics. Especially useful in PvP games. For maximum movement speed skipping is active regardless of this setting.",
-	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
-	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
-	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
-	"vcmi.adventureOptions.mapScrollSpeed1.help": "Set the map scrolling speed to very slow.",
-	"vcmi.adventureOptions.mapScrollSpeed5.help": "Set the map scrolling speed to very fast.",
-	"vcmi.adventureOptions.mapScrollSpeed6.help": "Set the map scrolling speed to instantaneous.",
+	"vcmi.adventureOptions.mapScrollSpeed1.hover" : "",
+	"vcmi.adventureOptions.mapScrollSpeed5.hover" : "",
+	"vcmi.adventureOptions.mapScrollSpeed6.hover" : "",
+	"vcmi.adventureOptions.mapScrollSpeed1.help" : "Set the map scrolling speed to very slow.",
+	"vcmi.adventureOptions.mapScrollSpeed5.help" : "Set the map scrolling speed to very fast.",
+	"vcmi.adventureOptions.mapScrollSpeed6.help" : "Set the map scrolling speed to instantaneous.",
 	"vcmi.adventureOptions.hideBackground.hover" : "Hide Background",
 	"vcmi.adventureOptions.hideBackground.help" : "{Hide Background}\n\nHide the adventuremap in the background and show a texture instead.",
 
-	"vcmi.battleOptions.queueSizeLabel.hover": "Show Turn Order Queue",
-	"vcmi.battleOptions.queueSizeNoneButton.hover": "OFF",
-	"vcmi.battleOptions.queueSizeAutoButton.hover": "AUTO",
-	"vcmi.battleOptions.queueSizeSmallButton.hover": "SMALL",
-	"vcmi.battleOptions.queueSizeBigButton.hover": "BIG",
-	"vcmi.battleOptions.queueSizeNoneButton.help": "Do not display Turn Order Queue.",
-	"vcmi.battleOptions.queueSizeAutoButton.help": "Automatically adjust the size of the turn order queue based on the game's resolution(SMALL size is used when playing the game on a resolution with a height lower than 700 pixels, BIG size is used otherwise).",
-	"vcmi.battleOptions.queueSizeSmallButton.help": "Sets turn order queue size to SMALL.",
-	"vcmi.battleOptions.queueSizeBigButton.help": "Sets turn order queue size to BIG (not supported if game resolution height is less than 700 pixels).",
-	"vcmi.battleOptions.animationsSpeed1.hover": "",
-	"vcmi.battleOptions.animationsSpeed5.hover": "",
-	"vcmi.battleOptions.animationsSpeed6.hover": "",
-	"vcmi.battleOptions.animationsSpeed1.help": "Set animation speed to very slow.",
-	"vcmi.battleOptions.animationsSpeed5.help": "Set animation speed to very fast.",
-	"vcmi.battleOptions.animationsSpeed6.help": "Set animation speed to instantaneous.",
-	"vcmi.battleOptions.movementHighlightOnHover.hover": "Movement Highlight on Hover",
-	"vcmi.battleOptions.movementHighlightOnHover.help": "{Movement Highlight on Hover}\n\nHighlight unit's movement range when you hover over it.",
-	"vcmi.battleOptions.rangeLimitHighlightOnHover.hover": "Show range limits for shooters",
-	"vcmi.battleOptions.rangeLimitHighlightOnHover.help": "{Show range limits for shooters on Hover}\n\nShow shooter's range limits when you hover over it.",
-	"vcmi.battleOptions.showStickyHeroInfoWindows.hover": "Show heroes statistics windows",
-	"vcmi.battleOptions.showStickyHeroInfoWindows.help": "{Show heroes statistics windows}\n\nPermanently toggle on heroes statistics windows that show primary stats and spell points.",
-	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Skip Intro Music",
-	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Skip Intro Music}\n\nAllow actions during the intro music that plays at the beginning of each battle.",	
-	"vcmi.battleOptions.endWithAutocombat.hover": "Ends battle",
-	"vcmi.battleOptions.endWithAutocombat.help": "{Ends battle}\n\nAuto-Combat plays battle to end instant",
-	"vcmi.battleOptions.showQuickSpell.hover": "Show Quickspell panel",
-	"vcmi.battleOptions.showQuickSpell.help": "{Show Quickspell panel}\n\nShow panel for quick selecting spells",
+	"vcmi.battleOptions.queueSizeLabel.hover" : "Show Turn Order Queue",
+	"vcmi.battleOptions.queueSizeNoneButton.hover" : "OFF",
+	"vcmi.battleOptions.queueSizeAutoButton.hover" : "AUTO",
+	"vcmi.battleOptions.queueSizeSmallButton.hover" : "SMALL",
+	"vcmi.battleOptions.queueSizeBigButton.hover" : "BIG",
+	"vcmi.battleOptions.queueSizeNoneButton.help" : "Do not display Turn Order Queue.",
+	"vcmi.battleOptions.queueSizeAutoButton.help" : "Automatically adjust the size of the turn order queue based on the game's resolution(SMALL size is used when playing the game on a resolution with a height lower than 700 pixels, BIG size is used otherwise).",
+	"vcmi.battleOptions.queueSizeSmallButton.help" : "Sets turn order queue size to SMALL.",
+	"vcmi.battleOptions.queueSizeBigButton.help" : "Sets turn order queue size to BIG (not supported if game resolution height is less than 700 pixels).",
+	"vcmi.battleOptions.animationsSpeed1.hover" : "",
+	"vcmi.battleOptions.animationsSpeed5.hover" : "",
+	"vcmi.battleOptions.animationsSpeed6.hover" : "",
+	"vcmi.battleOptions.animationsSpeed1.help" : "Set animation speed to very slow.",
+	"vcmi.battleOptions.animationsSpeed5.help" : "Set animation speed to very fast.",
+	"vcmi.battleOptions.animationsSpeed6.help" : "Set animation speed to instantaneous.",
+	"vcmi.battleOptions.movementHighlightOnHover.hover" : "Movement Highlight on Hover",
+	"vcmi.battleOptions.movementHighlightOnHover.help" : "{Movement Highlight on Hover}\n\nHighlight unit's movement range when you hover over it.",
+	"vcmi.battleOptions.rangeLimitHighlightOnHover.hover" : "Show range limits for shooters",
+	"vcmi.battleOptions.rangeLimitHighlightOnHover.help" : "{Show range limits for shooters on Hover}\n\nShow shooter's range limits when you hover over it.",
+	"vcmi.battleOptions.showStickyHeroInfoWindows.hover" : "Show heroes statistics windows",
+	"vcmi.battleOptions.showStickyHeroInfoWindows.help" : "{Show heroes statistics windows}\n\nPermanently toggle on heroes statistics windows that show primary stats and spell points.",
+	"vcmi.battleOptions.skipBattleIntroMusic.hover" : "Skip Intro Music",
+	"vcmi.battleOptions.skipBattleIntroMusic.help" : "{Skip Intro Music}\n\nAllow actions during the intro music that plays at the beginning of each battle.",	
+	"vcmi.battleOptions.endWithAutocombat.hover" : "Ends battle",
+	"vcmi.battleOptions.endWithAutocombat.help" : "{Ends battle}\n\nAuto-Combat plays battle to end instant",
+	"vcmi.battleOptions.showQuickSpell.hover" : "Show Quickspell panel",
+	"vcmi.battleOptions.showQuickSpell.help" : "{Show Quickspell panel}\n\nShow panel for quick selecting spells",
+	"vcmi.battleOptions.showHealthBar.hover" : "Show health bar",
+	"vcmi.battleOptions.showHealthBar.help" : "{Show health bar}\n\nShow health bar indicating remaining health before one unit dies.",	
 
 	"vcmi.adventureMap.revisitObject.hover" : "Revisit Object",
 	"vcmi.adventureMap.revisitObject.help" : "{Revisit Object}\n\nIf a hero currently stands on a Map Object, he can revisit the location.",
@@ -406,8 +414,8 @@
 	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Show Available Creatures}\n\nShow the number of creatures available to purchase instead of their growth in town summary (bottom-left corner of town screen).",
 	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Show Weekly Growth of Creatures",
 	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Show Weekly Growth of Creatures}\n\nShow creatures' weekly growth instead of available amount in town summary (bottom-left corner of town screen).",
-	"vcmi.otherOptions.compactTownCreatureInfo.hover": "Compact Creature Info",
-	"vcmi.otherOptions.compactTownCreatureInfo.help": "{Compact Creature Info}\n\nShow smaller information for town creatures in town summary (bottom-left corner of town screen).",
+	"vcmi.otherOptions.compactTownCreatureInfo.hover" : "Compact Creature Info",
+	"vcmi.otherOptions.compactTownCreatureInfo.help" : "{Compact Creature Info}\n\nShow smaller information for town creatures in town summary (bottom-left corner of town screen).",
 
 	"vcmi.townHall.missingBase"             : "Base building %s must be built first",
 	"vcmi.townHall.noCreaturesToRecruit"    : "There are no creatures to recruit!",
@@ -415,6 +423,9 @@
 	"vcmi.townStructure.bank.borrow" : "You enter the bank. A banker sees you and says: \"We have made a special offer for you. You can take a loan of 2500 gold from us for 5 days. You will have to repay 500 gold every day.\"",
 	"vcmi.townStructure.bank.payBack" : "You enter the bank. A banker sees you and says: \"You have already got your loan. Pay it back before taking a new one.\"",
 
+	"vcmi.townWindow.upgradeAll.notAllUpgradable" : "Not enough resources to upgrade all creatures. Do you want to upgrade following creatures?",
+	"vcmi.townWindow.upgradeAll.notUpgradable" : "Not enough resources to upgrade any creature.",
+
 	"vcmi.logicalExpressions.anyOf"  : "Any of the following:",
 	"vcmi.logicalExpressions.allOf"  : "All of the following:",
 	"vcmi.logicalExpressions.noneOf" : "None of the following:",
@@ -423,12 +434,12 @@
 	"vcmi.heroWindow.openCommander.help"  : "Shows details about the commander of this hero.",
 	"vcmi.heroWindow.openBackpack.hover" : "Open artifact backpack window",
 	"vcmi.heroWindow.openBackpack.help"  : "Opens window that allows easier artifact backpack management.",
-	"vcmi.heroWindow.sortBackpackByCost.hover"  : "Sort by cost",
-	"vcmi.heroWindow.sortBackpackByCost.help"  : "Sort artifacts in backpack by cost.",
-	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "Sort by slot",
-	"vcmi.heroWindow.sortBackpackBySlot.help"  : "Sort artifacts in backpack by equipped slot.",
-	"vcmi.heroWindow.sortBackpackByClass.hover"  : "Sort by class",
-	"vcmi.heroWindow.sortBackpackByClass.help"  : "Sort artifacts in backpack by artifact class. Treasure, Minor, Major, Relic",
+	"vcmi.heroWindow.sortBackpackByCost.hover"  : "By value",
+	"vcmi.heroWindow.sortBackpackByCost.help"  : "{Sort by cost}\n\nSort artifacts in backpack by cost.",
+	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "By slot",
+	"vcmi.heroWindow.sortBackpackBySlot.help"  : "{Sort by slot}\n\nSort artifacts in backpack by equipped slot.",
+	"vcmi.heroWindow.sortBackpackByClass.hover"  : "By class",
+	"vcmi.heroWindow.sortBackpackByClass.help"  : "{Sort by class}\n\nSort artifacts in backpack by artifact class. Treasure, Minor, Major, Relic",
 	"vcmi.heroWindow.fusingArtifact.fusing" : "You possess all of the components needed for the fusion of the %s. Do you wish to perform the fusion? {All components will be consumed upon fusion.}",
 
 	"vcmi.tavernWindow.inviteHero"  : "Invite hero",
@@ -609,182 +620,182 @@
 	
 	"mapObject.core.hillFort.object.description" : "Upgrades creatures. Levels 1 - 4 are less expensive than in associated town.",
 	
-	"core.bonus.ADDITIONAL_ATTACK.name": "Double Strike",
-	"core.bonus.ADDITIONAL_ATTACK.description": "Attacks twice",
-	"core.bonus.ADDITIONAL_RETALIATION.name": "Additional retaliations",
-	"core.bonus.ADDITIONAL_RETALIATION.description": "May retaliate ${val} extra times",
-	"core.bonus.AIR_IMMUNITY.name": "Air immunity",
-	"core.bonus.AIR_IMMUNITY.description": "Immune to all spells from the school of Air magic",
-	"core.bonus.ATTACKS_ALL_ADJACENT.name": "Attack all around",
-	"core.bonus.ATTACKS_ALL_ADJACENT.description": "Attacks all adjacent enemies",
-	"core.bonus.BLOCKS_RETALIATION.name": "No retaliation",
-	"core.bonus.BLOCKS_RETALIATION.description": "Enemy cannot retaliate",
-	"core.bonus.BLOCKS_RANGED_RETALIATION.name": "No ranged retaliation",
-	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "Enemy cannot retaliate by using a ranged attack",
-	"core.bonus.CATAPULT.name": "Catapult",
-	"core.bonus.CATAPULT.description": "Attacks siege walls",
-	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Reduce Casting Cost (${val})",
-	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Reduces the spellcasting cost for the hero by ${val}",
-	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Magic Damper (${val})",
-	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.description": "Increases spellcasting cost of enemy spells by ${val}",
-	"core.bonus.CHARGE_IMMUNITY.name": "Immune to Charge",
-	"core.bonus.CHARGE_IMMUNITY.description": "Immune to Cavalier's and Champion's Charge",
-	"core.bonus.DARKNESS.name": "Darkness cover",
-	"core.bonus.DARKNESS.description": "Creates a shroud of darkness with a ${val} radius",
-	"core.bonus.DEATH_STARE.name": "Death Stare (${val}%)",
-	"core.bonus.DEATH_STARE.description": "Has a ${val}% chance to kill a single creature",
-	"core.bonus.DEFENSIVE_STANCE.name": "Defense Bonus",
-	"core.bonus.DEFENSIVE_STANCE.description": "+${val} Defense when defending",
-	"core.bonus.DESTRUCTION.name": "Destruction",
-	"core.bonus.DESTRUCTION.description": "Has ${val}% chance to kill extra units after attack",
-	"core.bonus.DOUBLE_DAMAGE_CHANCE.name": "Death Blow",
-	"core.bonus.DOUBLE_DAMAGE_CHANCE.description": "Has a ${val}% chance of dealing double base damage when attacking",
-	"core.bonus.DRAGON_NATURE.name": "Dragon",
-	"core.bonus.DRAGON_NATURE.description": "Creature has a Dragon Nature",
-	"core.bonus.EARTH_IMMUNITY.name": "Earth immunity",
-	"core.bonus.EARTH_IMMUNITY.description": "Immune to all spells from the school of Earth magic",
-	"core.bonus.ENCHANTER.name": "Enchanter",
-	"core.bonus.ENCHANTER.description": "Can cast mass ${subtype.spell} every turn",
-	"core.bonus.ENCHANTED.name": "Enchanted",
-	"core.bonus.ENCHANTED.description": "Affected by permanent ${subtype.spell}",
-	"core.bonus.ENEMY_ATTACK_REDUCTION.name": "Ignore Attack (${val}%)",
-	"core.bonus.ENEMY_ATTACK_REDUCTION.description": "When being attacked, ${val}% of the attacker's attack is ignored",
-	"core.bonus.ENEMY_DEFENCE_REDUCTION.name": "Ignore Defense (${val}%)",
-	"core.bonus.ENEMY_DEFENCE_REDUCTION.description": "When attacking, ${val}% of the defender's defense is ignored",
-	"core.bonus.FIRE_IMMUNITY.name": "Fire immunity",
-	"core.bonus.FIRE_IMMUNITY.description": "Immune to all spells from the school of Fire magic",
-	"core.bonus.FIRE_SHIELD.name": "Fire Shield (${val}%)",
-	"core.bonus.FIRE_SHIELD.description": "Reflects part of melee damage",
-	"core.bonus.FIRST_STRIKE.name": "First Strike",
-	"core.bonus.FIRST_STRIKE.description": "This creature retaliates before being attacked",
-	"core.bonus.FEAR.name": "Fear",
-	"core.bonus.FEAR.description": "Causes Fear on an enemy stack",
-	"core.bonus.FEARLESS.name": "Fearless",
-	"core.bonus.FEARLESS.description": "Immune to Fear ability",
-	"core.bonus.FEROCITY.name": "Ferocity",
-	"core.bonus.FEROCITY.description": "Attacks ${val} additional times if killed anybody",
-	"core.bonus.FLYING.name": "Fly",
-	"core.bonus.FLYING.description": "Flies when moving (ignores obstacles)",
-	"core.bonus.FREE_SHOOTING.name": "Shoot Close",
-	"core.bonus.FREE_SHOOTING.description": "Can use ranged attacks at melee range",
-	"core.bonus.GARGOYLE.name": "Gargoyle",
-	"core.bonus.GARGOYLE.description": "Cannot be raised or healed",
-	"core.bonus.GENERAL_DAMAGE_REDUCTION.name": "Reduce Damage (${val}%)",
-	"core.bonus.GENERAL_DAMAGE_REDUCTION.description": "Reduces physical damage from ranged or melee attacks",
-	"core.bonus.HATE.name": "Hates ${subtype.creature}",
-	"core.bonus.HATE.description": "Does ${val}% more damage to ${subtype.creature}",
-	"core.bonus.HEALER.name": "Healer",
-	"core.bonus.HEALER.description": "Heals allied units",
-	"core.bonus.HP_REGENERATION.name": "Regeneration",
-	"core.bonus.HP_REGENERATION.description": "Heals ${val} hit points every round",
-	"core.bonus.JOUSTING.name": "Champion charge",
-	"core.bonus.JOUSTING.description": "+${val}% damage for each hex travelled",
-	"core.bonus.KING.name": "King",
-	"core.bonus.KING.description": "Vulnerable to SLAYER level ${val} or higher",
-	"core.bonus.LEVEL_SPELL_IMMUNITY.name": "Spell immunity 1-${val}",
-	"core.bonus.LEVEL_SPELL_IMMUNITY.description": "Immune to spells of levels 1-${val}",
+	"core.bonus.ADDITIONAL_ATTACK.name" : "Double Strike",
+	"core.bonus.ADDITIONAL_ATTACK.description" : "Attacks twice",
+	"core.bonus.ADDITIONAL_RETALIATION.name" : "Additional retaliations",
+	"core.bonus.ADDITIONAL_RETALIATION.description" : "May retaliate ${val} extra times",
+	"core.bonus.AIR_IMMUNITY.name" : "Air immunity",
+	"core.bonus.AIR_IMMUNITY.description" : "Immune to all spells from the school of Air magic",
+	"core.bonus.ATTACKS_ALL_ADJACENT.name" : "Attack all around",
+	"core.bonus.ATTACKS_ALL_ADJACENT.description" : "Attacks all adjacent enemies",
+	"core.bonus.BLOCKS_RETALIATION.name" : "No retaliation",
+	"core.bonus.BLOCKS_RETALIATION.description" : "Enemy cannot retaliate",
+	"core.bonus.BLOCKS_RANGED_RETALIATION.name" : "No ranged retaliation",
+	"core.bonus.BLOCKS_RANGED_RETALIATION.description" : "Enemy cannot retaliate by using a ranged attack",
+	"core.bonus.CATAPULT.name" : "Catapult",
+	"core.bonus.CATAPULT.description" : "Attacks siege walls",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name" : "Reduce Casting Cost (${val})",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description" : "Reduces the spellcasting cost for the hero by ${val}",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name" : "Magic Damper (${val})",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.description" : "Increases spellcasting cost of enemy spells by ${val}",
+	"core.bonus.CHARGE_IMMUNITY.name" : "Immune to Charge",
+	"core.bonus.CHARGE_IMMUNITY.description" : "Immune to Cavalier's and Champion's Charge",
+	"core.bonus.DARKNESS.name" : "Darkness cover",
+	"core.bonus.DARKNESS.description" : "Creates a shroud of darkness with a ${val} radius",
+	"core.bonus.DEATH_STARE.name" : "Death Stare (${val}%)",
+	"core.bonus.DEATH_STARE.description" : "Has a ${val}% chance to kill a single creature",
+	"core.bonus.DEFENSIVE_STANCE.name" : "Defense Bonus",
+	"core.bonus.DEFENSIVE_STANCE.description" : "+${val} Defense when defending",
+	"core.bonus.DESTRUCTION.name" : "Destruction",
+	"core.bonus.DESTRUCTION.description" : "Has ${val}% chance to kill extra units after attack",
+	"core.bonus.DOUBLE_DAMAGE_CHANCE.name" : "Death Blow",
+	"core.bonus.DOUBLE_DAMAGE_CHANCE.description" : "Has a ${val}% chance of dealing double base damage when attacking",
+	"core.bonus.DRAGON_NATURE.name" : "Dragon",
+	"core.bonus.DRAGON_NATURE.description" : "Creature has a Dragon Nature",
+	"core.bonus.EARTH_IMMUNITY.name" : "Earth immunity",
+	"core.bonus.EARTH_IMMUNITY.description" : "Immune to all spells from the school of Earth magic",
+	"core.bonus.ENCHANTER.name" : "Enchanter",
+	"core.bonus.ENCHANTER.description" : "Can cast mass ${subtype.spell} every turn",
+	"core.bonus.ENCHANTED.name" : "Enchanted",
+	"core.bonus.ENCHANTED.description" : "Affected by permanent ${subtype.spell}",
+	"core.bonus.ENEMY_ATTACK_REDUCTION.name" : "Ignore Attack (${val}%)",
+	"core.bonus.ENEMY_ATTACK_REDUCTION.description" : "When being attacked, ${val}% of the attacker's attack is ignored",
+	"core.bonus.ENEMY_DEFENCE_REDUCTION.name" : "Ignore Defense (${val}%)",
+	"core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "When attacking, ${val}% of the defender's defense is ignored",
+	"core.bonus.FIRE_IMMUNITY.name" : "Fire immunity",
+	"core.bonus.FIRE_IMMUNITY.description" : "Immune to all spells from the school of Fire magic",
+	"core.bonus.FIRE_SHIELD.name" : "Fire Shield (${val}%)",
+	"core.bonus.FIRE_SHIELD.description" : "Reflects part of melee damage",
+	"core.bonus.FIRST_STRIKE.name" : "First Strike",
+	"core.bonus.FIRST_STRIKE.description" : "This creature retaliates before being attacked",
+	"core.bonus.FEAR.name" : "Fear",
+	"core.bonus.FEAR.description" : "Causes Fear on an enemy stack",
+	"core.bonus.FEARLESS.name" : "Fearless",
+	"core.bonus.FEARLESS.description" : "Immune to Fear ability",
+	"core.bonus.FEROCITY.name" : "Ferocity",
+	"core.bonus.FEROCITY.description" : "Attacks ${val} additional times if killed anybody",
+	"core.bonus.FLYING.name" : "Fly",
+	"core.bonus.FLYING.description" : "Flies when moving (ignores obstacles)",
+	"core.bonus.FREE_SHOOTING.name" : "Shoot Close",
+	"core.bonus.FREE_SHOOTING.description" : "Can use ranged attacks at melee range",
+	"core.bonus.GARGOYLE.name" : "Gargoyle",
+	"core.bonus.GARGOYLE.description" : "Cannot be raised or healed",
+	"core.bonus.GENERAL_DAMAGE_REDUCTION.name" : "Reduce Damage (${val}%)",
+	"core.bonus.GENERAL_DAMAGE_REDUCTION.description" : "Reduces physical damage from ranged or melee attacks",
+	"core.bonus.HATE.name" : "Hates ${subtype.creature}",
+	"core.bonus.HATE.description" : "Does ${val}% more damage to ${subtype.creature}",
+	"core.bonus.HEALER.name" : "Healer",
+	"core.bonus.HEALER.description" : "Heals allied units",
+	"core.bonus.HP_REGENERATION.name" : "Regeneration",
+	"core.bonus.HP_REGENERATION.description" : "Heals ${val} hit points every round",
+	"core.bonus.JOUSTING.name" : "Champion charge",
+	"core.bonus.JOUSTING.description" : "+${val}% damage for each hex travelled",
+	"core.bonus.KING.name" : "King",
+	"core.bonus.KING.description" : "Vulnerable to SLAYER level ${val} or higher",
+	"core.bonus.LEVEL_SPELL_IMMUNITY.name" : "Spell immunity 1-${val}",
+	"core.bonus.LEVEL_SPELL_IMMUNITY.description" : "Immune to spells of levels 1-${val}",
 	"core.bonus.LIMITED_SHOOTING_RANGE.name" : "Limited shooting range",
 	"core.bonus.LIMITED_SHOOTING_RANGE.description" : "Unable to target units farther than ${val} hexes",
-	"core.bonus.LIFE_DRAIN.name": "Drain life (${val}%)",
-	"core.bonus.LIFE_DRAIN.description": "Drains ${val}% of damage dealt",
-	"core.bonus.MANA_CHANNELING.name": "Magic Channel ${val}%",
-	"core.bonus.MANA_CHANNELING.description": "Gives your hero ${val}% of the mana spent by the enemy",
-	"core.bonus.MANA_DRAIN.name": "Mana Drain",
-	"core.bonus.MANA_DRAIN.description": "Drains ${val} mana every turn",
-	"core.bonus.MAGIC_MIRROR.name": "Magic Mirror (${val}%)",
-	"core.bonus.MAGIC_MIRROR.description": "Has a ${val}% chance to redirect an offensive spell to an enemy unit",
-	"core.bonus.MAGIC_RESISTANCE.name": "Magic Resistance (${val}%)",
-	"core.bonus.MAGIC_RESISTANCE.description": "Has a ${val}% chance to resist an enemy spell",
-	"core.bonus.MIND_IMMUNITY.name": "Mind Spell Immunity",
-	"core.bonus.MIND_IMMUNITY.description": "Immune to Mind-type spells",
-	"core.bonus.NO_DISTANCE_PENALTY.name": "No distance penalty",
-	"core.bonus.NO_DISTANCE_PENALTY.description": "Does full damage at any distance",
-	"core.bonus.NO_MELEE_PENALTY.name": "No melee penalty",
-	"core.bonus.NO_MELEE_PENALTY.description": "Creature has no Melee Penalty",
-	"core.bonus.NO_MORALE.name": "Neutral Morale",
-	"core.bonus.NO_MORALE.description": "Creature is immune to morale effects",
-	"core.bonus.NO_WALL_PENALTY.name": "No wall penalty",
-	"core.bonus.NO_WALL_PENALTY.description": "Full damage during siege",
-	"core.bonus.NON_LIVING.name": "Non living",
-	"core.bonus.NON_LIVING.description": "Immunity to many effects",
-	"core.bonus.RANDOM_SPELLCASTER.name": "Random spellcaster",
-	"core.bonus.RANDOM_SPELLCASTER.description": "Can cast random spell",
-	"core.bonus.RANGED_RETALIATION.name": "Ranged retaliation",
-	"core.bonus.RANGED_RETALIATION.description": "Can perform ranged counterattack",
-	"core.bonus.RECEPTIVE.name": "Receptive",
-	"core.bonus.RECEPTIVE.description": "No Immunity to Friendly Spells",
-	"core.bonus.REBIRTH.name": "Rebirth (${val}%)",
-	"core.bonus.REBIRTH.description": "${val}% of stack will rise after death",
-	"core.bonus.RETURN_AFTER_STRIKE.name": "Attack and Return",
-	"core.bonus.RETURN_AFTER_STRIKE.description": "Returns after melee attack",
-	"core.bonus.REVENGE.name": "Revenge",
-	"core.bonus.REVENGE.description": "Deals extra damage based on attacker's lost health in battle",
-	"core.bonus.SHOOTER.name": "Ranged",
-	"core.bonus.SHOOTER.description": "Creature can shoot",
-	"core.bonus.SHOOTS_ALL_ADJACENT.name": "Shoot all around",
-	"core.bonus.SHOOTS_ALL_ADJACENT.description": "This creature's ranged attacks strike all targets in a small area",
-	"core.bonus.SOUL_STEAL.name": "Soul Steal",
-	"core.bonus.SOUL_STEAL.description": "Gains ${val} new creatures for each enemy killed",
-	"core.bonus.SPELLCASTER.name": "Spellcaster",
-	"core.bonus.SPELLCASTER.description": "Can cast ${subtype.spell}",
-	"core.bonus.SPELL_AFTER_ATTACK.name": "Cast After Attack",
-	"core.bonus.SPELL_AFTER_ATTACK.description": "Has a ${val}% chance to cast ${subtype.spell} after it attacks",
-	"core.bonus.SPELL_BEFORE_ATTACK.name": "Cast Before Attack",
-	"core.bonus.SPELL_BEFORE_ATTACK.description": "Has a ${val}% chance to cast ${subtype.spell} before it attacks",
-	"core.bonus.SPELL_IMMUNITY.name": "Spell immunity",
-	"core.bonus.SPELL_IMMUNITY.description": "Immune to ${subtype.spell}",
-	"core.bonus.SPELL_LIKE_ATTACK.name": "Spell-like attack",
-	"core.bonus.SPELL_LIKE_ATTACK.description": "Attacks with ${subtype.spell}",
-	"core.bonus.SPELL_RESISTANCE_AURA.name": "Aura of Resistance",
-	"core.bonus.SPELL_RESISTANCE_AURA.description": "Nearby stacks get ${val}% magic resistance",
-	"core.bonus.SUMMON_GUARDIANS.name": "Summon guardians",
-	"core.bonus.SUMMON_GUARDIANS.description": "At the start of battle summons ${subtype.creature} (${val}%)",
-	"core.bonus.SYNERGY_TARGET.name": "Synergizable",
-	"core.bonus.SYNERGY_TARGET.description": "This creature is vulnerable to synergy effect",
-	"core.bonus.TWO_HEX_ATTACK_BREATH.name": "Breath",
-	"core.bonus.TWO_HEX_ATTACK_BREATH.description": "Breath Attack (2-hex range)",
-	"core.bonus.THREE_HEADED_ATTACK.name": "Three-headed attack",
-	"core.bonus.THREE_HEADED_ATTACK.description": "Attacks three adjacent units",
-	"core.bonus.TRANSMUTATION.name": "Transmutation",
-	"core.bonus.TRANSMUTATION.description": "${val}% chance to transform attacked unit to a different type",
-	"core.bonus.UNDEAD.name": "Undead",
-	"core.bonus.UNDEAD.description": "Creature is Undead",
-	"core.bonus.UNLIMITED_RETALIATIONS.name": "Unlimited retaliations",
-	"core.bonus.UNLIMITED_RETALIATIONS.description": "Can retaliate against an unlimited number of attacks",
-	"core.bonus.WATER_IMMUNITY.name": "Water immunity",
-	"core.bonus.WATER_IMMUNITY.description": "Immune to all spells from the school of Water magic",
-	"core.bonus.WIDE_BREATH.name": "Wide breath",
-	"core.bonus.WIDE_BREATH.description": "Wide breath attack (multiple hexes)",
-	"core.bonus.DISINTEGRATE.name": "Disintegrate",
-	"core.bonus.DISINTEGRATE.description": "No corpse remains after death",
-	"core.bonus.INVINCIBLE.name": "Invincible",
-	"core.bonus.INVINCIBLE.description": "Cannot be affected by anything",
-	"core.bonus.MECHANICAL.name": "Mechanical",
-	"core.bonus.MECHANICAL.description": "Immunity to many effects, repairable",
-	"core.bonus.PRISM_HEX_ATTACK_BREATH.name": "Prism Breath",
-	"core.bonus.PRISM_HEX_ATTACK_BREATH.description": "Prism Breath Attack (three directions)",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name": "Spell Resistance",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.air": "Air Spells Resistance",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.fire": "Fire Spells Resistance",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.water": "Water Spells Resistance",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.name.earth": "Earth Spells Resistance",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description": "Damage from all spells reduced by ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.air": "Damage from all Air spells reduced by ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.fire": "Damage from all Fire spells reduced by ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.water": "Damage from all Water spells reduced by ${val}%.",
-	"core.bonus.SPELL_DAMAGE_REDUCTION.description.earth": "Damage from all Earth spells reduced by ${val}%.",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name": "Spell immunity",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air": "Air immunity",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire": "Fire immunity",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water": "Water immunity",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth": "Earth immunity",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description": "This unit is immune to all spells",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air": "This unit is immune to all Air school spells",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire": "This unit is immune to all Fire school spells",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water": "This unit is immune to all Water school spells",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth": "This unit is immune to all Earth school spells",
-	"core.bonus.OPENING_BATTLE_SPELL.name": "Starts with spell",
-	"core.bonus.OPENING_BATTLE_SPELL.description": "Casts ${subtype.spell} on battle start",
+	"core.bonus.LIFE_DRAIN.name" : "Drain life (${val}%)",
+	"core.bonus.LIFE_DRAIN.description" : "Drains ${val}% of damage dealt",
+	"core.bonus.MANA_CHANNELING.name" : "Magic Channel ${val}%",
+	"core.bonus.MANA_CHANNELING.description" : "Gives your hero ${val}% of the mana spent by the enemy",
+	"core.bonus.MANA_DRAIN.name" : "Mana Drain",
+	"core.bonus.MANA_DRAIN.description" : "Drains ${val} mana every turn",
+	"core.bonus.MAGIC_MIRROR.name" : "Magic Mirror (${val}%)",
+	"core.bonus.MAGIC_MIRROR.description" : "Has a ${val}% chance to redirect an offensive spell to an enemy unit",
+	"core.bonus.MAGIC_RESISTANCE.name" : "Magic Resistance (${val}%)",
+	"core.bonus.MAGIC_RESISTANCE.description" : "Has a ${val}% chance to resist an enemy spell",
+	"core.bonus.MIND_IMMUNITY.name" : "Mind Spell Immunity",
+	"core.bonus.MIND_IMMUNITY.description" : "Immune to Mind-type spells",
+	"core.bonus.NO_DISTANCE_PENALTY.name" : "No distance penalty",
+	"core.bonus.NO_DISTANCE_PENALTY.description" : "Does full damage at any distance",
+	"core.bonus.NO_MELEE_PENALTY.name" : "No melee penalty",
+	"core.bonus.NO_MELEE_PENALTY.description" : "Creature has no Melee Penalty",
+	"core.bonus.NO_MORALE.name" : "Neutral Morale",
+	"core.bonus.NO_MORALE.description" : "Creature is immune to morale effects",
+	"core.bonus.NO_WALL_PENALTY.name" : "No wall penalty",
+	"core.bonus.NO_WALL_PENALTY.description" : "Full damage during siege",
+	"core.bonus.NON_LIVING.name" : "Non living",
+	"core.bonus.NON_LIVING.description" : "Immunity to many effects",
+	"core.bonus.RANDOM_SPELLCASTER.name" : "Random spellcaster",
+	"core.bonus.RANDOM_SPELLCASTER.description" : "Can cast random spell",
+	"core.bonus.RANGED_RETALIATION.name" : "Ranged retaliation",
+	"core.bonus.RANGED_RETALIATION.description" : "Can perform ranged counterattack",
+	"core.bonus.RECEPTIVE.name" : "Receptive",
+	"core.bonus.RECEPTIVE.description" : "No Immunity to Friendly Spells",
+	"core.bonus.REBIRTH.name" : "Rebirth (${val}%)",
+	"core.bonus.REBIRTH.description" : "${val}% of stack will rise after death",
+	"core.bonus.RETURN_AFTER_STRIKE.name" : "Attack and Return",
+	"core.bonus.RETURN_AFTER_STRIKE.description" : "Returns after melee attack",
+	"core.bonus.REVENGE.name" : "Revenge",
+	"core.bonus.REVENGE.description" : "Deals extra damage based on attacker's lost health in battle",
+	"core.bonus.SHOOTER.name" : "Ranged",
+	"core.bonus.SHOOTER.description" : "Creature can shoot",
+	"core.bonus.SHOOTS_ALL_ADJACENT.name" : "Shoot all around",
+	"core.bonus.SHOOTS_ALL_ADJACENT.description" : "This creature's ranged attacks strike all targets in a small area",
+	"core.bonus.SOUL_STEAL.name" : "Soul Steal",
+	"core.bonus.SOUL_STEAL.description" : "Gains ${val} new creatures for each enemy killed",
+	"core.bonus.SPELLCASTER.name" : "Spellcaster",
+	"core.bonus.SPELLCASTER.description" : "Can cast ${subtype.spell}",
+	"core.bonus.SPELL_AFTER_ATTACK.name" : "Cast After Attack",
+	"core.bonus.SPELL_AFTER_ATTACK.description" : "Has a ${val}% chance to cast ${subtype.spell} after it attacks",
+	"core.bonus.SPELL_BEFORE_ATTACK.name" : "Cast Before Attack",
+	"core.bonus.SPELL_BEFORE_ATTACK.description" : "Has a ${val}% chance to cast ${subtype.spell} before it attacks",
+	"core.bonus.SPELL_IMMUNITY.name" : "Spell immunity",
+	"core.bonus.SPELL_IMMUNITY.description" : "Immune to ${subtype.spell}",
+	"core.bonus.SPELL_LIKE_ATTACK.name" : "Spell-like attack",
+	"core.bonus.SPELL_LIKE_ATTACK.description" : "Attacks with ${subtype.spell}",
+	"core.bonus.SPELL_RESISTANCE_AURA.name" : "Aura of Resistance",
+	"core.bonus.SPELL_RESISTANCE_AURA.description" : "Nearby stacks get ${val}% magic resistance",
+	"core.bonus.SUMMON_GUARDIANS.name" : "Summon guardians",
+	"core.bonus.SUMMON_GUARDIANS.description" : "At the start of battle summons ${subtype.creature} (${val}%)",
+	"core.bonus.SYNERGY_TARGET.name" : "Synergizable",
+	"core.bonus.SYNERGY_TARGET.description" : "This creature is vulnerable to synergy effect",
+	"core.bonus.TWO_HEX_ATTACK_BREATH.name" : "Breath",
+	"core.bonus.TWO_HEX_ATTACK_BREATH.description" : "Breath Attack (2-hex range)",
+	"core.bonus.THREE_HEADED_ATTACK.name" : "Three-headed attack",
+	"core.bonus.THREE_HEADED_ATTACK.description" : "Attacks three adjacent units",
+	"core.bonus.TRANSMUTATION.name" : "Transmutation",
+	"core.bonus.TRANSMUTATION.description" : "${val}% chance to transform attacked unit to a different type",
+	"core.bonus.UNDEAD.name" : "Undead",
+	"core.bonus.UNDEAD.description" : "Creature is Undead",
+	"core.bonus.UNLIMITED_RETALIATIONS.name" : "Unlimited retaliations",
+	"core.bonus.UNLIMITED_RETALIATIONS.description" : "Can retaliate against an unlimited number of attacks",
+	"core.bonus.WATER_IMMUNITY.name" : "Water immunity",
+	"core.bonus.WATER_IMMUNITY.description" : "Immune to all spells from the school of Water magic",
+	"core.bonus.WIDE_BREATH.name" : "Wide breath",
+	"core.bonus.WIDE_BREATH.description" : "Wide breath attack (multiple hexes)",
+	"core.bonus.DISINTEGRATE.name" : "Disintegrate",
+	"core.bonus.DISINTEGRATE.description" : "No corpse remains after death",
+	"core.bonus.INVINCIBLE.name" : "Invincible",
+	"core.bonus.INVINCIBLE.description" : "Cannot be affected by anything",
+	"core.bonus.MECHANICAL.name" : "Mechanical",
+	"core.bonus.MECHANICAL.description" : "Immunity to many effects, repairable",
+	"core.bonus.PRISM_HEX_ATTACK_BREATH.name" : "Prism Breath",
+	"core.bonus.PRISM_HEX_ATTACK_BREATH.description" : "Prism Breath Attack (three directions)",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name" : "Spell Resistance",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.air" : "Air Spells Resistance",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.fire" : "Fire Spells Resistance",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.water" : "Water Spells Resistance",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.earth" : "Earth Spells Resistance",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description" : "Damage from all spells reduced by ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.air" : "Damage from all Air spells reduced by ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.fire" : "Damage from all Fire spells reduced by ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.water" : "Damage from all Water spells reduced by ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.earth" : "Damage from all Earth spells reduced by ${val}%.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name" : "Spell immunity",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air" : "Air immunity",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire" : "Fire immunity",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water" : "Water immunity",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth" : "Earth immunity",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "This unit is immune to all spells",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air" : "This unit is immune to all Air school spells",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire" : "This unit is immune to all Fire school spells",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water" : "This unit is immune to all Water school spells",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth" : "This unit is immune to all Earth school spells",
+	"core.bonus.OPENING_BATTLE_SPELL.name" : "Starts with spell",
+	"core.bonus.OPENING_BATTLE_SPELL.description" : "Casts ${subtype.spell} on battle start",
 	
 	"spell.core.castleMoat.name" : "Moat",
 	"spell.core.castleMoatTrigger.name" : "Moat",

+ 3 - 0
Mods/vcmi/Content/config/finnish.json

@@ -0,0 +1,3 @@
+{
+
+}

+ 0 - 2
Mods/vcmi/Content/config/french.json

@@ -18,8 +18,6 @@
 	"vcmi.adventureMap.noTownWithTavern"       : "Il n'y a pas de villes disponibles avec des tavernes !",
 	"vcmi.adventureMap.spellUnknownProblem"    : "Il y a un problème inconnu avec ce sort ! Pas plus d'informations sont disponibles.",
 	"vcmi.adventureMap.playerAttacked"         : "Le joueur a été attaqué : %s",
-	"vcmi.adventureMap.moveCostDetails"        : "Points de mouvement - Coût : %TURNS tours + %POINTS points, Points restants : %REMAINING",
-	"vcmi.adventureMap.moveCostDetailsNoTurns" : "Points de mouvement - Coût : %POINTS points, Points restants : %REMAINING",
 
 	"vcmi.capitalColors.0" : "Rouge",
 	"vcmi.capitalColors.1" : "Bleu",

+ 53 - 20
Mods/vcmi/Content/config/german.json

@@ -23,16 +23,16 @@
 	"vcmi.adventureMap.noTownWithTavern"                 : "Keine Stadt mit Taverne verfügbar!",
 	"vcmi.adventureMap.spellUnknownProblem"              : "Unbekanntes Problem mit diesem Zauberspruch, keine weiteren Informationen verfügbar.",
 	"vcmi.adventureMap.playerAttacked"                   : "Spieler wurde attackiert: %s",
-	"vcmi.adventureMap.moveCostDetails"                  : "Bewegungspunkte - Kosten: %TURNS Runden + %POINTS Punkte, Verbleibende Punkte: %REMAINING",
-	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Bewegungspunkte - Kosten: %POINTS Punkte, Verbleibende Punkte: %REMAINING",
-	"vcmi.adventureMap.movementPointsHeroInfo" 			 : "(Bewegungspunkte: %REMAINING / %POINTS)",
+	"vcmi.adventureMap.moveCostDetails"                  : "Eine Bewegung hierher kostet insgesamt {%TOTAL} Punkte ({%TURNS} Runden und {%POINTS} Punkte). Nach der Bewegung bleiben {%REMAINING} Punkte übrig.",
+	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Eine Bewegung hierher kostet {%POINTS} Punkte. Nach der Bewegung bleiben {%REMAINING} Punkte übrig.",
+	"vcmi.adventureMap.movementPointsHeroInfo"           : "(Bewegungspunkte: %REMAINING / %POINTS)",
 	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Das Wiederholen des gegnerischen Zuges ist aktuell noch nicht implementiert!",
 
 	"vcmi.bonusSource.artifact" : "Artefakt",
 	"vcmi.bonusSource.creature" : "Fähigkeit",
 	"vcmi.bonusSource.spell" : "Zauber",
 	"vcmi.bonusSource.hero" : "Held",
-	"vcmi.bonusSource.commander" : "Commander",
+	"vcmi.bonusSource.commander" : "Command.",
 	"vcmi.bonusSource.other" : "Anderes",
 
 	"vcmi.capitalColors.0" : "Rot",
@@ -68,6 +68,7 @@
 	"vcmi.radialWheel.heroGetArtifacts" : "Artefakte von anderen Helden erhalten",
 	"vcmi.radialWheel.heroSwapArtifacts" : "Tausche Artefakte mit anderen Helden",
 	"vcmi.radialWheel.heroDismiss" : "Held entlassen",
+	"vcmi.radialWheel.upgradeCreatures" : "Alle Kreaturen aufrüsten",
 
 	"vcmi.radialWheel.moveTop" : "Ganz nach oben bewegen",
 	"vcmi.radialWheel.moveUp" : "Nach oben bewegen",
@@ -177,7 +178,8 @@
 	"vcmi.lobby.match.solo" : "Einzelspieler-Spiel",
 	"vcmi.lobby.match.duel" : "Spiel mit %s", // %s -> nickname of another player
 	"vcmi.lobby.match.multi" : "%d Spieler",
-	"vcmi.lobby.room.create" : "Neuen Spiel-Raum erstellen",
+	"vcmi.lobby.room.create.hover" : "Neuen Spiel-Raum erstellen",
+	"vcmi.lobby.room.create.help" : "Erstelle einen neuen Raum in der Online-Lobby, dem andere Spieler beitreten können.",
 	"vcmi.lobby.room.players.limit" : "Spieler Limit",
 	"vcmi.lobby.room.description.public" : "Jeder Spieler kann dem öffentlichen Raum beitreten.",
 	"vcmi.lobby.room.description.private" : "Nur eingeladene Spieler können den privaten Raum betreten.",
@@ -200,6 +202,8 @@
 	"vcmi.lobby.preview.error.mods" : "Ihr verwendet andere Mods.",
 	"vcmi.lobby.preview.error.version" : "Ihr verwendet eine andere Version von VCMI.",
 	"vcmi.lobby.channel.add" : "Kanal hinzufügen",
+	"vcmi.lobby.channel.sendMessage.hover" : "Nachricht senden",
+	"vcmi.lobby.channel.sendMessage.help" : "Nachricht senden",
 	"vcmi.lobby.room.new" : "Neues Spiel",
 	"vcmi.lobby.room.load" : "Spiel laden",
 	"vcmi.lobby.room.type" : "Raumtyp",
@@ -306,6 +310,8 @@
 	"vcmi.systemOptions.enableLargeSpellbookButton.help"   : "{Großes Zauberbuch}\n\nErmöglicht ein größeres Zauberbuch, in das mehr Zaubersprüche pro Seite passen. Die Animation des Seitenwechsels im Zauberbuch funktioniert nicht, wenn diese Einstellung aktiviert ist.",
 	"vcmi.systemOptions.audioMuteFocus.hover"  : "Stumm bei Inaktivität",
 	"vcmi.systemOptions.audioMuteFocus.help"   : "{Stumm bei Inaktivität}\n\nSchaltet Audio bei inaktiven Fenster-Fokus stumm. Ausnahmen sind Ingame-Nachrichten und der Neuer-Zug-Sound.",
+	"vcmi.systemOptions.enableOverlayButton.hover"  : "Overlay aktivieren",
+	"vcmi.systemOptions.enableOverlayButton.help"   : "{Overlay aktivieren}\n\nAktiviere Overlays, die zusätzliche Infos, wie Gebäudenamen anzeigen, wenn die ALT-Taste gedrückt oder die Zwei-Finger-Geste genutzt wird.",
 
 	"vcmi.adventureOptions.infoBarPick.hover" : "Meldungen im Infobereich anzeigen",
 	"vcmi.adventureOptions.infoBarPick.help" : "{Meldungen im Infobereich anzeigen}\n\nWann immer möglich, werden Spielnachrichten von besuchten Kartenobjekten in der Infoleiste angezeigt, anstatt als Popup-Fenster zu erscheinen",
@@ -363,6 +369,8 @@
 	"vcmi.battleOptions.endWithAutocombat.help": "{Kampf beenden}\n\nAutokampf spielt den Kampf sofort zu Ende",
 	"vcmi.battleOptions.showQuickSpell.hover": "Schnellzauber-Panel anzeigen",
 	"vcmi.battleOptions.showQuickSpell.help": "{Schnellzauber-Panel anzeigen}\n\nZeigt ein Panel, auf dem schnell Zauber ausgewählt werden können",
+	"vcmi.battleOptions.showHealthBar.hover": "Gesundheits-Balken anzeigen",
+	"vcmi.battleOptions.showHealthBar.help": "{Gesundheits-Balken anzeigen}\n\nAnzeige eines Gesundheitsbalkens, der die verbleibende Gesundheit anzeigt, bevor eine Einheit stirbt.",	
 
 	"vcmi.adventureMap.revisitObject.hover" : "Objekt erneut besuchen",
 	"vcmi.adventureMap.revisitObject.help" : "{Objekt erneut besuchen}\n\nSteht ein Held gerade auf einem Kartenobjekt, kann er den Ort erneut aufsuchen.",
@@ -415,6 +423,9 @@
 	"vcmi.townStructure.bank.borrow" : "Ihr betretet die Bank. Ein Bankangestellter sieht Euch und sagt: \"Wir haben ein spezielles Angebot für Euch gemacht. Ihr könnt bei uns einen Kredit von 2500 Gold für 5 Tage aufnehmen. Ihr werdet jeden Tag 500 Gold zurückzahlen müssen.\"",
 	"vcmi.townStructure.bank.payBack" : "Ihr betretet die Bank. Ein Bankangestellter sieht Euch und sagt: \"Ihr habt Euren Kredit bereits erhalten. Zahlt Ihn ihn zurück, bevor Ihr einen neuen aufnehmt.\"",
 
+	"vcmi.townWindow.upgradeAll.notAllUpgradable" : "Nicht genügend Ressourcen um alle Kreaturen aufzurüsten. Folgende Kreaturen aufrüsten?",
+	"vcmi.townWindow.upgradeAll.notUpgradable" : "Nicht genügend Ressourcen um mindestens eine Kreatur aufzurüsten.",
+
 	"vcmi.logicalExpressions.anyOf"  : "Eines der folgenden:",
 	"vcmi.logicalExpressions.allOf"  : "Alles der folgenden:",
 	"vcmi.logicalExpressions.noneOf" : "Keines der folgenden:",
@@ -424,11 +435,11 @@
 	"vcmi.heroWindow.openBackpack.hover" : "Artefakt-Rucksack-Fenster öffnen",
 	"vcmi.heroWindow.openBackpack.help"  : "Öffnet ein Fenster, das die Verwaltung des Artefakt-Rucksacks erleichtert",
 	"vcmi.heroWindow.sortBackpackByCost.hover"  : "Nach Kosten sortieren",
-	"vcmi.heroWindow.sortBackpackByCost.help"  : "Artefakte im Rucksack nach Kosten sortieren.",
+	"vcmi.heroWindow.sortBackpackByCost.help"  : "{Nach Kosten sortieren}\n\nArtefakte im Rucksack nach Kosten sortieren.",
 	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "Nach Slot sortieren",
-	"vcmi.heroWindow.sortBackpackBySlot.help"  : "Artefakte im Rucksack nach Ausrüstungsslot sortieren.",
+	"vcmi.heroWindow.sortBackpackBySlot.help"  : "{Nach Slot sortieren}\n\nArtefakte im Rucksack nach Ausrüstungsslot sortieren.",
 	"vcmi.heroWindow.sortBackpackByClass.hover"  : "Nach Klasse sortieren",
-	"vcmi.heroWindow.sortBackpackByClass.help"  : "Artefakte im Rucksack nach Artefaktklasse sortieren. Schatz, Klein, Groß, Relikt",
+	"vcmi.heroWindow.sortBackpackByClass.help"  : "{Nach Klasse sortieren}\n\nArtefakte im Rucksack nach Artefaktklasse sortieren. Schatz, Klein, Groß, Relikt",
 	"vcmi.heroWindow.fusingArtifact.fusing" : "Ihr verfügt über alle Komponenten, die für die Fusion der %s benötigt werden. Möchtet Ihr die Verschmelzung durchführen? {Alle Komponenten werden bei der Fusion verbraucht.}",
 
 	"vcmi.tavernWindow.inviteHero"  : "Helden einladen",
@@ -608,7 +619,7 @@
 	"core.seerhut.quest.reachDate.visit.5" : "Geschlossen bis %s.",
 	
 	"mapObject.core.hillFort.object.description" : "Aufwertungen von Kreaturen. Die Stufen 1 - 4 sind billiger als in der zugehörigen Stadt.",
-
+	
 	"core.bonus.ADDITIONAL_ATTACK.name": "Doppelschlag",
 	"core.bonus.ADDITIONAL_ATTACK.description": "Greift zweimal an",
 	"core.bonus.ADDITIONAL_RETALIATION.name": "Zusätzliche Vergeltungsmaßnahmen",
@@ -763,16 +774,6 @@
 	"core.bonus.MECHANICAL.description": "Immunität gegen viele Effekte, reparierbar",
 	"core.bonus.PRISM_HEX_ATTACK_BREATH.name": "Prisma-Atem",
 	"core.bonus.PRISM_HEX_ATTACK_BREATH.description": "Prisma-Atem-Angriff (drei Richtungen)",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name": "Zauber-Immunität",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description": "Immunität gegen alle Zauber-Schulen",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air": "Luft-Immunität",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire": "Feuer-Immunität",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water": "Wasser-Immunität",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth": "Erde-Immunität",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air": "Immunität gegen Zauber der Luft-Schule",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire": "Immunität gegen Zauber der Feuer-Schule",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water": "Immunität gegen Zauber der Wasser-Schule",
-	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth": "Immunität gegen Zauber der Erde-Schule",
 	"core.bonus.SPELL_DAMAGE_REDUCTION.name": "Zauberwiderstand",
 	"core.bonus.SPELL_DAMAGE_REDUCTION.name.air": "Luft-Zauberwiderstand",
 	"core.bonus.SPELL_DAMAGE_REDUCTION.name.fire": "Feuer-Zauberwiderstand",
@@ -783,6 +784,38 @@
 	"core.bonus.SPELL_DAMAGE_REDUCTION.description.fire": "Schaden von Feuer-Zaubern um ${val}% reduziert.",
 	"core.bonus.SPELL_DAMAGE_REDUCTION.description.water": "Schaden von Wasser-Zaubern um ${val}% reduziert.",
 	"core.bonus.SPELL_DAMAGE_REDUCTION.description.earth": "Schaden von Erde-Zaubern um ${val}% reduziert.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name": "Zauber-Immunität",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air": "Luft-Immunität",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire": "Feuer-Immunität",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water": "Wasser-Immunität",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth": "Erde-Immunität",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description": "Immunität gegen alle Zauber-Schulen",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air": "Immunität gegen Zauber der Luft-Schule",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire": "Immunität gegen Zauber der Feuer-Schule",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water": "Immunität gegen Zauber der Wasser-Schule",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth": "Immunität gegen Zauber der Erde-Schule",
 	"core.bonus.OPENING_BATTLE_SPELL.name": "Startet mit Zauber",
-	"core.bonus.OPENING_BATTLE_SPELL.description": "Wirkt ${subtype.spell} beim Start des Kampfes"
+	"core.bonus.OPENING_BATTLE_SPELL.description": "Wirkt ${subtype.spell} beim Start des Kampfes",
+	
+	"spell.core.castleMoat.name" : "Graben",
+	"spell.core.castleMoatTrigger.name" : "Graben",
+	"spell.core.catapultShot.name" : "Katapultschuss",
+	"spell.core.cyclopsShot.name" : "Belagerungsschuss",
+	"spell.core.dungeonMoat.name" : "Siedeöl",
+	"spell.core.dungeonMoatTrigger.name" : "Siedeöl",
+	"spell.core.fireWallTrigger.name" : "Feuerwand",
+	"spell.core.firstAid.name" : "Erste Hilfe",
+	"spell.core.fortressMoat.name" : "Siedender Teer",
+	"spell.core.fortressMoatTrigger.name" : "Siedender Teer",
+	"spell.core.infernoMoat.name" : "Lava",
+	"spell.core.infernoMoatTrigger.name" : "Lava",
+	"spell.core.landMineTrigger.name" : "Landmine",
+	"spell.core.necropolisMoat.name" : "Knochenplatz",
+	"spell.core.necropolisMoatTrigger.name" : "Knochenplatz",
+	"spell.core.rampartMoat.name" : "Brombeeren",
+	"spell.core.rampartMoatTrigger.name" : "Brombeeren",
+	"spell.core.strongholdMoat.name" : "Holzspieße",
+	"spell.core.strongholdMoatTrigger.name" : "Holzspieße",
+	"spell.core.summonDemons.name" : "Dämonen beschwören",
+	"spell.core.towerMoat.name" : "Landmine"
 }

+ 3 - 0
Mods/vcmi/Content/config/greek.json

@@ -0,0 +1,3 @@
+{
+
+}

+ 4 - 6
Mods/vcmi/Content/config/hungarian.json

@@ -23,8 +23,6 @@
 	"vcmi.adventureMap.noTownWithTavern"                 : "Nincsenek elérhető kocsmával rendelkező városok!",
 	"vcmi.adventureMap.spellUnknownProblem"              : "Ismeretlen probléma van ezzel a varázslattal! További információ nem érhető el.",
 	"vcmi.adventureMap.playerAttacked"                   : "A játékost megtámadták: %s",
-	"vcmi.adventureMap.moveCostDetails"                  : "Mozgáspontok - Költség: %TURNS kör + %POINTS pont, Hátralévő pontok: %REMAINING",
-	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Mozgáspontok - Költség: %POINTS pont, Hátralévő pontok: %REMAINING",
 	"vcmi.adventureMap.movementPointsHeroInfo" 			 : "(Mozgáspontok: %REMAINING / %POINTS)",
 	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Sajnáljuk, az ellenfél körének visszajátszása még nincs megvalósítva!",
 
@@ -177,7 +175,7 @@
 	"vcmi.lobby.match.solo" : "Egyszemélyes játék",
 	"vcmi.lobby.match.duel" : "Játék %s-szel", // %s -> nickname of another player
 	"vcmi.lobby.match.multi" : "%d játékos",
-	"vcmi.lobby.room.create" : "Új szoba létrehozása",
+	"vcmi.lobby.room.create.hover" : "Új szoba létrehozása",
 	"vcmi.lobby.room.players.limit" : "Játékosok száma",
 	"vcmi.lobby.room.description.public" : "Bárki csatlakozhat a nyilvános szobához.",
 	"vcmi.lobby.room.description.private" : "Csak meghívott játékosok csatlakozhatnak a privát szobához.",
@@ -424,11 +422,11 @@
 	"vcmi.heroWindow.openBackpack.hover" : "Műtárgy hátizsák ablak megnyitása",
 	"vcmi.heroWindow.openBackpack.help"  : "Az ablak megnyitása, amely megkönnyíti a műtárgy hátizsák kezelését.",
 	"vcmi.heroWindow.sortBackpackByCost.hover"  : "Rendezés ár szerint",
-	"vcmi.heroWindow.sortBackpackByCost.help"  : "A műtárgyak ár szerinti rendezése a hátizsákban.",
+	"vcmi.heroWindow.sortBackpackByCost.help"  : "{Rendezés ár szerint}\n\nA műtárgyak ár szerinti rendezése a hátizsákban.",
 	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "Rendezés nyílás szerint",
-	"vcmi.heroWindow.sortBackpackBySlot.help"  : "A műtárgyak nyílás szerinti rendezése a hátizsákban.",
+	"vcmi.heroWindow.sortBackpackBySlot.help"  : "{Rendezés nyílás szerint}\n\nA műtárgyak nyílás szerinti rendezése a hátizsákban.",
 	"vcmi.heroWindow.sortBackpackByClass.hover"  : "Rendezés osztály szerint",
-	"vcmi.heroWindow.sortBackpackByClass.help"  : "A műtárgyak osztály szerinti rendezése a hátizsákban. Kincs, Kisebb, Nagyobb, Relikvia",
+	"vcmi.heroWindow.sortBackpackByClass.help"  : "{Rendezés osztály szerint}\n\nA műtárgyak osztály szerinti rendezése a hátizsákban. Kincs, Kisebb, Nagyobb, Relikvia",
 	"vcmi.heroWindow.fusingArtifact.fusing" : "Ön birtokában van az összes szükséges komponensnek a(z) %s összeolvasztásához. Szeretné elvégezni az összeolvasztást? {Minden komponens elfogy az összeolvasztás során.}",
 
 	"vcmi.tavernWindow.inviteHero"  : "Hős meghívása",

+ 809 - 0
Mods/vcmi/Content/config/italian.json

@@ -0,0 +1,809 @@
+{
+	"vcmi.adventureMap.monsterThreat.title"     : "\n\nMinaccia: ",
+	"vcmi.adventureMap.monsterThreat.levels.0"  : "Facile",
+	"vcmi.adventureMap.monsterThreat.levels.1"  : "Molto Debole",
+	"vcmi.adventureMap.monsterThreat.levels.2"  : "Debole",
+	"vcmi.adventureMap.monsterThreat.levels.3"  : "Un po' più debole",
+	"vcmi.adventureMap.monsterThreat.levels.4"  : "Uguale",
+	"vcmi.adventureMap.monsterThreat.levels.5"  : "Un po' più forte",
+	"vcmi.adventureMap.monsterThreat.levels.6"  : "Forte",
+	"vcmi.adventureMap.monsterThreat.levels.7"  : "Molto Forte",
+	"vcmi.adventureMap.monsterThreat.levels.8"  : "Difficile",
+	"vcmi.adventureMap.monsterThreat.levels.9"  : "Schiacciante",
+	"vcmi.adventureMap.monsterThreat.levels.10" : "Mortale",
+	"vcmi.adventureMap.monsterThreat.levels.11" : "Impossibile",
+	"vcmi.adventureMap.monsterLevel"            : "\n\nUnità di livello %LEVEL %TOWN %ATTACK_TYPE",
+	"vcmi.adventureMap.monsterMeleeType"        : "corpo a corpo",
+	"vcmi.adventureMap.monsterRangedType"       : "a distanza",
+	"vcmi.adventureMap.search.hover"            : "Cerca oggetto sulla mappa",
+	"vcmi.adventureMap.search.help"             : "Seleziona un oggetto da cercare sulla mappa.",
+
+	"vcmi.adventureMap.confirmRestartGame"               : "Sei sicuro di voler riavviare il gioco?",
+	"vcmi.adventureMap.noTownWithMarket"                 : "Non ci sono mercati disponibili!",
+	"vcmi.adventureMap.noTownWithTavern"                 : "Non ci sono città disponibili con taverne!",
+	"vcmi.adventureMap.spellUnknownProblem"              : "C'è un problema sconosciuto con questo incantesimo! Nessuna informazione aggiuntiva disponibile.",
+	"vcmi.adventureMap.playerAttacked"                   : "Il giocatore è stato attaccato: %s",
+	"vcmi.adventureMap.moveCostDetails"                  : "Punti movimento - Costo: %TURNS turni + %POINTS punti, Punti rimanenti: %REMAINING",
+	"vcmi.adventureMap.moveCostDetailsNoTurns"           : "Punti movimento - Costo: %POINTS punti, Punti rimanenti: %REMAINING",
+	"vcmi.adventureMap.movementPointsHeroInfo" 			 : "(Punti movimento: %REMAINING / %POINTS)",
+	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Spiacente, la riproduzione del turno avversario non è ancora implementata!",
+
+	"vcmi.bonusSource.artifact" : "Artefatto",
+	"vcmi.bonusSource.creature" : "Abilità",
+	"vcmi.bonusSource.spell" : "Incantesimo",
+	"vcmi.bonusSource.hero" : "Eroe",
+	"vcmi.bonusSource.commander" : "Comandante",
+	"vcmi.bonusSource.other" : "Altro",
+
+	"vcmi.capitalColors.0" : "Rosso",
+	"vcmi.capitalColors.1" : "Blu",
+	"vcmi.capitalColors.2" : "Marrone",
+	"vcmi.capitalColors.3" : "Verde",
+	"vcmi.capitalColors.4" : "Arancione",
+	"vcmi.capitalColors.5" : "Viola",
+	"vcmi.capitalColors.6" : "Turchese",
+	"vcmi.capitalColors.7" : "Rosa",
+	
+	"vcmi.heroOverview.startingArmy" : "Unità Iniziali",
+	"vcmi.heroOverview.warMachine" : "Macchine da Guerra",
+	"vcmi.heroOverview.secondarySkills" : "Abilità Secondarie",
+	"vcmi.heroOverview.spells" : "Incantesimi",
+	
+	"vcmi.quickExchange.moveUnit" : "Sposta Unità",
+	"vcmi.quickExchange.moveAllUnits" : "Sposta Tutte le Unità",
+	"vcmi.quickExchange.swapAllUnits" : "Scambia Eserciti",
+	"vcmi.quickExchange.moveAllArtifacts" : "Sposta Tutti gli Artefatti",
+	"vcmi.quickExchange.swapAllArtifacts" : "Scambia Artefatti",
+	
+	"vcmi.radialWheel.mergeSameUnit" : "Unisci creature dello stesso tipo",
+	"vcmi.radialWheel.fillSingleUnit" : "Riempi con creature singole",
+	"vcmi.radialWheel.splitSingleUnit" : "Dividi una singola creatura",
+	"vcmi.radialWheel.splitUnitEqually" : "Dividi equamente le creature",
+	"vcmi.radialWheel.moveUnit" : "Sposta creature in un altro esercito",
+	"vcmi.radialWheel.splitUnit" : "Dividi creatura in un altro slot",
+	
+	"vcmi.radialWheel.heroGetArmy" : "Prendi l'esercito da un altro eroe",
+	"vcmi.radialWheel.heroSwapArmy" : "Scambia l'esercito con un altro eroe",
+	"vcmi.radialWheel.heroExchange" : "Apri scambio eroe",
+	"vcmi.radialWheel.heroGetArtifacts" : "Prendi artefatti da un altro eroe",
+	"vcmi.radialWheel.heroSwapArtifacts" : "Scambia artefatti con un altro eroe",
+	"vcmi.radialWheel.heroDismiss" : "Congeda l'eroe",
+
+	"vcmi.radialWheel.moveTop" : "Sposta in alto",
+	"vcmi.radialWheel.moveUp" : "Sposta su",
+	"vcmi.radialWheel.moveDown" : "Sposta giù",
+	"vcmi.radialWheel.moveBottom" : "Sposta in basso",
+	
+	"vcmi.randomMap.description" : "Mappa creata dal Generatore di Mappe Casuali.\nIl modello era %s, dimensione %dx%d, livelli %d, giocatori %d, computer %d, acqua %s, mostri %s, mappa VCMI",
+	"vcmi.randomMap.description.isHuman" : ", %s è un umano",
+	"vcmi.randomMap.description.townChoice" : ", la scelta della città di %s è %s",
+	"vcmi.randomMap.description.water.none" : "nessuna",
+	"vcmi.randomMap.description.water.normal" : "normale",
+	"vcmi.randomMap.description.water.islands" : "isole",
+	"vcmi.randomMap.description.monster.weak" : "debole",
+	"vcmi.randomMap.description.monster.normal" : "normale",
+	"vcmi.randomMap.description.monster.strong" : "forte",
+
+	"vcmi.spellBook.search" : "cerca...",
+
+	"vcmi.spellResearch.canNotAfford" : "Non puoi permetterti di sostituire {%SPELL1} con {%SPELL2}. Ma puoi comunque scartare questo incantesimo e continuare la ricerca.",
+	"vcmi.spellResearch.comeAgain" : "La ricerca è già stata fatta oggi. Torna domani.",
+	"vcmi.spellResearch.pay" : "Vuoi sostituire {%SPELL1} con {%SPELL2}? Oppure scartare questo incantesimo e continuare la ricerca?",
+	"vcmi.spellResearch.research" : "Ricerca questo Incantesimo",
+	"vcmi.spellResearch.skip" : "Salta questo Incantesimo",
+	"vcmi.spellResearch.abort" : "Annulla",
+	"vcmi.spellResearch.noMoreSpells" : "Non ci sono più incantesimi disponibili per la ricerca.",
+
+	"vcmi.mainMenu.serverConnecting" : "Connessione in corso...",
+	"vcmi.mainMenu.serverAddressEnter" : "Inserisci indirizzo:",
+	"vcmi.mainMenu.serverConnectionFailed" : "Connessione fallita",
+	"vcmi.mainMenu.serverClosing" : "Chiusura in corso...",
+	"vcmi.mainMenu.hostTCP" : "Ospita una partita TCP/IP",
+	"vcmi.mainMenu.joinTCP" : "Unisciti a una partita TCP/IP",
+
+	"vcmi.lobby.filepath" : "Percorso file",
+	"vcmi.lobby.creationDate" : "Data di creazione",
+	"vcmi.lobby.scenarioName" : "Nome dello scenario",
+	"vcmi.lobby.mapPreview" : "Anteprima mappa",
+	"vcmi.lobby.noPreview" : "nessuna anteprima",
+	"vcmi.lobby.noUnderground" : "nessun sotterraneo",
+	"vcmi.lobby.sortDate" : "Ordina le mappe per data di modifica",
+	"vcmi.lobby.backToLobby" : "Ritorna alla lobby",
+	"vcmi.lobby.author" : "Autore",
+	"vcmi.lobby.handicap" : "Handicap",
+	"vcmi.lobby.handicap.resource" : "Dà ai giocatori risorse appropriate per iniziare oltre a quelle normali. I valori negativi sono consentiti, ma limitati a 0 (il giocatore non inizia mai con risorse negative).",
+	"vcmi.lobby.handicap.income" : "Modifica le entrate del giocatore in percentuale. Arrotondato per eccesso.",
+	"vcmi.lobby.handicap.growth" : "Modifica la crescita delle creature nelle città possedute dal giocatore. Arrotondato per eccesso.",
+	"vcmi.lobby.deleteUnsupportedSave" : "{Salvataggi non supportati trovati}\n\nVCMI ha trovato %d salvataggi non più supportati, probabilmente a causa di differenze tra le versioni di VCMI.\n\nVuoi eliminarli?",
+	"vcmi.lobby.deleteSaveGameTitle" : "Seleziona un salvataggio da eliminare",
+	"vcmi.lobby.deleteMapTitle" : "Seleziona uno scenario da eliminare",
+	"vcmi.lobby.deleteFile" : "Vuoi eliminare il seguente file?",
+	"vcmi.lobby.deleteFolder" : "Vuoi eliminare la seguente cartella?",
+	"vcmi.lobby.deleteMode" : "Passa alla modalità elimina e torna indietro",
+
+	"vcmi.broadcast.failedLoadGame" : "Impossibile caricare la partita",
+	"vcmi.broadcast.command" : "Usa '!help' per elencare i comandi disponibili",
+	"vcmi.broadcast.simturn.end" : "I turni simultanei sono terminati",
+	"vcmi.broadcast.simturn.endBetween" : "I turni simultanei tra i giocatori %s e %s sono terminati",
+	"vcmi.broadcast.serverProblem" : "Il server ha riscontrato un problema",
+	"vcmi.broadcast.gameTerminated" : "la partita è stata terminata",
+	"vcmi.broadcast.gameSavedAs" : "partita salvata come",
+	"vcmi.broadcast.noCheater" : "Nessun baro registrato!",
+	"vcmi.broadcast.playerCheater" : "Il giocatore %s ha usato i trucchi!",
+	"vcmi.broadcast.statisticFile" : "I file delle statistiche possono essere trovati nella directory %s",
+	"vcmi.broadcast.help.commands" : "Comandi disponibili per l'host:",
+	"vcmi.broadcast.help.exit" : "'!exit' - termina immediatamente la partita in corso",
+	"vcmi.broadcast.help.kick" : "'!kick <player>' - espelle il giocatore specificato dalla partita",
+	"vcmi.broadcast.help.save" : "'!save <filename>' - salva la partita con il nome specificato",
+	"vcmi.broadcast.help.statistic" : "'!statistic' - salva le statistiche della partita come file CSV",
+	"vcmi.broadcast.help.commandsAll" : "Comandi disponibili per tutti i giocatori:",
+	"vcmi.broadcast.help.help" : "'!help' - mostra questo aiuto",
+	"vcmi.broadcast.help.cheaters" : "'!cheaters' - elenca i giocatori che hanno usato trucchi durante la partita",
+	"vcmi.broadcast.help.vote" : "'!vote' - consente di modificare alcune impostazioni di gioco se tutti i giocatori sono d'accordo",
+	"vcmi.broadcast.vote.allow" : "'!vote simturns allow X' - consente turni simultanei per un numero specificato di giorni, o fino al contatto",
+	"vcmi.broadcast.vote.force" : "'!vote simturns force X' - forza turni simultanei per un numero specificato di giorni, bloccando i contatti tra giocatori",
+	"vcmi.broadcast.vote.abort" : "'!vote simturns abort' - interrompe i turni simultanei alla fine di questo turno",
+	"vcmi.broadcast.vote.timer" : "'!vote timer prolong X' - prolunga il timer di base per tutti i giocatori del numero specificato di secondi",
+	"vcmi.broadcast.vote.noActive" : "Nessuna votazione attiva!",
+	"vcmi.broadcast.vote.yes" : "sì",
+	"vcmi.broadcast.vote.no" : "no",
+	"vcmi.broadcast.vote.notRecognized" : "Comando di votazione non riconosciuto!",
+	"vcmi.broadcast.vote.success.untilContacts" : "Votazione riuscita. I turni simultanei dureranno ancora %s giorni, o fino al contatto",
+	"vcmi.broadcast.vote.success.contactsBlocked" : "Votazione riuscita. I turni simultanei dureranno ancora %s giorni. I contatti sono bloccati",
+	"vcmi.broadcast.vote.success.nextDay" : "Votazione riuscita. I turni simultanei termineranno il giorno successivo",
+	"vcmi.broadcast.vote.success.timer" : "Votazione riuscita. Il timer per tutti i giocatori è stato prolungato di %s secondi",
+	"vcmi.broadcast.vote.aborted" : "Un giocatore ha votato contro la modifica. Votazione annullata",
+	"vcmi.broadcast.vote.start.untilContacts" : "Votazione avviata per consentire turni simultanei per altri %s giorni",
+	"vcmi.broadcast.vote.start.contactsBlocked" : "Votazione avviata per forzare turni simultanei per altri %s giorni",
+	"vcmi.broadcast.vote.start.nextDay" : "Votazione avviata per terminare i turni simultanei dal giorno successivo",
+	"vcmi.broadcast.vote.start.timer" : "Votazione avviata per prolungare il timer per tutti i giocatori di %s secondi",
+	"vcmi.broadcast.vote.hint" : "Digita '!vote yes' per accettare la modifica o '!vote no' per rifiutarla",
+		
+	"vcmi.lobby.login.title" : "VCMI Lobby Online",
+	"vcmi.lobby.login.username" : "Nome utente:",
+	"vcmi.lobby.login.connecting" : "Connessione in corso...",
+	"vcmi.lobby.login.error" : "Errore di connessione: %s",
+	"vcmi.lobby.login.create" : "Nuovo Account",
+	"vcmi.lobby.login.login" : "Accedi",
+	"vcmi.lobby.login.as" : "Accedi come %s",
+	"vcmi.lobby.login.spectator" : "Spettatore",
+	"vcmi.lobby.header.rooms" : "Stanze di gioco - %d",
+	"vcmi.lobby.header.channels" : "Canali chat",
+	"vcmi.lobby.header.chat.global" : "Chat globale - %s", // %s -> language name
+	"vcmi.lobby.header.chat.match" : "Chat dalla partita precedente su %s", // %s -> game start date & time
+	"vcmi.lobby.header.chat.player" : "Chat privata con %s", // %s -> nickname of another player
+	"vcmi.lobby.header.history" : "Le tue partite precedenti",
+	"vcmi.lobby.header.players" : "Giocatori online - %d",
+	"vcmi.lobby.match.solo" : "Partita in singolo",
+	"vcmi.lobby.match.duel" : "Partita con %s", // %s -> nickname of another player
+	"vcmi.lobby.match.multi" : "%d giocatori",
+	"vcmi.lobby.room.create.hover" : "Crea nuova stanza",
+	"vcmi.lobby.room.players.limit" : "Limite giocatori",
+	"vcmi.lobby.room.description.public" : "Qualsiasi giocatore può entrare in una stanza pubblica.",
+	"vcmi.lobby.room.description.private" : "Solo i giocatori invitati possono entrare in una stanza privata.",
+	"vcmi.lobby.room.description.new" : "Per avviare la partita, seleziona uno scenario o imposta una mappa casuale.",
+	"vcmi.lobby.room.description.load" : "Per avviare la partita, usa uno dei tuoi salvataggi.",
+	"vcmi.lobby.room.description.limit" : "Fino a %d giocatori possono entrare nella tua stanza, incluso te.",
+	"vcmi.lobby.invite.header" : "Invita giocatori",
+	"vcmi.lobby.invite.notification" : "Un giocatore ti ha invitato nella sua stanza di gioco. Ora puoi unirti alla sua stanza privata.",
+	"vcmi.lobby.preview.title" : "Unisciti alla stanza di gioco",
+	"vcmi.lobby.preview.subtitle" : "Partita su %s, ospitata da %s", //TL Note: 1) name of map or RMG template 2) nickname of game host
+	"vcmi.lobby.preview.version" : "Versione di gioco:",
+	"vcmi.lobby.preview.players" : "Giocatori:",
+	"vcmi.lobby.preview.mods" : "Mod utilizzate:",
+	"vcmi.lobby.preview.allowed" : "Vuoi unirti alla stanza di gioco?",
+	"vcmi.lobby.preview.error.header" : "Impossibile unirsi a questa stanza.",
+	"vcmi.lobby.preview.error.playing" : "Devi prima uscire dalla tua partita attuale.",
+	"vcmi.lobby.preview.error.full" : "La stanza è già piena.",
+	"vcmi.lobby.preview.error.busy" : "La stanza non accetta più nuovi giocatori.",
+	"vcmi.lobby.preview.error.invite" : "Non sei stato invitato a questa stanza.",
+	"vcmi.lobby.preview.error.mods" : "Stai usando un set di mod diverso.",
+	"vcmi.lobby.preview.error.version" : "Stai usando una versione diversa di VCMI.",
+	"vcmi.lobby.room.new" : "Nuova partita",
+	"vcmi.lobby.room.load" : "Carica partita",
+	"vcmi.lobby.room.type" : "Tipo di stanza",
+	"vcmi.lobby.room.mode" : "Modalità di gioco",
+	"vcmi.lobby.room.state.public" : "Pubblica",
+	"vcmi.lobby.room.state.private" : "Privata",
+	"vcmi.lobby.room.state.busy" : "In gioco",
+	"vcmi.lobby.room.state.invited" : "Invitato",
+	"vcmi.lobby.mod.state.compatible" : "Compatibile",
+	"vcmi.lobby.mod.state.disabled" : "Deve essere attivato",
+	"vcmi.lobby.mod.state.version" : "Versione incompatibile",
+	"vcmi.lobby.mod.state.excessive" : "Deve essere disattivato",
+	"vcmi.lobby.mod.state.missing" : "Non installato",
+	"vcmi.lobby.pvp.coin.hover" : "Lancia la moneta",
+	"vcmi.lobby.pvp.coin.help" : "Lancia una moneta",
+	"vcmi.lobby.pvp.randomTown.hover" : "Città casuale",
+	"vcmi.lobby.pvp.randomTown.help" : "Scrivi una città casuale in chat",
+	"vcmi.lobby.pvp.randomTownVs.hover" : "Città casuale vs.",
+	"vcmi.lobby.pvp.randomTownVs.help" : "Scrivi due città casuali in chat",
+	"vcmi.lobby.pvp.versus" : "vs.",
+
+	"vcmi.client.errors.invalidMap" : "{Mappa o campagna non valida}\n\nImpossibile avviare la partita! La mappa o la campagna selezionata potrebbe essere non valida o corrotta. Motivo:\n%s",
+	"vcmi.client.errors.missingCampaigns" : "{File dati mancanti}\n\nI file dati delle campagne non sono stati trovati! Potresti avere file dati incompleti o corrotti di Heroes 3. Reinstalla i dati del gioco.",
+	"vcmi.client.errors.modLoadingFailure" : "{Errore di caricamento delle mod}\n\nSono stati rilevati problemi critici durante il caricamento delle mod! Il gioco potrebbe non funzionare correttamente o bloccarsi! Aggiorna o disattiva le seguenti mod:\n\n",
+	"vcmi.server.errors.disconnected" : "{Errore di rete}\n\nLa connessione al server di gioco è stata persa!",
+	"vcmi.server.errors.playerLeft" : "{Giocatore disconnesso}\n\nIl giocatore %s si è disconnesso dalla partita!", //%s -> player color
+	"vcmi.server.errors.existingProcess" : "Un altro processo del server VCMI è in esecuzione. Terminarlo prima di avviare una nuova partita.",
+	"vcmi.server.errors.modsToEnable"    : "{Le seguenti mod sono richieste}",
+	"vcmi.server.errors.modsToDisable"   : "{Le seguenti mod devono essere disattivate}",
+	"vcmi.server.errors.unknownEntity" : "Impossibile caricare il salvataggio! Entità sconosciuta '%s' trovata nel salvataggio! Il salvataggio potrebbe non essere compatibile con la versione attualmente installata delle mod!",
+	"vcmi.server.errors.wrongIdentified"   : "Sei stato identificato come giocatore %s mentre ci si aspettava %s",
+	"vcmi.server.errors.notAllowed"   : "Non ti è permesso eseguire questa azione!",
+	
+	"vcmi.dimensionDoor.seaToLandError" : "Non è possibile teletrasportarsi dal mare alla terraferma o viceversa con la Porta Dimensionale.",
+
+	"vcmi.settingsMainWindow.generalTab.hover" : "Generale",
+	"vcmi.settingsMainWindow.generalTab.help"     : "Passa alla scheda Opzioni generali, che contiene le impostazioni relative al comportamento generale del client di gioco.",
+	"vcmi.settingsMainWindow.battleTab.hover" : "Battaglia",
+	"vcmi.settingsMainWindow.battleTab.help"     : "Passa alla scheda Opzioni di battaglia, che consente di configurare il comportamento del gioco durante le battaglie.",
+	"vcmi.settingsMainWindow.adventureTab.hover" : "Mappa Avventura",
+	"vcmi.settingsMainWindow.adventureTab.help"  : "Passa alla scheda Opzioni Mappa Avventura (la mappa dell'avventura è la sezione del gioco in cui i giocatori controllano i movimenti degli eroi).",
+
+	"vcmi.systemOptions.videoGroup" : "Impostazioni video",
+	"vcmi.systemOptions.audioGroup" : "Impostazioni audio",
+	"vcmi.systemOptions.otherGroup" : "Altre impostazioni", // unused right now
+	"vcmi.systemOptions.townsGroup" : "Schermata della città",
+
+	"vcmi.statisticWindow.statistics" : "Statistiche",
+	"vcmi.statisticWindow.tsvCopy" : "Dati negli appunti",
+	"vcmi.statisticWindow.selectView" : "Seleziona vista",
+	"vcmi.statisticWindow.value" : "Valore",
+	"vcmi.statisticWindow.title.overview" : "Panoramica",
+	"vcmi.statisticWindow.title.resources" : "Risorse",
+	"vcmi.statisticWindow.title.income" : "Entrate",
+	"vcmi.statisticWindow.title.numberOfHeroes" : "Numero di eroi",
+	"vcmi.statisticWindow.title.numberOfTowns" : "Numero di città",
+	"vcmi.statisticWindow.title.numberOfArtifacts" : "Numero di artefatti",
+	"vcmi.statisticWindow.title.numberOfDwellings" : "Numero di dimore",
+	"vcmi.statisticWindow.title.numberOfMines" : "Numero di miniere",
+	"vcmi.statisticWindow.title.armyStrength" : "Forza dell'esercito",
+	"vcmi.statisticWindow.title.experience" : "Esperienza",
+	"vcmi.statisticWindow.title.resourcesSpentArmy" : "Costi dell'esercito",
+	"vcmi.statisticWindow.title.resourcesSpentBuildings" : "Costi degli edifici",
+	"vcmi.statisticWindow.title.mapExplored" : "Percentuale di mappa esplorata",
+	"vcmi.statisticWindow.param.playerName" : "Nome giocatore",
+	"vcmi.statisticWindow.param.daysSurvived" : "Giorni sopravvissuti",
+	"vcmi.statisticWindow.param.maxHeroLevel" : "Livello massimo dell'eroe",
+	"vcmi.statisticWindow.param.battleWinRatioHero" : "Tasso di vittoria (vs. eroe)",
+	"vcmi.statisticWindow.param.battleWinRatioNeutral" : "Tasso di vittoria (vs. neutrali)",
+	"vcmi.statisticWindow.param.battlesHero" : "Battaglie (vs. eroe)",
+	"vcmi.statisticWindow.param.battlesNeutral" : "Battaglie (vs. neutrali)",
+	"vcmi.statisticWindow.param.maxArmyStrength" : "Massima forza dell'esercito totale",
+	"vcmi.statisticWindow.param.tradeVolume" : "Volume di scambio",
+	"vcmi.statisticWindow.param.obeliskVisited" : "Obelisco visitato",
+	"vcmi.statisticWindow.icon.townCaptured" : "Città conquistate",
+	"vcmi.statisticWindow.icon.strongestHeroDefeated" : "Eroe più forte dell'avversario sconfitto",
+	"vcmi.statisticWindow.icon.grailFound" : "Graal trovato",
+	"vcmi.statisticWindow.icon.defeated" : "Sconfitto",
+
+	"vcmi.systemOptions.fullscreenBorderless.hover" : "Schermo intero (senza bordi)",
+	"vcmi.systemOptions.fullscreenBorderless.help"  : "{Schermo intero senza bordi}\n\nSe selezionato, VCMI verrà eseguito in modalità schermo intero senza bordi. In questa modalità, il gioco utilizzerà sempre la stessa risoluzione del desktop, ignorando la risoluzione selezionata.",
+	"vcmi.systemOptions.fullscreenExclusive.hover"  : "Schermo intero (esclusivo)",
+	"vcmi.systemOptions.fullscreenExclusive.help"   : "{Schermo intero}\n\nSe selezionato, VCMI verrà eseguito in modalità schermo intero esclusiva. In questa modalità, il gioco cambierà la risoluzione del monitor con quella selezionata.",
+	"vcmi.systemOptions.resolutionButton.hover" : "Risoluzione: %wx%h",
+	"vcmi.systemOptions.resolutionButton.help"  : "{Seleziona risoluzione}\n\nModifica la risoluzione dello schermo di gioco.",
+	"vcmi.systemOptions.resolutionMenu.hover"   : "Seleziona risoluzione",
+	"vcmi.systemOptions.resolutionMenu.help"    : "Modifica la risoluzione dello schermo di gioco.",
+	"vcmi.systemOptions.scalingButton.hover"   : "Scala interfaccia: %p%",
+	"vcmi.systemOptions.scalingButton.help"    : "{Scala interfaccia}\n\nModifica la scala dell'interfaccia di gioco.",
+	"vcmi.systemOptions.scalingMenu.hover"     : "Seleziona scala interfaccia",
+	"vcmi.systemOptions.scalingMenu.help"      : "Modifica la scala dell'interfaccia di gioco.",
+	"vcmi.systemOptions.longTouchButton.hover"   : "Intervallo di tocco lungo: %d ms",
+	"vcmi.systemOptions.longTouchButton.help"    : "{Intervallo di tocco lungo}\n\nQuando si utilizza il touchscreen, le finestre popup appariranno dopo aver toccato lo schermo per la durata specificata in millisecondi.",
+	"vcmi.systemOptions.longTouchMenu.hover"     : "Seleziona intervallo di tocco lungo",
+	"vcmi.systemOptions.longTouchMenu.help"      : "Modifica la durata dell'intervallo di tocco lungo.",
+	"vcmi.systemOptions.longTouchMenu.entry"     : "%d millisecondi",
+	"vcmi.systemOptions.framerateButton.hover"  : "Mostra FPS",
+	"vcmi.systemOptions.framerateButton.help"   : "{Mostra FPS}\n\nAttiva o disattiva la visibilità del contatore dei fotogrammi al secondo nell'angolo della finestra di gioco.",
+	"vcmi.systemOptions.hapticFeedbackButton.hover"  : "Feedback aptico",
+	"vcmi.systemOptions.hapticFeedbackButton.help"   : "{Feedback aptico}\n\nAttiva o disattiva il feedback aptico sugli input tattili.",
+	"vcmi.systemOptions.enableUiEnhancementsButton.hover"  : "Miglioramenti interfaccia",
+	"vcmi.systemOptions.enableUiEnhancementsButton.help"   : "{Miglioramenti interfaccia}\n\nAttiva vari miglioramenti della qualità della vita nell'interfaccia. Ad esempio, un pulsante per lo zaino, ecc. Disabilitalo per un'esperienza più classica.",
+	"vcmi.systemOptions.enableLargeSpellbookButton.hover"  : "Libro degli incantesimi grande",
+	"vcmi.systemOptions.enableLargeSpellbookButton.help"   : "{Libro degli incantesimi grande}\n\nAbilita un libro degli incantesimi più grande che mostra più incantesimi per pagina. L'animazione del cambio pagina non funziona con questa impostazione attivata.",
+	"vcmi.systemOptions.audioMuteFocus.hover"  : "Silenzioso quando inattivo",
+	"vcmi.systemOptions.audioMuteFocus.help"   : "{Silenzioso quando inattivo}\n\nDisattiva l'audio quando la finestra del gioco non è attiva. Fanno eccezione i messaggi di gioco e il suono del nuovo turno.",
+
+	"vcmi.adventureOptions.infoBarPick.hover" : "Mostra messaggi nel pannello informazioni",
+	"vcmi.adventureOptions.infoBarPick.help" : "{Mostra messaggi nel pannello informazioni}\n\nQuando possibile, i messaggi del gioco provenienti dagli oggetti sulla mappa saranno mostrati nel pannello informazioni, invece che comparire in una finestra separata.",
+	"vcmi.adventureOptions.numericQuantities.hover" : "Quantità di creature numeriche",
+	"vcmi.adventureOptions.numericQuantities.help" : "{Quantità di creature numeriche}\n\nMostra la quantità approssimativa di creature nemiche nel formato numerico A-B.",
+	"vcmi.adventureOptions.forceMovementInfo.hover" : "Mostra sempre il costo del movimento",
+	"vcmi.adventureOptions.forceMovementInfo.help" : "{Mostra sempre il costo del movimento}\n\nMostra sempre i dati dei punti movimento nella barra di stato (invece di visualizzarli solo quando si tiene premuto il tasto ALT).",
+	"vcmi.adventureOptions.showGrid.hover" : "Mostra griglia",
+	"vcmi.adventureOptions.showGrid.help" : "{Mostra griglia}\n\nMostra la griglia di sovrapposizione, evidenziando i confini tra le caselle della mappa avventura.",
+	"vcmi.adventureOptions.borderScroll.hover" : "Scorrimento ai bordi",
+	"vcmi.adventureOptions.borderScroll.help" : "{Scorrimento ai bordi}\n\nScorri la mappa avventura quando il cursore è vicino al bordo della finestra. Può essere disattivato tenendo premuto il tasto CTRL.",
+	"vcmi.adventureOptions.infoBarCreatureManagement.hover" : "Gestione creature nel pannello informazioni",
+	"vcmi.adventureOptions.infoBarCreatureManagement.help" : "{Gestione creature nel pannello informazioni}\n\nConsente di riordinare le creature nel pannello informazioni invece di alternarle tra i componenti predefiniti.",
+	"vcmi.adventureOptions.leftButtonDrag.hover" : "Trascinamento con clic sinistro",
+	"vcmi.adventureOptions.leftButtonDrag.help" : "{Trascinamento con clic sinistro}\n\nQuando attivato, spostando il mouse con il tasto sinistro premuto si trascina la visuale della mappa avventura.",
+	"vcmi.adventureOptions.rightButtonDrag.hover" : "Trascinamento con clic destro",
+	"vcmi.adventureOptions.rightButtonDrag.help" : "{Trascinamento con clic destro}\n\nQuando attivato, spostando il mouse con il tasto destro premuto si trascina la visuale della mappa avventura.",
+	"vcmi.adventureOptions.smoothDragging.hover" : "Trascinamento della mappa fluido",
+	"vcmi.adventureOptions.smoothDragging.help" : "{Trascinamento della mappa fluido}\n\nQuando attivato, il trascinamento della mappa ha un effetto di scorrimento fluido moderno.",
+	"vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Salta effetti di dissolvenza",
+	"vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Salta effetti di dissolvenza}\n\nQuando attivato, salta la dissolvenza degli oggetti e altri effetti simili (raccolta risorse, imbarco su navi, ecc.). Rende l'interfaccia più reattiva in alcuni casi, a scapito dell'estetica. Utile soprattutto nei giochi PvP. Per una velocità di movimento massima, la dissolvenza è sempre saltata indipendentemente da questa impostazione.",
+	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
+	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
+	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
+	"vcmi.adventureOptions.mapScrollSpeed1.help": "Imposta la velocità di scorrimento della mappa su molto lenta.",
+	"vcmi.adventureOptions.mapScrollSpeed5.help": "Imposta la velocità di scorrimento della mappa su molto veloce.",
+	"vcmi.adventureOptions.mapScrollSpeed6.help": "Imposta la velocità di scorrimento della mappa su istantanea.",
+	"vcmi.adventureOptions.hideBackground.hover" : "Nascondi Sfondo",
+	"vcmi.adventureOptions.hideBackground.help" : "{Nascondi Sfondo}\n\nNasconde la mappa dell'avventura nello sfondo e mostra una texture al suo posto.",
+
+	"vcmi.battleOptions.queueSizeLabel.hover": "Mostra coda dell'ordine di turno",
+	"vcmi.battleOptions.queueSizeNoneButton.hover": "SPENTO",
+	"vcmi.battleOptions.queueSizeAutoButton.hover": "AUTO",
+	"vcmi.battleOptions.queueSizeSmallButton.hover": "PICCOLO",
+	"vcmi.battleOptions.queueSizeBigButton.hover": "GRANDE",
+	"vcmi.battleOptions.queueSizeNoneButton.help": "Non visualizzare la coda dell'ordine di turno.",
+	"vcmi.battleOptions.queueSizeAutoButton.help": "Regola automaticamente la dimensione della coda dell'ordine di turno in base alla risoluzione del gioco (PICCOLO viene utilizzato se l'altezza della risoluzione è inferiore a 700 pixel, GRANDE viene usato altrimenti).",
+	"vcmi.battleOptions.queueSizeSmallButton.help": "Imposta la dimensione della coda dell'ordine di turno su PICCOLO.",
+	"vcmi.battleOptions.queueSizeBigButton.help": "Imposta la dimensione della coda dell'ordine di turno su GRANDE (non supportato se l'altezza della risoluzione del gioco è inferiore a 700 pixel).",
+	"vcmi.battleOptions.animationsSpeed1.hover": "",
+	"vcmi.battleOptions.animationsSpeed5.hover": "",
+	"vcmi.battleOptions.animationsSpeed6.hover": "",
+	"vcmi.battleOptions.animationsSpeed1.help": "Imposta la velocità dell'animazione su molto lenta.",
+	"vcmi.battleOptions.animationsSpeed5.help": "Imposta la velocità dell'animazione su molto veloce.",
+	"vcmi.battleOptions.animationsSpeed6.help": "Imposta la velocità dell'animazione su istantanea.",
+	"vcmi.battleOptions.movementHighlightOnHover.hover": "Evidenzia il movimento al passaggio del mouse",
+	"vcmi.battleOptions.movementHighlightOnHover.help": "{Evidenzia il movimento al passaggio del mouse}\n\nEvidenzia il raggio di movimento dell'unità quando ci passi sopra con il cursore.",
+	"vcmi.battleOptions.rangeLimitHighlightOnHover.hover": "Mostra limiti di gittata per tiratori",
+	"vcmi.battleOptions.rangeLimitHighlightOnHover.help": "{Mostra limiti di gittata per tiratori}\n\nMostra i limiti di gittata del tiratore quando ci passi sopra con il cursore.",
+	"vcmi.battleOptions.showStickyHeroInfoWindows.hover": "Mostra finestre statistiche degli eroi",
+	"vcmi.battleOptions.showStickyHeroInfoWindows.help": "{Mostra finestre statistiche degli eroi}\n\nAttiva in modo permanente le finestre statistiche degli eroi che mostrano le statistiche primarie e i punti incantesimo.",
+	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Salta musica introduttiva",
+	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Salta musica introduttiva}\n\nPermette di compiere azioni durante la musica introduttiva che viene riprodotta all'inizio di ogni battaglia.",	
+	"vcmi.battleOptions.endWithAutocombat.hover": "Termina la battaglia",
+	"vcmi.battleOptions.endWithAutocombat.help": "{Termina la battaglia}\n\nL'Auto-Combat gioca la battaglia fino alla fine immediatamente.",
+	"vcmi.battleOptions.showQuickSpell.hover": "Mostra pannello incantesimi rapidi",
+	"vcmi.battleOptions.showQuickSpell.help": "{Mostra pannello incantesimi rapidi}\n\nMostra il pannello per la selezione rapida degli incantesimi.",
+
+	"vcmi.adventureMap.revisitObject.hover" : "Rivisita oggetto",
+	"vcmi.adventureMap.revisitObject.help" : "{Rivisita oggetto}\n\nSe un eroe si trova su un oggetto della mappa, può rivisitare la posizione.",
+
+	"vcmi.battleWindow.pressKeyToSkipIntro" : "Premi un tasto qualsiasi per iniziare immediatamente la battaglia",
+	"vcmi.battleWindow.damageEstimation.melee" : "Attacca %CREATURE (%DAMAGE).",
+	"vcmi.battleWindow.damageEstimation.meleeKills" : "Attacca %CREATURE (%DAMAGE, %KILLS).",
+	"vcmi.battleWindow.damageEstimation.ranged" : "Spara a %CREATURE (%SHOTS, %DAMAGE).",
+	"vcmi.battleWindow.damageEstimation.rangedKills" : "Spara a %CREATURE (%SHOTS, %DAMAGE, %KILLS).",
+	"vcmi.battleWindow.damageEstimation.shots" : "%d colpi rimasti",
+	"vcmi.battleWindow.damageEstimation.shots.1" : "%d colpo rimasto",
+	"vcmi.battleWindow.damageEstimation.damage" : "%d danni",
+	"vcmi.battleWindow.damageEstimation.damage.1" : "%d danni",
+	"vcmi.battleWindow.damageEstimation.kills" : "%d periranno",
+	"vcmi.battleWindow.damageEstimation.kills.1" : "%d perirà",
+	
+	"vcmi.battleWindow.damageRetaliation.will" : "Contrattaccherà",
+	"vcmi.battleWindow.damageRetaliation.may" : "Potrebbe contrattaccare",
+	"vcmi.battleWindow.damageRetaliation.never" : "Non contrattaccherà.",
+	"vcmi.battleWindow.damageRetaliation.damage" : "(%DAMAGE).",
+	"vcmi.battleWindow.damageRetaliation.damageKills" : "(%DAMAGE, %KILLS).",
+	
+	"vcmi.battleWindow.killed" : "Ucciso",
+	"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s sono stati uccisi da colpi precisi!",
+	"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s è stato ucciso con un colpo preciso!",
+	"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s sono stati uccisi da colpi precisi!",
+	"vcmi.battleWindow.endWithAutocombat" : "Sei sicuro di voler terminare la battaglia con il combattimento automatico?",
+
+	"vcmi.battleResultsWindow.applyResultsLabel" : "Accettare il risultato della battaglia?",
+
+	"vcmi.tutorialWindow.title" : "Introduzione touchscreen",
+	"vcmi.tutorialWindow.decription.RightClick" : "Tocca e tieni premuto l'elemento su cui desideri fare clic destro. Tocca un'area libera per chiudere.",
+	"vcmi.tutorialWindow.decription.MapPanning" : "Tocca e trascina con un dito per spostare la mappa.",
+	"vcmi.tutorialWindow.decription.MapZooming" : "Pizzica con due dita per modificare lo zoom della mappa.",
+	"vcmi.tutorialWindow.decription.RadialWheel" : "Scorrendo si apre la ruota radiale per varie azioni, come la gestione delle creature/eroi e l'ordinamento delle città.",
+	"vcmi.tutorialWindow.decription.BattleDirection" : "Per attaccare da una direzione specifica, scorri nella direzione da cui deve essere effettuato l'attacco.",
+	"vcmi.tutorialWindow.decription.BattleDirectionAbort" : "Il gesto di attacco direzionale può essere annullato se il dito è sufficientemente lontano.",
+	"vcmi.tutorialWindow.decription.AbortSpell" : "Tocca e tieni premuto per annullare un incantesimo.",
+
+	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Mostra creature disponibili",
+	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Mostra creature disponibili}\n\nMostra il numero di creature disponibili per l'acquisto invece della loro crescita nel riepilogo della città (angolo in basso a sinistra della schermata della città).",
+	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Mostra crescita settimanale delle creature",
+	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Mostra crescita settimanale delle creature}\n\nMostra la crescita settimanale delle creature invece della quantità disponibile nel riepilogo della città (angolo in basso a sinistra della schermata della città).",
+	"vcmi.otherOptions.compactTownCreatureInfo.hover": "Info compatta delle creature",
+	"vcmi.otherOptions.compactTownCreatureInfo.help": "{Info compatta delle creature}\n\nMostra informazioni più piccole per le creature della città nel riepilogo della città (angolo in basso a sinistra della schermata della città).",
+
+	"vcmi.townHall.missingBase"             : "L'edificio base %s deve essere costruito prima",
+	"vcmi.townHall.noCreaturesToRecruit"    : "Non ci sono creature da reclutare!",
+
+	"vcmi.townStructure.bank.borrow" : "Entri in banca. Un banchiere ti vede e dice: \"Abbiamo preparato un'offerta speciale per te. Puoi prendere un prestito di 2500 oro per 5 giorni. Dovrai restituire 500 oro ogni giorno.\"",
+	"vcmi.townStructure.bank.payBack" : "Entri in banca. Un banchiere ti vede e dice: \"Hai già ottenuto un prestito. Rimborsalo prima di prenderne un altro.\"",
+
+	"vcmi.logicalExpressions.anyOf"  : "Qualsiasi dei seguenti:",
+	"vcmi.logicalExpressions.allOf"  : "Tutti i seguenti:",
+	"vcmi.logicalExpressions.noneOf" : "Nessuno dei seguenti:",
+
+	"vcmi.heroWindow.openCommander.hover" : "Apri finestra informazioni comandante",
+	"vcmi.heroWindow.openCommander.help"  : "Mostra i dettagli sul comandante di questo eroe.",
+	"vcmi.heroWindow.openBackpack.hover" : "Apri finestra zaino artefatti",
+	"vcmi.heroWindow.openBackpack.help"  : "Apre una finestra che consente una gestione più semplice dello zaino artefatti.",
+	"vcmi.heroWindow.sortBackpackByCost.hover"  : "Ordina per costo",
+	"vcmi.heroWindow.sortBackpackByCost.help"  : "Ordina gli artefatti nello zaino in base al costo.",
+	"vcmi.heroWindow.sortBackpackBySlot.hover"  : "Ordina per slot",
+	"vcmi.heroWindow.sortBackpackBySlot.help"  : "Ordina gli artefatti nello zaino in base allo slot equipaggiato.",
+	"vcmi.heroWindow.sortBackpackByClass.hover"  : "Ordina per classe",
+	"vcmi.heroWindow.sortBackpackByClass.help"  : "Ordina gli artefatti nello zaino in base alla classe dell'artefatto. Tesoro, Minore, Maggiore, Reliquia",
+	"vcmi.heroWindow.fusingArtifact.fusing" : "Possiedi tutti i componenti necessari per la fusione del %s. Vuoi eseguire la fusione? {Tutti i componenti saranno consumati durante la fusione.}",
+
+	"vcmi.tavernWindow.inviteHero"  : "Invita eroe",
+
+	"vcmi.commanderWindow.artifactMessage" : "Vuoi restituire questo artefatto all'eroe?",
+
+	"vcmi.creatureWindow.showBonuses.hover"    : "Passa alla vista bonus",
+	"vcmi.creatureWindow.showBonuses.help"     : "Mostra tutti i bonus attivi del comandante.",
+	"vcmi.creatureWindow.showSkills.hover"     : "Passa alla vista abilità",
+	"vcmi.creatureWindow.showSkills.help"      : "Mostra tutte le abilità apprese del comandante.",
+	"vcmi.creatureWindow.returnArtifact.hover" : "Restituisci artefatto",
+	"vcmi.creatureWindow.returnArtifact.help"  : "Fai clic su questo pulsante per restituire l'artefatto allo zaino dell'eroe.",
+
+	"vcmi.questLog.hideComplete.hover" : "Nascondi missioni completate",
+	"vcmi.questLog.hideComplete.help"  : "Nasconde tutte le missioni completate.",
+
+	"vcmi.randomMapTab.widgets.randomTemplate"      : "(Casuale)",
+	"vcmi.randomMapTab.widgets.templateLabel"        : "Modello",
+	"vcmi.randomMapTab.widgets.teamAlignmentsButton" : "Imposta...",
+	"vcmi.randomMapTab.widgets.teamAlignmentsLabel"  : "Allineamenti squadra",
+	"vcmi.randomMapTab.widgets.roadTypesLabel"       : "Tipi di strade",
+
+	"vcmi.optionsTab.turnOptions.hover" : "Opzioni turno",
+	"vcmi.optionsTab.turnOptions.help" : "Seleziona opzioni timer turno e turni simultanei",
+
+	"vcmi.optionsTab.chessFieldBase.hover" : "Timer base",
+	"vcmi.optionsTab.chessFieldTurn.hover" : "Timer turno",
+	"vcmi.optionsTab.chessFieldBattle.hover" : "Timer battaglia",
+	"vcmi.optionsTab.chessFieldUnit.hover" : "Timer unità",
+	"vcmi.optionsTab.chessFieldBase.help" : "Utilizzato quando {Timer turno} raggiunge 0. Impostato una sola volta all'inizio del gioco. Al raggiungimento dello zero, il turno corrente termina. Qualsiasi combattimento in corso si concluderà con una sconfitta.",
+	"vcmi.optionsTab.chessFieldTurnAccumulate.help" : "Utilizzato fuori dal combattimento o quando {Timer battaglia} scade. Resettato ogni turno. Il tempo residuo viene aggiunto a {Timer base} alla fine del turno.",
+	"vcmi.optionsTab.chessFieldTurnDiscard.help" : "Utilizzato fuori dal combattimento o quando {Timer battaglia} scade. Resettato ogni turno. Il tempo non speso viene perso.",
+	"vcmi.optionsTab.chessFieldBattle.help" : "Utilizzato nelle battaglie con IA o nei combattimenti PvP quando {Timer unità} scade. Resettato all'inizio di ogni combattimento.",
+	"vcmi.optionsTab.chessFieldUnitAccumulate.help" : "Utilizzato quando si seleziona l'azione di un'unità nei combattimenti PvP. Il tempo residuo viene aggiunto a {Timer battaglia} alla fine del turno dell'unità.",
+	"vcmi.optionsTab.chessFieldUnitDiscard.help" : "Utilizzato quando si seleziona l'azione di un'unità nei combattimenti PvP. Resettato all'inizio del turno di ogni unità. Il tempo non speso viene perso.",
+
+	"vcmi.optionsTab.accumulate" : "Accumula",
+
+	"vcmi.optionsTab.simturnsTitle" : "Turni simultanei",
+	"vcmi.optionsTab.simturnsMin.hover" : "Almeno per",
+	"vcmi.optionsTab.simturnsMax.hover" : "Al massimo per",
+	"vcmi.optionsTab.simturnsAI.hover" : "(Sperimentale) Turni simultanei IA",
+	"vcmi.optionsTab.simturnsMin.help" : "Gioca simultaneamente per il numero di giorni specificato. I contatti tra i giocatori durante questo periodo sono bloccati.",
+	"vcmi.optionsTab.simturnsMax.help" : "Gioca simultaneamente per il numero di giorni specificato o fino al contatto con un altro giocatore.",
+	"vcmi.optionsTab.simturnsAI.help" : "{Turni simultanei IA}\nOpzione sperimentale. Consente ai giocatori IA di agire contemporaneamente ai giocatori umani quando i turni simultanei sono abilitati.",
+
+	"vcmi.optionsTab.turnTime.select"     : "Seleziona preset timer turno",
+	"vcmi.optionsTab.turnTime.unlimited"  : "Tempo di turno illimitato",
+	"vcmi.optionsTab.turnTime.classic.1"  : "Timer classico: 1 minuto",
+	"vcmi.optionsTab.turnTime.classic.2"  : "Timer classico: 2 minuti",
+	"vcmi.optionsTab.turnTime.classic.5"  : "Timer classico: 5 minuti",
+	"vcmi.optionsTab.turnTime.classic.10" : "Timer classico: 10 minuti",
+	"vcmi.optionsTab.turnTime.classic.20" : "Timer classico: 20 minuti",
+	"vcmi.optionsTab.turnTime.classic.30" : "Timer classico: 30 minuti",
+	"vcmi.optionsTab.turnTime.chess.20"   : "Scacchi: 20:00 + 10:00 + 02:00 + 00:00",
+	"vcmi.optionsTab.turnTime.chess.16"   : "Scacchi: 16:00 + 08:00 + 01:30 + 00:00",
+	"vcmi.optionsTab.turnTime.chess.8"    : "Scacchi: 08:00 + 04:00 + 01:00 + 00:00",
+	"vcmi.optionsTab.turnTime.chess.4"    : "Scacchi: 04:00 + 02:00 + 00:30 + 00:00",
+	"vcmi.optionsTab.turnTime.chess.2"    : "Scacchi: 02:00 + 01:00 + 00:15 + 00:00",
+	"vcmi.optionsTab.turnTime.chess.1"    : "Scacchi: 01:00 + 01:00 + 00:00 + 00:00",
+
+	"vcmi.optionsTab.simturns.select"         : "Seleziona preset turni simultanei",
+	"vcmi.optionsTab.simturns.none"           : "Nessun turno simultaneo",
+	"vcmi.optionsTab.simturns.tillContactMax" : "Turni simultanei: fino al contatto",
+	"vcmi.optionsTab.simturns.tillContact1"   : "Turni simultanei: 1 settimana, interruzione al contatto",
+	"vcmi.optionsTab.simturns.tillContact2"   : "Turni simultanei: 2 settimane, interruzione al contatto",
+	"vcmi.optionsTab.simturns.tillContact4"   : "Turni simultanei: 1 mese, interruzione al contatto",
+	"vcmi.optionsTab.simturns.blocked1"       : "Turni simultanei: 1 settimana, contatti bloccati",
+	"vcmi.optionsTab.simturns.blocked2"       : "Turni simultanei: 2 settimane, contatti bloccati",
+	"vcmi.optionsTab.simturns.blocked4"       : "Turni simultanei: 1 mese, contatti bloccati",
+	
+	// Translation note: translate strings below using form that is correct for "0 days", "1 day" and "2 days" in your language
+	// Using this information, VCMI will automatically select correct plural form for every possible amount
+	"vcmi.optionsTab.simturns.days.0" : " %d giorni",
+	"vcmi.optionsTab.simturns.days.1" : " %d giorno",
+	"vcmi.optionsTab.simturns.days.2" : " %d giorni",
+	"vcmi.optionsTab.simturns.weeks.0" : " %d settimane",
+	"vcmi.optionsTab.simturns.weeks.1" : " %d settimana",
+	"vcmi.optionsTab.simturns.weeks.2" : " %d settimane",
+	"vcmi.optionsTab.simturns.months.0" : " %d mesi",
+	"vcmi.optionsTab.simturns.months.1" : " %d mese",
+	"vcmi.optionsTab.simturns.months.2" : " %d mesi",
+
+	"vcmi.optionsTab.extraOptions.hover" : "Opzioni extra",
+	"vcmi.optionsTab.extraOptions.help" : "Impostazioni aggiuntive per il gioco",
+
+	"vcmi.optionsTab.cheatAllowed.hover" : "Permetti trucchi",
+	"vcmi.optionsTab.unlimitedReplay.hover" : "Replay battaglia illimitato",
+	"vcmi.optionsTab.cheatAllowed.help" : "{Permetti trucchi}\nPermette l'inserimento di trucchi durante il gioco.",
+	"vcmi.optionsTab.unlimitedReplay.help" : "{Replay battaglia illimitato}\nNessun limite di riproduzione delle battaglie.",
+
+	// Custom victory conditions for H3 campaigns and HotA maps
+	"vcmi.map.victoryCondition.daysPassed.toOthers" : "Il nemico è riuscito a sopravvivere fino a questo giorno. La vittoria è sua!",
+	"vcmi.map.victoryCondition.daysPassed.toSelf" : "Congratulazioni! Sei riuscito a sopravvivere. La vittoria è tua!",
+	"vcmi.map.victoryCondition.eliminateMonsters.toOthers" : "Il nemico ha sconfitto tutti i mostri che infestavano questa terra e reclama la vittoria!",
+	"vcmi.map.victoryCondition.eliminateMonsters.toSelf" : "Congratulazioni! Hai sconfitto tutti i mostri che infestavano questa terra e puoi reclamare la vittoria!",
+	"vcmi.map.victoryCondition.collectArtifacts.message" : "Acquisisci tre artefatti",
+	"vcmi.map.victoryCondition.angelicAlliance.toSelf" : "Congratulazioni! Hai sconfitto tutti i tuoi nemici e hai l'Alleanza Angelica! La vittoria è tua!",
+	"vcmi.map.victoryCondition.angelicAlliance.message" : "Sconfiggi tutti i nemici e crea l'Alleanza Angelica",
+	"vcmi.map.victoryCondition.angelicAlliancePartLost.toSelf" : "Ahimè, hai perso parte dell'Alleanza Angelica. Tutto è perduto.",
+
+	// few strings from WoG used by vcmi
+	"vcmi.stackExperience.description" : "» Dettagli esperienza truppa «\n\nTipo di creatura ................... : %s\nGrado esperienza ................. : %s (%i)\nPunti esperienza ............... : %i\nPunti esperienza al livello successivo .. : %i\nEsperienza massima per battaglia ... : %i%% (%i)\nNumero di creature nello stack .... : %i\nNumero massimo di nuove reclute\n senza perdere il grado attuale .... : %i\nMoltiplicatore esperienza ........... : %.2f\nMoltiplicatore miglioramento .............. : %.2f\nEsperienza dopo il livello 10 ........ : %i\nNumero massimo di nuove reclute per mantenere il\n grado 10 se a esperienza massima : %i",
+	"vcmi.stackExperience.rank.0" : "Base",
+	"vcmi.stackExperience.rank.1" : "Principiante",
+	"vcmi.stackExperience.rank.2" : "Addestrato",
+	"vcmi.stackExperience.rank.3" : "Abile",
+	"vcmi.stackExperience.rank.4" : "Esperto",
+	"vcmi.stackExperience.rank.5" : "Veterano",
+	"vcmi.stackExperience.rank.6" : "Maestro",
+	"vcmi.stackExperience.rank.7" : "Esperto",
+	"vcmi.stackExperience.rank.8" : "Gran Maestro",
+	"vcmi.stackExperience.rank.9" : "Campione",
+	"vcmi.stackExperience.rank.10" : "Asso",
+	
+	// Strings for HotA Seer Hut / Quest Guards
+	"core.seerhut.quest.heroClass.complete.0" : "Ah, sei %s. Ecco un regalo per te. Lo accetti?",
+	"core.seerhut.quest.heroClass.complete.1" : "Ah, sei %s. Ecco un regalo per te. Lo accetti?",
+	"core.seerhut.quest.heroClass.complete.2" : "Ah, sei %s. Ecco un regalo per te. Lo accetti?",
+	"core.seerhut.quest.heroClass.complete.3" : "Le guardie notano che sei %s e ti offrono di passare. Accetti?",
+	"core.seerhut.quest.heroClass.complete.4" : "Le guardie notano che sei %s e ti offrono di passare. Accetti?",
+	"core.seerhut.quest.heroClass.complete.5" : "Le guardie notano che sei %s e ti offrono di passare. Accetti?",
+	"core.seerhut.quest.heroClass.description.0" : "Invia %s a %s",
+	"core.seerhut.quest.heroClass.description.1" : "Invia %s a %s",
+	"core.seerhut.quest.heroClass.description.2" : "Invia %s a %s",
+	"core.seerhut.quest.heroClass.description.3" : "Invia %s ad aprire il cancello",
+	"core.seerhut.quest.heroClass.description.4" : "Invia %s ad aprire il cancello",
+	"core.seerhut.quest.heroClass.description.5" : "Invia %s ad aprire il cancello",
+	"core.seerhut.quest.heroClass.hover.0" : "(cerca un eroe della classe %s)",
+	"core.seerhut.quest.heroClass.hover.1" : "(cerca un eroe della classe %s)",
+	"core.seerhut.quest.heroClass.hover.2" : "(cerca un eroe della classe %s)",
+	"core.seerhut.quest.heroClass.hover.3" : "(cerca un eroe della classe %s)",
+	"core.seerhut.quest.heroClass.hover.4" : "(cerca un eroe della classe %s)",
+	"core.seerhut.quest.heroClass.hover.5" : "(cerca un eroe della classe %s)",
+	"core.seerhut.quest.heroClass.receive.0" : "Ho un regalo per %s.",
+	"core.seerhut.quest.heroClass.receive.1" : "Ho un regalo per %s.",
+	"core.seerhut.quest.heroClass.receive.2" : "Ho un regalo per %s.",
+	"core.seerhut.quest.heroClass.receive.3" : "Le guardie qui dicono che lasceranno passare solo %s.",
+	"core.seerhut.quest.heroClass.receive.4" : "Le guardie qui dicono che lasceranno passare solo %s.",
+	"core.seerhut.quest.heroClass.receive.5" : "Le guardie qui dicono che lasceranno passare solo %s.",
+	"core.seerhut.quest.heroClass.visit.0" : "Non sei %s. Non ho niente per te. Vattene!",
+	"core.seerhut.quest.heroClass.visit.1" : "Non sei %s. Non ho niente per te. Vattene!",
+	"core.seerhut.quest.heroClass.visit.2" : "Non sei %s. Non ho niente per te. Vattene!",
+	"core.seerhut.quest.heroClass.visit.3" : "Le guardie qui lasceranno passare solo %s.",
+	"core.seerhut.quest.heroClass.visit.4" : "Le guardie qui lasceranno passare solo %s.",
+	"core.seerhut.quest.heroClass.visit.5" : "Le guardie qui lasceranno passare solo %s.",
+	
+	"core.seerhut.quest.reachDate.complete.0" : "Ora sono libero. Ecco cosa ho per te. Lo accetti?",
+	"core.seerhut.quest.reachDate.complete.1" : "Ora sono libero. Ecco cosa ho per te. Lo accetti?",
+	"core.seerhut.quest.reachDate.complete.2" : "Ora sono libero. Ecco cosa ho per te. Lo accetti?",
+	"core.seerhut.quest.reachDate.complete.3" : "Ora puoi passare. Vuoi attraversare?",
+	"core.seerhut.quest.reachDate.complete.4" : "Ora puoi passare. Vuoi attraversare?",
+	"core.seerhut.quest.reachDate.complete.5" : "Ora puoi passare. Vuoi attraversare?",
+	"core.seerhut.quest.reachDate.description.0" : "Aspetta fino a %s per %s",
+	"core.seerhut.quest.reachDate.description.1" : "Aspetta fino a %s per %s",
+	"core.seerhut.quest.reachDate.description.2" : "Aspetta fino a %s per %s",
+	"core.seerhut.quest.reachDate.description.3" : "Aspetta fino a %s per aprire il cancello",
+	"core.seerhut.quest.reachDate.description.4" : "Aspetta fino a %s per aprire il cancello",
+	"core.seerhut.quest.reachDate.description.5" : "Aspetta fino a %s per aprire il cancello",
+	"core.seerhut.quest.reachDate.hover.0" : "(Non tornare prima di %s)",
+	"core.seerhut.quest.reachDate.hover.1" : "(Non tornare prima di %s)",
+	"core.seerhut.quest.reachDate.hover.2" : "(Non tornare prima di %s)",
+	"core.seerhut.quest.reachDate.hover.3" : "(Non tornare prima di %s)",
+	"core.seerhut.quest.reachDate.hover.4" : "(Non tornare prima di %s)",
+	"core.seerhut.quest.reachDate.hover.5" : "(Non tornare prima di %s)",
+	"core.seerhut.quest.reachDate.receive.0" : "Sono occupato. Torna dopo il %s",
+	"core.seerhut.quest.reachDate.receive.1" : "Sono occupato. Torna dopo il %s",
+	"core.seerhut.quest.reachDate.receive.2" : "Sono occupato. Torna dopo il %s",
+	"core.seerhut.quest.reachDate.receive.3" : "Chiuso fino al %s.",
+	"core.seerhut.quest.reachDate.receive.4" : "Chiuso fino al %s.",
+	"core.seerhut.quest.reachDate.receive.5" : "Chiuso fino al %s.",
+	"core.seerhut.quest.reachDate.visit.0" : "Sono occupato. Torna dopo il %s.",
+	"core.seerhut.quest.reachDate.visit.1" : "Sono occupato. Torna dopo il %s.",
+	"core.seerhut.quest.reachDate.visit.2" : "Sono occupato. Torna dopo il %s.",
+	"core.seerhut.quest.reachDate.visit.3" : "Chiuso fino al %s.",
+	"core.seerhut.quest.reachDate.visit.4" : "Chiuso fino al %s.",
+	"core.seerhut.quest.reachDate.visit.5" : "Chiuso fino al %s.",
+	
+	"mapObject.core.hillFort.object.description" : "Aggiorna le creature. I livelli 1 - 4 sono meno costosi rispetto alla città associata.",
+	
+	"core.bonus.ADDITIONAL_ATTACK.name": "Doppio colpo",
+	"core.bonus.ADDITIONAL_ATTACK.description": "Attacca due volte",
+	"core.bonus.ADDITIONAL_RETALIATION.name": "Ritorsioni aggiuntive",
+	"core.bonus.ADDITIONAL_RETALIATION.description": "Può contrattaccare ${val} volte in più",
+	"core.bonus.AIR_IMMUNITY.name": "Immunità all'aria",
+	"core.bonus.AIR_IMMUNITY.description": "Immune a tutti gli incantesimi della scuola di magia dell'Aria",
+	"core.bonus.ATTACKS_ALL_ADJACENT.name": "Attacco a 360°",
+	"core.bonus.ATTACKS_ALL_ADJACENT.description": "Attacca tutti i nemici adiacenti",
+	"core.bonus.BLOCKS_RETALIATION.name": "Nessuna ritorsione",
+	"core.bonus.BLOCKS_RETALIATION.description": "Il nemico non può contrattaccare",
+	"core.bonus.BLOCKS_RANGED_RETALIATION.name": "Nessuna ritorsione a distanza",
+	"core.bonus.BLOCKS_RANGED_RETALIATION.description": "Il nemico non può contrattaccare con un attacco a distanza",
+	"core.bonus.CATAPULT.name": "Catapulta",
+	"core.bonus.CATAPULT.description": "Attacca le mura d'assedio",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name": "Riduce il costo del lancio (${val})",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description": "Riduce il costo del lancio degli incantesimi dell'eroe di ${val}",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name": "Resistenza magica (${val}%)",
+	"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.description": "Aumenta il costo del lancio degli incantesimi nemici di ${val}",
+	"core.bonus.CHARGE_IMMUNITY.name": "Immunità alla carica",
+	"core.bonus.CHARGE_IMMUNITY.description": "Immune alla carica di Cavalieri e Campioni",
+	"core.bonus.DARKNESS.name": "Oscurità",
+	"core.bonus.DARKNESS.description": "Crea un velo d'oscurità con raggio ${val}",
+	"core.bonus.DEATH_STARE.name": "Sguardo della morte (${val}%)",
+	"core.bonus.DEATH_STARE.description": "Ha una probabilità del ${val}% di uccidere un'unità singola",
+	"core.bonus.DEFENSIVE_STANCE.name": "Bonus di difesa",
+	"core.bonus.DEFENSIVE_STANCE.description": "+${val} Difesa quando è in posizione difensiva",
+	"core.bonus.DESTRUCTION.name": "Distruzione",
+	"core.bonus.DESTRUCTION.description": "Ha una probabilità del ${val}% di uccidere unità extra dopo l'attacco",
+	"core.bonus.DOUBLE_DAMAGE_CHANCE.name": "Colpo della morte",
+	"core.bonus.DOUBLE_DAMAGE_CHANCE.description": "Ha una probabilità del ${val}% di infliggere il doppio dei danni base quando attacca",
+	"core.bonus.DRAGON_NATURE.name": "Drago",
+	"core.bonus.DRAGON_NATURE.description": "Creatura con Natura del Drago",
+	"core.bonus.EARTH_IMMUNITY.name": "Immunità alla terra",
+	"core.bonus.EARTH_IMMUNITY.description": "Immune a tutti gli incantesimi della scuola di magia della Terra",
+	"core.bonus.ENCHANTER.name": "Incantatore",
+	"core.bonus.ENCHANTER.description": "Può lanciare l'incantesimo ${subtype.spell} ogni turno",
+	"core.bonus.ENCHANTED.name": "Incantato",
+	"core.bonus.ENCHANTED.description": "Sotto effetto permanente di ${subtype.spell}",
+	"core.bonus.ENEMY_ATTACK_REDUCTION.name": "Ignora attacco (${val}%)",
+	"core.bonus.ENEMY_ATTACK_REDUCTION.description": "Quando viene attaccata, ignora il ${val}% dell'attacco dell'avversario",
+	"core.bonus.ENEMY_DEFENCE_REDUCTION.name": "Ignora difesa (${val}%)",
+	"core.bonus.ENEMY_DEFENCE_REDUCTION.description": "Quando attacca, ignora il ${val}% della difesa dell'avversario",
+	"core.bonus.FIRE_IMMUNITY.name": "Immunità al fuoco",
+	"core.bonus.FIRE_IMMUNITY.description": "Immune a tutti gli incantesimi della scuola di magia del Fuoco",
+	"core.bonus.FIRE_SHIELD.name": "Scudo di fuoco (${val}%)",
+	"core.bonus.FIRE_SHIELD.description": "Riflette una parte dei danni da mischia",
+	"core.bonus.FIRST_STRIKE.name": "Primo colpo",
+	"core.bonus.FIRST_STRIKE.description": "Questa creatura contrattacca prima di essere attaccata",
+	"core.bonus.FEAR.name": "Paura",
+	"core.bonus.FEAR.description": "Provoca paura su una pila nemica",
+	"core.bonus.FEARLESS.name": "Impavido",
+	"core.bonus.FEARLESS.description": "Immune all'abilità Paura",
+	"core.bonus.FEROCITY.name": "Ferocia",
+	"core.bonus.FEROCITY.description": "Attacca ${val} volte aggiuntive se uccide qualcuno",
+	"core.bonus.FLYING.name": "Volare",
+	"core.bonus.FLYING.description": "Si muove volando (ignora gli ostacoli)",
+	"core.bonus.FREE_SHOOTING.name": "Colpo ravvicinato",
+	"core.bonus.FREE_SHOOTING.description": "Può usare attacchi a distanza anche in mischia",
+	"core.bonus.GARGOYLE.name": "Gargoyle",
+	"core.bonus.GARGOYLE.description": "Non può essere rianimato o curato",
+	"core.bonus.GENERAL_DAMAGE_REDUCTION.name": "Riduzione danno (${val}%)",
+	"core.bonus.GENERAL_DAMAGE_REDUCTION.description": "Riduce il danno fisico da attacchi a distanza o corpo a corpo",
+	"core.bonus.HATE.name": "Odia ${subtype.creature}",
+	"core.bonus.HATE.description": "Infligge ${val}% di danni in più a ${subtype.creature}",
+	"core.bonus.HEALER.name": "Guaritore",
+	"core.bonus.HEALER.description": "Cura le unità alleate",
+	"core.bonus.HP_REGENERATION.name": "Rigenerazione",
+	"core.bonus.HP_REGENERATION.description": "Cura ${val} punti ferita ogni turno",
+	"core.bonus.JOUSTING.name": "Carica del Campione",
+	"core.bonus.JOUSTING.description": "+${val}% danno per ogni esagono percorso",
+	"core.bonus.KING.name": "Re",
+	"core.bonus.KING.description": "Vulnerabile a SLAUGHTER di livello ${val} o superiore",
+	"core.bonus.LEVEL_SPELL_IMMUNITY.name": "Immunità agli incantesimi 1-${val}",
+	"core.bonus.LEVEL_SPELL_IMMUNITY.description": "Immunità agli incantesimi di livello 1-${val}",
+	"core.bonus.LIMITED_SHOOTING_RANGE.name" : "Portata limitata",
+	"core.bonus.LIMITED_SHOOTING_RANGE.description" : "Impossibile attaccare unità oltre ${val} esagoni",
+	"core.bonus.LIFE_DRAIN.name": "Assorbimento vitale (${val}%)",
+	"core.bonus.LIFE_DRAIN.description": "Drena ${val}% del danno inflitto",
+	"core.bonus.MANA_CHANNELING.name": "Canale Magico ${val}%",
+	"core.bonus.MANA_CHANNELING.description": "Fornisce al tuo eroe ${val}% del mana speso dal nemico",
+	"core.bonus.MANA_DRAIN.name": "Drenaggio di mana",
+	"core.bonus.MANA_DRAIN.description": "Drena ${val} mana ogni turno",
+	"core.bonus.MAGIC_MIRROR.name": "Specchio Magico (${val}%)",
+	"core.bonus.MAGIC_MIRROR.description": "Ha una probabilità del ${val}% di reindirizzare un incantesimo offensivo su un'unità nemica",
+	"core.bonus.MAGIC_RESISTANCE.name": "Resistenza Magica (${val}%)",
+	"core.bonus.MAGIC_RESISTANCE.description": "Ha una probabilità del ${val}% di resistere a un incantesimo nemico",
+	"core.bonus.MIND_IMMUNITY.name": "Immunità agli incantesimi mentali",
+	"core.bonus.MIND_IMMUNITY.description": "Immune agli incantesimi di tipo mentale",
+	"core.bonus.NO_DISTANCE_PENALTY.name": "Nessuna penalità a distanza",
+	"core.bonus.NO_DISTANCE_PENALTY.description": "Infligge il massimo danno a qualsiasi distanza",
+	"core.bonus.NO_MELEE_PENALTY.name": "Nessuna penalità in mischia",
+	"core.bonus.NO_MELEE_PENALTY.description": "L'unità non subisce penalità in mischia",
+	"core.bonus.NO_MORALE.name": "Morale neutrale",
+	"core.bonus.NO_MORALE.description": "L'unità è immune agli effetti del morale",
+	"core.bonus.NO_WALL_PENALTY.name": "Nessuna penalità per le mura",
+	"core.bonus.NO_WALL_PENALTY.description": "Danno pieno durante l'assedio",
+	"core.bonus.NON_LIVING.name": "Non vivente",
+	"core.bonus.NON_LIVING.description": "Immunità a molti effetti",
+	"core.bonus.RANDOM_SPELLCASTER.name": "Random spellcaster",
+	"core.bonus.RANDOM_SPELLCASTER.description": "Può lanciare un incantesimo casuale",
+	"core.bonus.RANGED_RETALIATION.name": "Ritorsione a distanza",
+	"core.bonus.RANGED_RETALIATION.description": "Può effettuare un contrattacco a distanza",
+	"core.bonus.RECEPTIVE.name": "Ricettivo",
+	"core.bonus.RECEPTIVE.description": "Nessuna immunità agli incantesimi amichevoli",
+	"core.bonus.REBIRTH.name": "Rinascita (${val}%)",
+	"core.bonus.REBIRTH.description": "${val}% della pila risorgerà dopo la morte",
+	"core.bonus.RETURN_AFTER_STRIKE.name": "Attacco e Ritorno",
+	"core.bonus.RETURN_AFTER_STRIKE.description": "Ritorna dopo un attacco in mischia",
+	"core.bonus.REVENGE.name": "Vendetta",
+	"core.bonus.REVENGE.description": "Infligge danni extra in base alla salute persa dell'attaccante in battaglia",
+	"core.bonus.SHOOTER.name": "A distanza",
+	"core.bonus.SHOOTER.description": "L'unità può attaccare a distanza",
+	"core.bonus.SHOOTS_ALL_ADJACENT.name": "Tiro a raggio totale",
+	"core.bonus.SHOOTS_ALL_ADJACENT.description": "Gli attacchi a distanza di questa unità colpiscono tutti i bersagli in una piccola area",
+	"core.bonus.SOUL_STEAL.name": "Furto d'anima",
+	"core.bonus.SOUL_STEAL.description": "Ottiene ${val} nuove creature per ogni nemico ucciso",
+	"core.bonus.SPELLCASTER.name": "Incantatore",
+	"core.bonus.SPELLCASTER.description": "Può lanciare ${subtype.spell}",
+	"core.bonus.SPELL_AFTER_ATTACK.name": "Lancia Dopo l'Attacco",
+	"core.bonus.SPELL_AFTER_ATTACK.description": "Ha una probabilità del ${val}% di lanciare ${subtype.spell} dopo l'attacco",
+	"core.bonus.SPELL_BEFORE_ATTACK.name": "Lancia Prima dell'Attacco",
+	"core.bonus.SPELL_BEFORE_ATTACK.description": "Ha una probabilità del ${val}% di lanciare ${subtype.spell} prima dell'attacco",
+	"core.bonus.SPELL_IMMUNITY.name": "Immunità agli incantesimi",
+	"core.bonus.SPELL_IMMUNITY.description": "Immune a ${subtype.spell}",
+	"core.bonus.SPELL_LIKE_ATTACK.name": "Attacco simile a un incantesimo",
+	"core.bonus.SPELL_LIKE_ATTACK.description": "Attacca con ${subtype.spell}",
+	"core.bonus.SPELL_RESISTANCE_AURA.name": "Aura di Resistenza",
+	"core.bonus.SPELL_RESISTANCE_AURA.description": "Gli stack vicini ottengono ${val}% di resistenza magica",
+	"core.bonus.SUMMON_GUARDIANS.name": "Evoca guardiani",
+	"core.bonus.SUMMON_GUARDIANS.description": "All'inizio della battaglia evoca ${subtype.creature} (${val}%)",
+	"core.bonus.SYNERGY_TARGET.name": "Sinergizzabile",
+	"core.bonus.SYNERGY_TARGET.description": "Questa creatura è vulnerabile all'effetto sinergico",
+	"core.bonus.TWO_HEX_ATTACK_BREATH.name": "Soffio",
+	"core.bonus.TWO_HEX_ATTACK_BREATH.description": "Attacco a soffio (raggio di 2 esagoni)",
+	"core.bonus.THREE_HEADED_ATTACK.name": "Attacco a tre teste",
+	"core.bonus.THREE_HEADED_ATTACK.description": "Attacca tre unità adiacenti",
+	"core.bonus.TRANSMUTATION.name": "Trasmutazione",
+	"core.bonus.TRANSMUTATION.description": "${val}% di possibilità di trasformare l'unità attaccata in un altro tipo",
+	"core.bonus.UNDEAD.name": "Non Morto",
+	"core.bonus.UNDEAD.description": "L'unità è Non Morta",
+	"core.bonus.UNLIMITED_RETALIATIONS.name": "Ritorsioni illimitate",
+	"core.bonus.UNLIMITED_RETALIATIONS.description": "Può contrattaccare un numero illimitato di attacchi",
+	"core.bonus.WATER_IMMUNITY.name": "Immunità all'acqua",
+	"core.bonus.WATER_IMMUNITY.description": "Immune a tutti gli incantesimi della scuola di magia dell'Acqua",
+	"core.bonus.WIDE_BREATH.name": "Soffio ampio",
+	"core.bonus.WIDE_BREATH.description": "Attacco a soffio ampio (più esagoni)",
+	"core.bonus.DISINTEGRATE.name": "Disintegrazione",
+	"core.bonus.DISINTEGRATE.description": "Nessun cadavere rimane dopo la morte",
+	"core.bonus.INVINCIBLE.name": "Invincibile",
+	"core.bonus.INVINCIBLE.description": "Non può essere influenzato da nulla",
+	"core.bonus.MECHANICAL.name": "Meccanico",
+	"core.bonus.MECHANICAL.description": "Immunità a molti effetti, riparabile",
+	"core.bonus.PRISM_HEX_ATTACK_BREATH.name": "Soffio Prisma",
+	"core.bonus.PRISM_HEX_ATTACK_BREATH.description": "Attacco Soffio Prisma (tre direzioni)",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name": "Resistenza agli incantesimi",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.air": "Resistenza agli incantesimi dell'Aria",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.fire": "Resistenza agli incantesimi di fuoco",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.water": "Resistenza agli incantesimi dell'Acqua",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.name.earth": "Resistenza agli incantesimi della Terra",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description": "Danno da tutti gli incantesimi ridotto del ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.air": "Danno da tutti gli incantesimi dell'Aria ridotto del ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.fire": "Danno da tutti gli incantesimi del Fuoco ridotto del ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.water": "Danno da tutti gli incantesimi dell'Acqua ridotto del ${val}%.",
+	"core.bonus.SPELL_DAMAGE_REDUCTION.description.earth": "Danno da tutti gli incantesimi della Terra ridotto del ${val}%.",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name": "Immunità agli incantesimi",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.air": "Immunità all'aria",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.fire": "Immunità al fuoco",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.water": "Immunità all'acqua",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.name.earth": "Immunità alla terra",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description": "Questa unità è immune a tutti gli incantesimi",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.air": "Questa unità è immune a tutti gli incantesimi della scuola dell'Aria",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.fire": "Questa unità è immune a tutti gli incantesimi della scuola del Fuoco",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.water": "Questa unità è immune a tutti gli incantesimi della scuola dell'Acqua",
+	"core.bonus.SPELL_SCHOOL_IMMUNITY.description.earth": "Questa unità è immune a tutti gli incantesimi della scuola della Terra",
+	"core.bonus.OPENING_BATTLE_SPELL.name": "Inizia con incantesimo",
+	"core.bonus.OPENING_BATTLE_SPELL.description": "Lancia ${subtype.spell} all'inizio della battaglia",
+	
+	"spell.core.castleMoat.name" : "Fossato",
+	"spell.core.castleMoatTrigger.name" : "Fossato",
+	"spell.core.catapultShot.name" : "Colpo di Catapulta",
+	"spell.core.cyclopsShot.name" : "Colpo d'assedio",
+	"spell.core.dungeonMoat.name" : "Olio Bollente",
+	"spell.core.dungeonMoatTrigger.name" : "Olio Bollente",
+	"spell.core.fireWallTrigger.name" : "Muro di Fuoco",
+	"spell.core.firstAid.name" : "Pronto Soccorso",
+	"spell.core.fortressMoat.name" : "Catrame Bollente",
+	"spell.core.fortressMoatTrigger.name" : "Catrame Bollente",
+	"spell.core.infernoMoat.name" : "Lava",
+	"spell.core.infernoMoatTrigger.name" : "Lava",
+	"spell.core.landMineTrigger.name" : "Mina Terrestre",
+	"spell.core.necropolisMoat.name" : "Cimitero d'ossa",
+	"spell.core.necropolisMoatTrigger.name" : "Cimitero di ossa",
+	"spell.core.rampartMoat.name" : "Cimitero di ossa",
+	"spell.core.rampartMoatTrigger.name" : "Rovi",
+	"spell.core.strongholdMoat.name" : "Rovi",
+	"spell.core.strongholdMoatTrigger.name" : "Spuntoni di legno",
+	"spell.core.summonDemons.name" : "Spuntoni di legno",
+	"spell.core.towerMoat.name" : "Mina terrestre"
+}

Some files were not shown because too many files changed in this diff