1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

Merge pull request #1511 from IvanSavenko/launcher_welcome_page

Add welcome/setup page to Laucher
This commit is contained in:
Ivan Savenko 2023-03-16 15:04:49 +02:00 committed by GitHub
commit 865f9f7d2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 4124 additions and 1601 deletions

View File

@ -258,7 +258,7 @@ int main(int argc, char * argv[])
// Init filesystem and settings
preinitDLL(::console);
settings.init();
Settings session = settings.write["session"];
auto setSettingBool = [](std::string key, std::string arg) {
Settings s = settings.write(vstd::split(key, "/"));

View File

@ -91,7 +91,7 @@
"language" : {
"type":"string",
"description": "Base language of the mod, before applying localizations. By default vcmi assumes English",
"enum" : [ "chinese", "english", "german", "polish", "russian", "ukrainian" ],
"enum" : [ "chinese", "english", "korean", "german", "polish", "russian", "ukrainian" ],
},
"depends": {
"type":"array",
@ -125,12 +125,18 @@
"type":"boolean",
"description": "If set to true, mod will not be enabled automatically on install"
},
"chinese" : {
"$ref" : "#/definitions/localizable"
},
"english" : {
"$ref" : "#/definitions/localizable"
},
"german" : {
"$ref" : "#/definitions/localizable"
},
"korean" : {
"$ref" : "#/definitions/localizable"
},
"polish" : {
"$ref" : "#/definitions/localizable"
},

View File

@ -22,6 +22,7 @@
"music",
"sound",
"language",
"gameDataLanguage",
"swipe",
"swipeDesktop",
"saveRandomMaps",
@ -66,6 +67,11 @@
"enum" : [ "chinese", "english", "german", "polish", "russian", "ukrainian" ],
"default" : "english"
},
"gameDataLanguage" : {
"type":"string",
"enum" : [ "auto", "chinese", "english", "german", "korean", "polish", "russian", "ukrainian", "other_cp1250", "other_cp1251", "other_cp1252" ],
"default" : "auto"
},
"lastSave" : {
"type":"string",
"default" : "NEWGAME"
@ -440,7 +446,7 @@
"type" : "object",
"default": {},
"additionalProperties" : false,
"required" : [ "repositoryURL", "enableInstalledMods", "extraResolutionsModPath", "autoCheckRepositories", "updateOnStartup", "updateConfigUrl", "lobbyUrl", "lobbyPort", "lobbyUsername", "connectionTimeout" ],
"required" : [ "setupCompleted", "repositoryURL", "enableInstalledMods", "extraResolutionsModPath", "autoCheckRepositories", "updateOnStartup", "updateConfigUrl", "lobbyUrl", "lobbyPort", "lobbyUsername", "connectionTimeout" ],
"properties" : {
"repositoryURL" : {
"type" : "array",
@ -451,6 +457,10 @@
"type" : "string"
}
},
"setupCompleted" : {
"type" : "boolean",
"default" : false
},
"enableInstalledMods" : {
"type" : "boolean",
"default" : true

View File

@ -1,35 +1,16 @@
set(launcher_modmanager_SRCS
set(launcher_SRCS
StdInc.cpp
modManager/cdownloadmanager_moc.cpp
modManager/cmodlist.cpp
modManager/cmodlistmodel_moc.cpp
modManager/cmodlistview_moc.cpp
modManager/cmodmanager.cpp
modManager/imageviewer_moc.cpp
)
set(launcher_modmanager_HEADERS
modManager/cdownloadmanager_moc.h
modManager/cmodlist.h
modManager/cmodlistmodel_moc.h
modManager/cmodlistview_moc.h
modManager/cmodmanager.h
modManager/imageviewer_moc.h
)
set(launcher_settingsview_SRCS
settingsView/csettingsview_moc.cpp
)
set(launcher_settingsview_HEADERS
settingsView/csettingsview_moc.h
)
set(launcher_SRCS
StdInc.cpp
${launcher_modmanager_SRCS}
${launcher_settingsview_SRCS}
firstLaunch/firstlaunch_moc.cpp
main.cpp
mainwindow_moc.cpp
languages.cpp
launcherdirs.cpp
jsonutils.cpp
updatedialog_moc.cpp
@ -40,9 +21,16 @@ set(launcher_SRCS
set(launcher_HEADERS
StdInc.h
${launcher_modmanager_HEADERS}
${launcher_settingsview_HEADERS}
modManager/cdownloadmanager_moc.h
modManager/cmodlist.h
modManager/cmodlistmodel_moc.h
modManager/cmodlistview_moc.h
modManager/cmodmanager.h
modManager/imageviewer_moc.h
settingsView/csettingsview_moc.h
firstLaunch/firstlaunch_moc.h
mainwindow_moc.h
languages.h
launcherdirs.h
jsonutils.h
updatedialog_moc.h
@ -56,6 +44,7 @@ set(launcher_FORMS
modManager/cmodlistview_moc.ui
modManager/imageviewer_moc.ui
settingsView/csettingsview_moc.ui
firstLaunch/firstlaunch_moc.ui
mainwindow_moc.ui
updatedialog_moc.ui
lobby/lobby_moc.ui

View File

@ -0,0 +1,396 @@
/*
* firstlaunch_moc.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "firstlaunch_moc.h"
#include "ui_firstlaunch_moc.h"
#include "mainwindow_moc.h"
#include "modManager/cmodlistview_moc.h"
#include "../../lib/CConfigHandler.h"
#include "../../lib/CGeneralTextHandler.h"
#include "../../lib/Languages.h"
#include "../../lib/VCMIDirs.h"
#include "../../lib/filesystem/Filesystem.h"
#include "../languages.h"
FirstLaunchView::FirstLaunchView(QWidget * parent)
: QWidget(parent)
, ui(new Ui::FirstLaunchView)
{
ui->setupUi(this);
enterSetup();
activateTabLanguage();
ui->lineEditDataSystem->setText(pathToQString(boost::filesystem::absolute(VCMIDirs::get().dataPaths().front())));
ui->lineEditDataUser->setText(pathToQString(boost::filesystem::absolute(VCMIDirs::get().userDataPath())));
}
void FirstLaunchView::on_buttonTabLanguage_clicked()
{
activateTabLanguage();
}
void FirstLaunchView::on_buttonTabHeroesData_clicked()
{
activateTabHeroesData();
}
void FirstLaunchView::on_buttonTabModPreset_clicked()
{
activateTabModPreset();
}
void FirstLaunchView::on_listWidgetLanguage_currentRowChanged(int currentRow)
{
languageSelected(ui->listWidgetLanguage->item(currentRow)->data(Qt::UserRole).toString());
}
void FirstLaunchView::changeEvent(QEvent * event)
{
if(event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this);
Languages::fillLanguages(ui->listWidgetLanguage, false);
}
QWidget::changeEvent(event);
}
void FirstLaunchView::on_pushButtonLanguageNext_clicked()
{
activateTabHeroesData();
}
void FirstLaunchView::on_pushButtonDataNext_clicked()
{
activateTabModPreset();
}
void FirstLaunchView::on_pushButtonDataBack_clicked()
{
activateTabLanguage();
}
void FirstLaunchView::on_pushButtonDataSearch_clicked()
{
heroesDataUpdate();
}
void FirstLaunchView::on_pushButtonDataCopy_clicked()
{
copyHeroesData();
}
void FirstLaunchView::on_pushButtonDataHelp_clicked()
{
static const QUrl vcmibuilderWiki("https://wiki.vcmi.eu/Installation_on_Linux#Installing_Heroes_III_data_files");
QDesktopServices::openUrl(vcmibuilderWiki);
}
void FirstLaunchView::on_comboBoxLanguage_currentIndexChanged(int index)
{
forceHeroesLanguage(ui->comboBoxLanguage->itemData(index).toString());
}
void FirstLaunchView::enterSetup()
{
Languages::fillLanguages(ui->listWidgetLanguage, false);
}
void FirstLaunchView::setSetupProgress(int progress)
{
int value = std::max(progress, ui->setupProgressBar->value());
ui->setupProgressBar->setValue(value);
ui->buttonTabLanguage->setDisabled(value < 1);
ui->buttonTabHeroesData->setDisabled(value < 2);
ui->buttonTabModPreset->setDisabled(value < 3);
}
void FirstLaunchView::activateTabLanguage()
{
setSetupProgress(1);
ui->installerTabs->setCurrentIndex(0);
ui->buttonTabLanguage->setChecked(true);
ui->buttonTabHeroesData->setChecked(false);
ui->buttonTabModPreset->setChecked(false);
}
void FirstLaunchView::activateTabHeroesData()
{
setSetupProgress(2);
ui->installerTabs->setCurrentIndex(1);
ui->buttonTabLanguage->setChecked(false);
ui->buttonTabHeroesData->setChecked(true);
ui->buttonTabModPreset->setChecked(false);
if(!hasVCMIBuilderScript)
{
ui->pushButtonDataHelp->hide();
ui->labelDataHelp->hide();
}
heroesDataUpdate();
}
void FirstLaunchView::activateTabModPreset()
{
setSetupProgress(3);
ui->installerTabs->setCurrentIndex(2);
ui->buttonTabLanguage->setChecked(false);
ui->buttonTabHeroesData->setChecked(false);
ui->buttonTabModPreset->setChecked(true);
modPresetUpdate();
}
void FirstLaunchView::exitSetup()
{
if(auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow()))
mainWindow->exitSetup();
}
// Tab Language
void FirstLaunchView::languageSelected(const QString & selectedLanguage)
{
Settings node = settings.write["general"]["language"];
node->String() = selectedLanguage.toStdString();
if(auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow()))
mainWindow->updateTranslation();
}
void FirstLaunchView::heroesDataUpdate()
{
if(heroesDataDetect())
heroesDataDetected();
else
heroesDataMissing();
}
void FirstLaunchView::heroesDataMissing()
{
QPalette newPalette = palette();
newPalette.setColor(QPalette::Base, QColor(200, 50, 50));
ui->lineEditDataSystem->setPalette(newPalette);
ui->lineEditDataUser->setPalette(newPalette);
ui->pushButtonDataSearch->setVisible(true);
ui->pushButtonDataCopy->setVisible(true);
ui->labelDataSearch->setVisible(true);
ui->labelDataCopy->setVisible(true);
ui->labelDataFound->setVisible(false);
if(hasVCMIBuilderScript)
{
ui->pushButtonDataHelp->setVisible(true);
ui->labelDataHelp->setVisible(true);
}
}
void FirstLaunchView::heroesDataDetected()
{
QPalette newPalette = palette();
newPalette.setColor(QPalette::Base, QColor(50, 200, 50));
ui->lineEditDataSystem->setPalette(newPalette);
ui->lineEditDataUser->setPalette(newPalette);
ui->pushButtonDataSearch->setVisible(false);
ui->pushButtonDataCopy->setVisible(false);
ui->labelDataSearch->setVisible(false);
ui->labelDataCopy->setVisible(false);
if(hasVCMIBuilderScript)
{
ui->pushButtonDataHelp->setVisible(false);
ui->labelDataHelp->setVisible(false);
}
ui->labelDataFound->setVisible(true);
heroesLanguageUpdate();
}
// Tab Heroes III Data
bool FirstLaunchView::heroesDataDetect()
{
// user might have copied files to one of our data path.
// perform full reinitialization of virtual filesystem
CResourceHandler::destroy();
CResourceHandler::initialize();
CResourceHandler::load("config/filesystem.json");
// use file from lod archive to check presence of H3 data. Very rough estimate, but will work in majority of cases
bool heroesDataFound = CResourceHandler::get()->existsResource(ResourceID("DATA/GENRLTXT.TXT"));
return heroesDataFound;
}
void FirstLaunchView::heroesLanguageUpdate()
{
Languages::fillLanguages(ui->comboBoxLanguage, true);
QString language = Languages::getHeroesDataLanguage();
bool success = !language.isEmpty();
ui->labelDataFailure->setVisible(!success);
ui->labelDataSuccess->setVisible(success);
ui->pushButtonDataNext->setEnabled(success);
}
void FirstLaunchView::forceHeroesLanguage(const QString & language)
{
Settings node = settings.write["general"]["gameDataLanguage"];
node->String() = language.toStdString();
}
void FirstLaunchView::copyHeroesData()
{
QDir sourceRoot = QFileDialog::getExistingDirectory(this, "", "", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if(!sourceRoot.exists())
return;
QStringList dirData = sourceRoot.entryList({"data"}, QDir::Filter::Dirs);
QStringList dirMaps = sourceRoot.entryList({"maps"}, QDir::Filter::Dirs);
QStringList dirMp3 = sourceRoot.entryList({"mp3"}, QDir::Filter::Dirs);
if(dirData.empty() || dirMaps.empty() || dirMp3.empty())
return;
QDir sourceData = sourceRoot.filePath(dirData.front());
QStringList lodArchives = sourceData.entryList({"*.lod"}, QDir::Filter::Files);
if(lodArchives.empty())
return;
QStringList copyDirectories = {dirData.front(), dirMaps.front(), dirMp3.front()};
QDir targetRoot = pathToQString(VCMIDirs::get().userDataPath());
for(const QString & dirName : copyDirectories)
{
QDir sourceDir = sourceRoot.filePath(dirName);
QDir targetDir = targetRoot.filePath(dirName);
if(!targetRoot.exists(dirName))
targetRoot.mkdir(dirName);
for(const QString & filename : sourceDir.entryList(QDir::Filter::Files))
{
QFile sourceFile(sourceDir.filePath(filename));
sourceFile.copy(targetDir.filePath(filename));
}
}
heroesDataUpdate();
}
// Tab Mod Preset
void FirstLaunchView::modPresetUpdate()
{
bool translationExists = !findTranslationModName().isEmpty();
ui->labelPresetLanguage->setVisible(translationExists);
ui->checkBoxPresetLanguage->setVisible(translationExists);
ui->checkBoxPresetLanguage->setEnabled(checkCanInstallTranslation());
ui->checkBoxPresetExtras->setEnabled(checkCanInstallExtras());
ui->checkBoxPresetHota->setEnabled(checkCanInstallHota());
ui->checkBoxPresetWog->setEnabled(checkCanInstallWog());
}
QString FirstLaunchView::findTranslationModName()
{
if (!getModView())
return QString();
QString preferredlanguage = QString::fromStdString(settings["general"]["language"].String());
QString installedlanguage = QString::fromStdString(settings["session"]["language"].String());
if (preferredlanguage == installedlanguage)
return QString();
return getModView()->getTranslationModName(preferredlanguage);
}
bool FirstLaunchView::checkCanInstallTranslation()
{
QString modName = findTranslationModName();
if(modName.isEmpty())
return false;
return checkCanInstallMod(modName);
}
bool FirstLaunchView::checkCanInstallWog()
{
return checkCanInstallMod("wake-of-gods");
}
bool FirstLaunchView::checkCanInstallHota()
{
return checkCanInstallMod("hota");
}
bool FirstLaunchView::checkCanInstallExtras()
{
return checkCanInstallMod("vcmi-extras");
}
CModListView * FirstLaunchView::getModView()
{
auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow());
assert(mainWindow);
if (!mainWindow)
return nullptr;
return mainWindow->getModView();
}
bool FirstLaunchView::checkCanInstallMod(const QString & modID)
{
return getModView() && !getModView()->isModInstalled(modID);
}
void FirstLaunchView::on_pushButtonPresetBack_clicked()
{
activateTabHeroesData();
}
void FirstLaunchView::on_pushButtonPresetNext_clicked()
{
QStringList modsToInstall;
if (ui->checkBoxPresetLanguage && checkCanInstallTranslation())
modsToInstall.push_back(findTranslationModName());
if (ui->checkBoxPresetExtras && checkCanInstallExtras())
modsToInstall.push_back("vcmi-extras");
if (ui->checkBoxPresetWog && checkCanInstallWog())
modsToInstall.push_back("wake-of-gods");
if (ui->checkBoxPresetHota && checkCanInstallHota())
modsToInstall.push_back("hota");
exitSetup();
for (auto const & modName : modsToInstall)
getModView()->doInstallMod(modName);
}

View File

@ -0,0 +1,99 @@
/*
* firstlaunch_moc.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
#include "../StdInc.h"
namespace Ui
{
class FirstLaunchView;
}
class CModListView;
class FirstLaunchView : public QWidget
{
Q_OBJECT
// vcmibuilder script is not available on these platforms
#if defined(VCMI_WINDOWS) || defined(VCMI_MOBILE) || defined(VCMI_APPLE)
static constexpr bool hasVCMIBuilderScript = false;
#else
static constexpr bool hasVCMIBuilderScript = true;
#endif
void changeEvent(QEvent *event);
CModListView * getModView();
void setSetupProgress(int progress);
void enterSetup();
void activateTabLanguage();
void activateTabHeroesData();
void activateTabModPreset();
void exitSetup();
// Tab Language
void languageSelected(const QString & languageCode);
// Tab Heroes III Data
void heroesDataUpdate();
bool heroesDataDetect();
void heroesDataMissing();
void heroesDataDetected();
void heroesLanguageUpdate();
void forceHeroesLanguage(const QString & language);
void copyHeroesData();
// Tab Mod Preset
void modPresetUpdate();
QString findTranslationModName();
bool checkCanInstallTranslation();
bool checkCanInstallWog();
bool checkCanInstallHota();
bool checkCanInstallExtras();
bool checkCanInstallMod(const QString & modID);
void installMod(const QString & modID);
public:
explicit FirstLaunchView(QWidget * parent = 0);
public slots:
private slots:
void on_buttonTabLanguage_clicked();
void on_buttonTabHeroesData_clicked();
void on_buttonTabModPreset_clicked();
void on_listWidgetLanguage_currentRowChanged(int currentRow);
void on_pushButtonLanguageNext_clicked();
void on_pushButtonDataNext_clicked();
void on_pushButtonDataBack_clicked();
void on_pushButtonDataSearch_clicked();
void on_pushButtonDataCopy_clicked();
void on_pushButtonDataHelp_clicked();
void on_comboBoxLanguage_currentIndexChanged(int index);
void on_pushButtonPresetBack_clicked();
void on_pushButtonPresetNext_clicked();
private:
Ui::FirstLaunchView * ui;
};

View File

@ -0,0 +1,735 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FirstLaunchView</class>
<widget class="QWidget" name="FirstLaunchView">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>650</width>
<height>409</height>
</rect>
</property>
<property name="windowTitle">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QToolButton" name="buttonTabLanguage">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Language</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextOnly</enum>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="buttonTabHeroesData">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Heroes III Data</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextOnly</enum>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="buttonTabModPreset">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Mods Preset</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextOnly</enum>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QProgressBar" name="setupProgressBar">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>3</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>true</bool>
</property>
<property name="format">
<string>Step %v out of %m</string>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="installerTabs">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="pageLanguageSelect">
<layout class="QGridLayout" name="gridLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="labelLanguageTitle">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Choose your language</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="pushButtonLanguageNext">
<property name="text">
<string>Next</string>
</property>
</widget>
</item>
<item row="2" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" rowspan="2">
<widget class="QListWidget" name="listWidgetLanguage">
<property name="spacing">
<number>5</number>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="pageDataFiles">
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="labelDataTitle">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Find Heroes III data files</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout" columnstretch="1,1,1,1">
<property name="spacing">
<number>6</number>
</property>
<item row="4" column="3">
<widget class="QPushButton" name="pushButtonDataHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>25</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Open help in browser</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="pushButtonDataSearch">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>25</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Search again</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3">
<widget class="QLineEdit" name="lineEditDataSystem">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>50</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QLineEdit" name="lineEditDataUser">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>50</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<widget class="QLabel" name="labelDataHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>If you don't have installed Heroes III copy, it is possible to use our automatic installation tool 'vcmibuilder' to extract data from GoG.com installer. Visit our wiki for detailed instructions.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="QLabel" name="labelDataSearch">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelDataFiles">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>50</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Heroes III data files</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QLabel" name="labelDataCopy">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="pushButtonDataCopy">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>25</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Copy existing data</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="4">
<widget class="QLabel" name="labelDataFound">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Your Heroes III data files have been successfully found.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="2,1">
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="labelDataSuccess">
<property name="text">
<string>Your Heroes III language has been successfully detected.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="labelDataFailure">
<property name="text">
<string>Automatic detection of language failed. Please select language of your Heroes III copy</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelDataLanguage">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Heroes III language</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
<number>6</number>
</property>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButtonDataBack">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonDataNext">
<property name="text">
<string>Next</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="pageModPreset">
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="labelPresetTitle">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Install VCMI Mod Preset</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="labelPresetDescription">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Optionally, you can install additional mods either now or at any point later:</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBoxPresetLanguage">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="labelPresetLanguage">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Install translation of Heroes III to your language</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="checkBoxPresetExtras">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="labelPresetExtras">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Install support for playing Heroes III in resolutions other than 800x600.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="checkBoxPresetHota">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="labelPresetHota">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="checkBoxPresetWog">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="labelPresetWog">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>100</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButtonPresetBack">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonPresetNext">
<property name="text">
<string>Finish</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

150
launcher/languages.cpp Normal file
View File

@ -0,0 +1,150 @@
/*
* languages.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "languages.h"
#include "../lib/CConfigHandler.h"
#include "../lib/Languages.h"
#include "../lib/CGeneralTextHandler.h"
#include <QComboBox>
#include <QListWidget>
// list of language names, for generation of translations. Do not use directly, use Languages namespace instead
static const std::array<std::string, 12> languageTranslatedNamesGenerator = {
{
QT_TRANSLATE_NOOP("Language", "Chinese"),
QT_TRANSLATE_NOOP("Language", "English"),
QT_TRANSLATE_NOOP("Language", "French"),
QT_TRANSLATE_NOOP("Language", "German"),
QT_TRANSLATE_NOOP("Language", "Korean"),
QT_TRANSLATE_NOOP("Language", "Polish"),
QT_TRANSLATE_NOOP("Language", "Russian"),
QT_TRANSLATE_NOOP("Language", "Spanish"),
QT_TRANSLATE_NOOP("Language", "Ukrainian"),
QT_TRANSLATE_NOOP("Language", "Other (East European)"),
QT_TRANSLATE_NOOP("Language", "Other (Cyrillic Script)"),
QT_TRANSLATE_NOOP("Language", "Other (West European)"),
}
};
static_assert(languageTranslatedNamesGenerator.size() == static_cast<size_t>(Languages::ELanguages::COUNT), "Languages array is missing a value!");
QString Languages::getHeroesDataLanguage()
{
CGeneralTextHandler::detectInstallParameters();
QString language = QString::fromStdString(settings["session"]["language"].String());
double deviation = settings["session"]["languageDeviation"].Float();
if(deviation > 0.05)
return QString();
return language;
}
QString generateAutodetectedLanguageName(QString const & language)
{
std::string languageNameEnglish = Languages::getLanguageOptions(language.toStdString()).nameEnglish;
QString languageName = QApplication::translate( "Language", languageNameEnglish.c_str());
QString itemName = QApplication::translate("Language", "Auto (%1)").arg(languageName);
return itemName;
}
QString Languages::generateLanguageName(const Languages::Options & language)
{
std::string activeLanguage = settings["general"]["language"].String();
QString localizedName = QApplication::translate("Language", language.nameEnglish.c_str());
QString nativeName = language.nameNative.c_str();
if(!language.hasTranslation)
return localizedName;
if(activeLanguage == language.identifier)
return nativeName;
QString displayName = QString("%1 (%2)").arg(localizedName, nativeName);
return displayName;
}
void Languages::fillLanguages(QComboBox * widget, bool includeAll)
{
widget->blockSignals(true); // we do not want calls caused by initialization
widget->clear();
std::string activeLanguage = includeAll ?
settings["general"]["gameDataLanguage"].String():
settings["general"]["language"].String();
if (includeAll)
{
QString language = getHeroesDataLanguage();
if (!language.isEmpty())
widget->addItem(generateAutodetectedLanguageName(language), QString("auto"));
if (activeLanguage == "auto")
widget->setCurrentIndex(0);
}
for(const auto & language : Languages::getLanguageList())
{
if (!language.hasTranslation && !includeAll)
continue;
QString displayName = generateLanguageName(language);
QVariant userData = QString::fromStdString(language.identifier);
widget->addItem(displayName, userData);
if(activeLanguage == language.identifier)
widget->setCurrentIndex(widget->count() - 1);
}
widget->blockSignals(false);
}
void Languages::fillLanguages(QListWidget * widget, bool includeAll)
{
widget->blockSignals(true); // we do not want calls caused by initialization
widget->clear();
std::string activeLanguage = includeAll ?
settings["general"]["gameDataLanguage"].String():
settings["general"]["language"].String();
if (includeAll)
{
QString language = getHeroesDataLanguage();
if (!language.isEmpty())
{
widget->addItem(generateAutodetectedLanguageName(language));
widget->item(widget->count() - 1)->setData(Qt::UserRole, QString("auto"));
if (activeLanguage == "auto")
widget->setCurrentRow(0);
}
}
for(const auto & language : Languages::getLanguageList())
{
if (!language.hasTranslation && !includeAll)
continue;
QString displayName = generateLanguageName(language);
QVariant userData = QString::fromStdString(language.identifier);
widget->addItem(displayName);
widget->item(widget->count() - 1)->setData(Qt::UserRole, userData);
if(activeLanguage == language.identifier)
widget->setCurrentRow(widget->count() - 1);
}
widget->blockSignals(false);
}

27
launcher/languages.h Normal file
View File

@ -0,0 +1,27 @@
/*
* languages.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
class QString;
class QComboBox;
class QListWidget;
namespace Languages
{
struct Options;
QString generateLanguageName(const Languages::Options & identifier);
QString getHeroesDataLanguage();
/// if includeAll is set, all languages including encoding placeholders will be included into widget
void fillLanguages(QComboBox * widget, bool includeAll);
void fillLanguages(QListWidget * widget, bool includeAll);
}

View File

@ -102,7 +102,13 @@ MainWindow::MainWindow(QWidget * parent)
computeSidePanelSizes();
ui->tabListWidget->setCurrentIndex(0);
bool h3DataFound = CResourceHandler::get()->existsResource(ResourceID("DATA/GENRLTXT.TXT"));
bool setupCompleted = settings["launcher"]["setupCompleted"].Bool();
if (h3DataFound && setupCompleted)
ui->tabListWidget->setCurrentIndex(TabRows::MODS);
else
enterSetup();
ui->settingsView->isExtraResolutionsModEnabled = ui->modlistView->isExtraResolutionsModEnabled();
ui->settingsView->setDisplayList();
@ -113,6 +119,35 @@ MainWindow::MainWindow(QWidget * parent)
UpdateDialog::showUpdateDialog(false);
}
void MainWindow::enterSetup()
{
ui->startGameButton->setEnabled(false);
ui->startEditorButton->setEnabled(false);
ui->lobbyButton->setEnabled(false);
ui->settingsButton->setEnabled(false);
ui->modslistButton->setEnabled(false);
ui->tabListWidget->setCurrentIndex(TabRows::SETUP);
}
void MainWindow::exitSetup()
{
Settings writer = settings.write["launcher"]["setupCompleted"];
writer->Bool() = true;
ui->startGameButton->setEnabled(true);
ui->startEditorButton->setEnabled(true);
ui->lobbyButton->setEnabled(true);
ui->settingsButton->setEnabled(true);
ui->modslistButton->setEnabled(true);
ui->tabListWidget->setCurrentIndex(TabRows::MODS);
}
void MainWindow::switchToModsTab()
{
ui->startGameButton->setEnabled(true);
ui->tabListWidget->setCurrentIndex(TabRows::MODS);
}
void MainWindow::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange)
@ -147,10 +182,14 @@ const CModList & MainWindow::getModList() const
return ui->modlistView->getModList();
}
CModListView * MainWindow::getModView()
{
return ui->modlistView;
}
void MainWindow::on_modslistButton_clicked()
{
ui->startGameButton->setEnabled(true);
ui->tabListWidget->setCurrentIndex(TabRows::MODS);
switchToModsTab();
}
void MainWindow::on_settingsButton_clicked()

View File

@ -21,7 +21,7 @@ const QString appName = "VCMI Launcher";
class QTableWidgetItem;
class CModList;
class CModListView;
class MainWindow : public QMainWindow
{
@ -36,19 +36,27 @@ private:
enum TabRows
{
MODS = 0, SETTINGS = 1, LOBBY = 2
MODS = 0,
SETTINGS = 1,
LOBBY = 2,
SETUP = 3
};
void changeEvent(QEvent *event) override;
public:
explicit MainWindow(QWidget * parent = 0);
~MainWindow();
explicit MainWindow(QWidget * parent = nullptr);
~MainWindow() override;
const CModList & getModList() const;
CModListView * getModView();
void updateTranslation();
void computeSidePanelSizes();
void enterSetup();
void exitSetup();
void switchToModsTab();
public slots:
void on_startGameButton_clicked();

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>410</height>
<height>490</height>
</rect>
</property>
<property name="sizePolicy">
@ -316,11 +316,12 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<widget class="CModListView" name="modlistView"/>
<widget class="CSettingsView" name="settingsView"/>
<widget class="Lobby" name="lobbyView"/>
<widget class="FirstLaunchView" name="setupView"/>
</widget>
</item>
</layout>
@ -346,6 +347,12 @@
<header>lobby/lobby_moc.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>FirstLaunchView</class>
<extends>QWidget</extends>
<header>firstLaunch/firstlaunch_moc.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View File

@ -139,6 +139,11 @@ bool CModEntry::isValid() const
return !localData.isEmpty() || !repository.isEmpty();
}
bool CModEntry::isTranslation() const
{
return getBaseValue("modType").toString().toLower() == "translation";
}
int CModEntry::getModStatus() const
{
int status = 0;
@ -158,6 +163,17 @@ QString CModEntry::getName() const
}
QVariant CModEntry::getValue(QString value) const
{
return getValueImpl(value, true);
}
QVariant CModEntry::getBaseValue(QString value) const
{
return getValueImpl(value, false);
}
QVariant CModEntry::getValueImpl(QString value, bool localized) const
{
QString langValue = QString::fromStdString(settings["general"]["language"].String());
@ -178,7 +194,7 @@ QVariant CModEntry::getValue(QString value) const
auto & storage = useRepositoryData ? repository : localData;
if(storage.contains(langValue))
if(localized && storage.contains(langValue))
{
auto langStorage = storage[langValue].toMap();
if (langStorage.contains(value))

View File

@ -42,6 +42,7 @@ class CModEntry
QString modname;
QVariant getValueImpl(QString value, bool localized) const;
public:
CModEntry(QVariantMap repository, QVariantMap localData, QVariantMap modSettings, QString modname);
@ -61,6 +62,8 @@ public:
bool isCompatible() const;
// returns if has any data
bool isValid() const;
// installed and enabled
bool isTranslation() const;
// see ModStatus enum
int getModStatus() const;
@ -69,6 +72,7 @@ public:
// get value of some field in mod structure. Returns empty optional if value is not present
QVariant getValue(QString value) const;
QVariant getBaseValue(QString value) const;
// returns true if less < greater comparing versions section by section
static bool compareVersions(QString lesser, QString greater);

View File

@ -90,19 +90,21 @@ void CModListView::setupModsView()
}
CModListView::CModListView(QWidget * parent)
: QWidget(parent), settingsListener(settings.listen["launcher"]["repositoryURL"]), ui(new Ui::CModListView)
: QWidget(parent)
, settingsListener(settings.listen["launcher"]["repositoryURL"])
, ui(new Ui::CModListView)
, repositoriesChanged(false)
{
settingsListener([&](const JsonNode &){ repositoriesChanged = true; });
ui->setupUi(this);
setupModModel();
setupFilterModel();
setupModsView();
ui->progressWidget->setVisible(false);
dlManager = nullptr;
disableModInfo();
if(settings["launcher"]["autoCheckRepositories"].Bool())
{
loadRepositories();
@ -814,3 +816,45 @@ const CModList & CModListView::getModList() const
assert(modModel);
return *modModel;
}
void CModListView::doInstallMod(const QString & modName)
{
assert(findInvalidDependencies(modName).empty());
for(auto & name : modModel->getRequirements(modName))
{
auto mod = modModel->getMod(name);
if(!mod.isInstalled())
downloadFile(name + ".zip", mod.getValue("download").toString(), "mods");
}
}
bool CModListView::isModInstalled(const QString & modName)
{
auto mod = modModel->getMod(modName);
return mod.isInstalled();
}
bool CModListView::isModEnabled(const QString & modName)
{
auto mod = modModel->getMod(modName);
return mod.isEnabled();
}
QString CModListView::getTranslationModName(const QString & language)
{
for(const auto & modName : modModel->getModList())
{
auto mod = modModel->getMod(modName);
if (!mod.isTranslation())
continue;
if (mod.getBaseValue("language").toString() != language)
continue;
return modName;
}
return QString();
}

View File

@ -74,7 +74,6 @@ public:
void loadScreenshots();
void enableModInfo();
void disableModInfo();
void selectMod(const QModelIndex & index);
@ -82,6 +81,20 @@ public:
const CModList & getModList() const;
// First Launch View interface
/// install mod by name
void doInstallMod(const QString & modName);
/// returns true if mod is currently installed
bool isModInstalled(const QString & modName);
/// finds translation mod for specified languages. Returns empty string on error
QString getTranslationModName(const QString & language);
/// returns true if mod is currently enabled
bool isModEnabled(const QString & modName);
public slots:
void enableModByName(QString modName);
void disableModByName(QString modName);

View File

@ -13,7 +13,9 @@
#include "mainwindow_moc.h"
#include "../modManager/cmodlistview_moc.h"
#include "../jsonutils.h"
#include "../languages.h"
#include "../launcherdirs.h"
#include "../updatedialog_moc.h"
@ -29,18 +31,6 @@ QString resolutionToString(const QSize & resolution)
{
return QString{"%1x%2"}.arg(resolution.width()).arg(resolution.height());
}
}
/// List of tags of languages that can be selected from Launcher (and have translation for Launcher)
static const std::string languageTagList[] =
{
"chinese",
"english",
"german",
"polish",
"russian",
"ukrainian",
};
static const std::string cursorTypesList[] =
{
@ -49,6 +39,8 @@ static const std::string cursorTypesList[] =
"software"
};
}
void CSettingsView::setDisplayList()
{
QStringList list;
@ -92,12 +84,13 @@ void CSettingsView::loadSettings()
ui->spinBoxNetworkPort->setValue(settings["server"]["port"].Integer());
ui->comboBoxAutoCheck->setCurrentIndex(settings["launcher"]["autoCheckRepositories"].Bool());
// all calls to plainText will trigger textChanged() signal overwriting config. Create backup before editing widget
JsonNode urls = settings["launcher"]["repositoryURL"];
JsonNode urls = settings["launcher"]["repositoryURL"];
ui->plainTextEditRepos->blockSignals(true); // Do not report loading as change of data
ui->plainTextEditRepos->clear();
for(auto entry : urls.Vector())
ui->plainTextEditRepos->appendPlainText(QString::fromUtf8(entry.String().c_str()));
ui->plainTextEditRepos->blockSignals(false);
ui->lineEditUserDataDir->setText(pathToQString(VCMIDirs::get().userDataPath()));
ui->lineEditGameDir->setText(pathToQString(VCMIDirs::get().binaryPath()));
@ -105,10 +98,7 @@ void CSettingsView::loadSettings()
ui->comboBoxAutoSave->setCurrentIndex(settings["general"]["saveFrequency"].Integer() > 0 ? 1 : 0);
std::string language = settings["general"]["language"].String();
size_t languageIndex = boost::range::find(languageTagList, language) - languageTagList;
if(languageIndex < ui->comboBoxLanguage->count())
ui->comboBoxLanguage->setCurrentIndex((int)languageIndex);
Languages::fillLanguages(ui->comboBoxLanguage, false);
std::string cursorType = settings["video"]["cursor"].String();
size_t cursorTypeIndex = boost::range::find(cursorTypesList, cursorType) - cursorTypesList;
@ -308,13 +298,13 @@ void CSettingsView::on_updatesButton_clicked()
UpdateDialog::showUpdateDialog(true);
}
void CSettingsView::on_comboBoxLanguage_currentIndexChanged(int index)
{
Settings node = settings.write["general"]["language"];
node->String() = languageTagList[index];
QString selectedLanguage = ui->comboBoxLanguage->itemData(index).toString();
node->String() = selectedLanguage.toStdString();
if ( auto mainWindow = dynamic_cast<MainWindow*>(qApp->activeWindow()) )
if(auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow()))
mainWindow->updateTranslation();
}
@ -323,17 +313,24 @@ void CSettingsView::changeEvent(QEvent *event)
if(event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this);
Languages::fillLanguages(ui->comboBoxLanguage, false);
loadTranslation();
}
QWidget::changeEvent(event);
}
void CSettingsView::showEvent(QShowEvent * event)
{
loadTranslation();
QWidget::showEvent(event);
}
void CSettingsView::on_comboBoxCursorType_currentIndexChanged(int index)
{
Settings node = settings.write["video"]["cursor"];
node->String() = cursorTypesList[index];
}
void CSettingsView::on_listWidgetSettings_currentRowChanged(int currentRow)
{
QVector<QWidget*> targetWidgets = {
@ -352,5 +349,84 @@ void CSettingsView::on_listWidgetSettings_currentRowChanged(int currentRow)
int maxPosition = ui->settingsScrollArea->verticalScrollBar()->maximum();
ui->settingsScrollArea->verticalScrollBar()->setValue(maxPosition);
ui->settingsScrollArea->ensureWidgetVisible(currentTarget, 5, 5);
}
void CSettingsView::loadTranslation()
{
Languages::fillLanguages(ui->comboBoxLanguageBase, true);
QString baseLanguage = Languages::getHeroesDataLanguage();
auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow());
if (!mainWindow)
return;
QString languageName = QString::fromStdString(settings["general"]["language"].String());
QString modName = mainWindow->getModView()->getTranslationModName(languageName);
bool translationExists = !modName.isEmpty();
bool translationNeeded = languageName != baseLanguage;
bool showTranslation = translationNeeded && translationExists;
ui->labelTranslation->setVisible(showTranslation);
ui->labelTranslationStatus->setVisible(showTranslation);
ui->pushButtonTranslation->setVisible(showTranslation);
if (!translationExists)
return;
bool translationInstalled = mainWindow->getModView()->isModInstalled(modName);
bool translationEnabled = mainWindow->getModView()->isModEnabled(modName);
ui->pushButtonTranslation->setVisible(!translationEnabled);
if (translationEnabled)
{
ui->labelTranslationStatus->setText(tr("Active"));
}
if (translationInstalled && !translationEnabled)
{
ui->labelTranslationStatus->setText(tr("Disabled"));
ui->pushButtonTranslation->setText(tr("Enable"));
}
if (!translationInstalled)
{
ui->labelTranslationStatus->setText(tr("Not Installed"));
ui->pushButtonTranslation->setText(tr("Install"));
}
}
void CSettingsView::on_pushButtonTranslation_clicked()
{
auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow());
assert(mainWindow);
if (!mainWindow)
return;
QString languageName = QString::fromStdString(settings["general"]["language"].String());
QString modName = mainWindow->getModView()->getTranslationModName(languageName);
assert(!modName.isEmpty());
if (modName.isEmpty())
return;
if (mainWindow->getModView()->isModInstalled(modName))
{
mainWindow->getModView()->enableModByName(modName);
}
else
{
mainWindow->switchToModsTab();
mainWindow->getModView()->doInstallMod(modName);
}
}
void CSettingsView::on_comboBoxLanguageBase_currentIndexChanged(int index)
{
Settings node = settings.write["general"]["gameDataLanguage"];
QString selectedLanguage = ui->comboBoxLanguageBase->itemData(index).toString();
node->String() = selectedLanguage.toStdString();
}

View File

@ -24,8 +24,10 @@ public:
~CSettingsView();
void loadSettings();
void loadTranslation();
void setDisplayList();
void changeEvent(QEvent *event) override;
void showEvent(QShowEvent * event) override;
bool isExtraResolutionsModEnabled{};
@ -34,44 +36,28 @@ public slots:
private slots:
void on_comboBoxResolution_currentTextChanged(const QString & arg1);
void on_comboBoxFullScreen_currentIndexChanged(int index);
void on_comboBoxPlayerAI_currentIndexChanged(const QString & arg1);
void on_comboBoxFriendlyAI_currentIndexChanged(const QString & arg1);
void on_comboBoxNeutralAI_currentIndexChanged(const QString & arg1);
void on_comboBoxEnemyAI_currentIndexChanged(const QString & arg1);
void on_spinBoxNetworkPort_valueChanged(int arg1);
void on_plainTextEditRepos_textChanged();
void on_openTempDir_clicked();
void on_openUserDataDir_clicked();
void on_openGameDataDir_clicked();
void on_comboBoxShowIntro_currentIndexChanged(int index);
void on_changeGameDataDir_clicked();
void on_comboBoxAutoCheck_currentIndexChanged(int index);
void on_comboBoxDisplayIndex_currentIndexChanged(int index);
void on_comboBoxAutoSave_currentIndexChanged(int index);
void on_updatesButton_clicked();
void on_comboBoxLanguage_currentIndexChanged(int index);
void on_comboBoxCursorType_currentIndexChanged(int index);
void on_listWidgetSettings_currentRowChanged(int currentRow);
void on_pushButtonTranslation_clicked();
void on_comboBoxLanguageBase_currentIndexChanged(int index);
private:
Ui::CSettingsView * ui;

View File

@ -114,59 +114,119 @@
<x>0</x>
<y>0</y>
<width>620</width>
<height>731</height>
<height>793</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="3,0,0,0">
<item row="22" column="0" colspan="4">
<widget class="QPlainTextEdit" name="plainTextEditRepos">
<property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum>
<item row="19" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxEnemyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="plainText">
<string notr="true">http://downloads.vcmi.eu/Mods/repository.json</string>
</property>
</widget>
</item>
<item row="12" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="labelEnemyAI">
<item row="1" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>Enemy AI</string>
<string>VCMI Language</string>
</property>
</widget>
</item>
<item row="21" column="2" colspan="2">
<widget class="QPushButton" name="updatesButton">
<property name="text">
<string>Update now</string>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="6" column="0">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
</property>
</widget>
</item>
<item row="14" column="1" colspan="3">
<item row="11" column="0">
<widget class="QLabel" name="labelFullScreen">
<property name="text">
<string>Fullscreen</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelResolution">
<property name="text">
<string>Resolution</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string>Autosave</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelVideo">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="23" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditTempDir">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true">/home/user/.vcmi</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="13" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="22" column="3">
<widget class="QPushButton" name="openUserDataDir">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="18" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxFriendlyAI">
<property name="editable">
<bool>false</bool>
@ -186,65 +246,7 @@
</item>
</widget>
</item>
<item row="13" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxNeutralAI">
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string>Autosave</string>
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="QLineEdit" name="lineEditGameDir">
<property name="text">
<string notr="true">/usr/share/vcmi</string>
</property>
</widget>
</item>
<item row="19" column="3">
<widget class="QPushButton" name="openTempDir">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="18" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditUserDataDir">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true">/home/user/.vcmi</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="7" column="1" colspan="3">
<item row="11" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxFullScreen">
<property name="currentIndex">
<number>0</number>
@ -266,27 +268,27 @@
</item>
</widget>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
<item row="6" column="1" colspan="3">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
</property>
<property name="text">
<string>Mod Repositories</string>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>3030</number>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<item row="23" column="3">
<widget class="QPushButton" name="openTempDir">
<property name="text">
<string>Display index</string>
<string>Open</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="3">
<item row="7" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxAutoSave">
<property name="currentIndex">
<number>1</number>
@ -303,8 +305,8 @@
</item>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelVideo">
<item row="20" column="0">
<widget class="QLabel" name="labelDataDirs">
<property name="font">
<font>
<weight>75</weight>
@ -312,22 +314,77 @@
</font>
</property>
<property name="text">
<string>Video</string>
<string>Data Directories</string>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelTempDir">
<property name="text">
<string>Log files directory</string>
</property>
</widget>
</item>
<item row="15" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxEnemyAI">
<property name="editable">
<item row="21" column="2">
<widget class="QPushButton" name="changeGameDataDir">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Change</string>
</property>
</widget>
</item>
<item row="22" column="0">
<widget class="QLabel" name="labelUserDataDir">
<property name="text">
<string>User data directory</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelBuildVersionDesc">
<property name="text">
<string>Build version</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>General</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="25" column="2" colspan="2">
<widget class="QPushButton" name="updatesButton">
<property name="text">
<string>Update now</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="21" column="1">
<widget class="QLineEdit" name="lineEditGameDir">
<property name="text">
<string notr="true">/usr/share/vcmi</string>
</property>
</widget>
</item>
<item row="17" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxNeutralAI">
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
@ -343,31 +400,37 @@
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelBuildVersionDesc">
<item row="10" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="24" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Build version</string>
<string>Mod Repositories</string>
</property>
</widget>
</item>
<item row="17" column="3">
<widget class="QPushButton" name="openGameDataDir">
<item row="18" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Open</string>
<string>Friendly AI</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="3">
<widget class="QLineEdit" name="lineEditBuildVersion">
<item row="25" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="3">
<item row="12" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxShowIntro">
<property name="currentIndex">
<number>1</number>
@ -384,41 +447,105 @@
</item>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelArtificialIntelligence">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
<item row="22" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditUserDataDir">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Artificial Intelligence</string>
<string notr="true">/home/user/.vcmi</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelResolution">
<item row="21" column="0">
<widget class="QLabel" name="labelGameDir">
<property name="text">
<string>Resolution</string>
<string>Extra data directory</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelCursorType">
<item row="21" column="3">
<widget class="QPushButton" name="openGameDataDir">
<property name="text">
<string>Cursor</string>
<string>Open</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelNeutralAI">
<item row="4" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="25" column="1">
<widget class="QComboBox" name="comboBoxAutoCheck">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelLanguageBase">
<property name="text">
<string>Neutral AI</string>
<string>Heroes III Data Language</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="3">
<item row="16" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="8" column="1" colspan="3">
<widget class="QLineEdit" name="lineEditBuildVersion">
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Enemy AI</string>
</property>
</widget>
</item>
<item row="26" column="0" colspan="4">
<widget class="QPlainTextEdit" name="plainTextEditRepos">
<property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum>
</property>
<property name="plainText">
<string notr="true">http://downloads.vcmi.eu/Mods/repository.json</string>
</property>
</widget>
</item>
<item row="14" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxCursorType">
<item>
<property name="text">
@ -437,178 +564,51 @@
</item>
</widget>
</item>
<item row="21" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="18" column="3">
<widget class="QPushButton" name="openUserDataDir">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelFullScreen">
<property name="text">
<string>Fullscreen</string>
</property>
</widget>
</item>
<item row="9" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="6" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="19" column="1" colspan="2">
<widget class="QLineEdit" name="lineEditTempDir">
<property name="enabled">
<bool>false</bool>
<item row="15" column="0">
<widget class="QLabel" name="labelArtificialIntelligence">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string notr="true">/home/user/.vcmi</string>
</property>
<property name="readOnly">
<bool>true</bool>
<string>Artificial Intelligence</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelLanguage">
<item row="23" column="0">
<widget class="QLabel" name="labelTempDir">
<property name="text">
<string>VCMI Language</string>
<string>Log files directory</string>
</property>
</widget>
</item>
<item row="21" column="1">
<widget class="QComboBox" name="comboBoxAutoCheck">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="12" column="0">
<item row="16" column="0">
<widget class="QLabel" name="labelPlayerAI">
<property name="text">
<string>Adventure Map AI</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3">
<widget class="QComboBox" name="comboBoxLanguage">
<item>
<property name="text">
<string>English</string>
</property>
</item>
<item>
<property name="text">
<string>简体中文 (Simplified Chinese)</string>
</property>
</item>
<item>
<property name="text">
<string>Deutsch (German)</string>
</property>
</item>
<item>
<property name="text">
<string>Polska (Polish)</string>
</property>
</item>
<item>
<property name="text">
<string>Русский (Russian)</string>
</property>
</item>
<item>
<property name="text">
<string>Українська (Ukrainian)</string>
</property>
</item>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelDataDirs">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<property name="text">
<string>Data Directories</string>
<string>Heroes III Translation</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<item row="5" column="3">
<widget class="QPushButton" name="pushButtonTranslation">
<property name="text">
<string>General</string>
<string/>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="labelUserDataDir">
<item row="5" column="1" colspan="2">
<widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string>User data directory</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelGameDir">
<property name="text">
<string>Extra data directory</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Friendly AI</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="3">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>3030</number>
</property>
</widget>
</item>
<item row="17" column="2">
<widget class="QPushButton" name="changeGameDataDir">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Change</string>
<string/>
</property>
</widget>
</item>

View File

@ -4,101 +4,86 @@
<context>
<name>CModListModel</name>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="150"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="142"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="153"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="145"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="154"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="146"/>
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="155"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="156"/>
<source>Author</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CModListView</name>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="61"/>
<location filename="../modManager/cmodlistview_moc.ui" line="58"/>
<source>Filter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="84"/>
<location filename="../modManager/cmodlistview_moc.ui" line="81"/>
<source>All mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="89"/>
<location filename="../modManager/cmodlistview_moc.ui" line="86"/>
<source>Downloadable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="94"/>
<location filename="../modManager/cmodlistview_moc.ui" line="91"/>
<source>Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="99"/>
<location filename="../modManager/cmodlistview_moc.ui" line="96"/>
<source>Updatable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="104"/>
<location filename="../modManager/cmodlistview_moc.ui" line="101"/>
<source>Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="109"/>
<location filename="../modManager/cmodlistview_moc.ui" line="106"/>
<source>Inactive</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="123"/>
<location filename="../modManager/cmodlistview_moc.ui" line="120"/>
<source>Download &amp;&amp; refresh repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="228"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="273"/>
<location filename="../modManager/cmodlistview_moc.ui" line="208"/>
<source>Changelog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="295"/>
<location filename="../modManager/cmodlistview_moc.ui" line="230"/>
<source>Screenshots</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="368"/>
<source>Show details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="409"/>
<location filename="../modManager/cmodlistview_moc.ui" line="389"/>
<source>Uninstall</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="434"/>
<location filename="../modManager/cmodlistview_moc.ui" line="424"/>
<source>Enable</source>
<translation type="unfinished"></translation>
</message>
@ -108,134 +93,134 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="484"/>
<location filename="../modManager/cmodlistview_moc.ui" line="494"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="509"/>
<location filename="../modManager/cmodlistview_moc.ui" line="529"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="563"/>
<location filename="../modManager/cmodlistview_moc.ui" line="327"/>
<source> %p% (%v KB out of %m KB)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="576"/>
<location filename="../modManager/cmodlistview_moc.ui" line="340"/>
<source>Abort</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="230"/>
<source>Mod name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="247"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="231"/>
<source>Installed version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="232"/>
<source>Latest version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="251"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="235"/>
<source>Download size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="252"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="236"/>
<source>Authors</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="239"/>
<source>License</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="258"/>
<source>Home</source>
<location filename="../modManager/cmodlistview_moc.cpp" line="242"/>
<source>Contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="262"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="269"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<source>Compatibility</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<source>Required VCMI version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="261"/>
<source>Supported VCMI version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="266"/>
<source>Supported VCMI versions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="286"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="270"/>
<source>Required mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<source>Conflicting mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="276"/>
<source>This mod can not be installed or enabled because following dependencies are not present</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="293"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<source>This mod can not be enabled because following mods are incompatible with this mod</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="278"/>
<source>This mod can not be disabled because it is required to run following mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<source>This mod can not be uninstalled or updated because it is required to run following mods</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="828"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="797"/>
<source>Screenshot %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="240"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="224"/>
<source>Mod is compatible</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="241"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="225"/>
<source>Mod is incompatible</source>
<translation type="unfinished"></translation>
</message>
@ -243,216 +228,341 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="80"/>
<location filename="../settingsView/csettingsview_moc.ui" line="327"/>
<source>Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="104"/>
<location filename="../settingsView/csettingsview_moc.ui" line="205"/>
<location filename="../settingsView/csettingsview_moc.ui" line="396"/>
<location filename="../settingsView/csettingsview_moc.ui" line="222"/>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="473"/>
<source>Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="590"/>
<source>Adventure Map AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<source>User data directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="91"/>
<location filename="../settingsView/csettingsview_moc.ui" line="129"/>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<location filename="../settingsView/csettingsview_moc.ui" line="256"/>
<location filename="../settingsView/csettingsview_moc.ui" line="298"/>
<location filename="../settingsView/csettingsview_moc.ui" line="440"/>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="96"/>
<location filename="../settingsView/csettingsview_moc.ui" line="134"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<location filename="../settingsView/csettingsview_moc.ui" line="339"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="576"/>
<source>Artificial Intelligence</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="89"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Mod Repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="368"/>
<source>Update now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="261"/>
<location filename="../settingsView/csettingsview_moc.ui" line="303"/>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>On</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="215"/>
<source>Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="500"/>
<source>Heroes III Data Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="557"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="597"/>
<source>Heroes III Translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<source>Check on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<source>Repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="188"/>
<source>Check for updates</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="172"/>
<source>Neutral AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="322"/>
<location filename="../settingsView/csettingsview_moc.ui" line="266"/>
<source>Real</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="257"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="354"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Player AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<source>VCMI Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Central European (Windows 1250)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>Cyrillic script (Windows 1251)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>Western European (Windows 1252)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="502"/>
<source>Simplified Chinese (GBK)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="507"/>
<source>Simplified Chinese (GB2312)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="512"/>
<source>Korean (Windows 949)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="521"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="526"/>
<source>Deutsch (German)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="531"/>
<source>Polska (Polish)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="536"/>
<source>Русский (Russian)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="541"/>
<source>Українська (Ukrainian)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<source>Friendly AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="301"/>
<location filename="../settingsView/csettingsview_moc.ui" line="165"/>
<source>Resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<source>AI on the map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="168"/>
<location filename="../settingsView/csettingsview_moc.ui" line="179"/>
<source>Autosave</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="219"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<source>Display index</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="198"/>
<source>Check repositories on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="452"/>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<source>Network port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<source>Data Directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="409"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="192"/>
<source>Video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="111"/>
<source>Heroes III character set</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="294"/>
<location filename="../settingsView/csettingsview_moc.ui" line="466"/>
<source>Extra data directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="142"/>
<location filename="../settingsView/csettingsview_moc.ui" line="583"/>
<source>Log files directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="361"/>
<source>Show intro</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="57"/>
<source>Launcher Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="341"/>
<source>Build version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="632"/>
<location filename="../settingsView/csettingsview_moc.ui" line="534"/>
<source>Enemy AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="234"/>
<source>AI in the battlefield</source>
<location filename="../settingsView/csettingsview_moc.cpp" line="385"/>
<source>Active</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="390"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="391"/>
<source>Enable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="396"/>
<source>Not Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="397"/>
<source>Install</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FirstLaunchView</name>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="28"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="53"/>
<source>Heroes III Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="78"/>
<source>Mods Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="384"/>
<source>Your Heroes III data files have been successfully found.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="552"/>
<source>Optionally, you can install additional mods either now or at any point later:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="616"/>
<source>Install support for playing Heroes III in resolutions other than 800x600.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="645"/>
<source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="674"/>
<source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="721"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="111"/>
<source>Step %v out of %m</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="143"/>
<source>Choose your language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="150"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="493"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="215"/>
<source>Find Heroes III data files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="246"/>
<source>Open help in browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="259"/>
<source>Search again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="304"/>
<source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="320"/>
<source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="342"/>
<source>Heroes III data files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="355"/>
<source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="371"/>
<source>Copy existing data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="414"/>
<source>Your Heroes III language has been successfully detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="424"/>
<source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="443"/>
<source>Heroes III language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="486"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="714"/>
<source>Back</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="524"/>
<source>Install VCMI Mod Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="584"/>
<source>Install translation of Heroes III to your language</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -464,68 +574,172 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Language</name>
<message>
<location filename="../languages.cpp" line="23"/>
<source>Chinese</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="24"/>
<source>English</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="25"/>
<source>French</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="26"/>
<source>German</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="27"/>
<source>Korean</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="28"/>
<source>Polish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="29"/>
<source>Russian</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="30"/>
<source>Spanish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="31"/>
<source>Ukrainian</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="32"/>
<source>Other (East European)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="33"/>
<source>Other (Cyrillic Script)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="34"/>
<source>Other (West European)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="56"/>
<source>Auto (%1)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Lobby</name>
<message>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<location filename="../lobby/lobby_moc.ui" line="39"/>
<location filename="../lobby/lobby_moc.cpp" line="401"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="45"/>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="69"/>
<location filename="../lobby/lobby_moc.ui" line="56"/>
<source>Server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="111"/>
<location filename="../lobby/lobby_moc.ui" line="76"/>
<source>People in lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="114"/>
<source>Lobby chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="194"/>
<source>Session</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="116"/>
<location filename="../lobby/lobby_moc.ui" line="199"/>
<source>Players</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="132"/>
<location filename="../lobby/lobby_moc.ui" line="274"/>
<source>Resolve</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="286"/>
<source>New game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="293"/>
<source>Load game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="149"/>
<source>New room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="142"/>
<location filename="../lobby/lobby_moc.ui" line="159"/>
<source>Join room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="153"/>
<location filename="../lobby/lobby_moc.ui" line="267"/>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="160"/>
<location filename="../lobby/lobby_moc.ui" line="250"/>
<source>Mods mismatch</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="167"/>
<location filename="../lobby/lobby_moc.ui" line="243"/>
<source>Leave</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="197"/>
<location filename="../lobby/lobby_moc.ui" line="216"/>
<source>Kick player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="204"/>
<location filename="../lobby/lobby_moc.ui" line="236"/>
<source>Players in the room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="369"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="461"/>
<source>No issues detected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LobbyRoomRequest</name>
@ -558,27 +772,27 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="95"/>
<location filename="../mainwindow_moc.ui" line="107"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="189"/>
<location filename="../mainwindow_moc.ui" line="226"/>
<source>Map Editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="236"/>
<location filename="../mainwindow_moc.ui" line="279"/>
<source>Start game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="139"/>
<location filename="../mainwindow_moc.ui" line="157"/>
<source>Lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="51"/>
<location filename="../mainwindow_moc.ui" line="57"/>
<source>Mods</source>
<translation type="unfinished"></translation>
</message>

View File

@ -4,101 +4,86 @@
<context>
<name>CModListModel</name>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="150"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="142"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="153"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="145"/>
<source>Type</source>
<translation>Typ</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="154"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="146"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="155"/>
<source>Size</source>
<translation>Größe</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="156"/>
<source>Author</source>
<translation>Autor</translation>
</message>
</context>
<context>
<name>CModListView</name>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="61"/>
<location filename="../modManager/cmodlistview_moc.ui" line="58"/>
<source>Filter</source>
<translation>Filter</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="84"/>
<location filename="../modManager/cmodlistview_moc.ui" line="81"/>
<source>All mods</source>
<translation>Alle Mods</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="89"/>
<location filename="../modManager/cmodlistview_moc.ui" line="86"/>
<source>Downloadable</source>
<translation>Herunterladbar</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="94"/>
<location filename="../modManager/cmodlistview_moc.ui" line="91"/>
<source>Installed</source>
<translation>Installiert</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="99"/>
<location filename="../modManager/cmodlistview_moc.ui" line="96"/>
<source>Updatable</source>
<translation>Aktualisierbar</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="104"/>
<location filename="../modManager/cmodlistview_moc.ui" line="101"/>
<source>Active</source>
<translation>Aktiv</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="109"/>
<location filename="../modManager/cmodlistview_moc.ui" line="106"/>
<source>Inactive</source>
<translation>Inaktiv</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="123"/>
<location filename="../modManager/cmodlistview_moc.ui" line="120"/>
<source>Download &amp;&amp; refresh repositories</source>
<translation>Repositories herunterladen &amp;&amp; aktualisieren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="228"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<source>Description</source>
<translation>Beschreibung</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="273"/>
<location filename="../modManager/cmodlistview_moc.ui" line="208"/>
<source>Changelog</source>
<translation>Änderungslog</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="295"/>
<location filename="../modManager/cmodlistview_moc.ui" line="230"/>
<source>Screenshots</source>
<translation>Screenshots</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="368"/>
<source>Show details</source>
<translation>Details anzeigen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="409"/>
<location filename="../modManager/cmodlistview_moc.ui" line="389"/>
<source>Uninstall</source>
<translation>Deinstallieren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="434"/>
<location filename="../modManager/cmodlistview_moc.ui" line="424"/>
<source>Enable</source>
<translation>Aktivieren</translation>
</message>
@ -108,134 +93,134 @@
<translation>Deaktivieren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="484"/>
<location filename="../modManager/cmodlistview_moc.ui" line="494"/>
<source>Update</source>
<translation>Aktualisieren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="509"/>
<location filename="../modManager/cmodlistview_moc.ui" line="529"/>
<source>Install</source>
<translation>Installieren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="563"/>
<location filename="../modManager/cmodlistview_moc.ui" line="327"/>
<source> %p% (%v KB out of %m KB)</source>
<translation> %p% (%v КB von %m КB)</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="576"/>
<location filename="../modManager/cmodlistview_moc.ui" line="340"/>
<source>Abort</source>
<translation>Abbrechen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="230"/>
<source>Mod name</source>
<translation>Mod-Name</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="247"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="231"/>
<source>Installed version</source>
<translation>Installierte Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="232"/>
<source>Latest version</source>
<translation>Letzte Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="251"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="235"/>
<source>Download size</source>
<translation>Downloadgröße</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="252"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="236"/>
<source>Authors</source>
<translation>Autoren</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="239"/>
<source>License</source>
<translation>Lizenz</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="258"/>
<source>Home</source>
<translation>Home</translation>
<location filename="../modManager/cmodlistview_moc.cpp" line="242"/>
<source>Contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="262"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="269"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<source>Compatibility</source>
<translation>Kompatibilität</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<source>Required VCMI version</source>
<translation>Benötigte VCMI Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="261"/>
<source>Supported VCMI version</source>
<translation>Unterstützte VCMI Version</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="266"/>
<source>Supported VCMI versions</source>
<translation>Unterstützte VCMI Versionen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="286"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="270"/>
<source>Required mods</source>
<translation>Benötigte Mods</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<source>Conflicting mods</source>
<translation>Mods mit Konflikt</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="276"/>
<source>This mod can not be installed or enabled because following dependencies are not present</source>
<translation>Diese Mod kann nicht installiert oder aktiviert werden, da die folgenden Abhängigkeiten nicht vorhanden sind</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="293"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<source>This mod can not be enabled because following mods are incompatible with this mod</source>
<translation>Diese Mod kann nicht aktiviert werden, da folgende Mods nicht mit dieser Mod kompatibel sind</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="278"/>
<source>This mod can not be disabled because it is required to run following mods</source>
<translation>Diese Mod kann nicht deaktiviert werden, da sie zum Ausführen der folgenden Mods erforderlich ist</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<source>This mod can not be uninstalled or updated because it is required to run following mods</source>
<translation>Diese Mod kann nicht deinstalliert oder aktualisiert werden, da sie für die folgenden Mods erforderlich ist</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
<translation>Dies ist eine Submod und kann nicht separat von der Hauptmod installiert oder deinstalliert werden</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<source>Notes</source>
<translation>Anmerkungen</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="828"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="797"/>
<source>Screenshot %1</source>
<translation>Screenshot %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="240"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="224"/>
<source>Mod is compatible</source>
<translation>Mod ist kompatibel</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="241"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="225"/>
<source>Mod is incompatible</source>
<translation>Mod ist inkompatibel</translation>
</message>
@ -243,218 +228,343 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="80"/>
<location filename="../settingsView/csettingsview_moc.ui" line="327"/>
<source>Change</source>
<translation>Ändern</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="104"/>
<location filename="../settingsView/csettingsview_moc.ui" line="205"/>
<location filename="../settingsView/csettingsview_moc.ui" line="396"/>
<location filename="../settingsView/csettingsview_moc.ui" line="222"/>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="473"/>
<source>Open</source>
<translation>Öffnen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="590"/>
<source>Adventure Map AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<source>User data directory</source>
<translation>Verzeichnis der Benutzerdaten</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="91"/>
<location filename="../settingsView/csettingsview_moc.ui" line="129"/>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<location filename="../settingsView/csettingsview_moc.ui" line="256"/>
<location filename="../settingsView/csettingsview_moc.ui" line="298"/>
<location filename="../settingsView/csettingsview_moc.ui" line="440"/>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Off</source>
<translation>Aus</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="96"/>
<location filename="../settingsView/csettingsview_moc.ui" line="134"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<location filename="../settingsView/csettingsview_moc.ui" line="339"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="576"/>
<source>Artificial Intelligence</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="89"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Mod Repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="368"/>
<source>Update now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="261"/>
<location filename="../settingsView/csettingsview_moc.ui" line="303"/>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>On</source>
<translation>An</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="215"/>
<source>Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="500"/>
<source>Heroes III Data Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="557"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="597"/>
<source>Heroes III Translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<source>Check on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<source>Fullscreen</source>
<translation>Vollbild</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="234"/>
<source>AI in the battlefield</source>
<translation>KI auf dem Schlachtfeld</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<source>Repositories</source>
<translation>Repositories</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="188"/>
<source>Check for updates</source>
<translation>Nach Aktualisierungen suchen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="172"/>
<source>Neutral AI</source>
<translation>Neutrale KI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="322"/>
<location filename="../settingsView/csettingsview_moc.ui" line="266"/>
<source>Real</source>
<translation>Vollständig</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="257"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="354"/>
<source>General</source>
<translation>Allgemein</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Player AI</source>
<translation>Spieler-KI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<source>VCMI Language</source>
<translation>VCMI-Sprache</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Central European (Windows 1250)</source>
<translation>Mitteleuropäisch (Windows 1250)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>Cyrillic script (Windows 1251)</source>
<translation>Kyrillische Schrift (Windows 1251)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>Western European (Windows 1252)</source>
<translation>Westeuropäisch (Windows 1252)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="502"/>
<source>Simplified Chinese (GBK)</source>
<translation>Vereinfachtes Chinesisch (GBK)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="507"/>
<source>Simplified Chinese (GB2312)</source>
<translation>Vereinfachtes Chinesisch (GB2312)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="512"/>
<source>Korean (Windows 949)</source>
<translation>Koreanisch (Windows 949)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="521"/>
<source>English</source>
<translation>English (Englisch)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="526"/>
<source>Deutsch (German)</source>
<translation>Deutsch</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="531"/>
<source>Polska (Polish)</source>
<translation>Polska (Polnisch)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="536"/>
<source>Русский (Russian)</source>
<translation>Русский (Russisch)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="541"/>
<source>Українська (Ukrainian)</source>
<translation>Українська (Ukrainisch)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<source>Friendly AI</source>
<translation>Freundliche KI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="301"/>
<location filename="../settingsView/csettingsview_moc.ui" line="165"/>
<source>Resolution</source>
<translation>Auflösung</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<source>AI on the map</source>
<translation>KI auf der Karte</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="168"/>
<location filename="../settingsView/csettingsview_moc.ui" line="179"/>
<source>Autosave</source>
<translation>Autospeichern</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="219"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<source>Display index</source>
<translation>Anzeige-Index</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="198"/>
<source>Check repositories on startup</source>
<translation>Repositories beim Start prüfen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="452"/>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<source>Network port</source>
<translation>Netzwerk-Port</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<source>Data Directories</source>
<translation>Daten-Verzeichnisse</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="409"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="192"/>
<source>Video</source>
<translation>Video</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="111"/>
<source>Heroes III character set</source>
<translation>Heroes III Zeichensatz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="294"/>
<location filename="../settingsView/csettingsview_moc.ui" line="466"/>
<source>Extra data directory</source>
<translation>Zusätzliches Daten-Verzeichnis</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="142"/>
<location filename="../settingsView/csettingsview_moc.ui" line="583"/>
<source>Log files directory</source>
<translation>Verzeichnis der Log-Dateien</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="361"/>
<source>Show intro</source>
<translation>Intro anzeigen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="57"/>
<source>Launcher Settings</source>
<translation>Launcher-Einstellungen</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="341"/>
<source>Build version</source>
<translation>Version des Builds</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="632"/>
<location filename="../settingsView/csettingsview_moc.ui" line="534"/>
<source>Enemy AI</source>
<translation>Feindliche KI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="385"/>
<source>Active</source>
<translation type="unfinished">Aktiv</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="390"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="391"/>
<source>Enable</source>
<translation type="unfinished">Aktivieren</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="396"/>
<source>Not Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="397"/>
<source>Install</source>
<translation type="unfinished">Installieren</translation>
</message>
</context>
<context>
<name>FirstLaunchView</name>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="28"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="53"/>
<source>Heroes III Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="78"/>
<source>Mods Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="384"/>
<source>Your Heroes III data files have been successfully found.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="552"/>
<source>Optionally, you can install additional mods either now or at any point later:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="616"/>
<source>Install support for playing Heroes III in resolutions other than 800x600.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="645"/>
<source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="674"/>
<source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="721"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="111"/>
<source>Step %v out of %m</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="143"/>
<source>Choose your language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="150"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="493"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="215"/>
<source>Find Heroes III data files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="246"/>
<source>Open help in browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="259"/>
<source>Search again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="304"/>
<source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="320"/>
<source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="342"/>
<source>Heroes III data files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="355"/>
<source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="371"/>
<source>Copy existing data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="414"/>
<source>Your Heroes III language has been successfully detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="424"/>
<source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="443"/>
<source>Heroes III language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="486"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="714"/>
<source>Back</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="524"/>
<source>Install VCMI Mod Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="584"/>
<source>Install translation of Heroes III to your language</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImageViewer</name>
@ -464,68 +574,172 @@
<translation>Bildbetrachter</translation>
</message>
</context>
<context>
<name>Language</name>
<message>
<location filename="../languages.cpp" line="23"/>
<source>Chinese</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="24"/>
<source>English</source>
<translation type="unfinished">English (Englisch)</translation>
</message>
<message>
<location filename="../languages.cpp" line="25"/>
<source>French</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="26"/>
<source>German</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="27"/>
<source>Korean</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="28"/>
<source>Polish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="29"/>
<source>Russian</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="30"/>
<source>Spanish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="31"/>
<source>Ukrainian</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="32"/>
<source>Other (East European)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="33"/>
<source>Other (Cyrillic Script)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="34"/>
<source>Other (West European)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="56"/>
<source>Auto (%1)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Lobby</name>
<message>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<location filename="../lobby/lobby_moc.ui" line="39"/>
<location filename="../lobby/lobby_moc.cpp" line="401"/>
<source>Connect</source>
<translation>Verbinden</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="45"/>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<source>Username</source>
<translation>Benutzername</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="69"/>
<location filename="../lobby/lobby_moc.ui" line="56"/>
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="111"/>
<location filename="../lobby/lobby_moc.ui" line="76"/>
<source>People in lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="114"/>
<source>Lobby chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="194"/>
<source>Session</source>
<translation>Sitzung</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="116"/>
<location filename="../lobby/lobby_moc.ui" line="199"/>
<source>Players</source>
<translation>Spieler</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="132"/>
<location filename="../lobby/lobby_moc.ui" line="274"/>
<source>Resolve</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="286"/>
<source>New game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="293"/>
<source>Load game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="149"/>
<source>New room</source>
<translation>Neuer Raum</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="142"/>
<location filename="../lobby/lobby_moc.ui" line="159"/>
<source>Join room</source>
<translation>Raum beitreten</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="153"/>
<location filename="../lobby/lobby_moc.ui" line="267"/>
<source>Ready</source>
<translation>Bereit</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="160"/>
<location filename="../lobby/lobby_moc.ui" line="250"/>
<source>Mods mismatch</source>
<translation>Mods stimmen nicht überein</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="167"/>
<location filename="../lobby/lobby_moc.ui" line="243"/>
<source>Leave</source>
<translation>Verlassen</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="197"/>
<location filename="../lobby/lobby_moc.ui" line="216"/>
<source>Kick player</source>
<translation>Spieler kicken</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="204"/>
<location filename="../lobby/lobby_moc.ui" line="236"/>
<source>Players in the room</source>
<translation>Spieler im Raum</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="369"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="461"/>
<source>No issues detected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LobbyRoomRequest</name>
@ -558,31 +772,27 @@
<translation>VCMI Launcher</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="51"/>
<location filename="../mainwindow_moc.ui" line="57"/>
<source>Mods</source>
<translation>Mods</translation>
</message>
<message>
<source>Editor</source>
<translation type="vanished">Editor</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="95"/>
<location filename="../mainwindow_moc.ui" line="107"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="139"/>
<location filename="../mainwindow_moc.ui" line="157"/>
<source>Lobby</source>
<translation>Lobby</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="189"/>
<location filename="../mainwindow_moc.ui" line="226"/>
<source>Map Editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="236"/>
<location filename="../mainwindow_moc.ui" line="279"/>
<source>Start game</source>
<translation>Spiel starten</translation>
</message>

View File

@ -4,101 +4,86 @@
<context>
<name>CModListModel</name>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="150"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="142"/>
<source>Name</source>
<translation>Nazwa</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="153"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="145"/>
<source>Type</source>
<translation>Typ</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="154"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="146"/>
<source>Version</source>
<translation>Wersja</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="155"/>
<source>Size</source>
<translation>Rosmiar</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="156"/>
<source>Author</source>
<translation>Autor</translation>
</message>
</context>
<context>
<name>CModListView</name>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="61"/>
<location filename="../modManager/cmodlistview_moc.ui" line="58"/>
<source>Filter</source>
<translation>Filtruj</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="84"/>
<location filename="../modManager/cmodlistview_moc.ui" line="81"/>
<source>All mods</source>
<translation>Wszystkie mody</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="89"/>
<location filename="../modManager/cmodlistview_moc.ui" line="86"/>
<source>Downloadable</source>
<translation>Dostępny do pobrania</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="94"/>
<location filename="../modManager/cmodlistview_moc.ui" line="91"/>
<source>Installed</source>
<translation>Zainstalowany</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="99"/>
<location filename="../modManager/cmodlistview_moc.ui" line="96"/>
<source>Updatable</source>
<translation>Można zaktualizować</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="104"/>
<location filename="../modManager/cmodlistview_moc.ui" line="101"/>
<source>Active</source>
<translation>Aktywny</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="109"/>
<location filename="../modManager/cmodlistview_moc.ui" line="106"/>
<source>Inactive</source>
<translation>Nieaktywny</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="123"/>
<location filename="../modManager/cmodlistview_moc.ui" line="120"/>
<source>Download &amp;&amp; refresh repositories</source>
<translation>Pobierz i odśwież repozytoria</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="228"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<source>Description</source>
<translation>Opis</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="273"/>
<location filename="../modManager/cmodlistview_moc.ui" line="208"/>
<source>Changelog</source>
<translation>Lista zmian</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="295"/>
<location filename="../modManager/cmodlistview_moc.ui" line="230"/>
<source>Screenshots</source>
<translation>Zrzuty ekranu</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="368"/>
<source>Show details</source>
<translation>Pokaż szczegóły</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="409"/>
<location filename="../modManager/cmodlistview_moc.ui" line="389"/>
<source>Uninstall</source>
<translation>Odinstaluj</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="434"/>
<location filename="../modManager/cmodlistview_moc.ui" line="424"/>
<source>Enable</source>
<translation>Włącz</translation>
</message>
@ -108,134 +93,134 @@
<translation>Wyłącz</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="484"/>
<location filename="../modManager/cmodlistview_moc.ui" line="494"/>
<source>Update</source>
<translation>Zaktualizuj</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="509"/>
<location filename="../modManager/cmodlistview_moc.ui" line="529"/>
<source>Install</source>
<translation>Zainstaluj</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="563"/>
<location filename="../modManager/cmodlistview_moc.ui" line="327"/>
<source> %p% (%v KB out of %m KB)</source>
<translation> %p% (%v KB z %m KB)</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="576"/>
<location filename="../modManager/cmodlistview_moc.ui" line="340"/>
<source>Abort</source>
<translation>Przerwij</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="230"/>
<source>Mod name</source>
<translation>Nazwa moda</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="247"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="231"/>
<source>Installed version</source>
<translation>Zainstalowana wersja</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="232"/>
<source>Latest version</source>
<translation>Najnowsza wersja</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="251"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="235"/>
<source>Download size</source>
<translation>Rozmiar pobierania</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="252"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="236"/>
<source>Authors</source>
<translation>Autorzy</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="239"/>
<source>License</source>
<translation>Licencja</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="258"/>
<source>Home</source>
<translation>Źródło</translation>
<location filename="../modManager/cmodlistview_moc.cpp" line="242"/>
<source>Contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="262"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="269"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<source>Compatibility</source>
<translation>Kompatybilność</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<source>Required VCMI version</source>
<translation>Wymagana wersja VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="261"/>
<source>Supported VCMI version</source>
<translation>Wspierana wersja VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="266"/>
<source>Supported VCMI versions</source>
<translation>Wspierane wersje VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="286"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="270"/>
<source>Required mods</source>
<translation>Wymagane mody</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<source>Conflicting mods</source>
<translation>Konfliktujące mody</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="276"/>
<source>This mod can not be installed or enabled because following dependencies are not present</source>
<translation>Ten mod nie może zostać zainstalowany lub włączony ponieważ następujące zależności nie zostały spełnione</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="293"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<source>This mod can not be enabled because following mods are incompatible with this mod</source>
<translation>Ten mod nie może zostać włączony ponieważ następujące mody z nim niekompatybilne</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="278"/>
<source>This mod can not be disabled because it is required to run following mods</source>
<translation>Ten mod nie może zostać wyłączony ponieważ jest wymagany by do uruchomienia następujących modów</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<source>This mod can not be uninstalled or updated because it is required to run following mods</source>
<translation>Ten mod nie może zostać odinstalowany lub zaktualizowany ponieważ jest wymagany do uruchomienia następujących modów</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
<translation>To jest moduł składowy innego moda i nie może być zainstalowany lub odinstalowany oddzielnie od moda nadrzędnego</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<source>Notes</source>
<translation>Uwagi</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="828"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="797"/>
<source>Screenshot %1</source>
<translation>Zrzut ekranu %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="240"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="224"/>
<source>Mod is compatible</source>
<translation>Mod jest kompatybilny</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="241"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="225"/>
<source>Mod is incompatible</source>
<translation>Mod jest niekompatybilny</translation>
</message>
@ -243,217 +228,342 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="80"/>
<location filename="../settingsView/csettingsview_moc.ui" line="327"/>
<source>Change</source>
<translation>Zmień</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="104"/>
<location filename="../settingsView/csettingsview_moc.ui" line="205"/>
<location filename="../settingsView/csettingsview_moc.ui" line="396"/>
<location filename="../settingsView/csettingsview_moc.ui" line="222"/>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="473"/>
<source>Open</source>
<translation>Otwórz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="590"/>
<source>Adventure Map AI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<source>User data directory</source>
<translation>Katalog danych użytkownika</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="91"/>
<location filename="../settingsView/csettingsview_moc.ui" line="129"/>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<location filename="../settingsView/csettingsview_moc.ui" line="256"/>
<location filename="../settingsView/csettingsview_moc.ui" line="298"/>
<location filename="../settingsView/csettingsview_moc.ui" line="440"/>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Off</source>
<translation>Wyłączony</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="96"/>
<location filename="../settingsView/csettingsview_moc.ui" line="134"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<location filename="../settingsView/csettingsview_moc.ui" line="339"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="576"/>
<source>Artificial Intelligence</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="89"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Mod Repositories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="368"/>
<source>Update now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="261"/>
<location filename="../settingsView/csettingsview_moc.ui" line="303"/>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>On</source>
<translation>Włączony</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="215"/>
<source>Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="500"/>
<source>Heroes III Data Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="557"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>Software</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="597"/>
<source>Heroes III Translation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<source>Check on startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<source>Fullscreen</source>
<translation>Pełny ekran</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<source>Repositories</source>
<translation>Repozytoria</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="188"/>
<source>Check for updates</source>
<translation>Sprawdź czy aktualizacje</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="172"/>
<source>Neutral AI</source>
<translation>AI jednostek neutralnych</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="322"/>
<location filename="../settingsView/csettingsview_moc.ui" line="266"/>
<source>Real</source>
<translation>Prawdziwy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="257"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="354"/>
<source>General</source>
<translation>Ogólne</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Player AI</source>
<translation>AI graczy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<source>VCMI Language</source>
<translation>Język VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Central European (Windows 1250)</source>
<translation>Środkowoeuropejski (Windows 1250)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>Cyrillic script (Windows 1251)</source>
<translation>Cyrylica (Windows 1251)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>Western European (Windows 1252)</source>
<translation>Wschodnioeuropejski (Windows 1252)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="502"/>
<source>Simplified Chinese (GBK)</source>
<translation>Uproszczony chiński (GBK)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="507"/>
<source>Simplified Chinese (GB2312)</source>
<translation>Uproszczony chiński (GB2312)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="512"/>
<source>Korean (Windows 949)</source>
<translation>Koreański (Windows 949)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="521"/>
<source>English</source>
<translation>English (Angielski)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="526"/>
<source>Deutsch (German)</source>
<translation>Deutsch (Niemiecki)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="531"/>
<source>Polski (Polish)</source>
<translation>Polski</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="536"/>
<source>Русский (Russian)</source>
<translation>Русский (Rosyjski)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="541"/>
<source>Українська (Ukrainian)</source>
<translation>Українська (Ukraiński)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<source>Friendly AI</source>
<translation>AI sojuszników</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="301"/>
<location filename="../settingsView/csettingsview_moc.ui" line="165"/>
<source>Resolution</source>
<translation>Rozdzielczość</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<source>AI on the map</source>
<translation>AI na mapie przygody</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="168"/>
<location filename="../settingsView/csettingsview_moc.ui" line="179"/>
<source>Autosave</source>
<translation>Autozapis</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="219"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<source>Display index</source>
<translation>Numer wyświetlacza</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="198"/>
<source>Check repositories on startup</source>
<translation>Sprawdź repozytoria przy starcie</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="452"/>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<source>Network port</source>
<translation>Port sieciowy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<source>Data Directories</source>
<translation>Katalogi z danymi</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="409"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="192"/>
<source>Video</source>
<translation>Obraz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="111"/>
<source>Heroes III character set</source>
<translation>Zestaw znaków w grze</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="294"/>
<location filename="../settingsView/csettingsview_moc.ui" line="466"/>
<source>Extra data directory</source>
<translation>Katalog danych dodatkowych</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="142"/>
<location filename="../settingsView/csettingsview_moc.ui" line="583"/>
<source>Log files directory</source>
<translation>Katalog logów</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="361"/>
<source>Show intro</source>
<translation>Pokaż intro</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="57"/>
<source>Launcher Settings</source>
<translation>Ustawienia Launchera</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="341"/>
<source>Build version</source>
<translation>Wersja programu</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="632"/>
<location filename="../settingsView/csettingsview_moc.ui" line="534"/>
<source>Enemy AI</source>
<translation>AI wrogich graczy</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="234"/>
<source>AI in the battlefield</source>
<translation>AI na polu bitwy</translation>
<location filename="../settingsView/csettingsview_moc.cpp" line="385"/>
<source>Active</source>
<translation type="unfinished">Aktywny</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="390"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="391"/>
<source>Enable</source>
<translation type="unfinished">Włącz</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="396"/>
<source>Not Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="397"/>
<source>Install</source>
<translation type="unfinished">Zainstaluj</translation>
</message>
</context>
<context>
<name>FirstLaunchView</name>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="28"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="53"/>
<source>Heroes III Data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="78"/>
<source>Mods Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="384"/>
<source>Your Heroes III data files have been successfully found.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="552"/>
<source>Optionally, you can install additional mods either now or at any point later:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="616"/>
<source>Install support for playing Heroes III in resolutions other than 800x600.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="645"/>
<source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="674"/>
<source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="721"/>
<source>Finish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="111"/>
<source>Step %v out of %m</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="143"/>
<source>Choose your language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="150"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="493"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="215"/>
<source>Find Heroes III data files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="246"/>
<source>Open help in browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="259"/>
<source>Search again</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="304"/>
<source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="320"/>
<source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="342"/>
<source>Heroes III data files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="355"/>
<source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="371"/>
<source>Copy existing data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="414"/>
<source>Your Heroes III language has been successfully detected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="424"/>
<source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="443"/>
<source>Heroes III language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="486"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="714"/>
<source>Back</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="524"/>
<source>Install VCMI Mod Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="584"/>
<source>Install translation of Heroes III to your language</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -464,68 +574,172 @@
<translation>Wyświetlacz obrazków</translation>
</message>
</context>
<context>
<name>Language</name>
<message>
<location filename="../languages.cpp" line="23"/>
<source>Chinese</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="24"/>
<source>English</source>
<translation type="unfinished">English (Angielski)</translation>
</message>
<message>
<location filename="../languages.cpp" line="25"/>
<source>French</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="26"/>
<source>German</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="27"/>
<source>Korean</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="28"/>
<source>Polish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="29"/>
<source>Russian</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="30"/>
<source>Spanish</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="31"/>
<source>Ukrainian</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="32"/>
<source>Other (East European)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="33"/>
<source>Other (Cyrillic Script)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="34"/>
<source>Other (West European)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../languages.cpp" line="56"/>
<source>Auto (%1)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Lobby</name>
<message>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<location filename="../lobby/lobby_moc.ui" line="39"/>
<location filename="../lobby/lobby_moc.cpp" line="401"/>
<source>Connect</source>
<translation>Połącz</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="45"/>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<source>Username</source>
<translation>Nazwa użytkownika</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="69"/>
<location filename="../lobby/lobby_moc.ui" line="56"/>
<source>Server</source>
<translation>Serwer</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="111"/>
<location filename="../lobby/lobby_moc.ui" line="76"/>
<source>People in lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="114"/>
<source>Lobby chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="194"/>
<source>Session</source>
<translation>Sesja</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="116"/>
<location filename="../lobby/lobby_moc.ui" line="199"/>
<source>Players</source>
<translation>Gracze</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="132"/>
<location filename="../lobby/lobby_moc.ui" line="274"/>
<source>Resolve</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="286"/>
<source>New game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="293"/>
<source>Load game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="149"/>
<source>New room</source>
<translation>Nowy pokój</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="142"/>
<location filename="../lobby/lobby_moc.ui" line="159"/>
<source>Join room</source>
<translation>Dołącz</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="153"/>
<location filename="../lobby/lobby_moc.ui" line="267"/>
<source>Ready</source>
<translation>Zgłoś gotowość</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="160"/>
<location filename="../lobby/lobby_moc.ui" line="250"/>
<source>Mods mismatch</source>
<translation>Niezgodność modów</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="167"/>
<location filename="../lobby/lobby_moc.ui" line="243"/>
<source>Leave</source>
<translation>Wyjdź</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="197"/>
<location filename="../lobby/lobby_moc.ui" line="216"/>
<source>Kick player</source>
<translation>Wyrzuć gracza</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="204"/>
<location filename="../lobby/lobby_moc.ui" line="236"/>
<source>Players in the room</source>
<translation>Gracze w pokoju</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="369"/>
<source>Disconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="461"/>
<source>No issues detected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LobbyRoomRequest</name>
@ -558,34 +772,30 @@
<translation>VCMI Launcher (program startowy)</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="95"/>
<location filename="../mainwindow_moc.ui" line="107"/>
<source>Settings</source>
<translation>Ustawienia</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="189"/>
<location filename="../mainwindow_moc.ui" line="226"/>
<source>Map Editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="236"/>
<location filename="../mainwindow_moc.ui" line="279"/>
<source>Start game</source>
<translation>Uruchom grę</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="139"/>
<location filename="../mainwindow_moc.ui" line="157"/>
<source>Lobby</source>
<translation>Lobby</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="51"/>
<location filename="../mainwindow_moc.ui" line="57"/>
<source>Mods</source>
<translation>Mody</translation>
</message>
<message>
<source>Editor</source>
<translation type="vanished">Edytor</translation>
</message>
</context>
<context>
<name>UpdateDialog</name>

File diff suppressed because it is too large Load Diff

View File

@ -4,101 +4,86 @@
<context>
<name>CModListModel</name>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="150"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="142"/>
<source>Name</source>
<translation>Назва</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="153"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="145"/>
<source>Type</source>
<translation>Тип</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="154"/>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="146"/>
<source>Version</source>
<translation>Версія</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="155"/>
<source>Size</source>
<translation>Розмір</translation>
</message>
<message>
<location filename="../modManager/cmodlistmodel_moc.cpp" line="156"/>
<source>Author</source>
<translation>Автори</translation>
</message>
</context>
<context>
<name>CModListView</name>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="61"/>
<location filename="../modManager/cmodlistview_moc.ui" line="58"/>
<source>Filter</source>
<translation>Фільтр</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="84"/>
<location filename="../modManager/cmodlistview_moc.ui" line="81"/>
<source>All mods</source>
<translation>Усі модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="89"/>
<location filename="../modManager/cmodlistview_moc.ui" line="86"/>
<source>Downloadable</source>
<translation>Усі доступні</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="94"/>
<location filename="../modManager/cmodlistview_moc.ui" line="91"/>
<source>Installed</source>
<translation>Встановлені</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="99"/>
<location filename="../modManager/cmodlistview_moc.ui" line="96"/>
<source>Updatable</source>
<translation>Доступні оновлення</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="104"/>
<location filename="../modManager/cmodlistview_moc.ui" line="101"/>
<source>Active</source>
<translation>Активні</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="109"/>
<location filename="../modManager/cmodlistview_moc.ui" line="106"/>
<source>Inactive</source>
<translation>Неактивні</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="123"/>
<location filename="../modManager/cmodlistview_moc.ui" line="120"/>
<source>Download &amp;&amp; refresh repositories</source>
<translation>Оновити репозиторії</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="228"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="288"/>
<location filename="../modManager/cmodlistview_moc.ui" line="163"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="272"/>
<source>Description</source>
<translation>Опис</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="273"/>
<location filename="../modManager/cmodlistview_moc.ui" line="208"/>
<source>Changelog</source>
<translation>Зміни</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="295"/>
<location filename="../modManager/cmodlistview_moc.ui" line="230"/>
<source>Screenshots</source>
<translation>Знімки</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="368"/>
<source>Show details</source>
<translation>Показати подробиці</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="409"/>
<location filename="../modManager/cmodlistview_moc.ui" line="389"/>
<source>Uninstall</source>
<translation>Видалити</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="434"/>
<location filename="../modManager/cmodlistview_moc.ui" line="424"/>
<source>Enable</source>
<translation>Активувати</translation>
</message>
@ -108,134 +93,134 @@
<translation>Деактивувати</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="484"/>
<location filename="../modManager/cmodlistview_moc.ui" line="494"/>
<source>Update</source>
<translation>Оновити</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="509"/>
<location filename="../modManager/cmodlistview_moc.ui" line="529"/>
<source>Install</source>
<translation>Встановити</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="563"/>
<location filename="../modManager/cmodlistview_moc.ui" line="327"/>
<source> %p% (%v KB out of %m KB)</source>
<translation> %p% (%v КБ з %m КБ)</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="576"/>
<location filename="../modManager/cmodlistview_moc.ui" line="340"/>
<source>Abort</source>
<translation>Відмінити</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="230"/>
<source>Mod name</source>
<translation>Назва модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="247"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="231"/>
<source>Installed version</source>
<translation>Встановлена версія</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="248"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="232"/>
<source>Latest version</source>
<translation>Найновіша версія</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="251"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="235"/>
<source>Download size</source>
<translation>Розмір для завантаження</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="252"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="236"/>
<source>Authors</source>
<translation>Автори</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="239"/>
<source>License</source>
<translation>Ліцензія</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="258"/>
<source>Home</source>
<translation>Домашня сторінка</translation>
<location filename="../modManager/cmodlistview_moc.cpp" line="242"/>
<source>Contact</source>
<translation>Контакти</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="262"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="269"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="246"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="253"/>
<source>Compatibility</source>
<translation>Сумісність</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="255"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="263"/>
<source>Required VCMI version</source>
<translation>Необхідна версія VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="261"/>
<source>Supported VCMI version</source>
<translation>Підтримувана версія VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="282"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="266"/>
<source>Supported VCMI versions</source>
<translation>Підтримувані версії VCMI</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="286"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="270"/>
<source>Required mods</source>
<translation>Необхідні модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="287"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="271"/>
<source>Conflicting mods</source>
<translation>Конфліктуючі модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="292"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="276"/>
<source>This mod can not be installed or enabled because following dependencies are not present</source>
<translation>Цю модифікацію не можна встановити чи активувати, оскільки відсутні наступні залежності</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="293"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="277"/>
<source>This mod can not be enabled because following mods are incompatible with this mod</source>
<translation>Цю модифікацію не можна ввімкнути, оскільки наступні модифікації несумісні з цією модифікацією</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="294"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="278"/>
<source>This mod can not be disabled because it is required to run following mods</source>
<translation>Цю модифікацію не можна відключити, оскільки вона необхідна для запуску наступних модифікацій</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="279"/>
<source>This mod can not be uninstalled or updated because it is required to run following mods</source>
<translation>Цю модифікацію не можна видалити або оновити, оскільки вона необхідна для запуску наступних модифікацій</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="296"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="280"/>
<source>This is submod and it can not be installed or uninstalled separately from parent mod</source>
<translation>Це вкладена модифікація, і її не можна встановити або видалити окремо від батьківської модифікації</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="311"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="295"/>
<source>Notes</source>
<translation>Примітки</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="828"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="797"/>
<source>Screenshot %1</source>
<translation>Знімок екрану %1</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="240"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="224"/>
<source>Mod is compatible</source>
<translation>Модифікація сумісна</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.cpp" line="241"/>
<location filename="../modManager/cmodlistview_moc.cpp" line="225"/>
<source>Mod is incompatible</source>
<translation>Модифікація несумісна</translation>
</message>
@ -243,218 +228,343 @@
<context>
<name>CSettingsView</name>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="80"/>
<location filename="../settingsView/csettingsview_moc.ui" line="327"/>
<source>Change</source>
<translation>Змінити</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="104"/>
<location filename="../settingsView/csettingsview_moc.ui" line="205"/>
<location filename="../settingsView/csettingsview_moc.ui" line="396"/>
<location filename="../settingsView/csettingsview_moc.ui" line="222"/>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="473"/>
<source>Open</source>
<translation>Відкрити</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="590"/>
<source>Adventure Map AI</source>
<translation>ШІ Гравця</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<source>User data directory</source>
<translation>Тека даних користувача</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="91"/>
<location filename="../settingsView/csettingsview_moc.ui" line="129"/>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/>
<location filename="../settingsView/csettingsview_moc.ui" line="334"/>
<location filename="../settingsView/csettingsview_moc.ui" line="256"/>
<location filename="../settingsView/csettingsview_moc.ui" line="298"/>
<location filename="../settingsView/csettingsview_moc.ui" line="440"/>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Off</source>
<translation>Вимкнено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="96"/>
<location filename="../settingsView/csettingsview_moc.ui" line="134"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<location filename="../settingsView/csettingsview_moc.ui" line="339"/>
<location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="576"/>
<source>Artificial Intelligence</source>
<translation>Штучний інтелект</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="89"/>
<location filename="../settingsView/csettingsview_moc.ui" line="415"/>
<source>Mod Repositories</source>
<translation>Репозиторії модифікацій</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="368"/>
<source>Update now</source>
<translation>Оновити зараз</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="261"/>
<location filename="../settingsView/csettingsview_moc.ui" line="303"/>
<location filename="../settingsView/csettingsview_moc.ui" line="445"/>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>On</source>
<translation>Увімкнено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="118"/>
<location filename="../settingsView/csettingsview_moc.ui" line="215"/>
<source>Cursor</source>
<translation>Курсор</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="500"/>
<source>Heroes III Data Language</source>
<translation>Мова Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="552"/>
<source>Default</source>
<translation>За замовчуванням</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="557"/>
<source>Hardware</source>
<translation>Апаратний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="562"/>
<source>Software</source>
<translation>Програмний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="597"/>
<source>Heroes III Translation</source>
<translation>Переклад Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="429"/>
<source>Check on startup</source>
<translation>Перевіряти на старті</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="158"/>
<source>Fullscreen</source>
<translation>Повноекранний режим</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="234"/>
<source>AI in the battlefield</source>
<translation>Штучний інтелект на полі бою</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/>
<source>Repositories</source>
<translation>Репозиторії</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="188"/>
<source>Check for updates</source>
<translation>Оновити зараз</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/>
<location filename="../settingsView/csettingsview_moc.ui" line="172"/>
<source>Neutral AI</source>
<translation>Нейтральний ШІ</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="322"/>
<location filename="../settingsView/csettingsview_moc.ui" line="266"/>
<source>Real</source>
<translation>Повний</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="257"/>
<location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="354"/>
<source>General</source>
<translation>Загальні налаштування</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Player AI</source>
<translation>ШІ гравців</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/>
<location filename="../settingsView/csettingsview_moc.ui" line="144"/>
<source>VCMI Language</source>
<translation>Мова VCMI</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="487"/>
<source>Central European (Windows 1250)</source>
<translation>Центральноєвропейська (Windows 1250)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="492"/>
<source>Cyrillic script (Windows 1251)</source>
<translation>Кирилиця (Windows 1251)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="497"/>
<source>Western European (Windows 1252)</source>
<translation>Західноєвропейська (Windows 1252)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="502"/>
<source>Simplified Chinese (GBK)</source>
<translation>Спрощена китайська (GBK)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="507"/>
<source>Simplified Chinese (GB2312)</source>
<translation>Спрощена китайська (GB2312)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="512"/>
<source>Korean (Windows 949)</source>
<translation>Корейська (Windows 949)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="521"/>
<source>English</source>
<translation>English (Англійська)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="526"/>
<source>Deutsch (German)</source>
<translation>Deutsch (Німецька)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="531"/>
<source>Polska (Polish)</source>
<translation>Polska (Польська)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="536"/>
<source>Русский (Russian)</source>
<translation>Русский (Російська)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="541"/>
<source>Українська (Ukrainian)</source>
<translation>Українська</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<source>Friendly AI</source>
<translation>Дружній ШІ</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="301"/>
<location filename="../settingsView/csettingsview_moc.ui" line="165"/>
<source>Resolution</source>
<translation>Роздільна здатність</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="353"/>
<source>AI on the map</source>
<translation>Штучний інтелект на карті пригод</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="168"/>
<location filename="../settingsView/csettingsview_moc.ui" line="179"/>
<source>Autosave</source>
<translation>Автозбереження</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="219"/>
<location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<source>Display index</source>
<translation>Дісплей</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="198"/>
<source>Check repositories on startup</source>
<translation>Перевірка репозиторіїв при запуску</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="452"/>
<location filename="../settingsView/csettingsview_moc.ui" line="151"/>
<source>Network port</source>
<translation>Мережевий порт</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="422"/>
<location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="317"/>
<source>Data Directories</source>
<translation>Теки даних гри</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="409"/>
<location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="192"/>
<source>Video</source>
<translation>Графіка</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="111"/>
<source>Heroes III character set</source>
<translation>Кодування Heroes III</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="294"/>
<location filename="../settingsView/csettingsview_moc.ui" line="466"/>
<source>Extra data directory</source>
<translation>Додаткова тека даних</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="142"/>
<location filename="../settingsView/csettingsview_moc.ui" line="583"/>
<source>Log files directory</source>
<translation>Тека файлів журналу</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/>
<location filename="../settingsView/csettingsview_moc.ui" line="361"/>
<source>Show intro</source>
<translation>Вступні відео</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="57"/>
<source>Launcher Settings</source>
<translation>Налаштування лаунчера</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="287"/>
<location filename="../settingsView/csettingsview_moc.ui" line="341"/>
<source>Build version</source>
<translation>Версія збірки</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="632"/>
<location filename="../settingsView/csettingsview_moc.ui" line="534"/>
<source>Enemy AI</source>
<translation>Ворожий ШІ</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="385"/>
<source>Active</source>
<translation>Активні</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="390"/>
<source>Disabled</source>
<translation>Деактивований</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="391"/>
<source>Enable</source>
<translation>Активувати</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="396"/>
<source>Not Installed</source>
<translation>Не встановлено</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.cpp" line="397"/>
<source>Install</source>
<translation>Встановити</translation>
</message>
</context>
<context>
<name>FirstLaunchView</name>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="28"/>
<source>Language</source>
<translation>Мова</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="53"/>
<source>Heroes III Data</source>
<translation>Дані Heroes III</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="78"/>
<source>Mods Preset</source>
<translation>Початкові модифікації</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="384"/>
<source>Your Heroes III data files have been successfully found.</source>
<translation>Файли даних вашої гри Heroes III успішно знайдено.</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="552"/>
<source>Optionally, you can install additional mods either now or at any point later:</source>
<translation>За бажанням ви можете встановити додаткові модифікації зараз або пізніше:</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="616"/>
<source>Install support for playing Heroes III in resolutions other than 800x600.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="645"/>
<source>Install compatible version of addon Horn of the Abyss: fan-made Heroes III expansion, ported by VCMI team</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="674"/>
<source>Install compatible version of addon &quot;In The Wake of Gods&quot;: fan-made Heroes III expansion</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="721"/>
<source>Finish</source>
<translation>Завершити</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="111"/>
<source>Step %v out of %m</source>
<translation>Крок %v з %m</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="143"/>
<source>Choose your language</source>
<translation>Оберіть свою мову</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="150"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="493"/>
<source>Next</source>
<translation>Далі</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="215"/>
<source>Find Heroes III data files</source>
<translation>Пошук файлів даних Heroes III</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="246"/>
<source>Open help in browser</source>
<translation>Відкрити довідку у браузері</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="259"/>
<source>Search again</source>
<translation>Повторити пошук</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="304"/>
<source>If you don&apos;t have installed Heroes III copy, it is possible to use our automatic installation tool &apos;vcmibuilder&apos; to extract data from GoG.com installer. Visit our wiki for detailed instructions.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="320"/>
<source>VCMI requires Heroes III data files in one of the locations listed above. Please copy Heroes III data in one of these directories.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="342"/>
<source>Heroes III data files</source>
<translation>Файли даних Heroes III</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="355"/>
<source>Alternatively, you can select directory with installed Heroes III data and VCMI will copy exisiting data automatically.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="371"/>
<source>Copy existing data</source>
<translation>Копіювати наявні дані</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="414"/>
<source>Your Heroes III language has been successfully detected.</source>
<translation>Мову вашої гри Heroes III успішно визначено.</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="424"/>
<source>Automatic detection of language failed. Please select language of your Heroes III copy</source>
<translation>Не вдалося визначити мову гри. Будь ласка, виберіть мову вашої копії Heroes III</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="443"/>
<source>Heroes III language</source>
<translation>Мова Heroes III</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="486"/>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="714"/>
<source>Back</source>
<translation>Назад</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="524"/>
<source>Install VCMI Mod Preset</source>
<translation>Встановлення початкових модифікацій VCMI</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="584"/>
<source>Install translation of Heroes III to your language</source>
<translation>Встановити переклад Heroes III на вашу мову</translation>
</message>
</context>
<context>
<name>ImageViewer</name>
@ -464,68 +574,172 @@
<translation>Перегляд зображень</translation>
</message>
</context>
<context>
<name>Language</name>
<message>
<location filename="../languages.cpp" line="23"/>
<source>Chinese</source>
<translation>Китайська</translation>
</message>
<message>
<location filename="../languages.cpp" line="24"/>
<source>English</source>
<translation>Англійська</translation>
</message>
<message>
<location filename="../languages.cpp" line="25"/>
<source>French</source>
<translation>Французька</translation>
</message>
<message>
<location filename="../languages.cpp" line="26"/>
<source>German</source>
<translation>Німецька</translation>
</message>
<message>
<location filename="../languages.cpp" line="27"/>
<source>Korean</source>
<translation>Корейська</translation>
</message>
<message>
<location filename="../languages.cpp" line="28"/>
<source>Polish</source>
<translation>Польська</translation>
</message>
<message>
<location filename="../languages.cpp" line="29"/>
<source>Russian</source>
<translation>Російська</translation>
</message>
<message>
<location filename="../languages.cpp" line="30"/>
<source>Spanish</source>
<translation>Іспанська</translation>
</message>
<message>
<location filename="../languages.cpp" line="31"/>
<source>Ukrainian</source>
<translation>Українська</translation>
</message>
<message>
<location filename="../languages.cpp" line="32"/>
<source>Other (East European)</source>
<translation>Інша (східноєвропейська)</translation>
</message>
<message>
<location filename="../languages.cpp" line="33"/>
<source>Other (Cyrillic Script)</source>
<translation>Інша (кирилиця)</translation>
</message>
<message>
<location filename="../languages.cpp" line="34"/>
<source>Other (West European)</source>
<translation>Інша (західноєвропейська)</translation>
</message>
<message>
<location filename="../languages.cpp" line="56"/>
<source>Auto (%1)</source>
<translation>Авто (%1)</translation>
</message>
</context>
<context>
<name>Lobby</name>
<message>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<location filename="../lobby/lobby_moc.ui" line="39"/>
<location filename="../lobby/lobby_moc.cpp" line="401"/>
<source>Connect</source>
<translation>Підключитися</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="45"/>
<location filename="../lobby/lobby_moc.ui" line="26"/>
<source>Username</source>
<translation>Ім&apos;я користувача</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="69"/>
<location filename="../lobby/lobby_moc.ui" line="56"/>
<source>Server</source>
<translation>Сервер</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="111"/>
<location filename="../lobby/lobby_moc.ui" line="76"/>
<source>People in lobby</source>
<translation>Гравці у лобі</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="114"/>
<source>Lobby chat</source>
<translation>Лобі чат</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="194"/>
<source>Session</source>
<translation>Сесія</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="116"/>
<location filename="../lobby/lobby_moc.ui" line="199"/>
<source>Players</source>
<translation>Гравці</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="132"/>
<location filename="../lobby/lobby_moc.ui" line="274"/>
<source>Resolve</source>
<translation>Розв&apos;язати</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="286"/>
<source>New game</source>
<translation>Нова гра</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="293"/>
<source>Load game</source>
<translation>Завантажити гру</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="149"/>
<source>New room</source>
<translation>Створити кімнату</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="142"/>
<location filename="../lobby/lobby_moc.ui" line="159"/>
<source>Join room</source>
<translation>Приєднатися до кімнати</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="153"/>
<location filename="../lobby/lobby_moc.ui" line="267"/>
<source>Ready</source>
<translation>Готовність</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="160"/>
<location filename="../lobby/lobby_moc.ui" line="250"/>
<source>Mods mismatch</source>
<translation>Модифікації, що не збігаються</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="167"/>
<location filename="../lobby/lobby_moc.ui" line="243"/>
<source>Leave</source>
<translation>Вийти з кімнати</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="197"/>
<location filename="../lobby/lobby_moc.ui" line="216"/>
<source>Kick player</source>
<translation>Виключити гравця</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.ui" line="204"/>
<location filename="../lobby/lobby_moc.ui" line="236"/>
<source>Players in the room</source>
<translation>Гравці у кімнаті</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="369"/>
<source>Disconnect</source>
<translation>Від&apos;єднатися</translation>
</message>
<message>
<location filename="../lobby/lobby_moc.cpp" line="461"/>
<source>No issues detected</source>
<translation>Проблем не виявлено</translation>
</message>
</context>
<context>
<name>LobbyRoomRequest</name>
@ -558,31 +772,27 @@
<translation>VCMI Launcher</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="51"/>
<location filename="../mainwindow_moc.ui" line="57"/>
<source>Mods</source>
<translation>Модифікації</translation>
</message>
<message>
<source>Editor</source>
<translation type="vanished">Редактор</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="95"/>
<location filename="../mainwindow_moc.ui" line="107"/>
<source>Settings</source>
<translation>Налаштування</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="139"/>
<location filename="../mainwindow_moc.ui" line="157"/>
<source>Lobby</source>
<translation>Лобі</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="189"/>
<location filename="../mainwindow_moc.ui" line="226"/>
<source>Map Editor</source>
<translation type="unfinished"></translation>
<translation>Редактор мап</translation>
</message>
<message>
<location filename="../mainwindow_moc.ui" line="236"/>
<location filename="../mainwindow_moc.ui" line="279"/>
<source>Start game</source>
<translation>Грати</translation>
</message>

View File

@ -49,7 +49,7 @@ void CGeneralTextHandler::detectInstallParameters()
// load file that will be used for footprint generation
// this is one of the most text-heavy files in game and consists solely from translated texts
auto resource = CResourceHandler::get()->load(ResourceID("DATA/GENRLTXT.TXT", EResType::TEXT));
auto resource = CResourceHandler::get("core")->load(ResourceID("DATA/GENRLTXT.TXT", EResType::TEXT));
std::array<size_t, 256> charCount{};
std::array<double, 16> footprint{};
@ -87,6 +87,9 @@ void CGeneralTextHandler::detectInstallParameters()
Settings language = settings.write["session"]["language"];
language->String() = knownLanguages[bestIndex];
Settings confidence = settings.write["session"]["languageDeviation"];
confidence->Float() = deviations[bestIndex];
Settings encoding = settings.write["session"]["encoding"];
encoding->String() = Languages::getLanguageOptions(knownLanguages[bestIndex]).encoding;
}
@ -387,8 +390,6 @@ CGeneralTextHandler::CGeneralTextHandler():
znpc00 (*this, "vcmi.znpc00" ), // technically - wog
qeModCommands (*this, "vcmi.quickExchange" )
{
detectInstallParameters();
readToVector("core.vcdesc", "DATA/VCDESC.TXT" );
readToVector("core.lcdesc", "DATA/LCDESC.TXT" );
readToVector("core.tcommand", "DATA/TCOMMAND.TXT" );
@ -605,16 +606,19 @@ std::string CGeneralTextHandler::getModLanguage(const std::string & modContext)
std::string CGeneralTextHandler::getPreferredLanguage()
{
assert(!settings["general"]["language"].String().empty());
return settings["general"]["language"].String();
}
std::string CGeneralTextHandler::getInstalledLanguage()
{
assert(!settings["session"]["language"].String().empty());
return settings["session"]["language"].String();
}
std::string CGeneralTextHandler::getInstalledEncoding()
{
assert(!settings["session"]["encoding"].String().empty());
return settings["session"]["encoding"].String();
}

View File

@ -616,7 +616,8 @@ bool CModInfo::Version::isNull() const
CModInfo::CModInfo():
checksum(0),
enabled(false),
explicitlyEnabled(false),
implicitlyEnabled(true),
validation(PENDING)
{
@ -629,7 +630,8 @@ CModInfo::CModInfo(std::string identifier,const JsonNode & local, const JsonNode
dependencies(config["depends"].convertTo<std::set<std::string> >()),
conflicts(config["conflicts"].convertTo<std::set<std::string> >()),
checksum(0),
enabled(false),
explicitlyEnabled(false),
implicitlyEnabled(true),
validation(PENDING),
config(addMeta(config, identifier))
{
@ -654,7 +656,7 @@ JsonNode CModInfo::saveLocalData() const
stream << std::noshowbase << std::hex << std::setw(8) << std::setfill('0') << checksum;
JsonNode conf;
conf["active"].Bool() = enabled;
conf["active"].Bool() = explicitlyEnabled;
conf["validated"].Bool() = validation != FAILED;
conf["checksum"].String() = stream.str();
return conf;
@ -683,33 +685,52 @@ void CModInfo::updateChecksum(ui32 newChecksum)
void CModInfo::loadLocalData(const JsonNode & data)
{
bool validated = false;
enabled = true;
implicitlyEnabled = true;
explicitlyEnabled = true;
checksum = 0;
if (data.getType() == JsonNode::JsonType::DATA_BOOL)
{
enabled = data.Bool();
explicitlyEnabled = data.Bool();
}
if (data.getType() == JsonNode::JsonType::DATA_STRUCT)
{
enabled = data["active"].Bool();
explicitlyEnabled = data["active"].Bool();
validated = data["validated"].Bool();
checksum = strtol(data["checksum"].String().c_str(), nullptr, 16);
}
//check compatibility
bool wasEnabled = enabled;
enabled = enabled && (vcmiCompatibleMin.isNull() || Version::GameVersion().compatible(vcmiCompatibleMin));
enabled = enabled && (vcmiCompatibleMax.isNull() || vcmiCompatibleMax.compatible(Version::GameVersion()));
implicitlyEnabled &= (vcmiCompatibleMin.isNull() || Version::GameVersion().compatible(vcmiCompatibleMin));
implicitlyEnabled &= (vcmiCompatibleMax.isNull() || vcmiCompatibleMax.compatible(Version::GameVersion()));
if(wasEnabled && !enabled)
if(!implicitlyEnabled)
logGlobal->warn("Mod %s is incompatible with current version of VCMI and cannot be enabled", name);
if (enabled)
if (boost::iequals(config["modType"].String(), "translation")) // compatibility code - mods use "Translation" type at the moment
{
if (baseLanguage != VLC->generaltexth->getPreferredLanguage())
{
logGlobal->warn("Translation mod %s was not loaded: language mismatch!", name);
implicitlyEnabled = false;
}
}
if (isEnabled())
validation = validated ? PASSED : PENDING;
else
validation = validated ? PASSED : FAILED;
}
bool CModInfo::isEnabled() const
{
return implicitlyEnabled && explicitlyEnabled;
}
void CModInfo::setEnabled(bool on)
{
explicitlyEnabled = on;
}
CModHandler::CModHandler() : content(std::make_shared<CContentHandler>())
{
modules.COMMANDERS = false;
@ -820,36 +841,6 @@ bool CModHandler::hasCircularDependency(TModID modID, std::set <TModID> currentL
return false;
}
bool CModHandler::checkDependencies(const std::vector <TModID> & input) const
{
for(const TModID & id : input)
{
const CModInfo & mod = allMods.at(id);
for(const TModID & dep : mod.dependencies)
{
if(!vstd::contains(input, dep))
{
logMod->error("Error: Mod %s requires missing %s!", mod.name, dep);
return false;
}
}
for(const TModID & conflicting : mod.conflicts)
{
if(vstd::contains(input, conflicting))
{
logMod->error("Error: Mod %s conflicts with %s!", mod.name, allMods.at(conflicting).name);
return false;
}
}
if(hasCircularDependency(id))
return false;
}
return true;
}
// Returned vector affects the resource loaders call order (see CFilesystemList::load).
// The loaders call order matters when dependent mod overrides resources in its dependencies.
std::vector <TModID> CModHandler::validateAndSortDependencies(std::vector <TModID> modsToResolve) const
@ -995,10 +986,10 @@ void CModHandler::loadOneMod(std::string modName, std::string parent, const Json
mod.dependencies.insert(parent);
allMods[modFullName] = mod;
if (mod.enabled && enableMods)
if (mod.isEnabled() && enableMods)
activeMods.push_back(modFullName);
loadMods(CModInfo::getModDir(modFullName) + '/', modFullName, modSettings[modName]["mods"], enableMods && mod.enabled);
loadMods(CModInfo::getModDir(modFullName) + '/', modFullName, modSettings[modName]["mods"], enableMods && mod.isEnabled());
}
}
@ -1087,6 +1078,8 @@ static ui32 calculateModChecksum(const std::string modName, ISimpleResourceLoade
void CModHandler::loadModFilesystems()
{
CGeneralTextHandler::detectInstallParameters();
activeMods = validateAndSortDependencies(activeMods);
coreMod.updateChecksum(calculateModChecksum(CModHandler::scopeBuiltin(), CResourceHandler::get(CModHandler::scopeBuiltin())));
@ -1109,6 +1102,9 @@ TModID CModHandler::findResourceOrigin(const ResourceID & name)
if(CResourceHandler::get("core")->existsResource(name))
return "core";
if(CResourceHandler::get("mapEditor")->existsResource(name))
return "core"; // Workaround for loading maps via map editor
assert(0);
return "";
}

View File

@ -236,9 +236,6 @@ public:
/// CRC-32 checksum of the mod
ui32 checksum;
/// true if mod is enabled
bool enabled;
EValidationStatus validation;
JsonNode config;
@ -249,10 +246,19 @@ public:
JsonNode saveLocalData() const;
void updateChecksum(ui32 newChecksum);
bool isEnabled() const;
void setEnabled(bool on);
static std::string getModDir(std::string name);
static std::string getModFile(std::string name);
private:
/// true if mod is enabled by user, e.g. in Launcher UI
bool explicitlyEnabled;
/// true if mod can be loaded - compatible and has no missing deps
bool implicitlyEnabled;
void loadLocalData(const JsonNode & data);
};
@ -266,12 +272,6 @@ class DLL_LINKAGE CModHandler
bool hasCircularDependency(TModID mod, std::set <TModID> currentList = std::set <TModID>()) const;
//returns false if mod list is incorrect and prints error to console. Possible errors are:
// - missing dependency mod
// - conflicting mod in load order
// - circular dependencies
bool checkDependencies(const std::vector <TModID> & input) const;
/**
* 1. Set apart mods with resolved dependencies from mods which have unresolved dependencies
* 2. Sort resolved mods using topological algorithm
@ -449,7 +449,7 @@ public:
h & mver;
if(allMods.count(m) && (allMods[m].version.isNull() || mver.isNull() || allMods[m].version.compatible(mver)))
allMods[m].enabled = true;
allMods[m].setEnabled(true);
else
missingMods.emplace_back(m, mver.toString());
}

View File

@ -18,10 +18,17 @@ enum class ELanguages
ENGLISH,
FRENCH,
GERMAN,
KOREAN, // currently has no translations or detection
POLISH,
RUSSIAN,
SPANISH,
UKRAINIAN,
// Pseudo-languages, that have no translations but can define H3 encoding to use
OTHER_CP1250,
OTHER_CP1251,
OTHER_CP1252,
COUNT
};
@ -46,34 +53,39 @@ struct Options
bool hasTranslation = false;
};
inline auto const & getLanguageList( )
inline const auto & getLanguageList()
{
static const std::array<Options, 7> languages
static const std::array<Options, 12> languages
{ {
{ "chinese", "Chinese", "简体中文", "GBK", true, true },
{ "chinese", "Chinese", "简体中文", "GBK", true, true }, // Note: actually Simplified Chinese
{ "english", "English", "English", "CP1252", true, true },
{ "french", "French", "Français", "CP1252", true, true },
{ "german", "German", "Deutsch", "CP1252", true, true },
//TODO: korean - CP949 encoding
{ "korean", "Korean", "한국어", "CP949", false, false },
{ "polish", "Polish", "Polski", "CP1250", true, true },
{ "russian", "Russian", "Русский", "CP1251", true, true },
{ "ukrainian", "Ukrainian", "Українська", "CP1251", true, true }
{ "spanish", "Spanish", "Español", "CP1252", false, true },
{ "ukrainian", "Ukrainian", "Українська", "CP1251", true, true },
{ "other_cp1250", "Other (East European)", "", "CP1251", false, false },
{ "other_cp1251", "Other (Cyrillic Script)", "", "CP1250", false, false },
{ "other_cp1252", "Other (West European)", "", "CP1252", false, false }
} };
static_assert (languages.size() == static_cast<size_t>(ELanguages::COUNT), "Languages array is missing a value!" );
static_assert(languages.size() == static_cast<size_t>(ELanguages::COUNT), "Languages array is missing a value!");
return languages;
}
inline const Options & getLanguageOptions( ELanguages language )
inline const Options & getLanguageOptions(ELanguages language)
{
assert(language < ELanguages::COUNT);
return getLanguageList()[static_cast<size_t>(language)];
}
inline const Options & getLanguageOptions( std::string language )
inline const Options & getLanguageOptions(const std::string & language)
{
for (auto const & entry : getLanguageList())
if (entry.identifier == language)
for(const auto & entry : getLanguageList())
if(entry.identifier == language)
return entry;
static const Options emptyValue;

View File

@ -18,6 +18,7 @@
#include "CHeroHandler.h"
#include "mapObjects/CObjectHandler.h"
#include "CTownHandler.h"
#include "CConfigHandler.h"
#include "RoadHandler.h"
#include "RiverHandler.h"
#include "TerrainHandler.h"
@ -48,7 +49,9 @@ DLL_LINKAGE void preinitDLL(CConsoleHandler * Console, bool onlyEssential, bool
VLC = new LibClasses();
try
{
VLC->loadFilesystem(onlyEssential, extractArchives);
VLC->loadFilesystem(extractArchives);
settings.init();
VLC->loadModFilesystem(onlyEssential);
}
catch(...)
{
@ -160,9 +163,8 @@ void LibClasses::updateEntity(Metatype metatype, int32_t index, const JsonNode &
}
}
void LibClasses::loadFilesystem(bool onlyEssential, bool extractArchives)
void LibClasses::loadFilesystem(bool extractArchives)
{
CStopWatch totalTime;
CStopWatch loadTime;
CResourceHandler::initialize();
@ -170,15 +172,17 @@ void LibClasses::loadFilesystem(bool onlyEssential, bool extractArchives)
CResourceHandler::load("config/filesystem.json", extractArchives);
logGlobal->info("\tData loading: %d ms", loadTime.getDiff());
}
void LibClasses::loadModFilesystem(bool onlyEssential)
{
CStopWatch loadTime;
modh = new CModHandler();
modh->loadMods(onlyEssential);
logGlobal->info("\tMod handler: %d ms", loadTime.getDiff());
modh->loadMods(onlyEssential);
modh->loadModFilesystems();
logGlobal->info("\tMod filesystems: %d ms", loadTime.getDiff());
logGlobal->info("Basic initialization: %d ms", totalTime.getDiff());
}
static void logHandlerLoaded(const std::string & name, CStopWatch & timer)

View File

@ -107,7 +107,8 @@ public:
void clear(); //deletes all handlers and its data
// basic initialization. should be called before init(). Can also extract original H3 archives
void loadFilesystem(bool onlyEssential, bool extractArchives = false);
void loadFilesystem(bool extractArchives);
void loadModFilesystem(bool onlyEssential);
#if SCRIPTING_ENABLED
void scriptsLoaded();

View File

@ -58,12 +58,10 @@ std::unordered_set<ResourceID> CMappedFileLoader::getFilteredFiles(std::function
CFilesystemList::CFilesystemList()
{
//loaders = new std::vector<std::unique_ptr<ISimpleResourceLoader> >;
}
CFilesystemList::~CFilesystemList()
{
//delete loaders;
}
std::unique_ptr<CInputStream> CFilesystemList::load(const ResourceID & resourceName) const

View File

@ -192,6 +192,12 @@ void CResourceHandler::initialize()
addFilesystem("root", "local", localFS);
}
void CResourceHandler::destroy()
{
knownLoaders.clear();
globalResourceHandler.rootLoader.reset();
}
ISimpleResourceLoader * CResourceHandler::get()
{
return get("root");

View File

@ -81,6 +81,12 @@ public:
*/
static void initialize();
/**
* Destroys all existing data in filesystem, bringing it into uninitialized state
*
*/
static void destroy();
/**
* Will load all filesystem data from Json data at this path (normally - config/filesystem.json)
* @param fsConfigURI - URI from which data will be loaded

View File

@ -170,7 +170,6 @@ MainWindow::MainWindow(QWidget* parent) :
//init
preinitDLL(::console, false, extractionOptions.extractArchives);
settings.init();
// Initialize logging based on settings
logConfig->configure();

View File

@ -62,17 +62,17 @@
<message>
<location filename="../mainwindow.ui" line="117"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
<translation>Панель інструментів</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="163"/>
<source>Minimap</source>
<translation type="unfinished"></translation>
<translation>Мінімапа</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="239"/>
<source>Map Objects View</source>
<translation type="unfinished"></translation>
<translation>Перегляд об&apos;єктів мапи</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="283"/>
@ -97,7 +97,7 @@
<message>
<location filename="../mainwindow.ui" line="432"/>
<source>Terrains View</source>
<translation type="unfinished"></translation>
<translation>Перегляд поверхні</translation>
</message>
<message>
<location filename="../mainwindow.ui" line="484"/>
@ -339,53 +339,53 @@
<message>
<location filename="../mapsettings.ui" line="66"/>
<source>Difficulty</source>
<translation type="unfinished"></translation>
<translation>Складність</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="111"/>
<source>Events</source>
<translation type="unfinished"></translation>
<translation>Події</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="121"/>
<source>Victory</source>
<translation type="unfinished"></translation>
<translation>Перемога</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="135"/>
<source>Victory message</source>
<translation type="unfinished"></translation>
<translation>Повідомлення про перемогу</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="150"/>
<source>Only for human players</source>
<translation type="unfinished"></translation>
<translation>Тільки для гравців-людей</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="157"/>
<source>Allow standard victory</source>
<translation type="unfinished"></translation>
<translation>Дозволити типову перемогу</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="170"/>
<location filename="../mapsettings.ui" line="218"/>
<source>Parameters</source>
<translation type="unfinished"></translation>
<translation>Параметри</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="186"/>
<source>Loss</source>
<translation type="unfinished"></translation>
<translation>Програш</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="195"/>
<source>7 days without town</source>
<translation type="unfinished"></translation>
<translation>7 днів без міста</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="202"/>
<source>Defeat message</source>
<translation type="unfinished"></translation>
<translation>Повідомлення про програш</translation>
</message>
<message>
<location filename="../mapsettings.ui" line="235"/>
@ -415,67 +415,67 @@
<message>
<location filename="../mapsettings.cpp" line="163"/>
<source>No special victory</source>
<translation type="unfinished"></translation>
<translation>Немає особливої перемоги</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="164"/>
<source>Capture artifact</source>
<translation type="unfinished"></translation>
<translation>Отримати артефакт</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="165"/>
<source>Hire creatures</source>
<translation type="unfinished"></translation>
<translation>Найняти істот</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="166"/>
<source>Accumulate resources</source>
<translation type="unfinished"></translation>
<translation>Накопичити ресурси</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="167"/>
<source>Construct building</source>
<translation type="unfinished"></translation>
<translation>Побудувати будівлю</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="168"/>
<source>Capture town</source>
<translation type="unfinished"></translation>
<translation>Захопити місто</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="169"/>
<source>Defeat hero</source>
<translation type="unfinished"></translation>
<translation>Перемогти героя</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="170"/>
<source>Transport artifact</source>
<translation type="unfinished"></translation>
<translation>Доставити артефакт</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="173"/>
<source>No special loss</source>
<translation type="unfinished"></translation>
<translation>Немає особливої поразки</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="174"/>
<source>Lose castle</source>
<translation type="unfinished"></translation>
<translation>Втратити місто</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="175"/>
<source>Lose hero</source>
<translation type="unfinished"></translation>
<translation>Втратити героя</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="176"/>
<source>Time expired</source>
<translation type="unfinished"></translation>
<translation>Закінчився час</translation>
</message>
<message>
<location filename="../mapsettings.cpp" line="177"/>
<source>Days without town</source>
<translation type="unfinished"></translation>
<translation>Дні без міста</translation>
</message>
</context>
<context>
@ -751,7 +751,7 @@
<message>
<location filename="../mainwindow.cpp" line="98"/>
<source>Filepath of the map to open.</source>
<translation>Файл мапи, який слід відкрити</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="101"/>

View File

@ -1117,7 +1117,6 @@ int main(int argc, const char * argv[])
boost::program_options::variables_map opts;
handleCommandOptions(argc, argv, opts);
preinitDLL(console);
settings.init();
logConfig.configure();
loadDLLClasses();