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 Reload Stylesheet - + Recargar Hoja de estilo @@ -120,7 +120,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Set up - + Instalar @@ -138,7 +138,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Programmed job failure was explicitly requested. - + Se solicitó de manera explícita la falla del trabajo programado. @@ -154,7 +154,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Example job (%1) - + Ejemplo de trabajo (%1) @@ -162,12 +162,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Run command '%1' in target system. - + Ejecutar el comando '% 1' en el sistema de destino. Run command '%1'. - + Ejecutar el comando '% 1'. @@ -213,17 +213,17 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Loading ... - + Cargando ... QML Step <i>%1</i>. - + Paso QML <i>%1</i>. Loading failed. - + La carga ha fallado. @@ -231,9 +231,9 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Waiting for %n module(s). - - - + + Esperando %n módulo (s). + Esperando %n módulo(s). @@ -247,7 +247,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar System-requirements checking is complete. - + La verificación de los requisitos del sistema está completa. @@ -255,7 +255,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Setup Failed - + Configuración Fallida @@ -265,7 +265,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Would you like to paste the install log to the web? - + ¿Desea pegar el registro de instalación en la web? @@ -292,12 +292,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Install Log Paste URL - + Pegar URL Registro de Instalación The upload was unsuccessful. No web-paste was done. - + La carga no tuvo éxito. No se realizó pegado web. @@ -322,12 +322,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Continue with installation? - + Continuar con la instalación? The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong> - + El programa de instalación %1 está a punto de hacer cambios en el disco con el fin de configurar %2.<br/><strong>No podrá deshacer estos cambios.</strong> @@ -337,7 +337,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar &Set up now - + &Configurar ahora @@ -352,7 +352,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar &Set up - + &Instalar @@ -362,7 +362,7 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Setup is complete. Close the setup program. - + La instalación se ha completado. Cierre el instalador. diff --git a/lang/calamares_fa.ts b/lang/calamares_fa.ts index a4de510ad..00b82036f 100644 --- a/lang/calamares_fa.ts +++ b/lang/calamares_fa.ts @@ -6,17 +6,17 @@ The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. - <strong>محیط بوت</strong> این سیستم. <br><br>سیستم‌های قدیمی x86 فقط از <strong>بایوس</strong> پشتیبانی می‌کنند. <br>سیستم‌های مدرن معمولا از <strong>ای.اف.آی</strong> استفاده می‌کنند، اما ممکن است در صورتی که در حالت سازگاری اجرا شوند همچنان به صورت بایوس نشان داده شوند + <strong>محیط راه‌اندازی</strong> این سامانه. <br><br>سامانه‌های x86 قدیم‌تر فقط از <strong>بایوس</strong> پشتیبانی می‌کنند. <br>سامانه‌های نوین معمولا از <strong>ای‌اف‌آی</strong> استفاده می‌کنند، ولی اگر در حالت سازگاری روشن شوند، ممکن است به عنوان بایوس هم نمایش یابند. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. - سیستم با محیط بوت <strong>ای.اف.آی</strong> آغاز شد. <br><br>به منظور پیکربندی راه‌اندازی از یک محیط ای.اف.آی، این نصاب باید حتما‌ یک برنامه بالاآورنده بوت، مانند <strong>گراب</strong> یا <strong>سیستم‌بوت</strong> را روی یک پارتیشن سیستم ای.اف.آی مستقر نماید. این به صورت خودکار است مگر اینکه شما پارتیشن‌بندی دستی را انتخاب کنید که در این صورت باید خودتان انتخاب کنید یا به صورت دستی ایجاد کنید. + سامانه با محیط راه‌اندازی <strong>ای‌اف‌آی</strong> روشن شد. <br><br>برای پیکربندی برپایی از محیط ای‌اف‌آی، باید این نصب‌کننده، برنامه بارکنندهٔ راه‌اندازی‌ای چون <strong>گراب</strong> یا <strong>راه‌انداز سیستم‌دی</strong> را روی یک <strong>افراز سامانه‌ای ای‌اف‌آی</strong> مستقر کند. این عمل به صورت خودکار انجام می‌شود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان ایجادش کرده یا برگزینید. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. - سیستم با محیط بوت <strong>بایوس</strong> آغاز شد. <br><br>به منظور پیکربندی راه‌انداری از یک محیط بایوس، این نصاب باید حتما‌ یک برنامه بالاآورنده بوت، مانند <strong>گراب</strong> را یا در شروع یک پارتیشن و یا روی <strong>رکورد راه‌انداز اصلی</strong> نزدیک شروع جدول پارتیشن (ترجیحا) نصب کند. این به صورت خودکار است مگر اینکه شما پارتیشن‌بندی دستی را انتخاب کنید که در این صورت باید خودتان به صورت دستی آن را راه‌اندازی کنید. + سامانه با محیط راه‌اندازی <strong>بایوس</strong> روشن شد. <br><br>برای پیکربندی برپایی از یک محیط بایوس، باید این نصب‌کنده برنامهٔ بارکنندهٔ راه‌اندازی چون <strong>گراب</strong> را در ابتدای یک افراز یا (ترجیحاً) روی <strong>رکورد راه‌اندازی اصلی</strong> نزدیکابتدای جدول افراز نصب کند. این عمل به صورت خودکار انجام می‌شود، مگر آن که افرازش دستی را برگزینید که در آن صورت باید خودتان برپایش کنید. @@ -24,22 +24,22 @@ Master Boot Record of %1 - رکورد راه انداز اصلی یا همان ام.بی.آر ٪1 + رکورد راه اندازی اصلی %1 Boot Partition - پارتیشن بوت + افراز راه‌اندازی System Partition - پارتیشن سیستمی + افراز سامانه‌ای Do not install a boot loader - بوت لودر نصب نکن. + نصب نکردن یک بارکنندهٔ راه‌اندازی @@ -52,7 +52,7 @@ Blank Page - صفحه خالی + صفحهٔ خالی @@ -75,12 +75,12 @@ Modules - ماژول‌ها + پیمانه‌ها Type: - نوع: + گونه: @@ -111,7 +111,7 @@ Debug information - اطلاعات رفع اشکال + اطّلاعات اشکال‌زدایی @@ -184,27 +184,27 @@ Bad working directory path - مسیر شاخه جاری نامناسب + مسیر شاخهٔ جاری بد Working directory %1 for python job %2 is not readable. - شاخه جاری %1 برای کار پایتونی %2 خواندنی نیست + شاخهٔ کاری %1 برای کار پایتونی %2 خواندنی نیست Bad main script file - اسکریپت اصلی مشکل‌دار + پروندهٔ کدنوشتهٔ اصلی بد Main script file %1 for python job %2 is not readable. - فایل اسکریپت اصلی %1 برای کار پایتون %2 قابل خواندن نیست. + پروندهٔ کدنویسهٔ اصلی %1 برای کار پایتونی %2 قابل خواندن نیست. Boost.Python error in job "%1". - Boost.Python error in job "%1". + خطای Boost.Python در کار %1. @@ -238,9 +238,9 @@ (%n second(s)) - - - + + (%n ثانیه) + (%n ثانیه) @@ -259,7 +259,7 @@ Installation Failed - نصب شکست خورد. + نصب شکست خورد @@ -316,7 +316,7 @@ Continue with setup? - راه اندازی ادامه یابد؟ + ادامهٔ برپایی؟ @@ -331,7 +331,7 @@ The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> - نصاب %1 در شرف ایجاد تغییرات در دیسک شما به منظور نصب %2 است. <br/><strong>شما قادر نخواهید بود تا این تغییرات را برگردانید.</strong> + نصب‌کنندهٔ %1 می‌خواهد برای نصب %2 تغییراتی در دیسکتان بدهد. <br/><strong>نخواهید توانست این تغییرات را برگردانید.</strong> @@ -341,12 +341,12 @@ &Install now - &همین حالا نصب کنید + &اکنون نصب شود Go &back - برگردید به &عقب + &بازگشت @@ -386,7 +386,7 @@ &Back - &قبلی + &پیشین @@ -419,8 +419,8 @@ The setup program will quit and all changes will be lost. Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - آیا واقعاً می خواهید روند نصب فعلی را لغو کنید؟ -نصاب ترک می شود و همه تغییرات از بین می روند. + واقعاً می خواهید فرایند نصب فعلی را لغو کنید؟ +نصب‌کننده بسته شده و تمامی تغییرات از بین خواهند رفت. @@ -428,22 +428,22 @@ The installer will quit and all changes will be lost. Unknown exception type - نوع ناشناخته استثنا + گونهٔ استثنای ناشناخته unparseable Python error - unparseable Python error + خطای پایتونی غیرقابل تجزیه unparseable Python traceback - unparseable Python traceback + ردیابی پایتونی غیرقابل تجزیه Unfetchable Python error. - Unfetchable Python error. + خطای پایتونی غیرقابل دریافت. @@ -461,7 +461,7 @@ The installer will quit and all changes will be lost. Show debug information - نمایش اطلاعات دیباگ + نمایش اطّلاعات اشکال‌زدایی @@ -486,7 +486,7 @@ The installer will quit and all changes will be lost. %1 Installer - %1 نصاب + نصب‌کنندهٔ %1 @@ -594,7 +594,7 @@ The installer will quit and all changes will be lost. <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + <strong>جایگزینی یک افراز</strong><br/>افرازی را با %1 جایگزین می‌کند. @@ -619,22 +619,22 @@ The installer will quit and all changes will be lost. Reuse Swap - + باز استفاده از مبادله Swap (no Hibernate) - + مبادله (بدون خواب‌زمستانی) Swap (with Hibernate) - + مبادله (با خواب‌زمستانی) Swap to file - + مبادله به پرونده @@ -642,17 +642,17 @@ The installer will quit and all changes will be lost. Clear mounts for partitioning operations on %1 - + پاک‌سازی اتّصال‌ها برای عملبات افراز روی %1 Clearing mounts for partitioning operations on %1. - + در حال پاک‌سازی اتّصال‌ها برای عملبات افراز روی %1 Cleared all mounts for %1 - + همهٔ اتّصال‌ها برای %1 پاک‌‌سازی شدند @@ -660,22 +660,22 @@ The installer will quit and all changes will be lost. Clear all temporary mounts. - + پاک‌سازی همهٔ اتّصال‌های موقّتی. Clearing all temporary mounts. - + در حال پاک‌سازی همهٔ اتّصال‌های موقّتی. Cannot get list of temporary mounts. - + نمی‌توان فهرست اتّصال‌های موقّتی را گرفت. Cleared all temporary mounts. - + همهٔ اتّصال‌های موقّتی پاک‌سازی شدند. @@ -684,17 +684,17 @@ The installer will quit and all changes will be lost. Could not run command. - + نمی‌توان دستور را اجرا کرد. The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + دستور در محیط میزبان اجرا می‌شود و نیاز دارد مسیر ریشه را بداند، ولی هیچ نقطهٔ اتّصال ریشه‌ای تعریف نشده. The command needs to know the user's name, but no username is defined. - + دستور نیاز دارد نام کاربر را بداند، ولی هیچ نام کاربری‌ای تعریف نشده. @@ -702,17 +702,17 @@ The installer will quit and all changes will be lost. Set keyboard model to %1.<br/> - + تنظیم مدل صفحه‌کلید به %1.<br/> Set keyboard layout to %1/%2. - + تنظیم چینش صفحه‌کلید به %1/%2. The system language will be set to %1. - + زبان سامانه به %1 تنظیم خواهد شد. @@ -722,72 +722,72 @@ The installer will quit and all changes will be lost. Set timezone to %1/%2.<br/> - + تنظیم منطقهٔ زمانی به %1/%2.<br/> Network Installation. (Disabled: Incorrect configuration) - + نصب شبکه‌ای. (از کار افتاده: پیکربندی نادرست) Network Installation. (Disabled: Received invalid groups data) - + نصب شبکه‌ای. (از کار افتاده: دریافت داده‌های گروه‌های نامعتبر) Network Installation. (Disabled: internal error) - + نصب شبکه‌ای. (از کار افتاده: خطای داخلی) Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - + نصب شبکه‌ای. (از کار افتاده: ناتوان در گرفتن فهرست بسته‌ها. اتّصال شبکه‌تان را بررسی کنید) This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This program will ask you some questions and set up %2 on your computer. - + این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانه‌تان برپا می‌کند. <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to %1 setup.</h1> - + <h1>به برپاسازی %1 خوش آمدید.</h1> <h1>Welcome to the Calamares installer for %1.</h1> - + <h1>به نصب‌کنندهٔ کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to the %1 installer.</h1> - + <h1>به نصب‌کنندهٔ %1 خوش آمدید.</h1> @@ -803,77 +803,77 @@ The installer will quit and all changes will be lost. Create a Partition - + ایجاد یک افراز Si&ze: - + اندا&زه: MiB - + می‌ب Partition &Type: - + &گونهٔ افراز &Primary - + &اصلی E&xtended - + &گسترش‌یافته Fi&le System: - + سامانه &پرونده: LVM LV name - + نام حجم منطقی &Mount Point: - + &نقطهٔ اتّصال: Flags: - + پرچم‌ها: En&crypt - + رمز&نگاری Logical - + منطقی Primary - + اصلی GPT - + GPT Mountpoint already in use. Please select another one. - + نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. @@ -881,17 +881,17 @@ The installer will quit and all changes will be lost. Create new %2MiB partition on %4 (%3) with file system %1. - + ایچاد افراز %2می‌ب جدید روی %4 (%3) با سامانهٔ پروندهٔ %1. Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + ایچاد افراز <strong>%2می‌ب</strong> جدید روی <strong>%</strong>4 (%3) با سامانهٔ پروندهٔ <strong>%</strong>1. Creating new %1 partition on %2. - + در حال ایجاد افراز %1 جدید روی %2. @@ -904,27 +904,27 @@ The installer will quit and all changes will be lost. Create Partition Table - + ایجاد جدول افراز Creating a new partition table will delete all existing data on the disk. - + ایجاد یک جدول افراز جدید، همهٔ داده‌های موجود روی دیسک را حذف خواهد کرد. What kind of partition table do you want to create? - + می‌خواهید چه جور جدول افرازی بسازید؟ Master Boot Record (MBR) - + رکورد راه‌اندازی اصلی (MBR) GUID Partition Table (GPT) - + جدول افراز گاید (GPT) @@ -932,17 +932,17 @@ The installer will quit and all changes will be lost. Create new %1 partition table on %2. - + ایجاد جدول افراز %1 جدید روی %2. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + ایجاد جدول افراز <strong>%1</strong> جدید روی <strong>%2</strong> (%3). Creating new %1 partition table on %2. - + در حال ایجاد جدول افراز %1 جدید روی %2. @@ -955,37 +955,37 @@ The installer will quit and all changes will be lost. Create user %1 - + ایجاد کاربر %1 Create user <strong>%1</strong>. - + ایجاد کاربر <strong>%</strong>1. Creating user %1. - + در حال ایجاد کاربر %1. Sudoers dir is not writable. - + شاخهٔ sudoers قابل نوشتن نیست. Cannot create sudoers file for writing. - + نمی‌توان پروندهٔ sudoers را برای نوشتن ایجاد کرد. Cannot chmod sudoers file. - + نمی‌توان مالک پروندهٔ sudoers را تغییر داد. Cannot open groups file for reading. - + نمی‌توان پروندهٔ groups را برای خواندن گشود. @@ -993,7 +993,7 @@ The installer will quit and all changes will be lost. Create Volume Group - + ایجاد گروه حجمی @@ -1001,17 +1001,17 @@ The installer will quit and all changes will be lost. Create new volume group named %1. - + ایجاد گروه حجمی جدید به نام %1. Create new volume group named <strong>%1</strong>. - + ایجاد گروه حجمی جدید به نام <strong>%1</strong>. Creating new volume group named %1. - + در حال ایجاد گروه حجمی جدید به نام %1. @@ -1025,12 +1025,12 @@ The installer will quit and all changes will be lost. Deactivate volume group named %1. - + از کار انداختن گروه حجمی با نام %1. Deactivate volume group named <strong>%1</strong>. - + از کار انداختن گروه حجمی با نام <strong>%1</strong>. @@ -1043,17 +1043,17 @@ The installer will quit and all changes will be lost. Delete partition %1. - + حذف افراز %1. Delete partition <strong>%1</strong>. - + حذف افراز <strong>%1</strong>. Deleting partition %1. - + در حال حذف افراز %1. @@ -1066,7 +1066,7 @@ The installer will quit and all changes will be lost. This device has a <strong>%1</strong> partition table. - + این افزاره یک جدول افراز <strong>%1</strong> دارد. @@ -1124,7 +1124,7 @@ The installer will quit and all changes will be lost. Failed to open %1 - + شکست در گشودن %1 @@ -1132,7 +1132,7 @@ The installer will quit and all changes will be lost. Dummy C++ Job - + کار سی‌پلاس‌پلاس الکی @@ -1140,57 +1140,57 @@ The installer will quit and all changes will be lost. Edit Existing Partition - + ویرایش افراز موجود Content: - + محتوا: &Keep - + &نگه‌داری Format - + قالب‌بندی Warning: Formatting the partition will erase all existing data. - + هشدار: قالب‌بندی افراز، همهٔ داده‌های موجود را پاک می‌کند. &Mount Point: - + &نقطهٔ اتّصال: Si&ze: - + اندا&زه: MiB - + می‌ب Fi&le System: - + سامانه &پرونده: Flags: - + پرچم‌ها: Mountpoint already in use. Please select another one. - + نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. @@ -1203,22 +1203,22 @@ The installer will quit and all changes will be lost. En&crypt system - + رمز&نگاری سامانه Passphrase - + عبارت عبور Confirm passphrase - + تأیید عبارت عبور Please enter the same passphrase in both boxes. - + لطفاً عبارت عبور یکسانی را در هر دو جعبه وارد کنید. @@ -1226,7 +1226,7 @@ The installer will quit and all changes will be lost. Set partition information - + تنظیم اطّلاعات افراز @@ -1256,7 +1256,7 @@ The installer will quit and all changes will be lost. Setting up mount points. - + برپایی نقطه‌های اتّصال @@ -1269,7 +1269,7 @@ The installer will quit and all changes will be lost. &Restart now - + &راه‌اندازی دوباره @@ -1284,7 +1284,7 @@ The installer will quit and all changes will be lost. <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. - + <h1>همه‌چیز انجام شد.</h1><br/>%1 روی رایانه‌تان نصب شد.<br/>ممکن است بخواهید به سامانهٔ جدیدتان وارد شده تا به استفاده از محیط زندهٔ %2 ادامه دهید. @@ -1307,27 +1307,27 @@ The installer will quit and all changes will be lost. Finish - + پایان Setup Complete - + برپایی کامل شد Installation Complete - + نصب کامل شد The setup of %1 is complete. - + برپایی %1 کامل شد. The installation of %1 is complete. - + نصب %1 کامل شد. @@ -1378,52 +1378,52 @@ The installer will quit and all changes will be lost. is plugged in to a power source - + به برق وصل است. The system is not plugged in to a power source. - + سامانه به برق وصل نیست. is connected to the Internet - + به اینترنت وصل است The system is not connected to the Internet. - + سامانه به اینترنت وصل نیست. is running the installer as an administrator (root) - + دارد نصب‌کننده را به عنوان یک مدیر (ریشه) اجرا می‌کند The setup program is not running with administrator rights. - + برنامهٔ برپایی با دسترسی‌های مدیر اجرا نشده‌است. The installer is not running with administrator rights. - + برنامهٔ نصب کننده با دسترسی‌های مدیر اجرا نشده‌است. has a screen large enough to show the whole installer - + صفحه‌ای با بزرگی کافی برای نمایش تمام نصب‌کننده دارد The screen is too small to display the setup program. - + صفحه برای نمایش برنامهٔ برپایی خیلی کوچک است. The screen is too small to display the installer. - + صفحه برای نمایش نصب‌کننده خیلی کوچک است. @@ -1431,7 +1431,7 @@ The installer will quit and all changes will be lost. Collecting information about your machine. - + در حال جمع‌آوری اطّلاعات دربارهٔ دستگاهتان. @@ -1447,17 +1447,17 @@ The installer will quit and all changes will be lost. Could not create directories <code>%1</code>. - + نمی‌توان شاخه‌های <code>%1</code> را ایجاد کرد. Could not open file <code>%1</code>. - + نمی‌توان پروندهٔ <code>%1</code> را گشود. Could not write to file <code>%1</code>. - + نمی‌توان در پروندهٔ <code>%1</code> نوشت. @@ -1465,7 +1465,7 @@ The installer will quit and all changes will be lost. Creating initramfs with mkinitcpio. - + در جال ایجاد initramfs با mkinitcpio. @@ -1473,7 +1473,7 @@ The installer will quit and all changes will be lost. Creating initramfs. - + در حال ایجاد initramfs. @@ -1481,17 +1481,17 @@ The installer will quit and all changes will be lost. Konsole not installed - + برنامهٔ Konsole نصب نیست Please install KDE Konsole and try again! - + لطفاً Konsole کی‌دی‌ای را نصب کرده و دوباره تلاش کنید! Executing script: &nbsp;<code>%1</code> - + در حال اجرای کدنوشته: &nbsp;<code>%1</code> @@ -1499,7 +1499,7 @@ The installer will quit and all changes will be lost. Script - + کدنوشته @@ -1507,12 +1507,12 @@ The installer will quit and all changes will be lost. Set keyboard model to %1.<br/> - + تنظیم مدل صفحه‌کلید به %1.<br/> Set keyboard layout to %1/%2. - + تنظیم چینش صفحه‌کلید به %1/%2. @@ -1520,7 +1520,7 @@ The installer will quit and all changes will be lost. Keyboard - + صفحه‌کلید @@ -1528,7 +1528,7 @@ The installer will quit and all changes will be lost. Keyboard - + صفحه‌کلید @@ -1536,12 +1536,12 @@ The installer will quit and all changes will be lost. System locale setting - + تنظیمات محلی سیستم The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. - + تنظیمات محلی سیستم بر روی زبان و مجموعه کاراکتر برخی از عناصر رابط کاربری خط فرمان تأثیر می‌گذارد. <br/>تنظیمات فعلی <strong>%1</strong> است. @@ -1551,7 +1551,7 @@ The installer will quit and all changes will be lost. &OK - + &قبول @@ -1564,17 +1564,17 @@ The installer will quit and all changes will be lost. <h1>License Agreement</h1> - + <h1>توافق پروانه</h1> I accept the terms and conditions above. - + شرایط و ضوابط فوق را می‌پذیرم. Please review the End User License Agreements (EULAs). - + لطفاً توافق پروانهٔ کاربر نهایی (EULAs) را بازبینی کنید. @@ -1602,7 +1602,7 @@ The installer will quit and all changes will be lost. License - + پروانه @@ -1610,13 +1610,13 @@ The installer will quit and all changes will be lost. URL: %1 - + نشانی اینترنتی: %1 <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver - + <strong>راه‌انداز %1</strong><br/>از %2 @@ -1647,22 +1647,22 @@ The installer will quit and all changes will be lost. File: %1 - + پرونده: %1 Hide license text - + نهفتن متن پروانه Show the license text - + نمایش متن پروانه Open license agreement in browser. - + گشودن توافق پروانه در مرورگر. @@ -1670,23 +1670,23 @@ The installer will quit and all changes will be lost. Region: - + ناحیه: Zone: - + منطقه: &Change... - + &تغییر… The system language will be set to %1. - + زبان سامانه به %1 تنظیم خواهد شد. @@ -1696,7 +1696,7 @@ The installer will quit and all changes will be lost. Set timezone to %1/%2.<br/> - + تنظیم منطقهٔ زمانی به %1/%2.<br/> @@ -1704,7 +1704,7 @@ The installer will quit and all changes will be lost. Location - + موقعیت @@ -1712,7 +1712,7 @@ The installer will quit and all changes will be lost. Location - + موقعیت @@ -1720,20 +1720,20 @@ The installer will quit and all changes will be lost. Configuring LUKS key file. - + پیکربندی پروندهٔ کلید LUKS. No partitions are defined. - + هیچ افرازی تعریف نشده Encrypted rootfs setup error - + خطای برپاسازی rootfs رمزشده @@ -1756,12 +1756,12 @@ The installer will quit and all changes will be lost. Generate machine-id. - + تولید شناسهٔ دستگاه Configuration Error - + خطای پیکربندی @@ -1775,97 +1775,97 @@ The installer will quit and all changes will be lost. Package selection - + گزینش بسته‌ها Office software - + نرم‌افزار اداری Office package - + بستهٔ اداری Browser software - + نرم‌افزار مرورگر Browser package - + بستهٔ مرورگر Web browser - + مرورگر وب Kernel - + کرنل Services - + خدمت‌ها Login - + ورود Desktop - + میزکار Applications - + برنامه‌های کاربردی Communication - + ارتباطات Development - + توسعه Office - + اداری Multimedia - + چندرسانه‌ای Internet - + اینترنت Theming - + شخصی‌سازی Gaming - + بازی Utilities - + ابزارها @@ -1873,7 +1873,7 @@ The installer will quit and all changes will be lost. Notes - + یادداشت‌ها @@ -1899,7 +1899,7 @@ The installer will quit and all changes will be lost. OEM Configuration - + پیکربندی سازنده @@ -1912,72 +1912,72 @@ The installer will quit and all changes will be lost. Password is too short - + گذرواژه خیلی کوتاه است Password is too long - + گذرواژه خیلی بلند است Password is too weak - + گذرواژه خیلی ضعیف است Memory allocation error when setting '%1' - + خطای تخصیص حافظه هنگام تنظیم %1 Memory allocation error - + خطای تخصیص حافظه The password is the same as the old one - + گذرواژه همان قبلی است The password is a palindrome - + گذرواژه متقارن است The password differs with case changes only - + گذرواژه فقط در کوچکی و بزرگی متفاوت است The password is too similar to the old one - + گذرواژه خیلی شبیه قبلی است The password contains the user name in some form - + گذرواژه، شکلی از نام کاربری را داراست The password contains words from the real name of the user in some form - + گذرواژه شامل واژگانی از نام واقعی کاربر است The password contains forbidden words in some form - + گذرواژه شکلی از واژگان ممنوعه را دارد The password contains less than %1 digits - + گذرواژه کم‌تر از %1 رقم دارد The password contains too few digits - + گذرواژه، رقم‌های خیلی کمی دارد @@ -2012,17 +2012,17 @@ The installer will quit and all changes will be lost. The password is shorter than %1 characters - + گذرواژه کوتاه‌تر از %1 نویسه است The password is too short - + گذرواژه خیلی کوتاه است The password is just rotated old one - + گذرواژه معکوس قبلی است @@ -2067,7 +2067,7 @@ The installer will quit and all changes will be lost. No password supplied - + هیچ‌گذرواژه‌ای فراهم نشده @@ -2092,67 +2092,67 @@ The installer will quit and all changes will be lost. Unknown setting - %1 - + تنظیمات ناشناخته - %1 Unknown setting - + تنظیمات ناشناخته Bad integer value of setting - %1 - + مقدار صحیح بد در تنظیمات - %1 Bad integer value - + مقدار صحیح بد Setting %1 is not of integer type - + تنظیمات %1 از گونهٔ صحیح نیست Setting is not of integer type - + تنظیمات از گونهٔ صحیح نیست Setting %1 is not of string type - + تنظیمات %1 از گونهٔ رشته نیست Setting is not of string type - + تنظیمات از گونهٔ رشته نیست Opening the configuration file failed - + گشودن پروندهٔ پیکربندی شکست خورد The configuration file is malformed - + پروندهٔ پیکربندی بدریخت است Fatal failure - + خطای مهلک Unknown error - + خطای ناشناخته Password is empty - + گذرواژه خالی است @@ -2165,22 +2165,22 @@ The installer will quit and all changes will be lost. Product Name - + نام محصول TextLabel - + TextLabel Long Product Description - + شرح محصول بلند Package Selection - + گزینش بسته‌ها @@ -2193,7 +2193,7 @@ The installer will quit and all changes will be lost. Packages - + بسته‌ها @@ -2206,7 +2206,7 @@ The installer will quit and all changes will be lost. Description - + شرح @@ -2219,12 +2219,12 @@ The installer will quit and all changes will be lost. Keyboard Model: - + مدل صفحه‌کلید: Type here to test your keyboard - + برای آزمودن صفحه‌کلیدتان، این‌جا بنویسید @@ -2237,60 +2237,60 @@ The installer will quit and all changes will be lost. What is your name? - + نامتان چیست؟ Your Full Name - + نام کاملتان What name do you want to use to log in? - + برای ورود می خواهید از چه نامی استفاده کنید؟ login - + ورود What is the name of this computer? - + نام این رایانه چیست؟ <small>This name will be used if you make the computer visible to others on a network.</small> - + <small>اگر رایانه‌تان را روی یک شبکه برای دیگران نمایان کنید، از این نام استفاده می‌شود.</small> Computer Name - + نام رایانه Choose a password to keep your account safe. - + برای امن نگه داشتن حسابتان، گذرواژه‌ای برگزینید. <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> - + <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود. یک گذرواژهٔ خوب شامل ترکیبی از حروف، ارقام و علامت‌هاست که باید لااقل هست نویسه طول داشته باشد و در دوره‌های منظّم، عوض شود.</small> Password - + گذرواژه Repeat Password - + تکرار TextLabel @@ -2300,28 +2300,28 @@ The installer will quit and all changes will be lost. Require strong passwords. - + نباز به گذرواژهٔ قوی دارد. Log in automatically without asking for the password. - + ورود خودکار بدون پرسیدن گذرواژه. Use the same password for the administrator account. - + استفاده از گذرواژهٔ یکسان برای حساب مدیر. Choose a password for the administrator account. - + گذرواژه‌ای برای حساب مدیر برگزینید. <small>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>همان گذرواژه را دوباره وارد کنید تا بتواند برای خطاهای نوشتاری بررسی شود.</small> @@ -2374,13 +2374,13 @@ The installer will quit and all changes will be lost. Free Space - فضای خالی + فضای آزاد New partition - پارتیشن جدید + افراز جدید @@ -2390,17 +2390,17 @@ The installer will quit and all changes will be lost. File System - سیستم فایل + سامانهٔ پرونده Mount Point - + نقطهٔ اتّصال Size - + اندازه @@ -2413,67 +2413,67 @@ The installer will quit and all changes will be lost. Storage de&vice: - + ذخیره‌سازی و افزا&ره: &Revert All Changes - + &بازگردانی همهٔ تغییرات New Partition &Table - + &جدول افراز جدید Cre&ate - + ای&جاد &Edit - + &ویرایش &Delete - + &حذف New Volume Group - + گروه حجمی جدید Resize Volume Group - + تغییر اندازهٔ گروه حجمی Deactivate Volume Group - + از کار انداختن گروه حجمی Remove Volume Group - + برداشتن گروه حجمی I&nstall boot loader on: - + &نصب بارکنندهٔ راه‌اندازی روی: Are you sure you want to create a new partition table on %1? - + مطمئنید می‌خواهید روی %1 جدول افراز جدیدی بسازید؟ Can not create new partition - + نمی‌توان افراز جدید ساخت @@ -2486,12 +2486,12 @@ The installer will quit and all changes will be lost. Gathering system information... - جمع‌آوری اطلاعات سیستم... + جمع‌آوری اطّلاعات سامانه… Partitions - پارتیشن‌ها + افرازها @@ -2536,7 +2536,7 @@ The installer will quit and all changes will be lost. Disk <strong>%1</strong> (%2) - + دیسک <strong>%1</strong> (%2) @@ -2636,7 +2636,7 @@ The installer will quit and all changes will be lost. Look-and-Feel - + ظاهر و احساس @@ -2644,7 +2644,7 @@ The installer will quit and all changes will be lost. Saving files for later ... - + ذخیرهٔ پرونده‌ها برای بعد @@ -2738,33 +2738,33 @@ Output: unknown - + ناشناخته extended - + گسترده unformatted - + قالب‌بندی نشده swap - + مبادله Default Keyboard Model - + مدل صفحه‌کلید پیش‌گزیده Default - + پیش گزیده @@ -2772,7 +2772,7 @@ Output: File not found - + پرونده پیدا نشد @@ -2787,22 +2787,22 @@ Output: No product - + بدون محصول No description provided. - + هیچ توضیحی وجود ندارد. (no mount point) - + (بدون نقطهٔ اتّصال) Unpartitioned space or unknown partition table - + فضای افرازنشده یا جدول افراز ناشناخته @@ -2810,7 +2810,7 @@ Output: Remove live user from target system - + برداشتن کاربر زنده از سامانهٔ هدف @@ -2912,12 +2912,12 @@ Output: Resize Filesystem Job - + کار تغییر اندازهٔ سامانه‌پرونده Invalid configuration - + پیکربندی نامعتبر @@ -2941,7 +2941,7 @@ Output: Resize Failed - + تغییر اندازه شکست خورد @@ -2981,7 +2981,7 @@ Output: Resize partition %1. - + تغییر اندازهٔ افراز %1. @@ -3004,7 +3004,7 @@ Output: Resize Volume Group - + تغییر اندازهٔ گروه حجمی @@ -3036,7 +3036,7 @@ Output: System requirements - + نیازمندی‌های سامانه @@ -3044,27 +3044,27 @@ Output: This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب نمی‌تواند ادامه یابد. <a href="#details">جزییات…</a> This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های برپاسازی %1 را ندارد.<br/>برپاسازی می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - + رایانه کمینهٔ نیازمندی‌های نصب %1 را ندارد.<br/>نصب می‌تواند ادامه یابد، ولی ممکن است برخی ویژگی‌ها از کار افتاده باشند. This program will ask you some questions and set up %2 on your computer. - + این برنامه تعدادی سوال از شما پرسیده و %2 را روی رایانه‌تان برپا می‌کند. @@ -3072,12 +3072,12 @@ Output: Scanning storage devices... - + در حال پویش افزارهٔ ذخیره‌ساز… Partitioning - + افرازش @@ -3085,23 +3085,23 @@ Output: Set hostname %1 - + تنظیم نام میزبان %1 Set hostname <strong>%1</strong>. - + تنظیم نام میزبان <strong>%1</strong>. Setting hostname %1. - + تنظیم نام میزبان به %1. Internal Error - + خطای داخلی @@ -3228,7 +3228,7 @@ Output: Set password for user %1 - + تنظیم گذرواژه برای کاربر %1 @@ -3243,7 +3243,7 @@ Output: rootMountPoint is %1 - + نقطهٔ اتّصال ریشه %1 است @@ -3258,7 +3258,7 @@ Output: Cannot set password for user %1. - + نمی‌توان برای کاربر %1 گذرواژه تنظیم کرد. @@ -3271,22 +3271,22 @@ Output: Set timezone to %1/%2 - + تنظیم منطقهٔ زمانی به %1/%2 Cannot access selected timezone path. - + نمی‌توان به مسیر منطقهٔ زمانی گزیده دسترسی یافت. Bad path: %1 - + مسیر بد: %1 Cannot set timezone. - + نمی‌توان منطقهٔ زمانی را تنظیم کرد. @@ -3339,7 +3339,7 @@ Output: Summary - + خلاصه @@ -3442,7 +3442,7 @@ Output: Feedback - + بازخورد @@ -3460,7 +3460,7 @@ Output: Your username is too long. - + نام کاربریتان بیش از حد بلند است. @@ -3475,12 +3475,12 @@ Output: Your hostname is too short. - + نام میزبانتان بیش از حد کوتاه است. Your hostname is too long. - + نام میزبانتان بیش از حد بلند است. @@ -3490,7 +3490,7 @@ Output: Your passwords do not match! - + گذرواژه‌هایتان مطابق نیستند! @@ -3498,7 +3498,7 @@ Output: Users - + کاربران @@ -3506,12 +3506,12 @@ Output: Key - + کلید Value - + مقدار @@ -3519,22 +3519,22 @@ Output: Create Volume Group - + ایجاد گروه حجمی List of Physical Volumes - + فهرست حجم‌های فیزیکی Volume Group Name: - + نام گروه حجمی: Volume Group Type: - + گونهٔ گروه حجمی: @@ -3544,27 +3544,27 @@ Output: MiB - + می‌ب Total Size: - + اندازهٔ کل: Used Size: - + اندازهٔ استفاده‌شده: Total Sectors: - + کل شیارها: Quantity of LVs: - + کمیت حجم‌های منطقی: @@ -3583,82 +3583,82 @@ Output: &About - + &درباره Open donations website - + گشودن پایگاه وب اعانه‌ها &Donate - + ا&عانه Open help and support website - + گشودن پایگاه وب راهنمایی و پشتیبانی &Support - + &پشتیبانی Open issues and bug-tracking website - + گشودن پایگاه وب ردیاب مشکل &Known issues - + &مشکلات شناخته‌شده Open release notes website - + گشودن پاگاه وب یادداشت‌های انتشار &Release notes - + &یادداشت‌های انتشار <h1>Welcome to the Calamares setup program for %1.</h1> - + <h1>به برنامهٔ برپاسازی کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to %1 setup.</h1> - + <h1>به برپاسازی %1 خوش آمدید.</h1> <h1>Welcome to the Calamares installer for %1.</h1> - + <h1>به نصب‌کنندهٔ کالامارس برای %1 خوش آمدید.</h1> <h1>Welcome to the %1 installer.</h1> - + <h1>به نصب‌کنندهٔ %1 خوش آمدید.</h1> %1 support - + پشتیبانی %1 About %1 setup - + دربارهٔ برپاسازی %1 About %1 installer - + دربارهٔ نصب‌کنندهٔ %1 @@ -3671,7 +3671,7 @@ Output: Welcome - + خوش آمدید @@ -3679,7 +3679,7 @@ Output: Welcome - + خوش آمدید @@ -3703,7 +3703,7 @@ Output: Back - + بازگشت @@ -3711,44 +3711,44 @@ Output: Keyboard Model - + مدل صفحه‌کلید Pick your preferred keyboard model or use the default one based on the detected hardware - + برمبنای سخت‌افزار شناخته‌شده، مدل صفحه‌کلید دلخواهتان را برگزیده یا از مدل پیش‌گزیده استفاده کنید. Refresh - + تازه‌سازی Layouts - + چینش‌ها Keyboard Layout - + چینش صفحه‌کلید Models - + مدل‌ها Variants - + دگرگونه‌ها Test your keyboard - + صفحه‌کلیدتان را بیازمایید @@ -3790,7 +3790,7 @@ Output: Back - + بازگشت @@ -3804,27 +3804,27 @@ Output: About - + درباره Support - + پشتیبانی Known issues - + اشکالات شناخته‌شده Release notes - + یادداشت‌های انتشار Donate - + اعانه diff --git a/lang/calamares_zh_TW.ts b/lang/calamares_zh_TW.ts index a665b7068..51f244389 100644 --- a/lang/calamares_zh_TW.ts +++ b/lang/calamares_zh_TW.ts @@ -1838,7 +1838,7 @@ The installer will quit and all changes will be lost. Office - 辦公室 + 辦公 @@ -3619,7 +3619,7 @@ Output: Open release notes website - 開啟發行手記網站 + 開啟發行記事網站 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)