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
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
-
+ Recargar Hoja de estilo
@@ -120,7 +120,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ Instalar
@@ -138,7 +138,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ 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
-
+ Ejemplo de trabajo (%1)
@@ -162,12 +162,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ Ejecutar el comando '% 1' en el sistema de destino.
-
+ Ejecutar el comando '% 1'.
@@ -213,17 +213,17 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ Cargando ...
-
+ Paso QML <i>%1</i>.
-
+ La carga ha fallado.
@@ -231,9 +231,9 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
-
-
+
+ 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
-
+ 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
-
+ Configuración Fallida
@@ -265,7 +265,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ ¿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
-
+ Pegar URL Registro de Instalación
-
+ 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
-
+ Continuar con la instalación?
-
+ 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
-
+ &Configurar ahora
@@ -352,7 +352,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ &Instalar
@@ -362,7 +362,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar
-
+ 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 @@
- <strong>محیط بوت</strong> این سیستم. <br><br>سیستمهای قدیمی x86 فقط از <strong>بایوس</strong> پشتیبانی میکنند. <br>سیستمهای مدرن معمولا از <strong>ای.اف.آی</strong> استفاده میکنند، اما ممکن است در صورتی که در حالت سازگاری اجرا شوند همچنان به صورت بایوس نشان داده شوند
+ <strong>محیط راهاندازی</strong> این سامانه. <br><br>سامانههای x86 قدیمتر فقط از <strong>بایوس</strong> پشتیبانی میکنند. <br>سامانههای نوین معمولا از <strong>ایافآی</strong> استفاده میکنند، ولی اگر در حالت سازگاری روشن شوند، ممکن است به عنوان بایوس هم نمایش یابند.
- سیستم با محیط بوت <strong>ای.اف.آی</strong> آغاز شد. <br><br>به منظور پیکربندی راهاندازی از یک محیط ای.اف.آی، این نصاب باید حتما یک برنامه بالاآورنده بوت، مانند <strong>گراب</strong> یا <strong>سیستمبوت</strong> را روی یک پارتیشن سیستم ای.اف.آی مستقر نماید. این به صورت خودکار است مگر اینکه شما پارتیشنبندی دستی را انتخاب کنید که در این صورت باید خودتان انتخاب کنید یا به صورت دستی ایجاد کنید.
+ سامانه با محیط راهاندازی <strong>ایافآی</strong> روشن شد. <br><br>برای پیکربندی برپایی از محیط ایافآی، باید این نصبکننده، برنامه بارکنندهٔ راهاندازیای چون <strong>گراب</strong> یا <strong>راهانداز سیستمدی</strong> را روی یک <strong>افراز سامانهای ایافآی</strong> مستقر کند. این عمل به صورت خودکار انجام میشود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان ایجادش کرده یا برگزینید.
- سیستم با محیط بوت <strong>بایوس</strong> آغاز شد. <br><br>به منظور پیکربندی راهانداری از یک محیط بایوس، این نصاب باید حتما یک برنامه بالاآورنده بوت، مانند <strong>گراب</strong> را یا در شروع یک پارتیشن و یا روی <strong>رکورد راهانداز اصلی</strong> نزدیک شروع جدول پارتیشن (ترجیحا) نصب کند. این به صورت خودکار است مگر اینکه شما پارتیشنبندی دستی را انتخاب کنید که در این صورت باید خودتان به صورت دستی آن را راهاندازی کنید.
+ سامانه با محیط راهاندازی <strong>بایوس</strong> روشن شد. <br><br>برای پیکربندی برپایی از یک محیط بایوس، باید این نصبکنده برنامهٔ بارکنندهٔ راهاندازی چون <strong>گراب</strong> را در ابتدای یک افراز یا (ترجیحاً) روی <strong>رکورد راهاندازی اصلی</strong> نزدیکابتدای جدول افراز نصب کند. این عمل به صورت خودکار انجام میشود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان برپایش کنید.
@@ -24,22 +24,22 @@
- رکورد راه انداز اصلی یا همان ام.بی.آر ٪1
+ رکورد راه اندازی اصلی %1
- پارتیشن بوت
+ افراز راهاندازی
- پارتیشن سیستمی
+ افراز سامانهای
- بوت لودر نصب نکن.
+ نصب نکردن یک بارکنندهٔ راهاندازی
@@ -52,7 +52,7 @@
- صفحه خالی
+ صفحهٔ خالی
@@ -75,12 +75,12 @@
- ماژولها
+ پیمانهها
- نوع:
+ گونه:
@@ -111,7 +111,7 @@
- اطلاعات رفع اشکال
+ اطّلاعات اشکالزدایی
@@ -184,27 +184,27 @@
- مسیر شاخه جاری نامناسب
+ مسیر شاخهٔ جاری بد
- شاخه جاری %1 برای کار پایتونی %2 خواندنی نیست
+ شاخهٔ کاری %1 برای کار پایتونی %2 خواندنی نیست
- اسکریپت اصلی مشکلدار
+ پروندهٔ کدنوشتهٔ اصلی بد
- فایل اسکریپت اصلی %1 برای کار پایتون %2 قابل خواندن نیست.
+ پروندهٔ کدنویسهٔ اصلی %1 برای کار پایتونی %2 قابل خواندن نیست.
- Boost.Python error in job "%1".
+ خطای Boost.Python در کار %1.
@@ -238,9 +238,9 @@
-
-
-
+
+ (%n ثانیه)
+ (%n ثانیه)
@@ -259,7 +259,7 @@
- نصب شکست خورد.
+ نصب شکست خورد
@@ -316,7 +316,7 @@
- راه اندازی ادامه یابد؟
+ ادامهٔ برپایی؟
@@ -331,7 +331,7 @@
- نصاب %1 در شرف ایجاد تغییرات در دیسک شما به منظور نصب %2 است. <br/><strong>شما قادر نخواهید بود تا این تغییرات را برگردانید.</strong>
+ نصبکنندهٔ %1 میخواهد برای نصب %2 تغییراتی در دیسکتان بدهد. <br/><strong>نخواهید توانست این تغییرات را برگردانید.</strong>
@@ -341,12 +341,12 @@
- &همین حالا نصب کنید
+ &اکنون نصب شود
- برگردید به &عقب
+ &بازگشت
@@ -386,7 +386,7 @@
- &قبلی
+ &پیشین
@@ -419,8 +419,8 @@ The setup program will quit and all changes will be lost.
- آیا واقعاً می خواهید روند نصب فعلی را لغو کنید؟
-نصاب ترک می شود و همه تغییرات از بین می روند.
+ واقعاً می خواهید فرایند نصب فعلی را لغو کنید؟
+نصبکننده بسته شده و تمامی تغییرات از بین خواهند رفت.
@@ -428,22 +428,22 @@ The installer will quit and all changes will be lost.
- نوع ناشناخته استثنا
+ گونهٔ استثنای ناشناخته
- unparseable Python error
+ خطای پایتونی غیرقابل تجزیه
- unparseable Python traceback
+ ردیابی پایتونی غیرقابل تجزیه
- Unfetchable Python error.
+ خطای پایتونی غیرقابل دریافت.
@@ -461,7 +461,7 @@ The installer will quit and all changes will be lost.
- نمایش اطلاعات دیباگ
+ نمایش اطّلاعات اشکالزدایی
@@ -486,7 +486,7 @@ The installer will quit and all changes will be lost.
- %1 نصاب
+ نصبکنندهٔ %1
@@ -594,7 +594,7 @@ The installer will quit and all changes will be lost.
-
+ <strong>جایگزینی یک افراز</strong><br/>افرازی را با %1 جایگزین میکند.
@@ -619,22 +619,22 @@ The installer will quit and all changes will be lost.
-
+ باز استفاده از مبادله
-
+ مبادله (بدون خوابزمستانی)
-
+ مبادله (با خوابزمستانی)
-
+ مبادله به پرونده
@@ -642,17 +642,17 @@ The installer will quit and all changes will be lost.
-
+ پاکسازی اتّصالها برای عملبات افراز روی %1
-
+ در حال پاکسازی اتّصالها برای عملبات افراز روی %1
-
+ همهٔ اتّصالها برای %1 پاکسازی شدند
@@ -660,22 +660,22 @@ The installer will quit and all changes will be lost.
-
+ پاکسازی همهٔ اتّصالهای موقّتی.
-
+ در حال پاکسازی همهٔ اتّصالهای موقّتی.
-
+ نمیتوان فهرست اتّصالهای موقّتی را گرفت.
-
+ همهٔ اتّصالهای موقّتی پاکسازی شدند.
@@ -684,17 +684,17 @@ The installer will quit and all changes will be lost.
-
+ نمیتوان دستور را اجرا کرد.
-
+ دستور در محیط میزبان اجرا میشود و نیاز دارد مسیر ریشه را بداند، ولی هیچ نقطهٔ اتّصال ریشهای تعریف نشده.
-
+ دستور نیاز دارد نام کاربر را بداند، ولی هیچ نام کاربریای تعریف نشده.
@@ -702,17 +702,17 @@ The installer will quit and all changes will be lost.
-
+ تنظیم مدل صفحهکلید به %1.<br/>
-
+ تنظیم چینش صفحهکلید به %1/%2.
-
+ زبان سامانه به %1 تنظیم خواهد شد.
@@ -722,72 +722,72 @@ The installer will quit and all changes will be lost.
-
+ تنظیم منطقهٔ زمانی به %1/%2.<br/>
-
+ نصب شبکهای. (از کار افتاده: پیکربندی نادرست)
-
+ نصب شبکهای. (از کار افتاده: دریافت دادههای گروههای نامعتبر)
-
+ نصب شبکهای. (از کار افتاده: خطای داخلی)
-
+ نصب شبکهای. (از کار افتاده: ناتوان در گرفتن فهرست بستهها. اتّصال شبکهتان را بررسی کنید)
-
+ رایانه کمینهٔ نیازمندیهای برپاسازی %1 را ندارد.<br/>برپاسازی نمیتواند ادامه یابد. <a href="#details">جزییات…</a>
-
+ رایانه کمینهٔ نیازمندیهای نصب %1 را ندارد.<br/>نصب نمیتواند ادامه یابد. <a href="#details">جزییات…</a>
-
+ رایانه کمینهٔ نیازمندیهای برپاسازی %1 را ندارد.<br/>برپاسازی میتواند ادامه یابد، ولی ممکن است برخی ویژگیها از کار افتاده باشند.
-
+ رایانه کمینهٔ نیازمندیهای نصب %1 را ندارد.<br/>نصب میتواند ادامه یابد، ولی ممکن است برخی ویژگیها از کار افتاده باشند.
-
+ این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانهتان برپا میکند.
-
+ <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1>
-
+ <h1>به برپاسازی %1 خوش آمدید.</h1>
-
+ <h1>به نصبکنندهٔ کالامارس برای %1 خوش آمدید.</h1>
-
+ <h1>به نصبکنندهٔ %1 خوش آمدید.</h1>
@@ -803,77 +803,77 @@ The installer will quit and all changes will be lost.
-
+ ایجاد یک افراز
-
+ اندا&زه:
-
+ میب
-
+ &گونهٔ افراز
-
+ &اصلی
-
+ &گسترشیافته
-
+ سامانه &پرونده:
-
+ نام حجم منطقی
-
+ &نقطهٔ اتّصال:
-
+ پرچمها:
-
+ رمز&نگاری
-
+ منطقی
-
+ اصلی
-
+ GPT
-
+ نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید.
@@ -881,17 +881,17 @@ The installer will quit and all changes will be lost.
-
+ ایچاد افراز %2میب جدید روی %4 (%3) با سامانهٔ پروندهٔ %1.
-
+ ایچاد افراز <strong>%2میب</strong> جدید روی <strong>%</strong>4 (%3) با سامانهٔ پروندهٔ <strong>%</strong>1.
-
+ در حال ایجاد افراز %1 جدید روی %2.
@@ -904,27 +904,27 @@ The installer will quit and all changes will be lost.
-
+ ایجاد جدول افراز
-
+ ایجاد یک جدول افراز جدید، همهٔ دادههای موجود روی دیسک را حذف خواهد کرد.
-
+ میخواهید چه جور جدول افرازی بسازید؟
-
+ رکورد راهاندازی اصلی (MBR)
-
+ جدول افراز گاید (GPT)
@@ -932,17 +932,17 @@ The installer will quit and all changes will be lost.
-
+ ایجاد جدول افراز %1 جدید روی %2.
-
+ ایجاد جدول افراز <strong>%1</strong> جدید روی <strong>%2</strong> (%3).
-
+ در حال ایجاد جدول افراز %1 جدید روی %2.
@@ -955,37 +955,37 @@ The installer will quit and all changes will be lost.
-
+ ایجاد کاربر %1
-
+ ایجاد کاربر <strong>%</strong>1.
-
+ در حال ایجاد کاربر %1.
-
+ شاخهٔ sudoers قابل نوشتن نیست.
-
+ نمیتوان پروندهٔ sudoers را برای نوشتن ایجاد کرد.
-
+ نمیتوان مالک پروندهٔ sudoers را تغییر داد.
-
+ نمیتوان پروندهٔ groups را برای خواندن گشود.
@@ -993,7 +993,7 @@ The installer will quit and all changes will be lost.
-
+ ایجاد گروه حجمی
@@ -1001,17 +1001,17 @@ The installer will quit and all changes will be lost.
-
+ ایجاد گروه حجمی جدید به نام %1.
-
+ ایجاد گروه حجمی جدید به نام <strong>%1</strong>.
-
+ در حال ایجاد گروه حجمی جدید به نام %1.
@@ -1025,12 +1025,12 @@ The installer will quit and all changes will be lost.
-
+ از کار انداختن گروه حجمی با نام %1.
-
+ از کار انداختن گروه حجمی با نام <strong>%1</strong>.
@@ -1043,17 +1043,17 @@ The installer will quit and all changes will be lost.
-
+ حذف افراز %1.
-
+ حذف افراز <strong>%1</strong>.
-
+ در حال حذف افراز %1.
@@ -1066,7 +1066,7 @@ The installer will quit and all changes will be lost.
-
+ این افزاره یک جدول افراز <strong>%1</strong> دارد.
@@ -1124,7 +1124,7 @@ The installer will quit and all changes will be lost.
-
+ شکست در گشودن %1
@@ -1132,7 +1132,7 @@ The installer will quit and all changes will be lost.
-
+ کار سیپلاسپلاس الکی
@@ -1140,57 +1140,57 @@ The installer will quit and all changes will be lost.
-
+ ویرایش افراز موجود
-
+ محتوا:
-
+ &نگهداری
-
+ قالببندی
-
+ هشدار: قالببندی افراز، همهٔ دادههای موجود را پاک میکند.
-
+ &نقطهٔ اتّصال:
-
+ اندا&زه:
-
+ میب
-
+ سامانه &پرونده:
-
+ پرچمها:
-
+ نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید.
@@ -1203,22 +1203,22 @@ The installer will quit and all changes will be lost.
-
+ رمز&نگاری سامانه
-
+ عبارت عبور
-
+ تأیید عبارت عبور
-
+ لطفاً عبارت عبور یکسانی را در هر دو جعبه وارد کنید.
@@ -1226,7 +1226,7 @@ The installer will quit and all changes will be lost.
-
+ تنظیم اطّلاعات افراز
@@ -1256,7 +1256,7 @@ The installer will quit and all changes will be lost.
-
+ برپایی نقطههای اتّصال
@@ -1269,7 +1269,7 @@ The installer will quit and all changes will be lost.
-
+ &راهاندازی دوباره
@@ -1284,7 +1284,7 @@ The installer will quit and all changes will be lost.
-
+ <h1>همهچیز انجام شد.</h1><br/>%1 روی رایانهتان نصب شد.<br/>ممکن است بخواهید به سامانهٔ جدیدتان وارد شده تا به استفاده از محیط زندهٔ %2 ادامه دهید.
@@ -1307,27 +1307,27 @@ The installer will quit and all changes will be lost.
-
+ پایان
-
+ برپایی کامل شد
-
+ نصب کامل شد
-
+ برپایی %1 کامل شد.
-
+ نصب %1 کامل شد.
@@ -1378,52 +1378,52 @@ The installer will quit and all changes will be lost.
-
+ به برق وصل است.
-
+ سامانه به برق وصل نیست.
-
+ به اینترنت وصل است
-
+ سامانه به اینترنت وصل نیست.
-
+ دارد نصبکننده را به عنوان یک مدیر (ریشه) اجرا میکند
-
+ برنامهٔ برپایی با دسترسیهای مدیر اجرا نشدهاست.
-
+ برنامهٔ نصب کننده با دسترسیهای مدیر اجرا نشدهاست.
-
+ صفحهای با بزرگی کافی برای نمایش تمام نصبکننده دارد
-
+ صفحه برای نمایش برنامهٔ برپایی خیلی کوچک است.
-
+ صفحه برای نمایش نصبکننده خیلی کوچک است.
@@ -1431,7 +1431,7 @@ The installer will quit and all changes will be lost.
-
+ در حال جمعآوری اطّلاعات دربارهٔ دستگاهتان.
@@ -1447,17 +1447,17 @@ The installer will quit and all changes will be lost.
-
+ نمیتوان شاخههای <code>%1</code> را ایجاد کرد.
-
+ نمیتوان پروندهٔ <code>%1</code> را گشود.
-
+ نمیتوان در پروندهٔ <code>%1</code> نوشت.
@@ -1465,7 +1465,7 @@ The installer will quit and all changes will be lost.
-
+ در جال ایجاد initramfs با mkinitcpio.
@@ -1473,7 +1473,7 @@ The installer will quit and all changes will be lost.
-
+ در حال ایجاد initramfs.
@@ -1481,17 +1481,17 @@ The installer will quit and all changes will be lost.
-
+ برنامهٔ Konsole نصب نیست
-
+ لطفاً Konsole کیدیای را نصب کرده و دوباره تلاش کنید!
-
+ در حال اجرای کدنوشته: <code>%1</code>
@@ -1499,7 +1499,7 @@ The installer will quit and all changes will be lost.
-
+ کدنوشته
@@ -1507,12 +1507,12 @@ The installer will quit and all changes will be lost.
-
+ تنظیم مدل صفحهکلید به %1.<br/>
-
+ تنظیم چینش صفحهکلید به %1/%2.
@@ -1520,7 +1520,7 @@ The installer will quit and all changes will be lost.
-
+ صفحهکلید
@@ -1528,7 +1528,7 @@ The installer will quit and all changes will be lost.
-
+ صفحهکلید
@@ -1536,12 +1536,12 @@ The installer will quit and all changes will be lost.
-
+ تنظیمات محلی سیستم
-
+ تنظیمات محلی سیستم بر روی زبان و مجموعه کاراکتر برخی از عناصر رابط کاربری خط فرمان تأثیر میگذارد. <br/>تنظیمات فعلی <strong>%1</strong> است.
@@ -1551,7 +1551,7 @@ The installer will quit and all changes will be lost.
-
+ &قبول
@@ -1564,17 +1564,17 @@ The installer will quit and all changes will be lost.
-
+ <h1>توافق پروانه</h1>
-
+ شرایط و ضوابط فوق را میپذیرم.
-
+ لطفاً توافق پروانهٔ کاربر نهایی (EULAs) را بازبینی کنید.
@@ -1602,7 +1602,7 @@ The installer will quit and all changes will be lost.
-
+ پروانه
@@ -1610,13 +1610,13 @@ The installer will quit and all changes will be lost.
-
+ نشانی اینترنتی: %1%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.
-
+ پرونده: %1
-
+ نهفتن متن پروانه
-
+ نمایش متن پروانه
-
+ گشودن توافق پروانه در مرورگر.
@@ -1670,23 +1670,23 @@ The installer will quit and all changes will be lost.
-
+ ناحیه:
-
+ منطقه:
-
+ &تغییر…
-
+ زبان سامانه به %1 تنظیم خواهد شد.
@@ -1696,7 +1696,7 @@ The installer will quit and all changes will be lost.
-
+ تنظیم منطقهٔ زمانی به %1/%2.<br/>
@@ -1704,7 +1704,7 @@ The installer will quit and all changes will be lost.
-
+ موقعیت
@@ -1712,7 +1712,7 @@ The installer will quit and all changes will be lost.
-
+ موقعیت
@@ -1720,20 +1720,20 @@ The installer will quit and all changes will be lost.
-
+ پیکربندی پروندهٔ کلید LUKS.
-
+ هیچ افرازی تعریف نشده
-
+ خطای برپاسازی rootfs رمزشده
@@ -1756,12 +1756,12 @@ The installer will quit and all changes will be lost.
-
+ تولید شناسهٔ دستگاه
-
+ خطای پیکربندی
@@ -1775,97 +1775,97 @@ The installer will quit and all changes will be lost.
-
+ گزینش بستهها
-
+ نرمافزار اداری
-
+ بستهٔ اداری
-
+ نرمافزار مرورگر
-
+ بستهٔ مرورگر
-
+ مرورگر وب
-
+ کرنل
-
+ خدمتها
-
+ ورود
-
+ میزکار
-
+ برنامههای کاربردی
-
+ ارتباطات
-
+ توسعه
-
+ اداری
-
+ چندرسانهای
-
+ اینترنت
-
+ شخصیسازی
-
+ بازی
-
+ ابزارها
@@ -1873,7 +1873,7 @@ The installer will quit and all changes will be lost.
-
+ یادداشتها
@@ -1899,7 +1899,7 @@ The installer will quit and all changes will be lost.
-
+ پیکربندی سازنده
@@ -1912,72 +1912,72 @@ The installer will quit and all changes will be lost.
-
+ گذرواژه خیلی کوتاه است
-
+ گذرواژه خیلی بلند است
-
+ گذرواژه خیلی ضعیف است
-
+ خطای تخصیص حافظه هنگام تنظیم %1
-
+ خطای تخصیص حافظه
-
+ گذرواژه همان قبلی است
-
+ گذرواژه متقارن است
-
+ گذرواژه فقط در کوچکی و بزرگی متفاوت است
-
+ گذرواژه خیلی شبیه قبلی است
-
+ گذرواژه، شکلی از نام کاربری را داراست
-
+ گذرواژه شامل واژگانی از نام واقعی کاربر است
-
+ گذرواژه شکلی از واژگان ممنوعه را دارد
-
+ گذرواژه کمتر از %1 رقم دارد
-
+ گذرواژه، رقمهای خیلی کمی دارد
@@ -2012,17 +2012,17 @@ The installer will quit and all changes will be lost.
-
+ گذرواژه کوتاهتر از %1 نویسه است
-
+ گذرواژه خیلی کوتاه است
-
+ گذرواژه معکوس قبلی است
@@ -2067,7 +2067,7 @@ The installer will quit and all changes will be lost.
-
+ هیچگذرواژهای فراهم نشده
@@ -2092,67 +2092,67 @@ The installer will quit and all changes will be lost.
-
+ تنظیمات ناشناخته - %1
-
+ تنظیمات ناشناخته
-
+ مقدار صحیح بد در تنظیمات - %1
-
+ مقدار صحیح بد
-
+ تنظیمات %1 از گونهٔ صحیح نیست
-
+ تنظیمات از گونهٔ صحیح نیست
-
+ تنظیمات %1 از گونهٔ رشته نیست
-
+ تنظیمات از گونهٔ رشته نیست
-
+ گشودن پروندهٔ پیکربندی شکست خورد
-
+ پروندهٔ پیکربندی بدریخت است
-
+ خطای مهلک
-
+ خطای ناشناخته
-
+ گذرواژه خالی است
@@ -2165,22 +2165,22 @@ The installer will quit and all changes will be lost.
-
+ نام محصول
-
+ TextLabel
-
+ شرح محصول بلند
-
+ گزینش بستهها
@@ -2193,7 +2193,7 @@ The installer will quit and all changes will be lost.
-
+ بستهها
@@ -2206,7 +2206,7 @@ The installer will quit and all changes will be lost.
-
+ شرح
@@ -2219,12 +2219,12 @@ The installer will quit and all changes will be lost.
-
+ مدل صفحهکلید:
-
+ برای آزمودن صفحهکلیدتان، اینجا بنویسید
@@ -2237,60 +2237,60 @@ The installer will quit and all changes will be lost.
-
+ نامتان چیست؟
-
+ نام کاملتان
-
+ برای ورود می خواهید از چه نامی استفاده کنید؟
-
+ ورود
-
+ نام این رایانه چیست؟
-
+ <small>اگر رایانهتان را روی یک شبکه برای دیگران نمایان کنید، از این نام استفاده میشود.</small>
-
+ نام رایانه
-
+ برای امن نگه داشتن حسابتان، گذرواژهای برگزینید.
-
+ <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود. یک گذرواژهٔ خوب شامل ترکیبی از حروف، ارقام و علامتهاست که باید لااقل هست نویسه طول داشته باشد و در دورههای منظّم، عوض شود.</small>
-
+ گذرواژه
-
+ تکرار TextLabel
@@ -2300,28 +2300,28 @@ The installer will quit and all changes will be lost.
-
+ نباز به گذرواژهٔ قوی دارد.
-
+ ورود خودکار بدون پرسیدن گذرواژه.
-
+ استفاده از گذرواژهٔ یکسان برای حساب مدیر.
-
+ گذرواژهای برای حساب مدیر برگزینید.
-
+ <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود.</small>
@@ -2374,13 +2374,13 @@ The installer will quit and all changes will be lost.
- فضای خالی
+ فضای آزاد
- پارتیشن جدید
+ افراز جدید
@@ -2390,17 +2390,17 @@ The installer will quit and all changes will be lost.
- سیستم فایل
+ سامانهٔ پرونده
-
+ نقطهٔ اتّصال
-
+ اندازه
@@ -2413,67 +2413,67 @@ The installer will quit and all changes will be lost.
-
+ ذخیرهسازی و افزا&ره:
-
+ &بازگردانی همهٔ تغییرات
-
+ &جدول افراز جدید
-
+ ای&جاد
-
+ &ویرایش
-
+ &حذف
-
+ گروه حجمی جدید
-
+ تغییر اندازهٔ گروه حجمی
-
+ از کار انداختن گروه حجمی
-
+ برداشتن گروه حجمی
-
+ &نصب بارکنندهٔ راهاندازی روی:
-
+ مطمئنید میخواهید روی %1 جدول افراز جدیدی بسازید؟
-
+ نمیتوان افراز جدید ساخت
@@ -2486,12 +2486,12 @@ The installer will quit and all changes will be lost.
- جمعآوری اطلاعات سیستم...
+ جمعآوری اطّلاعات سامانه…
- پارتیشنها
+ افرازها
@@ -2536,7 +2536,7 @@ The installer will quit and all changes will be lost.
-
+ دیسک <strong>%1</strong> (%2)
@@ -2636,7 +2636,7 @@ The installer will quit and all changes will be lost.
-
+ ظاهر و احساس
@@ -2644,7 +2644,7 @@ The installer will quit and all changes will be lost.
-
+ ذخیرهٔ پروندهها برای بعد
@@ -2738,33 +2738,33 @@ Output:
-
+ ناشناخته
-
+ گسترده
-
+ قالببندی نشده
-
+ مبادله
-
+ مدل صفحهکلید پیشگزیده
-
+ پیش گزیده
@@ -2772,7 +2772,7 @@ Output:
-
+ پرونده پیدا نشد
@@ -2787,22 +2787,22 @@ Output:
-
+ بدون محصول
-
+ هیچ توضیحی وجود ندارد.
-
+ (بدون نقطهٔ اتّصال)
-
+ فضای افرازنشده یا جدول افراز ناشناخته
@@ -2810,7 +2810,7 @@ Output:
-
+ برداشتن کاربر زنده از سامانهٔ هدف
@@ -2912,12 +2912,12 @@ Output:
-
+ کار تغییر اندازهٔ سامانهپرونده
-
+ پیکربندی نامعتبر
@@ -2941,7 +2941,7 @@ Output:
-
+ تغییر اندازه شکست خورد
@@ -2981,7 +2981,7 @@ Output:
-
+ تغییر اندازهٔ افراز %1.
@@ -3004,7 +3004,7 @@ Output:
-
+ تغییر اندازهٔ گروه حجمی
@@ -3036,7 +3036,7 @@ Output:
-
+ نیازمندیهای سامانه
@@ -3044,27 +3044,27 @@ Output:
-
+ رایانه کمینهٔ نیازمندیهای برپاسازی %1 را ندارد.<br/>برپاسازی نمیتواند ادامه یابد. <a href="#details">جزییات…</a>
-
+ رایانه کمینهٔ نیازمندیهای نصب %1 را ندارد.<br/>نصب نمیتواند ادامه یابد. <a href="#details">جزییات…</a>
-
+ رایانه کمینهٔ نیازمندیهای برپاسازی %1 را ندارد.<br/>برپاسازی میتواند ادامه یابد، ولی ممکن است برخی ویژگیها از کار افتاده باشند.
-
+ رایانه کمینهٔ نیازمندیهای نصب %1 را ندارد.<br/>نصب میتواند ادامه یابد، ولی ممکن است برخی ویژگیها از کار افتاده باشند.
-
+ این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانهتان برپا میکند.
@@ -3072,12 +3072,12 @@ Output:
-
+ در حال پویش افزارهٔ ذخیرهساز…
-
+ افرازش
@@ -3085,23 +3085,23 @@ Output:
-
+ تنظیم نام میزبان %1
-
+ تنظیم نام میزبان <strong>%1</strong>.
-
+ تنظیم نام میزبان به %1.
-
+ خطای داخلی
@@ -3228,7 +3228,7 @@ Output:
-
+ تنظیم گذرواژه برای کاربر %1
@@ -3243,7 +3243,7 @@ Output:
-
+ نقطهٔ اتّصال ریشه %1 است
@@ -3258,7 +3258,7 @@ Output:
-
+ نمیتوان برای کاربر %1 گذرواژه تنظیم کرد.
@@ -3271,22 +3271,22 @@ Output:
-
+ تنظیم منطقهٔ زمانی به %1/%2
-
+ نمیتوان به مسیر منطقهٔ زمانی گزیده دسترسی یافت.
-
+ مسیر بد: %1
-
+ نمیتوان منطقهٔ زمانی را تنظیم کرد.
@@ -3339,7 +3339,7 @@ Output:
-
+ خلاصه
@@ -3442,7 +3442,7 @@ Output:
-
+ بازخورد
@@ -3460,7 +3460,7 @@ Output:
-
+ نام کاربریتان بیش از حد بلند است.
@@ -3475,12 +3475,12 @@ Output:
-
+ نام میزبانتان بیش از حد کوتاه است.
-
+ نام میزبانتان بیش از حد بلند است.
@@ -3490,7 +3490,7 @@ Output:
-
+ گذرواژههایتان مطابق نیستند!
@@ -3498,7 +3498,7 @@ Output:
-
+ کاربران
@@ -3506,12 +3506,12 @@ Output:
-
+ کلید
-
+ مقدار
@@ -3519,22 +3519,22 @@ Output:
-
+ ایجاد گروه حجمی
-
+ فهرست حجمهای فیزیکی
-
+ نام گروه حجمی:
-
+ گونهٔ گروه حجمی:
@@ -3544,27 +3544,27 @@ Output:
-
+ میب
-
+ اندازهٔ کل:
-
+ اندازهٔ استفادهشده:
-
+ کل شیارها:
-
+ کمیت حجمهای منطقی:
@@ -3583,82 +3583,82 @@ Output:
-
+ &درباره
-
+ گشودن پایگاه وب اعانهها
-
+ ا&عانه
-
+ گشودن پایگاه وب راهنمایی و پشتیبانی
-
+ &پشتیبانی
-
+ گشودن پایگاه وب ردیاب مشکل
-
+ &مشکلات شناختهشده
-
+ گشودن پاگاه وب یادداشتهای انتشار
-
+ &یادداشتهای انتشار
-
+ <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1>
-
+ <h1>به برپاسازی %1 خوش آمدید.</h1>
-
+ <h1>به نصبکنندهٔ کالامارس برای %1 خوش آمدید.</h1>
-
+ <h1>به نصبکنندهٔ %1 خوش آمدید.</h1>
-
+ پشتیبانی %1
-
+ دربارهٔ برپاسازی %1
-
+ دربارهٔ نصبکنندهٔ %1
@@ -3671,7 +3671,7 @@ Output:
-
+ خوش آمدید
@@ -3679,7 +3679,7 @@ Output:
-
+ خوش آمدید
@@ -3703,7 +3703,7 @@ Output:
-
+ بازگشت
@@ -3711,44 +3711,44 @@ Output:
-
+ مدل صفحهکلید
-
+ برمبنای سختافزار شناختهشده، مدل صفحهکلید دلخواهتان را برگزیده یا از مدل پیشگزیده استفاده کنید.
-
+ تازهسازی
-
+ چینشها
-
+ چینش صفحهکلید
-
+ مدلها
-
+ دگرگونهها
-
+ صفحهکلیدتان را بیازمایید
@@ -3790,7 +3790,7 @@ Output:
-
+ بازگشت
@@ -3804,27 +3804,27 @@ Output:
-
+ درباره
-
+ پشتیبانی
-
+ اشکالات شناختهشده
-
+ یادداشتهای انتشار
-
+ اعانه
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.
- 辦公室
+ 辦公
@@ -3619,7 +3619,7 @@ Output:
- 開啟發行手記網站
+ 開啟發行記事網站
diff --git a/lang/python/es/LC_MESSAGES/python.mo b/lang/python/es/LC_MESSAGES/python.mo
index 4746eac78..d2ab2f337 100644
Binary files a/lang/python/es/LC_MESSAGES/python.mo and b/lang/python/es/LC_MESSAGES/python.mo differ
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 a25fc7a02..f3e832135 100644
Binary files a/lang/python/fa/LC_MESSAGES/python.mo and b/lang/python/fa/LC_MESSAGES/python.mo differ
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 b9bbbc6cb..2a6c52941 100644
Binary files a/lang/python/id/LC_MESSAGES/python.mo and b/lang/python/id/LC_MESSAGES/python.mo differ
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 23e76b0ea..3bf723b47 100644
Binary files a/lang/python/zh_TW/LC_MESSAGES/python.mo and b/lang/python/zh_TW/LC_MESSAGES/python.mo differ
diff --git a/lang/python/zh_TW/LC_MESSAGES/python.po b/lang/python/zh_TW/LC_MESSAGES/python.po
index 67576d410..5c76c2b20 100644
--- a/lang/python/zh_TW/LC_MESSAGES/python.po
+++ b/lang/python/zh_TW/LC_MESSAGES/python.po
@@ -5,6 +5,7 @@
#
# Translators:
# 黃柏諺 , 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"
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
diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp
index 5ef97a6a3..43a48881c 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"
@@ -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
}
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/calamares/testmain.cpp b/src/calamares/testmain.cpp
index f353fa6d5..a29c8ce91 100644
--- a/src/calamares/testmain.cpp
+++ b/src/calamares/testmain.cpp
@@ -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
#include
@@ -42,6 +46,7 @@
#include
#include
#include
+#include
#include
@@ -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 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() )
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/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/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.
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";
}
}
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;
}
diff --git a/src/libcalamaresui/utils/Qml.cpp b/src/libcalamaresui/utils/Qml.cpp
index 5f3264da9..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
@@ -30,11 +32,81 @@
#include
#include
+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 )
diff --git a/src/libcalamaresui/utils/Qml.h b/src/libcalamaresui/utils/Qml.h
index 33b44b9ea..a3fc6d114 100644
--- a/src/libcalamaresui/utils/Qml.h
+++ b/src/libcalamaresui/utils/Qml.h
@@ -24,10 +24,25 @@
#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 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
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 85551f797..0c75dc390 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::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() )
{
diff --git a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo
index 248498cd7..19f444cdd 100644
Binary files a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo and b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po
index d4b0f1355..373a4c3e9 100644
--- a/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po
+++ b/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po
@@ -3,13 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , 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 75365c3b7..faf378083 100644
Binary files a/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo and b/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.mo differ
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"
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 ) )
{
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 )
{
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')
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)