diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/componentselectionpage_p.cpp | 29 | ||||
-rw-r--r-- | src/libs/installer/componentselectionpage_p.h | 2 | ||||
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 33 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 22 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 3 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 4 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.h | 1 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 4 | ||||
-rw-r--r-- | src/libs/installer/repository.cpp | 18 | ||||
-rw-r--r-- | src/libs/installer/repository.h | 6 | ||||
-rw-r--r-- | src/libs/installer/settings.cpp | 4 | ||||
-rw-r--r-- | src/libs/kdtools/updatefinder.cpp | 10 | ||||
-rw-r--r-- | src/sdk/console.h | 3 | ||||
-rw-r--r-- | src/sdk/console_win.cpp | 13 | ||||
-rw-r--r-- | src/sdk/translations/ifw_fr.ts | 4 | ||||
-rw-r--r-- | src/sdk/translations/ifw_ru.ts | 118 | ||||
-rw-r--r-- | src/sdk/translations/translations.pro | 5 |
17 files changed, 191 insertions, 88 deletions
diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index 4e7acc837..88ea86b8a 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -37,6 +37,7 @@ #include <QTreeView> #include <QLabel> +#include <QScrollArea> #include <QPushButton> #include <QGroupBox> #include <QProgressBar> @@ -69,17 +70,24 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP m_descriptionVLayout = new QVBoxLayout; m_descriptionVLayout->setObjectName(QLatin1String("DescriptionLayout")); + m_descriptionScrollArea = new QScrollArea(q); + m_descriptionScrollArea->setWidgetResizable(true); + m_descriptionScrollArea->setFrameShape(QFrame::NoFrame); + m_descriptionScrollArea->setObjectName(QLatin1String("DescriptionScrollArea")); + m_descriptionLabel = new QLabel(q); m_descriptionLabel->setWordWrap(true); + m_descriptionLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); + m_descriptionLabel->setOpenExternalLinks(true); m_descriptionLabel->setObjectName(QLatin1String("ComponentDescriptionLabel")); - m_descriptionVLayout->addWidget(m_descriptionLabel); + m_descriptionLabel->setAlignment(Qt::AlignTop); + m_descriptionScrollArea->setWidget(m_descriptionLabel); + m_descriptionVLayout->addWidget(m_descriptionScrollArea); m_sizeLabel = new QLabel(q); m_sizeLabel->setWordWrap(true); m_sizeLabel->setObjectName(QLatin1String("ComponentSizeLabel")); m_descriptionVLayout->addWidget(m_sizeLabel); - m_descriptionVLayout->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, - QSizePolicy::MinimumExpanding)); m_treeViewVLayout = new QVBoxLayout; m_treeViewVLayout->setObjectName(QLatin1String("TreeviewLayout")); @@ -193,7 +201,7 @@ void ComponentSelectionPagePrivate::setupCategoryLayout() m_categoryGroupBox->setTitle(m_core->settings().repositoryCategoryDisplayName()); m_categoryGroupBox->setObjectName(QLatin1String("CategoryGroupBox")); QVBoxLayout *categoryLayout = new QVBoxLayout(m_categoryGroupBox); - QPushButton *fetchCategoryButton = new QPushButton(tr("Refresh")); + QPushButton *fetchCategoryButton = new QPushButton(tr("Filter")); fetchCategoryButton->setObjectName(QLatin1String("FetchCategoryButton")); connect(fetchCategoryButton, &QPushButton::clicked, this, &ComponentSelectionPagePrivate::fetchRepositoryCategories); @@ -208,9 +216,9 @@ void ComponentSelectionPagePrivate::setupCategoryLayout() checkBox->setToolTip(repository.tooltip()); categoryLayout->addWidget(checkBox); } + categoryLayout->addWidget(fetchCategoryButton); vLayout->addWidget(m_categoryGroupBox); - vLayout->addWidget(fetchCategoryButton); vLayout->addStretch(); m_mainHLayout->insertWidget(0, m_categoryWidget); } @@ -290,8 +298,15 @@ void ComponentSelectionPagePrivate::currentSelectedChanged(const QModelIndex &cu return; m_sizeLabel->setText(QString()); - m_descriptionLabel->setText(m_currentModel->data(m_currentModel->index(current.row(), - ComponentModelHelper::NameColumn, current.parent()), Qt::ToolTipRole).toString()); + + QString description = m_currentModel->data(m_currentModel->index(current.row(), + ComponentModelHelper::NameColumn, current.parent()), Qt::ToolTipRole).toString(); + + // replace {external-link}='' fields in component description with proper link tags + description.replace(QRegularExpression(QLatin1String("{external-link}='(.*?)'")), + QLatin1String("<a href=\"\\1\"><span style=\"color:#17a81a;\">\\1</span></a>")); + + m_descriptionLabel->setText(description); Component *component = m_currentModel->componentFromIndex(current); if ((m_core->isUninstaller()) || (!component)) diff --git a/src/libs/installer/componentselectionpage_p.h b/src/libs/installer/componentselectionpage_p.h index 9ebec834a..6169a06f5 100644 --- a/src/libs/installer/componentselectionpage_p.h +++ b/src/libs/installer/componentselectionpage_p.h @@ -37,6 +37,7 @@ class QTreeView; class QLabel; +class QScrollArea; class QPushButton; class QGroupBox; class QListWidgetItem; @@ -87,6 +88,7 @@ private: PackageManagerCore *m_core; QTreeView *m_treeView; QLabel *m_sizeLabel; + QScrollArea *m_descriptionScrollArea; QLabel *m_descriptionLabel; QVBoxLayout *m_descriptionVLayout; QPushButton *m_checkAll; diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 3beda7ef2..c69fda3d0 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -619,13 +619,25 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList<FileTaskResult> &re } } } - if (metadata.repository.archivename().isEmpty()) { + if (metadata.repository.categoryname().isEmpty()) { m_metaFromDefaultRepositories.insert(metadata.directory, metadata); } else { //Hash metadata to help checking if meta for repository is already fetched ArchiveMetadata archiveMetadata; archiveMetadata.metaData = metadata; - m_fetchedArchive.insertMulti(metadata.repository.archivename(), archiveMetadata); + m_fetchedArchive.insertMulti(metadata.repository.categoryname(), archiveMetadata); + + //Check if other categories have the same url (contains same metadata) + //so we can speed up other category fetches + foreach (RepositoryCategory category, m_core->settings().repositoryCategories()) { + if (category.displayname() != metadata.repository.categoryname()) { + foreach (Repository repository, category.repositories()) { + if (repository.url() == metadata.repository.url()) { + m_fetchedArchive.insertMulti(category.displayname(), archiveMetadata); + } + } + } + } // Hash for faster lookups m_metaFromArchive.insert(metadata.directory, metadata); } @@ -732,11 +744,20 @@ QSet<Repository> MetadataJob::getRepositories() // If repository is already fetched, do not fetch it again. // In updater mode, fetch always all archive repositories to get updates foreach (RepositoryCategory repositoryCategory, m_core->settings().repositoryCategories()) { - if (m_core->isUpdater() || (repositoryCategory.isEnabled() && !m_fetchedArchive.contains(repositoryCategory.displayname()))) { - foreach (Repository repository, repositoryCategory.repositories()) { - repositories.insert(repository); + if (m_core->isUpdater() || (repositoryCategory.isEnabled())) { + foreach (Repository repository, repositoryCategory.repositories()) { + QHashIterator<QString, ArchiveMetadata> i(m_fetchedArchive); + bool fetch = true; + while (i.hasNext()) { + i.next(); + ArchiveMetadata metaData = i.value(); + if (repository.url() == metaData.metaData.repository.url()) + fetch = false; + } + if (fetch) + repositories.insert(repository); + } } - } } return repositories; } diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 78198156e..4a7f42621 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -665,6 +665,22 @@ int PackageManagerCore::downloadNeededArchives(double partProgressSize) } /*! + Returns \c true if essential component update is found. +*/ +bool PackageManagerCore::foundEssentialUpdate() const +{ + return d->m_foundEssentialUpdate; +} + +/*! + Sets the value of \a foundEssentialUpdate, defaults \c true. +*/ +void PackageManagerCore::setFoundEssentialUpdate(bool foundEssentialUpdate) +{ + d->m_foundEssentialUpdate = foundEssentialUpdate; +} + +/*! Returns \c true if a hard restart of the application is requested. */ bool PackageManagerCore::needsHardRestart() const @@ -2733,7 +2749,7 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const data.components = &components; data.installedPackages = &locals; - bool foundEssentialUpdate = false; + setFoundEssentialUpdate(false); LocalPackagesHash installedPackages = locals; QStringList replaceMes; @@ -2789,7 +2805,7 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const continue; if (update->data(scEssential, scFalse).toString().toLower() == scTrue) - foundEssentialUpdate = true; + setFoundEssentialUpdate(true); // this is not a dependency, it is a real update components.insert(name, d->m_updaterComponentsDeps.takeLast()); @@ -2840,7 +2856,7 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const } } - if (foundEssentialUpdate) { + if (foundEssentialUpdate()) { foreach (QInstaller::Component *component, components) { if (d->statusCanceledOrFailed()) return false; diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index 9f8d1a304..4fa2f2554 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -266,6 +266,9 @@ public: int downloadNeededArchives(double partProgressSize); + bool foundEssentialUpdate() const; + void setFoundEssentialUpdate(bool foundEssentialUpdate = true); + bool needsHardRestart() const; void setNeedsHardRestart(bool needsHardRestart = true); bool finishedWithSuccess() const; diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index c67480737..29c3fb03a 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -1336,7 +1336,11 @@ void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOper newBinaryWritten = true; QFile tmp(binaryName); QInstaller::openForRead(&tmp); +#ifdef Q_OS_OSX writeMaintenanceToolBinary(&tmp, tmp.size(), true); +#else + writeMaintenanceToolBinary(&tmp, layout.endOfBinaryContent - layout.binaryContentSize, true); +#endif } } diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h index 21ab3fc40..e0817c573 100644 --- a/src/libs/installer/packagemanagercore_p.h +++ b/src/libs/installer/packagemanagercore_p.h @@ -247,6 +247,7 @@ private: bool m_updateSourcesAdded; qint64 m_magicBinaryMarker; bool m_componentsToInstallCalculated; + bool m_foundEssentialUpdate; mutable ScriptEngine *m_componentScriptEngine; mutable ScriptEngine *m_controlScriptEngine; diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index a053e9bff..db1b99d3f 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -1898,7 +1898,8 @@ void ComponentSelectionPage::entering() QT_TR_NOOP("Please select the components you want to update."), QT_TR_NOOP("Please select the components you want to install."), QT_TR_NOOP("Please select the components you want to uninstall."), - QT_TR_NOOP("Select the components to install. Deselect installed components to uninstall them. Any components already installed will not be updated.") + QT_TR_NOOP("Select the components to install. Deselect installed components to uninstall them. Any components already installed will not be updated."), + QT_TR_NOOP("Mandatory components need to be updated first before you can select other components to update.") }; int index = 0; @@ -1906,6 +1907,7 @@ void ComponentSelectionPage::entering() if (core->isInstaller()) index = 1; if (core->isUninstaller()) index = 2; if (core->isPackageManager()) index = 3; + if (core->foundEssentialUpdate() && core->isUpdater()) index = 4; setColoredSubTitle(tr(strings[index])); d->updateTreeView(); diff --git a/src/libs/installer/repository.cpp b/src/libs/installer/repository.cpp index 5e31d81e2..a165b8617 100644 --- a/src/libs/installer/repository.cpp +++ b/src/libs/installer/repository.cpp @@ -57,7 +57,7 @@ Repository::Repository(const Repository &other) , m_password(other.m_password) , m_displayname(other.m_displayname) , m_compressed(other.m_compressed) - , m_archivename(other.m_archivename) + , m_categoryname(other.m_categoryname) { registerMetaType(); } @@ -202,17 +202,17 @@ void Repository::setDisplayName(const QString &displayname) /*! Returns the archive name if the repository belongs to an archive. */ -QString Repository::archivename() const +QString Repository::categoryname() const { - return m_archivename; + return m_categoryname; } /*! - Sets the archive name to \a archivename if the repository belongs to an archive. + Sets the category name to \a categoryname if the repository belongs to an category. */ -void Repository::setArchiveName(const QString &archivename) +void Repository::setCategoryName(const QString &categoryname) { - m_archivename = archivename; + m_categoryname = categoryname; } /*! @@ -265,7 +265,7 @@ const Repository &Repository::operator=(const Repository &other) m_password = other.m_password; m_displayname = other.m_displayname; m_compressed = other.m_compressed; - m_archivename = other.m_archivename; + m_categoryname = other.m_categoryname; return *this; } @@ -280,7 +280,7 @@ QDataStream &operator>>(QDataStream &istream, Repository &repository) { QByteArray url, username, password, displayname, compressed; istream >> url >> repository.m_default >> repository.m_enabled >> username >> password - >> displayname >> repository.m_archivename; + >> displayname >> repository.m_categoryname; repository.setUrl(QUrl::fromEncoded(QByteArray::fromBase64(url))); repository.setUsername(QString::fromUtf8(QByteArray::fromBase64(username))); repository.setPassword(QString::fromUtf8(QByteArray::fromBase64(password))); @@ -292,7 +292,7 @@ QDataStream &operator<<(QDataStream &ostream, const Repository &repository) { return ostream << repository.m_url.toEncoded().toBase64() << repository.m_default << repository.m_enabled << repository.m_username.toUtf8().toBase64() << repository.m_password.toUtf8().toBase64() - << repository.m_displayname.toUtf8().toBase64() << repository.m_archivename.toUtf8().toBase64(); + << repository.m_displayname.toUtf8().toBase64() << repository.m_categoryname.toUtf8().toBase64(); } } diff --git a/src/libs/installer/repository.h b/src/libs/installer/repository.h index 83393ead9..546cddc97 100644 --- a/src/libs/installer/repository.h +++ b/src/libs/installer/repository.h @@ -64,8 +64,8 @@ public: QString displayname() const; void setDisplayName(const QString &displayname); - QString archivename() const; - void setArchiveName(const QString &archivename); + QString categoryname() const; + void setCategoryName(const QString &categoryname); bool isCompressed() const; void setCompressed(bool compressed); @@ -85,7 +85,7 @@ private: QString m_username; QString m_password; QString m_displayname; - QString m_archivename; + QString m_categoryname; bool m_compressed; }; diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 13eb2ce40..e0c9a3970 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -168,7 +168,7 @@ static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefaul } } if (displayName && !displayName->isEmpty()) - repo.setArchiveName(*displayName); + repo.setCategoryName(*displayName); set.insert(repo); } else if (reader.name() == QLatin1String("Tooltip")) { *tooltip = reader.readElementText(); @@ -832,7 +832,7 @@ void Settings::setSaveDefaultRepositories(bool save) QString Settings::repositoryCategoryDisplayName() const { QString displayName = d->m_data.value(QLatin1String(scRepositoryCategoryDisplayName)).toString(); - return displayName.isEmpty() ? tr("Show package categories") : displayName; + return displayName.isEmpty() ? tr("Select Package Categories") : displayName; } void Settings::setRepositoryCategoryDisplayName(const QString& name) diff --git a/src/libs/kdtools/updatefinder.cpp b/src/libs/kdtools/updatefinder.cpp index b64f922c3..b12ffac99 100644 --- a/src/libs/kdtools/updatefinder.cpp +++ b/src/libs/kdtools/updatefinder.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -601,18 +601,18 @@ int KDUpdater::compareVersion(const QString &v1, const QString &v2) bool v2_ok = false; if (index == v1_comps.count() && index < v2_comps.count()) { - v2_comps.at(index).toInt(&v2_ok); + v2_comps.at(index).toLongLong(&v2_ok); return v2_ok ? -1 : +1; } if (index < v1_comps.count() && index == v2_comps.count()) { - v1_comps.at(index).toInt(&v1_ok); + v1_comps.at(index).toLongLong(&v1_ok); return v1_ok ? +1 : -1; } if (index >= v1_comps.count() || index >= v2_comps.count()) break; - int v1_comp = v1_comps.at(index).toInt(&v1_ok); - int v2_comp = v2_comps.at(index).toInt(&v2_ok); + qlonglong v1_comp = v1_comps.at(index).toLongLong(&v1_ok); + qlonglong v2_comp = v2_comps.at(index).toLongLong(&v2_ok); if (!v1_ok) { if (v1_comps.at(index) == QLatin1String("x")) diff --git a/src/sdk/console.h b/src/sdk/console.h index 0ab6e4743..378a37e60 100644 --- a/src/sdk/console.h +++ b/src/sdk/console.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -44,6 +44,7 @@ public: private: bool parentConsole; + bool newConsoleCreated; std::ofstream m_newCout; std::ofstream m_newCerr; diff --git a/src/sdk/console_win.cpp b/src/sdk/console_win.cpp index f3226bc60..978159612 100644 --- a/src/sdk/console_win.cpp +++ b/src/sdk/console_win.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -74,7 +74,9 @@ static bool isRedirected(HANDLE stdHandle) */ Console::Console() : m_oldCout(nullptr), - m_oldCerr(nullptr) + m_oldCerr(nullptr), + parentConsole(false), + newConsoleCreated(false) { bool isCoutRedirected = isRedirected(GetStdHandle(STD_OUTPUT_HANDLE)); bool isCerrRedirected = isRedirected(GetStdHandle(STD_ERROR_HANDLE)); @@ -83,6 +85,7 @@ Console::Console() : // try to use parent console. else launch & set up new console parentConsole = AttachConsole(ATTACH_PARENT_PROCESS); if (!parentConsole) { + newConsoleCreated = true; AllocConsole(); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); if (handle != INVALID_HANDLE_VALUE) { @@ -119,11 +122,11 @@ Console::Console() : Console::~Console() { - if (!parentConsole) { - system("PAUSE"); - } else { + if (parentConsole) { // simulate enter key to switch to boot prompt PostMessage(GetConsoleWindow(), WM_KEYDOWN, 0x0D, 0); + } else if (newConsoleCreated) { + system("PAUSE"); } if (m_oldCerr) diff --git a/src/sdk/translations/ifw_fr.ts b/src/sdk/translations/ifw_fr.ts index 22758893d..07bde6e56 100644 --- a/src/sdk/translations/ifw_fr.ts +++ b/src/sdk/translations/ifw_fr.ts @@ -1835,7 +1835,7 @@ Copiez le programme d’installation sur un disque local</translation> </message> <message> <source>&Install</source> - <translation>{&Tahoma8}&Installer</translation> + <translation>&Installer</translation> </message> <message> <source>Installing %1</source> @@ -1901,7 +1901,7 @@ Copiez le programme d’installation sur un disque local</translation> </message> <message> <source>&Install</source> - <translation>{&Tahoma8}&Installer</translation> + <translation>&Installer</translation> </message> <message> <source>Ready to Install</source> diff --git a/src/sdk/translations/ifw_ru.ts b/src/sdk/translations/ifw_ru.ts index 015f3c7b9..aee59eac8 100644 --- a/src/sdk/translations/ifw_ru.ts +++ b/src/sdk/translations/ifw_ru.ts @@ -690,14 +690,6 @@ <translation>Не удалось открыть временный файл для шаблона %1: %2</translation> </message> <message> - <source>Corrupt installation</source> - <translation>Установка повреждена</translation> - </message> - <message> - <source>Your installation seems to be corrupted. Please consider re-installing from scratch.</source> - <translation>Видимо, установленное приложение повреждено. Попробуйте его заново переустановить.</translation> - </message> - <message> <source>No marker found, stopped after %1.</source> <translation>Маркер не найден, остановлено после %1.</translation> </message> @@ -765,8 +757,16 @@ <translation>Невозможно выполнить метод isDefault в сценарии %1</translation> </message> <message> + <source>There was an error loading the selected component. This component can not be installed.</source> + <translation>Возникла ошибка при загрузке выбранного компонента. Установить его не получится.</translation> + </message> + <message> <source>Update Info: </source> - <translation>Информация об обновлении:</translation> + <translation>Информация об обновлении: </translation> + </message> + <message> + <source>There was an error loading the selected component. This component can not be updated.</source> + <translation>Возникла ошибка при загрузке выбранного компонента. Обновить его не получится.</translation> </message> <message> <source>Cannot open the requested UI file "%1": %2</source> @@ -899,15 +899,22 @@ <translation>Выберите компоненты для установки. Для удаления уже установленных компонентов снимите отметки выбора. Уже установленные компоненты не будут обновлены.</translation> </message> <message> - <source>To install new compressed repository, browse the repositories from your computer</source> - <translation>Для установки нового хранилища укажите путь к нему на вашем компьютере</translation> - </message> - <message> <source>Open File</source> <translation>Открытие файла</translation> </message> </context> <context> + <name>QInstaller::ComponentSelectionPagePrivate</name> + <message> + <source>Filter</source> + <translation>Отфильтровать</translation> + </message> + <message> + <source>Error</source> + <translation>Ошибка</translation> + </message> +</context> +<context> <name>QInstaller::ConsumeOutputOperation</name> <message> <source>Needed installer object in %1 operation is empty.</source> @@ -1151,10 +1158,6 @@ Error while loading %2</source> <translation>Обнаружено кольцо перенаправлений «%1».</translation> </message> <message> - <source>Checksum mismatch detected for "%1".</source> - <translation>Обнаружено несовпадение контрольной суммы «%1».</translation> - </message> - <message> <source>Network error while downloading '%1': %2.</source> <translation>Возникла ошибка сети при загрузке «%1»: %2.</translation> </message> @@ -1193,6 +1196,13 @@ Error while loading %2</source> </message> </context> <context> + <name>QInstaller::ExtractArchiveOperation</name> + <message> + <source>Extracting "%1"</source> + <translation>Извлечение «%1»</translation> + </message> +</context> +<context> <name>QInstaller::ExtractArchiveOperation::Runnable</name> <message> <source>Cannot open archive "%1" for reading: %2</source> @@ -1349,16 +1359,16 @@ Error while loading %2</source> <translation>Добро пожаловать в мастер установки %1.</translation> </message> <message> - <source>Add or remove components</source> - <translation>Добавление или удаление компонентов</translation> + <source>&Add or remove components</source> + <translation>&Добавление или удаление компонентов</translation> </message> <message> - <source>Update components</source> - <translation>Обновление компонентов</translation> + <source>&Update components</source> + <translation>&Обновление компонентов</translation> </message> <message> - <source>Remove all components</source> - <translation>Удаление всех компонентов</translation> + <source>&Remove all components</source> + <translation>&Удаление всех компонентов</translation> </message> <message> <source>Retrieving information from remote installation sources...</source> @@ -1377,8 +1387,8 @@ Error while loading %2</source> <translation> Доступно только локальное управление пакетами.</translation> </message> <message> - <source>Quit</source> - <translation>Выйти</translation> + <source>&Quit</source> + <translation>&Выйти</translation> </message> </context> <context> @@ -1483,8 +1493,16 @@ Error while loading %2</source> <translation>Возникло неизвестное исключение во время загрузки.</translation> </message> <message> - <source>Retrieving meta information from remote repository...</source> - <translation>Получение метаданных из внешнего хранилища...</translation> + <source>Checksum mismatch detected for "%1".</source> + <translation>Обнаружено несовпадение контрольной суммы у «%1».</translation> + </message> + <message> + <source>Retrieving meta information from remote repository... %1/%2 </source> + <translation>Получение метаданных из внешнего хранилища... %1/%2 </translation> + </message> + <message> + <source>Retrieving meta information from remote repository... </source> + <translation>Получение метаданных из внешнего хранилища... </translation> </message> <message> <source>Failure to fetch repositories.</source> @@ -1636,7 +1654,7 @@ Downloading packages...</source> </message> <message> <source>Creating local repository</source> - <translation>Создаётся локальный репозиторий</translation> + <translation>Создаётся локальное хранилище</translation> </message> <message> <source> @@ -1722,6 +1740,10 @@ Installing component %1...</source> <translation>Ошибка во время процесса установки (%1): %2</translation> </message> <message> + <source>Done</source> + <translation>Готово</translation> + </message> + <message> <source>Cannot prepare uninstall</source> <translation>Невозможно подготовиться к удалению</translation> </message> @@ -1963,10 +1985,6 @@ Please copy the installer to a local drive</source> <source>Register File Type: Invalid arguments</source> <translation>Регистрация типов файлов: недопустимые параметры</translation> </message> - <message> - <source><extension> <command> [description [contentType [icon]]]</source> - <translation><расширение> <команда> [описание [типСодержимого [значок]]]</translation> - </message> </context> <context> <name>QInstaller::RemoteObject</name> @@ -2022,6 +2040,10 @@ Please copy the installer to a local drive</source> <source>Unknown error.</source> <translation>Неизвестная ошибка.</translation> </message> + <message> + <source>on line number: </source> + <translation>в строке: </translation> + </message> </context> <context> <name>QInstaller::SelfRestartOperation</name> @@ -2283,6 +2305,10 @@ as a user with the appropriate rights and then clicking OK.</source> <source>Cannot open settings file %1 for reading: %2</source> <translation>Невозможно открыть файл настроек %1 на чтение: %2</translation> </message> + <message> + <source>Select Package Categories</source> + <translation>Выберите категории пакетов</translation> + </message> </context> <context> <name>SettingsDialog</name> @@ -2320,7 +2346,7 @@ as a user with the appropriate rights and then clicking OK.</source> </message> <message> <source>Repositories</source> - <translation>Репозитории</translation> + <translation>Хранилища</translation> </message> <message> <source>Add Username and Password for authentication if needed.</source> @@ -2328,7 +2354,7 @@ as a user with the appropriate rights and then clicking OK.</source> </message> <message> <source>Use temporary repositories only</source> - <translation>использовать только временные репозитории</translation> + <translation>использовать только временные хранилища</translation> </message> <message> <source>Add</source> @@ -2340,15 +2366,15 @@ as a user with the appropriate rights and then clicking OK.</source> </message> <message> <source>Test</source> - <translation>Тестировать</translation> + <translation>Проверить</translation> </message> <message> <source>Show Passwords</source> - <translation>Показывать пароль</translation> + <translation>Показать пароли</translation> </message> <message> <source>Check this to use repository during fetch.</source> - <translation>Поставьте флажок, чтобы использовать репозиторий в процессе получения.</translation> + <translation>Поставьте флажок, чтобы использовать хранилище в процессе получения.</translation> </message> <message> <source>Add the username to authenticate on the server.</source> @@ -2360,7 +2386,7 @@ as a user with the appropriate rights and then clicking OK.</source> </message> <message> <source>The servers URL that contains a valid repository.</source> - <translation>Адреса серверов, которые содержат рабочие репозиторий.</translation> + <translation>Адреса серверов, которые содержат рабочие хранилища.</translation> </message> <message> <source>Hide Passwords</source> @@ -2380,19 +2406,19 @@ as a user with the appropriate rights and then clicking OK.</source> </message> <message> <source>Repository</source> - <translation>Репозиторий</translation> + <translation>Хранилище</translation> </message> <message> <source>Default repositories</source> - <translation>Репозитории по умолчанию</translation> + <translation>Хранилища по умолчанию</translation> </message> <message> <source>Temporary repositories</source> - <translation>Временные репозитории</translation> + <translation>Временные хранилища</translation> </message> <message> <source>User defined repositories</source> - <translation>Использовать назначенные репозитории</translation> + <translation>Использовать назначенные хранилища</translation> </message> <message> <source>An error occurred while testing this repository.</source> @@ -2410,6 +2436,14 @@ as a user with the appropriate rights and then clicking OK.</source> <source>Do you want to enable the repository?</source> <translation>Желаете включить хранилище?</translation> </message> + <message> + <source>Select All</source> + <translation>Выбрать всё</translation> + </message> + <message> + <source>Deselect All</source> + <translation>Снять выбор</translation> + </message> </context> <context> <name>UpdateOperation</name> diff --git a/src/sdk/translations/translations.pro b/src/sdk/translations/translations.pro index 8a77a0b44..a951a5b53 100644 --- a/src/sdk/translations/translations.pro +++ b/src/sdk/translations/translations.pro @@ -21,12 +21,13 @@ for(file, IB_ALL_TRANSLATIONS) { ts-all.commands = cd $$wd && $$LUPDATE $$lupdate_opts $$sources -ts $$IB_ALL_TRANSLATIONS QMAKE_EXTRA_TARGETS += ts-all +lconvert_options = -sort-contexts -locations none -i isEqual(QMAKE_DIR_SEP, /) { commit-ts.commands = \ cd $$wd; \ git add -N src/sdk/translations/*_??.ts && \ for f in `git diff-files --name-only src/sdk/translations/*_??.ts`; do \ - $$LCONVERT -locations none -i \$\$f -o \$\$f; \ + $$LCONVERT $$lconvert_options \$\$f -o \$\$f; \ done; \ git add src/sdk/translations/*_??.ts && git commit } else { @@ -34,7 +35,7 @@ isEqual(QMAKE_DIR_SEP, /) { cd $$wd && \ git add -N src/sdk/translations/*_??.ts && \ for /f usebackq %%f in (`git diff-files --name-only src/sdk/translations/*_??.ts`) do \ - $$LCONVERT -locations none -i %%f -o %%f $$escape_expand(\\n\\t) \ + $$LCONVERT $$lconvert_options %%f -o %%f $$escape_expand(\\n\\t) \ cd $$wd && git add src/sdk/translations/*_??.ts && git commit } QMAKE_EXTRA_TARGETS += commit-ts |