Merge branch 'development' into 3.2.x-stable

This commit is contained in:
Philip Müller 2020-05-29 18:31:01 +02:00
commit 574ba783ad
36 changed files with 885 additions and 608 deletions

View File

@ -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

View File

@ -102,7 +102,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/calamares/DebugWindow.ui" line="106"/>
<source>Reload Stylesheet</source>
<translation type="unfinished"/>
<translation>Recargar Hoja de estilo</translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="113"/>
@ -120,7 +120,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/viewpages/ExecutionViewStep.cpp" line="92"/>
<source>Set up</source>
<translation type="unfinished"/>
<translation>Instalar</translation>
</message>
<message>
<location filename="../src/libcalamaresui/viewpages/ExecutionViewStep.cpp" line="92"/>
@ -138,7 +138,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamares/JobExample.cpp" line="40"/>
<source>Programmed job failure was explicitly requested.</source>
<translation type="unfinished"/>
<translation>Se solicitó de manera explícita la falla del trabajo programado.</translation>
</message>
</context>
<context>
@ -154,7 +154,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamares/JobExample.cpp" line="27"/>
<source>Example job (%1)</source>
<translation type="unfinished"/>
<translation>Ejemplo de trabajo (%1)</translation>
</message>
</context>
<context>
@ -162,12 +162,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="52"/>
<source>Run command '%1' in target system.</source>
<translation type="unfinished"/>
<translation>Ejecutar el comando '% 1' en el sistema de destino.</translation>
</message>
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="52"/>
<source> Run command '%1'.</source>
<translation type="unfinished"/>
<translation>Ejecutar el comando '% 1'.</translation>
</message>
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="59"/>
@ -213,17 +213,17 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="76"/>
<source>Loading ...</source>
<translation type="unfinished"/>
<translation>Cargando ...</translation>
</message>
<message>
<location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="97"/>
<source>QML Step &lt;i&gt;%1&lt;/i&gt;.</source>
<translation type="unfinished"/>
<translation>Paso QML &lt;i&gt;%1&lt;/i&gt;.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="261"/>
<source>Loading failed.</source>
<translation type="unfinished"/>
<translation>La carga ha fallado.</translation>
</message>
</context>
<context>
@ -231,9 +231,9 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message numerus="yes">
<location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="164"/>
<source>Waiting for %n module(s).</source>
<translation type="unfinished">
<numerusform/>
<numerusform/>
<translation>
<numerusform>Esperando %n módulo (s).</numerusform>
<numerusform>Esperando %n módulo(s).</numerusform>
</translation>
</message>
<message numerus="yes">
@ -247,7 +247,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="170"/>
<source>System-requirements checking is complete.</source>
<translation type="unfinished"/>
<translation>La verificación de los requisitos del sistema está completa.</translation>
</message>
</context>
<context>
@ -255,7 +255,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="153"/>
<source>Setup Failed</source>
<translation type="unfinished"/>
<translation>Configuración Fallida</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="153"/>
@ -265,7 +265,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="154"/>
<source>Would you like to paste the install log to the web?</source>
<translation type="unfinished"/>
<translation>¿Desea pegar el registro de instalación en la web?</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="167"/>
@ -292,12 +292,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="192"/>
<source>Install Log Paste URL</source>
<translation type="unfinished"/>
<translation>Pegar URL Registro de Instalación</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="195"/>
<source>The upload was unsuccessful. No web-paste was done.</source>
<translation type="unfinished"/>
<translation>La carga no tuvo éxito. No se realizó pegado web.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="211"/>
@ -322,12 +322,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="328"/>
<source>Continue with installation?</source>
<translation type="unfinished"/>
<translation>Continuar con la instalación?</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="330"/>
<source>The %1 setup program is about to make changes to your disk in order to set up %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
<translation type="unfinished"/>
<translation>El programa de instalación %1 está a punto de hacer cambios en el disco con el fin de configurar %2.&lt;br/&gt;&lt;strong&gt;No podrá deshacer estos cambios.&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="333"/>
@ -337,7 +337,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="336"/>
<source>&amp;Set up now</source>
<translation type="unfinished"/>
<translation>&amp;Configurar ahora</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="336"/>
@ -352,7 +352,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/>
<source>&amp;Set up</source>
<translation type="unfinished"/>
<translation>&amp;Instalar</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/>
@ -362,7 +362,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="394"/>
<source>Setup is complete. Close the setup program.</source>
<translation type="unfinished"/>
<translation>La instalación se ha completado. Cierre el instalador.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/>

