From e7754dc0c578d66b7bf1deda730831efdc6d2dc9 Mon Sep 17 00:00:00 2001 From: kh1 Date: Tue, 21 Aug 2012 17:45:38 +0200 Subject: Put all the other code there as well. We can't share it right now, but will figure out a way tomorrow. Change-Id: I2471c3d27d895f59d0b51f0c9f254fcc4e61943b Reviewed-by: Karsten Heimrich --- src/s40/installerbase.cpp | 376 ++++ src/s40/installerbase.exe.manifest | 14 + src/s40/installerbase.ico | Bin 0 -> 25214 bytes src/s40/installerbase.qrc | 7 + src/s40/installerbase.rc | 7 + src/s40/installerbase_p.cpp | 431 +++++ src/s40/installerbase_p.h | 101 ++ src/s40/installerbasecommons.cpp | 6 +- src/s40/s40.pro | 30 +- src/s40/settingsdialog.cpp | 549 ++++++ src/s40/settingsdialog.h | 175 ++ src/s40/settingsdialog.ui | 767 ++++++++ src/s40/tabcontroller.cpp | 203 +++ src/s40/tabcontroller.h | 76 + src/s40/translations/de_de.ts | 3105 +++++++++++++++++++++++++++++++++ src/s40/translations/en_us.ts | 3066 ++++++++++++++++++++++++++++++++ src/s40/translations/sv_se.ts | 3384 ++++++++++++++++++++++++++++++++++++ 17 files changed, 12274 insertions(+), 23 deletions(-) create mode 100644 src/s40/installerbase.cpp create mode 100644 src/s40/installerbase.exe.manifest create mode 100644 src/s40/installerbase.ico create mode 100644 src/s40/installerbase.qrc create mode 100644 src/s40/installerbase.rc create mode 100644 src/s40/installerbase_p.cpp create mode 100644 src/s40/installerbase_p.h create mode 100644 src/s40/settingsdialog.cpp create mode 100644 src/s40/settingsdialog.h create mode 100644 src/s40/settingsdialog.ui create mode 100644 src/s40/tabcontroller.cpp create mode 100644 src/s40/tabcontroller.h create mode 100644 src/s40/translations/de_de.ts create mode 100644 src/s40/translations/en_us.ts create mode 100644 src/s40/translations/sv_se.ts diff --git a/src/s40/installerbase.cpp b/src/s40/installerbase.cpp new file mode 100644 index 000000000..03b87bbb2 --- /dev/null +++ b/src/s40/installerbase.cpp @@ -0,0 +1,376 @@ +/************************************************************************** +** +** 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 const char installer_create_datetime_placeholder [32] = "MY_InstallerCreateDateTime_MY"; + +static QStringList repositories(const QStringList &arguments, const int index) +{ + if (index < arguments.size()) { + QStringList items = arguments.at(index).split(QLatin1Char(',')); + foreach (const QString &item, items) { + qDebug() << "Adding custom repository:" << item; + } + return items; + } else { + std::cerr << "No repository specified" << std::endl; + } + return QStringList(); +} + +// -- main + +int main(int argc, char *argv[]) +{ + QStringList args = QInstaller::parseCommandLineArgs(argc, argv); + +// hack to use cleanlooks if it is under Ubuntu +#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; + while (std::getline(input, standardString)) { + if (standardString == "DISTRIB_ID=Ubuntu") + isUbuntu = true; + } + + if (isUbuntu) { + 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"))) { + QString versionOutPut; + QDateTime dateTimeCheck = QDateTime::fromString(QLatin1String( + installer_create_datetime_placeholder), QLatin1String("yyyy-MM-dd - HH:mm:ss")); + if (dateTimeCheck.isValid()) { + versionOutPut.append(QLatin1String("Installer creation time: ")); + versionOutPut.append(QLatin1String(installer_create_datetime_placeholder)); + versionOutPut.append(QLatin1String("\n")); + } + versionOutPut.append(QLatin1String(VERSION)); + InstallerBase::showVersion(versionOutPut); + 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()); + + 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; + QStringList 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; + QStringList repoList = repositories(args, i); + if (repoList.isEmpty()) + return PackageManagerCore::Failure; + core.addUserRepositories(repoList); + } else if (argument == QLatin1String("--no-force-installations")) { + PackageManagerCore::setNoForceInstallation(true); + } else if (argument == QLatin1String("--create-offline-repository")) { + PackageManagerCore::setCreateLocalRepositoryFromBinary(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/s40/installerbase.exe.manifest b/src/s40/installerbase.exe.manifest new file mode 100644 index 000000000..f90824fd0 --- /dev/null +++ b/src/s40/installerbase.exe.manifest @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/src/s40/installerbase.ico b/src/s40/installerbase.ico new file mode 100644 index 000000000..79bd163de Binary files /dev/null and b/src/s40/installerbase.ico differ diff --git a/src/s40/installerbase.qrc b/src/s40/installerbase.qrc new file mode 100644 index 000000000..61889717d --- /dev/null +++ b/src/s40/installerbase.qrc @@ -0,0 +1,7 @@ + + + translations/de_de.qm + translations/qt_de.qm + translations/en_us.qm + + diff --git a/src/s40/installerbase.rc b/src/s40/installerbase.rc new file mode 100644 index 000000000..c423d3360 --- /dev/null +++ b/src/s40/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/s40/installerbase_p.cpp b/src/s40/installerbase_p.cpp new file mode 100644 index 000000000..bf96a797a --- /dev/null +++ b/src/s40/installerbase_p.cpp @@ -0,0 +1,431 @@ +/************************************************************************** +** +** 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/s40/installerbase_p.h b/src/s40/installerbase_p.h new file mode 100644 index 000000000..5071d6c05 --- /dev/null +++ b/src/s40/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/s40/installerbasecommons.cpp b/src/s40/installerbasecommons.cpp index 1a3a08b36..3440fd1ca 100644 --- a/src/s40/installerbasecommons.cpp +++ b/src/s40/installerbasecommons.cpp @@ -30,6 +30,7 @@ ** **************************************************************************/ #include "installerbasecommons.h" +#include "componentviewpage.h" #include #include @@ -499,10 +500,7 @@ int InstallerGui::nextId() const 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::Introduction + 1, new ComponentViewPage(core)); setPage(PackageManagerCore::ComponentSelection, new ComponentSelectionPage(core)); setPage(PackageManagerCore::LicenseCheck, new LicenseAgreementPage(core)); setPage(PackageManagerCore::ReadyForInstallation, new ReadyForInstallationPage(core)); diff --git a/src/s40/s40.pro b/src/s40/s40.pro index 0f85fbc7f..067ef4d48 100644 --- a/src/s40/s40.pro +++ b/src/s40/s40.pro @@ -1,6 +1,6 @@ TEMPLATE = app -DEPENDPATH += . .. ../sdk -INCLUDEPATH += . .. ../sdk +DEPENDPATH += . .. +INCLUDEPATH += . .. TARGET = installerbase include(../../installerfw.pri) @@ -70,30 +70,22 @@ if (exists($$LRELEASE)) { } } -# the following stuff get's shared with the original installer base +FORMS += settingsdialog.ui -HEADERS_SHARED = ../sdk/installerbase_p.h \ - ../sdk/tabcontroller.h \ - ../sdk/settingsdialog.h \ - -SOURCE_SHARED = ../sdk/installerbase.cpp \ - ../sdk/installerbase_p.cpp \ - ../sdk/tabcontroller.cpp \ - ../sdk/settingsdialog.cpp - -FORMS += ../sdk/settingsdialog.ui - -# things specifically for s40 - -HEADERS += $$HEADERS_SHARED \ +HEADERS += installerbase_p.h \ + tabcontroller.h \ installerbasecommons.h \ + settingsdialog.h \ componentviewpage.h -SOURCES = $$SOURCE_SHARED \ +SOURCES = installerbase.cpp \ + installerbase_p.cpp \ + tabcontroller.cpp \ installerbasecommons.cpp \ + settingsdialog.cpp \ componentviewpage.cpp -win32:RC_FILE = ../sdk/installerbase.rc +win32:RC_FILE = installerbase.rc win32-msvc2005 { CONFIG += embed_manifest_exe #msvc2008 is doing this automatically } diff --git a/src/s40/settingsdialog.cpp b/src/s40/settingsdialog.cpp new file mode 100644 index 000000000..9f705b41a --- /dev/null +++ b/src/s40/settingsdialog.cpp @@ -0,0 +1,549 @@ +/************************************************************************** +** +** 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(); +} + +QInstaller::Repository TestRepository::repository() const +{ + return m_repository; +} + +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); + connect(m_downloader, SIGNAL(authenticatorChanged(QAuthenticator)), this, + SLOT(onAuthenticatorChanged(QAuthenticator))); + + 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); +} + +void TestRepository::onAuthenticatorChanged(const QAuthenticator &authenticator) +{ + m_repository.setUsername(authenticator.user()); + m_repository.setPassword(authenticator.password()); +} + + +// -- 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(); + current->setRepository(m_testRepository.repository()); + + 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/s40/settingsdialog.h b/src/s40/settingsdialog.h new file mode 100644 index 000000000..85fa2f26a --- /dev/null +++ b/src/s40/settingsdialog.h @@ -0,0 +1,175 @@ +/************************************************************************** +** +** 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 QAuthenticator; +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(); + + QInstaller::Repository repository() const; + void setRepository(const QInstaller::Repository &repository); + +private: + void doStart(); + void doCancel(); + +private Q_SLOTS: + void downloadCompleted(); + void downloadAborted(const QString &reason); + void onAuthenticatorChanged(const QAuthenticator &authenticator); + +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/s40/settingsdialog.ui b/src/s40/settingsdialog.ui new file mode 100644 index 000000000..d3ca959a6 --- /dev/null +++ b/src/s40/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/s40/tabcontroller.cpp b/src/s40/tabcontroller.cpp new file mode 100644 index 000000000..200de2359 --- /dev/null +++ b/src/s40/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/s40/tabcontroller.h b/src/s40/tabcontroller.h new file mode 100644 index 000000000..1ef779f8e --- /dev/null +++ b/src/s40/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/s40/translations/de_de.ts b/src/s40/translations/de_de.ts new file mode 100644 index 000000000..4a2d7676d --- /dev/null +++ b/src/s40/translations/de_de.ts @@ -0,0 +1,3105 @@ + + + + + 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. + + + + Quit + Beenden + + + + 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 + + + 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 '%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::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::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 download updates from %1 ('%2') + Konnte Aktualisierungen nicht von %1 ('%2') herunterladen. + + + + 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 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. + + + + 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 + + + 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 + + + + Updates.xml contains invalid content: %1 + Inhalt von Updates.xml ungültig: %1 + + + + 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::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 + + + 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. + + + + Update Info: + Aktualisierungsinformation: + + + + 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 + + + + 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::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::CreateLocalRepositoryOperation + + + Could not set file permissions %1! + Konnte Dateirechte auf Datei %1 nicht setzen! + + + + Could not move file %1 to %2. Error: %3 + Konnte Datei %1 nicht nach %2 verschieben. Fehlermeldung: %3 + + + + Invalid arguments in %0: %1 arguments given, 2 expected. + Ungültige Argumente in %0: %1 Argumente erhalten, 2 erwartet. + + + + Could not open file: %1 + Konnte Datei %1 nicht öffnen. + + + + Could not read: %1. Error: %2 + Konnte Datei %1 nicht lesen. Fehlermeldung: %2 + + + + Could not open file: %1. Error: %2 + Konnte Datei %1 nicht öffnen. Fehlermeldung: %2 + + + + Could not create target dir: %1. + Konnte Zielordner %1. nicht anlegen. + + + + Unknown exception caught: %1. + Unbekannte Ausnahmebedingung: %1 + + + + Removing file: %0 + Entferne Datei %0 + + + + Could not remove %0. + Konnte Datei %0. nicht löschen. + + + + Cannot remove directory %1: %2 + Konnte Ordner %1 nicht löschen. Fehlermeldung: %2 + + + + 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. + + + + 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. + + + + Retrieving component meta information... + Empfange Komponentenmetainformationen... + + + + Invalid repository URL: %1 + Ungültige Quelladresse: %1 + + + + URL scheme not supported: %1 (%2) + Adressschema "%1" nicht unterstützt in Adresse "%2". + + + + Could not move Updates.xml to target location. Error: %1 + Konnte Updates.xml nicht an die Zieladresse verschieben. Fehlermeldung: %1 + + + + Could not open Updates.xml for reading. Error: %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. + Das Aktualisieren der Komponentenmetainformationen ist beendet. + + + + Could not fetch Updates.xml from repository: %1. Error: %2 + Konnte keine Updates.xml aus der Quelle %1 herunterladen. Fehlermeldung: %2 + + + + Could not open meta info archive: %1. Error: %2 + Konnte Archiv mit Metainformationen %1 nicht öffnen. Fehlermeldung: %2 + + + + Could not download meta information for component: %1. Error: %2 + Konnte Metainformationen der Komponente %1 nicht herunterladen. Fehlermeldung: %2 + + + + Retrieving component information from remote repository... + Empfange Komponenten Informationen aus der Quelle... + + + + Bad hash. + Ungültige Prüfsumme. + + + + The hash of one component does not match the expected one. + Die Prüfsumme einer Komponente entsprach nicht der erwateten. + + + + QInstaller::GetRepositoryMetaInfoJob::ZipRunnable + + + Error while extracting %1. Error: %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. Error: %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. + + + + 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 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 + + + + 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 local repository + Erstelle lokale Quelle + + + + + 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 + + + + 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 quit the %1 application? + Möchten sie die %1 Anwendung beenden? + + + + Settings + Einstellungen + + + + 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 + + + + 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 directory %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. + + + + 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 + + + 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. + Kein Zauberkeks gefunden, abgebrochen nach %1. + + + + 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 %1 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. + + + + 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 + + + + 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/s40/translations/en_us.ts b/src/s40/translations/en_us.ts new file mode 100644 index 000000000..1d5301f3a --- /dev/null +++ b/src/s40/translations/en_us.ts @@ -0,0 +1,3066 @@ + + + + + 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. + + + + + Quit + + + + + 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 + + + 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 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. + + + + + 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 + + + Could not read "%1" + + + + + Parse error in %1 at %2, %3: %4 + + + + + Updates.xml contains invalid content: %1 + + + + + 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 + + + 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 + + + + + Update Info: + + + + + 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 + + + + + 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::CreateLocalRepositoryOperation + + + Could not set file permissions %1! + + + + + Could not move file %1 to %2. Error: %3 + + + + + Invalid arguments in %0: %1 arguments given, 2 expected. + + + + + Could not open file: %1 + + + + + Could not read: %1. Error: %2 + + + + + Could not open file: %1. Error: %2 + + + + + Could not create target dir: %1. + + + + + Unknown exception caught: %1. + + + + + Removing file: %0 + + + + + Could not remove %0. + + + + + Cannot remove directory %1: %2 + + + + + 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. + + + + + Click Finish to exit the %1 Wizard. + + + + + Restart + + + + + Run %1 now. + + + + + The %1 Wizard failed. + + + + + QInstaller::GetRepositoryMetaInfoJob + + + Empty repository URL. + + + + + Retrieving component meta information... + + + + + Invalid repository URL: %1 + + + + + URL scheme not supported: %1 (%2) + + + + + Could not move Updates.xml to target location. Error: %1 + + + + + Could not open Updates.xml for reading. Error: %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. Error: %2 + + + + + Unknown exception caught while extracting %1. + + + + + Could not open %1 for reading. Error: %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. + + + + + 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 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 local repository + + + + + + 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 quit the %1 application? + + + + + Settings + + + + + QInstaller::PerformInstallationForm + + + + + &Show Details + + + + + &Hide Details + + + + + QInstaller::PerformInstallationPage + + + &Uninstall + + + + + Uninstalling %1 + + + + + &Update + + + + + Updating components of %1 + + + + + &Install + + + + + Installing %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 directory %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. + + + + + 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. + + + + + 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 + + + + + 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. + + + + + 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/s40/translations/sv_se.ts b/src/s40/translations/sv_se.ts new file mode 100644 index 000000000..4dafb0cac --- /dev/null +++ b/src/s40/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 directory %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