From be3b47d0d504a3409ce66bd77bb8c0acff87c4f5 Mon Sep 17 00:00:00 2001 From: kh1 Date: Thu, 15 Mar 2012 14:53:47 +0100 Subject: Reorganize the tree, have better ifw.pri. Shadow build support. Change-Id: I01fb12537f863ed0744979973c7e4153889cc5cb Reviewed-by: Tim Jenssen --- src/sdk/installerbase.cpp | 396 ++++ src/sdk/installerbase.exe.manifest | 14 + src/sdk/installerbase.ico | Bin 0 -> 25214 bytes src/sdk/installerbase.qrc | 7 + src/sdk/installerbase.rc | 7 + src/sdk/installerbase_p.cpp | 428 +++++ src/sdk/installerbase_p.h | 101 + src/sdk/installerbasecommons.cpp | 549 ++++++ src/sdk/installerbasecommons.h | 147 ++ src/sdk/sdk.pro | 51 + src/sdk/settingsdialog.cpp | 535 ++++++ src/sdk/settingsdialog.h | 172 ++ src/sdk/settingsdialog.ui | 767 ++++++++ src/sdk/tabcontroller.cpp | 203 ++ src/sdk/tabcontroller.h | 76 + src/sdk/translations/de_de.ts | 3681 ++++++++++++++++++++++++++++++++++++ src/sdk/translations/en_us.ts | 3331 ++++++++++++++++++++++++++++++++ src/sdk/translations/sv_se.ts | 3384 +++++++++++++++++++++++++++++++++ 18 files changed, 13849 insertions(+) create mode 100644 src/sdk/installerbase.cpp create mode 100644 src/sdk/installerbase.exe.manifest create mode 100644 src/sdk/installerbase.ico create mode 100644 src/sdk/installerbase.qrc create mode 100644 src/sdk/installerbase.rc create mode 100644 src/sdk/installerbase_p.cpp create mode 100644 src/sdk/installerbase_p.h create mode 100644 src/sdk/installerbasecommons.cpp create mode 100644 src/sdk/installerbasecommons.h create mode 100644 src/sdk/sdk.pro create mode 100644 src/sdk/settingsdialog.cpp create mode 100644 src/sdk/settingsdialog.h create mode 100644 src/sdk/settingsdialog.ui create mode 100644 src/sdk/tabcontroller.cpp create mode 100644 src/sdk/tabcontroller.h create mode 100644 src/sdk/translations/de_de.ts create mode 100644 src/sdk/translations/en_us.ts create mode 100644 src/sdk/translations/sv_se.ts (limited to 'src/sdk') diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp new file mode 100644 index 000000000..bee26e329 --- /dev/null +++ b/src/sdk/installerbase.cpp @@ -0,0 +1,396 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2010-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ +#include "installerbase_p.h" + +#include "installerbasecommons.h" +#include "tabcontroller.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include + +#define QUOTE_(x) #x +#define QUOTE(x) QUOTE_(x) +#define VERSION "IFW Version: \"" IFW_VERSION_STRING "\", Installer base SHA1: \"" QUOTE(_GIT_SHA1_) \ + "\", Build date: " QUOTE(__DATE__) "." + +using namespace QInstaller; +using namespace QInstallerCreator; + +static QSet repositories(const QStringList &arguments, const int index) +{ + QSet set; + if (index < arguments.size()) { + QStringList items = arguments.at(index).split(QLatin1Char(',')); + foreach (const QString &item, items) { + set.insert(Repository(item, false)); + qDebug() << "Adding custom repository:" << item; + } + } else { + std::cerr << "No repository specified" << std::endl; + } + return set; +} + +static bool allowMaintenanceTool() +{ + try { + Settings m_settings = Settings(Settings::fromFileAndPrefix(QLatin1String(":/metadata/installer-config/config.xml"), + QLatin1String(":/metadata/installer-config/"))); + + if (m_settings.value(QLatin1String("AllowExecuteMaintenanceTool"), QLatin1String("true")).toString().toLower() + == QLatin1String("true")) + { + return true; + } + } catch (const Error &e) { + qWarning("Could not parse Config: %s", qPrintable(e.message())); + return true; + } + return false; +} + +// -- main + +int main(int argc, char *argv[]) +{ + QStringList args = QInstaller::parseCommandLineArgs(argc, argv); + +// hack to use cleanlooks if it is under Ubuntu 11.10 +#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) + std::string standardString; + std::string cleanLooks ="-style=cleanlooks"; + std::ifstream input("/etc/lsb-release"); + bool isUbuntu = false; + bool is11_10 = false; + while (std::getline(input, standardString)) { + if (standardString == "DISTRIB_ID=Ubuntu") + isUbuntu = true; + else if (standardString == "DISTRIB_RELEASE=11.10") + is11_10 = true; + } + + if (isUbuntu && is11_10) { + argc++; + char **newArgv = new char* [argc]; + newArgv[0] = argv[0]; + newArgv[1] = const_cast(cleanLooks.data()); + for (int i = 1; i < argc-1; ++i) { + newArgv[i+1] = argv[i]; + } + argv = newArgv; + } +#endif + + qsrand(QDateTime::currentDateTime().toTime_t()); + const KDSelfRestarter restarter(argc, argv); + KDRunOnceChecker runCheck(QLatin1String("lockmyApp1234865.lock")); + + try { + if (args.contains(QLatin1String("--version"))) { + InstallerBase::showVersion(QLatin1String(VERSION)); + return 0; + } + + // this is the FSEngineServer as an admin rights process upon request: + if (args.count() >= 3 && args[1] == QLatin1String("--startserver")) { + MyCoreApplication app(argc, argv); + FSEngineServer* const server = new FSEngineServer(args[2].toInt()); + if (args.count() >= 4) + server->setAuthorizationKey(args[3]); + QObject::connect(server, SIGNAL(destroyed()), &app, SLOT(quit())); + return app.exec(); + } + + // Make sure we honor the system's proxy settings +#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) + QUrl proxyUrl(QString::fromLatin1(qgetenv("http_proxy"))); + if (proxyUrl.isValid()) { + QNetworkProxy proxy(QNetworkProxy::HttpProxy, proxyUrl.host(), proxyUrl.port(), + proxyUrl.userName(), proxyUrl.password()); + QNetworkProxy::setApplicationProxy(proxy); + } +#else + if (args.contains(QLatin1String("--proxy"))) + QNetworkProxyFactory::setUseSystemConfiguration(true); +#endif + + if (args.contains(QLatin1String("--checkupdates"))) { + MyCoreApplication app(argc, argv); + if (runCheck.isRunning(KDRunOnceChecker::ProcessList)) + return 0; + + Updater u; + u.setVerbose(args.contains(QLatin1String("--verbose")) || args.contains(QLatin1String("-v"))); + return u.checkForUpdates() ? 0 : 1; + } + + if (args.contains(QLatin1String("--runoperation")) + || args.contains(QLatin1String("--undooperation"))) { + MyCoreApplication app(argc, argv); + OperationRunner o; + o.setVerbose(args.contains(QLatin1String("--verbose")) + || args.contains(QLatin1String("-v"))); + return o.runOperation(args); + } + + if (args.contains(QLatin1String("--update-installerbase"))) { + MyCoreApplication app(argc, argv); + if (runCheck.isRunning(KDRunOnceChecker::ProcessList)) + return 0; + + return InstallerBase().replaceMaintenanceToolBinary(args); + } + + // from here, the "normal" installer binary is running + MyApplication app(argc, argv); + args = app.arguments(); + + if (runCheck.isRunning(KDRunOnceChecker::ProcessList)) { + if (runCheck.isRunning(KDRunOnceChecker::Lockfile)) + return 0; + + while (runCheck.isRunning(KDRunOnceChecker::ProcessList)) + Sleep::sleep(1); + } + + if (args.contains(QLatin1String("--verbose")) || args.contains(QLatin1String("-v"))) { + app.setVerbose(); + QInstaller::setVerbose(true); + } + + // install the default translator + const QString localeFile = + QString::fromLatin1(":/translations/qt_%1").arg(QLocale::system().name()); + { + QTranslator* const translator = new QTranslator(&app); + translator->load(localeFile); + app.installTranslator(translator); + } + + // install English translation as fallback so that correct license button text is used + const QString enLocaleFile = QString::fromLatin1(":/translations/en_us.qm"); + if (QFile::exists(enLocaleFile)) { + QTranslator* const translator = new QTranslator(&app); + translator->load(enLocaleFile); + app.installTranslator(translator); + } + + // install "our" default translator + const QString ourLocaleFile = + QString::fromLatin1(":/translations/%1.qm").arg(QLocale().name().toLower()); + if (QFile::exists(ourLocaleFile)) { + QTranslator* const translator = new QTranslator(&app); + translator->load(ourLocaleFile); + app.installTranslator(translator); + } + + if (QInstaller::isVerbose()) { + qDebug() << VERSION; + qDebug() << "Arguments:" << args; + qDebug() << "Language: " << QLocale().name().toLower(); + qDebug() << "Resource tree before loading the in-binary resource:"; + + QDir dir(QLatin1String(":/")); + foreach (const QString &i, dir.entryList()) { + const QByteArray ba = i.toUtf8(); + qDebug().nospace() << " :/" << ba.constData(); + } + } + + // register custom operations before reading the binary content cause they may used in + // the uninstaller for the recorded list of during the installation performed operations + QInstaller::init(); + + // load and map the embedded binary resource, registers operations + BinaryContent content = BinaryContent::readAndRegisterFromApplicationFile(); + + // instantiate the installer we are actually going to use + QInstaller::PackageManagerCore core(content.magicMarker(), content.performedOperations()); + Settings m_settings = + Settings(Settings::fromFileAndPrefix(QLatin1String(":/metadata/installer-config/config.xml"), + QLatin1String(":/metadata/installer-config/"))); + + // check execution rights for the maintenance tool + if (!core.isInstaller() && !allowMaintenanceTool() && !args.contains(QLatin1String("--script"))) { + QString reason = m_settings.value(QLatin1String("DisallowExecuteReason"), + QString::fromLatin1("You are not allowed to run %1.").arg(qAppName())).toString(); + QMessageBox::information(0, QLatin1String("Update notification"), reason); + return 0; + } + + if (QInstaller::isVerbose()) { + qDebug() << "Resource tree after loading the in-binary resource:"; + + QDir dir = QDir(QLatin1String(":/")); + foreach (const QString &i, dir.entryList()) + qDebug() << QString::fromLatin1(" :/%1").arg(i); + + dir = QDir(QLatin1String(":/metadata/")); + foreach (const QString &i, dir.entryList()) + qDebug() << QString::fromLatin1(" :/metadata/%1").arg(i); + } + + QString controlScript; + QHash params; + for (int i = 1; i < args.size(); ++i) { + const QString &argument = args.at(i); + if (argument.isEmpty()) + continue; + + if (argument.contains(QLatin1Char('='))) { + const QString name = argument.section(QLatin1Char('='), 0, 0); + const QString value = argument.section(QLatin1Char('='), 1, 1); + params.insert(name, value); + core.setValue(name, value); + } else if (argument == QLatin1String("--script") || argument == QLatin1String("Script")) { + ++i; + if (i < args.size()) { + controlScript = args.at(i); + if (!QFileInfo(controlScript).exists()) + return PackageManagerCore::Failure; + } else { + return PackageManagerCore::Failure; + } + } else if (argument == QLatin1String("--verbose") || argument == QLatin1String("-v")) { + core.setVerbose(true); + } else if (argument == QLatin1String("--proxy")) { + core.settings().setProxyType(QInstaller::Settings::SystemProxy); + KDUpdater::FileDownloaderFactory::instance().setProxyFactory(core.proxyFactory()); + } else if (argument == QLatin1String("--show-virtual-components") + || argument == QLatin1String("ShowVirtualComponents")) { + QFont f; + f.setItalic(true); + PackageManagerCore::setVirtualComponentsFont(f); + PackageManagerCore::setVirtualComponentsVisible(true); + } else if ((argument == QLatin1String("--updater") + || argument == QLatin1String("Updater")) && core.isUninstaller()) { + core.setUpdater(); + } else if ((argument == QLatin1String("--manage-packages") + || argument == QLatin1String("ManagePackages")) && core.isUninstaller()) { + core.setPackageManager(); + } else if (argument == QLatin1String("--help") || argument == QLatin1String("-h")) { + InstallerBase::showUsage(); + return PackageManagerCore::Success; + } else if (argument == QLatin1String("--addTempRepository") + || argument == QLatin1String("--setTempRepository")) { + ++i; + QSet repoList = repositories(args, i); + if (repoList.isEmpty()) + return PackageManagerCore::Failure; + + // We cannot use setRemoteRepositories as that is a synchronous call which " + // tries to get the data from server and this isn't what we want at this point + const bool replace = (argument == QLatin1String("--setTempRepository")); + core.setTemporaryRepositories(repoList, replace); + } else if (argument == QLatin1String("--addRepository")) { + ++i; + QSet repoList = repositories(args, i); + if (repoList.isEmpty()) + return PackageManagerCore::Failure; + core.addUserRepositories(repoList); + } else if (argument == QLatin1String("--no-force-installations")) { + PackageManagerCore::setNoForceInstallation(true); + } else { + std::cerr << "Unknown option: " << argument << std::endl; + } + } + + // Create the wizard gui + TabController controller(0); + controller.setManager(&core); + controller.setManagerParams(params); + controller.setControlScript(controlScript); + + if (core.isInstaller()) { + controller.setGui(new InstallerGui(&core)); + } else { + controller.setGui(new MaintenanceGui(&core)); + } + + PackageManagerCore::Status status = PackageManagerCore::Status(controller.init()); + if (status != PackageManagerCore::Success) + return status; + + const int result = app.exec(); + if (result != 0) + return result; + + if (core.finishedWithSuccess()) + return PackageManagerCore::Success; + + status = core.status(); + switch (status) { + case PackageManagerCore::Success: + return status; + + case PackageManagerCore::Canceled: + return status; + + default: + break; + } + return PackageManagerCore::Failure; + } catch(const Error &e) { + std::cerr << qPrintable(e.message()) << std::endl; + } catch (const std::exception &e) { + std::cerr << e.what() << std::endl; + } catch(...) { + std::cerr << "Unknown error, aborting." << std::endl; + } + + return PackageManagerCore::Failure; +} diff --git a/src/sdk/installerbase.exe.manifest b/src/sdk/installerbase.exe.manifest new file mode 100644 index 000000000..f90824fd0 --- /dev/null +++ b/src/sdk/installerbase.exe.manifest @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/src/sdk/installerbase.ico b/src/sdk/installerbase.ico new file mode 100644 index 000000000..79bd163de Binary files /dev/null and b/src/sdk/installerbase.ico differ diff --git a/src/sdk/installerbase.qrc b/src/sdk/installerbase.qrc new file mode 100644 index 000000000..61889717d --- /dev/null +++ b/src/sdk/installerbase.qrc @@ -0,0 +1,7 @@ + + + translations/de_de.qm + translations/qt_de.qm + translations/en_us.qm + + diff --git a/src/sdk/installerbase.rc b/src/sdk/installerbase.rc new file mode 100644 index 000000000..c423d3360 --- /dev/null +++ b/src/sdk/installerbase.rc @@ -0,0 +1,7 @@ +IDI_ICON1 ICON DISCARDABLE +"installerbase.ico" + +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "installerbase.exe.manifest" diff --git a/src/sdk/installerbase_p.cpp b/src/sdk/installerbase_p.cpp new file mode 100644 index 000000000..611e491bf --- /dev/null +++ b/src/sdk/installerbase_p.cpp @@ -0,0 +1,428 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ +#include "installerbase_p.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include + +#ifdef Q_OS_WIN +# include + +# ifndef ENABLE_INSERT_MODE +# define ENABLE_INSERT_MODE 0x0020 +# endif + +# ifndef ENABLE_QUICK_EDIT_MODE +# define ENABLE_QUICK_EDIT_MODE 0x0040 +# endif + +# ifndef ENABLE_EXTENDED_FLAGS +# define ENABLE_EXTENDED_FLAGS 0x0080 +# endif +#endif + +using namespace KDUpdater; +using namespace QInstaller; +using namespace QInstallerCreator; + + +// -- MyCoreApplication + +MyCoreApplication::MyCoreApplication(int &argc, char **argv) + : QCoreApplication(argc, argv) +{ +} + +// re-implemented from QCoreApplication so we can throw exceptions in scripts and slots +bool MyCoreApplication::notify(QObject *receiver, QEvent *event) +{ + try { + return QCoreApplication::notify(receiver, event); + } catch(std::exception &e) { + qFatal("Exception thrown: %s", e.what()); + } + return false; +} + + +// -- MyApplicationConsole + +class MyApplicationConsole +{ +public: + MyApplicationConsole() + { +#ifdef Q_OS_WIN + AllocConsole(); + + HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); + if (handle != INVALID_HANDLE_VALUE) { + COORD largestConsoleWindowSize = GetLargestConsoleWindowSize(handle); + largestConsoleWindowSize.X -= 3; + largestConsoleWindowSize.Y = 5000; + SetConsoleScreenBufferSize(handle, largestConsoleWindowSize); + } + + handle = GetStdHandle(STD_INPUT_HANDLE); + if (handle != INVALID_HANDLE_VALUE) + SetConsoleMode(handle, ENABLE_INSERT_MODE | ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS); + + m_oldCin = std::cin.rdbuf(); + m_newCin.open("CONIN$"); + std::cin.rdbuf(m_newCin.rdbuf()); + + m_oldCout = std::cout.rdbuf(); + m_newCout.open("CONOUT$"); + std::cout.rdbuf(m_newCout.rdbuf()); + + m_oldCerr = std::cerr.rdbuf(); + m_newCerr.open("CONOUT$"); + std::cerr.rdbuf(m_newCerr.rdbuf()); +#endif + } + ~MyApplicationConsole() + { +#ifdef Q_OS_WIN + system("PAUSE"); + + std::cin.rdbuf(m_oldCin); + std::cerr.rdbuf(m_oldCerr); + std::cout.rdbuf(m_oldCout); + + FreeConsole(); +#endif + } + +private: + std::ifstream m_newCin; + std::ofstream m_newCout; + std::ofstream m_newCerr; + + std::streambuf* m_oldCin; + std::streambuf* m_oldCout; + std::streambuf* m_oldCerr; +}; + + +// -- MyApplication + +MyApplication::MyApplication(int &argc, char **argv) + : QApplication(argc, argv) + , m_console(0) +{ +} + +MyApplication::~MyApplication() +{ + delete m_console; +} + +void MyApplication::setVerbose() +{ + if (!m_console) + m_console = new MyApplicationConsole; +} + +// re-implemented from QApplication so we can throw exceptions in scripts and slots +bool MyApplication::notify(QObject *receiver, QEvent *event) +{ + try { + return QApplication::notify(receiver, event); + } catch(std::exception &e) { + qFatal("Exception thrown: %s", e.what()); + } + return false; +} + + +// -- InstallerBase + +InstallerBase::InstallerBase(QObject *parent) + : QObject(parent) + , m_downloadFinished(false) +{ +} + +InstallerBase::~InstallerBase() +{ +} + +static bool supportedScheme(const QString &scheme) +{ + if (scheme == QLatin1String("http") || scheme == QLatin1String("ftp") || scheme == QLatin1String("file")) + return true; + return false; +} + +int InstallerBase::replaceMaintenanceToolBinary(QStringList arguments) +{ + QInstaller::setVerbose(arguments.contains(QLatin1String("--verbose")) + || arguments.contains(QLatin1String("-v"))); + + arguments.removeAll(QLatin1String("--verbose")); + arguments.removeAll(QLatin1String("-v")); + arguments.removeAll(QLatin1String("--update-installerbase")); + + QUrl url = arguments.value(1); + if (!supportedScheme(url.scheme()) && QFileInfo(url.toString()).exists()) + url = QLatin1String("file:///") + url.toString(); + m_downloader.reset(FileDownloaderFactory::instance().create(url.scheme(), 0)); + if (m_downloader.isNull()) { + qDebug() << QString::fromLatin1("Scheme not supported: %1 (%2)").arg(url.scheme(), url.toString()); + return EXIT_FAILURE; + } + m_downloader->setUrl(url); + m_downloader->setAutoRemoveDownloadedFile(true); + + QString target = QDir::tempPath() + QLatin1String("/") + QFileInfo(arguments.at(1)).fileName(); + if (supportedScheme(url.scheme())) + m_downloader->setDownloadedFileName(target); + + connect(m_downloader.data(), SIGNAL(downloadStarted()), this, SLOT(downloadStarted())); + connect(m_downloader.data(), SIGNAL(downloadCanceled()), this, SLOT(downloadFinished())); + connect(m_downloader.data(), SIGNAL(downloadCompleted()), this, SLOT(downloadFinished())); + connect(m_downloader.data(), SIGNAL(downloadAborted(QString)), this, SLOT(downloadAborted(QString))); + + m_downloader->download(); + + while (true) { + QCoreApplication::processEvents(); + if (m_downloadFinished) + break; + } + + if (!m_downloader->isDownloaded()) { + qDebug() << QString::fromLatin1("Could not download file %1: . Error: %2.").arg( + m_downloader->url().toString(), m_downloader->errorString()); + return EXIT_FAILURE; + } + + if (Lib7z::isSupportedArchive(target)) { + QFile archive(target); + if (archive.open(QIODevice::ReadOnly)) { + try { + Lib7z::extractArchive(&archive, QDir::tempPath()); + if (!archive.remove()) { + qDebug() << QString::fromLatin1("Could not delete file %1: %2.").arg( + target, archive.errorString()); + } + } catch (const Lib7z::SevenZipException& e) { + qDebug() << QString::fromLatin1("Error while extracting %1: %2.").arg(target, e.message()); + return EXIT_FAILURE; + } catch (...) { + qDebug() << QString::fromLatin1("Unknown exception caught while extracting %1.").arg(target); + return EXIT_FAILURE; + } + } else { + qDebug() << QString::fromLatin1("Could not open %1 for reading: %2.").arg( + target, archive.errorString()); + return EXIT_FAILURE; + } +#ifndef Q_OS_WIN + target = QDir::tempPath() + QLatin1String("/.tempSDKMaintenanceTool"); +#else + target = QDir::tempPath() + QLatin1String("/temp/SDKMaintenanceToolBase.exe"); +#endif + } + + try { + QFile installerBase(target); + QInstaller::openForRead(&installerBase, installerBase.fileName()); + writeMaintenanceBinary(arguments.value(0), &installerBase, installerBase.size()); + deferredRename(arguments.value(0) + QLatin1String(".new"), arguments.value(0)); + } catch (const QInstaller::Error &error) { + qDebug() << error.message(); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +/* static*/ +void InstallerBase::showUsage() +{ + MyApplicationConsole c; + std::cout << "Usage: SDKMaintenanceTool [OPTIONS]" << std::endl << std::endl; + + std::cout << "User:"<url().toString(), m_downloader->downloadedFileName()); +} + +void InstallerBase::downloadFinished() +{ + m_downloadFinished = true; + qDebug() << QString::fromLatin1("Download finished! Source: %1, Target: %2").arg( + m_downloader->url().toString(), m_downloader->downloadedFileName()); +} + +void InstallerBase::downloadProgress(double progress) +{ + qDebug() << "Progress: " << progress; +} + +void InstallerBase::downloadAborted(const QString &error) +{ + m_downloadFinished = true; + qDebug() << QString::fromLatin1("Download aborted! Source: %1, Target: %2, Error: %3").arg( + m_downloader->url().toString(), m_downloader->downloadedFileName(), error); +} + + +// -- private + +void InstallerBase::deferredRename(const QString &oldName, const QString &newName) +{ +#ifdef Q_OS_WIN + QTemporaryFile vbScript(QDir::temp().absoluteFilePath(QLatin1String("deferredrenameXXXXXX.vbs"))); + { + openForWrite(&vbScript, vbScript.fileName()); + vbScript.setAutoRemove(false); + + QTextStream batch(&vbScript); + batch << "Set fso = WScript.CreateObject(\"Scripting.FileSystemObject\")\n"; + batch << "Set tmp = WScript.CreateObject(\"WScript.Shell\")\n"; + batch << QString::fromLatin1("file = \"%1\"\n").arg(QDir::toNativeSeparators(newName)); + batch << QString::fromLatin1("backup = \"%1.bak\"\n").arg(QDir::toNativeSeparators(newName)); + batch << "on error resume next\n"; + + batch << "while fso.FileExists(file)\n"; + batch << " fso.MoveFile file, backup\n"; + batch << " WScript.Sleep(1000)\n"; + batch << "wend\n"; + batch << QString::fromLatin1("fso.MoveFile \"%1\", file\n").arg(QDir::toNativeSeparators(oldName)); + batch << "fso.DeleteFile(WScript.ScriptFullName)\n"; + } + + QProcessWrapper::startDetached(QLatin1String("cscript"), QStringList() << QLatin1String("//Nologo") + << QDir::toNativeSeparators(vbScript.fileName())); +#else + QFile::rename(newName, newName + QLatin1String(".bak")); + QFile::rename(oldName, newName); +#endif +} + +void InstallerBase::writeMaintenanceBinary(const QString &target, QFile *const source, qint64 size) +{ + KDSaveFile out(target + QLatin1String(".new")); + QInstaller::openForWrite(&out, out.fileName()); // throws an exception in case of error + + if (!source->seek(0)) { + throw QInstaller::Error(QObject::tr("Failed to seek in file %1. Reason: %2.").arg(source->fileName(), + source->errorString())); + } + + QInstaller::appendData(&out, source, size); + QInstaller::appendInt64(&out, 0); // resource count + QInstaller::appendInt64(&out, 4 * sizeof(qint64)); // data block size + QInstaller::appendInt64(&out, QInstaller::MagicUninstallerMarker); + QInstaller::appendInt64(&out, QInstaller::MagicCookie); + + out.setPermissions(out.permissions() | QFile::WriteUser | QFile::ReadGroup | QFile::ReadOther + | QFile::ExeOther | QFile::ExeGroup | QFile::ExeUser); + + if (!out.commit(KDSaveFile::OverwriteExistingFile)) { + throw QInstaller::Error(QString::fromLatin1("Could not write new maintenance-tool to %1. Reason: %2.") + .arg(out.fileName(), out.errorString())); + } +} diff --git a/src/sdk/installerbase_p.h b/src/sdk/installerbase_p.h new file mode 100644 index 000000000..5071d6c05 --- /dev/null +++ b/src/sdk/installerbase_p.h @@ -0,0 +1,101 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#include +#include + +namespace KDUpdater { + class FileDownloader; +} + +QT_BEGIN_NAMESPACE +class QFile; +QT_END_NAMESPACE + +class MyApplicationConsole; + +class Sleep : public QThread +{ +public: + static void sleep(unsigned long ms) + { + QThread::usleep(ms); + } +}; + +class InstallerBase : public QObject +{ + Q_OBJECT + +public: + InstallerBase(QObject *parent = 0); + ~InstallerBase(); + + int replaceMaintenanceToolBinary(QStringList arguments); + + static void showUsage(); + static void showVersion(const QString &version); + +private slots: + void downloadStarted(); + void downloadFinished(); + void downloadProgress(double progress); + void downloadAborted(const QString &error); + +private: + void deferredRename(const QString &source, const QString &target); + void writeMaintenanceBinary(const QString &target, QFile *source, qint64 size); + +private: + volatile bool m_downloadFinished; + QScopedPointer m_downloader; +}; + +class MyCoreApplication : public QCoreApplication +{ +public: + MyCoreApplication(int &argc, char **argv); + virtual bool notify(QObject *receiver, QEvent *event); +}; + +class MyApplication : public QApplication +{ +public: + MyApplication(int &argc, char **argv); + ~MyApplication(); + + void setVerbose(); + virtual bool notify(QObject *receiver, QEvent *event); + +private: + MyApplicationConsole *m_console; +}; diff --git a/src/sdk/installerbasecommons.cpp b/src/sdk/installerbasecommons.cpp new file mode 100644 index 000000000..5c22d9926 --- /dev/null +++ b/src/sdk/installerbasecommons.cpp @@ -0,0 +1,549 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2010-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ +#include "installerbasecommons.h" + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +using namespace QInstaller; + + +// -- IntroductionPageImpl + +IntroductionPageImpl::IntroductionPageImpl(QInstaller::PackageManagerCore *core) + : QInstaller::IntroductionPage(core) + , m_updatesFetched(false) + , m_allPackagesFetched(false) +{ + QWidget *widget = new QWidget(this); + QVBoxLayout *layout = new QVBoxLayout(widget); + + m_packageManager = new QRadioButton(tr("Package manager"), this); + layout->addWidget(m_packageManager); + m_packageManager->setChecked(core->isPackageManager()); + connect(m_packageManager, SIGNAL(toggled(bool)), this, SLOT(setPackageManager(bool))); + + m_updateComponents = new QRadioButton(tr("Update components"), this); + layout->addWidget(m_updateComponents); + m_updateComponents->setChecked(core->isUpdater()); + connect(m_updateComponents, SIGNAL(toggled(bool)), this, SLOT(setUpdater(bool))); + + m_removeAllComponents = new QRadioButton(tr("Remove all components"), this); + layout->addWidget(m_removeAllComponents); + m_removeAllComponents->setChecked(core->isUninstaller()); + connect(m_removeAllComponents, SIGNAL(toggled(bool)), this, SLOT(setUninstaller(bool))); + connect(m_removeAllComponents, SIGNAL(toggled(bool)), core, SLOT(setCompleteUninstallation(bool))); + + layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding)); + + m_label = new QLabel(this); + m_label->setWordWrap(true); + m_label->setText(tr("Retrieving information from remote installation sources...")); + layout->addWidget(m_label); + + m_progressBar = new QProgressBar(this); + m_progressBar->setRange(0, 0); + layout->addWidget(m_progressBar); + + layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding)); + + m_errorLabel = new QLabel(this); + m_errorLabel->setWordWrap(true); + layout->addWidget(m_errorLabel); + + widget->setLayout(layout); + setWidget(widget); + + core->setCompleteUninstallation(core->isUninstaller()); + + connect(core, SIGNAL(metaJobInfoMessage(QString)), this, SLOT(setMessage(QString))); + connect(core, SIGNAL(coreNetworkSettingsChanged()), this, SLOT(onCoreNetworkSettingsChanged())); +} + +int IntroductionPageImpl::nextId() const +{ + if (packageManagerCore()->isUninstaller()) + return PackageManagerCore::ReadyForInstallation; + + if (packageManagerCore()->isUpdater() || packageManagerCore()->isPackageManager()) + return PackageManagerCore::ComponentSelection; + + return QInstaller::IntroductionPage::nextId(); +} + +bool IntroductionPageImpl::validatePage() +{ + PackageManagerCore *core = packageManagerCore(); + if (core->isUninstaller()) + return true; + + setComplete(false); + gui()->setSettingsButtonEnabled(false); + + const bool maintanence = core->isUpdater() || core->isPackageManager(); + if (maintanence) { + showAll(); + setMaintenanceToolsEnabled(false); + } else { + showMetaInfoUdate(); + } + + // fetch updater packages + if (core->isUpdater()) { + if (!m_updatesFetched) { + m_updatesFetched = core->fetchRemotePackagesTree(); + if (!m_updatesFetched) + setErrorMessage(core->error()); + } + + callControlScript(QLatin1String("UpdaterSelectedCallback")); + + if (m_updatesFetched) { + if (core->updaterComponents().count() <= 0) + setErrorMessage(QLatin1String("") + tr("No updates available.") + QLatin1String("")); + else + setComplete(true); + } + } + + // fetch common packages + if (core->isInstaller() || core->isPackageManager()) { + bool localPackagesTreeFetched = false; + if (!m_allPackagesFetched) { + // first try to fetch the server side packages tree + m_allPackagesFetched = core->fetchRemotePackagesTree(); + if (!m_allPackagesFetched) { + QString error = core->error(); + if (core->isPackageManager()) { + // if that fails and we're in maintenance mode, try to fetch local installed tree + localPackagesTreeFetched = core->fetchLocalPackagesTree(); + if (localPackagesTreeFetched) { + // if that succeeded, adjust error message + error = QLatin1String("") + error + tr(" Only local package " + "management available.") + QLatin1String(""); + } + } + setErrorMessage(error); + } + } + + callControlScript(QLatin1String("PackageManagerSelectedCallback")); + + if (m_allPackagesFetched | localPackagesTreeFetched) + setComplete(true); + } + + if (maintanence) { + showMaintenanceTools(); + setMaintenanceToolsEnabled(true); + } else { + hideAll(); + } + gui()->setSettingsButtonEnabled(true); + + return isComplete(); +} + +void IntroductionPageImpl::showAll() +{ + showWidgets(true); +} + +void IntroductionPageImpl::hideAll() +{ + showWidgets(false); +} + +void IntroductionPageImpl::showMetaInfoUdate() +{ + showWidgets(false); + m_label->setVisible(true); + m_progressBar->setVisible(true); +} + +void IntroductionPageImpl::showMaintenanceTools() +{ + showWidgets(true); + m_label->setVisible(false); + m_progressBar->setVisible(false); +} + +void IntroductionPageImpl::setMaintenanceToolsEnabled(bool enable) +{ + m_packageManager->setEnabled(enable); + m_updateComponents->setEnabled(enable); + m_removeAllComponents->setEnabled(enable); +} + +// -- public slots + +void IntroductionPageImpl::setMessage(const QString &msg) +{ + m_label->setText(msg); +} + +void IntroductionPageImpl::setErrorMessage(const QString &error) +{ + QPalette palette; + const PackageManagerCore::Status s = packageManagerCore()->status(); + if (s == PackageManagerCore::Failure || s == PackageManagerCore::Failure) { + palette.setColor(QPalette::WindowText, Qt::red); + } else { + palette.setColor(QPalette::WindowText, palette.color(QPalette::WindowText)); + } + + m_errorLabel->setText(error); + m_errorLabel->setPalette(palette); +} + +void IntroductionPageImpl::callControlScript(const QString &callback) +{ + // Initialize the gui. Needs to be done after check repositories as only then the ui can handle + // hide of pages depending on the components. + gui()->init(); + gui()->callControlScriptMethod(callback); +} + +// -- private slots + +void IntroductionPageImpl::setUpdater(bool value) +{ + if (value) { + entering(); + gui()->showSettingsButton(true); + packageManagerCore()->setUpdater(); + emit packageManagerCoreTypeChanged(); + } +} + +void IntroductionPageImpl::setUninstaller(bool value) +{ + if (value) { + entering(); + gui()->showSettingsButton(false); + packageManagerCore()->setUninstaller(); + emit packageManagerCoreTypeChanged(); + } +} + +void IntroductionPageImpl::setPackageManager(bool value) +{ + if (value) { + entering(); + gui()->showSettingsButton(true); + packageManagerCore()->setPackageManager(); + emit packageManagerCoreTypeChanged(); + } +} + +void IntroductionPageImpl::onCoreNetworkSettingsChanged() +{ + // force a repaint of the ui as after the settings dialog has been closed and the wizard has been + // restarted, the "Next" button looks still disabled. TODO: figure out why this happens at all! + gui()->repaint(); + + m_updatesFetched = false; + m_allPackagesFetched = false; +} + +// -- private + +void IntroductionPageImpl::entering() +{ + setComplete(true); + showWidgets(false); + setMessage(QString()); + setErrorMessage(QString()); + setButtonText(QWizard::CancelButton, tr("Quit")); + + PackageManagerCore *core = packageManagerCore(); + if (core->isUninstaller() ||core->isUpdater() || core->isPackageManager()) { + showMaintenanceTools(); + setMaintenanceToolsEnabled(true); + } +} + +void IntroductionPageImpl::leaving() +{ + // TODO: force repaint on next page, keeps unpainted after fetch + QTimer::singleShot(100, gui()->page(nextId()), SLOT(repaint())); + setButtonText(QWizard::CancelButton, gui()->defaultButtonText(QWizard::CancelButton)); +} + +void IntroductionPageImpl::showWidgets(bool show) +{ + m_label->setVisible(show); + m_progressBar->setVisible(show); + m_packageManager->setVisible(show); + m_updateComponents->setVisible(show); + m_removeAllComponents->setVisible(show); +} + + +// -- TargetDirectoryPageImpl + +/*! + A custom target directory selection based due to the no-space restriction... +*/ +TargetDirectoryPageImpl::TargetDirectoryPageImpl(PackageManagerCore *core) + : TargetDirectoryPage(core) +{ + QPalette palette; + palette.setColor(QPalette::WindowText, Qt::red); + + m_warningLabel = new QLabel(this); + m_warningLabel->setPalette(palette); + + insertWidget(m_warningLabel, QLatin1String("MessageLabel"), 2); +} + +QString TargetDirectoryPageImpl::targetDirWarning() const +{ + if (targetDir().isEmpty()) { + return TargetDirectoryPageImpl::tr("The installation path cannot be empty, please specify a valid " + "folder."); + } + + if (QDir(targetDir()).isRelative()) { + return TargetDirectoryPageImpl::tr("The installation path cannot be relative, please specify an " + "absolute path."); + } + + QString dir = targetDir(); +#ifdef Q_OS_WIN + // remove e.g. "c:" + dir = dir.mid(2); +#endif + // check if there are not allowed characters in the target path + if (dir.contains(QRegExp(QLatin1String("[!@#$%^&*: ,;]")))) { + return TargetDirectoryPageImpl::tr("The installation path must not contain !@#$%^&*:,; or spaces, " + "please specify a valid folder."); + } + + return QString(); +} + +bool TargetDirectoryPageImpl::isComplete() const +{ + m_warningLabel->setText(targetDirWarning()); + return m_warningLabel->text().isEmpty(); +} + +bool TargetDirectoryPageImpl::askQuestion(const QString &identifier, const QString &message) +{ + QMessageBox::StandardButton bt = + MessageBoxHandler::warning(MessageBoxHandler::currentBestSuitParent(), identifier, + TargetDirectoryPageImpl::tr("Warning"), message, QMessageBox::Yes | QMessageBox::No); + QTimer::singleShot(100, wizard()->page(nextId()), SLOT(repaint())); + + return bt == QMessageBox::Yes; +} + +bool TargetDirectoryPageImpl::failWithError(const QString &identifier, const QString &message) +{ + MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(), identifier, + TargetDirectoryPageImpl::tr("Error"), message); + QTimer::singleShot(100, wizard()->page(nextId()), SLOT(repaint())); + + return false; +} + +bool TargetDirectoryPageImpl::validatePage() +{ + if (!isVisible()) + return true; + + const QString remove = packageManagerCore()->value(QLatin1String("RemoveTargetDir")); + if (!QVariant(remove).toBool()) + return true; + + const QString targetDir = this->targetDir(); + if (!packageManagerCore()->settings().allowNoneAsciiCharacters()) { + for (int i = 0; i < targetDir.length(); ++i) { + if (targetDir.at(i).unicode() & 0xff80) { + return failWithError(QLatin1String("NonAsciiTarget"), tr("The path or installation directory " + "contains non ASCII characters. This is currently not supported! Please choose a different " + "path or installation directory.")); + } + } + } + + const QDir dir(targetDir); + // the directory exists and is empty... + if (dir.exists() && dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot).isEmpty()) + return true; + + const QFileInfo fi(targetDir); + if (fi.isDir()) { + if (dir == QDir::root() || dir == QDir::home()) { + return failWithError(QLatin1String("ForbiddenTargetDirectory"), tr("As the install directory " + "is completely deleted installing in %1 is forbidden.").arg(QDir::rootPath())); + } + + QString fileName = packageManagerCore()->settings().uninstallerName(); +#if defined(Q_WS_MAC) + if (QFileInfo(QCoreApplication::applicationDirPath() + QLatin1String("/../..")).isBundle()) + fileName += QLatin1String(".app/Contents/MacOS/") + fileName; +#elif defined(Q_OS_WIN) + fileName += QLatin1String(".exe"); +#endif + + QFileInfo fi2(targetDir + QDir::separator() + fileName); + if (fi2.exists()) { + return askQuestion(QLatin1String("OverwriteTargetDirectory"), + TargetDirectoryPageImpl::tr("The folder you selected exists already and contains an " + "installation.\nDo you want to overwrite it?")); + } + + return askQuestion(QLatin1String("OverwriteTargetDirectory"), + tr("You have selected an existing, non-empty folder for installation.\nNote that it will be " + "completely wiped on uninstallation of this application.\nIt is not advisable to install into " + "this folder as installation might fail.\nDo you want to continue?")); + } else if (fi.isFile() || fi.isSymLink()) { + return failWithError(QLatin1String("WrongTargetDirectory"), tr("You have selected an existing file " + "or symlink, please choose a different target for installation.")); + } + return true; +} + + +// -- InstallerGui + +InstallerGui::InstallerGui(PackageManagerCore *core) + : PackageManagerGui(core, 0) +{ + setPage(PackageManagerCore::Introduction, new IntroductionPageImpl(core)); + setPage(PackageManagerCore::TargetDirectory, new TargetDirectoryPageImpl(core)); + setPage(PackageManagerCore::ComponentSelection, new ComponentSelectionPage(core)); + setPage(PackageManagerCore::LicenseCheck, new LicenseAgreementPage(core)); +#ifdef Q_OS_WIN + setPage(PackageManagerCore::StartMenuSelection, new StartMenuDirectoryPage(core)); +#endif + setPage(PackageManagerCore::ReadyForInstallation, new ReadyForInstallationPage(core)); + setPage(PackageManagerCore::PerformInstallation, new PerformInstallationPage(core)); + setPage(PackageManagerCore::InstallationFinished, new FinishedPage(core)); + + bool ok = false; + const int startPage = core->value(QLatin1String("GuiStartPage")).toInt(&ok); + if(ok) + setStartId(startPage); +} + +void InstallerGui::init() +{ +} + +int InstallerGui::nextId() const +{ + const int next = QWizard::nextId(); + if (next == PackageManagerCore::LicenseCheck) { + PackageManagerCore *const core = packageManagerCore(); + const int nextNextId = pageIds().value(pageIds().indexOf(next)+ 1, -1); + if (!core->isInstaller()) + return nextNextId; + + core->calculateComponentsToInstall(); + foreach (Component* component, core->orderedComponentsToInstall()) { + if (!component->licenses().isEmpty()) + return next; + } + return nextNextId; + } + return next; +} + + +// -- MaintenanceGui + +MaintenanceGui::MaintenanceGui(PackageManagerCore *core) + : PackageManagerGui(core, 0) +{ + IntroductionPageImpl *intro = new IntroductionPageImpl(core); + connect(intro, SIGNAL(packageManagerCoreTypeChanged()), this, SLOT(updateRestartPage())); + + setPage(PackageManagerCore::Introduction, intro); + setPage(PackageManagerCore::ComponentSelection, new ComponentSelectionPage(core)); + setPage(PackageManagerCore::LicenseCheck, new LicenseAgreementPage(core)); + setPage(PackageManagerCore::ReadyForInstallation, new ReadyForInstallationPage(core)); + setPage(PackageManagerCore::PerformInstallation, new PerformInstallationPage(core)); + setPage(PackageManagerCore::InstallationFinished, new FinishedPage(core)); + + RestartPage *p = new RestartPage(core); + connect(p, SIGNAL(restart()), this, SIGNAL(gotRestarted())); + setPage(PackageManagerCore::InstallationFinished + 1, p); + + if (core->isUninstaller()) + wizardPageVisibilityChangeRequested(false, PackageManagerCore::InstallationFinished + 1); +} + +void MaintenanceGui::init() +{ +} + +int MaintenanceGui::nextId() const +{ + const int next = QWizard::nextId(); + if (next == PackageManagerCore::LicenseCheck) { + PackageManagerCore *const core = packageManagerCore(); + const int nextNextId = pageIds().value(pageIds().indexOf(next)+ 1, -1); + if (!core->isPackageManager() && !core->isUpdater()) + return nextNextId; + + core->calculateComponentsToInstall(); + foreach (Component* component, core->orderedComponentsToInstall()) { + if (component->isInstalled()) + continue; + if (!component->licenses().isEmpty()) + return next; + } + return nextNextId; + } + return next; +} + +void MaintenanceGui::updateRestartPage() +{ + wizardPageVisibilityChangeRequested((packageManagerCore()->isUninstaller() ? false : true), + PackageManagerCore::InstallationFinished + 1); +} diff --git a/src/sdk/installerbasecommons.h b/src/sdk/installerbasecommons.h new file mode 100644 index 000000000..f0f0c3d95 --- /dev/null +++ b/src/sdk/installerbasecommons.h @@ -0,0 +1,147 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2010-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#ifndef INSTALLERBASECOMMONS_H +#define INSTALLERBASECOMMONS_H + +#include + +QT_BEGIN_NAMESPACE +class QLabel; +class QString; +class QProgressBar; +QT_END_NAMESPACE + + +// -- IntroductionPageImpl + +class IntroductionPageImpl : public QInstaller::IntroductionPage +{ + Q_OBJECT + +public: + explicit IntroductionPageImpl(QInstaller::PackageManagerCore *core); + + int nextId() const; + bool validatePage(); + + void showAll(); + void hideAll(); + void showMetaInfoUdate(); + void showMaintenanceTools(); + void setMaintenanceToolsEnabled(bool enable); + +public Q_SLOTS: + void onCoreNetworkSettingsChanged(); + void setMessage(const QString &msg); + void setErrorMessage(const QString &error); + +Q_SIGNALS: + void packageManagerCoreTypeChanged(); + +private Q_SLOTS: + void setUpdater(bool value); + void setUninstaller(bool value); + void setPackageManager(bool value); + +private: + void entering(); + void leaving(); + + void showWidgets(bool show); + void callControlScript(const QString &callback); + +private: + bool m_updatesFetched; + bool m_updatesCompleted; + bool m_allPackagesFetched; + + QLabel *m_label; + QLabel *m_errorLabel; + QProgressBar *m_progressBar; + QRadioButton *m_packageManager; + QRadioButton *m_updateComponents; + QRadioButton *m_removeAllComponents; +}; + + +// --TargetDirectoryPageImpl + +class TargetDirectoryPageImpl : public QInstaller::TargetDirectoryPage +{ + Q_OBJECT + +public: + explicit TargetDirectoryPageImpl(QInstaller::PackageManagerCore *core); + + QString targetDirWarning() const; + bool isComplete() const; + bool askQuestion(const QString &identifier, const QString &message); + bool failWithError(const QString &identifier, const QString &message); + bool validatePage(); + +private: + QLabel *m_warningLabel; +}; + + +// -- InstallerGui + +class InstallerGui : public QInstaller::PackageManagerGui +{ + Q_OBJECT + +public: + explicit InstallerGui(QInstaller::PackageManagerCore *core); + + virtual void init(); + virtual int nextId() const; +}; + + +// -- MaintenanceGui + +class MaintenanceGui : public QInstaller::PackageManagerGui +{ + Q_OBJECT + +public: + explicit MaintenanceGui(QInstaller::PackageManagerCore *core); + + virtual void init(); + virtual int nextId() const; + +private Q_SLOTS: + void updateRestartPage(); +}; + +#endif // INSTALLERBASECOMMONS_H diff --git a/src/sdk/sdk.pro b/src/sdk/sdk.pro new file mode 100644 index 000000000..44930f7a0 --- /dev/null +++ b/src/sdk/sdk.pro @@ -0,0 +1,51 @@ +TEMPLATE = app +DEPENDPATH += . .. +INCLUDEPATH += . .. +TARGET = installerbase + +include(../../installerfw.pri) + +LIBS += -linstaller +QT += network script + +CONFIG -= app_bundle +DESTDIR = $$IFW_APP_PATH + +QM_FILES = qt_de.qm de_de.qm en_us.qm +defineTest(testQmFiles) { + for(file, QM_FILES) { + !exists($$PWD/translations/$$file) { + message("File $$PWD/translations/$$file not found!") + return(false) + } + } + return(true) +} + +if (testQmFiles()) { + RESOURCES += installerbase.qrc +} + +FORMS += settingsdialog.ui + +HEADERS += installerbase_p.h \ + tabcontroller.h \ + installerbasecommons.h \ + settingsdialog.h + +SOURCES = installerbase.cpp \ + installerbase_p.cpp \ + tabcontroller.cpp \ + installerbasecommons.cpp \ + settingsdialog.cpp + +win32:RC_FILE = installerbase.rc +win32-msvc2005 { + CONFIG += embed_manifest_exe #msvc2008 is doing this automaticaly +} + +embed_manifest_exe:win32-msvc2005 { + # The default configuration embed_manifest_exe overrides the manifest file + # already embedded via RC_FILE. Vs2008 already have the necessary manifest entry + QMAKE_POST_LINK += $$quote(mt.exe -updateresource:$$IFW_APP_PATH/$${TARGET}.exe -manifest \"$${IFW_SOURCE_TREE}\\src\\sdk\\$${TARGET}.exe.manifest\") +} diff --git a/src/sdk/settingsdialog.cpp b/src/sdk/settingsdialog.cpp new file mode 100644 index 000000000..b3508e169 --- /dev/null +++ b/src/sdk/settingsdialog.cpp @@ -0,0 +1,535 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#include "settingsdialog.h" +#include "ui_settingsdialog.h" + +#include +#include +#include + +#include + +#include +#include +#include + +#include + + +// -- TestRepositoryJob + +TestRepository::TestRepository(QObject *parent) + : KDJob(parent) + , m_downloader(0) +{ + setTimeout(10000); + setAutoDelete(false); + setCapabilities(Cancelable); +} + +TestRepository::~TestRepository() +{ + if (m_downloader) + m_downloader->deleteLater(); +} + +void TestRepository::setRepository(const QInstaller::Repository &repository) +{ + cancel(); + + setError(NoError); + setErrorString(QString()); + m_repository = repository; +} + +void TestRepository::doStart() +{ + if (m_downloader) + m_downloader->deleteLater(); + + const QUrl url = m_repository.url(); + if (url.isEmpty()) { + emitFinishedWithError(QInstaller::InvalidUrl, tr("Empty repository URL.")); + return; + } + + m_downloader = KDUpdater::FileDownloaderFactory::instance().create(url.scheme(), this); + if (!m_downloader) { + emitFinishedWithError(QInstaller::InvalidUrl, tr("URL scheme not supported: %1 (%2).") + .arg(url.scheme(), url.toString())); + return; + } + + QAuthenticator auth; + auth.setUser(m_repository.username()); + auth.setPassword(m_repository.password()); + m_downloader->setAuthenticator(auth); + + connect(m_downloader, SIGNAL(downloadCompleted()), this, SLOT(downloadCompleted())); + connect(m_downloader, SIGNAL(downloadAborted(QString)), this, SLOT(downloadAborted(QString)), + Qt::QueuedConnection); + + m_downloader->setAutoRemoveDownloadedFile(true); + m_downloader->setUrl(QUrl(url.toString() + QString::fromLatin1("/Updates.xml"))); + + m_downloader->download(); +} + +void TestRepository::doCancel() +{ + if (m_downloader) { + m_downloader->cancelDownload(); + emitFinishedWithError(KDJob::Canceled, m_downloader->errorString()); + } +} + +void TestRepository::downloadCompleted() +{ + QString errorMsg; + int error = QInstaller::DownloadError; + + if (m_downloader->isDownloaded()) { + QFile file(m_downloader->downloadedFileName()); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QDomDocument doc; + QString errorMsg; + if (!doc.setContent(&file, &errorMsg)) { + error = QInstaller::InvalidUpdatesXml; + errorMsg = tr("Could not parse Updates.xml! Error: %1."); + } else { + error = NoError; + } + } else { + errorMsg = tr("Updates.xml could not be opened for reading!"); + } + } else { + errorMsg = tr("Updates.xml could not be found on server!"); + } + + if (error > NoError) + emitFinishedWithError(error, errorMsg); + else + emitFinished(); + + m_downloader->deleteLater(); + m_downloader = 0; +} + +void TestRepository::downloadAborted(const QString &reason) +{ + emitFinishedWithError(QInstaller::DownloadError, reason); +} + + +// -- PasswordDelegate + +void PasswordDelegate::showPasswords(bool show) +{ + m_showPasswords = show; +} + +void PasswordDelegate::disableEditing(bool disable) +{ + m_disabledEditor = disable; +} + +QString PasswordDelegate::displayText(const QVariant &value, const QLocale &locale) const +{ + const QString tmp = QStyledItemDelegate::displayText(value, locale); + if (m_showPasswords) + return tmp; + return QString(tmp.length(), QChar(0x25CF)); +} + +QWidget *PasswordDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) + const +{ + if (m_disabledEditor) + return 0; + + QLineEdit *lineEdit = new QLineEdit(parent); + lineEdit->setEchoMode(m_showPasswords ? QLineEdit::Normal : QLineEdit::Password); + return lineEdit; +} + + +// -- RepositoryItem + +RepositoryItem::RepositoryItem(const QString &label) + : QTreeWidgetItem(QTreeWidgetItem::UserType) +{ + setText(0, label); + m_repo = QInstaller::Repository(QUrl(), true); +} + +RepositoryItem::RepositoryItem(const QInstaller::Repository &repo) + : QTreeWidgetItem(QTreeWidgetItem::UserType) + , m_repo(repo) +{ + if (!repo.isDefault()) + setFlags(flags() | Qt::ItemIsEditable); +} + +QVariant RepositoryItem::data(int column, int role) const +{ + const QVariant &data = QTreeWidgetItem::data(column, role); + + switch (role) { + case Qt::UserRole: { + if (column == 0) + return m_repo.isDefault(); + } break; + + case Qt::CheckStateRole: { + if (column == 1) + return (m_repo.isEnabled() ? Qt::Checked : Qt::Unchecked); + } break; + + case Qt::EditRole: + case Qt::DisplayRole:{ + switch (column) { + case 0: + return data.toString().isEmpty() ? QLatin1String(" ") : data; + case 2: + return m_repo.username(); + case 3: + return m_repo.password(); + case 4: + return m_repo.url().toString(); + default: + break; + }; + } break; + + case Qt::ToolTipRole: + switch (column) { + case 1: + return SettingsDialog::tr("Check this to use repository during fetch."); + case 2: + return SettingsDialog::tr("Add the username to authenticate on the server."); + case 3: + return SettingsDialog::tr("Add the password to authenticate on the server."); + case 4: + return SettingsDialog::tr("The servers URL that contains a valid repository."); + default: + return QVariant(); + } break; + break; + }; + + return data; +} + +void RepositoryItem::setData(int column, int role, const QVariant &value) +{ + switch (role) { + case Qt::EditRole: { + switch (column) { + case 2: + m_repo.setUsername(value.toString()); + break; + case 3: + m_repo.setPassword(value.toString()); + break; + case 4: + m_repo.setUrl(QUrl::fromUserInput(value.toString())); + break; + default: + break; + }; + } break; + + case Qt::CheckStateRole: { + if (column == 1) + m_repo.setEnabled(Qt::CheckState(value.toInt()) == Qt::Checked); + } break; + + default: + break; + } + QTreeWidgetItem::setData(column, role, value); +} + +QSet RepositoryItem::repositories() const +{ + QSet set; + for (int i = 0; i < childCount(); ++i) { + if (QTreeWidgetItem *item = child(i)) { + if (item->type() == QTreeWidgetItem::UserType) { + if (RepositoryItem *repoItem = static_cast (item)) + set.insert(repoItem->repository()); + } + } + } + return set; +} + + +// -- SettingsDialog + +SettingsDialog::SettingsDialog(QInstaller::PackageManagerCore *core, QWidget *parent) + : QDialog(parent) + , m_ui(new Ui::SettingsDialog) + , m_core(core) + , m_showPasswords(false) +{ + m_ui->setupUi(this); + setupRepositoriesTreeWidget(); + + const QInstaller::Settings &settings = m_core->settings(); + switch (settings.proxyType()) { + case QInstaller::Settings::NoProxy: + m_ui->m_noProxySettings->setChecked(true); + break; + case QInstaller::Settings::SystemProxy: + m_ui->m_systemProxySettings->setChecked(true); + break; + case QInstaller::Settings::UserDefinedProxy: + m_ui->m_manualProxySettings->setChecked(true); + break; + default: + m_ui->m_noProxySettings->setChecked(true); + Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown proxy type given!"); + } + + const QNetworkProxy &ftpProxy = settings.ftpProxy(); + m_ui->m_ftpProxy->setText(ftpProxy.hostName()); + m_ui->m_ftpProxyPort->setValue(ftpProxy.port()); + m_ui->m_ftpProxyUser->setText(ftpProxy.user()); + m_ui->m_ftpProxyPass->setText(ftpProxy.password()); + m_ui->m_ftpProxyNeedsAuth->setChecked(!ftpProxy.user().isEmpty() | !ftpProxy.password().isEmpty()); + + const QNetworkProxy &httpProxy = settings.httpProxy(); + m_ui->m_httpProxy->setText(httpProxy.hostName()); + m_ui->m_httpProxyPort->setValue(httpProxy.port()); + m_ui->m_httpProxyUser->setText(httpProxy.user()); + m_ui->m_httpProxyPass->setText(httpProxy.password()); + m_ui->m_httpProxyNeedsAuth->setChecked(!httpProxy.user().isEmpty() | !httpProxy.password().isEmpty()); + + connect(m_ui->m_addRepository, SIGNAL(clicked()), this, SLOT(addRepository())); + connect(m_ui->m_showPasswords, SIGNAL(clicked()), this, SLOT(updatePasswords())); + connect(m_ui->m_removeRepository, SIGNAL(clicked()), this, SLOT(removeRepository())); + connect(m_ui->m_useTmpRepositories, SIGNAL(clicked(bool)), this, SLOT(useTmpRepositoriesOnly(bool))); + connect(m_ui->m_repositoriesView, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), + this, SLOT(currentRepositoryChanged(QTreeWidgetItem*, QTreeWidgetItem*))); + connect(m_ui->m_testRepository, SIGNAL(clicked()), this, SLOT(testRepository())); + + useTmpRepositoriesOnly(settings.hasReplacementRepos()); + m_ui->m_useTmpRepositories->setChecked(settings.hasReplacementRepos()); + m_ui->m_useTmpRepositories->setEnabled(settings.hasReplacementRepos()); + m_ui->m_repositoriesView->setCurrentItem(m_rootItems.at(settings.hasReplacementRepos())); +} + +void SettingsDialog::accept() +{ + bool settingsChanged = false; + QInstaller::Settings newSettings; + const QInstaller::Settings &settings = m_core->settings(); + + // set possible updated default repositories + newSettings.setDefaultRepositories((dynamic_cast (m_rootItems.at(0)))->repositories()); + settingsChanged |= (settings.defaultRepositories() != newSettings.defaultRepositories()); + + // set possible new temporary repositories + newSettings.setTemporaryRepositories((dynamic_cast (m_rootItems.at(1)))->repositories(), + m_ui->m_useTmpRepositories->isChecked()); + settingsChanged |= (settings.temporaryRepositories() != newSettings.temporaryRepositories()); + settingsChanged |= (settings.hasReplacementRepos() != newSettings.hasReplacementRepos()); + + // set possible new user repositories + newSettings.setUserRepositories((dynamic_cast (m_rootItems.at(2)))->repositories()); + settingsChanged |= (settings.userRepositories() != newSettings.userRepositories()); + + // update proxy type + newSettings.setProxyType(QInstaller::Settings::NoProxy); + if (m_ui->m_systemProxySettings->isChecked()) + newSettings.setProxyType(QInstaller::Settings::SystemProxy); + else if (m_ui->m_manualProxySettings->isChecked()) + newSettings.setProxyType(QInstaller::Settings::UserDefinedProxy); + settingsChanged |= settings.proxyType() != newSettings.proxyType(); + + if (newSettings.proxyType() == QInstaller::Settings::UserDefinedProxy) { + // update ftp proxy settings + newSettings.setFtpProxy(QNetworkProxy(QNetworkProxy::HttpProxy, m_ui->m_ftpProxy->text(), + m_ui->m_ftpProxyPort->value(), m_ui->m_ftpProxyUser->text(), m_ui->m_ftpProxyPass->text())); + settingsChanged |= (settings.ftpProxy() != newSettings.ftpProxy()); + + // update http proxy settings + newSettings.setHttpProxy(QNetworkProxy(QNetworkProxy::HttpProxy, m_ui->m_httpProxy->text(), + m_ui->m_httpProxyPort->value(), m_ui->m_httpProxyUser->text(), m_ui->m_httpProxyPass->text())); + settingsChanged |= (settings.httpProxy() != newSettings.httpProxy()); + } + + if (settingsChanged) + emit networkSettingsChanged(newSettings); + + QDialog::accept(); +} + +// -- private slots + +void SettingsDialog::addRepository() +{ + int index = 0; + QTreeWidgetItem *parent = m_ui->m_repositoriesView->currentItem(); + if (parent && !m_rootItems.contains(parent)) { + parent = parent->parent(); + index = parent->indexOfChild(m_ui->m_repositoriesView->currentItem()); + } + + if (parent) { + QInstaller::Repository repository; + repository.setEnabled(true); + RepositoryItem *item = new RepositoryItem(repository); + parent->insertChild(index, item); + m_ui->m_repositoriesView->editItem(item, 4); + m_ui->m_repositoriesView->scrollToItem(item); + m_ui->m_repositoriesView->setCurrentItem(item); + + if (parent == m_rootItems.value(1)) + m_ui->m_useTmpRepositories->setEnabled(parent->childCount() > 0); + } +} + +void SettingsDialog::testRepository() +{ + RepositoryItem *current = dynamic_cast (m_ui->m_repositoriesView->currentItem()); + if (current && !m_rootItems.contains(current)) { + m_ui->tabWidget->setEnabled(false); + m_ui->buttonBox->setEnabled(false); + + m_testRepository.setRepository(current->repository()); + m_testRepository.start(); + m_testRepository.waitForFinished(); + + if (m_testRepository.error() > KDJob::NoError) { + QMessageBox msgBox(this); + msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowModality(Qt::WindowModal); + msgBox.setDetailedText(m_testRepository.errorString()); + msgBox.setText(tr("There was an error testing this repository.")); + msgBox.setInformativeText(tr("Do you want to disable the tested repository?")); + + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + + if (msgBox.exec() == QMessageBox::Yes) + current->setData(1, Qt::CheckStateRole, Qt::Unchecked); + } + + m_ui->tabWidget->setEnabled(true); + m_ui->buttonBox->setEnabled(true); + } +} + +void SettingsDialog::updatePasswords() +{ + m_showPasswords = !m_showPasswords; + m_delegate->showPasswords(m_showPasswords); + m_ui->m_showPasswords->setText(m_showPasswords ? tr("Hide Passwords") : tr("Show Passwords")); + + // force an tree view update so the delegate has to repaint + m_ui->m_repositoriesView->viewport()->update(); +} + +void SettingsDialog::removeRepository() +{ + QTreeWidgetItem *item = m_ui->m_repositoriesView->currentItem(); + if (item && !m_rootItems.contains(item)) { + QTreeWidgetItem *parent = item->parent(); + if (parent) { + delete parent->takeChild(parent->indexOfChild(item)); + if (parent == m_rootItems.value(1) && parent->childCount() <= 0) { + useTmpRepositoriesOnly(false); + m_ui->m_useTmpRepositories->setChecked(false); + m_ui->m_useTmpRepositories->setEnabled(false); + } + } + } +} + +void SettingsDialog::useTmpRepositoriesOnly(bool use) +{ + m_rootItems.at(0)->setDisabled(use); + m_rootItems.at(2)->setDisabled(use); +} + +void SettingsDialog::currentRepositoryChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) +{ + Q_UNUSED(previous) + if (current) { + const int index = m_rootItems.at(0)->indexOfChild(current); + m_ui->m_testRepository->setEnabled(!m_rootItems.contains(current)); + m_ui->m_removeRepository->setEnabled(!current->data(0, Qt::UserRole).toBool()); + m_ui->m_addRepository->setEnabled((current != m_rootItems.at(0)) & (index == -1)); + } +} + +// -- private + +void SettingsDialog::setupRepositoriesTreeWidget() +{ + QTreeWidget *treeWidget = m_ui->m_repositoriesView; + treeWidget->header()->setVisible(true); + treeWidget->setHeaderLabels(QStringList() << QString() << tr("Use") << tr("Username") << tr("Password") + << tr("Repository")); + m_rootItems.append(new RepositoryItem(tr("Default repositories"))); + m_rootItems.append(new RepositoryItem(tr("Temporary repositories"))); + m_rootItems.append(new RepositoryItem(tr("User defined repositories"))); + treeWidget->addTopLevelItems(m_rootItems); + + const QInstaller::Settings &settings = m_core->settings(); + insertRepositories(settings.userRepositories(), m_rootItems.at(2)); + insertRepositories(settings.defaultRepositories(), m_rootItems.at(0)); + insertRepositories(settings.temporaryRepositories(), m_rootItems.at(1)); + + treeWidget->expandAll(); + for (int i = 0; i < treeWidget->model()->columnCount(); ++i) + treeWidget->resizeColumnToContents(i); + + treeWidget->header()->setResizeMode(0, QHeaderView::Fixed); + treeWidget->header()->setResizeMode(1, QHeaderView::Fixed); + treeWidget->header()->setMinimumSectionSize(treeWidget->columnWidth(1)); + treeWidget->setItemDelegateForColumn(0, new PasswordDelegate(treeWidget)); + treeWidget->setItemDelegateForColumn(1, new PasswordDelegate(treeWidget)); + treeWidget->setItemDelegateForColumn(3, m_delegate = new PasswordDelegate(treeWidget)); + m_delegate->showPasswords(false); + m_delegate->disableEditing(false); +} + +void SettingsDialog::insertRepositories(const QSet repos, QTreeWidgetItem *rootItem) +{ + rootItem->setFirstColumnSpanned(true); + foreach (const QInstaller::Repository &repo, repos) + rootItem->addChild(new RepositoryItem(repo)); +} diff --git a/src/sdk/settingsdialog.h b/src/sdk/settingsdialog.h new file mode 100644 index 000000000..a222ecf87 --- /dev/null +++ b/src/sdk/settingsdialog.h @@ -0,0 +1,172 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include +#include + +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE +class QLocale; +class QVariant; +QT_END_NAMESPACE + +namespace KDUpdater { + class FileDownloader; +} + +namespace QInstaller { + class PackageManagerCore; +} + +namespace Ui { + class SettingsDialog; +} + + +// -- TestRepositoryJob + +class TestRepository : public KDJob +{ + Q_OBJECT + +public: + + TestRepository(QObject *parent = 0); + ~TestRepository(); + + void setRepository(const QInstaller::Repository &repository); + +private: + void doStart(); + void doCancel(); + +private Q_SLOTS: + void downloadCompleted(); + void downloadAborted(const QString &reason); + +private: + QInstaller::Repository m_repository; + KDUpdater::FileDownloader *m_downloader; +}; + + +// -- PasswordDelegate + +class PasswordDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + PasswordDelegate(QWidget *parent = 0) + : QStyledItemDelegate(parent) + , m_showPasswords(true) + , m_disabledEditor(true) + {} + + void showPasswords(bool show); + void disableEditing(bool disable); + +protected: + QString displayText(const QVariant &value, const QLocale &locale) const; + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const; + +private: + bool m_showPasswords; + bool m_disabledEditor; +}; + + +// -- RepositoryItem + +class RepositoryItem : public QTreeWidgetItem +{ +public: + RepositoryItem(const QString &label); + RepositoryItem(const QInstaller::Repository &repo); + + QVariant data(int column, int role) const; + void setData(int column, int role, const QVariant &value); + + QSet repositories() const; + QInstaller::Repository repository() const { return m_repo; } + void setRepository(const QInstaller::Repository &repo) { m_repo = repo; } + +private: + QInstaller::Repository m_repo; +}; + + +// -- SettingsDialog + +class SettingsDialog : public QDialog +{ + Q_OBJECT + +public: + SettingsDialog(QInstaller::PackageManagerCore *core, QWidget *parent = 0); + +public slots: + void accept(); + +signals: + void networkSettingsChanged(const QInstaller::Settings &settings); + +private slots: + void addRepository(); + void testRepository(); + void updatePasswords(); + void removeRepository(); + void useTmpRepositoriesOnly(bool use); + void currentRepositoryChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); + +private: + void setupRepositoriesTreeWidget(); + void insertRepositories(const QSet repos, QTreeWidgetItem *rootItem); + +private: + Ui::SettingsDialog *m_ui; + PasswordDelegate *m_delegate; + QInstaller::PackageManagerCore *m_core; + + bool m_showPasswords; + TestRepository m_testRepository; + QList m_rootItems; +}; + +#endif // SETTINGSDIALOG_H diff --git a/src/sdk/settingsdialog.ui b/src/sdk/settingsdialog.ui new file mode 100644 index 000000000..d3ca959a6 --- /dev/null +++ b/src/sdk/settingsdialog.ui @@ -0,0 +1,767 @@ + + + SettingsDialog + + + + 0 + 0 + 491 + 443 + + + + Settings + + + + + + 0 + + + + Network + + + + + + No proxy + + + true + + + + + + + true + + + System proxy settings + + + false + + + + + + + Manual proxy configuration + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + + + false + + + HTTP proxy: + + + + + + + false + + + + + + + false + + + Port: + + + + + + + false + + + 65535 + + + + + + + + + false + + + HTTP proxy requires authentication + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + + + false + + + Username: + + + + + + + false + + + + + + + false + + + Password: + + + + + + + false + + + QLineEdit::Password + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 10 + 10 + + + + + + + + + + + + false + + + FTP proxy: + + + + + + + false + + + + + + + false + + + Port: + + + + + + + false + + + 65535 + + + + + + + + + false + + + FTP proxy requires authentication + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + + + false + + + Username: + + + + + + + false + + + + + + + false + + + Password: + + + + + + + false + + + QLineEdit::Password + + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + + + + Repositories + + + + + + Add Username and Password for authentication if needed. + + + + + + + + 1 + + + + + + + + Use temporary repositories only + + + + + + + + + Add + + + + + + + Remove + + + + + + + Test + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Show Passwords + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + SettingsDialog + accept() + + + 269 + 422 + + + 157 + 274 + + + + + buttonBox + rejected() + SettingsDialog + reject() + + + 337 + 422 + + + 286 + 274 + + + + + m_manualProxySettings + toggled(bool) + m_httpProxyLabel + setEnabled(bool) + + + 104 + 74 + + + 121 + 97 + + + + + m_manualProxySettings + toggled(bool) + m_httpProxy + setEnabled(bool) + + + 232 + 77 + + + 232 + 97 + + + + + m_manualProxySettings + toggled(bool) + m_httpProxyPortLabel + setEnabled(bool) + + + 349 + 78 + + + 347 + 96 + + + + + m_manualProxySettings + toggled(bool) + m_httpProxyPort + setEnabled(bool) + + + 392 + 74 + + + 392 + 96 + + + + + m_manualProxySettings + toggled(bool) + m_ftpProxyLabel + setEnabled(bool) + + + 61 + 76 + + + 109 + 243 + + + + + m_manualProxySettings + toggled(bool) + m_ftpProxy + setEnabled(bool) + + + 204 + 78 + + + 203 + 248 + + + + + m_manualProxySettings + toggled(bool) + m_ftpProxyPortLabel + setEnabled(bool) + + + 336 + 77 + + + 336 + 241 + + + + + m_manualProxySettings + toggled(bool) + m_ftpProxyPort + setEnabled(bool) + + + 406 + 78 + + + 380 + 252 + + + + + m_manualProxySettings + toggled(bool) + m_httpProxyNeedsAuth + setEnabled(bool) + + + 53 + 75 + + + 100 + 129 + + + + + m_manualProxySettings + toggled(bool) + m_ftpProxyNeedsAuth + setEnabled(bool) + + + 88 + 74 + + + 95 + 274 + + + + + m_manualProxySettings + toggled(bool) + m_httpAuthWidget + setEnabled(bool) + + + 54 + 79 + + + 53 + 179 + + + + + m_manualProxySettings + toggled(bool) + m_ftpAuthWidget + setEnabled(bool) + + + 73 + 76 + + + 56 + 298 + + + + + m_ftpProxyNeedsAuth + toggled(bool) + m_ftpProxyUserLabel + setEnabled(bool) + + + 82 + 283 + + + 77 + 303 + + + + + m_ftpProxyNeedsAuth + toggled(bool) + m_ftpProxyUser + setEnabled(bool) + + + 180 + 284 + + + 170 + 304 + + + + + m_ftpProxyNeedsAuth + toggled(bool) + m_ftpProxyPass + setEnabled(bool) + + + 224 + 283 + + + 223 + 330 + + + + + m_ftpProxyNeedsAuth + toggled(bool) + m_ftpProxyPassLabel + setEnabled(bool) + + + 317 + 282 + + + 122 + 335 + + + + + m_httpProxyNeedsAuth + toggled(bool) + m_httpProxyUserLabel + setEnabled(bool) + + + 81 + 134 + + + 70 + 154 + + + + + m_httpProxyNeedsAuth + toggled(bool) + m_httpProxyPassLabel + setEnabled(bool) + + + 87 + 137 + + + 84 + 186 + + + + + m_httpProxyNeedsAuth + toggled(bool) + m_httpProxyUser + setEnabled(bool) + + + 183 + 135 + + + 182 + 154 + + + + + m_httpProxyNeedsAuth + toggled(bool) + m_httpProxyPass + setEnabled(bool) + + + 287 + 134 + + + 285 + 182 + + + + + diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp new file mode 100644 index 000000000..200de2359 --- /dev/null +++ b/src/sdk/tabcontroller.cpp @@ -0,0 +1,203 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2010-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ +#include "tabcontroller.h" + +#include "installerbasecommons.h" +#include "settingsdialog.h" + +#include + +#include +#include + +using namespace QInstaller; + + +// -- TabController::Private + +class TabController::Private +{ +public: + Private(); + ~Private(); + + bool m_init; + QString m_controlScript; + QHash m_params; + + Settings m_settings; + bool m_networkSettingsChanged; + + QInstaller::PackageManagerGui *m_gui; + QInstaller::PackageManagerCore *m_core; +}; + +TabController::Private::Private() + : m_init(false) + , m_networkSettingsChanged(false) + , m_gui(0) + , m_core(0) +{ +} + +TabController::Private::~Private() +{ + delete m_gui; +} + + +// -- TabController + +TabController::TabController(QObject *parent) + : QObject(parent) + , d(new Private) +{ +} + +TabController::~TabController() +{ + d->m_core->writeUninstaller(); + delete d; +} + +void TabController::setGui(QInstaller::PackageManagerGui *gui) +{ + d->m_gui = gui; + connect(d->m_gui, SIGNAL(gotRestarted()), this, SLOT(restartWizard())); +} + +void TabController::setControlScript (const QString &script) +{ + d->m_controlScript = script; +} + +void TabController::setManager(QInstaller::PackageManagerCore *core) +{ + d->m_core = core; +} + +void TabController::setManagerParams(const QHash ¶ms) +{ + d->m_params = params; +} + +// -- public slots + +int TabController::init() +{ + if (!d->m_init) { + d->m_init = true; + // this should called as early as possible, to handle error message boxes for example + if (!d->m_controlScript.isEmpty()) { + qDebug() << "Non-interactive installation using script:" << d->m_controlScript; + + d->m_gui->loadControlScript(d->m_controlScript); + QScriptEngine *engine = d->m_gui->controlScriptEngine(); + engine->globalObject().setProperty(QLatin1String("tabController"), + engine->newQObject(this)); + } + + connect(d->m_gui, SIGNAL(currentIdChanged(int)), this, SLOT(onCurrentIdChanged(int))); + connect(d->m_gui, SIGNAL(settingsButtonClicked()), this, SLOT(onSettingsButtonClicked())); + } + + IntroductionPageImpl *page = + qobject_cast (d->m_gui->page(PackageManagerCore::Introduction)); + if (page) { + page->setMessage(QString()); + page->setErrorMessage(QString()); + page->onCoreNetworkSettingsChanged(); + } + + d->m_gui->restart(); + d->m_gui->setWindowModality(Qt::WindowModal); + d->m_gui->show(); + + onCurrentIdChanged(d->m_gui->currentId()); + return PackageManagerCore::Success; +} + +// -- private slots + +void TabController::restartWizard() +{ + d->m_core->reset(d->m_params); + if (d->m_networkSettingsChanged) { + d->m_networkSettingsChanged = false; + + d->m_core->settings().setFtpProxy(d->m_settings.ftpProxy()); + d->m_core->settings().setHttpProxy(d->m_settings.httpProxy()); + d->m_core->settings().setProxyType(d->m_settings.proxyType()); + + d->m_core->settings().setUserRepositories(d->m_settings.userRepositories()); + d->m_core->settings().setDefaultRepositories(d->m_settings.defaultRepositories()); + d->m_core->settings().setTemporaryRepositories(d->m_settings.temporaryRepositories(), + d->m_settings.hasReplacementRepos()); + d->m_core->networkSettingsChanged(); + } + + // restart and switch back to intro page + QTimer::singleShot(0, this, SLOT(init())); +} + +void TabController::onSettingsButtonClicked() +{ + SettingsDialog dialog(d->m_core); + connect (&dialog, SIGNAL(networkSettingsChanged(QInstaller::Settings)), this, + SLOT(onNetworkSettingsChanged(QInstaller::Settings))); + dialog.exec(); + + if (d->m_networkSettingsChanged) { + d->m_core->setCanceled(); + IntroductionPageImpl *page = + qobject_cast (d->m_gui->page(PackageManagerCore::Introduction)); + if (page) { + page->setMessage(QString()); + page->setErrorMessage(QString()); + } + restartWizard(); + } +} + +void TabController::onCurrentIdChanged(int newId) +{ + if (d->m_gui && d->m_core) { + d->m_gui->showSettingsButton((newId == PackageManagerCore::Introduction) & + (!d->m_core->isOfflineOnly()) & (!d->m_core->isUninstaller())); + } +} + +void TabController::onNetworkSettingsChanged(const QInstaller::Settings &settings) +{ + d->m_settings = settings; + d->m_networkSettingsChanged = true; +} diff --git a/src/sdk/tabcontroller.h b/src/sdk/tabcontroller.h new file mode 100644 index 000000000..1ef779f8e --- /dev/null +++ b/src/sdk/tabcontroller.h @@ -0,0 +1,76 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2010-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#ifndef TABCONTROLLER_H +#define TABCONTROLLER_H + +#include +#include + +namespace QInstaller { + class PackageManagerGui; + class PackageManagerCore; + class Settings; +} + +class IntroductionPageImpl; + +class TabController : public QObject +{ + Q_OBJECT + Q_DISABLE_COPY(TabController) + +public: + explicit TabController(QObject *parent = 0); + ~TabController(); + + void setGui(QInstaller::PackageManagerGui *gui); + void setManager(QInstaller::PackageManagerCore *core); + void setManagerParams(const QHash ¶ms); + + void setControlScript(const QString &script); + +public Q_SLOTS: + int init(); + +private Q_SLOTS: + void restartWizard(); + void onSettingsButtonClicked(); + void onCurrentIdChanged(int newId); + void onNetworkSettingsChanged(const QInstaller::Settings &settings); + +private: + class Private; + Private *const d; +}; + +#endif // TABCONTROLLER_H diff --git a/src/sdk/translations/de_de.ts b/src/sdk/translations/de_de.ts new file mode 100644 index 000000000..64bc29afc --- /dev/null +++ b/src/sdk/translations/de_de.ts @@ -0,0 +1,3681 @@ + + + + + Component + + + Could not open archive %1: %2 + Konnte Archiv %1 nicht öffnen. Fehlermeldung: %2 + + + + IntroductionPageImpl + + + Package manager + Paketverwaltung + + + + Update components + Komponenten aktualisieren + + + + Remove all components + Alle Komponenten entfernen + + + + Retrieving information from remote installation sources... + Empfange Daten vom Installationsserver... + + + + No updates available. + Keine Aktualisierungen verfügbar. + + + <b>No updates available.</b> + <b>Keine Aktualisierungen verfügbar.</b> + + + + Only local package management available. + Nur lokale Paketverwaltung verfügbar. + + + + KDJob + + + Canceled + Abgebrochen + + + + KDSaveFile + + + Append mode not supported. + Anhängen nicht unterstützt. + + + + Read-only access not supported. + Nur-Lese-Modus nicht unterstützt. + + + + Could not backup existing file %1: %2 + Konnte existierende Datei %1 nicht sichern. Fehlermeldung: %2 + + + + + + TODO + !!TODO + + + + KDUpdater::AppendFileOperation + + + Cannot backup file %1: %2 + Konnte Datei %1 nicht sichern. Fehlermeldung: %2 + + + + Invalid arguments: %1 arguments given, 2 expected. + Ungültige Argumente: %1 Argumente erhalten, 2 erwartet. + + + + Could not open file %1 for writing: %2 + Konnte Datei %1 nicht zum Schreiben öffnen. Fehlermeldung: %2 + + + + Cannot find backup file for %1. + Konnte Sicherungsdatei für %1 nicht finden. + + + + Could not restore backup file for %1. + Konnte Datei %1 nicht wiederherstellen. + + + + Could not restore backup file for %1: %2 + Konnte Datei %1 nicht wiederherstellen. Fehlermeldung: %2 + + + + KDUpdater::CopyOperation + + + Invalid arguments: %1 arguments given, 2 expected. + Ungültige Argumente: %1 Argumente erhalten, 2 erwartet. + + + + Could not backup file %1. + Konnte Datei %1 nicht sichern. + + + + Could not remove destination file %1: %2 + Konnte Zieldatei %1 nicht entfernen. Fehlermeldung: %2 + + + + Could not copy %1 to %2: %3 + Konnte Datei %1 nicht nach %2 kopieren. Fehlermeldung: %3 + + + + Could not delete file %1: %2 + Konnte Datei %1 nicht löschen. Fehlermeldung: %2 + + + + Could not restore backup file into %1: %2 + Konnte Datei %1 nicht wiederherstellen. Fehlermeldung: %2 + + + + KDUpdater::DeleteOperation + + + Cannot create backup of %1: %2 + Konnte Datei %1 nicht sichern. Fehlermeldung: %2 + + + + Invalid arguments: %1 arguments given, 1 expected. + Ungültige Argumente: %1 Argumente erhalten, 1 erwartet. + + + + Cannot restore backup file for %1: %2 + Konnte Datei %1 nicht wiederherstellen. Fehlermeldung: %2 + + + + KDUpdater::ExecuteOperation + + + Invalid arguments: %1 arguments given, 2 expected. + Ungültige Argumente: %1 Argumente erhalten, 2 erwartet. + + + + Execution failed: %1 + Ausführung fehlgeschlagen: %1 + + + + KDUpdater::FileDownloader + + + %L1 B + %L1 B + + + + %L1 KB + %L1 KB + + + + %L1 MB + %L1 MB + + + + %L1 GB + %L1 GB + + + + Could not reopen downloaded file %1 for reading: %2 + Konnte heruntergeladene Datei %1 nicht zum Lesen öffnen. Fehlermeldung: %2 + + + + Download canceled. + Herunterladen abgebrochen. + + + + Cryptographic hashes do not match. + Prüfsummen stimmen nicht überein. + + + + Download finished. + Heruntergeladen abgeschlossen. + + + + of + von + + + + downloaded. + heruntergeladen. + + + + /sec + /s + + + + day + Tag + + + + days + Tage + + + + hour + Stunde + + + + hours + Stunden + + + + minute + Minute + + + + minutes + Minuten + + + + second + Sekunde + + + + seconds + Sekunden + + + + - + - + + + + remaining. + verbleibend. + + + + - unknown time remaining. + - verbleibende Zeit unbekannt. + + + + KDUpdater::FtpDownloader + + + Download was aborted due to network errors. + Herunterladen wegen Netzwerkfehlern abgebrochen. + + + + Cannot download %1: Writing to temporary file failed: %2 + Konnte URL %1 nicht herunterladen. Schreiben in temporäre Datei fehlgeschlagen. Fehlermeldung: %2 + + + + KDUpdater::HttpDownloader + + + Cannot download %1: Writing to temporary file failed: %2 + Konnte URL %1 nicht herunterladen. Schreiben in temporäre Datei fehlgeschlagen. Fehlermeldung: %2 + + + + Cannot download %1: Could not create temporary file: %2 + Konnte URL %1 nicht herunterladen. Schreiben in temporäre Datei fehlgeschlagen. Fehlermeldung: %2 + + + + KDUpdater::LocalFileDownloader + + Cannot open source file for reading. + Konnte Ausgangsdatei nicht zum Lesen öffnen. + + + Cannot open destination file for writing. + Konnte Zielatei nicht zum Schreiben öffnen. + + + + Cannot open source file '%1' for reading. + Konnte Ausgangsdatei '%1' nicht zum Lesen öffnen. + + + + Cannot open destination file '%1' for writing. + Konnte Zieldatei '%1' nicht zum Schreiben öffnen. + + + + Writing to %1 failed: %2 + Konnte Datei %1 nicht zum Schreiben öffnen. Fehlermeldung: %2 + + + + KDUpdater::MkdirOperation + + + Invalid arguments: %1 arguments given, 1 expected. + Ungültige Argumente: %1 Argumente erhalten, 1 erwartet. + + + + Could not create folder %1: Unknown error. + Konnte Ordner %1 nicht anlegen. Unbekannter Fehler. + + + + + Cannot remove directory %1: %2 + Konnte Ordner %1 nicht löschen. Fehlermeldung: %2 + + + + KDUpdater::MoveOperation + + + Could not backup file %1. + Konnte Datei %1 nicht sichern. + + + + Invalid arguments: %1 arguments given, 2 expected. + Ungültige Argumente: %1 Argumente erhalten, 2 erwartet. + + + + Could not remove destination file %1: %2 + Konnte Zieldatei %1 nicht entfernen. Fehlermeldung: %2 + + + + Could not copy %1 to %2: %3 + Konnte Datei %1 nicht nach %2 kopieren. Fehlermeldung: %3 + + + + Cannot remove file %1. + Konnte Datei %1 nicht löschen. + + + + Cannot copy %1 to %2: %3 + Konnte Datei %1 nicht nach %2 kopieren. Fehlermeldung: %3 + + + + Cannot restore backup file for %1: %2 + Konnte Datei %1 nicht wiederherstellen. Fehlermeldung: %2 + + + + KDUpdater::PackagesInfo + + + %1 contains invalid content: %2 + Inhalt von Datei %1 ungültig: %2 + + + + The file %1 does not exist. + Datei %1 existiert nicht. + + + + Could not open %1. + Konnte Datei %1 nicht öffnen. + + + + Root element %1 unexpected, should be 'Packages'. + Unerwartetes Wurzelelement %1, erwartet wird 'Packages'. + + + + Parse error in %1 at %2, %3: %4 + Ungültiges XML in Datei %1, Zeile %2, Spalte %3. Fehlermeldung: %4 + + + + KDUpdater::PrependFileOperation + + + Cannot backup file %1: %2 + Konnte Datei %1 nicht sichern. Fehlermeldung: %2 + + + + Invalid arguments: %1 arguments given, 2 expected. + Ungültige Argumente: %1 Argumente erhalten, 2 erwartet. + + + + Could not open file %1 for reading: %2 + Konnte Datei %1 nicht zum Lesen öffnen. Fehlermeldung: %2 + + + + Could not open file %1 for writing: %2 + Konnte Datei %1 nicht zum Schreiben öffnen. Fehlermeldung: %2 + + + + Cannot find backup file for %1. + Konnte Sicherungsdatei für %1 nicht finden. + + + + Cannot restore backup file for %1. + Konnte Datei %1 nicht wiederherstellen. + + + + Cannot restore backup file for %1: %2 + Konnte Datei %1 nicht wiederherstellen. Fehlermeldung: %2 + + + + KDUpdater::RmdirOperation + + + Invalid arguments: %1 arguments given, 1 expected. + Ungültige Argumente: %1 Argumente erhalten, 1 erwartet. + + + + Could not remove folder %1: The folder does not exist. + Konnte Ordner %1 nicht entfernen. Der Ordner existiert nicht. + + + + Could not remove folder %1: %2 + Konnte Ordner %1 nicht löschen. Fehlermeldung: %2 + + + + Cannot recreate directory %1: %2 + Konnte Ordner %1 nicht wiederherstellen. Fehlermeldung: %2 + + + + KDUpdater::SignatureVerificationDownloader + + Could not download signature: scheme %1 not supported. + Konnte Signatur nicht herunterladen: Schema %1 nicht unterstützt. + + + Downloading signature: %1 + Herunterladen der Unterschrift abgebrochen: %1 + + + Could not open signature file: %1 + Konnte Unterschriftdatei nicht öffnen: %1 + + + Could not open file for verification: %1 + Konnte Datei nicht zur Ãœberprüfung öffnen: %1 + + + + KDUpdater::Task + + + %1 started + %1 gestartet + + + + %1 cannot be stopped + %1 kann nicht angehalten werden + + + + Cannot stop task %1 + %1 kann nicht angehalten werden + + + + %1 cannot be paused + %1 kann nicht pausiert werden + + + + Cannot pause task %1 + %1 kann nicht pausiert werden + + + + Cannot resume task %1 + %1 kann nicht wiederaufgenommen werden + + + + %1 done + %1 abgeschlossen + + + + KDUpdater::UFUncompressor + + Couldn't open file for reading: %1 + Konnte Datei nicht zum Lesen öffnen. Fehlermeldung: %1 + + + Couldn't read the file header. + Konnte den Dateikopf nicht lesen. + + + Wrong file format (magic number not found) + Falsches Dateiformat (magische Zahl nicht gefunden). + + + Could not create folder: %1/%2 + Konnte Ordner %1/%2 nicht anlegen. + + + Could not read information for entry %1. + Konnte die Informationen für Eintrag %1 nicht lesen. + + + Could not uncompress entry %1, corrupt data + Konnte Eintrag %1 nicht entpacken, Daten ungültig. + + + Could not open file %1 for writing: %2 + Konnte Datei %1 nicht zum Schreiben öffnen. Fehlermeldung: %2 + + + Failed writing uncompressed data to %1: %2 + Konnte ausgepackte Daten nicht nach %1 schreiben. Fehlermeldung: %2 + + + Corrupt file (wrong number of files) + Ungültige Datei (falsche Dateianzahl). + + + Corrupt file (wrong hash) + Ungültige Datei (falsche Prüfsumme). + + + + KDUpdater::Update + + + Downloading update... + Lade Aktualisierung herunter... + + + + Update downloaded + Aktualisierung heruntergeladen. + + + + KDUpdater::UpdateCompatOperation + + + Invalid arguments: %1 arguments given, 1 expected. + Ungültige Argumente: %1 Argumente erhalten, 1 erwartet. + + + + Cannot restore previous compat-level + Kann ursprüngliches compat-level nicht wiederherstellen. + + + + KDUpdater::UpdateFinder + + Could not access the package information of this application + Konnte nicht auf die Paketinformationen dieser Anwendung zugreifen. + + + Could not access the update sources information of this application + Konnte nicht auf die Aktualisierungsinformationen dieser Anwendung zugreifen. + + + %1 updates found + %1 Aktualisierungen gefunden. + + + Downloading Updates.xml from update-sources + Lade Updates.xml von der Aktualisierungsquelle herunter. + + + + Could not download updates from %1 ('%2') + Konnte Aktualisierungen nicht von %1 ('%2') herunterladen. + + + Updates.xml file(s) downloaded from update sources + Datei Updates.xml von der Aktualisierungsquelle heruntergeladen. + + + + Could not access the package information of this application. + Konnte nicht auf die Paketinformationen dieser Anwendung zugreifen. + + + + Could not access the update sources information of this application. + Konnte nicht auf die Aktualisierungsinformationen dieser Anwendung zugreifen. + + + + %1 updates found. + %1 Aktualisierungen gefunden. + + + + Downloading Updates.xml from update sources. + Lade Updates.xml von der Aktualisierungsquelle herunter. + + + + Updates.xml file(s) downloaded from update sources. + Datei Updates.xml von der Aktualisierungsquelle heruntergeladen. + + + + Looking for compatibility update... + Suche nach einer Kompatibilitätsaktualisierung... + + + + Found compatibility update.. + Kompatibilitätsaktualisierung gefunden. + + + + Compatibility level %1 update + Kompatibilitätsaktualisierung auf Ebene %1. + + + + Compatibility update for the required architecture and hardware configuration was not found. + Kompatibilitätsaktualisierung für die benötigte Architektur und Hardware nicht gefunden. + + + + Compatibility update not found. + Kompatibilitätsaktualisierung nicht gefunden. + + + + Compatibility update found. + Kompatibilitätsaktualisierung gefunden. + + + + No compatibility updates found. + Kompatibilitätsaktualisierung nicht gefunden. + + + + Computing applicable updates. + Berechne anwendbare Aktualisierungen. + + + + Application updates computed. + Anwendbare Aktualisierungen berechnet. + + + Compatibility update for the required architecture and hardware configuration was not found + Kompatibilitätsaktualisierung für die benötigte Architektur und Hardware nicht gefunden. + + + Compatibility update not found + Kompatibilitätsaktualisierung nicht gefunden. + + + Compatibility update found + Kompatibilitätsaktualisierung gefunden. + + + No compatibility updates found + Kompatibilitätsaktualisierung nicht gefunden. + + + Computing applicable updates + Berechne anwendbare Aktualisierungen. + + + Application updates computed + Anwendbare Aktualisierungen berechnet. + + + + Downloading Updates.xml from update sources + Lade Updates.xml von der Aktualisierungsquelle herunter. + + + + KDUpdater::UpdateInstaller + + Downloading updates... + Lade Aktualisierungen herunter... + + + Updates downloaded... + Aktualisierungen heruntergeladen. + + + Installing %1.. + Installiere %1... + + + Finished installing updates. Now removing temporary files and directories.. + Aktualisierungen installaiert. Temporäre Dateien und Ordner werden entfernt. + + + Removed temporary files and directories + Temporäre Dateien und Ordner wurden entfernt. + + + Could not download update '%1' + Konnte Aktualisierungen '%1' nicht herunterladen. + + + Couldn't uncompress update: %1 + Konnte Aktualisierung nicht auspacken. Fehlermeldung: %1 + + + Could not find UpdateInstructions.xml for %1 + Konnte UpdateInstructions.xml für Aktualisierung %1 nicht finden. + + + Could not read UpdateInstructions.xml of %1 + Konnte UpdateInstructions.xml für Aktualisierung %1 nicht lesen. + + + Installing %1 + Installiere %1... + + + Update operation %1 not supported + Aktualisierungsanweisung %1 nicht unterstützt. + + + Cannot execute '%1' + Konnte Aktualisierungsanweisung %1 nicht ausführen. + + + Finished installing update %1 + Installieren von Aktualisierung %1 abgeschlossen. + + + + KDUpdater::UpdatePackageOperation + + + Invalid arguments: %1 arguments given, 3 expected. + Ungültige Argumente: %1 Argumente erhalten, 3 erwartet. + + + + Cannot update %1-%2 + Aktualisierung von %1-%2 nicht möglich. + + + + Cannot restore %1-%2 + Wiederherstelung von %1-%2 nicht möglich. + + + + KDUpdater::UpdateSourcesInfo + + + %1 contains invalid content: %2 + Datei %1 enthält ungültige Inhalte: %2 + + + + Could not read "%1" + Konnte Datei "%1" nicht lesen. + + + + XML Parse error in %1 at %2, %3: %4 + Ungültiges XML in Datei %1, Zeile %2, Spalte %3. Fehlermeldung: %4 + + + + Root element %1 unexpected, should be "UpdateSources" + Unerwartetes Wurzelelement %1, erwartet wird "UpdateSources". + + + + + Could not save changes to "%1": %2 + Konnte Änderungen nicht in Datei %1 speichern. Fehlermeldung: %2 + + + + KDUpdater::UpdatesInfoData + + + Updates.Xml contains invalid content: %1 + Inhalt von Datei Updates.xml ungültig: %1 + + + + Could not read "%1" + Konnte Datei "%1" nicht lesen. + + + + Parse error in %1 at %2, %3: %4 + Ungültiges XML in Datei %1, Zeile %2, Spalte %3. Fehlermeldung: %4 + + + + root element %1 unexpected, should be "Updates" + Unerwartetes Wurzelelement %1, erwartet wird "Updates". + + + + ApplicationName element is missing + Element "ApplicationName" fehlt. + + + + ApplicationVersion element is missing + Element "ApplicationVersion" fehlt. + + + + PackageUpdate element without Name + Element "PackageUpdate" braucht ein Feld "Name". + + + + PackageUpdate element without Version + Element "PackageUpdate" braucht ein Feld "Version". + + + + PackageUpdate element without ReleaseDate + Element "PackageUpdate" braucht ein Feld "ReleaseDate". + + + + PackageUpdate element without UpdateFile + Element "PackageUpdate" braucht ein Feld "UpdateFile". + + + + CompatUpdate element without CompatLevel + Element "CompatUpdate" braucht ein Feld "CompatLevel". + + + + CompatUpdate element without ReleaseDate + Element "CompatUpdate" braucht ein Feld "ReleaseDate". + + + + CompatUpdate element without UpdateFile + Element "CompatUpdate" braucht ein Feld "UpdateFile". + + + + Lib7z::ExtractItemJob + + + Could not list archive: QIODevice not set or already destroyed. + Kann Archiv nicht anzeigen: QIODevice ist nicht gesetzt oder bereits zerstört. + + + + Lib7z::ListArchiveJob + + + Could not list archive: QIODevice already destroyed. + Kann Archiv nicht anzeigen: QIODevice ist bereits zerstört. + + + + QInstaller + + Cannot map file %1. + Kann Datei %1. nicht mappen. + + + Cannot unmap file %1. + Kann Datei %1. nicht unmappen. + + + + QInstaller::AddQtCreatorArrayValueOperation + + + Invalid arguments in %0: %1 arguments given, exactly 4 expected (group, arrayname, key, value). + Ungültige Argumente in %0: %1 Argumente erhalten, genau 4 erwartet (group, arrayname, key, value). + + + + + Needed installer object in %1 operation is empty. + Das für die Anweisung %1 benötigte Installerobjekt ist leer. + + + + QInstaller::Component + + + %L1 Bytes + %L1 Bytes + + + + %L1 kBytes + %L1 kBytes + + + + %L1 MBytes + %L1 MBytes + + + + %L1 GBytes + %L1 GBytes + + + + Could not open the requested script file at %1: %2. + Konnte angeforderte Skriptdatei %1 nicht öffnen. Fehlermeldung: %2 + + + + + Exception while loading the component script: %1 + Ausnahme beim Laden des Komponentenskripts: %1 + + + + Could not open the requested translation file at %1 + Konnte angeforderte Ãœbersetzungsdatei %1 nicht öffnen. Fehlermeldung: %2 + + + + Could not open the requested UI file at %1: %2 + Konnte angeforderte UI-Datei %1 nicht öffnen. Fehlermeldung: %2 + + + + Could not open the requested license file at %1: %2 + Konnte angeforderte Lizenzdatei %1 nicht öffnen. Fehlermeldung: %2 + + + + Error + Fehler + + + + Error: Operation %1 does not exist + Fehler: Anweisung %1 existiert nicht. + + + + Can't resolve isAutoDependOn in %1 + Kann isAutoDependOn in %1 nicht auflösen. + + + + Can't resolve isDefault in %1 + Kann isDefault in %1 nicht auflösen. + + + + QInstaller::ComponentSelectionPage + + + Component Name + Komponentenname + + + + Installed Version + Installierte Version + + + + New Version + Neue Version + + + + Size + Grösse + + + + Alt+A + select default components + Alt+A + + + + Def&ault + St&andard + + + + Alt+R + reset to already installed components + Alt+Z + + + + &Reset + &Zurücksetzen + + + + Alt+S + select all components + Alt+S + + + + &Select All + Alle au&swählen + + + + Alt+D + deselect all components + Alt+B + + + + &Deselect All + Alle a&bwählen + + + + %1 + !!%1 + + + + This component will occupy approximately %1 on your hard disk drive. + Diese Komponente wird ungefähr %1 auf ihrer Festplatte belegen. + + + + Select Components + Komponenten auswählen + + + + Please select the components you want to update. + Bitte wählen sie die Komponenten aus, die sie aktualisieren möchten. + + + + Please select the components you want to install. + Bitte wählen sie die Komponenten aus, die sie installieren möchten. + + + + Please select the components you want to uninstall. + Bitte wählen sie die Komponenten aus, die sie entfernen möchten. + + + + Select the components to install. Deselect installed components to uninstall them. + Bitte wählen sie die Komponenten aus, die sie installieren möchten. Wählen sie die Komponenten ab, die sie entfernen möchten. + + + + QInstaller::ComponentSelectionPage::Private + + Component Name + Komponentenname + + + Installed Version + Installierte Version + + + New Version + Neue Version + + + Size + Grösse + + + Alt+A + select default components + Standardkomponenten auswählen + Alt+A + + + Def&ault + St&andard + + + Alt+R + reset to already installed components + Auf die bereits installierten Komponenten zurücksetzen + Alt+R + + + &Reset + Zu&rücksetzen + + + Alt+S + select all components + Alle Komponenten auswählen + Alt+S + + + &Select All + Alle au&swählen + + + Alt+D + deselect all components + Alle Komponenten abwählen + Alt+B + + + &Deselect All + Alle a&bwählen + + + %1 + !!%1 + + + This component will occupy approximately %1 on your hard disk drive. + Diese Komponente wird ungefähr %1 auf ihrer Festplatte belegen. + + + + QInstaller::CopyDirectoryOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 2 erwartet. + + + + Invalid arguments in %0: Directories are invalid: %1 %2 + Ungültige Argumentein %0: Ordner %1 und %2 ungültig. + + + + Could not create %0 + Konnte Ordner "%1" nicht anlegen. + + + + Could not copy %0 to %1 + Konnte Ordner %0 nicht nach %1 kopieren. + + + + Could not remove %0 + Konnte Datei %0 nicht löschen. + + + + QInstaller::CreateDesktopEntryOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 2 erwartet. + + + + Failed to overwrite %1 + Konnte Datei %1 nicht überschreiben. + + + + Could not write Desktop Entry at %1 + Konnte keinen Eintrag %1 auf dem Arbeitsplatz anlegen. + + + + QInstaller::CreateShortcutOperation + + + Could not create folder %1: %2. + Konnte Ordner %1 nicht anlegen. Fehlermeldung: %2 + + + + Could not create link %1: %2 + Konnte Verweis %1 nicht anlegen. Fehlermeldung: %2 + + + + QInstaller::DownloadArchivesJob + + + + Canceled + Abgebrochen + + + + Downloading hash signature failed. + Herunterladen der Prüfsumme fehlgeschlagen. + + + + + Download Error + Fehler beim Herunterladen + + + + Hash verification while downloading failed. This is a temporary error, please retry. + Prüfsumme ungültig beim Herunterladen. Dies ist ein kurzzeitiger Fehler, bitte erneut versuchen. + + + + Could not verify Hash + Prüfsumme konnte nicht geprüft werden. + + + + Could not open %1 + Konnte Datei "%1" nicht öffnen. + + + + Could not download archive: %1 : %2 + Konnte Archiv %1 nicht herunterladen. Fehlermeldung: %2 + + + + Could not fetch archives: %1 +Error while loading %2 + Konnte Archiv nicht laden. Fehler: %1 +Fehler beim Laden von %2 + + + + Downloading archive hash for component: %1 + Prüfsumme für Komponente %1 wird heruntergeladen. + + + + Downloading archive for component: %1 + Archiv für Komponente %1 wird heruntergeladen. + + + + Scheme not supported: %1 (%2) + Schema "%1" nicht unterstützt in "%2". + + + + Could not find component for: %1. + Konnte keine Komponente für Datei %1 finden. + + + + QInstaller::ElevatedExecuteOperation + + + Invalid arguments in %1: %2 arguments given, at least 1 expected. + Ungültige Argumente in %1: %2 Argumente erhalten, mindestens 1 erwartet. + + + + Execution failed: Could not start detached: "%1" + Ausführung fehlgeschlagen: Konnte %1 nicht detached starten. + + + + Execution failed: Could not start: "%1" + Ausführung fehlgeschlagen: Konnte %1 nicht starten. + + + + Execution failed(Crash): "%1" + Ausführung fehlgeschlagen (Absturz): "%1" + + + + Execution failed(Unexpected exit code: %1): "%2" + Ausführung fehlgeschlagen (Unerwarteter Fehlercode %1): "%2" + + + + QInstaller::EnvironmentVariableOperation + + + Invalid arguments in %0: %1 arguments given, 2-3 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, 2-3 erwartet. + + + + QInstaller::ExtractArchiveOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, 2 erwartet. + + + + QInstaller::ExtractArchiveOperation::Runnable + + + Could not open %1 for reading: %2. + Konnte Datei %1 nicht zum Lesen öffnen. Fehlermeldung: %2 + + + + Error while extracting %1: %2. (Maybe the target dir(%3) is blocked by another process.) + Fehler beim Auspacken von %1. Fehlermeldung: %2 (Eventuell ist das Zielverzeichnis "%3" durch einen anderen Prozess blockiert.) + + + + Error while extracting %1: %2. + Fehler beim Auspacken von %1. Fehlermeldung: %2 + + + + Unknown exception caught while extracting %1. + Beim Auspacken von %1 trat eine unbekannte Ausnahmebedingung auf. + + + + QInstaller::FakeStopProcessForUpdateOperation + + + These processes should be stopped to continue: + +%1 + Diese Prozesse sollten beendet werden, um fortsetzen zu können: + +%1 + + + + QInstaller::FinishedPage + + + Completing the %1 Wizard + Beende den %1 Assistenten. + + + + Click Done to exit the %1 Wizard. + Klicken sie "Fertig", um den %1 Assistenten zu beenden. + + + + + + %1 + !!%1 + + + + Click Finish to exit the %1 Wizard. + Klicken sie "Fertig", um den %1 Assistenten zu beenden. + + + + Restart + Neu starten + + + + Run %1 now. + Starte jetzt %1. + + + + The %1 Wizard failed. + Der %1 Assistent ist fehlgeschlagen. + + + + QInstaller::GetRepositoryMetaInfoJob + + + Empty repository URL. + Leere Quelladresse. + + + + Invalid repository URL: %1. + Ungültige Quelladresse: %1 + + + + URL scheme not supported: %1 (%2). + Adressschema "%1" nicht unterstützt in Adresse "%2". + + + + Retrieving component meta information... + Empfange Komponentenmetainformationen... + + + + Could not move Updates.xml to target location: %1. + Konnte Updates.xml nicht an die Zieladresse verschieben. Fehlermeldung: %1 + + + + Could not open Updates.xml for reading: %1. + Konnte Updates.xml nicht zum Lesen öffnen. Fehlermeldung: %1 + + + + Could not fetch a valid version of Updates.xml from repository: %1. Error: %2. + Konnte keine gültige Version der Updates.xml aus der Quelle %1 herunterladen. Fehlermeldung: %2 + + + + + + Download Error + Fehler beim Herunterladen + + + + Parsing component meta information... + Einlesen der Metainformationen... + + + + Repository updates received. + Quellenaktualisierung erhalten. + + + + Finished updating component meta information... + Aktualisierung der Metainfoarmationen beendet... + + + + Could not fetch Updates.xml from repository: %1. Error: %2 + Konnte keine Updates.xml aus der Quelle %1 herunterladen. Fehlermeldung: %2 + + + + Could not download meta information for component: %1. Error: %2 + Konnte Metainformationen der Komponente %1 nicht herunterladen. Fehlermeldung: %2 + + + Could not fetch Updates.xml from repository: %1. Error: %2. + Konnte keine Updates.xml aus der Quelle %1 herunterladen. Fehlermeldung: %2 + + + + Retrieving component information from remote repository... + Empfange Komponenten Informationen aus der Quelle... + + + + Could not open meta info archive: %1. Error: %2. + Konnte Archiv mit Metainformationen %1 nicht öffnen. Fehlermeldung: %2 + + + + Bad hash. + Ungültige Prüfsumme. + + + The RSA signature of one component could not be verified. + Die Prüfsumme einer Komponente konnte nicht überprüft werden. + + + + The hash of one component does not match the expected one. + Die Prüfsumme einer Komponente entsprach nicht der erwateten. + + + Could not download meta information for component: %1. Error: %2. + Konnte Metainformationen der Komponente %1 nicht herunterladen. Fehlermeldung: %2 + + + + QInstaller::GetRepositoryMetaInfoJob::ZipRunnable + + + Error while extracting %1: %2. + Fehler beim Auspacken von %1. Fehlermeldung: %2 + + + + Unknown exception caught while extracting %1. + Beim Auspacken von %1 trat eine unbekannte Ausnahmebedingung auf. + + + + Could not open %1 for reading: %2. + Konnte Datei %1 nicht zum Lesen öffnen. Fehlermeldung: %2 + + + + QInstaller::GlobalSettingsOperation + + + Settings are not writable + Einstellungen konnten nicht geschrieben werden. + + + + Failed to write settings + Einstellungen konnten nicht geschrieben werden. + + + + Invalid arguments in 0%: %1 arguments given, at least 3 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, mindestens 3 erwartet. + + + + QInstaller::InstallIconsOperation + + + Invalid arguments in %0: %1 arguments given, 1 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 1 erwartet. + + + + QInstaller::IntroductionPage + + + Setup - %1 + Einrichten - %1 + + + + Welcome to the %1 Setup Wizard. + Willkomen zum %1 Einrichtungsassistenten. + + + + %1 + !!%1 + + + + QInstaller::LicenseAgreementPage + + + License Agreement + Lizenzabkommen + + + + Please read the following license agreement(s). You must accept the terms contained in these agreement(s) before continuing with the installation. + Bitte lesen sie die folgenden Lizanzabkommen. Sie müssen die Bedingungen in diesen Abkommen akzeptieren, um die Installation fortsetzen zu können. + + + + Alt+A + agree license + Lizenz akzeptieren + Alt+A + + + + I do not accept the licenses. + Ich akzeptiere die Bedingungen der obigen Lizenzvereinbarungen &nicht. Bitte beachten sie, dass diese Auswahl bedeutet, dass sie die Installation und das Herunterladen des Qt SDK abbrechen und dass sie alle Kopien des Qt SDK und alle Teile davon, die sich in ihrem Besitz befinden, löschen müssen. + + + I h<u>a</u>ve read and agree to the following terms contained in the license agreements accompanying the Qt SDK and additional items. I agree that my use of the Qt SDK is governed by the terms and conditions contained in these license agreements. + Ich habe die Bedingungen der folgenden Lizenzvereinbarungen zum Qt SDK und dazugehörigen Bestandteilen gelesen und &akzeptiert. Ich bin damit einverstanden, dass meine Benutzung des Qt SDK durch die Bedingungen in diesen Lizenzvereinbarungen bestimmt wird. + + + + + %1 + !!%1 + + + + I accept the licenses. + Ich habe die Bedingungen der folgenden Lizenzvereinbarungen zum Qt SDK und dazugehörigen Bestandteilen gelesen und &akzeptiert. Ich bin damit einverstanden, dass meine Benutzung des Qt SDK durch die Bedingungen in diesen Lizenzvereinbarungen bestimmt wird. + + + + Alt+D + do not agree license + Der Lizenz nicht zustimmen + Alt+N + + + I <u>d</u>o not accept the terms and conditions of the above listed license agreements. Please note by checking the box, you must cancel the installation or downloading the Qt SDK and must destroy all copies, or portions thereof, of the Qt SDK in your possessions. + Ich akzeptiere die Bedingungen der obigen Lizenzvereinbarungen &nicht. Bitte beachten sie, dass diese Auswahl bedeutet, dass sie die Installation und das Herunterladen des Qt SDK abbrechen und dass sie alle Kopien des Qt SDK und alle Teile davon, die sich in ihrem Besitz befinden, löschen müssen. + + + + QInstaller::LicenseOperation + + + No license files found to copy. + Keine Lizenzdateien zum Kopieren gefunden. + + + + Needed installer object in %1 operation is empty. + Das für die Anweisung %1 benötigte Installerobjekt ist leer. + + + + Can not write license file: %1. + Konnte Lizenzdatei %1 nicht schreiben. + + + + No license files found to delete. + Keine Lizenzdateien zum Löschen gefunden. + + + + QInstaller::LineReplaceOperation + + + Invalid arguments in %0: %1 arguments given, exactly 3 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 3 erwartet. + + + + QInstaller::MacReplaceInstallNamesOperation + + + Invalid arguments in %0: %1 arguments given, 3 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 3 erwartet. + + + + Can't invoke otool. Is Xcode installed? + Konnte otool nicht aufrufen. Ist Xcode installiert? + + + + Can't start process %0. + Konnte Prozess %0 nicht starten. + + + + QInstaller::PackageManagerCore + + + Error writing Uninstaller + Fehler beim Schreiben des Deinstallers + + + + +Downloading packages... + +Lade Pakete herunter... + + + + Installation canceled by user + Installation durch den Nutzer abgebrochen + + + + All downloads finished. + Alle Herunterladeprozesse abgeschlossen. + + + + + Error + Fehler + + + + Cancelling the Installer + Breche den Installationsvorgang ab + + + + Authentication Error + Autentifizierungsfehler + + + + Some components could not be removed completely because admin rights could not be acquired: %1. + Einige Komponenten konnten nicht vollständig entfernt werden, weil die nötigen Systemverwalterrechte nicht erlangt werden konnten. Fehlermeldung: %1 + + + + Unknown error. + Unbekannter Fehler. + + + + Some components could not be removed completely because an unknown error happened. + Einige Komponenten konnten nicht vollständig entfernt werden, weil ein unbekannter Fehler auftrat. + + + + Application not running in Package Manager mode! + Die Anwendung ist nicht im Paketverwaltermodus! + + + + No installed packages found. + Keine installierten Pakete gefunden. + + + + Application running in Uninstaller mode! + Die Anwendung befindet sich im Deinstallierermodus! + + + + invalid + ungültig + + + + QInstaller::PackageManagerCorePrivate + + + + + + Error + Fehler + + + + Component(s) added as automatic dependencies + Komponenten, die als automatische Abhängigkeiten zugefügt wurden + + + + Added as dependency for %1. + Als Abhängigkeit für %1 zugefügt. + + + + Component(s) that have resolved Dependencies + Komponenten, die aufgelöste Abhängigkeiten besitzen + + + + Selected Component(s) without Dependencies + Ausgewählte Komponenten ohne Abhängigkeiten + + + + Access error + Zugriffsfehler + + + + Format error + Formatfehler + + + + Could not write installer configuration to %1: %2 + Konnte Einstellungen des Installers nicht nach %1 schreiben. Fehlermeldung: %2 + + + + Stop Processes + Prozesse anhalten + + + + These processes should be stopped to continue: + +%1 + Diese Prozesse sollten beendet werden, um fortsetzen zu können: + +%1 + + + + + + Installation canceled by user + Installation durch den Nutzer abgebrochen + + + + Could not write uninstaller to %1: %2 + Konnte Deinstaller nicht nach %1 schreiben. Fehlermeldung: %2 + + + + Found a binary data file, but we are the installer and we should read the binary resource from our very own binary! + Binäre Quelldatei gefunden, aber als Installer sollten wir die binären Quellen aus unserer eigenen Binärdatei lesen! + + + + Could not write uninstaller binary data to %1: %2 + Konnte Binäre Datei des Deinstallers nicht nach %1 schreiben. Fehlermeldung: %2 + + + + ProductName should be set + ProductName muss gesetzt sein + + + + Variable 'TargetDir' not set. + TargetDir muss gesetzt sein. + + + + + Preparing the installation... + Bereite Installation vor... + + + + + Creating Uninstaller + Erstelle Deinstallierer + + + + +Installation finished! + +Installation abgeschlossen! + + + + +Installation aborted! + +Installation abgebrochen! + + + + Removing deselected components... + Entferne abgewählte Komponenten... + + + + +Update finished! + +Aktualisierung beendet! + + + + +Update aborted! + +Aktualisierung abgebrochen! + + + + +Deinstallation finished! + +Deinstallation abgeschlossen! + + + + +Deinstallation aborted! + +Deinstallation abgebrochen! + + + + +Installing component %1 + +Installiere Komponente %1 + + + + + Installer Error + Installationsfehler + + + + Error during installation process (%1): +%2 + Fehler beim Installieren von Komponente %1: +%2 + + + + Cannot prepare uninstall + Kann Deinstallation nicht vorbereiten + + + + Cannot start uninstall + Kann Deinstallation nicht starten + + + + Error during uninstallation process: +%1 + Fehler bei der Deinstallation: +%1 + + + + Unknown error + Unbekannter Fehler + + + + Could not retrieve remote tree: %1. + Kann entfernten Baum nicht empfangen: %1 + + + + Failure to read packages from: %1. + Fehler beim Lesen der Pakete von %1 + + + + Could not retrieve meta information: %1 + Konnte die Metainformationen nicht empfangen: %1 + + + + + Could not add temporary update source information. + Konnte Informationen zu temporären Aktualisierungsquellen nicht hinzufügen. + + + + Could not find any update source information. + Konnte keine Informationen zu Aktualisierungsquellen finden. + + + + QInstaller::PackageManagerGui + + + %1 Setup + %1 Einrichtung + + + %1 + !!%1 + + + + Maintain %1 + %1 verwalten + + + + + Question + Frage + + + + Do you want to abort the %1 process? + Möchten sie den %1 Vorgang abbrechen? + + + + uninstallation + Deinstallation + + + + installation + Installation + + + + installer + Installer + + + + uninstaller + Deinstaller + + + + maintenance + Wartung + + + + Do you want to abort the %1 application? + Möchten sie die %1 Anwendung abbrechen? + + + + Settings + Einstellungen + + + + QInstaller::PackageManagerPage + + + + %1 + !!%1 + + + + QInstaller::PerformInstallationForm + + + + + &Show Details + &Zeige Details + + + + &Hide Details + &Verstecke Details + + + + QInstaller::PerformInstallationPage + + + &Uninstall + &Deinstallieren + + + + Uninstalling %1 + Deinstalliere %1 + + + + &Update + &Aktualisieren + + + + Updating components of %1 + Aktualisiere Komponenten des %1 + + + + &Install + &Installieren + + + + Installing %1 + Installiere %1 + + + + %1 + !!%1 + + + + QInstaller::QtPatchOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 2 erwartet. + + + + First argument should be 'linux', 'mac' or 'windows'. No other type is supported at this time. + Das erste Argument muss entweder 'linux', 'mac' oder 'windows' lauten. Keine anderen Typen werden zur Zeit unterstützt. + + + + QMake from the current Qt version +(%1)is not existing. Please file a bugreport with this dialog at https://bugreports.qt-project.org. + Das QMake der aktuell verwendeten Qt Version +(%1) kann nicht gefunden werden. Bitte erstellen sie einen Bugreport unter https://bugreports.qt-project.org. + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: "%2" + Die Ausgabe von +%1 -query +ist ungültig. Bitte erstellen sie einen Bugreport unter https://bugreports.qt-project.org. +Ausgabe: "%2" + + + + Qt patch error: new Qt dir(%1) +needs to be less than 255 characters. + Qt patch Fehler: neuer Qt Ordnername (%1) +darf nicht mehr als 255 Zeichen lang sein. + + + + + Qt patch error: Can not open %1.(%2) + Qt patch Fehler: Kann %1 nicht öffnen. Fehlermeldung: %2 + + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + Error while relocating Qt: %1 + Fehler beim Relocaten von Qt: %1 + + + + The installer was not able to get the unpatched path from +%1.(maybe it is broken or removed) +It tried to patch the Qt binaries, but all other files in Qt are unpatched. +This could result in a broken Qt version. +Sometimes it helps to restart the installer with a switched off antivirus software. + Der Installer konnte den ursprünglichen Pfad aus %1 +nicht lesen (möglicherweise ist es beschädigt oder entfernt). +Er hat versucht, die Qt Binärdateien trotzdem zu patchen, aber alle anderen +Dateien im Qt sind ungepatcht. Das kann zu einer beschädigten Qt Version führen. +Eventuell hilft es, einen laufenden Virenscanner auszuschalten und den Installer erneut zu starten. + + + + QInstaller::ReadyForInstallationPage + + + + &Show Details + &Zeige Details + + + + U&ninstall + &Deinstallieren + + + + Ready to Uninstall + Bereit zum Deinstallieren + + + + Setup is now ready to begin removing %1 from your computer.<br><font color="red">The program dir %2 will be deleted completely</font>, including all content in that directory! + Das Einrichtungsprogramm ist jetzt bereit, %1 von ihrem Computer zu entfernen. <br><font color="red">Das Programmverzeichnis %2 wird vollständig gelöscht</font>, inklusive allen Inhalten in diesem Ordner! + + + + U&pdate + &Aktualisieren + + + + Ready to Update Packages + Bereit zum Aktualisieren der Pakete + + + + Setup is now ready to begin updating your installation. + Das Einrichtungsprogramm ist jetzt bereit, ihre Installation zu aktualisieren. + + + + &Install + &Installieren + + + + Ready to Install + Bereit zum Installieren + + + + Setup is now ready to begin installing %1 on your computer. + Das Einrichtungsprogramm ist jetzt bereit, %1 auf ihrem Computer einzurichten. + + + + Not enough disk space to store temporary files and the installation! Available space: %1, at least required %2. + Nicht genügend Plattenplatz für temporäre Dateien und die Installation! Verfügbarer Platz: %1, mindestens benötigt: %2. + + + + Not enough disk space to store all selected components! Available space: %1, at least required: %2. + Nicht genügend Plattenplatz für alle ausgewählten Komponenten! Verfügbarer Platz: %1, mindestens benötigt: %2. + + + + Not enough disk space to store temporary files! Available space: %1, at least required: %2. + Nicht genügend Plattenplatz für temporäre Dateien! Verfügbarer Platz: %1, mindestens benötigt: %2. + + + + The volume you selected for installation seems to have sufficient space for installation, but there will be less than 1% of the volume's space available afterwards. %1 + Die für die Installation ausgewählte Partition scheint genügend Platz zu bieten, aber es werden anschließend weniger als 1% der Partitionsgröße verfügbar sein. %1 + + + + The volume you selected for installation seems to have sufficient space for installation, but there will be less than 100 MB available afterwards. %1 + Die für die Installation ausgewählte Partition scheint genügend Platz zu bieten, aber es werden anschließend weniger als 100 MiB verfügbar sein. %1 + + + + Can not resolve all dependencies! + Konnte nicht alle Abhängigkeiten auflösen! + + + + Components about to be removed. + Komponenten, die entfernt werden. + + + + &Hide Details + &Verstecke Details + + + + QInstaller::RegisterDefaultDebuggerOperation + + + + Invalid arguments in %0: %1 arguments given, 2 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 2 erwartet. + + + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + Can't read from tool chains xml file(%1) correctly. + Kann nicht aus der Toolchains XML Datei (%1) lesen. + + + + QInstaller::RegisterDocumentationOperation + + + Invalid arguments in %0: %1 arguments given, 1 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 1 erwartet. + + + + Could not register help file %1: File not found. + Konnte Hilfedatei %1 nicht registrieren: Datei nicht gefunden. + + + + Could not unregister help file %1: File not found. + Konnte Hilfedatei %1 nicht unregistrieren: Datei nicht gefunden. + + + + QInstaller::RegisterFileTypeOperation + + + Invalid arguments in %0 + Ungültige Argumente in %0. + + + + Register File Type: Invalid arguments + Register File Type: Ungültige Argumente + + + + QInstaller::RegisterQtInCreatorOperation + + + Invalid arguments in %0: %1 arguments given, minimum 3 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, mindestens 3 erwartet. + + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + Can't read from tool chains xml file(%1) correctly. + Kann nicht aus der Toolchains XML Datei (%1) lesen. + + + + QInstaller::RegisterQtInCreatorV23Operation + + + + Invalid arguments in %0: %1 arguments given, minimum 4 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, mindestens 4 erwartet. + + + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + The given TargetDir %1 is not a valid/existing dir. + Das übergebene TargetDir %1 ist kein gültiger Ordner oder existiert nicht. + + + + QInstaller::RegisterQtInCreatorV2Operation + + + + Invalid arguments in %0: %1 arguments given, minimum 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, mindestens 2 erwartet. + + + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + The given TargetDir %1 is not a valid/existing dir. + Das übergebene TargetDir %1 ist kein gültiger Ordner oder existiert nicht. + + + + QInstaller::RegisterToolChainOperation + + + + Invalid arguments in %0: %1 arguments given, minimum 4 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, mindestens 4 erwartet. + + + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + + Can't read from tool chains xml file(%1) correctly. + Kann nicht aus der Toolchains XML Datei (%1) lesen. + + + + + Some arguments are not right in %1 operation. + Einige Argumente sind in der %1 Anweisung nicht erlaubt. + + + + QInstaller::ReplaceOperation + + + Invalid arguments in %0: %1 arguments given, 3 expected. + Ungültige Argumentein %0: %1 Argumente erhalten, 3 erwartet. + + + + QInstaller::RestartPage + + + Completing the %1 Setup Wizard + Vervollständige den %1 Assistenten + + + + QInstaller::SelfRestartOperation + + + Needed installer object in "%1" operation is empty. + Das für die Anweisung "%1" benötigte Installerobjekt ist leer. + + + + Self Restart: Only valid within updater or packagemanager mode. + Self Restart: Nur im updater oder packagemanager Modus erlaubt. + + + + Self Restart: Invalid arguments + Self Restart: Ungültige Argumente + + + + QInstaller::SetDemosPathOnQtOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 2 erwartet. + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: %2 + Die Ausgabe von +%1 -query +ist ungültig. Bitte erstellen sie einen Bugreport unter https://bugreports.qt-project.org. +Ausgabe: %2 + + + + Qt patch error: new Qt demo path (%1) +needs to be less than 255 characters. + Qt patch Fehler: neuer Qt-Demos Ordnername (%1) +darf nicht mehr als 255 Zeichen lang sein. + + + + QInstaller::SetExamplesPathOnQtOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 2 erwartet. + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: %2 + Die Ausgabe von +%1 -query +ist ungültig. Bitte erstellen sie einen Bugreport unter https://bugreports.qt-project.org. +Ausgabe: %2 + + + + Qt patch error: new Qt example path (%1) +needs to be less than 255 characters. + Qt patch Fehler: neuer Qt-Examples Ordnername (%1) +darf nicht mehr als 255 Zeichen lang sein. + + + + QInstaller::SetImportsPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 2 erwartet. + + + + QInstaller::SetPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 3 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 3 erwartet. + + + + The second type/value needs to be one of: %1 + Der zweite Typ muss einen der folgenden Werte haben: %1 + + + + QInstaller::SetPluginPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 2 erwartet. + + + + QInstaller::SetQtCreatorValueOperation + + + Invalid arguments in %0: %1 arguments given, exactly 4 expected (rootInstallPath, group, key, value). + Ungültige Argumente in %0: %1 Argumente erhalten, genau 4 erwartet (rootInstallPath, group, key, value). + + + + Needed installer object in %1 operation is empty. + Das für die Anweisung %1 benötigte Installerobjekt ist leer. + + + + QInstaller::SimpleMoveFileOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 2 erwartet. + + + + None of the arguments can be empty: source(%1), target(%2). + Keins dieser Argumente darf leer sein: Quelle (%1), Ziel (%2). + + + + Can not copy source(%1) to target(%2), because target exists and is not removable. + Kann %1 nicht nach %2 kopieren, weil das Ziel bereits existiert und nicht entfernt werden kann. + + + + Can not move source(%1) to target(%2): %3 + Kann %1 nicht nach %2 verschieben. Fehlermeldung: %3 + + + + + Move %1 to %2. + Verschiebe %1 nach %2. + + + + QInstaller::StartMenuDirectoryPage + + + Start Menu shortcuts + Verknüpfungen im Startmenü + + + + Select the Start Menu in which you would like to create the program's shortcuts. You can also enter a name to create a new folder. + Wählen sie den Ordner im Startmenü, in dem die Verknüpfungen zur Anwendung erstellt werden sollen. Sie können einen Namen angeben, um einen neuen Ordner anzulegen. + + + + QInstaller::TargetDirectoryPage + + + Installation Folder + Installationsverzeichnis + + + + Please specify the folder where %1 will be installed. + Bitte geben sie den Ordner an, in dem %1 installiert werden soll. + + + + + + + + + %1 + !!%1 + + + + Alt+R + browse file system to choose a file + Dateisystem durchsuchen, um eine Datei auszuwählen + Alt+D + + + + B&rowse... + &Durchsuchen... + + + + + Error + Fehler + + + + The install directory cannot be empty, please specify a valid folder. + Der Name des Installationsverzeichnisses darf nicht leer sein, bitte einen gültigen Ordner angeben. + + + + As the install directory is completely deleted, installing in %1 is forbidden. + Da das Installationsverzeichnis komplett gelöscht wird, ist eine Installation nach %1 nicht zulässig. + + + + Warning + Warnung + + + + You have selected an existing, non-empty folder for installation. Note that it will be completely wiped on uninstallation of this application. It is not advisable to install into this folder as installation might fail. Do you want to continue? + Sie haben einen existierenden, nicht leeren Ordner für die Installation ausgewählt. Dieser wird bei der Deinstallation dieser Anwendung komplett gelöscht werden. Es wird nicht empfohlen, in diesen Ordner zu installaieren. Möchten sie trotzdem fortsetzen? + + + + Select Installation Folder + Installationsverzeichnis auswählen. + + + + QInstaller::UpdateCreatorSettingsFrom21To22Operation + + + Invalid arguments in %0: %1 arguments given, exactly 0 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, genau 0 erwartet. + + + + Needed installer object in %1 operation is empty. + Das für die Anweisung %1 benötigte Installerobjekt ist leer. + + + + Can not remove previous registered Qt Versions in %1 operation. + Kann die bereits registrierte Qt Version in der %1 Anweisung nicht entfernen. + + + + QInstallerCreator::Archive + + + Could not create %1: %2 + Konnte Ordner %1 nicht anlegen. Fehlermeldung: %2 + + + + Could not open archive file %1 for reading. + Konnte Archivdatei %1 nicht zum Lesen öffnen. + + + + Could not create archive from %1: Not a file. + Kann kein Archib aus %1 erstellen: Es ist keine Datei. + + + + Error while packing directory at %1 + Fehler beim Einpacken des Ordners %1. + + + + QObject + + + + + Could not copy %1 to %2: %3 + Konnte Datei %1 nicht nach %2 kopieren. Fehlermeldung: %3 + + + + Could not create temporary file for generated rcc project file + Konnte keine temporäre Datei für die erzeugte rcc Projektdatei anlegen. + + + + + Could not copy %1. + Konnte %1 nicht kopieren. + + + Could not remove the private key from config.xml + Konnte den privaten Schlüssel nicht aus der config.xml entfernen. + + + + Error: Packages parameter missing argument. + Fehler: Dem Packages Parameter fehlt ein Argument. + + + + Error: Package directory not found at the specified location. + Fehler: Paketordner konnte an der angegebenen Stelle nicht gefunden werden. + + + + Error: Package to exclude missing. + Fehler: Die --exclude Option braucht die auszuschliessenden Komponenten als Argument. + + + + Error: Template parameter missing argument. + Fehler: Dem Template Parameter fehlt ein Argument. + + + + Error: Template not found at the specified location. + Fehler: Template konnte an der angegebenen Stelle nicht gefunden werden. + + + + Error: Config parameter missing argument. + Fehler: Dem Config Parameter fehlt ein Argument. + + + + Error: Config directory %1 not found at the specified location. + Fehler: Konfigurationsordner konnte an der angegebenen Stelle nicht gefunden werden. + + + + Error: Configuration %1 is not a directory. + Fehler: Konfiguration %1 ist kein Ordner. + + + + Error: Config directory %1 is not readable. + Fehler: Konfigurationsordner %1 ist nicht lesbar. + + + + Error: Resource files to include missing. + Fehler: Die --resources Option braucht die einzuschliessenden Resourcen als Argument. + + + + Error: Target parameter missing. + Fehler: Der Target Parameter fehlt. + + + + Error: No components selected. + Fehler: Keine Komponenten ausgewählt. + + + + Error: No configuration directory selected. + Fehler: Keine Konfigurationsordner ausgewählt. + + + Could not create a RSA signature + Konnte keine RSA Unterschrift erstellen. + + + Created RSA signature could not be verified. Is the given public key wrong? + Die erstellte RSA Unterschrift konnte nicht überprüft werden. Ist der übergebene öffentliche Schlüssel korrekt? + + + + Component %1 can't contain '-'. + Komponentenname %1 enthält ein '-', was nicht erlaubt ist. + + + + Component %1 does not contain a package description. + Komponente %1 enthält keine Paketbeschreibung. + + + + Component package description for %1 is invalid. Error at line: %2, column: %3 -> %4 + Paketbeschreibung für Komponente %1 ist ungültig. Fehler in Zeile %2, Spalte %3. Fehlermeldung: %4 + + + + Component folder name must match component name: %1 in %2/ + Der Komponentenordner muss den selben Namen haben wie die Komponente: %1 in %2/ + + + + Circular dependencies detected. + Zyklische Abhängigkeiten gefunden. + + + + Couldn't find package for component %1. + Konnte kein Paket zur Komponente %1 finden. + + + + Folder %1 does not exist. + Odner %1 existiert nicht. + + + + Component version for %1 is invalid! <Version>%2</version> + Versionsnummer (%2) der Komponente %1 ist ungültig. + + + + + Could not move %1 to %2 + Konnte Datei %1 nicht nach %2 verschieben. + + + Could not open %1 for writing. + Konnte Datei %1 nicht zum Schreiben öffnen. + + + + Could not parse %1: line: %2, column: %3: %4 (%5) + Konnte Datei %1 nicht auswerten. Zeile: %2, Spalte: %3 - %4 (%5) + + + + Could not create directory %1. + Konnte Ordner %1. nicht anlegen. + + + + Could not copy the script %1 to its target location %2. + Konnte das Skript %1 nicht nach %2 kopieren. + + + + Couldn't find any user interface matching %1 while copying user interfaces of %2. + Konnte keine mit %1 übereinstimmende Nutzungsschnittstelle beim Kopieren von %2 finden. + + + + Could not copy the UI file %1 to its target location %2. + Konnte die Nutzungsschnittstellendatei %1 nicht nach %2 kopieren. + + + + Could not find any translation file matching %1 while copying translations of %2. + Konnte keine mit %1 übereinstimmende Ãœbersetzungsdatei beim Kopieren von %2 finden. + + + Could not find any user interface matching %1 while copying user interfaces of %2. + Konnte keine mit %1 übereinstimmende Nutzungsschnittstelle beim Kopieren von %2 finden. + + + + Could not copy the translation %1 to its target location %2. + Konnte die Ãœbersetzung %1 nicht nach %2 kopieren. + + + + Could not find any license matching %1 while copying license files of %2. + Konnte keine mit %1 übereinstimmende Lizenz beim Kopieren von %2 finden. + + + + Could not copy the license file %1 to its target location %2. + Konnte die Lizenzdatei %1 nicht nach %2 kopieren. + + + Could not open %1 for writing + Konnte Datei %1 nicht zum Schreiben öffnen. + + + + Could not create repository folder for component %1 + Konnte Quellenordner für Komponente %1 nicht anlegen. + + + Could not open %1 for writing: %2 + Konnte Datei %1 nicht zum Schreiben öffnen. Fehlermeldung: %2 + + + + Error: Package to exclude missing + Fehler: Die --exclude Option braucht die auszuschliessenden Komponenten als Argument. + + + + Error: Packages parameter missing argument + Fehler: Dem Packages Parameter fehlt ein Argument. + + + + Error: Package directory not found at the specified location + Fehler: Paketordner konnte an der angegebenen Stelle nicht gefunden werden. + + + + + Error: Config parameter missing argument + Fehler: Dem Config Parameter fehlt ein Argument. + + + + Error: Config directory %1 not found at the specified location + Fehler: Konfigurationsordner %1 konnte an der angegebenen Stelle nicht gefunden werden. + + + + Error: Configuration %1 is not a directory + Fehler: Konfiguration %1 ist kein Ordner. + + + + Error: Config directory %1 is not readable + Fehler: Konfigurationsordner %1 ist nicht lesbar. + + + + Repository target folder %1 already exists! + Quellenordner %1 existiert bereits! + + + + Could not remove folder %1 + Konnte Ordner %1 nicht löschen. + + + + Could not remove folder %1: Unknown error + Konnte Ordner %1 nicht löschen. Unbekannter Fehler. + + + + Searched whole file, no marker found + Gesamte Datei durchsucht, kein Zauberkeks gefunden. + + + + Could not seek to %1 in file %2: %3 + Konnte nicht bis zur Position %1 in Datei %2 suchen. Fehlermeldung: %3 + + + + No marker found, stopped after %1 bytes. + Kein Zauberkeks gefunden, nach %1 Bytes abgebrochen. + + + + No marker found, unknown exception caught. + Keinen Zauberkeks gefunden, unbekannte Ausnahmebedingung. + + + + Cannot create zipped file for path %1: %2 + Konnte keine gepackte Datei aus Pfad %1 erstellen. Fehlermeldung: %2 + + + + Could not seek to in-binary resource. (offset: %1, length: %2) + Konnte nicht bis zur in der Binärdatei enthaltene Ressource suchen. (Offset: %1, Länge: %2) + + + + Could not register in-binary resource. + Konnte in der Binärdatei enthaltene Ressource nicht registrieren. + + + + + Could not open binary %1: %2 + Konnte Binärdatei %1 nicht öffnen. Fehlermeldung: %2 + + + + Could not seek to binary layout section. + Konnte nicht bis zum Abschnitt mit dem Layout der Binärdatei suchen. + + + + Could not seek to metadata index. + Konnte nicht bis zum Index der Metadaten suchen. + + + + Could not seek to operation list. + Konnte nicht bis zur Anweisungsliste suchen. + + + + Could not seek to component index information. + Konnte nicht bis zur Komponentenindexinformation suchen. + + + + Could not seek to component index. + Konnte nicht bis zum Komponentenindex suchen. + + + + Cannot open file %1 for reading: %2 + Konnte Datei %1 nicht zum Lesen öffnen. Fehlermeldung: %2 + + + + + Cannot open file %1 for writing: %2 + Konnte Datei %1 nicht zum Schreiben öffnen. Fehlermeldung: %2 + + + + Write failed after %1 bytes: %2 + Das Schreiben ist nach %1 Bytes fehlgeschlagen. Fehlermeldung: %2 + + + + Read failed after %1 bytes: %2 + Das Lesen ist nach %1 Bytes fehlgeschlagen. Fehlermeldung: %2 + + + + Could not remove file %1: %2 + Konnte Datei %1 nicht löschen. Fehlermeldung: %2 + + + + Could not remove folder %1: %2 + Konnte Ordner %1 nicht löschen. Fehlermeldung: %2 + + + + + Could not create folder %1 + Konnte Ordner %1 nicht anlegen. + + + + Could not copy file from %1 to %2: %3 + Konnte Datei %1 nicht nach %2 kopieren. Fehlermeldung: %3 + + + + Could not move file from %1 to %2: %3 + Konnte Datei %1 nicht nach %2 verschieben. Fehlermeldung: %3 + + + + + Could not create folder %1: %2 + Konnte Ordner %1 nicht anlegen. Fehlermeldung: %2 + + + + Could not open temporary file: %1 + Konnte temporäre Datei nicht öffnen. Fehlermeldung: %1 + + + + Could not open temporary file for template %1: %2 + Konnte keine temporäre Datei für die Vorlage %1 öffnen. Fehlermeldung: %2 + + + + Could not create temporary folder for template %1: %2 + Konnte keine temporäre Datei für die Vorlage %1 anlegen. Fehlermeldung: %2 + + + + Could not create lock file %1: %2 + Konnte keine Sperrdatei %1 anlegen. Fehlermeldung: %2 + + + + Could not write PID to lock file %1: %2 + Konnte PID nicht in die Sperrdatei %1 schreiben. Fehlermeldung: %2 + + + + Could not lock lock file %1: %2 + Konnte keinen Exklusivzugriff auf Sperrdatei %1 erhalten. Fehlermeldung: %2 + + + + Could not unlock lock file %1: %2 + Konnte Exklusivzugriff auf Sperrdatei %1 nicht abgeben. Fehlermeldung: %2 + + + + Path exists but is not a folder: %1 + Pfad %1 exisitiert, aber ist kein Ordner. + + + + Could not create folder: %1 + Konnte Ordner %1 nicht anlegen. + + + + Could not create temporary file + Konnte temporäre Datei nicht anlegen. + + + + Could not retrieve property %1 for item %2 + Konnte Eigenschaft %2 von %2 nicht erhalten. + + + + Property %1 for item %2 not of type VT_FILETIME but %3 + Eigenschaft %1 von %2 ist nicht vom Typ VT_FILETIME, sondern vom Typ %3. + + + + Could not convert file time to local time + Konnte die Dateizeit nicht in die lokale Zeit umwandeln. + + + + Could not convert local file time to system time + Konnte die lokale Dateizeit nicht in die Systemzeit umwandeln. + + + + + + Could not load codecs + Konnte Codecs nicht laden. + + + + + + Could not retrieve default format + Konnte Standardformat nicht finden. + + + + Could not open archive + Konnte Archiv nicht öffnen. + + + + No CArc found + Keine CArc gefunden. + + + + + Could not retrieve number of items in archive + Konnte Anzahl Dateien im Archiv nicht feststellen. + + + + + + + Could not retrieve path of archive item %1 + Konnte Pfad des Archivs %1 nicht feststellen. + + + + + + + + + Unknown exception caught (%1) + Unbekannte Ausnahmebedingung (%1). + + + + + Failed + Fehlgeschlagen + + + + Could not create file system link at %1 + Konnte keine Dateisystemverknüpfung (Hardlink) %1 anlegen. + + + + Could not create softlink at %1 + Konnte keine Dateisystemverknüpfung (Softlink) %1 anlegen. + + + + Could not create archive %1 + Konnte kein Archiv %1 anlegen. + + + + CArc index %1 out of bounds [0, %2] + CArc Index %1 ausserhalb der Grenzen [0, %2]. + + + + Item index %1 out of bounds [0, %2] + Itemindex %1 ausserhalb der Grenzen [0, %2]. + + + + Extracting %1 failed. + Entpacken von %1 fehlgeschlagen. + + + + Could not create output file for writing: %1 + Konnte Ausgabedatei nicht zum Schreiben öffnen. Fehlermeldung: %1 + + + + Extraction failed. + Entpacken fehlgeschlagen. + + + + + Authorization required + Autorisierung benötigt. + + + + + Enter your password to authorize for sudo: + Geben sie ihr Passwort ein, um sich für sudo zu autentifizieren: + + + + Error acquiring admin rights + Fehler beim Erlangen von Administratorrechten. + + + + Could not backup file %1 + Konnte Datei %1 nicht sichern. + + + + Could not delete file %1 + Konnte Datei %1 nicht löschen. + + + + Could not restore backup file into %1 + Konnte Datei %1 nicht wiederherstellen. + + + + Invalid arguments: %1 arguments given, 2 or 3 expected (optional: "workingDirectory=..."). + Ungültige Argumente: %1 Argumente erhalten, 2 oder 3 erwartet (optional: "workingDirectory=..."). + + + + + Failed to overwrite %1: %2 + Konnte Datei %1 nicht überschreiben. Fehlermeldung: %2 + + + + Registry path %1 is not writable + Registrierungspfad %1 ist nicht beschreibbar. + + + + Could not write to registry path %1 + Registrierungspfad %1 ist nicht beschreibbar. + + + + Number of arguments does not match : one is required + Ungültige Anzahl Argumente: genau 1 erwartet. + + + Bad signature + Ungültige Unterschrift + + + Bad hash + Ungültige Prüfsumme. + + + + Invalid Argument: source folder must not be empty. + Ungültiges Argument: Quellordner darf nicht leer sein. + + + + Could not backup file %1: %2 + Konnte Datei %1 nicht sichern. Fehlermeldung: %2 + + + + Failed to copy file %1: %2 + Konnte Datei nicht nach %1 kopieren. Fehlermeldung: %2 + + + + Could not create folder at %1: %2 + Konnte Ordner %1 nicht anlegen. Fehlermeldung: %2 + + + + Failed to open %1 for reading + Konnte Datei nicht zum Lesen öffnen. Fehlermeldung: %1 + + + + Failed to open %1 for writing + Konnte Datei %1 nicht zum Schreiben öffnen. + + + + Invalid arguments: %1 arguments given, %2 to %3 expected. + Ungültige Argumente: %1 Argumente erhalten, %2 bis %3 erwartet. + + + + Invalid arguments: %1 arguments given, %2 expected. + Ungültige Argumente: %1 Argumente erhalten, %2 erwartet. + + + + Error while elevating access rights. + Fehler beim Erlangen von Administratorrechten. + + + + Failed to seek in file %1: %2 + Suchen in Datei %1 fehlgeschlagen. Fehlermeldung: %2 + + + + kB + kB + + + + MB + MB + + + + GB + GB + + + + Could not open the requested script file at %1: %2 + Konnte angeforderte Skriptdatei %1 nicht öffnen. Fehlermeldung: %2 + + + + + Exception while loading the control script %1 + Ausnahme beim Laden des Kontrollskripts: %1 + + + + + Registering file types in only supported on Windows. + Registrierung von Dateitypen wird nur unter Windows unterstützt. + + + + Failed to seek in file %1. Reason: %2. + Suchen in Datei %1 fehlgeschlagen. Fehlermeldung: %2 + + + + Failed to open %1 for reading. + Konnte Datei %1 nicht zum Lesen öffnen. + + + + Failed to open %1 for writing. + Konnte Datei %1 nicht zum Schreiben öffnen. + + + + Settings + + + Could not open settings file %1 for reading: %2 + Konnte Einstellungsdatei %1 nicht zum Lesen öffnen. Fehlermeldung: %2 + + + + %1 is not valid: Installer root node expected. + %1 ist ungültig: 'Installer' wird als Wurzelknoten erwartet. + + + + Multiple %1 elements found, but only one allowed. + Mehrere %1 Elemente gefunden, aber nur eins ist erlaubt. + + + + SettingsDialog + + + Settings + Einstellungen + + + + Network + Netzwerk + + + + No proxy + Kein Proxy + + + + System proxy settings + Systemeinstellungen für Proxy + + + + Manual proxy configuration + Manuelle Konfiguration des Proxy + + + + HTTP proxy: + HTTP Proxy: + + + + + Port: + Port: + + + + HTTP proxy requires authentication + HTTP Proxy verlangt Autentifizierung + + + + + Username: + Nutzername: + + + + + Password: + Passwort: + + + + FTP proxy: + FTP Proxy: + + + + FTP proxy requires authentication + FTP Proxy verlangt Autentifizierung + + + + Repositories + Quellen + + + + Add Username and Password for authentication if needed. + Nutzername und Passwort für die Autentifizierung hinzufügen, falls benötigt. + + + + Use temporary repositories only + Verwende ausschließlich temporäre Quellen + + + + Add + Hinzufügen + + + + Remove + Entfernen + + + + Test + Testen + + + + + Show Passwords + Zeige Passwörter + + + + Check this to use repository during fetch. + Auswählen, um die Quelle zu verwenden. + + + + Add the username to authenticate on the server. + Nutzernamen eintragen, um sich gegenüber der Quelle zu autentifizieren. + + + + Add the password to authenticate on the server. + Passwort eintragen, um sich gegenüber der Quelle zu autentifizieren. + + + + The servers URL that contains a valid repository. + Adresse angeben, die auf eine gültige Quelle zeigt. + + + + There was an error testing this repository. + Beim testen des Repositories ist ein Fehler aufgetreten. + + + + Do you want to disable the tested repository? + Soll das getestete Repository ausgeschaltet werden? + + + + Hide Passwords + Verstecke Passwörter + + + + Use + Nutze + + + + Username + Nutzername + + + + Password + Passwort + + + + Repository + Quelle + + + + Default repositories + Standardquellen + + + + Temporary repositories + Temporäre Quellen + + + + User defined repositories + Benutzerdefinierte Quellen + + + + TargetDirectoryPageImpl + + + The installation path cannot be empty, please specify a valid folder. + Der Installationspfad darf nicht leer sein. Bitte einen gültigen Ordner angeben. + + + + The installation path cannot be relative, please specify an absolute path. + Der Installationspfad darf nicht relativ sein. Bitte einen absoluten Pfad angeben. + + + + The installation path must not contain !@#$%^&*:,; or spaces, please specify a valid folder. + Der Installationspfad darf nicht die Zeichen !@#$%^&*:,; oder Leerzeichen enthalten. Bitte einen gültigen Ordner angeben. + + + + Warning + Warnung + + + + Error + Fehler + + + + The path or installation directory contains non ASCII characters. This is currently not supported! Please choose a different path or installation directory. + Der Pfad zum Installationsverzeichnis enthält Zeichen ausserhalb des ASCII Zeichensatzes. Dies ist zur Zeit nicht unterstützt. Bitte wählen sie einen anderen Pfad für das Installationsverzeichnis. + + + + As the install directory is completely deleted installing in %1 is forbidden. + Da das Installationsverzeichnis komplett gelöscht wird, ist eine Installation nach %1 nicht zulässig. + + + + The folder you selected exists already and contains an installation. +Do you want to overwrite it? + Der ausgewählte Ordner existiert bereits und enthält eine Installation. +Möchten sie diese überschreiben? + + + + You have selected an existing, non-empty folder for installation. +Note that it will be completely wiped on uninstallation of this application. +It is not advisable to install into this folder as installation might fail. +Do you want to continue? + Sie haben einen existierenden, nicht leeren Ordner für die Installation ausgewählt. +Dieser wird bei der Deinstallation dieser Anwendung komplett gelöscht werden. +Es wird nicht empfohlen, in diesen Ordner zu installaieren. +Möchten sie trotzdem fortsetzen? + + + + You have selected an existing file or symlink, please choose a different target for installation. + + + + + TestRepository + + + Empty repository URL. + Leere Quelladresse. + + + + URL scheme not supported: %1 (%2). + Adressschema "%1" nicht unterstützt in Adresse "%2". + + + + Could not parse Updates.xml! Error: %1. + Ungültiges Format der Updates.xml. Fehlermeldung: %1 + + + + Updates.xml could not be opened for reading! + Konnte Updates.xml nicht zum Lesen öffnen. + + + + Updates.xml could not be found on server! + Updates.xml konnte auf dem Server nicht gefunden werden. + + + diff --git a/src/sdk/translations/en_us.ts b/src/sdk/translations/en_us.ts new file mode 100644 index 000000000..2a2bd413d --- /dev/null +++ b/src/sdk/translations/en_us.ts @@ -0,0 +1,3331 @@ + + + + + Component + + + Could not open archive %1: %2 + + + + + IntroductionPageImpl + + + Package manager + + + + + Update components + + + + + Remove all components + + + + + Retrieving information from remote installation sources... + + + + + No updates available. + + + + + Only local package management available. + + + + + KDJob + + + Canceled + + + + + KDSaveFile + + + Append mode not supported. + + + + + Read-only access not supported. + + + + + Could not backup existing file %1: %2 + + + + + + + TODO + + + + + KDUpdater::AppendFileOperation + + + Cannot backup file %1: %2 + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not open file %1 for writing: %2 + + + + + Cannot find backup file for %1. + + + + + Could not restore backup file for %1. + + + + + Could not restore backup file for %1: %2 + + + + + KDUpdater::CopyOperation + + + Could not backup file %1. + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not remove destination file %1: %2 + + + + + Could not copy %1 to %2: %3 + + + + + Could not delete file %1: %2 + + + + + Could not restore backup file into %1: %2 + + + + + KDUpdater::DeleteOperation + + + Cannot create backup of %1: %2 + + + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Cannot restore backup file for %1: %2 + + + + + KDUpdater::ExecuteOperation + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Execution failed: %1 + + + + + KDUpdater::FileDownloader + + + %L1 B + + + + + %L1 KB + + + + + %L1 MB + + + + + %L1 GB + + + + + Could not reopen downloaded file %1 for reading: %2 + + + + + Download canceled. + + + + + Cryptographic hashes do not match. + + + + + Download finished. + + + + + of + + + + + downloaded. + + + + + /sec + + + + + day + + + + + days + + + + + hour + + + + + hours + + + + + minute + + + + + minutes + + + + + second + + + + + seconds + + + + + - + + + + + remaining. + + + + + - unknown time remaining. + + + + + KDUpdater::FtpDownloader + + + Download was aborted due to network errors. + + + + + Cannot download %1: Writing to temporary file failed: %2 + + + + + KDUpdater::HttpDownloader + + + Cannot download %1: Writing to temporary file failed: %2 + + + + + Cannot download %1: Could not create temporary file: %2 + + + + + KDUpdater::LocalFileDownloader + + + Cannot open source file '%1' for reading. + + + + + Cannot open destination file '%1' for writing. + + + + + Writing to %1 failed: %2 + + + + + KDUpdater::MkdirOperation + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Could not create folder %1: Unknown error. + + + + + + Cannot remove directory %1: %2 + + + + + KDUpdater::MoveOperation + + + Could not backup file %1. + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not remove destination file %1: %2 + + + + + Could not copy %1 to %2: %3 + + + + + Cannot copy %1 to %2: %3 + + + + + Cannot remove file %1. + + + + + Cannot restore backup file for %1: %2 + + + + + KDUpdater::PackagesInfo + + + %1 contains invalid content: %2 + + + + + The file %1 does not exist. + + + + + Could not open %1. + + + + + Parse error in %1 at %2, %3: %4 + + + + + Root element %1 unexpected, should be 'Packages'. + + + + + KDUpdater::PrependFileOperation + + + Cannot backup file %1: %2 + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not open file %1 for reading: %2 + + + + + Could not open file %1 for writing: %2 + + + + + Cannot find backup file for %1. + + + + + Cannot restore backup file for %1. + + + + + Cannot restore backup file for %1: %2 + + + + + KDUpdater::RmdirOperation + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Could not remove folder %1: The folder does not exist. + + + + + Could not remove folder %1: %2 + + + + + Cannot recreate directory %1: %2 + + + + + KDUpdater::Task + + + %1 started + + + + + %1 cannot be stopped + + + + + Cannot stop task %1 + + + + + %1 cannot be paused + + + + + Cannot pause task %1 + + + + + Cannot resume task %1 + + + + + %1 done + + + + + KDUpdater::Update + + + Downloading update... + + + + + Update downloaded + + + + + KDUpdater::UpdateCompatOperation + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Cannot restore previous compat-level + + + + + KDUpdater::UpdateFinder + + + Could not access the package information of this application. + + + + + Could not access the update sources information of this application. + + + + + %1 updates found. + + + + + Downloading Updates.xml from update sources. + + + + + Could not download updates from %1 ('%2') + + + + + Updates.xml file(s) downloaded from update sources. + + + + + Looking for compatibility update... + + + + + Found compatibility update.. + + + + + Compatibility level %1 update + + + + + Compatibility update for the required architecture and hardware configuration was not found. + + + + + Compatibility update not found. + + + + + Compatibility update found. + + + + + No compatibility updates found. + + + + + Computing applicable updates. + + + + + Application updates computed. + + + + + Downloading Updates.xml from update sources + + + + + KDUpdater::UpdatePackageOperation + + + Invalid arguments: %1 arguments given, 3 expected. + + + + + Cannot update %1-%2 + + + + + Cannot restore %1-%2 + + + + + KDUpdater::UpdateSourcesInfo + + + %1 contains invalid content: %2 + + + + + Could not read "%1" + + + + + XML Parse error in %1 at %2, %3: %4 + + + + + Root element %1 unexpected, should be "UpdateSources" + + + + + + Could not save changes to "%1": %2 + + + + + KDUpdater::UpdatesInfoData + + + Updates.Xml contains invalid content: %1 + + + + + Could not read "%1" + + + + + Parse error in %1 at %2, %3: %4 + + + + + root element %1 unexpected, should be "Updates" + + + + + ApplicationName element is missing + + + + + ApplicationVersion element is missing + + + + + PackageUpdate element without Name + + + + + PackageUpdate element without Version + + + + + PackageUpdate element without ReleaseDate + + + + + PackageUpdate element without UpdateFile + + + + + CompatUpdate element without CompatLevel + + + + + CompatUpdate element without ReleaseDate + + + + + CompatUpdate element without UpdateFile + + + + + Lib7z::ExtractItemJob + + + Could not list archive: QIODevice not set or already destroyed. + + + + + Lib7z::ListArchiveJob + + + Could not list archive: QIODevice already destroyed. + + + + + QInstaller::AddQtCreatorArrayValueOperation + + + Invalid arguments in %0: %1 arguments given, exactly 4 expected (group, arrayname, key, value). + + + + + + Needed installer object in %1 operation is empty. + + + + + QInstaller::Component + + + %L1 Bytes + + + + + %L1 kBytes + + + + + %L1 MBytes + + + + + %L1 GBytes + + + + + Could not open the requested script file at %1: %2. + + + + + + Exception while loading the component script: %1 + + + + + Could not open the requested translation file at %1 + + + + + Could not open the requested UI file at %1: %2 + + + + + Could not open the requested license file at %1: %2 + + + + + Error + + + + + Error: Operation %1 does not exist + + + + + Can't resolve isAutoDependOn in %1 + + + + + Can't resolve isDefault in %1 + + + + + QInstaller::ComponentSelectionPage + + + Component Name + + + + + Installed Version + + + + + New Version + + + + + Size + + + + + Alt+A + select default components + + + + + Def&ault + + + + + Alt+R + reset to already installed components + + + + + &Reset + + + + + Alt+S + select all components + + + + + &Select All + + + + + Alt+D + deselect all components + + + + + &Deselect All + + + + + %1 + + + + + This component will occupy approximately %1 on your hard disk drive. + + + + + Select Components + + + + + Please select the components you want to update. + + + + + Please select the components you want to install. + + + + + Please select the components you want to uninstall. + + + + + Select the components to install. Deselect installed components to uninstall them. + + + + + QInstaller::CopyDirectoryOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + Invalid arguments in %0: Directories are invalid: %1 %2 + + + + + Could not create %0 + + + + + Could not copy %0 to %1 + + + + + Could not remove %0 + + + + + QInstaller::CreateDesktopEntryOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + Failed to overwrite %1 + + + + + Could not write Desktop Entry at %1 + + + + + QInstaller::CreateShortcutOperation + + + Could not create folder %1: %2. + + + + + Could not create link %1: %2 + + + + + QInstaller::DownloadArchivesJob + + + + Canceled + + + + + Downloading hash signature failed. + + + + + + Download Error + + + + + Hash verification while downloading failed. This is a temporary error, please retry. + + + + + Could not verify Hash + + + + + Could not open %1 + + + + + Could not download archive: %1 : %2 + + + + + Could not fetch archives: %1 +Error while loading %2 + + + + + Downloading archive hash for component: %1 + + + + + Downloading archive for component: %1 + + + + + Scheme not supported: %1 (%2) + + + + + Could not find component for: %1. + + + + + QInstaller::ElevatedExecuteOperation + + + Invalid arguments in %1: %2 arguments given, at least 1 expected. + + + + + Execution failed: Could not start detached: "%1" + + + + + Execution failed: Could not start: "%1" + + + + + Execution failed(Crash): "%1" + + + + + Execution failed(Unexpected exit code: %1): "%2" + + + + + QInstaller::EnvironmentVariableOperation + + + Invalid arguments in %0: %1 arguments given, 2-3 expected. + + + + + QInstaller::ExtractArchiveOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + QInstaller::ExtractArchiveOperation::Runnable + + + Could not open %1 for reading: %2. + + + + + Error while extracting %1: %2. (Maybe the target dir(%3) is blocked by another process.) + + + + + Error while extracting %1: %2. + + + + + Unknown exception caught while extracting %1. + + + + + QInstaller::FakeStopProcessForUpdateOperation + + + These processes should be stopped to continue: + +%1 + + + + + QInstaller::FinishedPage + + + Completing the %1 Wizard + + + + + + + %1 + + + + + Click Done to exit the %1 Wizard. + + + + + Click Finish to exit the %1 Wizard. + + + + + Restart + + + + + Run %1 now. + + + + + The %1 Wizard failed. + + + + + QInstaller::GetRepositoryMetaInfoJob + + + Empty repository URL. + + + + + Invalid repository URL: %1. + + + + + URL scheme not supported: %1 (%2). + + + + + Retrieving component meta information... + + + + + Could not move Updates.xml to target location: %1. + + + + + Could not open Updates.xml for reading: %1. + + + + + Could not fetch a valid version of Updates.xml from repository: %1. Error: %2. + + + + + + + Download Error + + + + + Parsing component meta information... + + + + + Repository updates received. + + + + + Finished updating component meta information... + + + + + Could not fetch Updates.xml from repository: %1. Error: %2 + + + + + Retrieving component information from remote repository... + + + + + Could not open meta info archive: %1. Error: %2. + + + + + The hash of one component does not match the expected one. + + + + + Bad hash. + + + + + Could not download meta information for component: %1. Error: %2 + + + + + QInstaller::GetRepositoryMetaInfoJob::ZipRunnable + + + Error while extracting %1: %2. + + + + + Unknown exception caught while extracting %1. + + + + + Could not open %1 for reading: %2. + + + + + QInstaller::GlobalSettingsOperation + + + Settings are not writable + + + + + Failed to write settings + + + + + Invalid arguments in 0%: %1 arguments given, at least 3 expected. + + + + + QInstaller::InstallIconsOperation + + + Invalid arguments in %0: %1 arguments given, 1 expected. + + + + + QInstaller::IntroductionPage + + + Setup - %1 + + + + + %1 + + + + + Welcome to the %1 Setup Wizard. + + + + + QInstaller::LicenseAgreementPage + + + License Agreement + + + + + Please read the following license agreement(s). You must accept the terms contained in these agreement(s) before continuing with the installation. + + + + + Alt+A + agree license + + + + + + %1 + + + + + I accept the licenses. + I h<u>a</u>ve read and agree to the following terms contained in the license agreements accompanying the Qt SDK and additional items. I agree that my use of the Qt SDK is governed by the terms and conditions contained in these license agreements. + + + + I do not accept the licenses. + I <u>d</u>o not accept the terms and conditions of the above listed license agreements. Please note by checking the box, you must cancel the installation or downloading the Qt SDK and must destroy all copies, or portions thereof, of the Qt SDK in your possessions. + + + + Alt+D + do not agree license + + + + + QInstaller::LicenseOperation + + + No license files found to copy. + + + + + Needed installer object in %1 operation is empty. + + + + + Can not write license file: %1. + + + + + No license files found to delete. + + + + + QInstaller::LineReplaceOperation + + + Invalid arguments in %0: %1 arguments given, exactly 3 expected. + + + + + QInstaller::MacReplaceInstallNamesOperation + + + Invalid arguments in %0: %1 arguments given, 3 expected. + + + + + Can't invoke otool. Is Xcode installed? + + + + + Can't start process %0. + + + + + QInstaller::PackageManagerCore + + + Error writing Uninstaller + + + + + +Downloading packages... + + + + + Installation canceled by user + + + + + All downloads finished. + + + + + + Error + + + + + Cancelling the Installer + + + + + Authentication Error + + + + + Some components could not be removed completely because admin rights could not be acquired: %1. + + + + + Unknown error. + + + + + Some components could not be removed completely because an unknown error happened. + + + + + Application not running in Package Manager mode! + + + + + No installed packages found. + + + + + Application running in Uninstaller mode! + + + + + invalid + + + + + QInstaller::PackageManagerCorePrivate + + + + + + Error + + + + + Component(s) added as automatic dependencies + + + + + Added as dependency for %1. + + + + + Component(s) that have resolved Dependencies + + + + + Selected Component(s) without Dependencies + + + + + Access error + + + + + Format error + + + + + Could not write installer configuration to %1: %2 + + + + + Stop Processes + + + + + These processes should be stopped to continue: + +%1 + + + + + + + Installation canceled by user + + + + + Could not write uninstaller to %1: %2 + + + + + Found a binary data file, but we are the installer and we should read the binary resource from our very own binary! + + + + + Could not write uninstaller binary data to %1: %2 + + + + + ProductName should be set + + + + + Variable 'TargetDir' not set. + + + + + + Preparing the installation... + + + + + + Creating Uninstaller + + + + + +Installation finished! + + + + + +Installation aborted! + + + + + Removing deselected components... + + + + + +Update finished! + + + + + +Update aborted! + + + + + +Deinstallation finished! + + + + + +Deinstallation aborted! + + + + + +Installing component %1 + + + + + + Installer Error + + + + + Error during installation process (%1): +%2 + + + + + Cannot prepare uninstall + + + + + Cannot start uninstall + + + + + Error during uninstallation process: +%1 + + + + + Unknown error + + + + + Could not retrieve remote tree: %1. + + + + + Failure to read packages from: %1. + + + + + Could not retrieve meta information: %1 + + + + + + Could not add temporary update source information. + + + + + Could not find any update source information. + + + + + QInstaller::PackageManagerGui + + + %1 Setup + + + + + Maintain %1 + + + + + + Question + + + + + Do you want to abort the %1 process? + + + + + uninstallation + + + + + installation + + + + + installer + + + + + uninstaller + + + + + maintenance + + + + + Do you want to abort the %1 application? + + + + + Settings + + + + + QInstaller::PackageManagerPage + + + + %1 + + + + + QInstaller::PerformInstallationForm + + + + + &Show Details + + + + + &Hide Details + + + + + QInstaller::PerformInstallationPage + + + &Uninstall + + + + + Uninstalling %1 + + + + + &Update + + + + + Updating components of %1 + + + + + &Install + + + + + Installing %1 + + + + + %1 + + + + + QInstaller::QtPatchOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + First argument should be 'linux', 'mac' or 'windows'. No other type is supported at this time. + + + + + QMake from the current Qt version +(%1)is not existing. Please file a bugreport with this dialog at https://bugreports.qt-project.org. + + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: "%2" + + + + + Qt patch error: new Qt dir(%1) +needs to be less than 255 characters. + + + + + + Qt patch error: Can not open %1.(%2) + + + + + Needed installer object in "%1" operation is empty. + + + + + Error while relocating Qt: %1 + + + + + The installer was not able to get the unpatched path from +%1.(maybe it is broken or removed) +It tried to patch the Qt binaries, but all other files in Qt are unpatched. +This could result in a broken Qt version. +Sometimes it helps to restart the installer with a switched off antivirus software. + + + + + QInstaller::ReadyForInstallationPage + + + + &Show Details + + + + + U&ninstall + + + + + Ready to Uninstall + + + + + Setup is now ready to begin removing %1 from your computer.<br><font color="red">The program dir %2 will be deleted completely</font>, including all content in that directory! + + + + + U&pdate + + + + + Ready to Update Packages + + + + + Setup is now ready to begin updating your installation. + + + + + &Install + + + + + Ready to Install + + + + + Setup is now ready to begin installing %1 on your computer. + + + + + Not enough disk space to store temporary files and the installation! Available space: %1, at least required %2. + + + + + Not enough disk space to store all selected components! Available space: %1, at least required: %2. + + + + + Not enough disk space to store temporary files! Available space: %1, at least required: %2. + + + + + The volume you selected for installation seems to have sufficient space for installation, but there will be less than 1% of the volume's space available afterwards. %1 + + + + + The volume you selected for installation seems to have sufficient space for installation, but there will be less than 100 MB available afterwards. %1 + + + + + Can not resolve all dependencies! + + + + + Components about to be removed. + + + + + &Hide Details + + + + + QInstaller::RegisterDefaultDebuggerOperation + + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + Can't read from tool chains xml file(%1) correctly. + + + + + QInstaller::RegisterDocumentationOperation + + + Invalid arguments in %0: %1 arguments given, 1 expected. + + + + + Could not register help file %1: File not found. + + + + + Could not unregister help file %1: File not found. + + + + + QInstaller::RegisterFileTypeOperation + + + Invalid arguments in %0 + + + + + Register File Type: Invalid arguments + + + + + QInstaller::RegisterQtInCreatorOperation + + + Invalid arguments in %0: %1 arguments given, minimum 3 expected. + + + + + Needed installer object in "%1" operation is empty. + + + + + Can't read from tool chains xml file(%1) correctly. + + + + + QInstaller::RegisterQtInCreatorV23Operation + + + + Invalid arguments in %0: %1 arguments given, minimum 4 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + The given TargetDir %1 is not a valid/existing dir. + + + + + QInstaller::RegisterQtInCreatorV2Operation + + + + Invalid arguments in %0: %1 arguments given, minimum 2 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + The given TargetDir %1 is not a valid/existing dir. + + + + + QInstaller::RegisterToolChainOperation + + + + Invalid arguments in %0: %1 arguments given, minimum 4 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + + Can't read from tool chains xml file(%1) correctly. + + + + + + Some arguments are not right in %1 operation. + + + + + QInstaller::ReplaceOperation + + + Invalid arguments in %0: %1 arguments given, 3 expected. + + + + + QInstaller::RestartPage + + + Completing the %1 Setup Wizard + + + + + QInstaller::SelfRestartOperation + + + Needed installer object in "%1" operation is empty. + + + + + Self Restart: Only valid within updater or packagemanager mode. + + + + + Self Restart: Invalid arguments + + + + + QInstaller::SetDemosPathOnQtOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: %2 + + + + + Qt patch error: new Qt demo path (%1) +needs to be less than 255 characters. + + + + + QInstaller::SetExamplesPathOnQtOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: %2 + + + + + Qt patch error: new Qt example path (%1) +needs to be less than 255 characters. + + + + + QInstaller::SetImportsPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + QInstaller::SetPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 3 expected. + + + + + The second type/value needs to be one of: %1 + + + + + QInstaller::SetPluginPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + QInstaller::SetQtCreatorValueOperation + + + Invalid arguments in %0: %1 arguments given, exactly 4 expected (rootInstallPath, group, key, value). + + + + + Needed installer object in %1 operation is empty. + + + + + QInstaller::SimpleMoveFileOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + None of the arguments can be empty: source(%1), target(%2). + + + + + Can not copy source(%1) to target(%2), because target exists and is not removable. + + + + + Can not move source(%1) to target(%2): %3 + + + + + + Move %1 to %2. + + + + + QInstaller::StartMenuDirectoryPage + + + Start Menu shortcuts + + + + + Select the Start Menu in which you would like to create the program's shortcuts. You can also enter a name to create a new folder. + + + + + QInstaller::TargetDirectoryPage + + + Installation Folder + + + + + + + + + + %1 + + + + + Please specify the folder where %1 will be installed. + + + + + Alt+R + browse file system to choose a file + + + + + B&rowse... + + + + + + Error + + + + + The install directory cannot be empty, please specify a valid folder. + + + + + As the install directory is completely deleted, installing in %1 is forbidden. + + + + + Warning + + + + + You have selected an existing, non-empty folder for installation. Note that it will be completely wiped on uninstallation of this application. It is not advisable to install into this folder as installation might fail. Do you want to continue? + + + + + Select Installation Folder + + + + + QInstaller::UpdateCreatorSettingsFrom21To22Operation + + + Invalid arguments in %0: %1 arguments given, exactly 0 expected. + + + + + Needed installer object in %1 operation is empty. + + + + + Can not remove previous registered Qt Versions in %1 operation. + + + + + QInstallerCreator::Archive + + + Could not create %1: %2 + + + + + Could not open archive file %1 for reading. + + + + + Could not create archive from %1: Not a file. + + + + + Error while packing directory at %1 + + + + + QObject + + + Searched whole file, no marker found + + + + + Could not seek to %1 in file %2: %3 + + + + + No marker found, stopped after %1 bytes. + + + + + No marker found, unknown exception caught. + + + + + Cannot create zipped file for path %1: %2 + + + + + Could not seek to in-binary resource. (offset: %1, length: %2) + + + + + Could not register in-binary resource. + + + + + + Could not open binary %1: %2 + + + + + Could not seek to binary layout section. + + + + + Could not seek to metadata index. + + + + + Could not seek to operation list. + + + + + Could not seek to component index information. + + + + + Could not seek to component index. + + + + + Cannot open file %1 for reading: %2 + + + + + + Cannot open file %1 for writing: %2 + + + + + Write failed after %1 bytes: %2 + + + + + Read failed after %1 bytes: %2 + + + + + Could not remove file %1: %2 + + + + + Could not remove folder %1: %2 + + + + + + Could not create folder %1 + + + + + Could not copy file from %1 to %2: %3 + + + + + Could not move file from %1 to %2: %3 + + + + + + Could not create folder %1: %2 + + + + + Could not open temporary file: %1 + + + + + Could not open temporary file for template %1: %2 + + + + + Could not create temporary folder for template %1: %2 + + + + + Could not create lock file %1: %2 + + + + + Could not write PID to lock file %1: %2 + + + + + Could not lock lock file %1: %2 + + + + + Could not unlock lock file %1: %2 + + + + + Path exists but is not a folder: %1 + + + + + Could not create folder: %1 + + + + + Could not create temporary file + + + + + Could not retrieve property %1 for item %2 + + + + + Property %1 for item %2 not of type VT_FILETIME but %3 + + + + + Could not convert file time to local time + + + + + Could not convert local file time to system time + + + + + + + Could not load codecs + + + + + + + Could not retrieve default format + + + + + Could not open archive + + + + + No CArc found + + + + + + Could not retrieve number of items in archive + + + + + + + + Could not retrieve path of archive item %1 + + + + + + + + + + Unknown exception caught (%1) + + + + + + Failed + + + + + Could not create file system link at %1 + + + + + Could not create softlink at %1 + + + + + Could not create archive %1 + + + + + CArc index %1 out of bounds [0, %2] + + + + + Item index %1 out of bounds [0, %2] + + + + + Extracting %1 failed. + + + + + Could not create output file for writing: %1 + + + + + Extraction failed. + + + + + + Authorization required + + + + + + Enter your password to authorize for sudo: + + + + + Error acquiring admin rights + + + + + Could not backup file %1 + + + + + Could not delete file %1 + + + + + Could not restore backup file into %1 + + + + + Invalid arguments: %1 arguments given, 2 or 3 expected (optional: "workingDirectory=..."). + + + + + + Failed to overwrite %1: %2 + + + + + Registry path %1 is not writable + + + + + Could not write to registry path %1 + + + + + Number of arguments does not match : one is required + + + + + Invalid Argument: source folder must not be empty. + + + + + Could not backup file %1: %2 + + + + + Failed to copy file %1: %2 + + + + + Could not create folder at %1: %2 + + + + + Failed to open %1 for reading. + + + + + Failed to open %1 for writing. + + + + + Invalid arguments: %1 arguments given, %2 to %3 expected. + + + + + Invalid arguments: %1 arguments given, %2 expected. + + + + + Error while elevating access rights. + + + + + Failed to seek in file %1: %2 + + + + + kB + + + + + MB + + + + + GB + + + + + Could not open the requested script file at %1: %2 + + + + + + Exception while loading the control script %1 + + + + + + Registering file types in only supported on Windows. + + + + + Failed to open %1 for reading + + + + + Failed to open %1 for writing + + + + + Failed to seek in file %1. Reason: %2. + + + + + + + Could not copy %1 to %2: %3 + + + + + Could not create temporary file for generated rcc project file + + + + + + Could not copy %1. + + + + + Error: Packages parameter missing argument. + + + + + Error: Package directory not found at the specified location. + + + + + Error: Package to exclude missing. + + + + + Error: Template parameter missing argument. + + + + + Error: Template not found at the specified location. + + + + + Error: Config parameter missing argument. + + + + + Error: Config directory %1 not found at the specified location. + + + + + Error: Configuration %1 is not a directory. + + + + + Error: Config directory %1 is not readable. + + + + + Error: Resource files to include missing. + + + + + Error: Target parameter missing. + + + + + Error: No components selected. + + + + + Error: No configuration directory selected. + + + + + Component %1 can't contain '-'. + + + + + Component %1 does not contain a package description. + + + + + Component package description for %1 is invalid. Error at line: %2, column: %3 -> %4 + + + + + Component folder name must match component name: %1 in %2/ + + + + + Component version for %1 is invalid! <Version>%2</version> + + + + + Circular dependencies detected. + + + + + Couldn't find package for component %1. + + + + + Folder %1 does not exist. + + + + + + Could not move %1 to %2 + + + + + Could not parse %1: line: %2, column: %3: %4 (%5) + + + + + Could not create directory %1. + + + + + Could not copy the script %1 to its target location %2. + + + + + Couldn't find any user interface matching %1 while copying user interfaces of %2. + + + + + Could not copy the UI file %1 to its target location %2. + + + + + Could not find any translation file matching %1 while copying translations of %2. + + + + + Could not copy the translation %1 to its target location %2. + + + + + Could not find any license matching %1 while copying license files of %2. + + + + + Could not copy the license file %1 to its target location %2. + + + + + Could not create repository folder for component %1 + + + + + Error: Package to exclude missing + + + + + Error: Packages parameter missing argument + + + + + Error: Package directory not found at the specified location + + + + + + Error: Config parameter missing argument + + + + + Error: Config directory %1 not found at the specified location + + + + + Error: Configuration %1 is not a directory + + + + + Error: Config directory %1 is not readable + + + + + Repository target folder %1 already exists! + + + + + Could not remove folder %1 + + + + + Could not remove folder %1: Unknown error + + + + + Settings + + + Could not open settings file %1 for reading: %2 + + + + + %1 is not valid: Installer root node expected. + + + + + Multiple %1 elements found, but only one allowed. + + + + + SettingsDialog + + + Settings + + + + + Network + + + + + No proxy + + + + + System proxy settings + + + + + Manual proxy configuration + + + + + HTTP proxy: + + + + + + Port: + + + + + HTTP proxy requires authentication + + + + + + Username: + + + + + + Password: + + + + + FTP proxy: + + + + + FTP proxy requires authentication + + + + + Repositories + + + + + Add Username and Password for authentication if needed. + + + + + Use temporary repositories only + + + + + Add + + + + + Remove + + + + + Test + + + + + + Show Passwords + + + + + Check this to use repository during fetch. + + + + + Add the username to authenticate on the server. + + + + + Add the password to authenticate on the server. + + + + + The servers URL that contains a valid repository. + + + + + There was an error testing this repository. + + + + + Do you want to disable the tested repository? + + + + + Hide Passwords + + + + + Use + + + + + Username + + + + + Password + + + + + Repository + + + + + Default repositories + + + + + Temporary repositories + + + + + User defined repositories + + + + + TargetDirectoryPageImpl + + + The installation path cannot be empty, please specify a valid folder. + + + + + The installation path cannot be relative, please specify an absolute path. + + + + + The installation path must not contain !@#$%^&*:,; or spaces, please specify a valid folder. + + + + + Warning + + + + + Error + + + + + The path or installation directory contains non ASCII characters. This is currently not supported! Please choose a different path or installation directory. + + + + + As the install directory is completely deleted installing in %1 is forbidden. + + + + + The folder you selected exists already and contains an installation. +Do you want to overwrite it? + + + + + You have selected an existing, non-empty folder for installation. +Note that it will be completely wiped on uninstallation of this application. +It is not advisable to install into this folder as installation might fail. +Do you want to continue? + + + + + You have selected an existing file or symlink, please choose a different target for installation. + + + + + TestRepository + + + Empty repository URL. + + + + + URL scheme not supported: %1 (%2). + + + + + Could not parse Updates.xml! Error: %1. + + + + + Updates.xml could not be opened for reading! + + + + + Updates.xml could not be found on server! + + + + diff --git a/src/sdk/translations/sv_se.ts b/src/sdk/translations/sv_se.ts new file mode 100644 index 000000000..3b2e57954 --- /dev/null +++ b/src/sdk/translations/sv_se.ts @@ -0,0 +1,3384 @@ + + + + + Component + + + Could not open archive %1: %2 + + + + + IntroductionPageImpl + + + Package manager + + + + + Update components + + + + + Remove all components + + + + + Retrieving information from remote installation sources... + + + + + No updates available. + + + + + Only local package management available. + + + + + KDJob + + + Canceled + + + + + KDSaveFile + + + Append mode not supported. + + + + + Read-only access not supported. + + + + + Could not backup existing file %1: %2 + + + + + + + TODO + + + + + KDUpdater::AppendFileOperation + + + Cannot backup file %1: %2 + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not open file %1 for writing: %2 + + + + + Cannot find backup file for %1. + + + + + Could not restore backup file for %1. + + + + + Could not restore backup file for %1: %2 + + + + + KDUpdater::CopyOperation + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not backup file %1. + + + + + Could not remove destination file %1: %2 + + + + + Could not copy %1 to %2: %3 + + + + + Could not delete file %1: %2 + + + + + Could not restore backup file into %1: %2 + + + + + KDUpdater::DeleteOperation + + + Cannot create backup of %1: %2 + + + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Cannot restore backup file for %1: %2 + + + + + KDUpdater::ExecuteOperation + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Execution failed: %1 + + + + + KDUpdater::FileDownloader + + + %L1 B + + + + + %L1 KB + + + + + %L1 MB + + + + + %L1 GB + + + + + Could not reopen downloaded file %1 for reading: %2 + + + + + Download canceled. + + + + + Cryptographic hashes do not match. + + + + + Download finished. + + + + + of + + + + + downloaded. + + + + + /sec + + + + + day + + + + + days + + + + + hour + + + + + hours + + + + + minute + + + + + minutes + + + + + second + + + + + seconds + + + + + - + + + + + remaining. + + + + + - unknown time remaining. + + + + + KDUpdater::FtpDownloader + + + Download was aborted due to network errors. + + + + + Cannot download %1: Writing to temporary file failed: %2 + + + + + KDUpdater::HttpDownloader + + + Cannot download %1: Writing to temporary file failed: %2 + + + + + Cannot download %1: Could not create temporary file: %2 + + + + + KDUpdater::LocalFileDownloader + + + Cannot open source file for reading. + + + + + Cannot open destination file for writing. + + + + + Writing to %1 failed: %2 + + + + + KDUpdater::MkdirOperation + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Could not create folder %1: Unknown error. + + + + + + Cannot remove directory %1: %2 + + + + + KDUpdater::MoveOperation + + + Could not backup file %1. + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not remove destination file %1: %2 + + + + + Could not copy %1 to %2: %3 + + + + + Cannot remove file %1. + + + + + Cannot copy %1 to %2: %3 + + + + + Cannot restore backup file for %1: %2 + + + + + KDUpdater::PackagesInfo + + + %1 contains invalid content: %2 + + + + + The file %1 does not exist. + + + + + Could not open %1. + + + + + Root element %1 unexpected, should be 'Packages'. + + + + + Parse error in %1 at %2, %3: %4 + + + + + KDUpdater::PrependFileOperation + + + Cannot backup file %1: %2 + + + + + Invalid arguments: %1 arguments given, 2 expected. + + + + + Could not open file %1 for reading: %2 + + + + + Could not open file %1 for writing: %2 + + + + + Cannot find backup file for %1. + + + + + Cannot restore backup file for %1. + + + + + Cannot restore backup file for %1: %2 + + + + + KDUpdater::RmdirOperation + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Could not remove folder %1: The folder does not exist. + + + + + Could not remove folder %1: %2 + + + + + Cannot recreate directory %1: %2 + + + + + KDUpdater::SignatureVerificationDownloader + + + Could not download signature: scheme %1 not supported. + + + + + Downloading signature: %1 + + + + + Could not open signature file: %1 + + + + + Could not open file for verification: %1 + + + + + KDUpdater::Task + + + %1 started + + + + + %1 cannot be stopped + + + + + Cannot stop task %1 + + + + + %1 cannot be paused + + + + + Cannot pause task %1 + + + + + Cannot resume task %1 + + + + + %1 done + + + + + KDUpdater::Update + + + Downloading update... + + + + + Update downloaded + + + + + KDUpdater::UpdateCompatOperation + + + Invalid arguments: %1 arguments given, 1 expected. + + + + + Cannot restore previous compat-level + + + + + KDUpdater::UpdateFinder + + + Could not download updates from %1 ('%2') + + + + + Could not access the package information of this application. + + + + + Could not access the update sources information of this application. + + + + + %1 updates found. + + + + + Downloading Updates.xml from update sources. + + + + + Updates.xml file(s) downloaded from update sources. + + + + + Looking for compatibility update... + + + + + Found compatibility update.. + + + + + Compatibility level %1 update + + + + + Compatibility update for the required architecture and hardware configuration was not found. + + + + + Compatibility update not found. + + + + + Compatibility update found. + + + + + No compatibility updates found. + + + + + Computing applicable updates. + + + + + Application updates computed. + + + + + Downloading Updates.xml from update sources + + + + + KDUpdater::UpdatePackageOperation + + + Invalid arguments: %1 arguments given, 3 expected. + + + + + Cannot update %1-%2 + + + + + Cannot restore %1-%2 + + + + + KDUpdater::UpdateSourcesInfo + + + %1 contains invalid content: %2 + + + + + Could not read "%1" + + + + + XML Parse error in %1 at %2, %3: %4 + + + + + Root element %1 unexpected, should be "UpdateSources" + + + + + + Could not save changes to "%1": %2 + + + + + KDUpdater::UpdatesInfoData + + + Updates.Xml contains invalid content: %1 + + + + + Could not read "%1" + + + + + Parse error in %1 at %2, %3: %4 + + + + + root element %1 unexpected, should be "Updates" + + + + + ApplicationName element is missing + + + + + ApplicationVersion element is missing + + + + + PackageUpdate element without Name + + + + + PackageUpdate element without Version + + + + + PackageUpdate element without ReleaseDate + + + + + PackageUpdate element without UpdateFile + + + + + CompatUpdate element without CompatLevel + + + + + CompatUpdate element without ReleaseDate + + + + + CompatUpdate element without UpdateFile + + + + + Lib7z::ExtractItemJob + + + Could not list archive: QIODevice not set or already destroyed. + + + + + Lib7z::ListArchiveJob + + + Could not list archive: QIODevice already destroyed. + + + + + QInstaller::AddQtCreatorArrayValueOperation + + + Invalid arguments in %0: %1 arguments given, exactly 4 expected (group, arrayname, key, value). + + + + + + Needed installer object in %1 operation is empty. + + + + + QInstaller::Component + + + %L1 Bytes + + + + + %L1 kBytes + + + + + %L1 MBytes + + + + + %L1 GBytes + + + + + Could not open the requested script file at %1: %2. + + + + + + Exception while loading the component script: %1 + + + + + Could not open the requested translation file at %1 + + + + + Could not open the requested UI file at %1: %2 + + + + + Could not open the requested license file at %1: %2 + + + + + Error + + + + + Error: Operation %1 does not exist + + + + + Can't resolve isAutoDependOn in %1 + + + + + Can't resolve isDefault in %1 + + + + + QInstaller::ComponentSelectionPage + + + Component Name + + + + + Installed Version + + + + + New Version + + + + + Size + + + + + Alt+A + select default components + + + + + Def&ault + + + + + Alt+R + reset to already installed components + + + + + &Reset + + + + + Alt+S + select all components + + + + + &Select All + + + + + Alt+D + deselect all components + + + + + &Deselect All + + + + + %1 + + + + + This component will occupy approximately %1 on your hard disk drive. + + + + + Select Components + + + + + Please select the components you want to update. + + + + + Please select the components you want to install. + + + + + Please select the components you want to uninstall. + + + + + Select the components to install. Deselect installed components to uninstall them. + + + + + QInstaller::CopyDirectoryOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + Invalid arguments in %0: Directories are invalid: %1 %2 + + + + + Could not create %0 + + + + + Could not copy %0 to %1 + + + + + Could not remove %0 + + + + + QInstaller::CreateDesktopEntryOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + Failed to overwrite %1 + + + + + Could not write Desktop Entry at %1 + + + + + QInstaller::CreateShortcutOperation + + + Could not create folder %1: %2. + + + + + Could not create link %1: %2 + + + + + QInstaller::DownloadArchivesJob + + + + Canceled + + + + + Downloading hash signature failed. + + + + + + Download Error + + + + + Hash verification while downloading failed. This is a temporary error, please retry. + + + + + Could not verify Hash + + + + + Could not open %1 + + + + + Could not download archive: %1 : %2 + + + + + Could not fetch archives: %1 +Error while loading %2 + + + + + Downloading archive hash for component: %1 + + + + + Downloading archive for component: %1 + + + + + Scheme not supported: %1 (%2) + + + + + Could not find component for: %1. + + + + + QInstaller::ElevatedExecuteOperation + + + Invalid arguments in %1: %2 arguments given, at least 1 expected. + + + + + Execution failed: Could not start detached: "%1" + + + + + Execution failed: Could not start: "%1" + + + + + Execution failed(Crash): "%1" + + + + + Execution failed(Unexpected exit code: %1): "%2" + + + + + QInstaller::EnvironmentVariableOperation + + + Invalid arguments in %0: %1 arguments given, 2-3 expected. + + + + + QInstaller::ExtractArchiveOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + QInstaller::ExtractArchiveOperation::Runnable + + + Could not open %1 for reading: %2. + + + + + Error while extracting %1: %2. (Maybe the target dir(%3) is blocked by another process.) + + + + + Error while extracting %1: %2. + + + + + Unknown exception caught while extracting %1. + + + + + QInstaller::FakeStopProcessForUpdateOperation + + + These processes should be stopped to continue: + +%1 + + + + + QInstaller::FinishedPage + + + Completing the %1 Wizard + + + + + Click Done to exit the %1 Wizard. + + + + + + + %1 + + + + + Click Finish to exit the %1 Wizard. + + + + + Restart + + + + + Run %1 now. + + + + + The %1 Wizard failed. + + + + + QInstaller::GetRepositoryMetaInfoJob + + + Empty repository URL. + + + + + Invalid repository URL: %1. + + + + + URL scheme not supported: %1 (%2). + + + + + Retrieving component meta information... + + + + + Could not move Updates.xml to target location: %1. + + + + + Could not open Updates.xml for reading: %1. + + + + + Could not fetch a valid version of Updates.xml from repository: %1. Error: %2. + + + + + + + Download Error + + + + + Parsing component meta information... + + + + + Repository updates received. + + + + + Finished updating component meta information... + + + + + Could not fetch Updates.xml from repository: %1. Error: %2. + + + + + Retrieving component information from remote repository... + + + + + Could not open meta info archive: %1. Error: %2. + + + + + Bad hash. + + + + + The hash of one component does not match the expected one. + + + + + Could not download meta information for component: %1. Error: %2. + + + + + QInstaller::GetRepositoryMetaInfoJob::ZipRunnable + + + Error while extracting %1: %2. + + + + + Unknown exception caught while extracting %1. + + + + + Could not open %1 for reading: %2. + + + + + QInstaller::GlobalSettingsOperation + + + Settings are not writable + + + + + Failed to write settings + + + + + Invalid arguments in 0%: %1 arguments given, at least 3 expected. + + + + + QInstaller::InstallIconsOperation + + + Invalid arguments in %0: %1 arguments given, 1 expected. + + + + + QInstaller::IntroductionPage + + + Setup - %1 + + + + + Welcome to the %1 Setup Wizard. + + + + + %1 + + + + + QInstaller::LicenseAgreementPage + + + License Agreement + + + + + Please read the following license agreement(s). You must accept the terms contained in these agreement(s) before continuing with the installation. + + + + + Alt+A + agree license + + + + + I h<u>a</u>ve read and agree to the following terms contained in the license agreements accompanying the Qt SDK and additional items. I agree that my use of the Qt SDK is governed by the terms and conditions contained in these license agreements. + + + + + + %1 + + + + + Alt+D + do not agree license + + + + + I <u>d</u>o not accept the terms and conditions of the above listed license agreements. Please note by checking the box, you must cancel the installation or downloading the Qt SDK and must destroy all copies, or portions thereof, of the Qt SDK in your possessions. + + + + + QInstaller::LicenseOperation + + + No license files found to copy. + + + + + Needed installer object in %1 operation is empty. + + + + + Can not write license file: %1. + + + + + No license files found to delete. + + + + + QInstaller::LineReplaceOperation + + + Invalid arguments in %0: %1 arguments given, exactly 3 expected. + + + + + QInstaller::MacReplaceInstallNamesOperation + + + Invalid arguments in %0: %1 arguments given, 3 expected. + + + + + Can't invoke otool. Is Xcode installed? + + + + + Can't start process %0. + + + + + QInstaller::PackageManagerCore + + + Error writing Uninstaller + + + + + +Downloading packages... + + + + + Installation canceled by user + + + + + All downloads finished. + + + + + + Error + + + + + Cancelling the Installer + + + + + Authentication Error + + + + + Some components could not be removed completely because admin rights could not be acquired: %1. + + + + + Unknown error. + + + + + Some components could not be removed completely because an unknown error happened. + + + + + Application not running in Package Manager mode! + + + + + No installed packages found. + + + + + Application running in Uninstaller mode! + + + + + invalid + + + + + QInstaller::PackageManagerCorePrivate + + + + + + Error + + + + + Component(s) added as automatic dependencies + + + + + Added as dependency for %1. + + + + + Component(s) that have resolved Dependencies + + + + + Selected Component(s) without Dependencies + + + + + Access error + + + + + Format error + + + + + Could not write installer configuration to %1: %2 + + + + + Stop Processes + + + + + These processes should be stopped to continue: + +%1 + + + + + + + Installation canceled by user + + + + + Could not write uninstaller to %1: %2 + + + + + Found a binary data file, but we are the installer and we should read the binary resource from our very own binary! + + + + + Could not write uninstaller binary data to %1: %2 + + + + + ProductName should be set + + + + + Variable 'TargetDir' not set. + + + + + + Preparing the installation... + + + + + + Creating Uninstaller + + + + + +Installation finished! + + + + + +Installation aborted! + + + + + Removing deselected components... + + + + + +Update finished! + + + + + +Update aborted! + + + + + +Deinstallation finished! + + + + + +Deinstallation aborted! + + + + + +Installing component %1 + + + + + + Installer Error + + + + + Error during installation process (%1): +%2 + + + + + Cannot prepare uninstall + + + + + Cannot start uninstall + + + + + Error during uninstallation process: +%1 + + + + + Unknown error + + + + + Could not retrieve remote tree: %1. + + + + + Failure to read packages from: %1. + + + + + Could not retrieve meta information: %1 + + + + + + Could not add temporary update source information. + + + + + Could not find any update source information. + + + + + QInstaller::PackageManagerGui + + + %1 Setup + + + + + %1 + + + + + + Question + + + + + Do you want to abort the %1 process? + + + + + uninstallation + + + + + installation + + + + + installer + + + + + uninstaller + + + + + maintenance + + + + + Do you want to abort the %1 application? + + + + + Settings + + + + + QInstaller::PackageManagerPage + + + + %1 + + + + + QInstaller::PerformInstallationForm + + + + + &Show Details + + + + + &Hide Details + + + + + QInstaller::PerformInstallationPage + + + &Uninstall + + + + + Uninstalling %1 + + + + + &Update + + + + + Updating components of %1 + + + + + &Install + + + + + Installing %1 + + + + + %1 + + + + + QInstaller::QtPatchOperation + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + First argument should be 'linux', 'mac' or 'windows'. No other type is supported at this time. + + + + + QMake from the current Qt version +(%1)is not existing. Please file a bugreport with this dialog at https://bugreports.qt-project.org. + + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: "%2" + + + + + Qt patch error: new Qt dir(%1) +needs to be less than 255 characters. + + + + + + Qt patch error: Can not open %1.(%2) + + + + + Needed installer object in "%1" operation is empty. + + + + + Error while relocating Qt: %1 + + + + + The installer was not able to get the unpatched path from +%1.(maybe it is broken or removed) +It tried to patch the Qt binaries, but all other files in Qt are unpatched. +This could result in a broken Qt version. +Sometimes it helps to restart the installer with a switched off antivirus software. + + + + + QInstaller::ReadyForInstallationPage + + + + &Show Details + + + + + U&ninstall + + + + + Ready to Uninstall + + + + + Setup is now ready to begin removing %1 from your computer.<br><font color="red">The program dir %2 will be deleted completely</font>, including all content in that directory! + + + + + U&pdate + + + + + Ready to Update Packages + + + + + Setup is now ready to begin updating your installation. + + + + + &Install + + + + + Ready to Install + + + + + Setup is now ready to begin installing %1 on your computer. + + + + + Not enough disk space to store temporary files and the installation! Available space: %1, at least required %2. + + + + + Not enough disk space to store all selected components! Available space: %1, at least required: %2. + + + + + Not enough disk space to store temporary files! Available space: %1, at least required: %2. + + + + + The volume you selected for installation seems to have sufficient space for installation, but there will be less than 1% of the volume's space available afterwards. %1 + + + + + The volume you selected for installation seems to have sufficient space for installation, but there will be less than 100 MB available afterwards. %1 + + + + + Can not resolve all dependencies! + + + + + Components about to be removed. + + + + + &Hide Details + + + + + QInstaller::RegisterDefaultDebuggerOperation + + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + Can't read from tool chains xml file(%1) correctly. + + + + + QInstaller::RegisterDocumentationOperation + + + Invalid arguments in %0: %1 arguments given, 1 expected. + + + + + Could not register help file %1: File not found. + + + + + Could not unregister help file %1: File not found. + + + + + QInstaller::RegisterFileTypeOperation + + + Invalid arguments in %0 + + + + + Register File Type: Invalid arguments + + + + + QInstaller::RegisterQtInCreatorOperation + + + Invalid arguments in %0: %1 arguments given, minimum 3 expected. + + + + + Needed installer object in "%1" operation is empty. + + + + + Can't read from tool chains xml file(%1) correctly. + + + + + QInstaller::RegisterQtInCreatorV23Operation + + + + Invalid arguments in %0: %1 arguments given, minimum 4 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + The given TargetDir %1 is not a valid/existing dir. + + + + + QInstaller::RegisterQtInCreatorV2Operation + + + + Invalid arguments in %0: %1 arguments given, minimum 2 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + The given TargetDir %1 is not a valid/existing dir. + + + + + QInstaller::RegisterToolChainOperation + + + + Invalid arguments in %0: %1 arguments given, minimum 4 expected. + + + + + + Needed installer object in "%1" operation is empty. + + + + + + Can't read from tool chains xml file(%1) correctly. + + + + + + Some arguments are not right in %1 operation. + + + + + QInstaller::ReplaceOperation + + + Invalid arguments in %0: %1 arguments given, 3 expected. + + + + + QInstaller::RestartPage + + + Completing the %1 Setup Wizard + + + + + QInstaller::SelfRestartOperation + + + Needed installer object in "%1" operation is empty. + + + + + Self Restart: Only valid within updater or packagemanager mode. + + + + + Self Restart: Invalid arguments + + + + + QInstaller::SetDemosPathOnQtOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: %2 + + + + + Qt patch error: new Qt demo path (%1) +needs to be less than 255 characters. + + + + + QInstaller::SetExamplesPathOnQtOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + The output of +%1 -query +is not parseable. Please file a bugreport with this dialog https://bugreports.qt-project.org. +output: %2 + + + + + Qt patch error: new Qt example path (%1) +needs to be less than 255 characters. + + + + + QInstaller::SetImportsPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + QInstaller::SetPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 3 expected. + + + + + The second type/value needs to be one of: %1 + + + + + QInstaller::SetPluginPathOnQtCoreOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + QInstaller::SetQtCreatorValueOperation + + + Invalid arguments in %0: %1 arguments given, exactly 4 expected (rootInstallPath, group, key, value). + + + + + Needed installer object in %1 operation is empty. + + + + + QInstaller::SimpleMoveFileOperation + + + Invalid arguments in %0: %1 arguments given, exactly 2 expected. + + + + + None of the arguments can be empty: source(%1), target(%2). + + + + + Can not copy source(%1) to target(%2), because target exists and is not removable. + + + + + Can not move source(%1) to target(%2): %3 + + + + + + Move %1 to %2. + + + + + QInstaller::StartMenuDirectoryPage + + + Start Menu shortcuts + + + + + Select the Start Menu in which you would like to create the program's shortcuts. You can also enter a name to create a new folder. + + + + + QInstaller::TargetDirectoryPage + + + Installation Folder + + + + + Please specify the folder where %1 will be installed. + + + + + + + + + + %1 + + + + + Alt+R + browse file system to choose a file + + + + + B&rowse... + + + + + + Error + + + + + The install directory cannot be empty, please specify a valid folder. + + + + + As the install directory is completely deleted, installing in %1 is forbidden. + + + + + Warning + + + + + You have selected an existing, non-empty folder for installation. Note that it will be completely wiped on uninstallation of this application. It is not advisable to install into this folder as installation might fail. Do you want to continue? + + + + + Select Installation Folder + + + + + QInstaller::UpdateCreatorSettingsFrom21To22Operation + + + Invalid arguments in %0: %1 arguments given, exactly 0 expected. + + + + + Needed installer object in %1 operation is empty. + + + + + Can not remove previous registered Qt Versions in %1 operation. + + + + + QInstallerCreator::Archive + + + Could not create %1: %2 + + + + + Could not open archive file %1 for reading. + + + + + Could not create archive from %1: Not a file. + + + + + Error while packing directory at %1 + + + + + QObject + + + + + Could not copy %1 to %2: %3 + + + + + Could not create temporary file for generated rcc project file + + + + + + Could not copy %1. + + + + + Could not remove the private key from config.xml + + + + + Error: Packages parameter missing argument. + + + + + Error: Package directory not found at the specified location. + + + + + Error: Package to exclude missing. + + + + + Error: Template parameter missing argument. + + + + + Error: Template not found at the specified location. + + + + + Error: Config parameter missing argument. + + + + + Error: Config directory %1 not found at the specified location. + + + + + Error: Configuration %1 is not a directory. + + + + + Error: Config directory %1 is not readable. + + + + + Error: Resource files to include missing. + + + + + Error: Target parameter missing. + + + + + Error: No components selected. + + + + + Error: No configuration directory selected. + + + + + Could not create a RSA signature + + + + + Created RSA signature could not be verified. Is the given public key wrong? + + + + + Component %1 can't contain '-'. + + + + + Component %1 does not contain a package description. + + + + + Component package description for %1 is invalid. Error at line: %2, column: %3 -> %4 + + + + + Component folder name must match component name: %1 in %2/ + + + + + Circular dependencies detected. + + + + + Couldn't find package for component %1. + + + + + Folder %1 does not exist. + + + + + Component version for %1 is invalid! <Version>%2</version> + + + + + + Could not move %1 to %2 + + + + + Could not open %1 for writing. + + + + + Could not parse %1: line: %2, column: %3: %4 (%5) + + + + + Could not create directory %1. + + + + + Could not copy the script %1 to its target location %2. + + + + + Couldn't find any user interface matching %1 while copying user interfaces of %2. + + + + + Could not copy the UI file %1 to its target location %2. + + + + + Could not find any translation file matching %1 while copying translations of %2. + + + + + Could not copy the translation %1 to its target location %2. + + + + + Could not find any license matching %1 while copying license files of %2. + + + + + Could not copy the license file %1 to its target location %2. + + + + + Could not open %1 for writing + + + + + Could not create repository folder for component %1 + + + + + Could not open %1 for writing: %2 + + + + + Error: Package to exclude missing + + + + + Error: Packages parameter missing argument + + + + + Error: Package directory not found at the specified location + + + + + + Error: Config parameter missing argument + + + + + Error: Config directory %1 not found at the specified location + + + + + Error: Configuration %1 is not a directory + + + + + Error: Config directory %1 is not readable + + + + + Repository target folder %1 already exists! + + + + + Could not remove folder %1 + + + + + Could not remove folder %1: Unknown error + + + + + Searched whole file, no marker found + + + + + Could not seek to %1 in file %2: %3 + + + + + No marker found, stopped after %1 bytes. + + + + + No marker found, unknown exception caught. + + + + + Cannot create zipped file for path %1: %2 + + + + + Could not seek to in-binary resource. (offset: %1, length: %2) + + + + + Could not register in-binary resource. + + + + + + Could not open binary %1: %2 + + + + + Could not seek to binary layout section. + + + + + Could not seek to metadata index. + + + + + Could not seek to operation list. + + + + + Could not seek to component index information. + + + + + Could not seek to component index. + + + + + Cannot open file %1 for reading: %2 + + + + + + Cannot open file %1 for writing: %2 + + + + + Write failed after %1 bytes: %2 + + + + + Read failed after %1 bytes: %2 + + + + + Could not remove file %1: %2 + + + + + Could not remove folder %1: %2 + + + + + + Could not create folder %1 + + + + + Could not copy file from %1 to %2: %3 + + + + + Could not move file from %1 to %2: %3 + + + + + + Could not create folder %1: %2 + + + + + Could not open temporary file: %1 + + + + + Could not open temporary file for template %1: %2 + + + + + Could not create temporary folder for template %1: %2 + + + + + Could not create lock file %1: %2 + + + + + Could not write PID to lock file %1: %2 + + + + + Could not lock lock file %1: %2 + + + + + Could not unlock lock file %1: %2 + + + + + Path exists but is not a folder: %1 + + + + + Could not create folder: %1 + + + + + Could not create temporary file + + + + + Could not retrieve property %1 for item %2 + + + + + Property %1 for item %2 not of type VT_FILETIME but %3 + + + + + Could not convert file time to local time + + + + + Could not convert local file time to system time + + + + + + + Could not load codecs + + + + + + + Could not retrieve default format + + + + + Could not open archive + + + + + No CArc found + + + + + + Could not retrieve number of items in archive + + + + + + + + Could not retrieve path of archive item %1 + + + + + + + + + + Unknown exception caught (%1) + + + + + + Failed + + + + + Could not create file system link at %1 + + + + + Could not create softlink at %1 + + + + + Could not create archive %1 + + + + + CArc index %1 out of bounds [0, %2] + + + + + Item index %1 out of bounds [0, %2] + + + + + Extracting %1 failed. + + + + + Could not create output file for writing: %1 + + + + + Extraction failed. + + + + + + Authorization required + + + + + + Enter your password to authorize for sudo: + + + + + Error acquiring admin rights + + + + + Could not backup file %1 + + + + + Could not delete file %1 + + + + + Could not restore backup file into %1 + + + + + Invalid arguments: %1 arguments given, 2 or 3 expected (optional: "workingDirectory=..."). + + + + + + Failed to overwrite %1: %2 + + + + + Registry path %1 is not writable + + + + + Could not write to registry path %1 + + + + + Number of arguments does not match : one is required + + + + + Invalid Argument: source folder must not be empty. + + + + + Could not backup file %1: %2 + + + + + Failed to copy file %1: %2 + + + + + Could not create folder at %1: %2 + + + + + Failed to open %1 for reading + + + + + Failed to open %1 for writing + + + + + Invalid arguments: %1 arguments given, %2 to %3 expected. + + + + + Invalid arguments: %1 arguments given, %2 expected. + + + + + Error while elevating access rights. + + + + + Failed to seek in file %1: %2 + + + + + kB + + + + + MB + + + + + GB + + + + + Could not open the requested script file at %1: %2 + + + + + + Exception while loading the control script %1 + + + + + + Registering file types in only supported on Windows. + + + + + Failed to seek in file %1. Reason: %2. + + + + + Failed to open %1 for reading. + + + + + Failed to open %1 for writing. + + + + + Settings + + + Could not open settings file %1 for reading: %2 + + + + + %1 is not valid: Installer root node expected. + + + + + Multiple %1 elements found, but only one allowed. + + + + + SettingsDialog + + + Settings + + + + + Network + + + + + No proxy + + + + + System proxy settings + + + + + Manual proxy configuration + + + + + HTTP proxy: + + + + + + Port: + + + + + HTTP proxy requires authentication + + + + + + Username: + + + + + + Password: + + + + + FTP proxy: + + + + + FTP proxy requires authentication + + + + + Repositories + + + + + Add Username and Password for authentication if needed. + + + + + Use temporary repositories only + + + + + Add + + + + + Remove + + + + + Test + + + + + + Show Passwords + + + + + Check this to use repository during fetch. + + + + + Add the username to authenticate on the server. + + + + + Add the password to authenticate on the server. + + + + + The servers URL that contains a valid repository. + + + + + There was an error testing this repository. + + + + + Do you want to disable the tested repository? + + + + + Hide Passwords + + + + + Use + + + + + Username + + + + + Password + + + + + Repository + + + + + Default repositories + + + + + Temporary repositories + + + + + User defined repositories + + + + + TargetDirectoryPageImpl + + + The installation path cannot be empty, please specify a valid folder. + + + + + The installation path cannot be relative, please specify an absolute path. + + + + + The installation path must not contain !@#$%^&*:,; or spaces, please specify a valid folder. + + + + + Warning + + + + + Error + + + + + The path or installation directory contains non ASCII characters. This is currently not supported! Please choose a different path or installation directory. + + + + + As the install directory is completely deleted installing in %1 is forbidden. + + + + + The folder you selected exists already and contains an installation. +Do you want to overwrite it? + + + + + You have selected an existing, non-empty folder for installation. +Note that it will be completely wiped on uninstallation of this application. +It is not advisable to install into this folder as installation might fail. +Do you want to continue? + + + + + You have selected an existing file or symlink, please choose a different target for installation. + + + + + TestRepository + + + Empty repository URL. + + + + + URL scheme not supported: %1 (%2). + + + + + Could not parse Updates.xml! Error: %1. + + + + + Updates.xml could not be opened for reading! + + + + + Updates.xml could not be found on server! + + + + -- cgit v1.2.3