File diff suppressed because it is too large Load Diff

View File

@ -1838,7 +1838,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="76"/>
<source>Office</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="77"/>
@ -3619,7 +3619,7 @@ Output:
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="185"/>
<source>Open release notes website</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="188"/>

Binary file not shown.

View File

@ -9,6 +9,7 @@
# Guido Grasso <cuquiman97@gmail.com>, 2018
# Adolfo Jayme-Barrientos, 2019
# Miguel Mayol <mitcoes@gmail.com>, 2020
# Pier Jose Gotta Perez <piegope@protonmail.com>, 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 <mitcoes@gmail.com>, 2020\n"
"Last-Translator: Pier Jose Gotta Perez <piegope@protonmail.com>, 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"

Binary file not shown.

View File

@ -3,6 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Danial Behzadi <dani.behzi@ubuntu.com>, 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 <dani.behzi@ubuntu.com>, 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 <pre>{!s}</pre> to use."
msgstr ""
msgstr "هیچ نقطهٔ اتّصال ریشه‌ای برای استفادهٔ <pre>{!s}</pre> داده نشده."
#: 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 <pre>{!s}</pre> to use."
msgstr ""
msgstr "هیچ افرازی برای استفادهٔ <pre>{!s}</pre> تعریف نشده."
#: 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 ""
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
"فراخوانی <code>systemctl {arg!s}</code> در chroot رمز خطای {num!s} را "
"برگرداند."
#: src/modules/services-systemd/main.py:72
#: src/modules/services-systemd/main.py:76
msgid "Cannot enable systemd service <code>{name!s}</code>."
msgstr ""
msgstr "نمی‌توان خدمت سیستم‌دی <code>{name!s}</code> را به کار انداخت."
#: src/modules/services-systemd/main.py:74
msgid "Cannot enable systemd target <code>{name!s}</code>."
msgstr ""
msgstr "نمی‌توان هدف سیستم‌دی <code>{name!s}</code> را به کار انداخت."
#: src/modules/services-systemd/main.py:78
msgid "Cannot disable systemd target <code>{name!s}</code>."
msgstr ""
msgstr "نمی‌توان خدمت سیستم‌دی <code>{name!s}</code> را از کار انداخت."
#: src/modules/services-systemd/main.py:80
msgid "Cannot mask systemd unit <code>{name!s}</code>."
msgstr ""
msgstr "نمی‌توان واحد سیستم‌دی <code>{name!s}</code> را پوشاند."
#: src/modules/services-systemd/main.py:82
msgid ""
"Unknown systemd commands <code>{command!s}</code> and "
"<code>{suffix!s}</code> for unit {name!s}."
msgstr ""
"دستورات ناشناختهٔ سیستم‌دی <code>{command!s}</code> و "
"<code>{suffix!s}</code> برای واحد {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 "داده‌های نصب"

Binary file not shown.

View File

@ -6,7 +6,7 @@
# Translators:
# Choiril Abdul, 2018
# Harry Suryapambagya <harsxv@gmail.com>, 2018
# Wantoyo <wantoyek@gmail.com>, 2018
# Wantoyèk <wantoyek@gmail.com>, 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 <wantoyek@gmail.com>, 2018\n"
"Last-Translator: Wantoyèk <wantoyek@gmail.com>, 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"

View File

@ -5,6 +5,7 @@
#
# Translators:
# 黃柏諺 <s8321414@gmail.com>, 2020
# Walter Cheuk <wwycheuk@gmail.com>, 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: 黃柏諺 <s8321414@gmail.com>, 2020\n"
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>, 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"

View File

@ -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

View File

@ -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"
@ -117,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 )
{
@ -175,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
}

View File

@ -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 );

View File

