From 717ccf9193a2dfffed7bde096e1adaaf4b69178b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= Date: Tue, 19 May 2020 16:43:06 +0200 Subject: [PATCH 01/23] [postcfg] also remove calamares-git if present --- src/modules/postcfg/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/postcfg/main.py b/src/modules/postcfg/main.py index 9fec42289..78dccb8f2 100644 --- a/src/modules/postcfg/main.py +++ b/src/modules/postcfg/main.py @@ -98,6 +98,7 @@ class ConfigController: # Remove calamares self.remove_pkg("calamares", "usr/bin/calamares") + self.remove_pkg("calamares-git", "usr/bin/calamares") # Copy skel to root self.copy_folder('etc/skel', 'root') From 3e51fe4651b08b0f5fd7f6c47db027c2f5956f76 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 15:05:05 +0200 Subject: [PATCH 02/23] [partition] Remove spurious Q_FUNC_INFO from logging - The Q_FUNC_INFO was integrated into regular logging with commit 5248a37eb3ac162d8fc86f3bf4c2f9314842f467 --- src/modules/partition/gui/ChoicePage.cpp | 2 +- src/modules/partition/gui/PartitionSplitterWidget.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 5c90ea7b0..69a740d20 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -560,7 +560,7 @@ ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current, Partition* part = modl->partitionForIndex( current ); if ( !part ) { - cDebug() << Q_FUNC_INFO << "Partition not found for index" << current; + cDebug() << "Partition not found for index" << current; return; } diff --git a/src/modules/partition/gui/PartitionSplitterWidget.cpp b/src/modules/partition/gui/PartitionSplitterWidget.cpp index bcc80b65a..5d2803b76 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.cpp +++ b/src/modules/partition/gui/PartitionSplitterWidget.cpp @@ -120,10 +120,10 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, qint64 maxSize, qint64 preferredSize ) { - cDebug() << Q_FUNC_INFO << "path:" << path - << "\nminSize:" << minSize - << "\nmaxSize:" << maxSize - << "\nprfSize:" << preferredSize; + cDebug() << "path:" << path + << Logger::Continuation << "minSize:" << minSize + << Logger::Continuation << "maxSize:" << maxSize + << Logger::Continuation << "prfSize:" << preferredSize; if ( m_itemToResize && m_itemToResizeNext ) { From 8db8752a41c70f65d6bc9e1ecdef09bad3898364 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 15:06:43 +0200 Subject: [PATCH 03/23] [libcalamaresui] Remove spurious Q_FUNC_INFO --- src/libcalamaresui/modulesystem/CppJobModule.cpp | 4 ++-- src/libcalamaresui/modulesystem/ViewModule.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp index 2eddeda86..632a9dcb8 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.cpp +++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp @@ -52,14 +52,14 @@ CppJobModule::loadSelf() CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { - cDebug() << Q_FUNC_INFO << m_loader->errorString(); + cDebug() << "Could not load module:" << m_loader->errorString(); return; } CppJob* cppJob = pf->create< Calamares::CppJob >(); if ( !cppJob ) { - cDebug() << Q_FUNC_INFO << m_loader->errorString(); + cDebug() << "Could not load module:" << m_loader->errorString(); return; } // cDebug() << "CppJobModule loading self for instance" << instanceKey() diff --git a/src/libcalamaresui/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp index 02c771ee2..54a79ab66 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.cpp +++ b/src/libcalamaresui/modulesystem/ViewModule.cpp @@ -53,14 +53,14 @@ ViewModule::loadSelf() CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { - cWarning() << Q_FUNC_INFO << "No factory:" << m_loader->errorString(); + cWarning() << "No factory:" << m_loader->errorString(); return; } m_viewStep = pf->create< Calamares::ViewStep >(); if ( !m_viewStep ) { - cWarning() << Q_FUNC_INFO << "create() failed" << m_loader->errorString(); + cWarning() << "create() failed" << m_loader->errorString(); return; } } @@ -76,7 +76,7 @@ ViewModule::loadSelf() } else { - cWarning() << Q_FUNC_INFO << "No view step was created"; + cWarning() << "No view step was created"; } } From ec2fc5a7637d4f50315d7c6ccfc2f6a93943abd3 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 16:25:30 +0200 Subject: [PATCH 04/23] [libcalamaresui] Better default font size - Previously, unless setDefaultFontSize() was called explicitly, the default size would be 0, leading to unexpected and weird displays (and a warning on stderr). - If setDefaultFontSize() is not called, get a sensible size instead (like defaultFontHeight() was already trying to do). --- src/libcalamaresui/utils/CalamaresUtilsGui.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp index bd15d7a68..680673a22 100644 --- a/src/libcalamaresui/utils/CalamaresUtilsGui.cpp +++ b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp @@ -207,6 +207,10 @@ unmarginLayout( QLayout* layout ) int defaultFontSize() { + if ( s_defaultFontSize <= 0 ) + { + s_defaultFontSize = QFont().pointSize(); + } return s_defaultFontSize; } From bd73981c5f41c5d2ad162764da75b38507821efd Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 14:09:12 +0200 Subject: [PATCH 05/23] [calamares] Add -s option to module-tester - The -s will run the slideshow with a bogus job-queue, allowing easier testing of the slideshow. This is more convenient than having a Calamares with an empty show and a bogus exec section. - The -s option for running the slideshow / execution phase of Calamares needs to create a bogus Module for the ExecutionViewStep. --- src/calamares/testmain.cpp | 111 +++++++++++++++++++++++++++++++++---- 1 file changed, 101 insertions(+), 10 deletions(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index f353fa6d5..77c86a59a 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -22,18 +22,18 @@ * bindings. */ -#include "modulesystem/Module.h" -#include "utils/Logger.h" -#include "utils/Yaml.h" - #include "Branding.h" #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" - +#include "modulesystem/Module.h" #include "modulesystem/ModuleManager.h" +#include "modulesystem/ViewModule.h" +#include "utils/Logger.h" +#include "utils/Yaml.h" +#include "viewpages/ExecutionViewStep.h" #include #include @@ -80,6 +80,8 @@ handle_args( QCoreApplication& a ) "src/branding/default/branding.desc" ); QCommandLineOption uiOption( QStringList() << QStringLiteral( "U" ) << QStringLiteral( "ui" ), QStringLiteral( "Enable UI" ) ); + QCommandLineOption slideshowOption( QStringList() << QStringLiteral( "s" ) << QStringLiteral( "slideshow" ), + QStringLiteral( "Run slideshow module" ) ); QCommandLineParser parser; parser.setApplicationDescription( "Calamares module tester" ); @@ -92,13 +94,14 @@ handle_args( QCoreApplication& a ) parser.addOption( langOption ); parser.addOption( brandOption ); parser.addOption( uiOption ); + parser.addOption( slideshowOption ); parser.addPositionalArgument( "module", "Path or name of module to run." ); parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]" ); parser.process( a ); const QStringList args = parser.positionalArguments(); - if ( args.isEmpty() ) + if ( args.isEmpty() && !parser.isSet( slideshowOption ) ) { cError() << "Missing path.\n"; parser.showHelp(); @@ -116,20 +119,92 @@ handle_args( QCoreApplication& a ) jobSettings = args.at( 1 ); } - return ModuleConfig { args.first(), + return ModuleConfig { parser.isSet( slideshowOption ) ? QStringLiteral( "-" ) : args.first(), jobSettings, parser.value( globalOption ), parser.value( langOption ), parser.value( brandOption ), - parser.isSet( uiOption ) }; + parser.isSet( slideshowOption ) || parser.isSet( uiOption ) }; } } +/** @brief Bogus module for --slideshow option + * + * Normally the slideshow -- displayed by ExecutionViewStep -- is not + * associated with any particular module in the Calamares configuration. + * It is added internally by the module manager. For the module-loader + * testing application, we need something that pretends to be the + * module for the ExecutionViewStep. + */ +class ExecViewModule : public Calamares::Module +{ +public: + ExecViewModule(); + ~ExecViewModule() override; + + void loadSelf() override; + + virtual Type type() const override; + virtual Interface interface() const override; + + virtual Calamares::JobList jobs() const override; + + +protected: + void initFrom( const QVariantMap& ) override; +}; + +ExecViewModule::ExecViewModule() + : Calamares::Module() +{ +} + +ExecViewModule::~ExecViewModule() {} + +void +ExecViewModule::initFrom( const QVariantMap& ) +{ +} + +void +ExecViewModule::loadSelf() +{ + auto* viewStep = new Calamares::ExecutionViewStep(); + viewStep->setModuleInstanceKey( instanceKey() ); + viewStep->setConfigurationMap( m_configurationMap ); + Calamares::ViewManager::instance()->addViewStep( viewStep ); + m_loaded = true; +} + +Calamares::Module::Type +ExecViewModule::type() const +{ + return Module::Type::View; +} + + +Calamares::Module::Interface +ExecViewModule::interface() const +{ + return Module::Interface::QtPlugin; +} + +Calamares::JobList +ExecViewModule::jobs() const +{ + return Calamares::JobList(); +} + static Calamares::Module* load_module( const ModuleConfig& moduleConfig ) { QString moduleName = moduleConfig.moduleName(); + if ( moduleName == "-" ) + { + return new ExecViewModule; + } + QFileInfo fi; bool ok = false; @@ -188,6 +263,18 @@ load_module( const ModuleConfig& moduleConfig ) return module; } +static bool +is_ui_option( const char* s ) +{ + return !qstrcmp( s, "--ui" ) || !qstrcmp( s, "-U" ); +} + +static bool +is_slideshow_option( const char* s ) +{ + return !qstrcmp( s, "--slideshow" ) || !qstrcmp( s, "-s" ); +} + /** @brief Create the right kind of QApplication * * Does primitive parsing of argv[] to find the --ui option and returns @@ -202,7 +289,7 @@ createApplication( int& argc, char* argv[] ) { for ( int i = 1; i < argc; ++i ) { - if ( !qstrcmp( argv[ i ], "--ui" ) || !qstrcmp( argv[ i ], "-U" ) ) + if ( is_slideshow_option( argv[ i ] ) || is_ui_option( argv[ i ] ) ) { auto* aw = new QApplication( argc, argv ); aw->setQuitOnLastWindowClosed( true ); @@ -252,7 +339,11 @@ main( int argc, char* argv[] ) cDebug() << " .. got" << m->name() << m->typeString() << m->interfaceString(); if ( m->type() == Calamares::Module::Type::View ) { - if ( !qobject_cast< QApplication* >(aw) ) + // If we forgot the --ui, any ViewModule will core dump as it + // tries to create the widget **which won't be used anyway**. + // + // To avoid that crash, re-create the QApplication, now with GUI + if ( !qobject_cast< QApplication* >( aw ) ) { auto* replace_app = new QApplication( argc, argv ); replace_app->setQuitOnLastWindowClosed( true ); From ae861f7ec0134c3c50c32118e72e1ffb5a36f934 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 16:43:26 +0200 Subject: [PATCH 06/23] [calamares] Give slideshow-test some jobs to run --- src/calamares/testmain.cpp | 43 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 77c86a59a..3405b0530 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -23,6 +23,7 @@ */ #include "Branding.h" +#include "CppJob.h" #include "GlobalStorage.h" #include "Job.h" #include "JobQueue.h" @@ -42,6 +43,7 @@ #include #include #include +#include #include @@ -128,6 +130,39 @@ handle_args( QCoreApplication& a ) } } +/** @brief Bogus Job for --slideshow option + * + * Generally one would use DummyCppJob for this kind of dummy + * job, but that class lives in a module so isn't available + * in this test application. + * + * This bogus job just sleeps for 3. + */ +class ExecViewJob : public Calamares::CppJob +{ +public: + explicit ExecViewJob( const QString& name ) + : m_name( name ) + { + } + virtual ~ExecViewJob() override; + + QString prettyName() const override { return m_name; } + + Calamares::JobResult exec() override + { + QThread::sleep( 3 ); + return Calamares::JobResult::ok(); + } + + void setConfigurationMap( const QVariantMap& ) override {} + +private: + QString m_name; +}; + +ExecViewJob::~ExecViewJob() {} + /** @brief Bogus module for --slideshow option * * Normally the slideshow -- displayed by ExecutionViewStep -- is not @@ -192,10 +227,13 @@ ExecViewModule::interface() const Calamares::JobList ExecViewModule::jobs() const { - return Calamares::JobList(); + Calamares::JobList l; + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step 1" ) ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step two" ) ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step III" ) ) ) ); + return l; } - static Calamares::Module* load_module( const ModuleConfig& moduleConfig ) { @@ -376,6 +414,7 @@ main( int argc, char* argv[] ) mw->setCentralWidget( w ); w->show(); mw->show(); + vm->currentStep()->onActivate(); return aw->exec(); } From 0947da3d41f8a861020cca3a778899cd6f5244aa Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 17:08:49 +0200 Subject: [PATCH 07/23] [libcalamaresui] Report on QML errors - If the slideshow fails to load entirely, say so --- src/libcalamaresui/viewpages/Slideshow.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp index 85551f797..db994029c 100644 --- a/src/libcalamaresui/viewpages/Slideshow.cpp +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -23,7 +23,9 @@ #include "Branding.h" #include "utils/Dirs.h" #include "utils/Logger.h" +#ifdef WITH_QML #include "utils/Qml.h" +#endif #include "utils/Retranslator.h" #include @@ -50,6 +52,8 @@ SlideshowQML::SlideshowQML( QWidget* parent ) , m_qmlComponent( nullptr ) , m_qmlObject( nullptr ) { + CalamaresUtils::registerCalamaresModels(); + m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView ); m_qmlShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() ); @@ -126,6 +130,21 @@ SlideshowQML::loadQmlV2Complete() } } } + else + { + if ( m_qmlObject ) + { + cWarning() << "QML object already created"; + } + else if ( !m_qmlComponent ) + { + cWarning() << "QML component does not exist"; + } + else if ( m_qmlComponent && !m_qmlComponent->isReady() ) + { + cWarning() << "QML component not ready:" << m_qmlComponent->errors(); + } + } } /* From 40dd34c7d029308ffeffc29dc95564d2cd5a4f3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= Date: Tue, 19 May 2020 12:46:16 -0400 Subject: [PATCH 08/23] [rawfs] Fix crash if bogus is unset - fixes: 12:44:25 [6]: Python Error: 'builtin_function_or_method' object is not subscriptable File "/usr/lib/calamares/modules/rawfs/main.py", line 188, in run item.copy(filesystems.index(item), len(filesystems)) File "/usr/lib/calamares/modules/rawfs/main.py", line 99, in copy if libcalamares.job.configuration["bogus"]: --- src/modules/rawfs/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/rawfs/main.py b/src/modules/rawfs/main.py index 1898d8fea..68f3c444e 100644 --- a/src/modules/rawfs/main.py +++ b/src/modules/rawfs/main.py @@ -96,7 +96,7 @@ class RawFSItem: count = 0 libcalamares.utils.debug("Copying {} to {}".format(self.source, self.destination)) - if libcalamares.job.configuration["bogus"]: + if libcalamares.job.configuration.get("bogus", False): return srcsize, srcblksize = get_device_size(self.source) From 4491fb8c2758e3ae0e28de511f50211877c81285 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 17:17:14 +0200 Subject: [PATCH 09/23] [libcalamaresui] Name QML-wrangling functions consistently - Use "Qml" in camel-cased names --- src/calamares/CalamaresWindow.cpp | 4 ++-- src/libcalamaresui/utils/Qml.cpp | 4 ++-- src/libcalamaresui/utils/Qml.h | 4 ++-- src/libcalamaresui/viewpages/QmlViewStep.cpp | 4 ++-- src/libcalamaresui/viewpages/Slideshow.cpp | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 2ab7cd5fa..a3775c44e 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -208,7 +208,7 @@ CalamaresWindow::getWidgetNavigation( QWidget* parent ) QWidget* CalamaresWindow::getQmlSidebar( QWidget* parent, int ) { - CalamaresUtils::registerCalamaresModels(); + CalamaresUtils::registerQmlModels(); QQuickWidget* w = new QQuickWidget( parent ); w->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); w->setResizeMode( QQuickWidget::SizeRootObjectToView ); @@ -220,7 +220,7 @@ CalamaresWindow::getQmlSidebar( QWidget* parent, int ) QWidget* CalamaresWindow::getQmlNavigation( QWidget* parent ) { - CalamaresUtils::registerCalamaresModels(); + CalamaresUtils::registerQmlModels(); QQuickWidget* w = new QQuickWidget( parent ); w->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); w->setResizeMode( QQuickWidget::SizeRootObjectToView ); diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp index 5f3264da9..2837dfb5e 100644 --- a/src/libcalamaresui/utils/Qml.cpp +++ b/src/libcalamaresui/utils/Qml.cpp @@ -34,7 +34,7 @@ namespace CalamaresUtils { void -callQMLFunction( QQuickItem* qmlObject, const char* method ) +callQmlFunction( QQuickItem* qmlObject, const char* method ) { QByteArray methodSignature( method ); methodSignature.append( "()" ); @@ -149,7 +149,7 @@ qmlSearchNames() } void -registerCalamaresModels() +registerQmlModels() { static bool done = false; if ( !done ) diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h index 33b44b9ea..d9d226034 100644 --- a/src/libcalamaresui/utils/Qml.h +++ b/src/libcalamaresui/utils/Qml.h @@ -40,7 +40,7 @@ namespace CalamaresUtils * Additionally, modules based on QmlViewStep have a context * property `config` referring to that module's configuration (if any). */ -UIDLLEXPORT void registerCalamaresModels(); +UIDLLEXPORT void registerQmlModels(); /** @brief Calls the QML method @p method on @p qmlObject * @@ -50,7 +50,7 @@ UIDLLEXPORT void registerCalamaresModels(); * * If there is a return value from the QML method, it is logged (but not otherwise used). */ -UIDLLEXPORT void callQMLFunction( QQuickItem* qmlObject, const char* method ); +UIDLLEXPORT void callQmlFunction( QQuickItem* qmlObject, const char* method ); /** @brief Search modes for loading Qml files. * diff --git a/src/libcalamaresui/viewpages/QmlViewStep.cpp b/src/libcalamaresui/viewpages/QmlViewStep.cpp index f92ef47e7..2234c230a 100644 --- a/src/libcalamaresui/viewpages/QmlViewStep.cpp +++ b/src/libcalamaresui/viewpages/QmlViewStep.cpp @@ -58,7 +58,7 @@ changeQMLState( QMLAction action, QQuickItem* item ) static const char propertyName[] = "activatedInCalamares"; bool activate = action == QMLAction::Start; - CalamaresUtils::callQMLFunction( item, activate ? "onActivate" : "onLeave" ); + CalamaresUtils::callQmlFunction( item, activate ? "onActivate" : "onLeave" ); auto property = item->property( propertyName ); if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) @@ -76,7 +76,7 @@ QmlViewStep::QmlViewStep( QObject* parent ) , m_spinner( new WaitingWidget( tr( "Loading ..." ) ) ) , m_qmlWidget( new QQuickWidget ) { - CalamaresUtils::registerCalamaresModels(); + CalamaresUtils::registerQmlModels(); QVBoxLayout* layout = new QVBoxLayout( m_widget ); layout->addWidget( m_spinner ); diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp index db994029c..baed36252 100644 --- a/src/libcalamaresui/viewpages/Slideshow.cpp +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -52,7 +52,7 @@ SlideshowQML::SlideshowQML( QWidget* parent ) , m_qmlComponent( nullptr ) , m_qmlObject( nullptr ) { - CalamaresUtils::registerCalamaresModels(); + CalamaresUtils::registerQmlModels(); m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView ); @@ -163,7 +163,7 @@ SlideshowQML::changeSlideShowState( Action state ) if ( Branding::instance()->slideshowAPI() == 2 ) { // The QML was already loaded in the constructor, need to start it - CalamaresUtils::callQMLFunction( m_qmlObject, activate ? "onActivate" : "onLeave" ); + CalamaresUtils::callQmlFunction( m_qmlObject, activate ? "onActivate" : "onLeave" ); } else if ( !Calamares::Branding::instance()->slideshowPath().isEmpty() ) { From 6dffec27304d0eb90595234545788529d5291514 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 17:39:57 +0200 Subject: [PATCH 10/23] [libcalamaresui] Move QML-related directory functions to Qml.cpp --- src/calamares/CalamaresApplication.cpp | 3 +++ src/libcalamares/utils/Dirs.cpp | 15 --------------- src/libcalamares/utils/Dirs.h | 4 ---- src/libcalamaresui/utils/Qml.cpp | 14 ++++++++++++++ src/libcalamaresui/utils/Qml.h | 11 ++++++++++- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index 5ef97a6a3..e90a67bb3 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -32,6 +32,9 @@ #include "utils/CalamaresUtilsSystem.h" #include "utils/Dirs.h" #include "utils/Logger.h" +#ifdef WITH_QML +#include "utils/Qml.h" +#endif #include "utils/Retranslator.h" #include "viewpages/ViewStep.h" diff --git a/src/libcalamares/utils/Dirs.cpp b/src/libcalamares/utils/Dirs.cpp index ca569490f..bb48477da 100644 --- a/src/libcalamares/utils/Dirs.cpp +++ b/src/libcalamares/utils/Dirs.cpp @@ -42,7 +42,6 @@ namespace CalamaresUtils { static QDir s_appDataDir( CMAKE_INSTALL_FULL_DATADIR ); -static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" ); static bool s_isAppDataDirOverridden = false; static bool s_haveExtraDirs = false; @@ -79,13 +78,6 @@ isWritableDir( const QDir& dir ) } -QDir -qmlModulesDir() -{ - return s_qmlModulesDir; -} - - void setAppDataDir( const QDir& dir ) { @@ -200,11 +192,4 @@ appLogDir() return QDir::temp(); } - -void -setQmlModulesDir( const QDir& dir ) -{ - s_qmlModulesDir = dir; -} - } // namespace CalamaresUtils diff --git a/src/libcalamares/utils/Dirs.h b/src/libcalamares/utils/Dirs.h index a63e679da..79c07a957 100644 --- a/src/libcalamares/utils/Dirs.h +++ b/src/libcalamares/utils/Dirs.h @@ -31,8 +31,6 @@ namespace CalamaresUtils { -DLLEXPORT QDir qmlModulesDir(); - /** * @brief appDataDir returns the directory with common application data. * Defaults to CMAKE_INSTALL_FULL_DATADIR (usually /usr/share/calamares). @@ -57,8 +55,6 @@ DLLEXPORT QDir systemLibDir(); DLLEXPORT void setAppDataDir( const QDir& dir ); DLLEXPORT bool isAppDataDirOverridden(); -DLLEXPORT void setQmlModulesDir( const QDir& dir ); - /** @brief Setup extra config and data dirs from the XDG variables. */ DLLEXPORT void setXdgDirs(); diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp index 2837dfb5e..eabbf8d33 100644 --- a/src/libcalamaresui/utils/Qml.cpp +++ b/src/libcalamaresui/utils/Qml.cpp @@ -30,8 +30,22 @@ #include #include +static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" ); + namespace CalamaresUtils { +QDir +qmlModulesDir() +{ + return s_qmlModulesDir; +} + +void +setQmlModulesDir( const QDir& dir ) +{ + s_qmlModulesDir = dir; +} + void callQmlFunction( QQuickItem* qmlObject, const char* method ) diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h index d9d226034..2da36633a 100644 --- a/src/libcalamaresui/utils/Qml.h +++ b/src/libcalamaresui/utils/Qml.h @@ -24,10 +24,19 @@ #include "modulesystem/InstanceKey.h" #include "utils/NamedEnum.h" +#include + class QQuickItem; namespace CalamaresUtils { +/// @brief the extra directory where Calamares searches for QML files +UIDLLEXPORT QDir qmlModulesDir(); +/// @brief sets specific directory for searching for QML files +UIDLLEXPORT void setQmlModulesDir( const QDir& dir ); + + + /** @brief Sets up global Calamares models for QML * * This needs to be called at least once to make the global Calamares @@ -66,7 +75,7 @@ enum class QmlSearch Both }; -///@brief Names for the search terms (in config files) +/// @brief Names for the search terms (in config files) UIDLLEXPORT const NamedEnumTable< QmlSearch >& qmlSearchNames(); /** @brief Find a suitable QML file, given the search method and name hints From 1fec95ac48717942be1be673119710d795f5a774 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 19 May 2020 21:25:05 +0200 Subject: [PATCH 11/23] [libcalamares] Move QML search-path initialization - QML files need to be searched in specific places; this was initialized by Calamares, but not for the text application. Move initialization into the library. --- src/calamares/CalamaresApplication.cpp | 60 ++----------------------- src/calamares/testmain.cpp | 7 +++ src/libcalamaresui/utils/Qml.cpp | 62 +++++++++++++++++++++++++- src/libcalamaresui/utils/Qml.h | 8 +++- 4 files changed, 77 insertions(+), 60 deletions(-) diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index e90a67bb3..43a48881c 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -120,34 +120,6 @@ CalamaresApplication::mainWindow() } -static QStringList -qmlDirCandidates( bool assumeBuilddir ) -{ - static const char QML[] = "qml"; - - QStringList qmlDirs; - if ( CalamaresUtils::isAppDataDirOverridden() ) - { - qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); - } - else - { - if ( assumeBuilddir ) - { - qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir - } - if ( CalamaresUtils::haveExtraDirs() ) - for ( auto s : CalamaresUtils::extraDataDirs() ) - { - qmlDirs << ( s + QML ); - } - qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); - } - - return qmlDirs; -} - - static QStringList brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename ) { @@ -178,38 +150,12 @@ brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename ) void CalamaresApplication::initQmlPath() { - QDir importPath; // Right now, current-dir - QStringList qmlDirCandidatesByPriority = qmlDirCandidates( isDebug() ); - bool found = false; - - foreach ( const QString& path, qmlDirCandidatesByPriority ) +#ifdef WITH_QML + if ( !CalamaresUtils::initQmlModulesDir() ) { - QDir dir( path ); - if ( dir.exists() && dir.isReadable() ) - { - importPath = dir; - found = true; - break; - } - } - - if ( !found || !importPath.exists() || !importPath.isReadable() ) - { - cError() << "Cowardly refusing to continue startup without a QML directory." - << Logger::DebugList( qmlDirCandidatesByPriority ); - if ( CalamaresUtils::isAppDataDirOverridden() ) - { - cError() << "FATAL: explicitly configured application data directory is missing qml/"; - } - else - { - cError() << "FATAL: none of the expected QML paths exist."; - } ::exit( EXIT_FAILURE ); } - - cDebug() << "Using Calamares QML directory" << importPath.absolutePath(); - CalamaresUtils::setQmlModulesDir( importPath ); +#endif } diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 3405b0530..57da890cc 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -33,6 +33,9 @@ #include "modulesystem/ModuleManager.h" #include "modulesystem/ViewModule.h" #include "utils/Logger.h" +#ifdef WITH_QML +#include "utils/Qml.h" +#endif #include "utils/Yaml.h" #include "viewpages/ExecutionViewStep.h" @@ -366,6 +369,10 @@ main( int argc, char* argv[] ) gs->insert( "localeConf", vm ); } +#ifdef WITH_QML + CalamaresUtils::initQmlModulesDir(); // don't care if failed +#endif + cDebug() << "Calamares module-loader testing" << module.moduleName(); Calamares::Module* m = load_module( module ); if ( !m ) diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp index eabbf8d33..4f53aa317 100644 --- a/src/libcalamaresui/utils/Qml.cpp +++ b/src/libcalamaresui/utils/Qml.cpp @@ -21,7 +21,9 @@ #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" +#include "Settings.h" #include "ViewManager.h" +#include "utils/Dirs.h" #include "utils/Logger.h" #include @@ -46,6 +48,62 @@ setQmlModulesDir( const QDir& dir ) s_qmlModulesDir = dir; } +static QStringList +qmlDirCandidates( bool assumeBuilddir ) +{ + static const char QML[] = "qml"; + + QStringList qmlDirs; + if ( CalamaresUtils::isAppDataDirOverridden() ) + { + qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); + } + else + { + if ( assumeBuilddir ) + { + qmlDirs << QDir::current().absoluteFilePath( "src/qml" ); // In build-dir + } + if ( CalamaresUtils::haveExtraDirs() ) + for ( auto s : CalamaresUtils::extraDataDirs() ) + { + qmlDirs << ( s + QML ); + } + qmlDirs << CalamaresUtils::appDataDir().absoluteFilePath( QML ); + } + + return qmlDirs; +} + +bool +initQmlModulesDir() +{ + QStringList qmlDirCandidatesByPriority + = qmlDirCandidates( Calamares::Settings::instance() && Calamares::Settings::instance()->debugMode() ); + + for ( const QString& path : qmlDirCandidatesByPriority ) + { + QDir dir( path ); + if ( dir.exists() && dir.isReadable() ) + { + cDebug() << "Using Calamares QML directory" << dir.absolutePath(); + CalamaresUtils::setQmlModulesDir( dir ); + return true; + } + } + + cError() << "Cowardly refusing to continue startup without a QML directory." + << Logger::DebugList( qmlDirCandidatesByPriority ); + if ( CalamaresUtils::isAppDataDirOverridden() ) + { + cError() << "FATAL: explicitly configured application data directory is missing qml/"; + } + else + { + cError() << "FATAL: none of the expected QML paths exist."; + } + return false; +} void callQmlFunction( QQuickItem* qmlObject, const char* method ) @@ -85,14 +143,14 @@ addExpansions( QmlSearch method, QStringList& candidates, const QStringList& nam std::transform( names.constBegin(), names.constEnd(), std::back_inserter( candidates ), - [ & ]( const QString& s ) { return s.isEmpty() ? QString() : bPath.arg( brandDir, s ); } ); + [&]( const QString& s ) { return s.isEmpty() ? QString() : bPath.arg( brandDir, s ); } ); } if ( ( method == QmlSearch::Both ) || ( method == QmlSearch::QrcOnly ) ) { std::transform( names.constBegin(), names.constEnd(), std::back_inserter( candidates ), - [ & ]( const QString& s ) { return s.isEmpty() ? QString() : qrPath.arg( s ); } ); + [&]( const QString& s ) { return s.isEmpty() ? QString() : qrPath.arg( s ); } ); } } diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h index 2da36633a..a3fc6d114 100644 --- a/src/libcalamaresui/utils/Qml.h +++ b/src/libcalamaresui/utils/Qml.h @@ -35,7 +35,13 @@ UIDLLEXPORT QDir qmlModulesDir(); /// @brief sets specific directory for searching for QML files UIDLLEXPORT void setQmlModulesDir( const QDir& dir ); - +/** @brief initialize QML search path with branding directories + * + * Picks a suitable branding directory (from the build-dir in debug mode, + * otherwise based on the branding directory) and adds it to the + * QML modules directory; returns @c false if none is found. + */ +UIDLLEXPORT bool initQmlModulesDir(); /** @brief Sets up global Calamares models for QML * From c7d0df223a64cd4d0adda30930e4791bced6a156 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 May 2020 10:36:42 +0200 Subject: [PATCH 12/23] [libcalamaresui] Expose registering-a-single-module - For testing purposes, it's useful to load a module externally and then register it to the ModuleManager (this hands off ownership). - Refactor overall module loading to use the exposed single-module method. --- .../modulesystem/ModuleManager.cpp | 52 +++++++++++++++---- .../modulesystem/ModuleManager.h | 8 +++ 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 3a3174935..0b83e4d9b 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -300,22 +300,12 @@ ModuleManager::loadModules() continue; } - if ( !checkModuleDependencies( *thisModule ) ) + if ( !addModule( thisModule ) ) { // Error message is already printed failedModules.append( instanceKey.toString() ); continue; } - - // If it's a ViewModule, it also appends the ViewStep to the ViewManager. - thisModule->loadSelf(); - m_loadedModulesByInstanceKey.insert( instanceKey, thisModule ); - if ( !thisModule->isLoaded() ) - { - cError() << "Module" << instanceKey.toString() << "loading FAILED."; - failedModules.append( instanceKey.toString() ); - continue; - } } // At this point we most certainly have a pointer to a loaded module in @@ -345,6 +335,40 @@ ModuleManager::loadModules() } } +bool +ModuleManager::addModule( Module *module ) +{ + if ( !module ) + { + return false; + } + if ( !module->instanceKey().isValid() ) + { + cWarning() << "Module" << module->location() << '@' << (void*)module << "has invalid instance key."; + return false; + } + if ( !checkModuleDependencies( *module ) ) + { + return false; + } + + if ( !module->isLoaded() ) + { + module->loadSelf(); + } + + // Even if the load failed, we keep the module, so that if it tried to + // get loaded **again**, we already know. + m_loadedModulesByInstanceKey.insert( module->instanceKey(), module ); + if ( !module->isLoaded() ) + { + cError() << "Module" << module->instanceKey().toString() << "loading FAILED."; + return false; + } + + return true; +} + void ModuleManager::checkRequirements() { @@ -414,6 +438,12 @@ ModuleManager::checkDependencies() bool ModuleManager::checkModuleDependencies( const Module& m ) { + if ( !m_availableDescriptorsByModuleName.contains( m.name() ) ) + { + cWarning() << "Module" << m.name() << "loaded externally, no dependency information."; + return true; + } + bool allRequirementsFound = true; QStringList requiredModules = m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList(); diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index 0c8a4bdaf..2c51e70f7 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -85,6 +85,14 @@ public: */ void loadModules(); + /** + * @brief Adds a single module (loaded by some other means) + * + * Returns @c true on success (that is, the module's dependencies + * are satisfied, it wasn't already loaded, ...). + */ + bool addModule( Module* ); + /** * @brief Starts asynchronous requirements checking for each module. * When this is done, the signal requirementsComplete is emitted. From 28500de2f8b6ca2d925cd225d4d5ff1745127324 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 May 2020 10:54:48 +0200 Subject: [PATCH 13/23] [calamares] Register modules in test-loader - When a viewmodule is loaded, register it with the module manager (especially relevant for the slideshow module). --- src/calamares/testmain.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 57da890cc..2b004ed7f 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -397,8 +397,9 @@ main( int argc, char* argv[] ) mw = module.m_ui ? new QMainWindow() : nullptr; (void)new Calamares::Branding( module.m_branding ); - (void)new Calamares::ModuleManager( QStringList(), nullptr ); + auto* modulemanager = new Calamares::ModuleManager( QStringList(), nullptr ); (void)Calamares::ViewManager::instance( mw ); + modulemanager->addModule( m ); } if ( !m->isLoaded() ) From 376cb3c042121f3b3a99f6dbdd59bd04fc481af0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 May 2020 10:59:43 +0200 Subject: [PATCH 14/23] [calamares] Give the fake ExecutionViewModule a name - This is needed for addModule() so the module manager knows there is a module by the name x@x. - Tell the ExecutionViewStep to run jobs from x@x. --- src/calamares/testmain.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 2b004ed7f..a6b126d62 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -187,7 +187,6 @@ public: virtual Calamares::JobList jobs() const override; - protected: void initFrom( const QVariantMap& ) override; }; @@ -195,6 +194,9 @@ protected: ExecViewModule::ExecViewModule() : Calamares::Module() { + QVariantMap m; + m.insert( "name", "x" ); + Calamares::Module::initFrom(m, "x" ); } ExecViewModule::~ExecViewModule() {} @@ -210,6 +212,7 @@ ExecViewModule::loadSelf() auto* viewStep = new Calamares::ExecutionViewStep(); viewStep->setModuleInstanceKey( instanceKey() ); viewStep->setConfigurationMap( m_configurationMap ); + viewStep->appendJobModuleInstanceKey( "x@x" ); Calamares::ViewManager::instance()->addViewStep( viewStep ); m_loaded = true; } From 39b5dd4e6ec826c1513f953a3174a8deec29937e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 May 2020 11:36:44 +0200 Subject: [PATCH 15/23] [libcalamaresui] Avoid deadlock - When loading QML V2, both loadQmlV2Complete() and changeSlideShowState() lock the same mutex, introduced in e7f4479df150efa21a3c225916ee5d6580b17064. - Explicitly unlock when loading is done and we need to change the state immediately. --- src/libcalamaresui/viewpages/Slideshow.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libcalamaresui/viewpages/Slideshow.cpp b/src/libcalamaresui/viewpages/Slideshow.cpp index baed36252..0c75dc390 100644 --- a/src/libcalamaresui/viewpages/Slideshow.cpp +++ b/src/libcalamaresui/viewpages/Slideshow.cpp @@ -125,7 +125,11 @@ SlideshowQML::loadQmlV2Complete() if ( isActive() ) { // We're alreay visible! Must have been slow QML loading, and we - // passed onActivate already. + // passed onActivate already. changeSlideShowState() locks + // the same mutex: we could set up a workaround to call + // changeSlideShowState() later after destruction of l. + // + l.unlock(); changeSlideShowState( Slideshow::Start ); } } From d51a545fcf513b176aa8b4a5acf8b927b202f541 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 May 2020 11:44:27 +0200 Subject: [PATCH 16/23] [calamares] onInitComplete() already activates first step - In the test application, there is only one viewstep, so it is already activated; avoid double-activation. --- src/calamares/testmain.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index a6b126d62..5c3dd5c95 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -425,7 +425,6 @@ main( int argc, char* argv[] ) mw->setCentralWidget( w ); w->show(); mw->show(); - vm->currentStep()->onActivate(); return aw->exec(); } From 738a6a9019eb900769e916a0176551135f231e7f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 20 May 2020 12:12:11 +0200 Subject: [PATCH 17/23] [calamares] Make module-tester configurable in slideshow mode - Uses global storage to steer the jobs that are created, in case the slideshow needs to be tweaked by percentages or whatever. - While here, add some code docs and apply coding style. --- src/calamares/testmain.cpp | 40 +++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 5c3dd5c95..a29c8ce91 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -144,8 +144,9 @@ handle_args( QCoreApplication& a ) class ExecViewJob : public Calamares::CppJob { public: - explicit ExecViewJob( const QString& name ) + explicit ExecViewJob( const QString& name, unsigned long t = 3 ) : m_name( name ) + , m_delay( t ) { } virtual ~ExecViewJob() override; @@ -154,7 +155,7 @@ public: Calamares::JobResult exec() override { - QThread::sleep( 3 ); + QThread::sleep( m_delay ); return Calamares::JobResult::ok(); } @@ -162,6 +163,7 @@ public: private: QString m_name; + unsigned long m_delay; }; ExecViewJob::~ExecViewJob() {} @@ -194,9 +196,12 @@ protected: ExecViewModule::ExecViewModule() : Calamares::Module() { + // Normally the module-loader gives the module an instance key + // (out of the settings file, or the descriptor of the module). + // We don't have one, so build one -- this gives us "x@x". QVariantMap m; m.insert( "name", "x" ); - Calamares::Module::initFrom(m, "x" ); + Calamares::Module::initFrom( m, "x" ); } ExecViewModule::~ExecViewModule() {} @@ -212,7 +217,7 @@ ExecViewModule::loadSelf() auto* viewStep = new Calamares::ExecutionViewStep(); viewStep->setModuleInstanceKey( instanceKey() ); viewStep->setConfigurationMap( m_configurationMap ); - viewStep->appendJobModuleInstanceKey( "x@x" ); + viewStep->appendJobModuleInstanceKey( instanceKey().toString() ); Calamares::ViewManager::instance()->addViewStep( viewStep ); m_loaded = true; } @@ -234,9 +239,34 @@ Calamares::JobList ExecViewModule::jobs() const { Calamares::JobList l; + const auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs && gs->contains( "jobs" ) ) + { + QVariantList joblist = gs->value( "jobs" ).toList(); + for ( const auto& jd : joblist ) + { + QVariantMap jobdescription = jd.toMap(); + if ( jobdescription.contains( "name" ) && jobdescription.contains( "delay" ) ) + { + l.append( Calamares::job_ptr( new ExecViewJob( jobdescription.value( "name" ).toString(), + jobdescription.value( "delay" ).toULongLong() ) ) ); + } + } + } + if ( l.count() > 0 ) + { + return l; + } + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step 1" ) ) ) ); l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step two" ) ) ) ); - l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step III" ) ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "locking mutexes" ), 20 ) ) ); + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "unlocking mutexes" ), 1 ) ) ); + for ( const QString& s : QStringList { "Harder", "Better", "Faster", "Stronger" } ) + { + l.append( Calamares::job_ptr( new ExecViewJob( s, 0 ) ) ); + } + l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "cleaning up" ), 20 ) ) ); return l; } From 629bb2e2f6216009bcf27d2a6ea1744fac59ca48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= Date: Wed, 20 May 2020 10:39:01 -0400 Subject: [PATCH 18/23] [partition] Remove unused locals - Unused since commit 0d284759f59a2e1c282f86255d3da8d4542fce9d --- src/modules/partition/core/PartitionActions.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index d0de2c0d4..7f8dafb8f 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -98,11 +98,6 @@ void doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions o ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); - QString defaultFsType = o.defaultFsType; - if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) - { - defaultFsType = "ext4"; - } bool isEfi = PartUtils::isEfiSystem(); @@ -227,12 +222,6 @@ doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition cDebug() << "doReplacePartition for device" << partition->partitionPath(); - QString defaultFsType = o.defaultFsType; - if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown ) - { - defaultFsType = "ext4"; - } - PartitionRole newRoles( partition->roles() ); if ( partition->roles().has( PartitionRole::Extended ) ) { From 885fe80d5ba33803d55f4640dc03a0de6d986e78 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 25 May 2020 03:40:18 -0400 Subject: [PATCH 19/23] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_es.ts | 44 +-- lang/calamares_fa.ts | 738 ++++++++++++++++++++-------------------- lang/calamares_zh_TW.ts | 4 +- 3 files changed, 393 insertions(+), 393 deletions(-) diff --git a/lang/calamares_es.ts b/lang/calamares_es.ts index 9325c653c..f54b26d8b 100644 --- a/lang/calamares_es.ts +++ b/lang/calamares_es.ts @@ -102,7 +102,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Reload Stylesheet - + Recargar Hoja de estilo @@ -120,7 +120,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Set up - + Instalar @@ -138,7 +138,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Programmed job failure was explicitly requested. - + Se solicitó de manera explícita la falla del trabajo programado. @@ -154,7 +154,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Example job (%1) - + Ejemplo de trabajo (%1) @@ -162,12 +162,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Run command '%1' in target system. - + Ejecutar el comando '% 1' en el sistema de destino. Run command '%1'. - + Ejecutar el comando '% 1'. @@ -213,17 +213,17 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Loading ... - + Cargando ... QML Step <i>%1</i>. - + Paso QML <i>%1</i>. Loading failed. - + La carga ha fallado. @@ -231,9 +231,9 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Waiting for %n module(s). - - - + + Esperando %n módulo (s). + Esperando %n módulo(s). @@ -247,7 +247,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar System-requirements checking is complete. - + La verificación de los requisitos del sistema está completa. @@ -255,7 +255,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Setup Failed - + Configuración Fallida @@ -265,7 +265,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Would you like to paste the install log to the web? - + ¿Desea pegar el registro de instalación en la web? @@ -292,12 +292,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Install Log Paste URL - + Pegar URL Registro de Instalación The upload was unsuccessful. No web-paste was done. - + La carga no tuvo éxito. No se realizó pegado web. @@ -322,12 +322,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Continue with installation? - + Continuar con la instalación? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> - + El programa de instalación %1 está a punto de hacer cambios en el disco con el fin de configurar %2.<br/><strong>No podrá deshacer estos cambios.</strong> @@ -337,7 +337,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar &Set up now - + &Configurar ahora @@ -352,7 +352,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar &Set up - + &Instalar @@ -362,7 +362,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Setup is complete. Close the setup program. - + La instalación se ha completado. Cierre el instalador. diff --git a/lang/calamares_fa.ts b/lang/calamares_fa.ts index a4de510ad..00b82036f 100644 --- a/lang/calamares_fa.ts +++ b/lang/calamares_fa.ts @@ -6,17 +6,17 @@ The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. - <strong>محیط بوت</strong> این سیستم. <br><br>سیستم‌های قدیمی x86 فقط از <strong>بایوس</strong> پشتیبانی می‌کنند. <br>سیستم‌های مدرن معمولا از <strong>ای.اف.آی</strong> استفاده می‌کنند، اما ممکن است در صورتی که در حالت سازگاری اجرا شوند همچنان به صورت بایوس نشان داده شوند + <strong>محیط راه‌اندازی</strong> این سامانه. <br><br>سامانه‌های x86 قدیم‌تر فقط از <strong>بایوس</strong> پشتیبانی می‌کنند. <br>سامانه‌های نوین معمولا از <strong>ای‌اف‌آی</strong> استفاده می‌کنند، ولی اگر در حالت سازگاری روشن شوند، ممکن است به عنوان بایوس هم نمایش یابند. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. - سیستم با محیط بوت <strong>ای.اف.آی</strong> آغاز شد. <br><br>به منظور پیکربندی راه‌اندازی از یک محیط ای.اف.آی، این نصاب باید حتما‌ یک برنامه بالاآورنده بوت، مانند <strong>گراب</strong> یا <strong>سیستم‌بوت</strong> را روی یک پارتیشن سیستم ای.اف.آی مستقر نماید. این به صورت خودکار است مگر اینکه شما پارتیشن‌بندی دستی را انتخاب کنید که در این صورت باید خودتان انتخاب کنید یا به صورت دستی ایجاد کنید. + سامانه با محیط راه‌اندازی <strong>ای‌اف‌آی</strong> روشن شد. <br><br>برای پیکربندی برپایی از محیط ای‌اف‌آی، باید این نصب‌کننده، برنامه بارکنندهٔ راه‌اندازی‌ای چون <strong>گراب</strong> یا <strong>راه‌انداز سیستم‌دی</strong> را روی یک <strong>افراز سامانه‌ای ای‌اف‌آی</strong> مستقر کند. این عمل به صورت خودکار انجام می‌شود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان ایجادش کرده یا برگزینید. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. - سیستم با محیط بوت <strong>بایوس</strong> آغاز شد. <br><br>به منظور پیکربندی راه‌انداری از یک محیط بایوس، این نصاب باید حتما‌ یک برنامه بالاآورنده بوت، مانند <strong>گراب</strong> را یا در شروع یک پارتیشن و یا روی <strong>رکورد راه‌انداز اصلی</strong> نزدیک شروع جدول پارتیشن (ترجیحا) نصب کند. این به صورت خودکار است مگر اینکه شما پارتیشن‌بندی دستی را انتخاب کنید که در این صورت باید خودتان به صورت دستی آن را راه‌اندازی کنید. + سامانه با محیط راه‌اندازی <strong>بایوس</strong> روشن شد. <br><br>برای پیکربندی برپایی از یک محیط بایوس، باید این نصب‌کنده برنامهٔ بارکنندهٔ راه‌اندازی چون <strong>گراب</strong> را در ابتدای یک افراز یا (ترجیحاً) روی <strong>رکورد راه‌اندازی اصلی</strong> نزدیکابتدای جدول افراز نصب کند. این عمل به صورت خودکار انجام می‌شود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان برپایش کنید. @@ -24,22 +24,22 @@ Master Boot Record of %1 - رکورد راه انداز اصلی یا همان ام.بی.آر ٪1 + رکورد راه اندازی اصلی %1 Boot Partition - پارتیشن بوت + افراز راه‌اندازی System Partition - پارتیشن سیستمی + افراز سامانه‌ای Do not install a boot loader - بوت لودر نصب نکن. + نصب نکردن یک بارکنندهٔ راه‌اندازی @@ -52,7 +52,7 @@ Blank Page - صفحه خالی + صفحهٔ خالی @@ -75,12 +75,12 @@ Modules - ماژول‌ها + پیمانه‌ها Type: - نوع: + گونه: @@ -111,7 +111,7 @@ Debug information - اطلاعات رفع اشکال + اطّلاعات اشکال‌زدایی @@ -184,27 +184,27 @@ Bad working directory path - مسیر شاخه جاری نامناسب + مسیر شاخهٔ جاری بد Working directory %1 for python job %2 is not readable. - شاخه جاری %1 برای کار پایتونی %2 خواندنی نیست + شاخهٔ کاری %1 برای کار پایتونی %2 خواندنی نیست Bad main script file - اسکریپت اصلی مشکل‌دار + پروندهٔ کدنوشتهٔ اصلی بد Main script file %1 for python job %2 is not readable. - فایل اسکریپت اصلی %1 برای کار پایتون %2 قابل خواندن نیست. + پروندهٔ کدنویسهٔ اصلی %1 برای کار پایتونی %2 قابل خواندن نیست. Boost.Python error in job "%1". - Boost.Python error in job "%1". + خطای Boost.Python در کار %1. @@ -238,9 +238,9 @@ (%n second(s)) - - - + + (%n ثانیه) + (%n ثانیه) @@ -259,7 +259,7 @@ Installation Failed - نصب شکست خورد. + نصب شکست خورد @@ -316,7 +316,7 @@ Continue with setup? - راه اندازی ادامه یابد؟ + ادامهٔ برپایی؟ @@ -331,7 +331,7 @@ The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> - نصاب %1 در شرف ایجاد تغییرات در دیسک شما به منظور نصب %2 است. <br/><strong>شما قادر نخواهید بود تا این تغییرات را برگردانید.</strong> + نصب‌کنندهٔ %1 می‌خواهد برای نصب %2 تغییراتی در دیسکتان بدهد. <br/><strong>نخواهید توانست این تغییرات را برگردانید.</strong> @@ -341,12 +341,12 @@ &Install now - &همین حالا نصب کنید + &اکنون نصب شود Go &back - برگردید به &عقب + &بازگشت @@ -386,7 +386,7 @@ &Back - &قبلی + &پیشین @@ -419,8 +419,8 @@ The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - آیا واقعاً می خواهید روند نصب فعلی را لغو کنید؟ -نصاب ترک می شود و همه تغییرات از بین می روند. + واقعاً می خواهید فرایند نصب فعلی را لغو کنید؟ +نصب‌کننده بسته شده و تمامی تغییرات از بین خواهند رفت. @@ -428,22 +428,22 @@ The installer will quit and all changes will be lost. Unknown exception type - نوع ناشناخته استثنا + گونهٔ استثنای ناشناخته unparseable Python error - unparseable Python error + خطای پایتونی غیرقابل تجزیه unparseable Python traceback - unparseable Python traceback + ردیابی پایتونی غیرقابل تجزیه Unfetchable Python error. - Unfetchable Python error. + خطای پایتونی غیرقابل دریافت. @@ -461,7 +461,7 @@ The installer will quit and all changes will be lost. Show debug information - نمایش اطلاعات دیباگ + نمایش اطّلاعات اشکال‌زدایی @@ -486,7 +486,7 @@ The installer will quit and all changes will be lost. %1 Installer - %1 نصاب + نصب‌کنندهٔ %1 @@ -594,7 +594,7 @@ The installer will quit and all changes will be lost. <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + <strong>جایگزینی یک افراز</strong><br/>افرازی را با %1 جایگزین می‌کند. @@ -619,22 +619,22 @@ The installer will quit and all changes will be lost. Reuse Swap - + باز استفاده از مبادله Swap (no Hibernate) - + مبادله (بدون خواب‌زمستانی) Swap (with Hibernate) - + مبادله (با خواب‌زمستانی) Swap to file - + مبادله به پرونده @@ -642,17 +642,17 @@ The installer will quit and all changes will be lost. Clear mounts for partitioning operations on %1 - + پاک‌سازی اتّصال‌ها برای عملبات افراز روی %1 Clearing mounts for partitioning operations on %1. - + در حال پاک‌سازی اتّصال‌ها برای عملبات افراز روی %1 Cleared all mounts for %1 - + همهٔ اتّصال‌ها برای %1 پاک‌‌سازی شدند @@ -660,22 +660,22 @@ The installer will quit and all changes will be lost. Clear all temporary mounts. - + پاک‌سازی همهٔ اتّصال‌های موقّتی. Clearing all temporary mounts. - + در حال پاک‌سازی همهٔ اتّصال‌های موقّتی. Cannot get list of temporary mounts. - + نمی‌توان فهرست اتّصال‌های موقّتی را گرفت. Cleared all temporary mounts. - + همهٔ اتّصال‌های موقّتی پاک‌سازی شدند. @@ -684,17 +684,17 @@ The installer will quit and all changes will be lost. Could not run command. - + نمی‌توان دستور را اجرا کرد. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + دستور در محیط میزبان اجرا می‌شود و نیاز دارد مسیر ریشه را بداند، ولی هیچ نقطهٔ اتّصال ریشه‌ای تعریف نشده. The command needs to know the user's name, but no username is defined. - + دستور نیاز دارد نام کاربر را بداند، ولی هیچ نام کاربری‌ای تعریف نشده. @@ -702,17 +702,17 @@ The installer will quit and all changes will be lost. Set keyboard model to %1.<br/> - + تنظیم مدل صفحه‌کلید به %1.<br/> Set keyboard layout to %1/%2. - + تنظیم چینش صفحه‌کلید به %1/%2. The system language will be set to %1. - + زبان سامانه به %1 تنظیم خواهد شد. @@ -722,72 +722,72 @@ The installer will quit and all changes will be lost. Set timezone to %1/%2.<br/> - + تنظیم منطقهٔ زمانی به %1/%2.<br/> Network Installation. (Disabled: Incorrect configuration) - + نصب شبکه‌ای. (از کار افتاده: پیکربندی نادرست) Network Installation. (Disabled: Received invalid groups data) - + نصب شبکه‌ای. (از کار افتاده: دریافت داده‌های گروه‌های نامعتبر) Network Installation. (Disabled: internal error) - + نصب شبکه‌ای. (از کار افتاده: خطای داخلی) Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - + نصب شبکه‌ای. (از کار افتاده: ناتوان در گرفتن فهرست بسته‌ها. اتّصال شبکه‌تان را بررسی کنید) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This program will ask you some questions and set up %2 on your computer. - + این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانه‌تان برپا می‌کند. <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to %1 setup.</h1> - + <h1>به برپاسازی %1 خوش آمدید.</h1> <h1>Welcome to the Calamares installer for %1.</h1> - + <h1>به نصب‌کنندهٔ کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to the %1 installer.</h1> - + <h1>به نصب‌کنندهٔ %1 خوش آمدید.</h1> @@ -803,77 +803,77 @@ The installer will quit and all changes will be lost. Create a Partition - + ایجاد یک افراز Si&ze: - + اندا&زه: MiB - + می‌ب Partition &Type: - + &گونهٔ افراز &Primary - + &اصلی E&xtended - + &گسترش‌یافته Fi&le System: - + سامانه &پرونده: LVM LV name - + نام حجم منطقی &Mount Point: - + &نقطهٔ اتّصال: Flags: - + پرچم‌ها: En&crypt - + رمز&نگاری Logical - + منطقی Primary - + اصلی GPT - + GPT Mountpoint already in use. Please select another one. - + نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. @@ -881,17 +881,17 @@ The installer will quit and all changes will be lost. Create new %2MiB partition on %4 (%3) with file system %1. - + ایچاد افراز %2می‌ب جدید روی %4 (%3) با سامانهٔ پروندهٔ %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + ایچاد افراز <strong>%2می‌ب</strong> جدید روی <strong>%</strong>4 (%3) با سامانهٔ پروندهٔ <strong>%</strong>1. Creating new %1 partition on %2. - + در حال ایجاد افراز %1 جدید روی %2. @@ -904,27 +904,27 @@ The installer will quit and all changes will be lost. Create Partition Table - + ایجاد جدول افراز Creating a new partition table will delete all existing data on the disk. - + ایجاد یک جدول افراز جدید، همهٔ داده‌های موجود روی دیسک را حذف خواهد کرد. What kind of partition table do you want to create? - + می‌خواهید چه جور جدول افرازی بسازید؟ Master Boot Record (MBR) - + رکورد راه‌اندازی اصلی (MBR) GUID Partition Table (GPT) - + جدول افراز گاید (GPT) @@ -932,17 +932,17 @@ The installer will quit and all changes will be lost. Create new %1 partition table on %2. - + ایجاد جدول افراز %1 جدید روی %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + ایجاد جدول افراز <strong>%1</strong> جدید روی <strong>%2</strong> (%3). Creating new %1 partition table on %2. - + در حال ایجاد جدول افراز %1 جدید روی %2. @@ -955,37 +955,37 @@ The installer will quit and all changes will be lost. Create user %1 - + ایجاد کاربر %1 Create user <strong>%1</strong>. - + ایجاد کاربر <strong>%</strong>1. Creating user %1. - + در حال ایجاد کاربر %1. Sudoers dir is not writable. - + شاخهٔ sudoers قابل نوشتن نیست. Cannot create sudoers file for writing. - + نمی‌توان پروندهٔ sudoers را برای نوشتن ایجاد کرد. Cannot chmod sudoers file. - + نمی‌توان مالک پروندهٔ sudoers را تغییر داد. Cannot open groups file for reading. - + نمی‌توان پروندهٔ groups را برای خواندن گشود. @@ -993,7 +993,7 @@ The installer will quit and all changes will be lost. Create Volume Group - + ایجاد گروه حجمی @@ -1001,17 +1001,17 @@ The installer will quit and all changes will be lost. Create new volume group named %1. - + ایجاد گروه حجمی جدید به نام %1. Create new volume group named <strong>%1</strong>. - + ایجاد گروه حجمی جدید به نام <strong>%1</strong>. Creating new volume group named %1. - + در حال ایجاد گروه حجمی جدید به نام %1. @@ -1025,12 +1025,12 @@ The installer will quit and all changes will be lost. Deactivate volume group named %1. - + از کار انداختن گروه حجمی با نام %1. Deactivate volume group named <strong>%1</strong>. - + از کار انداختن گروه حجمی با نام <strong>%1</strong>. @@ -1043,17 +1043,17 @@ The installer will quit and all changes will be lost. Delete partition %1. - + حذف افراز %1. Delete partition <strong>%1</strong>. - + حذف افراز <strong>%1</strong>. Deleting partition %1. - + در حال حذف افراز %1. @@ -1066,7 +1066,7 @@ The installer will quit and all changes will be lost. This device has a <strong>%1</strong> partition table. - + این افزاره یک جدول افراز <strong>%1</strong> دارد. @@ -1124,7 +1124,7 @@ The installer will quit and all changes will be lost. Failed to open %1 - + شکست در گشودن %1 @@ -1132,7 +1132,7 @@ The installer will quit and all changes will be lost. Dummy C++ Job - + کار سی‌پلاس‌پلاس الکی @@ -1140,57 +1140,57 @@ The installer will quit and all changes will be lost. Edit Existing Partition - + ویرایش افراز موجود Content: - + محتوا: &Keep - + &نگه‌داری Format - + قالب‌بندی Warning: Formatting the partition will erase all existing data. - + هشدار: قالب‌بندی افراز، همهٔ داده‌های موجود را پاک می‌کند. &Mount Point: - + &نقطهٔ اتّصال: Si&ze: - + اندا&زه: MiB - + می‌ب Fi&le System: - + سامانه &پرونده: Flags: - + پرچم‌ها: Mountpoint already in use. Please select another one. - + نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. @@ -1203,22 +1203,22 @@ The installer will quit and all changes will be lost. En&crypt system - + رمز&نگاری سامانه Passphrase - + عبارت عبور Confirm passphrase - + تأیید عبارت عبور Please enter the same passphrase in both boxes. - + لطفاً عبارت عبور یکسانی را در هر دو جعبه وارد کنید. @@ -1226,7 +1226,7 @@ The installer will quit and all changes will be lost. Set partition information - + تنظیم اطّلاعات افراز @@ -1256,7 +1256,7 @@ The installer will quit and all changes will be lost. Setting up mount points. - + برپایی نقطه‌های اتّصال @@ -1269,7 +1269,7 @@ The installer will quit and all changes will be lost. &Restart now - + &راه‌اندازی دوباره @@ -1284,7 +1284,7 @@ The installer will quit and all changes will be lost. <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. - + <h1>همه‌چیز انجام شد.</h1><br/>%1 روی رایانه‌تان نصب شد.<br/>ممکن است بخواهید به سامانهٔ جدیدتان وارد شده تا به استفاده از محیط زندهٔ %2 ادامه دهید. @@ -1307,27 +1307,27 @@ The installer will quit and all changes will be lost. Finish - + پایان Setup Complete - + برپایی کامل شد Installation Complete - + نصب کامل شد The setup of %1 is complete. - + برپایی %1 کامل شد. The installation of %1 is complete. - + نصب %1 کامل شد. @@ -1378,52 +1378,52 @@ The installer will quit and all changes will be lost. is plugged in to a power source - + به برق وصل است. The system is not plugged in to a power source. - + سامانه به برق وصل نیست. is connected to the Internet - + به اینترنت وصل است The system is not connected to the Internet. - + سامانه به اینترنت وصل نیست. is running the installer as an administrator (root) - + دارد نصب‌کننده را به عنوان یک مدیر (ریشه) اجرا می‌کند The setup program is not running with administrator rights. - + برنامهٔ برپایی با دسترسی‌های مدیر اجرا نشده‌است. The installer is not running with administrator rights. - + برنامهٔ نصب کننده با دسترسی‌های مدیر اجرا نشده‌است. has a screen large enough to show the whole installer - + صفحه‌ای با بزرگی کافی برای نمایش تمام نصب‌کننده دارد The screen is too small to display the setup program. - + صفحه برای نمایش برنامهٔ برپایی خیلی کوچک است. The screen is too small to display the installer. - + صفحه برای نمایش نصب‌کننده خیلی کوچک است. @@ -1431,7 +1431,7 @@ The installer will quit and all changes will be lost. Collecting information about your machine. - + در حال جمع‌آوری اطّلاعات دربارهٔ دستگاهتان. @@ -1447,17 +1447,17 @@ The installer will quit and all changes will be lost. Could not create directories <code>%1</code>. - + نمی‌توان شاخه‌های <code>%1</code> را ایجاد کرد. Could not open file <code>%1</code>. - + نمی‌توان پروندهٔ <code>%1</code> را گشود. Could not write to file <code>%1</code>. - + نمی‌توان در پروندهٔ <code>%1</code> نوشت. @@ -1465,7 +1465,7 @@ The installer will quit and all changes will be lost. Creating initramfs with mkinitcpio. - + در جال ایجاد initramfs با mkinitcpio. @@ -1473,7 +1473,7 @@ The installer will quit and all changes will be lost. Creating initramfs. - + در حال ایجاد initramfs. @@ -1481,17 +1481,17 @@ The installer will quit and all changes will be lost. Konsole not installed - + برنامهٔ Konsole نصب نیست Please install KDE Konsole and try again! - + لطفاً Konsole کی‌دی‌ای را نصب کرده و دوباره تلاش کنید! Executing script: &nbsp;<code>%1</code> - + در حال اجرای کدنوشته: &nbsp;<code>%1</code> @@ -1499,7 +1499,7 @@ The installer will quit and all changes will be lost. Script - + کدنوشته @@ -1507,12 +1507,12 @@ The installer will quit and all changes will be lost. Set keyboard model to %1.<br/> - + تنظیم مدل صفحه‌کلید به %1.<br/> Set keyboard layout to %1/%2. - + تنظیم چینش صفحه‌کلید به %1/%2. @@ -1520,7 +1520,7 @@ The installer will quit and all changes will be lost. Keyboard - + صفحه‌کلید @@ -1528,7 +1528,7 @@ The installer will quit and all changes will be lost. Keyboard - + صفحه‌کلید @@ -1536,12 +1536,12 @@ The installer will quit and all changes will be lost. System locale setting - + تنظیمات محلی سیستم The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. - + تنظیمات محلی سیستم بر روی زبان و مجموعه کاراکتر برخی از عناصر رابط کاربری خط فرمان تأثیر می‌گذارد. <br/>تنظیمات فعلی <strong>%1</strong> است. @@ -1551,7 +1551,7 @@ The installer will quit and all changes will be lost. &OK - + &قبول @@ -1564,17 +1564,17 @@ The installer will quit and all changes will be lost. <h1>License Agreement</h1> - + <h1>توافق پروانه</h1> I accept the terms and conditions above. - + شرایط و ضوابط فوق را می‌پذیرم. Please review the End User License Agreements (EULAs). - + لطفاً توافق پروانهٔ کاربر نهایی (EULAs) را بازبینی کنید. @@ -1602,7 +1602,7 @@ The installer will quit and all changes will be lost. License - + پروانه @@ -1610,13 +1610,13 @@ The installer will quit and all changes will be lost. URL: %1 - + نشانی اینترنتی: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>راه‌انداز %1</strong><br/>از %2 @@ -1647,22 +1647,22 @@ The installer will quit and all changes will be lost. File: %1 - + پرونده: %1 Hide license text - + نهفتن متن پروانه Show the license text - + نمایش متن پروانه Open license agreement in browser. - + گشودن توافق پروانه در مرورگر. @@ -1670,23 +1670,23 @@ The installer will quit and all changes will be lost. Region: - + ناحیه: Zone: - + منطقه: &Change... - + &تغییر… The system language will be set to %1. - + زبان سامانه به %1 تنظیم خواهد شد. @@ -1696,7 +1696,7 @@ The installer will quit and all changes will be lost. Set timezone to %1/%2.<br/> - + تنظیم منطقهٔ زمانی به %1/%2.<br/> @@ -1704,7 +1704,7 @@ The installer will quit and all changes will be lost. Location - + موقعیت @@ -1712,7 +1712,7 @@ The installer will quit and all changes will be lost. Location - + موقعیت @@ -1720,20 +1720,20 @@ The installer will quit and all changes will be lost. Configuring LUKS key file. - + پیکربندی پروندهٔ کلید LUKS. No partitions are defined. - + هیچ افرازی تعریف نشده Encrypted rootfs setup error - + خطای برپاسازی rootfs رمزشده @@ -1756,12 +1756,12 @@ The installer will quit and all changes will be lost. Generate machine-id. - + تولید شناسهٔ دستگاه Configuration Error - + خطای پیکربندی @@ -1775,97 +1775,97 @@ The installer will quit and all changes will be lost. Package selection - + گزینش بسته‌ها Office software - + نرم‌افزار اداری Office package - + بستهٔ اداری Browser software - + نرم‌افزار مرورگر Browser package - + بستهٔ مرورگر Web browser - + مرورگر وب Kernel - + کرنل Services - + خدمت‌ها Login - + ورود Desktop - + میزکار Applications - + برنامه‌های کاربردی Communication - + ارتباطات Development - + توسعه Office - + اداری Multimedia - + چندرسانه‌ای Internet - + اینترنت Theming - + شخصی‌سازی Gaming - + بازی Utilities - + ابزارها @@ -1873,7 +1873,7 @@ The installer will quit and all changes will be lost. Notes - + یادداشت‌ها @@ -1899,7 +1899,7 @@ The installer will quit and all changes will be lost. OEM Configuration - + پیکربندی سازنده @@ -1912,72 +1912,72 @@ The installer will quit and all changes will be lost. Password is too short - + گذرواژه خیلی کوتاه است Password is too long - + گذرواژه خیلی بلند است Password is too weak - + گذرواژه خیلی ضعیف است Memory allocation error when setting '%1' - + خطای تخصیص حافظه هنگام تنظیم %1 Memory allocation error - + خطای تخصیص حافظه The password is the same as the old one - + گذرواژه همان قبلی است The password is a palindrome - + گذرواژه متقارن است The password differs with case changes only - + گذرواژه فقط در کوچکی و بزرگی متفاوت است The password is too similar to the old one - + گذرواژه خیلی شبیه قبلی است The password contains the user name in some form - + گذرواژه، شکلی از نام کاربری را داراست The password contains words from the real name of the user in some form - + گذرواژه شامل واژگانی از نام واقعی کاربر است The password contains forbidden words in some form - + گذرواژه شکلی از واژگان ممنوعه را دارد The password contains less than %1 digits - + گذرواژه کم‌تر از %1 رقم دارد The password contains too few digits - + گذرواژه، رقم‌های خیلی کمی دارد @@ -2012,17 +2012,17 @@ The installer will quit and all changes will be lost. The password is shorter than %1 characters - + گذرواژه کوتاه‌تر از %1 نویسه است The password is too short - + گذرواژه خیلی کوتاه است The password is just rotated old one - + گذرواژه معکوس قبلی است @@ -2067,7 +2067,7 @@ The installer will quit and all changes will be lost. No password supplied - + هیچ‌گذرواژه‌ای فراهم نشده @@ -2092,67 +2092,67 @@ The installer will quit and all changes will be lost. Unknown setting - %1 - + تنظیمات ناشناخته - %1 Unknown setting - + تنظیمات ناشناخته Bad integer value of setting - %1 - + مقدار صحیح بد در تنظیمات - %1 Bad integer value - + مقدار صحیح بد Setting %1 is not of integer type - + تنظیمات %1 از گونهٔ صحیح نیست Setting is not of integer type - + تنظیمات از گونهٔ صحیح نیست Setting %1 is not of string type - + تنظیمات %1 از گونهٔ رشته نیست Setting is not of string type - + تنظیمات از گونهٔ رشته نیست Opening the configuration file failed - + گشودن پروندهٔ پیکربندی شکست خورد The configuration file is malformed - + پروندهٔ پیکربندی بدریخت است Fatal failure - + خطای مهلک Unknown error - + خطای ناشناخته Password is empty - + گذرواژه خالی است @@ -2165,22 +2165,22 @@ The installer will quit and all changes will be lost. Product Name - + نام محصول TextLabel - + TextLabel Long Product Description - + شرح محصول بلند Package Selection - + گزینش بسته‌ها @@ -2193,7 +2193,7 @@ The installer will quit and all changes will be lost. Packages - + بسته‌ها @@ -2206,7 +2206,7 @@ The installer will quit and all changes will be lost. Description - + شرح @@ -2219,12 +2219,12 @@ The installer will quit and all changes will be lost. Keyboard Model: - + مدل صفحه‌کلید: Type here to test your keyboard - + برای آزمودن صفحه‌کلیدتان، این‌جا بنویسید @@ -2237,60 +2237,60 @@ The installer will quit and all changes will be lost. What is your name? - + نامتان چیست؟ Your Full Name - + نام کاملتان What name do you want to use to log in? - + برای ورود می خواهید از چه نامی استفاده کنید؟ login - + ورود What is the name of this computer? - + نام این رایانه چیست؟ <small>This name will be used if you make the computer visible to others on a network.</small> - + <small>اگر رایانه‌تان را روی یک شبکه برای دیگران نمایان کنید، از این نام استفاده می‌شود.</small> Computer Name - + نام رایانه Choose a password to keep your account safe. - + برای امن نگه داشتن حسابتان، گذرواژه‌ای برگزینید. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> - + <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود. یک گذرواژهٔ خوب شامل ترکیبی از حروف، ارقام و علامت‌هاست که باید لااقل هست نویسه طول داشته باشد و در دوره‌های منظّم، عوض شود.</small> Password - + گذرواژه Repeat Password - + تکرار TextLabel @@ -2300,28 +2300,28 @@ The installer will quit and all changes will be lost. Require strong passwords. - + نباز به گذرواژهٔ قوی دارد. Log in automatically without asking for the password. - + ورود خودکار بدون پرسیدن گذرواژه. Use the same password for the administrator account. - + استفاده از گذرواژهٔ یکسان برای حساب مدیر. Choose a password for the administrator account. - + گذرواژه‌ای برای حساب مدیر برگزینید. <small>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود.</small> @@ -2374,13 +2374,13 @@ The installer will quit and all changes will be lost. Free Space - فضای خالی + فضای آزاد New partition - پارتیشن جدید + افراز جدید @@ -2390,17 +2390,17 @@ The installer will quit and all changes will be lost. File System - سیستم فایل + سامانهٔ پرونده Mount Point - + نقطهٔ اتّصال Size - + اندازه @@ -2413,67 +2413,67 @@ The installer will quit and all changes will be lost. Storage de&vice: - + ذخیره‌سازی و افزا&ره: &Revert All Changes - + &بازگردانی همهٔ تغییرات New Partition &Table - + &جدول افراز جدید Cre&ate - + ای&جاد &Edit - + &ویرایش &Delete - + &حذف New Volume Group - + گروه حجمی جدید Resize Volume Group - + تغییر اندازهٔ گروه حجمی Deactivate Volume Group - + از کار انداختن گروه حجمی Remove Volume Group - + برداشتن گروه حجمی I&nstall boot loader on: - + &نصب بارکنندهٔ راه‌اندازی روی: Are you sure you want to create a new partition table on %1? - + مطمئنید می‌خواهید روی %1 جدول افراز جدیدی بسازید؟ Can not create new partition - + نمی‌توان افراز جدید ساخت @@ -2486,12 +2486,12 @@ The installer will quit and all changes will be lost. Gathering system information... - جمع‌آوری اطلاعات سیستم... + جمع‌آوری اطّلاعات سامانه… Partitions - پارتیشن‌ها + افرازها @@ -2536,7 +2536,7 @@ The installer will quit and all changes will be lost. Disk <strong>%1</strong> (%2) - + دیسک <strong>%1</strong> (%2) @@ -2636,7 +2636,7 @@ The installer will quit and all changes will be lost. Look-and-Feel - + ظاهر و احساس @@ -2644,7 +2644,7 @@ The installer will quit and all changes will be lost. Saving files for later ... - + ذخیرهٔ پرونده‌ها برای بعد @@ -2738,33 +2738,33 @@ Output: unknown - + ناشناخته extended - + گسترده unformatted - + قالب‌بندی نشده swap - + مبادله Default Keyboard Model - + مدل صفحه‌کلید پیش‌گزیده Default - + پیش گزیده @@ -2772,7 +2772,7 @@ Output: File not found - + پرونده پیدا نشد @@ -2787,22 +2787,22 @@ Output: No product - + بدون محصول No description provided. - + هیچ توضیحی وجود ندارد. (no mount point) - + (بدون نقطهٔ اتّصال) Unpartitioned space or unknown partition table - + فضای افرازنشده یا جدول افراز ناشناخته @@ -2810,7 +2810,7 @@ Output: Remove live user from target system - + برداشتن کاربر زنده از سامانهٔ هدف @@ -2912,12 +2912,12 @@ Output: Resize Filesystem Job - + کار تغییر اندازهٔ سامانه‌پرونده Invalid configuration - + پیکربندی نامعتبر @@ -2941,7 +2941,7 @@ Output: Resize Failed - + تغییر اندازه شکست خورد @@ -2981,7 +2981,7 @@ Output: Resize partition %1. - + تغییر اندازهٔ افراز %1. @@ -3004,7 +3004,7 @@ Output: Resize Volume Group - + تغییر اندازهٔ گروه حجمی @@ -3036,7 +3036,7 @@ Output: System requirements - + نیازمندی‌های سامانه @@ -3044,27 +3044,27 @@ Output: This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This program will ask you some questions and set up %2 on your computer. - + این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانه‌تان برپا می‌کند. @@ -3072,12 +3072,12 @@ Output: Scanning storage devices... - + در حال پویش افزارهٔ ذخیره‌ساز… Partitioning - + افرازش @@ -3085,23 +3085,23 @@ Output: Set hostname %1 - + تنظیم نام میزبان %1 Set hostname <strong>%1</strong>. - + تنظیم نام میزبان <strong>%1</strong>. Setting hostname %1. - + تنظیم نام میزبان به %1. Internal Error - + خطای داخلی @@ -3228,7 +3228,7 @@ Output: Set password for user %1 - + تنظیم گذرواژه برای کاربر %1 @@ -3243,7 +3243,7 @@ Output: rootMountPoint is %1 - + نقطهٔ اتّصال ریشه %1 است @@ -3258,7 +3258,7 @@ Output: Cannot set password for user %1. - + نمی‌توان برای کاربر %1 گذرواژه تنظیم کرد. @@ -3271,22 +3271,22 @@ Output: Set timezone to %1/%2 - + تنظیم منطقهٔ زمانی به %1/%2 Cannot access selected timezone path. - + نمی‌توان به مسیر منطقهٔ زمانی گزیده دسترسی یافت. Bad path: %1 - + مسیر بد: %1 Cannot set timezone. - + نمی‌توان منطقهٔ زمانی را تنظیم کرد. @@ -3339,7 +3339,7 @@ Output: Summary - + خلاصه @@ -3442,7 +3442,7 @@ Output: Feedback - + بازخورد @@ -3460,7 +3460,7 @@ Output: Your username is too long. - + نام کاربریتان بیش از حد بلند است. @@ -3475,12 +3475,12 @@ Output: Your hostname is too short. - + نام میزبانتان بیش از حد کوتاه است. Your hostname is too long. - + نام میزبانتان بیش از حد بلند است. @@ -3490,7 +3490,7 @@ Output: Your passwords do not match! - + گذرواژه‌هایتان مطابق نیستند! @@ -3498,7 +3498,7 @@ Output: Users - + کاربران @@ -3506,12 +3506,12 @@ Output: Key - + کلید Value - + مقدار @@ -3519,22 +3519,22 @@ Output: Create Volume Group - + ایجاد گروه حجمی List of Physical Volumes - + فهرست حجم‌های فیزیکی Volume Group Name: - + نام گروه حجمی: Volume Group Type: - + گونهٔ گروه حجمی: @@ -3544,27 +3544,27 @@ Output: MiB - + می‌ب Total Size: - + اندازهٔ کل: Used Size: - + اندازهٔ استفاده‌شده: Total Sectors: - + کل شیارها: Quantity of LVs: - + کمیت حجم‌های منطقی: @@ -3583,82 +3583,82 @@ Output: &About - + &درباره Open donations website - + گشودن پایگاه وب اعانه‌ها &Donate - + ا&عانه Open help and support website - + گشودن پایگاه وب راهنمایی و پشتیبانی &Support - + &پشتیبانی Open issues and bug-tracking website - + گشودن پایگاه وب ردیاب مشکل &Known issues - + &مشکلات شناخته‌شده Open release notes website - + گشودن پاگاه وب یادداشت‌های انتشار &Release notes - + &یادداشت‌های انتشار <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to %1 setup.</h1> - + <h1>به برپاسازی %1 خوش آمدید.</h1> <h1>Welcome to the Calamares installer for %1.</h1> - + <h1>به نصب‌کنندهٔ کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to the %1 installer.</h1> - + <h1>به نصب‌کنندهٔ %1 خوش آمدید.</h1> %1 support - + پشتیبانی %1 About %1 setup - + دربارهٔ برپاسازی %1 About %1 installer - + دربارهٔ نصب‌کنندهٔ %1 @@ -3671,7 +3671,7 @@ Output: Welcome - + خوش آمدید @@ -3679,7 +3679,7 @@ Output: Welcome - + خوش آمدید @@ -3703,7 +3703,7 @@ Output: Back - + بازگشت @@ -3711,44 +3711,44 @@ Output: Keyboard Model - + مدل صفحه‌کلید Pick your preferred keyboard model or use the default one based on the detected hardware - + برمبنای سخت‌افزار شناخته‌شده، مدل صفحه‌کلید دلخواهتان را برگزیده یا از مدل پیش‌گزیده استفاده کنید. Refresh - + تازه‌سازی Layouts - + چینش‌ها Keyboard Layout - + چینش صفحه‌کلید Models - + مدل‌ها Variants - + دگرگونه‌ها Test your keyboard - + صفحه‌کلیدتان را بیازمایید @@ -3790,7 +3790,7 @@ Output: Back - + بازگشت @@ -3804,27 +3804,27 @@ Output: About - + درباره Support - + پشتیبانی Known issues - + اشکالات شناخته‌شده Release notes - + یادداشت‌های انتشار Donate - + اعانه diff --git a/lang/calamares_zh_TW.ts b/lang/calamares_zh_TW.ts index a665b7068..51f244389 100644 --- a/lang/calamares_zh_TW.ts +++ b/lang/calamares_zh_TW.ts @@ -1838,7 +1838,7 @@ The installer will quit and all changes will be lost. Office - 辦公室 + 辦公 @@ -3619,7 +3619,7 @@ Output: Open release notes website - 開啟發行手記網站 + 開啟發行記事網站 From ff0676b79b20d85ead0df57f061d441095961c65 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 25 May 2020 03:40:18 -0400 Subject: [PATCH 20/23] i18n: [desktop] Automatic merge of Transifex translations --- calamares.desktop | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/calamares.desktop b/calamares.desktop index 6a5f91db5..68b70b3de 100644 --- a/calamares.desktop +++ b/calamares.desktop @@ -61,6 +61,10 @@ Name[eu]=Sistema instalatu Icon[eu]=calamares GenericName[eu]=Sistema instalatzailea Comment[eu]=Calamares - sistema instalatzailea +Name[fa]=نصب سامانه +Icon[fa]=کالامارس +GenericName[fa]=نصب‌کنندهٔ سامانه +Comment[fa]=کالامارس — نصب‌کنندهٔ سامانه Name[es_PR]=Instalar el sistema Name[fr]=Installer le système Icon[fr]=calamares From bc9544bf14cf9c9c71e947b8304a6bff308812f1 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 25 May 2020 03:40:18 -0400 Subject: [PATCH 21/23] i18n: [dummypythonqt] Automatic merge of Transifex translations --- .../lang/fa/LC_MESSAGES/dummypythonqt.mo | Bin 379 -> 973 bytes .../lang/fa/LC_MESSAGES/dummypythonqt.po | 18 +++++++++++------- .../lang/id/LC_MESSAGES/dummypythonqt.mo | Bin 899 -> 901 bytes .../lang/id/LC_MESSAGES/dummypythonqt.po | 6 +++--- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo index 248498cd75cb95c034a55cd7c2ad85ff9f5465df..19f444cdd872c3381df5457cd863dd592681908d 100644 GIT binary patch literal 973 zcmZ{i&rcIU6vszJjcdFRe;qtL;sv6!+wGxg79j#H1_3EpIXi8q?c(livomX{#;6Gp z4!!y}V2MdXG)697{TFuI#2EhqPaZt^rU)d8ll{zh-p>2JdApgf!$WTfj`PS3q=;NZ z+K3*XkW0uuGKzdbE+9XUYsfF;Dl&YEkPPY=>PzG?as}gWrwPfT{zScuYMmkECTb4# zI%*wt9`!XUS_T7C35I0oAUvAS;Y#;;R==47!JDwWz)IXRF_Ma@NP^F$WHk=eAcS1x z`z&vuP?_+^zC; zZM4eFV?GPHv=myTl}@EHwpC@;n6Wswm_Pnb+e{fVflypvf2{_7fa2@QYIw{Q<4~@% zP;xc#s5ncr$9ejwDi3L1l!J;ZY7S&et~zSdfhsc!UKBEq&IX~6e_1pJp`1vM!@+W5 zRKO(IW8((tw|kvGw*=yMakt-&yCz9KqwXY|kZi{v<9!Tv`)!Ed#(VJ&E_$7KC*C{0 zIheZ9>-5_u>2;C~T@tN0ZRu(wq}M&DwUumYd;H;FCmK&KNwg!``tOl|w)gR_d6;n6 U3M8BT_V-uqUN_m+T?{VUZ(6-i`v3p{ delta 69 zcmX@h{+r3-o)F7a1|VPrVi_P-0b*t#)&XJ=umEC5prj>`2C0F8$?=S7lbM, YEAR. # +# Translators: +# Danial Behzadi , 2020 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-05 11:34-0400\n" +"POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" +"Last-Translator: Danial Behzadi , 2020\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,24 +23,24 @@ msgstr "" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" -msgstr "" +msgstr "کلیکم کنید!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." -msgstr "" +msgstr "یک QLabel جدید." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" -msgstr "" +msgstr "گام نمایش PythonQt الکی" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" -msgstr "" +msgstr "کار PythonQt الکی" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" -msgstr "" +msgstr "این کار PythonQt الکی است. کار الکی می‌گوید: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." -msgstr "" +msgstr "پیام وضعیتی برای کار PythonQt الکی." diff --git a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo index 75365c3b71bade16e7dde877f4787341830d9ea6..faf378083497e7696cd213b594325fb1e0c1b4e0 100644 GIT binary patch delta 73 zcmZo>Z)KklVp_t;z>omM!VC-ySD6?Xbb<6sAk77&#hHN^NGkzpAs}r9q|Je}@5atR PM&`pSvNzvmT)_wcct8u- delta 71 zcmZo=Z)TqmVp_z=z>omM!VC-ymzfwCbb<79Ak77&MVT2G#DTN|kQM^c7C_n@NPBPW O3}j@?-+Y&G1tS1l5(;Ag diff --git a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po index 7bbd86a27..41a0444c0 100644 --- a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po +++ b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po @@ -5,16 +5,16 @@ # # Translators: # Kukuh Syafaat , 2016 -# Wantoyo , 2017 +# Wantoyèk , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-05 11:34-0400\n" +"POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" -"Last-Translator: Wantoyo , 2017\n" +"Last-Translator: Wantoyèk , 2017\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" From a318fc8f565651a48d191b40bd186388e5eb70f5 Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 25 May 2020 03:40:18 -0400 Subject: [PATCH 22/23] i18n: [python] Automatic merge of Transifex translations --- lang/python/es/LC_MESSAGES/python.mo | Bin 8529 -> 8870 bytes lang/python/es/LC_MESSAGES/python.po | 9 +- lang/python/fa/LC_MESSAGES/python.mo | Bin 379 -> 8471 bytes lang/python/fa/LC_MESSAGES/python.po | 138 +++++++++++++----------- lang/python/id/LC_MESSAGES/python.mo | Bin 2374 -> 2376 bytes lang/python/id/LC_MESSAGES/python.po | 4 +- lang/python/zh_TW/LC_MESSAGES/python.mo | Bin 7526 -> 7526 bytes lang/python/zh_TW/LC_MESSAGES/python.po | 7 +- 8 files changed, 86 insertions(+), 72 deletions(-) diff --git a/lang/python/es/LC_MESSAGES/python.mo b/lang/python/es/LC_MESSAGES/python.mo index 4746eac7821d97f58458c9a41b474a39ac360bdc..d2ab2f33796606a1d1749770709f2e1e2fdecedc 100644 GIT binary patch delta 1679 zcmYk*Uu+ab9Ki9}=1x4Ztp!Vkmg}^I+Dc1XS}L?vYUxp10q7;apn z)Bx^?%%Hr#fIavf)}wk*sa;By)CM|jjHhu6`uI4Wi^gB#dd9c07VqLlOe87`wxJ|4 zf)eL2Hevxc;D`7qE@J~;#b*2oyI5bX(y3#j`bn&iE{rrs@1Z=KyYHe>>5~S-gm^;-4rB z9HvZ3bOHH^I)f7EV;sg?sIi%CdDl>C6s5qg)>RUiWZMQAFQM$njrF{qrW0phB=bWk z0RtSvE0KRk?jZ|F;B9;fFX2vHMG4%;flI~5aW`H@*`c4Y5C6hm>|}BPUv411W;$n> zNa5!wmHdI-*vFOb$D=4m65_M?4Gv*FH&HI*3?Fg{U&C2Eg%a;3%8qW~rQC&sDE~4a z*%WoQL`N>srzi`3fjjWm$R=*yAmeFd6Vy8>m3)K;@mrk4CZfvxJWk;`l)G~aC2lPj zM%;^%$Q#&!r3-Xq>#w0?`b#vfVRAR)ZVWMltff|QKQ^#!vQQf32$xZ|_8&ZrJ(?=< z3Nod-Ik)Y20A-!GkoSXXiH@B4CjM*t@F*HsMH`{X^E6G)i`?!#V_`AYXzU8l$J$!< zFhhv{pLTk(V{&}*jE6U3jdjn^8>T%WQ#`3K5pPULft;k82)pAA)uZ(G(z<9*hR?;@ zjG-_e?=kj;m*f4$Q{^Ayr`FWJ5SU(II~g6gI`8Dn^a))khOborK00q_Eq~DutOY&q zdb+hxY}FlwVyCu!?YM#V^SPYs1=gHCwx}1~yr;*Gp5xl2R?9vjv(l4*nwi{b#Y|GPAu5alHHwa8UV|mt_dL(CC88>H*<~%oWopQ47 zx3$Sh$4=X(Gv{h6tLH4=TF9BN=dHkGrcf*=HV+v4Q(5iXlDf$^wCSaf+b3OL=S?*Z@<{TIv3>l$b!6$RS*geQub^m+sHS$k&G;Al C6a-EH delta 1342 zcmXxkUr19?9Ki8&ZPPZLxtXn6w#`|ZSyt2O<}CkH3zPm378VT=lQcogD9RBO*h7Ed z>We+pgZUy7aS@7ojWBztNN^8^Mub{WQ4i5W^!>GU;rKb{T<`Ck^ZOkgYj{%|d+#s} zE1r7V23j~psVKIZ_`x%8Rw{xENsCjJ%42*1*W(EKaT3?!5|(00TEcRa_gz?m_b~@w zV}(*N^@)y;3HM5+^05vJ@N{x~2eTPZ;wqfNbr?rk@CV99GAxNW1?XbDAJUhUG|VR5xzLG2DS~Q39^8B?1(pY^V`8;>qOv6$~@J zi>)||vT#|ZQq35_CLF=o7CMV`TF^m$PvIGq8ofeZsSj9>-?0({9M^-rcu6CrCmNl-H=cV!V}o!__%x5tPkohSxy2sx~pMmfnm9zX{- za34ld=EpIDb0~MDkkusck)(qt8+nF>xPY=jD>qL{P>Ml}9j2qxxrxM5UfxRJDwLWH zqNH*bZ=i)d_MwiF(lk#ZZ~@BvL6q7)$40bLN3MuUq1Djj3Dcx3EXjWho@#x<HzS@oq#3ufHfheL&W`i#U7n`s#hxxtxV!UQTTgpm Yb%znRe@Qn!=K3|G&AqG{m%T;WUwqA&r~m)} diff --git a/lang/python/es/LC_MESSAGES/python.po b/lang/python/es/LC_MESSAGES/python.po index fe61ddbd1..302238518 100644 --- a/lang/python/es/LC_MESSAGES/python.po +++ b/lang/python/es/LC_MESSAGES/python.po @@ -9,6 +9,7 @@ # Guido Grasso , 2018 # Adolfo Jayme-Barrientos, 2019 # Miguel Mayol , 2020 +# Pier Jose Gotta Perez , 2020 # #, fuzzy msgid "" @@ -17,7 +18,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Miguel Mayol , 2020\n" +"Last-Translator: Pier Jose Gotta Perez , 2020\n" "Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -100,11 +101,11 @@ msgstr "Falló la sincronización mediante rsync con el código de error {}." #: src/modules/unpackfs/main.py:302 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "Desempaquetando la imagen {}/{}, archivo {}/{}" #: src/modules/unpackfs/main.py:317 msgid "Starting to unpack {}" -msgstr "" +msgstr "Iniciando el desempaquetado {}" #: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 msgid "Failed to unpack image \"{}\"" @@ -137,6 +138,8 @@ msgstr "Configuración de \"unsquash\" no válida" #: src/modules/unpackfs/main.py:423 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" +"El sistema de archivos para \"{}\" ({}) no es compatible con su kernel " +"actual" #: src/modules/unpackfs/main.py:427 msgid "The source filesystem \"{}\" does not exist" diff --git a/lang/python/fa/LC_MESSAGES/python.mo b/lang/python/fa/LC_MESSAGES/python.mo index a25fc7a02b6cd3d9681f8bd50b547f6e0a6e158c..f3e8321355015b5d5efba0b6324c77382da59d2a 100644 GIT binary patch literal 8471 zcmcJTYit}>6~~8?w$!Ec0fj;f+=hnQX?E9fUy1Xe%~PRykyis$rQ_XMd*a=hWo92esZ}L}5VTV5rfFQquF`yH)DH+%LVTe}%qGwZzQVT(5K@u&ojWtTvya$` zC?n7QJu~;7d+s^^^S^iI{X3StU~p{UyoYneb%yb6aP1O)IDUD(VSE$(6}S}qJNPB= z)*B4tL2x;E7x*;z5I7d&nfUo%z#RAQypa>!46Xvd3w{lJ9=s2H3%novb9{aMrwrq> zTrUT21=oXL1b2cm-Uuju90kSB&%wLFcfikse*(V%eh7XQy!j^P20j4Z4ju$Q2Oa|V zfX{+5zu$vm=O3W-zr82&qYspR>%iN)S}`ey{?{{C@)q-#!92f(LL~#{U_( z75pH^`*BwC?}A?ke+){#-T=jq_hP(-yR#5IwfRc~%pz!+xFav%BJ_0T$sKO5u zlsFs(p8;P6rQH(9wh|lw*MS94^79f%6XQLQKjUxwYyp?x~vHHYoP~39bh3 zgS-d9r@?Q5=Rx7&O^|OCdxC z9s>jL*C0b1t4Wpx?giI@7r-BZ{{kNc#|g$Za1Nx4@gMLz;N6Ov0}q4J?gJ1y7|>4F z0q*NVY6F+_A$+6!H9v&ga(t3g=CMpJI7qubvi#n~xjwoymd7Z$BenV%j8WnbEp(mB z9OV#SB_6$;k{3A!I3+g8K`3>O<@y#*;R(~zhj59K*D-tylsQt8`gojQ=&S2NZYWO4 zp&SxJIaY8k;Y4oqu{K5l;m?inHRYpqL~`*n#ajx=GdXzh5=|5qdjCd${VE`q4(yaTviY6qIjyhwZ#r zHp>>KRp2VG>SRjRVG9p6=n>;Si6KjEw}(f9O*@SELBaOTp^~Md=@nGK# zVNKPuRL!lb5fcs(F%{Kj(a!{~Tk=)K%#Y#?L;C?zU=>m(DaqJ*g%i>_qJ64K)e!^A zE{lz&;}c7bEq19SL8w+V(W0afwQbP=Y6zJrxn{xgn)hNSnyth@!3@ks6S?6!R^o2U z{bjufR9_)^hLtAgwGV1sG^XHMz7hqpj@W)+q&UAoqZZCzx!n#?Me(trgm|&jP2@@q zdlpIcno-tIQLi*1d{|ks@&Wl2WtDixEfU5c5Y>{U`!1rxjNNoanUJ7h!I0SW+KOkb zm!Pc8$$vthsvp_adY(3J`)b%eY&qJeD|OuMxp~X?qX=k1`KotWZ(hPeW^!s-Z{WhO zzCxd|NA#>CpN+en*-Qz_l{2u{)HWR}7<0YR*4oM%d#ymHXT)A42N~ z5`l=y6xF_H6@mWIg4D*G_;Di0?N23bmXB4v?CGK)@2T>Mmjp#*^@2#2J<{%aHDg~# z&V5yat?7*!|9C1!`*U}U)D4w)q%3sQw9I?&3StSC)Z8;AP=!C_Swy^*;x zqAUneo$4e@8LQs$iN3@`zgnrdp73(0CSrngRXxvQ2QX@}Stw~EKKEJDQ?|67w&?74 zMjdy|X{?Iq9po?Fv&}eNU(Ug#^P-7!@o@Jp$k2?DLH7Bo%k-Y0=B)ubJGe*fBf;E|Kh0FoV^Vxh2 zs@;!oeB$w~o7I8Md-iVIwX0hl@_76Vz&;$J(J=;w`$n5h>$1jiBliIwBo& z>_yEo)#>K~y7;+){{BZ+=89&nuV=@$9h;l;T$%0fVcid)U}j&f!UO{ANRUHJZD$Qz zS<~~aVBP+GTQaMf?PRE;W{c~U{Xyka^rgRU zV2z6YUDxZV^=f6`njWKmG@K2m!n5^L;Z*&^<;j?&Q5|*JXooZ5Y_iJ^XY0qqb1FO= zo)4$!8t<@`SXAM3ID3i4bii;plQrrm>d%Ge>nH2aD@HtB|7rLpkB&*p8QokP;a21l zhG#ENhV%84M*ZUD$xE+dYg#NZlJ1i162$QF%aeco;Uq@&G{mJDd^_FTn#VrXPpWVZ zcV8D5&dANnlj3=@SLZgvpTkV#aGTwD-yY4d!z=CL%tG#jbIfQCH;;?AGLx>`^*Dl4 z1Q(lAL>#x6xg;t)ts~jySYyK1Ho`RVxXKagCkg3MqIWGbxEA|lE__{>a4jR$FOsVH zC^`$rMRRgSf*(zo*e{;1M37SnS%f~YUgv4Pd!FhSDVkG~%evG-2ZdzIr>P33Wn!nh zuxT+HdQ12}8;Q4!{~tRI$!HINq4fnGh%mH2R9a7_!f7(yp$JjMqbu<{(!!P~aVm%) zM_H&J)A~_APS9Ulq-S%W4yImJ&(kV-dy8J?vJ3Y@#-^!^nffv9Yoxg_0|G75v+@4c zC0ywjzI4b%579-&W3v~(DvH`pHD3QZB9DUz85$)rtozSvO(B@1@C2HTm>RLlz+D*u zoz{zur1{dTmnX9Zshz4HC*@tA%N8%3#|GuAw7(b;r9NFhk$PLqDm*yP`3kpLIZn|^ zFD)XulIga$M!b77oR+1425kdyGhQE(mq)2wRHLqiu)X!Pn5dsb)|m-{q?eWOboi!r zVpdN;md*yX`9IPhadl26&j}x~kS=h!JQ+@jwne@Q8D=lNO4CF{q(pT;F`&igoJ6$Q zA@M9Sq+7tA*s{z>n{K6HG@2~Cl74NWjc!qk;cLdGWZOo4TC z5pDeVJ8CAy842g`N0!=VRvJ5zC~)$)aU}G(AM%}EQuC>-U!bMdvxGCR2VO(QH8cOK|BxN5?X1E zAvwtBoNOX>v}LQy1W7<^ZDS0r3ooRjmXb9Q<1U-%x)#Q6tipP-A-{4Xg9YO`G;Rj1 zj5MA>8nP%#qV0#1aVij5N>QqTs6Z56WoR)g|F+eRFYg1aG@4w@ODIDh-cdx6J3l?t zPqi7)UmjFfa!2d23?LCZqkV6zc(bVVF$4wB>m3%5XjyM~xk*h`2C0F8$rb!*lVt?%0stWA B2iO1r diff --git a/lang/python/fa/LC_MESSAGES/python.po b/lang/python/fa/LC_MESSAGES/python.po index 6190c38f2..dcb1a2ebe 100644 --- a/lang/python/fa/LC_MESSAGES/python.po +++ b/lang/python/fa/LC_MESSAGES/python.po @@ -3,6 +3,9 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Danial Behzadi , 2020 +# #, fuzzy msgid "" msgstr "" @@ -10,6 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" +"Last-Translator: Danial Behzadi , 2020\n" "Language-Team: Persian (https://www.transifex.com/calamares/teams/20061/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,30 +24,30 @@ msgstr "" #: src/modules/packages/main.py:59 src/modules/packages/main.py:68 #: src/modules/packages/main.py:78 msgid "Install packages." -msgstr "" +msgstr "نصب بسته‌ها." #: src/modules/packages/main.py:66 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "" +msgstr "در حال پردازش بسته‌ها (%(count)d/%(total)d)" #: src/modules/packages/main.py:71 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "در حال نصب یک بسته." +msgstr[1] "در حال نصب %(num)d بسته." #: src/modules/packages/main.py:74 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "در حال برداشتن یک بسته." +msgstr[1] "در حال برداشتن %(num)d بسته." #: src/modules/networkcfg/main.py:37 msgid "Saving network configuration." -msgstr "" +msgstr "در حال ذخیرهٔ پیکربندی شبکه." #: src/modules/networkcfg/main.py:48 src/modules/initcpiocfg/main.py:205 #: src/modules/initcpiocfg/main.py:209 src/modules/openrcdmcryptcfg/main.py:78 @@ -53,142 +57,146 @@ msgstr "" #: src/modules/fstab/main.py:338 src/modules/initramfscfg/main.py:94 #: src/modules/initramfscfg/main.py:98 src/modules/rawfs/main.py:171 msgid "Configuration Error" -msgstr "" +msgstr "خطای پیکربندی" #: src/modules/networkcfg/main.py:49 src/modules/initcpiocfg/main.py:210 #: src/modules/openrcdmcryptcfg/main.py:83 src/modules/localecfg/main.py:145 #: src/modules/luksopenswaphookcfg/main.py:100 src/modules/fstab/main.py:339 #: src/modules/initramfscfg/main.py:99 msgid "No root mount point is given for
{!s}
to use." -msgstr "" +msgstr "هیچ نقطهٔ اتّصال ریشه‌ای برای استفادهٔ
{!s}
داده نشده." #: src/modules/umount/main.py:40 msgid "Unmount file systems." -msgstr "" +msgstr "پیاده کردن سامانه‌های پرونده." #: src/modules/initcpiocfg/main.py:37 msgid "Configuring mkinitcpio." -msgstr "" +msgstr "پیکربندی mkinitcpio." #: src/modules/initcpiocfg/main.py:206 src/modules/openrcdmcryptcfg/main.py:79 #: src/modules/mount/main.py:146 src/modules/luksopenswaphookcfg/main.py:96 #: src/modules/fstab/main.py:333 src/modules/initramfscfg/main.py:95 #: src/modules/rawfs/main.py:172 msgid "No partitions are defined for
{!s}
to use." -msgstr "" +msgstr "هیچ افرازی برای استفادهٔ
{!s}
تعریف نشده." #: src/modules/openrcdmcryptcfg/main.py:34 msgid "Configuring OpenRC dmcrypt service." -msgstr "" +msgstr "در حال پیکربندی خدمت dmcrypt OpenRC." #: src/modules/unpackfs/main.py:44 msgid "Filling up filesystems." -msgstr "" +msgstr "در حال پر کردن سامانه‌پرونده‌ها." #: src/modules/unpackfs/main.py:257 msgid "rsync failed with error code {}." -msgstr "" +msgstr "آرسینک با رمز خطای {} شکست خورد." #: src/modules/unpackfs/main.py:302 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "" +msgstr "در حال بسته‌گشایی تصویر {}/{}، پروندهٔ {}/{}" #: src/modules/unpackfs/main.py:317 msgid "Starting to unpack {}" -msgstr "" +msgstr "در حال شروع بسته‌گشایی {}" #: src/modules/unpackfs/main.py:326 src/modules/unpackfs/main.py:432 msgid "Failed to unpack image \"{}\"" -msgstr "" +msgstr "شکست در بسته‌گشایی تصویر {}" #: src/modules/unpackfs/main.py:399 msgid "No mount point for root partition" -msgstr "" +msgstr "هیچ نقطهٔ اتّصالی برای افراز ریشه وجود ندارد" #: src/modules/unpackfs/main.py:400 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "" +msgstr "globalstorage کلید rootMountPoint را ندارد. کاری انجام نمی‌شود" #: src/modules/unpackfs/main.py:405 msgid "Bad mount point for root partition" -msgstr "" +msgstr "نقطهٔ اتّصال بد برای افراز ریشه" #: src/modules/unpackfs/main.py:406 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "" +msgstr "نقطهٔ اتّصال ریشه {} است که وجود ندارد. کاری انجام نمی‌شود" #: src/modules/unpackfs/main.py:422 src/modules/unpackfs/main.py:426 #: src/modules/unpackfs/main.py:446 msgid "Bad unsquash configuration" -msgstr "" +msgstr "پیکربندی بد unsquash" #: src/modules/unpackfs/main.py:423 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "" +msgstr "کرنل کنونیتان از سامانه‌پروندهٔ {} ({}) پشتیبانی نمی‌کند" #: src/modules/unpackfs/main.py:427 msgid "The source filesystem \"{}\" does not exist" -msgstr "" +msgstr "سامانهٔ پروندهٔ مبدأ {} وجود ندارد" #: src/modules/unpackfs/main.py:433 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" -msgstr "" +msgstr "شکست در یافتن unsquashfs. مطمئن شوید بستهٔ squashfs-tools نصب است" #: src/modules/unpackfs/main.py:447 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "" +msgstr "مقصد {} در سامانهٔ هدف، یک شاخه نیست" #: src/modules/services-systemd/main.py:35 msgid "Configure systemd services" -msgstr "" +msgstr "در حال پیکربندی خدمات سیستم‌دی" #: src/modules/services-systemd/main.py:68 #: src/modules/services-openrc/main.py:102 msgid "Cannot modify service" -msgstr "" +msgstr "نمی‌توان خدمت را دستکاری کرد" #: src/modules/services-systemd/main.py:69 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" +"فراخوانی systemctl {arg!s} در chroot رمز خطای {num!s} را " +"برگرداند." #: src/modules/services-systemd/main.py:72 #: src/modules/services-systemd/main.py:76 msgid "Cannot enable systemd service {name!s}." -msgstr "" +msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را به کار انداخت." #: src/modules/services-systemd/main.py:74 msgid "Cannot enable systemd target {name!s}." -msgstr "" +msgstr "نمی‌توان هدف سیستم‌دی {name!s} را به کار انداخت." #: src/modules/services-systemd/main.py:78 msgid "Cannot disable systemd target {name!s}." -msgstr "" +msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را از کار انداخت." #: src/modules/services-systemd/main.py:80 msgid "Cannot mask systemd unit {name!s}." -msgstr "" +msgstr "نمی‌توان واحد سیستم‌دی {name!s} را پوشاند." #: src/modules/services-systemd/main.py:82 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" +"دستورات ناشناختهٔ سیستم‌دی {command!s} و " +"{suffix!s} برای واحد {name!s}." #: src/modules/dummypython/main.py:44 msgid "Dummy python job." -msgstr "" +msgstr "کار پایتونی الکی." #: src/modules/dummypython/main.py:46 src/modules/dummypython/main.py:102 #: src/modules/dummypython/main.py:103 msgid "Dummy python step {}" -msgstr "" +msgstr "گام پایتونی الکی {}" #: src/modules/bootloader/main.py:51 msgid "Install bootloader." -msgstr "" +msgstr "نصب بارکنندهٔ راه‌اندازی." #: src/modules/localecfg/main.py:39 msgid "Configuring locales." @@ -196,31 +204,31 @@ msgstr "" #: src/modules/mount/main.py:38 msgid "Mounting partitions." -msgstr "" +msgstr "در حال سوار کردن افرازها." #: src/modules/plymouthcfg/main.py:36 msgid "Configure Plymouth theme" -msgstr "" +msgstr "در حال پیکربندی زمینهٔ پلی‌موث" #: src/modules/luksopenswaphookcfg/main.py:35 msgid "Configuring encrypted swap." -msgstr "" +msgstr "در حال پیکربندی مبادلهٔ رمزشده." #: src/modules/fstab/main.py:38 msgid "Writing fstab." -msgstr "" +msgstr "در حال نوشتن fstab." #: src/modules/services-openrc/main.py:38 msgid "Configure OpenRC services" -msgstr "" +msgstr "پیکربندی خدمات OpenRC" #: src/modules/services-openrc/main.py:66 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "" +msgstr "نمی‌توان خدمت {name!s} را به سطح اجرایی {level!s} افزود." #: src/modules/services-openrc/main.py:68 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "" +msgstr "نمی‌توان خدمت {name!s} را از سطح اجرایی {level!s} برداشت." #: src/modules/services-openrc/main.py:70 msgid "" @@ -235,7 +243,7 @@ msgstr "" #: src/modules/services-openrc/main.py:110 msgid "Target runlevel does not exist" -msgstr "" +msgstr "سطح اجرایی هدف وجود ندارد." #: src/modules/services-openrc/main.py:111 msgid "" @@ -245,7 +253,7 @@ msgstr "" #: src/modules/services-openrc/main.py:119 msgid "Target service does not exist" -msgstr "" +msgstr "خدمت هدف وجود ندارد" #: src/modules/services-openrc/main.py:120 msgid "" @@ -255,82 +263,84 @@ msgstr "" #: src/modules/dracut/main.py:36 msgid "Creating initramfs with dracut." -msgstr "" +msgstr "در حال ایجاد initramfs با dracut." #: src/modules/dracut/main.py:58 msgid "Failed to run dracut on the target" -msgstr "" +msgstr "شکست در اجرای dracut روی هدف" #: src/modules/dracut/main.py:59 msgid "The exit code was {}" -msgstr "" +msgstr "رمز خروج {} بود" #: src/modules/grubcfg/main.py:37 msgid "Configure GRUB." -msgstr "" +msgstr "در حال پیکربندی گراب." #: src/modules/displaymanager/main.py:515 msgid "Cannot write KDM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی KDM را نوشت" #: src/modules/displaymanager/main.py:516 msgid "KDM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:577 msgid "Cannot write LXDM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی LXDM را نوشت" #: src/modules/displaymanager/main.py:578 msgid "LXDM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:661 msgid "Cannot write LightDM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" #: src/modules/displaymanager/main.py:662 msgid "LightDM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:736 msgid "Cannot configure LightDM" -msgstr "" +msgstr "نمی‌توان LightDM را پیکربندی کرد" #: src/modules/displaymanager/main.py:737 msgid "No LightDM greeter installed." -msgstr "" +msgstr "هیچ خوش‌آمدگوی LightDMای نصب نشده." #: src/modules/displaymanager/main.py:768 msgid "Cannot write SLIM configuration file" -msgstr "" +msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" #: src/modules/displaymanager/main.py:769 msgid "SLIM config file {!s} does not exist" -msgstr "" +msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:895 msgid "No display managers selected for the displaymanager module." -msgstr "" +msgstr "هیچ مدیر نمایشی برای پیمانهٔ displaymanager گزیده نشده." #: src/modules/displaymanager/main.py:896 msgid "" "The displaymanagers list is empty or undefined in bothglobalstorage and " "displaymanager.conf." msgstr "" +"فهرست displaymanagers خالی بوده یا در bothglobalstorage و " +"displaymanager.conf تعریف نشده." #: src/modules/displaymanager/main.py:978 msgid "Display manager configuration was incomplete" -msgstr "" +msgstr "پیکربندی مدیر نمایش کامل نبود" #: src/modules/initramfscfg/main.py:41 msgid "Configuring initramfs." -msgstr "" +msgstr "در حال پیکربندی initramfs." #: src/modules/hwclock/main.py:35 msgid "Setting hardware clock." -msgstr "" +msgstr "در حال تنظیم ساعت سخت‌افزاری." #: src/modules/rawfs/main.py:35 msgid "Installing data." -msgstr "" +msgstr "داده‌های نصب" diff --git a/lang/python/id/LC_MESSAGES/python.mo b/lang/python/id/LC_MESSAGES/python.mo index b9bbbc6cbec4dbe08c99e9490b7f64baf66c2b9d..2a6c5294182d69ae0a5b8a723e78baa83cd5f2cf 100644 GIT binary patch delta 187 zcmXZVtqy`v0LAgct{>#frY2!-xY2w9yYFByIhj#ABN6ctNNVQ+3^Hc&8R))%!QlUH zq~Fd7=d|`^FHLs#q|ZQ#B<)60j5#jxh6%p={Oxl%mMr}SC%DA`PdLK@=U8Ec4_sh} lZr}LQ8WW!zcXXg|LnVfI#S~kd;;K%)pE1w-vEC0m^9Pkk7-|3j delta 185 zcmXZVAr69I0LAh54Mpfk{t5rZGnF49;#R8T@}6 z>9_a7d#!D3QD;{peFst`>EKH%%rM3$Zt&ITuFtcPWa)P}!99-gf+5~;j(3c(!X>`Z j?VCVKa2;^tj*b*=D8~gpFvS|DxGhuj^US$C4L{x=QXUrB diff --git a/lang/python/id/LC_MESSAGES/python.po b/lang/python/id/LC_MESSAGES/python.po index 48acf979f..41045e74a 100644 --- a/lang/python/id/LC_MESSAGES/python.po +++ b/lang/python/id/LC_MESSAGES/python.po @@ -6,7 +6,7 @@ # Translators: # Choiril Abdul, 2018 # Harry Suryapambagya , 2018 -# Wantoyo , 2018 +# Wantoyèk , 2018 # #, fuzzy msgid "" @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Wantoyo , 2018\n" +"Last-Translator: Wantoyèk , 2018\n" "Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/lang/python/zh_TW/LC_MESSAGES/python.mo b/lang/python/zh_TW/LC_MESSAGES/python.mo index 23e76b0ea5954400ec8d2d58f72c11de12167104..3bf723b474065bf31e3991f5914b10a9a0dd03e7 100644 GIT binary patch delta 328 zcmaE6^~`ER2vdDCBLjnjAOk}<0|UbmAqXua%)lTEcPA0{K7z z9-u%skmdu@Gk`Qu55saGEe53b0BIm%xC|szf%HottpKF?fs!Bx8USgKycduLS(E^z z)q!+1kOo<_7)Xl)=|eyor0y1wb^_8L#5M;pC-I4eC+3u-7AZJqq?TqY*p!!7CWBa; rj|;l7ZWa)~!z}u|chj?`70+j{d)nFid{)cT*5%I@?AXjGoyr6NKUO+~ delta 329 zcmXZWElfgD6u|KVZ#2gE@I8i1Mqw5VPhMcmKtYqmxtR#C(J0PBgNZ?dBWch8V+I`? zV|xW5Fe=GLf#SvmgW2l;D%;)t-E+=8_gs}zxxu-&-tdUzLn0R, 2020 +# Walter Cheuk , 2020 # #, fuzzy msgid "" @@ -13,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-30 23:13+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: 黃柏諺 , 2020\n" +"Last-Translator: Walter Cheuk , 2020\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/calamares/teams/20061/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -126,7 +127,7 @@ msgstr "錯誤的 unsquash 設定" #: src/modules/unpackfs/main.py:423 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "\"{}\" ({}) 的檔案系統不被您目前的核心所支援" +msgstr "\"{}\" ({}) 的檔案系統不獲您目前的內核所支援" #: src/modules/unpackfs/main.py:427 msgid "The source filesystem \"{}\" does not exist" @@ -136,7 +137,7 @@ msgstr "來源檔案系統 \"{}\" 不存在" msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" -msgstr "找不到 unsquashfs,請確定您已安裝 squashfs-tools 軟體包" +msgstr "找不到 unsquashfs,請確定已安裝 squashfs-tools 軟體包" #: src/modules/unpackfs/main.py:447 msgid "The destination \"{}\" in the target system is not a directory" From b8c3d15994ab38c70f9c12f0c0cf52ac295b2ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20M=C3=BCller?= Date: Fri, 29 May 2020 18:28:31 +0200 Subject: [PATCH 23/23] [branding] add slideshowAPI value --- src/branding/manjaro/branding.desc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/branding/manjaro/branding.desc b/src/branding/manjaro/branding.desc index 061019b86..be15553bd 100644 --- a/src/branding/manjaro/branding.desc +++ b/src/branding/manjaro/branding.desc @@ -78,6 +78,19 @@ images: # installer is actually writing to disk and doing other slow things). slideshow: "show.qml" +# There are two available APIs for a QML slideshow: +# - 1 (the default) loads the entire slideshow when the installation- +# slideshow page is shown and starts the QML then. The QML +# is never stopped (after installation is done, times etc. +# continue to fire). +# - 2 loads the slideshow on startup and calls onActivate() and +# onLeave() in the root object. After the installation is done, +# the show is stopped (first by calling onLeave(), then destroying +# the QML components). +# +# An image slideshow does not need to have the API defined. +slideshowAPI: 1 + # Colors for text and background components. # # - sidebarBackground is the background of the sidebar