@ -22,18 +22,22 @@
* bindings.
*/
#include "modulesystem/Module.h"
#include "utils/Logger.h"
#include "utils/Yaml.h"
#include "Branding.h"
#include "CppJob.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"
#ifdef WITH_QML
#include "utils/Qml.h"
#endif
#include "utils/Yaml.h"
#include "viewpages/ExecutionViewStep.h"
#include <QApplication>
#include <QCommandLineOption>
@ -42,6 +46,7 @@
#include <QFileInfo>
#include <QLabel>
#include <QMainWindow>
#include <QThread>
#include <memory>
@ -80,6 +85,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 +99,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 <module> path.\n";
parser.showHelp();
@ -116,20 +124,161 @@ 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 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, unsigned long t = 3 )
: m_name( name )
, m_delay( t )
{
}
virtual ~ExecViewJob() override;
QString prettyName() const override { return m_name; }
Calamares::JobResult exec() override
{
QThread::sleep( m_delay );
return Calamares::JobResult::ok();
}
void setConfigurationMap( const QVariantMap& ) override {}
private:
QString m_name;
unsigned long m_delay;
};
ExecViewJob::~ExecViewJob() {}
/** @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()
{
// 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" );
}
ExecViewModule::~ExecViewModule() {}
void
ExecViewModule::initFrom( const QVariantMap& )
{
}
void
ExecViewModule::loadSelf()
{
auto* viewStep = new Calamares::ExecutionViewStep();
viewStep->setModuleInstanceKey( instanceKey() );
viewStep->setConfigurationMap( m_configurationMap );
viewStep->appendJobModuleInstanceKey( instanceKey().toString() );
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
{
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( "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;
}
static Calamares::Module*
load_module( const ModuleConfig& moduleConfig )
{
QString moduleName = moduleConfig.moduleName();
if ( moduleName == "-" )
{
return new ExecViewModule;
}
QFileInfo fi;
bool ok = false;
@ -188,6 +337,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 +363,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 );
@ -241,6 +402,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 )
@ -252,7 +417,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 );
@ -261,8 +430,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() )

View File

@ -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

View File

@ -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();

View File

@ -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()

View File

@ -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();

View File

@ -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.

View File

@ -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";
}
}

View File

@ -207,6 +207,10 @@ unmarginLayout( QLayout* layout )
int
defaultFontSize()
{
if ( s_defaultFontSize <= 0 )
{
s_defaultFontSize = QFont().pointSize();
}
return s_defaultFontSize;
}

View File

@ -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 <QByteArray>
@ -30,11 +32,81 @@
#include <QString>
#include <QVariant>
static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" );
namespace CalamaresUtils
{
QDir
qmlModulesDir()
{
return s_qmlModulesDir;
}
void
callQMLFunction( QQuickItem* qmlObject, const char* method )
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 )
{
QByteArray methodSignature( method );
methodSignature.append( "()" );
@ -71,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 ); } );
}
}
@ -149,7 +221,7 @@ qmlSearchNames()
}
void
registerCalamaresModels()
registerQmlModels()
{
static bool done = false;
if ( !done )

View File

@ -24,10 +24,25 @@
#include "modulesystem/InstanceKey.h"
#include "utils/NamedEnum.h"
#include <QDir>
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 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
*
* This needs to be called at least once to make the global Calamares
@ -40,7 +55,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 +65,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.
*
@ -66,7 +81,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

View File

@ -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 );

View File

@ -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 <QLabel>
@ -50,6 +52,8 @@ SlideshowQML::SlideshowQML( QWidget* parent )
, m_qmlComponent( nullptr )
, m_qmlObject( nullptr )
{
CalamaresUtils::registerQmlModels();
m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView );
m_qmlShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() );
@ -121,11 +125,30 @@ 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 );
}
}
}
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();
}
}
}
/*
@ -144,7 +167,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() )
{

View File

@ -3,13 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Danial Behzadi <dani.behzi@ubuntu.com>, 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 <dani.behzi@ubuntu.com>, 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 الکی."

View File

@ -5,16 +5,16 @@
#
# Translators:
# Kukuh Syafaat <syafaatkukuh@gmail.com>, 2016
# Wantoyo <wantoyek@gmail.com>, 2017
# Wantoyèk <wantoyek@gmail.com>, 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 <wantoyek@gmail.com>, 2017\n"
"Last-Translator: Wantoyèk <wantoyek@gmail.com>, 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"

View File

@ -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 ) )
{

View File

@ -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;
}

View File

@ -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 )
{

View File

@ -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')

View File

@ -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)