Merge branch 'calamares' of https://github.com/calamares/calamares into development

This commit is contained in:
Manjaro Build Server 2024-06-24 15:11:14 +07:00
commit 72320bf754
83 changed files with 1322 additions and 816 deletions

View File

@ -7,14 +7,51 @@ contributors are listed. Note that Calamares does not have a historical
changelog -- this log starts with version 3.3.0. See CHANGES-3.2 for
the history of the 3.2 series (2018-05 - 2022-08).
# 3.3.7 (unreleased)
# 3.3.8 (unreleased)
This release contains contributions from (alphabetically by first name):
- Nobody, yet
- nobody yet!
## Core ##
- nothing yet!
## Modules ##
- nothing yet!
# 3.3.7 (2024-06-20)
This release contains contributions from (alphabetically by first name):
- Adriaan de Groot
- Eugene San
- Evan James
- Ivan Borzenkov
- Sohrab Behdani
- Vincent Penvern
- Vladislav Nepogodin
## Core ##
- Updated clang-formatting
- Some C++20 future-proofing (thanks Vladislav)
- CommandList (used by *contextualprocess* and *shellprocess*) now supports
globalstorage keys as substitutable variables.
## Modules ##
- *contextualprocess* see *shellprocess*.
- *fstab* module does not add an encryption keyfile if it does
not exist. (thanks Eugene)
- *initcpiocfg* has some new configuration settings to more carefully
adjust hooks for initcpio.
- *keyboard* module handles Persian (fa) layout better. (thanks Sohrab)
- *keyboard* module handles other non-ascii layout better. (thanks Ivan)
- *partition* module did not filter out invalid fstab entries;
they were not written, either, so no net change.
- *partition* module now has a configurable default check-state
for the encryption checkbox. (thanks Vincent)
- *shellprocess* commands now support globalstorage variables, which
are written as `${gs[key]}`, where `key` is a dotted string that
selects the globalstorage key to use (like in *contextualprocess*
variable-selectors) and `${gs[` and `]}` are literal characters.
# 3.3.6 (2024-04-16)
@ -22,7 +59,7 @@ This release contains contributions from (alphabetically by first name):
This release contains contributions from (alphabetically by first name):
- Adriaan de Groot
- Anke Boersma
- Eugene Sam
- Eugene San
- Evan James
- Harald Sitter
- Mike Stemle

View File

@ -47,7 +47,7 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
set(CALAMARES_VERSION 3.3.7)
set(CALAMARES_VERSION 3.3.8)
set(CALAMARES_RELEASE_MODE OFF) # Set to ON during a release
if(CMAKE_SCRIPT_MODE_FILE)

View File

@ -9,6 +9,9 @@
# You can pass in directory names, in which case the files
# in that directory (NOT below it) are processed.
#
# If the environment variable CLANG_FORMAT is set to a (full path) and
# that path is executable, it will be used if possible.
#
LANG=C
LC_ALL=C
LC_NUMERIC=C
@ -20,8 +23,17 @@ test -d "$BASEDIR" || { echo "! Could not determine base for $0" ; exit 1 ; }
test -d "$TOPDIR" || { echo "! Cound not determine top-level source dir" ; exit 1 ; }
test -f "$TOPDIR/.clang-format" || { echo "! No .clang-format support files in $TOPDIR" ; exit 1 ; }
# Allow specifying CF_VERSIONS outside already
CF_VERSIONS="$CF_VERSIONS clang-format15 clang-format-15 clang-format-16 clang-format-16.0.6 clang-format"
# Start with CLANG_FORMAT, if it is specified
CF_VERSIONS=""
if test -n "$CLANG_FORMAT" && test -x "$CLANG_FORMAT" ; then
CF_VERSIONS="$CLANG_FORMAT"
fi
# And a bunch of other potential known versions of clang-format, newest first
CF_VERSIONS="$CF_VERSIONS clang-format-17"
CF_VERSIONS="$CF_VERSIONS clang-format-16 clang-format-16.0.6 "
CF_VERSIONS="$CF_VERSIONS clang-format15 clang-format-15 "
# Generic name of clang-format
CF_VERSIONS="$CF_VERSIONS clang-format"
for _cf in $CF_VERSIONS
do
# Not an error if this particular clang-format isn't found

View File

@ -31,7 +31,7 @@
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Managing auto-mount settings</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>- ি ...</translation>
</message>
</context>
<context>
@ -158,13 +158,13 @@
<message>
<location filename="../src/calamares/DebugWindow.ui" line="144"/>
<source>Send Session Log</source>
<translation type="unfinished"/>
<translation> </translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.cpp" line="164"/>
<source>Debug Information</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation>ি </translation>
</message>
</context>
<context>

File diff suppressed because it is too large Load Diff

View File

@ -1166,7 +1166,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</tra
<location filename="../src/modules/contextualprocess/ContextualProcessJob.cpp" line="115"/>
<source>Performing contextual processes' job</source>
<comment>@status</comment>
<translation>Suoritetaan kontekstuaaliset prosessit</translation>
<translation>Suoritetaan prosessit</translation>
</message>
</context>
<context>
@ -3627,7 +3627,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<message>
<location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="46"/>
<source>The installer failed to remove a volume group named '%1'.</source>
<translation>Asennusoihjelma ei onnistunut poistamaan taltioryhmää '%1'.</translation>
<translation>Asennusoihjelma ei voinut poistaa taltioryhmää "%1".</translation>
</message>
</context>
<context>
@ -3665,7 +3665,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="163"/>
<source>The file-system resize job has an invalid configuration and will not run.</source>
<comment>@error</comment>
<translation>Tiedostojärjestelmän koon muutto ei kelpaa eikä sitä suoriteta.</translation>
<translation>Tiedostojärjestelmän koonmuutostyön määritys on virheellinen, eikä sitä suoriteta.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/>
@ -3677,25 +3677,25 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/>
<source>Calamares cannot start KPMCore for the file system resize job.</source>
<comment>@error</comment>
<translation>Calamares ei voi käynnistää KPMCorea tiedostojärjestelmän koon muuttamiseksi.</translation>
<translation>Calamares ei voi käynnistää KPMCorea tiedostojärjestelmän koonmuutostyölle.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="179"/>
<source>Resize failed.</source>
<comment>@error</comment>
<translation>Koon muuttaminen epäonnistui.</translation>
<translation>Kokoa ei voitu muuttaa.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="181"/>
<source>The filesystem %1 could not be found in this system, and cannot be resized.</source>
<comment>@info</comment>
<translation>Tiedostojärjestelmää %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa.</translation>
<translation>Tiedostojärjestelmää %1 ei löydy, eikä sen kokoa voi muuttaa.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="182"/>
<source>The device %1 could not be found in this system, and cannot be resized.</source>
<comment>@info</comment>
<translation>Laitetta %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa.</translation>
<translation>Laitetta %1 ei löydy, eikä sen kokoa voi muuttaa.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="189"/>
@ -3704,7 +3704,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="231"/>
<source>Resize Failed</source>
<comment>@error</comment>
<translation>Kokomuutos epäonnistui</translation>
<translation>Kokoa ei voitu muuttaa</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="191"/>
@ -3774,7 +3774,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="28"/>
<source>Resize volume group named %1 from %2 to %3</source>
<comment>@title</comment>
<translation>Muuta tilavuusryhmän %1 kokoa %2:sta %3:ksi</translation>
<translation>Muuta taltioryhmän %1 kokoa %2:sta %3:ksi</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="37"/>
@ -3791,7 +3791,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<message>
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="58"/>
<source>The installer failed to resize a volume group named '%1'.</source>
<translation>Asennusohjelma ei onnistunut muuttamaan taltioryhmän "%1" kokoa.</translation>
<translation>Asennusohjelma ei voinut muuttaa taltioryhmän "%1" kokoa.</translation>
</message>
</context>
<context>
@ -4116,7 +4116,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="38"/>
<source>Running shell processes</source>
<comment>@status</comment>
<translation>Suoritetaan shell prosesseja</translation>
<translation>Suoritetaan shell prosessit</translation>
</message>
</context>
<context>
@ -4410,12 +4410,12 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/modules/welcome/WelcomePage.ui" line="79"/>
<location filename="../src/modules/welcome/WelcomePage.ui" line="98"/>
<source>Select application and system language</source>
<translation>Valitse sovelluksen ja järjestelmän kieli</translation>
<translation>Valitse sovellusten ja järjestelmän kieli</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
<source>Open donations website</source>
<translation>Avaa lahjoitussivusto</translation>
<translation>Avaa lahjoitukset verkkosivu</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="143"/>
@ -4425,7 +4425,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="153"/>
<source>Open help and support website</source>
<translation>Avaa ohje- ja tukisivusto</translation>
<translation>Avaa ohje- ja tukisivu</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="156"/>
@ -4435,7 +4435,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="166"/>
<source>Open issues and bug-tracking website</source>
<translation>Avaa ongelmia käsittelevä verkkosivusto</translation>
<translation>Avoimet ongelmat ja virheenseuranta verkkosivu</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="169"/>
@ -4445,7 +4445,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
<source>Open release notes website</source>
<translation>Avaa julkaisutietojen verkkosivusto</translation>
<translation>Avaa julkaisutiedot verkkosivu</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="182"/>
@ -4526,7 +4526,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="336"/>
<source>Failed to create dataset</source>
<translation>Tietojoukon luominen epäonnistui</translation>
<translation>Epäonnistui dataset luominen</translation>
</message>
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="337"/>
@ -4556,7 +4556,7 @@ Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.&lt;/
<location filename="../src/calamares/CalamaresWindow.cpp" line="159"/>
<source>Show information about Calamares</source>
<comment>@tooltip</comment>
<translation>Näytä tietoa Calamaresista</translation>
<translation>Calamares tietoja</translation>
</message>
<message>
<location filename="../src/calamares/CalamaresWindow.cpp" line="173"/>

View File

@ -876,7 +876,7 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="372"/>
<source>Clearing mounts for partitioning operations on %1</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>מתבצעת מחיקה של נקודות עיגון לטובת פעולות חלוקה למחיצות על %1</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="391"/>
@ -1273,7 +1273,7 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="181"/>
<source>Create new %1MiB partition on %3 (%2) with entries %4</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation>יצירת מחיצת %1MiB על גבי %3 (%2) עם הרשומות %4</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="189"/>
@ -1708,7 +1708,7 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="235"/>
<source>Set up &lt;strong&gt;new&lt;/strong&gt; %2 partition with mount point &lt;strong&gt;%1&lt;/strong&gt;%3</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>הגדרת מחיצת %2 &lt;strong&gt;חדשה&lt;/strong&gt; עם נקודת העיגון &lt;strong&gt;%1&lt;/strong&gt; %3</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="250"/>
@ -1726,13 +1726,13 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="270"/>
<source>Set up %3 partition &lt;strong&gt;%1&lt;/strong&gt; with mount point &lt;strong&gt;%2&lt;/strong&gt; and features &lt;em&gt;%4&lt;/em&gt;</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>הקמת מחיצת %3 בשם &lt;strong&gt;%1&lt;/strong&gt; עם נקודת העגינה &lt;strong&gt;%2&lt;/strong&gt; והיכולות &lt;em&gt;%4&lt;/em&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="280"/>
<source>Set up %3 partition &lt;strong&gt;%1&lt;/strong&gt; with mount point &lt;strong&gt;%2&lt;/strong&gt;%4</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>הקמת מחיצת %3 בשם &lt;strong&gt;%1&lt;/strong&gt; עם נקודת העגינה &lt;strong&gt;%2&lt;/strong&gt;%4</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="296"/>
@ -1815,13 +1815,13 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="39"/>
<source>Format partition %1 (file system: %2, size: %3 MiB) on %4</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation>לאתחל את המחיצה %1 (מערכת קבצים: %2, גודל: %3 MiB) על גבי %4</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="49"/>
<source>Format &lt;strong&gt;%3MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; with file system &lt;strong&gt;%2&lt;/strong&gt;</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>אתחול מחיצה בגודל &lt;strong&gt;%3MiB&lt;/strong&gt; בנתיב &lt;strong&gt;%1&lt;/strong&gt; עם מערכת הקבצים &lt;strong&gt;%2&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="62"/>
@ -1833,7 +1833,7 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="64"/>
<source>Formatting partition %1 with file system %2</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>המחיצה %1 מפורמטת עם מערכת הקבצים %2</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="73"/>
@ -3259,13 +3259,13 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="178"/>
<source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system on disk &lt;strong&gt;%2&lt;/strong&gt; (%3)</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>להתקין את %1 &lt;strong&gt;לצד&lt;/strong&gt; מערכת הפעלה אחרת בכונן &lt;strong&gt;%2&lt;/strong&gt; (%3)</translation>
</message>
<message>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="187"/>
<source>&lt;strong&gt;Erase&lt;/strong&gt; disk &lt;strong&gt;%2&lt;/strong&gt; (%3) and install %1</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>&lt;strong&gt;למחוק&lt;/strong&gt; את הכונן &lt;strong&gt;%2&lt;/strong&gt; (%3) ולהתקין %1</translation>
</message>
<message>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="194"/>
@ -3753,13 +3753,13 @@ Output:
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="45"/>
<source>Resize &lt;strong&gt;%2MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; to &lt;strong&gt;%3MiB&lt;/strong&gt;</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>שינוי גודל של מחיצה בגודל &lt;strong&gt;%2MiB&lt;/strong&gt; בנתיב &lt;strong&gt;%1&lt;/strong&gt; לכדי &lt;strong&gt;%3MiB&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="54"/>
<source>Resizing %2MiB partition %1 to %3MiB</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>משתנה הגודל של מחיצה %1 בגודל %2MiB לכדי %3MiB</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="70"/>
@ -3782,7 +3782,7 @@ Output:
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="28"/>
<source>Resize volume group named %1 from %2 to %3</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation>שינוי גודל קבוצת כרכים בשם %1 מ־%2 ל־%3</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="37"/>
@ -3913,7 +3913,7 @@ Output:
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="50"/>
<source>Set flags on %1MiB %2 partition</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation>הגדרת דגלונים על מחיצה מסוג %2 בגודל %1MiB</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="54"/>
@ -3931,7 +3931,7 @@ Output:
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="71"/>
<source>Clear flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>להסיר דגלונים ממחיצת &lt;strong&gt;%2&lt;/strong&gt; בגודל %1MiB</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/>
@ -3949,49 +3949,49 @@ Output:
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="88"/>
<source>Set flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition to &lt;strong&gt;%3&lt;/strong&gt;</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>הגדרת דגלונים על מחיצת &lt;strong&gt;%2&lt;/strong&gt; בגודל %1MiB לכדי &lt;strong&gt;%3&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="94"/>
<source>Set flags on new partition to &lt;strong&gt;%1&lt;/strong&gt;</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>הגדרת הדגלונים &lt;strong&gt;%1&lt;/strong&gt; על המחיצה החדשה</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="105"/>
<source>Clearing flags on partition &lt;strong&gt;%1&lt;/strong&gt;</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>הדגלונים נמחקים מהמחיצה &lt;strong&gt;%1&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="112"/>
<source>Clearing flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>דגלונים מוסרים ממחיצת &lt;strong&gt;%2&lt;/strong&gt; בגודל %1MiB</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="117"/>
<source>Clearing flags on new partition</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>הדגלונים נמחקים מהמחיצה החדשה</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="122"/>
<source>Setting flags &lt;strong&gt;%2&lt;/strong&gt; on partition &lt;strong&gt;%1&lt;/strong&gt;</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>הדגלונים &lt;strong&gt;%2&lt;/strong&gt; מוגדרים על המחיצה &lt;strong&gt;%1&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="130"/>
<source>Setting flags &lt;strong&gt;%3&lt;/strong&gt; on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>הדגלונים &lt;strong&gt;%3&lt;/strong&gt; על מחיצת &lt;strong&gt;%2&lt;/strong&gt; בגודל %1MiB</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="136"/>
<source>Setting flags &lt;strong&gt;%1&lt;/strong&gt; on new partition</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation>הדגלונים &lt;strong&gt;%1&lt;/strong&gt; מוגדרים על המחיצה החדשה</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="149"/>

View File

@ -39,7 +39,7 @@
<message>
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="60"/>
<source>The &lt;strong&gt;boot environment&lt;/strong&gt; of this system.&lt;br&gt;&lt;br&gt;Older x86 systems only support &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Modern systems usually use &lt;strong&gt;EFI&lt;/strong&gt;, but may also show up as BIOS if started in compatibility mode.</source>
<translation>Le &lt;strong&gt;ambiente de initio&lt;/strong&gt; de iste systema.&lt;br&gt;&lt;br&gt;Systemas x86 plus vetere supporta solmente &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Systemas moderne usualmente usa &lt;strong&gt;EFI&lt;/strong&gt;, ma pote etiam apparer como BIOS si il initia in modo de compatibilitate.</translation>
<translation>Le &lt;strong&gt;ambiente de initio&lt;/strong&gt; de iste systema.&lt;br&gt;&lt;br&gt;Systemas x86 plus vetere supporta solmente &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Systemas moderne usualmente usa &lt;strong&gt;EFI&lt;/strong&gt;, ma pote anque apparer como BIOS si il initia in modo de compatibilitate.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="70"/>
@ -49,7 +49,7 @@
<message>
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="82"/>
<source>This system was started with a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from a BIOS environment, this installer must install a boot loader, like &lt;strong&gt;GRUB&lt;/strong&gt;, either at the beginning of a partition or on the &lt;strong&gt;Master Boot Record&lt;/strong&gt; 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.</source>
<translation>Iste systema esseva initiate con un ambiente de initio &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;Pro configurar le initio ab un ambiente BIOS, iste installator debe installar un cargator de initio, como &lt;strong&gt;GRUB&lt;/strong&gt;, o al comenciamento de un partition o sur le &lt;strong&gt;registro de initio principal&lt;/strong&gt; presso le comenciamento del tabula de partitiones (preferite). Isto es automatic, a minus que tu selige partitionamento manual, in le qual caso tu debe configurar lo tu mesme.</translation>
<translation>Iste systema era initiate con un ambiente de initio &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;Pro configurar le initio ab un ambiente BIOS, iste installator debe installar un cargator de initio, como &lt;strong&gt;GRUB&lt;/strong&gt;, o al comenciamento de un partition o sur le &lt;strong&gt;registro de initio principal&lt;/strong&gt; presso le comenciamento del tabula de partitiones (preferite). Isto es automatic, a minus que tu selige partitionamento manual, in le qual caso tu debe configurar lo tu mesme.</translation>
</message>
</context>
<context>
@ -118,7 +118,7 @@
<location filename="../src/calamares/DebugWindow.ui" line="68"/>
<location filename="../src/calamares/DebugWindow.ui" line="82"/>
<source>none</source>
<translation>nulle</translation>
<translation>necuno</translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="75"/>
@ -193,7 +193,7 @@
<message>
<location filename="../src/libcalamares/JobExample.cpp" line="29"/>
<source>Job failed (%1)</source>
<translation>Carga fallite (%1)</translation>
<translation>Labor fallite (%1)</translation>
</message>
<message>
<location filename="../src/libcalamares/JobExample.cpp" line="30"/>
@ -214,7 +214,7 @@
<message>
<location filename="../src/libcalamares/JobExample.cpp" line="17"/>
<source>Example job (%1)</source>
<translation>Carga de exemplo (%1)</translation>
<translation>Labor de exemplo (%1)</translation>
</message>
</context>
<context>
@ -495,7 +495,7 @@ Link copied to clipboard</source>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="344"/>
<source>&amp;Install Now</source>
<comment>@button</comment>
<translation>&amp;Installar nunc</translation>
<translation>&amp;Installar ora</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="351"/>
@ -580,14 +580,14 @@ Link copied to clipboard</source>
<source>Do you really want to cancel the current setup process?
The setup program will quit and all changes will be lost.</source>
<translation>Vole tu vermente cancellar le processo de configuration actual?
Le programma de configuration claudera e tote le cambios essera perdite.</translation>
Le programma de configuration claudera e tote le cambiamentos sera perdite.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="519"/>
<source>Do you really want to cancel the current install process?
The installer will quit and all changes will be lost.</source>
<translation>Vole tu vermente cancellar le processo de installation actual?
Le installator claudera e tote le cambios essera perdite.</translation>
Le installator claudera e tote le cambiamentos sera perdite.</translation>
</message>
</context>
<context>
@ -795,7 +795,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1628"/>
<source>No swap</source>
<comment>@label</comment>
<translation>Nulle intercambio</translation>
<translation>Necun intercambio</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1637"/>
@ -807,7 +807,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1640"/>
<source>Swap (no Hibernate)</source>
<comment>@label</comment>
<translation>Intercambio (nulle hibernation)</translation>
<translation>Intercambio (necun hibernation)</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1643"/>
@ -978,13 +978,13 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/locale/Config.cpp" line="410"/>
<source>The system language will be set to %1.</source>
<comment>@info</comment>
<translation>Le lingua del systema essera definite a %1.</translation>
<translation>Le lingua del systema sera definite a %1.</translation>
</message>
<message>
<location filename="../src/modules/locale/Config.cpp" line="416"/>
<source>The numbers and dates locale will be set to %1.</source>
<comment>@info</comment>
<translation>Le numeros e datas regional essera definite a %1.</translation>
<translation>Le numeros e datas regional sera definite a %1.</translation>
</message>
<message>
<location filename="../src/modules/netinstall/Config.cpp" line="53"/>
@ -1039,7 +1039,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/packagechooser/Config.cpp" line="247"/>
<source>None</source>
<translation>Nulle</translation>
<translation>Necuno</translation>
</message>
<message>
<location filename="../src/modules/summary/Config.cpp" line="35"/>
@ -1080,7 +1080,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/users/Config.cpp" line="300"/>
<source>Your hostname is too short.</source>
<translation>Tu nomine de hospite es troppo breve.</translation>
<translation>Tu nomine de hospite es troppo curte.</translation>
</message>
<message>
<location filename="../src/modules/users/Config.cpp" line="304"/>
@ -1130,7 +1130,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/welcome/Config.cpp" line="80"/>
<source>This program will ask you some questions and set up %2 on your computer.</source>
<translation>Iste programma te demandara alicun questiones e configurara %2 sur tu computator.</translation>
<translation>Iste programma te demandara alcun questiones e configurara %2 sur tu computator.</translation>
</message>
<message>
<location filename="../src/modules/welcome/Config.cpp" line="264"/>
@ -1477,7 +1477,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="78"/>
<source>&lt;br&gt;&lt;br&gt;This partition table type is only advisable on older systems which start from a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment. GPT is recommended in most other cases.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Warning:&lt;/strong&gt; the MBR partition table is an obsolete MS-DOS era standard.&lt;br&gt;Only 4 &lt;em&gt;primary&lt;/em&gt; partitions may be created, and of those 4, one can be an &lt;em&gt;extended&lt;/em&gt; partition, which may in turn contain many &lt;em&gt;logical&lt;/em&gt; partitions.</source>
<translation>&lt;br&gt;&lt;br&gt;Iste typo de tabula de partitiones es solmente consiliabile pro systemas plus vetere que initia ab un ambiente de initio &lt;strong&gt;BIOS&lt;/strong&gt;. GPT es recommendate in le major parte de altere casos.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Advertimento:&lt;/strong&gt; le tabula de partitiones MBR es un standard obsolete del era MS-DOS. &lt;br&gt;Solmente 4 partitiones &lt;em&gt;primari&lt;/em&gt; pote esser create, e de cellos 4, un pote esser un partition &lt;em&gt;extendite&lt;/em&gt;, que a su vice pote continer multe partitiones &lt;em&gt;logic&lt;/em&gt;.</translation>
<translation>&lt;br&gt;&lt;br&gt;Iste typo de tabula de partitiones es solmente consiliabile pro systemas plus vetere que initia ab un ambiente de initio &lt;strong&gt;BIOS&lt;/strong&gt;. GPT es recommendate in le major parte de altere casos.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Aviso:&lt;/strong&gt; le tabula de partitiones MBR es un standard obsolete del era MS-DOS. &lt;br&gt;Solmente 4 partitiones &lt;em&gt;primari&lt;/em&gt; pote esser create, e de issos 4, un pote esser un partition &lt;em&gt;extendite&lt;/em&gt;, que a su vice pote continer multe partitiones &lt;em&gt;logic&lt;/em&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="89"/>
@ -1538,7 +1538,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="138"/>
<source>Failed to open %1</source>
<comment>@error</comment>
<translation type="unfinished"/>
<translation>Impossibile aperir %1</translation>
</message>
</context>
<context>
@ -1575,7 +1575,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="93"/>
<source>Warning: Formatting the partition will erase all existing data.</source>
<translation>Advertimento: Formatar le partition radera tote le datos existente.</translation>
<translation>Aviso: Formatar le partition radera tote le datos existente.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="103"/>
@ -1746,13 +1746,13 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="102"/>
<source>&amp;Restart now</source>
<translation>&amp;Reinitiar nunc</translation>
<translation>&amp;Reinitiar ora</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="75"/>
<source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been set up on your computer.&lt;br/&gt;You may now start using your new system.</source>
<comment>@info</comment>
<translation>&lt;h1&gt;Tote facite.&lt;/h1&gt;&lt;br/&gt;%1 ha essite configurate in tu computator.&lt;br/&gt;Tu pote nunc initiar usante tu nove systema.</translation>
<translation>&lt;h1&gt;Tote facite.&lt;/h1&gt;&lt;br/&gt;%1 ha essite configurate in tu computator.&lt;br/&gt;Tu pote ora initiar usante tu nove systema.</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="79"/>
@ -1764,7 +1764,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/finished/FinishedPage.cpp" line="87"/>
<source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been installed on your computer.&lt;br/&gt;You may now restart into your new system, or continue using the %2 Live environment.</source>
<comment>@info</comment>
<translation>&lt;h1&gt;Tote facite.&lt;/h1&gt;&lt;br/&gt;%1 ha essite installate in tu computator.&lt;br/&gt;Tu pote nunc reinitiar in tu nove systema, o continuar usante le ambiente in vivo de %2.</translation>
<translation>&lt;h1&gt;Tote facite.&lt;/h1&gt;&lt;br/&gt;%1 ha essite installate in tu computator.&lt;br/&gt;Tu pote ora reinitiar in tu nove systema, o continuar usante le ambiente in vivo de %2.</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="92"/>
@ -2077,7 +2077,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="30"/>
<source>The system locale setting affects the language and character set for some command line user interface elements.&lt;br/&gt;The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation>Le parametros regional del systema affecta le lingua e le collection de characteres pro alicun elementos del interfacie de usator del linea de commando.&lt;br/&gt;Le parametro actual es &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>Le parametros regional del systema affecta le lingua e le collection de characteres pro alcun elementos del interfacie de usator del linea de commando.&lt;br/&gt;Le parametro actual es &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="54"/>
@ -2107,7 +2107,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/luksopenswaphookcfg/LOSHJob.cpp" line="95"/>
<source>No rootMountPoint is set.</source>
<translation>Nulle puncto de montage es definite.</translation>
<translation>Necun puncto de montage es definite.</translation>
</message>
<message>
<location filename="../src/modules/luksopenswaphookcfg/LOSHJob.cpp" line="100"/>
@ -2298,7 +2298,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="254"/>
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="262"/>
<source>No partitions are defined.</source>
<translation>Nulle partitiones es definite.</translation>
<translation>Necun partitiones es definite.</translation>
</message>
<message>
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="297"/>
@ -2309,7 +2309,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="298"/>
<source>Root partition %1 is LUKS but no passphrase has been set.</source>
<translation>Le partition radice %1 es LUKS ma nulle phrase de contrasigno esseva definite.</translation>
<translation>Le partition radice %1 es LUKS ma necun phrase de contrasigno era definite.</translation>
</message>
<message>
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="305"/>
@ -2423,7 +2423,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="56"/>
<source>Kernel</source>
<comment>label for netinstall module, Linux kernel</comment>
<translation type="unfinished"/>
<translation>Nucleo</translation>
</message>
<message>
<location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="57"/>
@ -3135,7 +3135,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="55"/>
<source>&amp;Revert All Changes</source>
<translation>&amp;Reverter tote le cambiamentos</translation>
<translation>&amp;Reverter tote le modificationes</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="91"/>
@ -3195,7 +3195,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="260"/>
<source>The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead.</source>
<translation>Le tabula de partitiones sur %1 jam ha %2 partitiones primari, e non pote esser addite alteres. Remove un partition primari e adde un partition extendite, in vice.</translation>
<translation>Le tabula de partitiones sur %1 ja ha %2 partitiones primari, e non pote esser addite alteres. Remove un partition primari e adde un partition extendite, in vice.</translation>
</message>
</context>
<context>
@ -3279,7 +3279,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="263"/>
<source>No partitions will be changed.</source>
<translation>Nulle partitiones essera cambiate.</translation>
<translation>Necun partitiones sera modificate.</translation>
</message>
<message>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="303"/>
@ -3372,7 +3372,7 @@ Le installator claudera e tote le cambios essera perdite.</translation>
<message>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="658"/>
<source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.&lt;br/&gt;&lt;br/&gt;There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.&lt;br/&gt;You may continue if you wish, but filesystem unlocking will happen later during system startup.&lt;br/&gt;To encrypt the boot partition, go back and recreate it, selecting &lt;strong&gt;Encrypt&lt;/strong&gt; in the partition creation window.</source>
<translation>Un partition de initio separate esseva configurate insimul con un partition de radice cryptate, ma le partition de initio non es cryptate.&lt;br/&gt;&lt;br/&gt;Il ha problemas de securitate con iste typo de configuration, perque le files importante del systema es mantenite sur un partition non cryptate.&lt;br/&gt;Tu pote continuar si tu vole, ma le disblocar del systema de files occurrera plus tarde durante le initio del systema.&lt;br/&gt;Pro cryptar le partition de initio, retorna e recrea lo, seligente &lt;strong&gt;Cryptar&lt;/strong&gt; in le fenestra de creation de partitiones.</translation>
<translation>Un partition de initio separate era configurate insimul con un partition de radice cryptate, ma le partition de initio non es cryptate.&lt;br/&gt;&lt;br/&gt;Il ha problemas de securitate con iste typo de configuration, perque le files importante del systema es mantenite sur un partition non cryptate.&lt;br/&gt;Tu pote continuar si tu vole, ma le disblocar del systema de files occurrera plus tarde durante le initio del systema.&lt;br/&gt;Pro cryptar le partition de initio, retorna e recrea lo, seligente &lt;strong&gt;Cryptar&lt;/strong&gt; in le fenestra de creation de partitiones.</translation>
</message>
<message>
<location filename="../src/modules/partition/PartitionViewStep.cpp" line="750"/>
@ -3567,7 +3567,7 @@ Output:
<message>
<location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="44"/>
<source>(no mount point)</source>
<translation>(nulle puncto de montage)</translation>
<translation>(necun puncto de montage)</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="39"/>
@ -3661,7 +3661,7 @@ Output:
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/>
<source>Calamares cannot start KPMCore for the file system resize job.</source>
<comment>@error</comment>
<translation>Calamares non pote initiar KPMCore pro le carga de redimensionamento del systema de files.</translation>
<translation>Calamares non pote initiar KPMCore pro le labor de redimensionamento del systema de files.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="179"/>
@ -3844,37 +3844,37 @@ Output:
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/>
<source>Failed to write keyboard configuration for the virtual console.</source>
<comment>@error</comment>
<translation type="unfinished"/>
<translation>Impossibile scriber le configuration del claviero pro le consola virtual.</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="369"/>
<source>Failed to write to %1</source>
<comment>@error, %1 is virtual console configuration path</comment>
<translation type="unfinished"/>
<translation>Impossibile scriber a %1</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="394"/>
<source>Failed to write keyboard configuration for X11.</source>
<comment>@error</comment>
<translation type="unfinished"/>
<translation>Impossibile scriber le configuration del claviero pro X11.</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="395"/>
<source>Failed to write to %1</source>
<comment>@error, %1 is keyboard configuration path</comment>
<translation type="unfinished"/>
<translation>Impossibile scriber a %1</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="411"/>
<source>Failed to write keyboard configuration to existing /etc/default directory.</source>
<comment>@error</comment>
<translation>Non poteva scriber le configuration del claviero al directorio /etc/default existente.</translation>
<translation>Impossibile scriber le configuration del claviero al directorio /etc/default existente.</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="412"/>
<source>Failed to write to %1</source>
<comment>@error, %1 is default keyboard path</comment>
<translation type="unfinished"/>
<translation>Impossibile scriber a %1</translation>
</message>
</context>
<context>
@ -4288,7 +4288,7 @@ Output:
<message>
<location filename="../src/modules/umount/UmountJob.cpp" line="131"/>
<source>No rootMountPoint is set.</source>
<translation>Nulle puncto de montage es definite.</translation>
<translation>Necun puncto de montage es definite.</translation>
</message>
</context>
<context>
@ -4484,7 +4484,7 @@ Output:
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="162"/>
<source>Failed to create zpool on </source>
<translation type="unfinished"/>
<translation>Impossibile crear zpool sur</translation>
</message>
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="180"/>
@ -4494,7 +4494,7 @@ Output:
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="181"/>
<source>No partitions are available for ZFS.</source>
<translation>Nulle partitiones es disponibile pro ZFS.</translation>
<translation>Necun partitiones es disponibile pro ZFS.</translation>
</message>
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="192"/>
@ -4505,12 +4505,12 @@ Output:
<location filename="../src/modules/zfs/ZfsJob.cpp" line="192"/>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="264"/>
<source>Failed to create zpool</source>
<translation type="unfinished"/>
<translation>Impossibile crear zpool</translation>
</message>
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="336"/>
<source>Failed to create dataset</source>
<translation type="unfinished"/>
<translation>Impossibile crear dataset</translation>
</message>
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="337"/>
@ -4567,7 +4567,7 @@ Output:
<source>%1 has been installed on your computer.&lt;br/&gt;
You may now restart into your new system, or continue using the Live environment.</source>
<translation>%1 ha essite installate in tu computator.&lt;br/&gt;
Tu pote nunc reinitiar in tu nove systema, o continuar usante le ambiente in vivo.</translation>
Tu pote ora reinitiar in tu nove systema, o continuar usante le ambiente in vivo.</translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="65"/>
@ -4600,7 +4600,7 @@ Output:
You may now restart into your new system, or continue using the Live environment.</source>
<comment>@info, %1 is the product name</comment>
<translation>%1 ha essite installate in tu computator.&lt;br/&gt;
Tu pote nunc reinitiar in tu nove systema, o continuar usante le ambiente in vivo.</translation>
Tu pote ora reinitiar in tu nove systema, o continuar usante le ambiente in vivo.</translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq-qt6.qml" line="65"/>
@ -4636,7 +4636,7 @@ Output:
You may now restart your device.</source>
<comment>@info, %1 is the product name</comment>
<translation>%1 ha essite installate in tu computator.&lt;br/&gt;
Tu pote nunc reinitiar tu dispositivo.</translation>
Tu pote ora reinitiar tu dispositivo.</translation>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq@mobile.qml" line="66"/>
@ -4732,7 +4732,7 @@ Output:
The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation>&lt;h3&gt;Linguas&lt;/h3&gt; &lt;/br&gt;
Le parametro regional del systema affecta le lingua e le collection de characteres pro alicun elementos del interfacie de usator del linea de commando. Le parametro actual es &lt;strong&gt;%1&lt;/strong&gt;.</translation>
Le parametro regional del systema affecta le lingua e le collection de characteres pro alcun elementos del interfacie de usator del linea de commando. Le parametro actual es &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/localeq/localeq.qml" line="213"/>
@ -4757,7 +4757,7 @@ Output:
The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation>&lt;h3&gt;Linguas&lt;/h3&gt; &lt;/br&gt;
Le parametro regional del systema affecta le lingua e le collection de characteres pro alicun elementos del interfacie de usator del linea de commando. Le parametro actual es &lt;strong&gt;%1&lt;/strong&gt;.</translation>
Le parametro regional del systema affecta le lingua e le collection de characteres pro alcun elementos del interfacie de usator del linea de commando. Le parametro actual es &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/localeq/localeq-qt6.qml" line="213"/>
@ -5160,7 +5160,7 @@ Output:
<source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
&lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
<translation>&lt;h3&gt;Benvenite al installator de &lt;quote&gt;%2&lt;/quote&gt; pro %1&lt;/h3&gt;
&lt;p&gt;Iste programma te demandara alicun questiones e configurara %1 sur tu computator.&lt;/p&gt;</translation>
&lt;p&gt;Iste programma te demandara alcun questiones e configurara %1 sur tu computator.&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="69"/>
@ -5190,7 +5190,7 @@ Output:
<source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
&lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
<translation>&lt;h3&gt;Benvenite al installator de &lt;quote&gt;%2&lt;/quote&gt; pro %1&lt;/h3&gt;
&lt;p&gt;Iste programma te demandara alicun questiones e configurara %1 sur tu computator.&lt;/p&gt;</translation>
&lt;p&gt;Iste programma te demandara alcun questiones e configurara %1 sur tu computator.&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq-qt6.qml" line="69"/>

View File

@ -963,19 +963,19 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/keyboard/Config.cpp" line="505"/>
<source>Keyboard model has been set to %1&lt;br/&gt;.</source>
<comment>@label, %1 is keyboard model, as in Apple Magic Keyboard</comment>
<translation>%1&lt;br/&gt; </translation>
<translation>%1 &lt;br/&gt;</translation>
</message>
<message>
<location filename="../src/modules/keyboard/Config.cpp" line="512"/>
<source>Keyboard layout has been set to %1/%2.</source>
<comment>@label, %1 is layout, %2 is layout variant</comment>
<translation>%1/%2 </translation>
<translation>%1/%2 </translation>
</message>
<message>
<location filename="../src/modules/locale/Config.cpp" line="373"/>
<source>Set timezone to %1/%2</source>
<comment>@action</comment>
<translation> %1/%2 </translation>
<translation> %1/%2 </translation>
</message>
<message>
<location filename="../src/modules/locale/Config.cpp" line="410"/>
@ -3014,7 +3014,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="472"/>
<source>Use the same password for the administrator account.</source>
<translation>使</translation>
<translation>使</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="495"/>
@ -5014,7 +5014,7 @@ Output:
<message>
<location filename="../src/modules/usersq/usersq.qml" line="305"/>
<source>Use the same password for the administrator account.</source>
<translation>使</translation>
<translation>使</translation>
</message>
<message>
<location filename="../src/modules/usersq/usersq.qml" line="318"/>
@ -5147,7 +5147,7 @@ Output:
<message>
<location filename="../src/modules/usersq/usersq-qt6.qml" line="304"/>
<source>Use the same password for the administrator account.</source>
<translation>使</translation>
<translation>使</translation>
</message>
<message>
<location filename="../src/modules/usersq/usersq-qt6.qml" line="317"/>

File diff suppressed because it is too large Load Diff

View File

@ -1959,13 +1959,13 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="262"/>
<source>is checked three times.</source>
<translation type="unfinished"/>
<translation> 3 </translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="265"/>
<source>The snark has not been checked three times.</source>
<comment>The (some mythological beast) has not been checked three times.</comment>
<translation type="unfinished"/>
<translation>snark </translation>
</message>
</context>
<context>
@ -4065,7 +4065,7 @@ Output:
<location filename="../src/modules/users/MiscJobs.cpp" line="181"/>
<source>Preparing groups</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/users/MiscJobs.cpp" line="193"/>
@ -4085,7 +4085,7 @@ Output:
<location filename="../src/modules/users/MiscJobs.cpp" line="34"/>
<source>Configuring &lt;pre&gt;sudo&lt;/pre&gt; users</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation> &lt;pre&gt;sudo&lt;/pre&gt; </translation>
</message>
<message>
<location filename="../src/modules/users/MiscJobs.cpp" line="70"/>
@ -4104,7 +4104,7 @@ Output:
<location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="38"/>
<source>Running shell processes</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation> shell </translation>
</message>
</context>
<context>
@ -4156,7 +4156,7 @@ Output:
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="106"/>
<source>Sending installation feedback</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="124"/>
@ -4180,7 +4180,7 @@ Output:
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="198"/>
<source>Configuring KDE user feedback</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation> KDE </translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="220"/>
@ -4210,7 +4210,7 @@ Output:
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="141"/>
<source>Configuring machine feedback</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="164"/>
@ -4282,7 +4282,7 @@ Output:
<location filename="../src/modules/umount/UmountJob.cpp" line="39"/>
<source>Unmounting file systems</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/umount/UmountJob.cpp" line="123"/>
@ -4444,19 +4444,19 @@ Output:
<location filename="../src/calamares/DebugWindow.cpp" line="235"/>
<source>About %1 Setup</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.cpp" line="236"/>
<source>About %1 Installer</source>
<comment>@title</comment>
<translation type="unfinished"/>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="212"/>
<source>%1 Support</source>
<comment>@action</comment>
<translation type="unfinished"/>
<translation>%1 </translation>
</message>
</context>
<context>
@ -4483,7 +4483,7 @@ Output:
<location filename="../src/modules/zfs/ZfsJob.cpp" line="102"/>
<source>Creating ZFS pools and datasets</source>
<comment>@status</comment>
<translation type="unfinished"/>
<translation> ZFS </translation>
</message>
<message>
<location filename="../src/modules/zfs/ZfsJob.cpp" line="162"/>
@ -4737,14 +4737,16 @@ Output:
<source>&lt;h3&gt;Languages&lt;/h3&gt; &lt;/br&gt;
The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>&lt;h3&gt;&lt;/h3&gt;&lt;/br&gt;
&lt;strong&gt;%1&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/localeq/localeq.qml" line="213"/>
<source>&lt;h3&gt;Locales&lt;/h3&gt; &lt;/br&gt;
The system locale setting affects the numbers and dates format. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>&lt;h3&gt;&lt;/h3&gt;&lt;/br&gt;
&lt;strong&gt;%1&lt;/strong&gt;</translation>
</message>
</context>
<context>
@ -4761,14 +4763,16 @@ Output:
<source>&lt;h3&gt;Languages&lt;/h3&gt; &lt;/br&gt;
The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>&lt;h3&gt;&lt;/h3&gt;&lt;/br&gt;
&lt;strong&gt;%1&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/localeq/localeq-qt6.qml" line="213"/>
<source>&lt;h3&gt;Locales&lt;/h3&gt; &lt;/br&gt;
The system locale setting affects the numbers and dates format. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<comment>@info</comment>
<translation type="unfinished"/>
<translation>&lt;h3&gt;&lt;/h3&gt;&lt;/br&gt;
&lt;strong&gt;%1&lt;/strong&gt;</translation>
</message>
</context>
<context>

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 21:37+0100\n"
"POT-Creation-Date: 2024-05-01 00:08+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -22,15 +22,15 @@ msgstr ""
msgid "Install bootloader."
msgstr ""
#: src/modules/bootloader/main.py:666
#: src/modules/bootloader/main.py:671
msgid "Failed to install grub, no partitions defined in global storage"
msgstr ""
#: src/modules/bootloader/main.py:926
#: src/modules/bootloader/main.py:931
msgid "Bootloader installation error"
msgstr ""
#: src/modules/bootloader/main.py:927
#: src/modules/bootloader/main.py:932
msgid ""
"The bootloader could not be installed. The installation command <pre>{!s}</"
"pre> returned error code {!s}."
@ -68,17 +68,17 @@ msgstr ""
msgid "SLIM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:938
#: src/modules/displaymanager/main.py:940
msgid "No display managers selected for the displaymanager module."
msgstr ""
#: src/modules/displaymanager/main.py:939
#: src/modules/displaymanager/main.py:941
msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
#: src/modules/displaymanager/main.py:1026
#: src/modules/displaymanager/main.py:1028
msgid "Display manager configuration was incomplete"
msgstr ""
@ -108,29 +108,29 @@ msgstr ""
msgid "Writing fstab."
msgstr ""
#: src/modules/fstab/main.py:378 src/modules/fstab/main.py:384
#: src/modules/fstab/main.py:412 src/modules/initcpiocfg/main.py:256
#: src/modules/initcpiocfg/main.py:260 src/modules/initramfscfg/main.py:85
#: src/modules/fstab/main.py:382 src/modules/fstab/main.py:388
#: src/modules/fstab/main.py:416 src/modules/initcpiocfg/main.py:257
#: src/modules/initcpiocfg/main.py:261 src/modules/initramfscfg/main.py:85
#: src/modules/initramfscfg/main.py:89 src/modules/localecfg/main.py:140
#: src/modules/mount/main.py:334 src/modules/networkcfg/main.py:106
#: src/modules/mount/main.py:344 src/modules/networkcfg/main.py:106
#: src/modules/openrcdmcryptcfg/main.py:72
#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/rawfs/main.py:164
msgid "Configuration Error"
msgstr ""
#: src/modules/fstab/main.py:379 src/modules/initramfscfg/main.py:86
#: src/modules/mount/main.py:335 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/fstab/main.py:383 src/modules/initramfscfg/main.py:86
#: src/modules/mount/main.py:345 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/rawfs/main.py:165
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/fstab/main.py:385 src/modules/initramfscfg/main.py:90
#: src/modules/fstab/main.py:389 src/modules/initramfscfg/main.py:90
#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:107
#: src/modules/openrcdmcryptcfg/main.py:77
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/fstab/main.py:413
#: src/modules/fstab/main.py:417
msgid "No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use."
msgstr ""
@ -146,11 +146,11 @@ msgstr ""
msgid "Configuring mkinitcpio."
msgstr ""
#: src/modules/initcpiocfg/main.py:257
#: src/modules/initcpiocfg/main.py:258
msgid "No partitions are defined for <pre>initcpiocfg</pre>."
msgstr ""
#: src/modules/initcpiocfg/main.py:261
#: src/modules/initcpiocfg/main.py:262
msgid "No root mount point for <pre>initcpiocfg</pre>."
msgstr ""
@ -178,23 +178,23 @@ msgstr ""
msgid "Mounting partitions."
msgstr ""
#: src/modules/mount/main.py:164 src/modules/mount/main.py:200
#: src/modules/mount/main.py:171 src/modules/mount/main.py:207
msgid "Internal error mounting zfs datasets"
msgstr ""
#: src/modules/mount/main.py:176
#: src/modules/mount/main.py:183
msgid "Failed to import zpool"
msgstr ""
#: src/modules/mount/main.py:192
#: src/modules/mount/main.py:199
msgid "Failed to unlock zpool"
msgstr ""
#: src/modules/mount/main.py:209 src/modules/mount/main.py:214
#: src/modules/mount/main.py:216 src/modules/mount/main.py:221
msgid "Failed to set zfs mountpoint"
msgstr ""
#: src/modules/mount/main.py:370
#: src/modules/mount/main.py:383
msgid "zfs mounting error"
msgstr ""
@ -230,24 +230,24 @@ msgid_plural "Removing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
#: src/modules/packages/main.py:740 src/modules/packages/main.py:752
#: src/modules/packages/main.py:780
#: src/modules/packages/main.py:769 src/modules/packages/main.py:781
#: src/modules/packages/main.py:809
msgid "Package Manager error"
msgstr ""
#: src/modules/packages/main.py:741
#: src/modules/packages/main.py:770
msgid ""
"The package manager could not prepare updates. The command <pre>{!s}</pre> "
"returned error code {!s}."
msgstr ""
#: src/modules/packages/main.py:753
#: src/modules/packages/main.py:782
msgid ""
"The package manager could not update the system. The command <pre>{!s}</pre> "
"returned error code {!s}."
msgstr ""
#: src/modules/packages/main.py:781
#: src/modules/packages/main.py:810
msgid ""
"The package manager could not make changes to the installed system. The "
"command <pre>{!s}</pre> returned error code {!s}."

View File

@ -4,7 +4,7 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# xxmn77 <xxmn77@gmail.com>, 2023
# Xəyyam Qocayev <xxmn77@gmail.com>, 2023
#
#, fuzzy
msgid ""
@ -13,7 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 21:37+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: xxmn77 <xxmn77@gmail.com>, 2023\n"
"Last-Translator: Xəyyam Qocayev <xxmn77@gmail.com>, 2023\n"
"Language-Team: Azerbaijani (https://app.transifex.com/calamares/teams/20061/az/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -4,7 +4,7 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# xxmn77 <xxmn77@gmail.com>, 2023
# Xəyyam Qocayev <xxmn77@gmail.com>, 2023
#
#, fuzzy
msgid ""
@ -13,7 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 21:37+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: xxmn77 <xxmn77@gmail.com>, 2023\n"
"Last-Translator: Xəyyam Qocayev <xxmn77@gmail.com>, 2023\n"
"Language-Team: Azerbaijani (Azerbaijan) (https://app.transifex.com/calamares/teams/20061/az_AZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -6,7 +6,7 @@
# Translators:
# strel, 2017
# Guido Grasso <cuquiman97@gmail.com>, 2018
# Adolfo Jayme-Barrientos, 2019
# Adolfo Jayme Barrientos, 2019
# Miguel Mayol <mitcoes@gmail.com>, 2020
# Pier Jose Gotta Perez <piegope@protonmail.com>, 2020
# Casper, 2023

View File

@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: he\n"
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n"
#: src/modules/bootloader/main.py:46
msgid "Install bootloader."

View File

@ -28,7 +28,7 @@ msgstr "Installar cargator de initio."
#: src/modules/bootloader/main.py:666
msgid "Failed to install grub, no partitions defined in global storage"
msgstr ""
"Non poteva installar le “grub”, nulle partitiones definite in le "
"Impossibile installar le “grub”, necun partitiones definite in le "
"immagazinage global."
#: src/modules/bootloader/main.py:926
@ -65,7 +65,7 @@ msgstr "Non pote configurar LightDM"
#: src/modules/displaymanager/main.py:685
msgid "No LightDM greeter installed."
msgstr "Nulle systema de benvenita de LightDM installate."
msgstr "Necun systema de benvenita de LightDM installate."
#: src/modules/displaymanager/main.py:716
msgid "Cannot write SLIM configuration file"
@ -78,7 +78,7 @@ msgstr "Le file de configuration de SLIM {!s} non existe"
#: src/modules/displaymanager/main.py:938
msgid "No display managers selected for the displaymanager module."
msgstr ""
"Nulle gestor de visualisation seligite pro le modulo de «displaymanager»."
"Necun gestor de visualisation seligite pro le modulo de «displaymanager»."
#: src/modules/displaymanager/main.py:939
msgid ""
@ -98,7 +98,7 @@ msgstr "Creation de initramfs con dracut."
#: src/modules/dracut/main.py:63
msgid "Failed to run dracut"
msgstr "Non poteva executar dracut"
msgstr "Impossibile executar dracut"
#: src/modules/dracut/main.py:64
#, python-brace-format
@ -109,7 +109,7 @@ msgstr ""
#: src/modules/dummypython/main.py:35
msgid "Dummy python job."
msgstr "Carga ficticie de python."
msgstr "Labor ficticie de python."
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:104
#: src/modules/dummypython/main.py:105
@ -134,20 +134,20 @@ msgstr "Error de configuration"
#: src/modules/mount/main.py:335 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/rawfs/main.py:165
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr "Nulle partitiones es definite pro esser usate per <pre>{!s}</pre>."
msgstr "Necun partitiones es definite pro esser usate per <pre>{!s}</pre>."
#: src/modules/fstab/main.py:385 src/modules/initramfscfg/main.py:90
#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:107
#: src/modules/openrcdmcryptcfg/main.py:77
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
"Nulle puncto de montage de radice es date pro esser usate per "
"Necun puncto de montage de radice es date pro esser usate per "
"<pre>{!s}</pre>."
#: src/modules/fstab/main.py:413
msgid "No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use."
msgstr ""
"Nulle configuration <pre>{!s}</pre> es date pro esser usate per "
"Necun configuration <pre>{!s}</pre> es date pro esser usate per "
"<pre>{!s}</pre>."
#: src/modules/grubcfg/main.py:30
@ -164,11 +164,11 @@ msgstr " Configurante “mkinitcpio”."
#: src/modules/initcpiocfg/main.py:257
msgid "No partitions are defined for <pre>initcpiocfg</pre>."
msgstr "Nulle partitiones es definite pro <pre>initcpiocfg</pre>."
msgstr "Necun partitiones es definite pro <pre>initcpiocfg</pre>."
#: src/modules/initcpiocfg/main.py:261
msgid "No root mount point for <pre>initcpiocfg</pre>."
msgstr "Nulle partitiones es definite pro <pre>initcpiocfg</pre>."
msgstr "Necun partitiones es definite pro <pre>initcpiocfg</pre>."
#: src/modules/initramfscfg/main.py:32
msgid "Configuring initramfs."
@ -184,7 +184,7 @@ msgstr "Creante “initramfs” con “mkinitfs”."
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr "Non poteva executar “mkinitfs” sur le scopo"
msgstr "Impossibile executar “mkinitfs” sur le scopo"
#: src/modules/mkinitfs/main.py:50
msgid "The exit code was {}"
@ -200,15 +200,15 @@ msgstr "Error interne durante le montage de collection de datos de zfs"
#: src/modules/mount/main.py:176
msgid "Failed to import zpool"
msgstr "Non poteva importar “zpool”"
msgstr "Impossibile importar “zpool”"
#: src/modules/mount/main.py:192
msgid "Failed to unlock zpool"
msgstr "Non poteva disblocar “zpool”"
msgstr "Impossibile disblocar “zpool”"
#: src/modules/mount/main.py:209 src/modules/mount/main.py:214
msgid "Failed to set zfs mountpoint"
msgstr "Non poteva definir le puncto de montage de zfs"
msgstr "Impossibile definir le puncto de montage de zfs"
#: src/modules/mount/main.py:370
msgid "zfs mounting error"
@ -272,7 +272,7 @@ msgid ""
"The package manager could not make changes to the installed system. The "
"command <pre>{!s}</pre> returned error code {!s}."
msgstr ""
"Le gestor de pacchettos non poteva facer le cambiamentos al systema "
"Le gestor de pacchettos non poteva facer le modificationes al systema "
"installate. Le commando <pre>{!s}</pre> retornava le codice de error {!s}."
#: src/modules/plymouthcfg/main.py:27
@ -378,11 +378,11 @@ msgstr "Initiante a dispacchettar {}"
#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467
msgid "Failed to unpack image \"{}\""
msgstr "Non poteva dispacchettar le imagina “{}”"
msgstr "Impossibile dispacchettar le imagina “{}”"
#: src/modules/unpackfs/main.py:430
msgid "No mount point for root partition"
msgstr "Nulle puncto de montage pro le partition radice"
msgstr "Necun puncto de montage pro le partition radice"
#: src/modules/unpackfs/main.py:431
msgid "globalstorage does not contain a \"rootMountPoint\" key."
@ -409,7 +409,7 @@ msgstr "Il non ha information de configuration."
#: src/modules/unpackfs/main.py:456
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr ""
"Le systema de files para “{}” ({}) non es supportate per tu kernel actual"
"Le systema de files para “{}” ({}) non es supportate per tu nucleo actual"
#: src/modules/unpackfs/main.py:460
msgid "The source filesystem \"{}\" does not exist"
@ -420,7 +420,7 @@ msgid ""
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
"installed."
msgstr ""
"Non poteva trovar “unsquashfs”, assecura te que tu ha le pacchetto "
"Impossibile trovar “unsquashfs”, assecura te que tu ha le pacchetto "
"“squashfs-tools” installate."
#: src/modules/unpackfs/main.py:481

View File

@ -5,7 +5,7 @@
#
# Translators:
# André Marcelo Alvarenga <alvarenga@kde.org>, 2020
# Guilherme MS, 2023
# Guilherme, 2023
#
#, fuzzy
msgid ""
@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 21:37+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Guilherme MS, 2023\n"
"Last-Translator: Guilherme, 2023\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/calamares/teams/20061/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@ -4,7 +4,7 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Besnik Bleta <besnik@programeshqip.org>, 2023
# Besnik Bleta <besnik@programeshqip.org>, 2024
#
#, fuzzy
msgid ""
@ -13,7 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-12 21:37+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>, 2023\n"
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>, 2024\n"
"Language-Team: Albanian (https://app.transifex.com/calamares/teams/20061/sq/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -371,7 +371,7 @@ msgstr "Po fillohet të shpaketohet {}"
#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467
msgid "Failed to unpack image \"{}\""
msgstr "Dështoi shpaketimi i figurës \"{}\""
msgstr "Dështoi shpaketimi i figurës “{}”"
#: src/modules/unpackfs/main.py:430
msgid "No mount point for root partition"
@ -406,7 +406,7 @@ msgstr ""
#: src/modules/unpackfs/main.py:460
msgid "The source filesystem \"{}\" does not exist"
msgstr "Sistemi i kartelave \"{}\" ({}) sekziston"
msgstr "Sistemi i kartelave “{}” ({}) sekziston"
#: src/modules/unpackfs/main.py:466
msgid ""
@ -418,7 +418,7 @@ msgstr ""
#: src/modules/unpackfs/main.py:481
msgid "The destination \"{}\" in the target system is not a directory"
msgstr "Destinacioni \"{}\" te sistemi i synuar sështë drejtori"
msgstr "Vendmbërritja “{}” te sistemi i synuar sështë drejtori"
#: src/modules/zfshostid/main.py:27
msgid "Copying zfs generated hostid."

View File

@ -562,7 +562,10 @@ main( int argc, char* argv[] )
Calamares::JobQueue::instance()->enqueue( 100, m->jobs() );
QObject::connect(Calamares::JobQueue::instance(), &Calamares::JobQueue::finished, [application]() { QTimer::singleShot(std::chrono::seconds(3), application, &QApplication::quit); });
QObject::connect( Calamares::JobQueue::instance(),
&Calamares::JobQueue::finished,
[ application ]()
{ QTimer::singleShot( std::chrono::seconds( 3 ), application, &QApplication::quit ); } );
QTimer::singleShot( 0, []() { Calamares::JobQueue::instance()->start(); } );
return application->exec();

View File

@ -22,15 +22,6 @@ static const char s_footer[]
"and the <a href=\"https://app.transifex.com/calamares/calamares/\">Calamares "
"translators team</a>." );
#if 0
// Blue Systems sponsored until June 2022
static const char s_sponsor[] = QT_TRANSLATE_NOOP( "AboutData",
"<a href=\"https://calamares.io/\">Calamares</a> "
"development is sponsored by <br/>"
"<a href=\"http://www.blue-systems.com/\">Blue Systems</a> - "
"Liberating Software." );
#endif
struct Maintainer
{
unsigned int start;
@ -57,14 +48,12 @@ static constexpr const Maintainer maintainers[] = {
static QString
aboutMaintainers()
{
return std::accumulate( std::cbegin( maintainers ),
std::cend( maintainers ),
QString(),
[]( QString& s, const Maintainer& m )
QStringList s;
for ( const auto& m : maintainers )
{
s += m.text();
return s;
} );
s.append( m.text() );
}
return s.join( QString() );
}
static QString

View File

@ -16,7 +16,6 @@
#include "compat/Mutex.h"
#include "utils/Logger.h"
#include <QApplication>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusPendingCall>
@ -136,8 +135,7 @@ PowerManagementInterface::inhibitSleep()
QStringLiteral( "/org/freedesktop/PowerManagement/Inhibit" ),
QStringLiteral( "org.freedesktop.PowerManagement.Inhibit" ),
QStringLiteral( "Inhibit" ) );
inhibitCall.setArguments(
{ { tr( "Calamares" ) }, { tr( "Installation in progress", "@status" ) } } );
inhibitCall.setArguments( { { tr( "Calamares" ) }, { tr( "Installation in progress", "@status" ) } } );
auto asyncReply = sessionBus.asyncCall( inhibitCall );
auto* replyWatcher = new QDBusPendingCallWatcher( asyncReply, this );

View File

@ -0,0 +1,23 @@
/* === This file is part of Calamares - <https://calamares.io> ===
*
* SPDX-FileCopyrightText: 2024 Adriaan de Groot <groot@kde.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*
* Calamares is Free Software: see the License-Identifier above.
*
*
*/
#ifndef CALAMARES_COMPAT_SIZE_H
#define CALAMARES_COMPAT_SIZE_H
#include <QVariant>
namespace Calamares
{
/* Compatibility of size types (e.g. qsizetype, STL sizes, int) between Qt5 and Qt6 */
using NumberForTr = int;
}
#endif

View File

@ -11,6 +11,7 @@
#include "RequirementsChecker.h"
#include "compat/Mutex.h"
#include "compat/Size.h"
#include "modulesystem/Module.h"
#include "modulesystem/Requirement.h"
#include "modulesystem/RequirementsModel.h"
@ -120,7 +121,7 @@ RequirementsChecker::reportProgress()
{
cDebug() << "Remaining modules:" << remaining << Logger::DebugList( remainingNames );
unsigned int posInterval = ( m_progressTimer->interval() < 0 ) ? 1000 : uint( m_progressTimer->interval() );
QString waiting = tr( "Waiting for %n module(s)…", "@status", remaining );
QString waiting = tr( "Waiting for %n module(s)…", "@status", static_cast<Calamares::NumberForTr>(remaining) );
QString elapsed = tr( "(%n second(s))", "@status", m_progressTimeouts * posInterval / 999 );
Q_EMIT requirementsProgress( waiting + QString( " " ) + elapsed );
}

View File

@ -66,7 +66,7 @@ RequirementsModel::reCheckList()
int
RequirementsModel::rowCount( const QModelIndex& ) const
{
return m_requirements.count();
return static_cast< int >( m_requirements.count() ); // TODO 3.4 use qsizetype
}
QVariant

View File

@ -61,8 +61,8 @@ public:
QVariant data( const QModelIndex& index, int role ) const override;
int rowCount( const QModelIndex& ) const override;
int count() const { return m_requirements.count(); }
int rowCount( const QModelIndex& ) const override; // TODO 3.4 use qsizetype
int count() const { return static_cast< int >( m_requirements.count() ); } // TODO 3.4 use qsizetype
///@brief Debugging tool, describe the checking-state
void describe() const;

View File

@ -110,7 +110,8 @@ PartitionServiceTests::testUnitComparison()
}
/* Operator to make the table in testUnitNormalisation_data easier to write */
constexpr qint64 operator""_qi( unsigned long long m )
constexpr qint64
operator""_qi( unsigned long long m )
{
return qint64( m );
}

View File

@ -55,6 +55,41 @@ get_variant_stringlist( const QVariantList& l )
return retl;
}
/** @brief Inserts the keys from @p map into @p expander as "gs"-keys
*
* For each key k in @p map, a key with literal `gs[` + prefix + '.' + key +
* literal `]` is inserted into the exapander.
*/
static void
expand_tree( Calamares::String::DictionaryExpander& expander, const QString& prefix, const QVariantMap& map )
{
// With the current prefix, turn a key into gs[prefix.key]
auto gs_key = [ &prefix ]( const QString& k ) -> QString
{ return QStringLiteral( "gs[" ) + ( prefix.isEmpty() ? QString() : prefix + '.' ) + k + ']'; };
for ( QVariantMap::const_iterator valueiter = map.cbegin(); valueiter != map.cend(); ++valueiter )
{
const QString key = valueiter.key();
const QVariant value = valueiter.value();
switch ( Calamares::typeOf( value ) )
{
case Calamares::MapVariantType:
expand_tree( expander, prefix.isEmpty() ? key : ( prefix + '.' + key ), value.toMap() );
break;
case Calamares::StringVariantType:
expander.add( gs_key( key ), value.toString() );
break;
case Calamares::IntVariantType:
expander.add( gs_key( key ), QString::number( value.toInt() ) );
break;
default:
// Silently ignore
break;
}
}
}
static Calamares::String::DictionaryExpander
get_gs_expander( System::RunLocation location )
{
@ -88,6 +123,11 @@ get_gs_expander( System::RunLocation location )
}
}
if ( gs )
{
expand_tree( expander, QString(), gs->data() );
}
return expander;
}

View File

@ -104,6 +104,8 @@ public:
/** @brief empty command-list with timeout to apply to entries. */
CommandList( bool doChroot = true, std::chrono::seconds timeout = std::chrono::seconds( 10 ) );
CommandList( const QVariant& v, bool doChroot = true, std::chrono::seconds timeout = std::chrono::seconds( 10 ) );
CommandList( int ) = delete;
CommandList( const QVariant&, int ) = delete;
bool doChroot() const { return m_doChroot; }
std::chrono::seconds defaultTimeout() const { return m_timeout; }

View File

@ -284,7 +284,15 @@ LibCalamaresTests::testCommandExpansion_data()
QTest::newRow( "empty " ) << QString() << QString();
QTest::newRow( "ls " ) << QStringLiteral( "ls" ) << QStringLiteral( "ls" );
QTest::newRow( "user " ) << QStringLiteral( "chmod $USER" ) << QStringLiteral( "chmod alice" );
QTest::newRow( "$USER " ) << QStringLiteral( "chmod $USER" ) << QStringLiteral( "chmod alice" );
QTest::newRow( "${USER}" ) << QStringLiteral( "chmod ${USER}" ) << QStringLiteral( "chmod alice" );
QTest::newRow( "gs-user" ) << QStringLiteral( "chmod ${gs[username]}" ) << QStringLiteral( "chmod alice" );
QTest::newRow( "gs-* " ) << QStringLiteral(
"${gs[username]} has ${gs[branding.bootloader]} ${gs[branding.ducks]} ducks" )
<< QStringLiteral( "alice has found 3 ducks" );
// QStringList does not expand
QTest::newRow( "gs-list" ) << QStringLiteral( "colors ${gs[branding.color]}" )
<< QStringLiteral( "colors ${gs[branding.color]}" );
}
void
@ -295,6 +303,12 @@ LibCalamaresTests::testCommandExpansion()
QVERIFY( gs );
gs->insert( QStringLiteral( "username" ), QStringLiteral( "alice" ) );
QVariantMap m;
m.insert( QStringLiteral( "bootloader" ), QStringLiteral( "found" ) );
m.insert( QStringLiteral( "ducks" ), 3 );
m.insert( QStringLiteral( "color" ), QStringList { "green", "red" } );
gs->insert( QStringLiteral( "branding" ), m );
QFETCH( QString, command );
QFETCH( QString, expected );
Calamares::CommandLine c( command, std::chrono::seconds( 0 ) );
@ -350,8 +364,14 @@ commands:
QCOMPARE( m[ "commands" ].toList().count(), 4 );
{
// Take care! The second parameter is a bool, so "3" here means "true"
#ifdef THIS_DOES_NOT_COMPILE_AND_THATS_THE_POINT
// Take care! The second parameter is a bool, so "3" here would
// mean "true", except the int overload is deleted to prevent just that.
Calamares::CommandList cmds( m[ "commands" ], 3 );
// .. and there's no conversion from std::chrono::duration to bool either.
Calamares::CommandList cmds( m[ "commands" ], std::chrono::seconds( 3 ) );
#endif
Calamares::CommandList cmds( m[ "commands" ], true );
QCOMPARE( cmds.defaultTimeout(), std::chrono::seconds( 10 ) );
// But the 4 commands are there anyway
QCOMPARE( cmds.count(), 4 );

View File

@ -24,37 +24,43 @@ namespace Units
{
/** User defined literals, 1_KB is 1 KiloByte (= 10^3 bytes) */
constexpr qint64 operator""_KB( unsigned long long m )
constexpr qint64
operator""_KB( unsigned long long m )
{
return qint64( m ) * 1000;
}
/** User defined literals, 1_KiB is 1 KibiByte (= 2^10 bytes) */
constexpr qint64 operator""_KiB( unsigned long long m )
constexpr qint64
operator""_KiB( unsigned long long m )
{
return qint64( m ) * 1024;
}
/** User defined literals, 1_MB is 1 MegaByte (= 10^6 bytes) */
constexpr qint64 operator""_MB( unsigned long long m )
constexpr qint64
operator""_MB( unsigned long long m )
{
return operator""_KB( m ) * 1000;
}
/** User defined literals, 1_MiB is 1 MibiByte (= 2^20 bytes) */
constexpr qint64 operator""_MiB( unsigned long long m )
constexpr qint64
operator""_MiB( unsigned long long m )
{
return operator""_KiB( m ) * 1024;
}
/** User defined literals, 1_GB is 1 GigaByte (= 10^9 bytes) */
constexpr qint64 operator""_GB( unsigned long long m )
constexpr qint64
operator""_GB( unsigned long long m )
{
return operator""_MB( m ) * 1000;
}
/** User defined literals, 1_GiB is 1 GibiByte (= 2^30 bytes) */
constexpr qint64 operator""_GiB( unsigned long long m )
constexpr qint64
operator""_GiB( unsigned long long m )
{
return operator""_MiB( m ) * 1024;
}

View File

@ -73,9 +73,8 @@ ExecutionViewStep::ExecutionViewStep( QObject* parent )
{
m_widget->setObjectName( "slideshow" );
m_progressBar->setObjectName( "exec-progress" );
CALAMARES_RETRANSLATE(
m_progressBar->setFormat( tr( "%p%", "Progress percentage indicator: %p is where the number 0..100 is placed" ) );
);
CALAMARES_RETRANSLATE( m_progressBar->setFormat(
tr( "%p%", "Progress percentage indicator: %p is where the number 0..100 is placed" ) ); );
m_label->setObjectName( "exec-message" );
QVBoxLayout* layout = new QVBoxLayout( m_widget );

View File

@ -46,7 +46,8 @@
#
# The values after a value sub-keys are the same kinds of values
# as can be given to the *script* key in the shellprocess module.
# See shellprocess.conf for documentation on valid values.
# See shellprocess.conf for documentation on valid values and how
# variables are expanded in those commands.
---
dontChroot: false
firmwareType:

View File

@ -378,14 +378,30 @@ class DMgdm(DisplayManager):
GDM exists with different executable names, so search
for one of them and use it.
"""
for executable, config in (
candidates = (
( "gdm", "etc/gdm/custom.conf" ),
( "gdm3", "etc/gdm3/daemon.conf" )
):
( "gdm3", "etc/gdm3/daemon.conf" ),
( "gdm3", "etc/gdm3/custom.conf" ),
)
def have_executable(executable : str):
bin_path = "{!s}/usr/bin/{!s}".format(self.root_mount_point, executable)
sbin_path = "{!s}/usr/sbin/{!s}".format(self.root_mount_point, executable)
if os.path.exists(bin_path) or os.path.exists(sbin_path):
# Keep the found-executable name around for later
return os.path.exists(bin_path) or os.path.exists(sbin_path)
def have_config(config : str):
config_path = "{!s}/{!s}".format(self.root_mount_point, config)
return os.path.exists(config_path)
# Look for an existing configuration file as a hint, then
# keep the found-executable name and config around for later.
for executable, config in candidates:
if have_config(config) and have_executable(executable):
self.executable = executable
self.config = config
return True
for executable, config in candidates:
if have_executable(executable):
self.executable = executable
self.config = config
return True

View File

@ -4,7 +4,7 @@
# We have tests to load (some) of the DMs specifically, to test their
# configuration code. Those tests conventionally live in Python
# files here in the tests/ directory. Add them.
foreach(_dmname greetd sddm)
foreach(_dmname greetd sddm gdm)
add_test(
NAME configure-displaymanager-${_dmname}
COMMAND env PYTHONPATH=.: python3 ${CMAKE_CURRENT_LIST_DIR}/test-dm-${_dmname}.py

View File

@ -0,0 +1,26 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Calamares Boilerplate
import libcalamares
libcalamares.globalstorage = libcalamares.GlobalStorage(None)
libcalamares.globalstorage.insert("testing", True)
# Module prep-work
from src.modules.displaymanager import main
default_desktop_environment = main.DesktopEnvironment("startplasma-x11", "kde-plasma.desktop")
import os
import tempfile
with tempfile.TemporaryDirectory(prefix="calamares-gdm") as tempdir:
os.makedirs(tempdir + "/usr/bin")
os.makedirs(tempdir + "/etc/gdm3")
with open(tempdir + "/usr/bin/gdm3", "w") as f:
f.write("#! /bin/sh\n:\n")
# Specific DM test
d = main.DMgdm(tempdir)
assert(d.have_dm())
d.set_autologin("d", True, default_desktop_environment)
# .. and again (this time checks load/save)
d.set_autologin("d", True, default_desktop_environment)
d.set_autologin("d", True, default_desktop_environment)

View File

@ -139,7 +139,8 @@ Config::doNotify( bool hasFailed, bool sendAnyway )
QString message;
if ( hasFailed )
{
title = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Failed", "@title" ) : tr( "Installation Failed", "@title" );
title = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Failed", "@title" )
: tr( "Installation Failed", "@title" );
message = Calamares::Settings::instance()->isSetupMode()
? tr( "The setup of %1 did not complete successfully.", "@info" )
: tr( "The installation of %1 did not complete successfully.", "@info" );
@ -148,7 +149,8 @@ Config::doNotify( bool hasFailed, bool sendAnyway )
{
title = Calamares::Settings::instance()->isSetupMode() ? tr( "Setup Complete", "@title" )
: tr( "Installation Complete", "@title" );
message = Calamares::Settings::instance()->isSetupMode() ? tr( "The setup of %1 is complete.", "@info" )
message = Calamares::Settings::instance()->isSetupMode()
? tr( "The setup of %1 is complete.", "@info" )
: tr( "The installation of %1 is complete.", "@info" );
}

View File

@ -74,26 +74,30 @@ FinishedPage::retranslate()
{
ui->mainText->setText( tr( "<h1>All done.</h1><br/>"
"%1 has been set up on your computer.<br/>"
"You may now start using your new system.", "@info" )
"You may now start using your new system.",
"@info" )
.arg( branding->versionedName() ) );
ui->restartCheckBox->setToolTip( tr( "<html><head/><body>"
"<p>When this box is checked, your system will "
"restart immediately when you click on "
"<span style=\"font-style:italic;\">Done</span> "
"or close the setup program.</p></body></html>", "@tooltip" ) );
"or close the setup program.</p></body></html>",
"@tooltip" ) );
}
else
{
ui->mainText->setText( tr( "<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.", "@info" )
"using the %2 Live environment.",
"@info" )
.arg( branding->versionedName(), branding->productName() ) );
ui->restartCheckBox->setToolTip( tr( "<html><head/><body>"
"<p>When this box is checked, your system will "
"restart immediately when you click on "
"<span style=\"font-style:italic;\">Done</span> "
"or close the installer.</p></body></html>", "@tooltip" ) );
"or close the installer.</p></body></html>",
"@tooltip" ) );
}
}
else
@ -104,7 +108,8 @@ FinishedPage::retranslate()
{
ui->mainText->setText( tr( "<h1>Setup Failed</h1><br/>"
"%1 has not been set up on your computer.<br/>"
"The error message was: %2.", "@info, %1 is product name with version" )
"The error message was: %2.",
"@info, %1 is product name with version" )
.arg( branding->versionedName() )
.arg( message ) );
}
@ -112,7 +117,8 @@ FinishedPage::retranslate()
{
ui->mainText->setText( tr( "<h1>Installation Failed</h1><br/>"
"%1 has not been installed on your computer.<br/>"
"The error message was: %2.", "@info, %1 is product name with version" )
"The error message was: %2.",
"@info, %1 is product name with version" )
.arg( branding->versionedName() )
.arg( message ) );
}

View File

@ -166,7 +166,8 @@ ResizeFSJob::exec()
if ( !m_kpmcore )
{
cWarning() << "Could not load KPMCore backend (2).";
return Calamares::JobResult::error( tr( "KPMCore not available", "@error" ),
return Calamares::JobResult::error(
tr( "KPMCore not available", "@error" ),
tr( "Calamares cannot start KPMCore for the file system resize job.", "@error" ) );
}
m_kpmcore.backend()->initFSSupport(); // Might not be enough, see below
@ -178,17 +179,19 @@ ResizeFSJob::exec()
return Calamares::JobResult::error(
tr( "Resize failed.", "@error" ),
!m_fsname.isEmpty()
? tr( "The filesystem %1 could not be found in this system, and cannot be resized.", "@info" ).arg( m_fsname )
: tr( "The device %1 could not be found in this system, and cannot be resized.", "@info" ).arg( m_devicename ) );
? tr( "The filesystem %1 could not be found in this system, and cannot be resized.", "@info" )
.arg( m_fsname )
: tr( "The device %1 could not be found in this system, and cannot be resized.", "@info" )
.arg( m_devicename ) );
}
m.second->fileSystem().init(); // Initialize support for specific FS
if ( !ResizeOperation::canGrow( m.second ) )
{
cDebug() << "canGrow() returned false.";
return Calamares::JobResult::error( tr( "Resize Failed", "@error" ),
!m_fsname.isEmpty()
? tr( "The filesystem %1 cannot be resized.", "@error" ).arg( m_fsname )
return Calamares::JobResult::error(
tr( "Resize Failed", "@error" ),
!m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized.", "@error" ).arg( m_fsname )
: tr( "The device %1 cannot be resized.", "@error" ).arg( m_devicename ) );
}
@ -198,9 +201,9 @@ ResizeFSJob::exec()
if ( new_end < 0 )
{
return Calamares::JobResult::error( tr( "Resize Failed", "@error" ),
!m_fsname.isEmpty()
? tr( "The filesystem %1 cannot be resized.", "@error" ).arg( m_fsname )
return Calamares::JobResult::error(
tr( "Resize Failed", "@error" ),
!m_fsname.isEmpty() ? tr( "The filesystem %1 cannot be resized.", "@error" ).arg( m_fsname )
: tr( "The device %1 cannot be resized.", "@error" ).arg( m_devicename ) );
}
if ( new_end == 0 )

View File

@ -151,8 +151,12 @@ class FstabGenerator(object):
if not mapper_name or not luks_uuid:
return None
password = "/crypto_keyfile.bin"
crypttab_options = self.crypttab_options
# Make sure to not use missing keyfile
if os.path.isfile(os.path.join(self.root_mount_point, "crypto_keyfile.bin")):
password = "/crypto_keyfile.bin"
else:
password = "none"
# Set crypttab password for partition to none and remove crypttab options
# if root partition was not encrypted

View File

@ -9,3 +9,30 @@
#
# Please note that using the systemd hooks result in no access to the emergency recovery shell
useSystemdHook: false
#
# Modifications to the standard list of hooks.
#
# There are three subkeys:
# - prepend, which puts hooks at the beginning of the
# list of hooks, in the order specified here,
# - append, which adds hooks at the end of the list of
# hooks, in the order specified here,
# - remove, which removes hooks from the list of hooks,
# wherever they may be.
#
# The example configuration here yields bogus, <stuff>, bogus
# initially, and then removes that hook again.
#
hooks:
prepend: [ bogus ]
append: [ bogus ]
remove: [ bogus ]
#
# In some cases, you may want to use a different source
# file than /etc/mkinitcpio.conf , e.g. because the live system
# does not match the target in a useful way. If unset or
# empty, defaults to /etc/mkinitcpio.conf
#
source: "/etc/mkinitcpio.conf"

View File

@ -7,5 +7,11 @@ additionalProperties: false
type: object
properties:
useSystemdHook: { type: boolean }
hooks:
type: object
additionalProperties: false
properties:
prepend: { type: array, items: string }
append: { type: array, items: string }
remove: { type: array, items: string }
source: { type: string }

View File

@ -97,7 +97,7 @@ def get_host_initcpio():
the lines from that file, or an empty list if it does
not exist.
"""
hostfile = "/etc/mkinitcpio.conf"
hostfile = libcalamares.job.configuration.get("source", None) or "/etc/mkinitcpio.conf"
try:
with open(hostfile, "r") as mkinitcpio_file:
mklins = [x.strip() for x in mkinitcpio_file.readlines()]
@ -168,6 +168,13 @@ def find_initcpio_features(partitions, root_mount_point):
hooks.append("keymap")
hooks.append("consolefont")
hooks_map = libcalamares.job.configuration.get("hooks", None)
if not hooks_map:
hooks_map = dict()
hooks_prepend = hooks_map.get("prepend", None) or []
hooks_append = hooks_map.get("append", None) or []
hooks_remove = hooks_map.get("remove", None) or []
modules = []
files = []
binaries = []
@ -247,6 +254,9 @@ def find_initcpio_features(partitions, root_mount_point):
else:
hooks.append("fsck")
# Modify according to the keys in the configuration
hooks = [h for h in (hooks_prepend + hooks + hooks_append) if h not in hooks_remove]
return hooks, modules, files, binaries

View File

@ -0,0 +1,7 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
rootMountPoint: /tmp/mount
partitions:
- fs: ext4
mountPoint: "/"

View File

@ -502,14 +502,16 @@ QString
Config::prettyStatus() const
{
QString status;
status += tr( "Keyboard model has been set to %1<br/>.", "@label, %1 is keyboard model, as in Apple Magic Keyboard" )
status
+= tr( "Keyboard model has been set to %1<br/>.", "@label, %1 is keyboard model, as in Apple Magic Keyboard" )
.arg( m_keyboardModelsModel->label( m_keyboardModelsModel->currentIndex() ) );
QString layout = m_keyboardLayoutsModel->item( m_keyboardLayoutsModel->currentIndex() ).second.description;
QString variant = m_keyboardVariantsModel->currentIndex() >= 0
? m_keyboardVariantsModel->label( m_keyboardVariantsModel->currentIndex() )
: QString( "<default>" );
status += tr( "Keyboard layout has been set to %1/%2.", "@label, %1 is layout, %2 is layout variant" ).arg( layout, variant );
status += tr( "Keyboard layout has been set to %1/%2.", "@label, %1 is layout, %2 is layout variant" )
.arg( layout, variant );
return status;
}

View File

@ -64,7 +64,9 @@ QString
SetKeyboardLayoutJob::prettyName() const
{
return tr( "Setting keyboard model to %1, layout as %2-%3…", "@status, %1 model, %2 layout, %3 variant" )
.arg( m_model ).arg( m_layout ).arg( m_variant );
.arg( m_model )
.arg( m_layout )
.arg( m_variant );
}
@ -365,8 +367,10 @@ SetKeyboardLayoutJob::exec()
if ( !writeVConsoleData( vconsoleConfPath, convertedKeymapPath ) )
{
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for the virtual console.", "@error" ),
tr( "Failed to write to %1", "@error, %1 is virtual console configuration path" ).arg( vconsoleConfPath ) );
return Calamares::JobResult::error(
tr( "Failed to write keyboard configuration for the virtual console.", "@error" ),
tr( "Failed to write to %1", "@error, %1 is virtual console configuration path" )
.arg( vconsoleConfPath ) );
}
// Get the path to the destination's /etc/X11/xorg.conf.d/00-keyboard.conf
@ -391,7 +395,8 @@ SetKeyboardLayoutJob::exec()
if ( !writeX11Data( keyboardConfPath ) )
{
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11.", "@error" ),
return Calamares::JobResult::error(
tr( "Failed to write keyboard configuration for X11.", "@error" ),
tr( "Failed to write to %1", "@error, %1 is keyboard configuration path" ).arg( keyboardConfPath ) );
}
}

View File

@ -45,6 +45,7 @@ KeyboardLayoutTests::testSimpleLayoutLookup_data()
QTest::newRow( "turkish default" ) << QString( "tr" ) << QString() << QString() << QString( "trq" );
QTest::newRow( "turkish alt-q" ) << QString( "tr" ) << QString() << QString( "alt" ) << QString( "trq" );
QTest::newRow( "turkish f" ) << QString( "tr" ) << QString() << QString( "f" ) << QString( "trf" );
QTest::newRow( "italian" ) << QString( "it" ) << QString( "pc105" ) << QString() << QString( "it" );
}

View File

@ -40,6 +40,7 @@ slovene si pc105 - terminate:ctrl_alt_bksp
hu101 hu pc105 qwerty terminate:ctrl_alt_bksp
jp106 jp jp106 - terminate:ctrl_alt_bksp
croat hr pc105 - terminate:ctrl_alt_bksp
it it pc105 - terminate:ctrl_alt_bksp
it2 it pc105 - terminate:ctrl_alt_bksp
hu hu pc105 - terminate:ctrl_alt_bksp
sr-latin rs pc105 latin terminate:ctrl_alt_bksp
@ -47,7 +48,6 @@ fi fi pc105 - terminate:ctrl_alt_bksp
fr_CH ch pc105 fr terminate:ctrl_alt_bksp
dk-latin1 dk pc105 - terminate:ctrl_alt_bksp
fr fr pc105 - terminate:ctrl_alt_bksp
it it pc105 - terminate:ctrl_alt_bksp
ua-utf ua,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
fr-latin1 fr pc105 - terminate:ctrl_alt_bksp
sg-latin1 ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp

View File

@ -9,3 +9,43 @@ ua us - ua-utf
gr us - gr
he us - he
ar us - ar
ir us - fa
# This list is from /usr/share/X11/xkb/rules/base, all the non-latin
# layouts are collected in $nonlatin . Add us (English) to all of them.
af us - af
am us - am
ara us - ara
bd us - bd
bg us - bg
bt us - bt
by us - by
eg us - eg
et us - et
ge us - ge
gn us - gn
id us - id
il us - il
in us - in
jp us - jp
jv us - jv
kg us - kg
kh us - kh
kr us - kr
kz us - kz
la us - la
lk us - lk
ma us - ma
me us - me
mk us - mk
mm us - mm
mn us - mn
mv us - mv
my us - my
pk us - pk
rs us - rs
sy us - sy
th us - th
tj us - tj
tz us - tz
uz us - uz

View File

@ -147,9 +147,11 @@ LicensePage::retranslate()
if ( !m_allLicensesOptional )
{
ui->mainText->setText( tr( "This setup procedure will install proprietary "
"software that is subject to licensing terms.", "@info" )
"software that is subject to licensing terms.",
"@info" )
+ br + review );
QString mustAcceptText( tr( "If you do not agree with the terms, the setup procedure cannot continue.", "@info" ) );
QString mustAcceptText(
tr( "If you do not agree with the terms, the setup procedure cannot continue.", "@info" ) );
ui->acceptCheckBox->setToolTip( mustAcceptText );
}
else
@ -157,10 +159,12 @@ LicensePage::retranslate()
ui->mainText->setText( tr( "This setup procedure can install proprietary "
"software that is subject to licensing terms "
"in order to provide additional features and enhance the user "
"experience.", "@info" )
"experience.",
"@info" )
+ br + review );
QString okAcceptText( tr( "If you do not agree with the terms, proprietary software will not "
"be installed, and open source alternatives will be used instead.", "@info" ) );
"be installed, and open source alternatives will be used instead.",
"@info" ) );
ui->acceptCheckBox->setToolTip( okAcceptText );
}
ui->retranslateUi( this );

View File

@ -107,38 +107,44 @@ LicenseWidget::retranslateUi()
case LicenseEntry::Type::Driver:
//: %1 is an untranslatable product name, example: Creative Audigy driver
productDescription = tr( "<strong>%1 driver</strong><br/>"
"by %2", "@label, %1 is product name, %2 is product vendor" )
"by %2",
"@label, %1 is product name, %2 is product vendor" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::GpuDriver:
//: %1 is usually a vendor name, example: Nvidia graphics driver
productDescription = tr( "<strong>%1 graphics driver</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>",
"@label, %1 is product name, %2 is product vendor" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::BrowserPlugin:
productDescription = tr( "<strong>%1 browser plugin</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>",
"@label, %1 is product name, %2 is product vendor" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::Codec:
productDescription = tr( "<strong>%1 codec</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>",
"@label, %1 is product name, %2 is product vendor" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::Package:
productDescription = tr( "<strong>%1 package</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>",
"@label, %1 is product name, %2 is product vendor" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::Software:
productDescription = tr( "<strong>%1</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>",
"@label, %1 is product name, %2 is product vendor" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
}
@ -183,7 +189,8 @@ LicenseWidget::updateExpandToolTip()
{
if ( m_entry.isLocal() )
{
m_viewLicenseButton->setText( m_isExpanded ? tr( "Hide the license text", "@tooltip" ) : tr( "Show the license text", "@tooltip" ) );
m_viewLicenseButton->setText( m_isExpanded ? tr( "Hide the license text", "@tooltip" )
: tr( "Show the license text", "@tooltip" ) );
}
else
{

View File

@ -29,7 +29,8 @@ LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringLis
upperText->setWordWrap( true );
upperText->setText( tr( "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>.", "@info" )
"The current setting is <strong>%1</strong>.",
"@info" )
.arg( guessedLCLocale ) );
mainLayout->addWidget( upperText );
setMinimumWidth( upperText->fontMetrics().height() * 24 );

View File

@ -67,9 +67,10 @@ SetTimezoneJob::exec()
int ec = Calamares::System::instance()->targetEnvCall( { "ln", "-s", zoneinfoPath, localtimeSlink } );
if ( ec )
{
return Calamares::JobResult::error(
tr( "Cannot set timezone.", "@error" ),
tr( "Link creation failed, target: %1; link name: %2", "@info" ).arg( zoneinfoPath ).arg( "/etc/localtime" ) );
return Calamares::JobResult::error( tr( "Cannot set timezone.", "@error" ),
tr( "Link creation failed, target: %1; link name: %2", "@info" )
.arg( zoneinfoPath )
.arg( "/etc/localtime" ) );
}
QFile timezoneFile( gs->value( "rootMountPoint" ).toString() + "/etc/timezone" );

View File

@ -101,10 +101,8 @@ MachineIdJob::exec()
QObject::tr( "Directory not found" ),
QObject::tr( "Could not create new random file <pre>%1</pre>." ).arg( entropy_file ) );
}
auto r = createEntropy( m_entropy_copy ? EntropyGeneration::CopyFromHost
: EntropyGeneration::New,
root,
entropy_file );
auto r = createEntropy(
m_entropy_copy ? EntropyGeneration::CopyFromHost : EntropyGeneration::New, root, entropy_file );
if ( !r )
{
return r;

View File

@ -55,15 +55,9 @@ static PackageItem
fromComponent( AppStream::Pool& pool, AppStream::Component& component )
{
#if HAVE_APPSTREAM_VERSION == 0
auto setActiveLocale = [&component](const QString & locale)
{
component.setActiveLocale( locale );
};
auto setActiveLocale = [ &component ]( const QString& locale ) { component.setActiveLocale( locale ); };
#else
auto setActiveLocale = [&pool](const QString & locale)
{
pool.setLocale( locale );
};
auto setActiveLocale = [ &pool ]( const QString& locale ) { pool.setLocale( locale ); };
#endif
QVariantMap map;

View File

@ -28,9 +28,11 @@
#define HAVE_APPSTREAM_HEADERS AppStreamQt
#endif
// clang-format off
#include CALAMARES_LT HAVE_APPSTREAM_HEADERS/pool.h CALAMARES_GT
#include CALAMARES_LT HAVE_APPSTREAM_HEADERS/image.h CALAMARES_GT
#include CALAMARES_LT HAVE_APPSTREAM_HEADERS/screenshot.h CALAMARES_GT
// clang-format on
#undef CALAMARES_LT
#undef CALAMARES_GT

View File

@ -60,6 +60,7 @@ if(KPMcore_FOUND)
core/DeviceList.cpp
core/DeviceModel.cpp
core/KPMHelpers.cpp
core/OsproberEntry.cpp
core/PartitionActions.cpp
core/PartitionCoreModule.cpp
core/PartitionInfo.cpp

View File

@ -444,6 +444,7 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
m_allowZfsEncryption = Calamares::getBool( configurationMap, "allowZfsEncryption", true );
m_allowManualPartitioning = Calamares::getBool( configurationMap, "allowManualPartitioning", true );
m_preCheckEncryption = Calamares::getBool( configurationMap, "preCheckEncryption", false );
m_showNotEncryptedBootMessage = Calamares::getBool( configurationMap, "showNotEncryptedBootMessage", true );
m_requiredPartitionTableType = Calamares::getStringList( configurationMap, "requiredPartitionTableType" );

View File

@ -35,7 +35,7 @@ class Config : public QObject
replaceModeFilesystemChanged )
Q_PROPERTY( bool allowManualPartitioning READ allowManualPartitioning CONSTANT FINAL )
Q_PROPERTY( bool preCheckEncryption READ preCheckEncryption CONSTANT FINAL )
Q_PROPERTY( bool showNotEncryptedBootMessage READ showNotEncryptedBootMessage CONSTANT FINAL )
public:
@ -148,6 +148,13 @@ public:
/// @brief Is manual partitioning allowed (not explicitly disabled in the config file)?
bool allowManualPartitioning() const { return m_allowManualPartitioning; }
/** @brief Pre-check encryption checkbox.
*
* This is meaningful only if enableLuksAutomatedPartitioning is @c true.
* Default value is @c false
*/
bool preCheckEncryption() const { return m_preCheckEncryption; }
/// @brief Show "Boot partition not encrypted" warning (not explicitly disabled in the config file)?
bool showNotEncryptedBootMessage() const { return m_showNotEncryptedBootMessage; }
@ -199,6 +206,7 @@ private:
QStringList m_requiredPartitionTableType;
bool m_allowZfsEncryption = true;
bool m_allowManualPartitioning = true;
bool m_preCheckEncryption = false;
bool m_showNotEncryptedBootMessage = true;
};

View File

@ -223,9 +223,15 @@ PartitionViewStep::prettyStatus() const
const QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo();
cDebug() << "Summary for Partition" << list.length() << choice;
auto joinDiskInfo = [ choice ]( QString& s, const PartitionCoreModule::SummaryInfo& i )
{ return s + diskDescription( 1, i, choice ); };
const QString diskInfoLabel = std::accumulate( list.begin(), list.end(), QString(), joinDiskInfo );
const QString diskInfoLabel = [ &choice, &list ]()
{
QStringList s;
for ( const auto& i : list )
{
s.append( diskDescription( 1, i, choice ) );
}
return s.join( QString() );
}();
const QString jobsLabel = jobDescriptions( jobs() ).join( QStringLiteral( "<br/>" ) );
return diskInfoLabel + "<br/>" + jobsLabel;
}

View File

@ -0,0 +1,63 @@
/* === This file is part of Calamares - <https://calamares.io> ===
*
* SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac <teo@kde.org>
* SPDX-FileCopyrightText: 2018-2019, 2024 Adriaan de Groot <groot@kde.org>
* SPDX-FileCopyrightText: 2019 Collabora Ltd <arnaud.ferraris@collabora.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*
* Calamares is Free Software: see the License-Identifier above.
*
*/
#include "OsproberEntry.h"
bool
FstabEntry::isValid() const
{
return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty();
}
FstabEntry
FstabEntry::fromEtcFstab( const QString& rawLine )
{
QString line = rawLine.simplified();
if ( line.startsWith( '#' ) )
{
return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 };
}
QStringList splitLine = line.split( ' ' );
if ( splitLine.length() != 6 )
{
return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 };
}
return FstabEntry {
splitLine.at( 0 ), // path, or UUID, or LABEL, etc.
splitLine.at( 1 ), // mount point
splitLine.at( 2 ), // fs type
splitLine.at( 3 ), // options
splitLine.at( 4 ).toInt(), //dump
splitLine.at( 5 ).toInt() //pass
};
}
namespace Calamares
{
FstabEntryList
fromEtcFstabContents( const QStringList& fstabLines )
{
FstabEntryList fstabEntries;
for ( const QString& rawLine : fstabLines )
{
fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) );
}
const auto invalidEntries = std::remove_if(
fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } );
fstabEntries.erase( invalidEntries, fstabEntries.end() );
return fstabEntries;
}
} // namespace Calamares

View File

@ -32,11 +32,24 @@ struct FstabEntry
* If the string isn't valid (e.g. comment-line, or broken
* fstab entry) then the entry that is returned is invalid.
*/
static FstabEntry fromEtcFstab( const QString& ); // implemented in Partutils.cpp
static FstabEntry fromEtcFstab( const QString& );
};
typedef QList< FstabEntry > FstabEntryList;
namespace Calamares
{
/** @brief Returns valid entries from the lines of a fstab file */
FstabEntryList fromEtcFstabContents( const QStringList& fstabLines );
/** @brief Returns valid entries from the byte-contents of a fstab file */
inline FstabEntryList
fromEtcFstabContents( const QByteArray& contents )
{
return fromEtcFstabContents( QString::fromLocal8Bit( contents ).split( '\n' ) );
}
} // namespace Calamares
struct OsproberEntry
{
QString prettyName;

View File

@ -254,30 +254,25 @@ lookForFstabEntries( const QString& partitionPath )
if ( fstabFile.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
const QStringList fstabLines = QString::fromLocal8Bit( fstabFile.readAll() ).split( '\n' );
for ( const QString& rawLine : fstabLines )
{
fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) );
}
const auto fstabLines = QString::fromLocal8Bit( fstabFile.readAll() ).split( '\n' );
fstabFile.close();
const int lineCount = fstabEntries.count();
std::remove_if(
fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } );
cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << lineCount
const auto fstabEntries = Calamares::fromEtcFstabContents( fstabLines );
cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << fstabLines.count()
<< "lines in" << fstabFile.fileName();
return fstabEntries;
}
else
{
cWarning() << "Could not read fstab from mounted fs";
return {};
}
}
else
{
cWarning() << "Could not mount existing fs";
return {};
}
return fstabEntries;
}
static QString
@ -641,36 +636,3 @@ canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType )
}
} // namespace PartUtils
/* Implementation of methods for FstabEntry, from OsproberEntry.h */
bool
FstabEntry::isValid() const
{
return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty();
}
FstabEntry
FstabEntry::fromEtcFstab( const QString& rawLine )
{
QString line = rawLine.simplified();
if ( line.startsWith( '#' ) )
{
return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 };
}
QStringList splitLine = line.split( ' ' );
if ( splitLine.length() != 6 )
{
return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 };
}
return FstabEntry {
splitLine.at( 0 ), // path, or UUID, or LABEL, etc.
splitLine.at( 1 ), // mount point
splitLine.at( 2 ), // fs type
splitLine.at( 3 ), // options
splitLine.at( 4 ).toInt(), //dump
splitLine.at( 5 ).toInt() //pass
};
}

View File

@ -185,7 +185,6 @@ ChoicePage::init( PartitionCoreModule* core )
setModelToComboBox( m_drivesCombo, core->deviceModel() );
connect( m_drivesCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &ChoicePage::applyDeviceChoice );
connect( m_encryptWidget, &EncryptWidget::stateChanged, this, &ChoicePage::onEncryptWidgetStateChanged );
connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, this, &ChoicePage::onHomeCheckBoxStateChanged );
@ -468,6 +467,8 @@ ChoicePage::onActionChanged()
{
m_encryptWidget->setFilesystem( FileSystem::typeForName( m_replaceFsTypesChoiceComboBox->currentText() ) );
}
m_encryptWidget->setEncryptionCheckbox( m_config->preCheckEncryption() );
}
Device* currd = selectedDevice();
@ -678,9 +679,13 @@ void
ChoicePage::onLeave()
{
if ( m_config->installChoice() == InstallChoice::Alongside )
{
if ( m_afterPartitionSplitterWidget->splitPartitionSize() >= 0
&& m_afterPartitionSplitterWidget->newPartitionSize() >= 0 )
{
doAlongsideApply();
}
}
if ( m_isEfi
&& ( m_config->installChoice() == InstallChoice::Alongside
@ -1057,7 +1062,8 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice )
Q_UNUSED( path )
sizeLabel->setText(
tr( "%1 will be shrunk to %2MiB and a new "
"%3MiB partition will be created for %4.", "@info, %1 is partition name, %4 is product name" )
"%3MiB partition will be created for %4.",
"@info, %1 is partition name, %4 is product name" )
.arg( m_beforePartitionBarsView->selectionModel()->currentIndex().data().toString() )
.arg( Calamares::BytesToMiB( size ) )
.arg( Calamares::BytesToMiB( sizeNext ) )
@ -1188,14 +1194,16 @@ ChoicePage::setupEfiSystemPartitionSelector()
{
m_efiLabel->setText( tr( "An EFI system partition cannot be found anywhere "
"on this system. Please go back and use manual "
"partitioning to set up %1.", "@info, %1 is product name" )
"partitioning to set up %1.",
"@info, %1 is product name" )
.arg( Calamares::Branding::instance()->shortProductName() ) );
updateNextEnabled();
}
else if ( efiSystemPartitions.count() == 1 ) //probably most usual situation
{
m_efiLabel->setText( tr( "The EFI system partition at %1 will be used for "
"starting %2.", "@info, %1 is partition path, %2 is product name" )
"starting %2.",
"@info, %1 is partition path, %2 is product name" )
.arg( efiSystemPartitions.first()->partitionPath() )
.arg( Calamares::Branding::instance()->shortProductName() ) );
}
@ -1505,7 +1513,8 @@ ChoicePage::setupActions()
{
if ( atLeastOneIsMounted )
{
m_messageLabel->setText( tr( "This storage device has one of its partitions <strong>mounted</strong>.", "@info" ) );
m_messageLabel->setText(
tr( "This storage device has one of its partitions <strong>mounted</strong>.", "@info" ) );
}
else
{
@ -1575,7 +1584,10 @@ ChoicePage::calculateNextEnabled() const
}
}
if ( m_config->installChoice() != InstallChoice::Manual && m_encryptWidget->isVisible() )
// You can have an invisible encryption checkbox, which is
// still checked -- then do the encryption.
if ( m_config->installChoice() != InstallChoice::Manual
&& ( m_encryptWidget->isVisible() || m_encryptWidget->isEncryptionCheckboxChecked() ) )
{
switch ( m_encryptWidget->state() )
{

View File

@ -70,6 +70,18 @@ EncryptWidget::EncryptWidget( QWidget* parent )
CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate );
}
bool
EncryptWidget::isEncryptionCheckboxChecked()
{
return m_ui->m_encryptCheckBox->isChecked();
}
void
EncryptWidget::setEncryptionCheckbox( bool preCheckEncrypt )
{
m_ui->m_encryptCheckBox->setChecked( preCheckEncrypt );
}
void
EncryptWidget::reset( bool checkVisible )
{
@ -155,7 +167,8 @@ EncryptWidget::updateState( const bool notify )
else if ( m_filesystem == FileSystem::Zfs && p1.length() < ZFS_MIN_LENGTH )
{
applyPixmap( m_ui->m_iconLabel, Calamares::StatusError );
m_ui->m_iconLabel->setToolTip( tr( "Password must be a minimum of %1 characters.", "@tooltip" ).arg( ZFS_MIN_LENGTH ) );
m_ui->m_iconLabel->setToolTip(
tr( "Password must be a minimum of %1 characters.", "@tooltip" ).arg( ZFS_MIN_LENGTH ) );
}
else if ( p1 == p2 )
{
@ -169,17 +182,12 @@ EncryptWidget::updateState( const bool notify )
}
}
Encryption newState = state();
if ( newState != m_state )
{
m_state = newState;
m_state = state();
if ( notify )
{
Q_EMIT stateChanged( m_state );
}
}
}
void
EncryptWidget::onPassphraseEdited()

View File

@ -36,8 +36,10 @@ public:
explicit EncryptWidget( QWidget* parent = nullptr );
void setEncryptionCheckbox( bool preCheckEncrypt = false);
void reset( bool checkVisible = true );
bool isEncryptionCheckboxChecked();
Encryption state() const;
void setText( const QString& text );

View File

@ -65,7 +65,8 @@ ScanningDialog::run( const QFuture< void >& future,
void
ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent )
{
ScanningDialog::run( future, tr( "Scanning storage devices…", "@status" ), tr( "Partitioning…", "@status" ), callback, parent );
ScanningDialog::run(
future, tr( "Scanning storage devices…", "@status" ), tr( "Partitioning…", "@status" ), callback, parent );
}
void

View File

@ -170,11 +170,12 @@ initialSwapChoice: none
# manual partitioning, this partition table exists already on disk
# and it is left unmodified.
#
# Suggested values: gpt, msdos
# If nothing is specified, Calamares defaults to "gpt" if system is
# efi or "msdos".
# Possible values: gpt, msdos (or other names defined by KPMcore).
# Names are case-sensitive.
#
# If nothing is specified, Calamares defaults to "gpt" if system is
# efi or "msdos" otherwise.
#
# Names are case-sensitive and defined by KPMCore.
# defaultPartitionTableType: msdos
# Requirement for partition table type
@ -182,7 +183,8 @@ initialSwapChoice: none
# Restrict the installation on disks that match the type of partition
# tables that are specified.
#
# Possible values: msdos, gpt. Names are case-sensitive and defined by KPMCore.
# Possible values: msdos, gpt (or other names defined by KPMcore).
# Names are case-sensitive.
#
# If nothing is specified, Calamares defaults to both "msdos" and "gpt".
#
@ -240,6 +242,11 @@ defaultFileSystemType: "ext4"
# If nothing is specified, LUKS is enabled in automated modes.
#enableLuksAutomatedPartitioning: true
# When enableLuksAutomatedPartitioning is true, this option will pre-check
# encryption checkbox. This option is only usefull to help people to not forget
# to cypher their disk when installing in enterprise (for exemple).
#preCheckEncryption: false
# Partition layout.
#
# This optional setting specifies a custom partition layout.

View File

@ -34,6 +34,7 @@ properties:
luksGeneration: { type: string, enum: [luks1, luks2] } # Also allows "luks" as alias of "luks1"
enableLuksAutomatedPartitioning: { type: boolean, default: false }
preCheckEncryption: { type: boolean, default: false }
allowManualPartitioning: { type: boolean, default: true }
showNotEncryptedBootMessage: { type: boolean, default: true }

View File

@ -14,6 +14,12 @@ include_directories(
${CMAKE_CURRENT_BINARY_DIR}
)
set(PartitionModule_basic_SRC
${PartitionModule_SOURCE_DIR}/core/OsproberEntry.cpp
${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp
${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp
)
calamares_add_test(
partitionjobtest
SOURCES
@ -40,10 +46,9 @@ calamares_add_test(
partitioncreatelayoutstest
SOURCES
CreateLayoutsTests.cpp
${PartitionModule_basic_SRC}
${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp
${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp
${PartitionModule_SOURCE_DIR}/core/PartitionLayout.cpp
${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp
${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp
LIBRARIES calamares::kpmcore Calamares::calamaresui
DEFINITIONS ${_partition_defs}
@ -66,9 +71,8 @@ calamares_add_test(
partitionconfigtest
SOURCES
ConfigTests.cpp
${PartitionModule_basic_SRC}
${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp
${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp
${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp
${PartitionModule_SOURCE_DIR}/Config.cpp
LIBRARIES calamares::kpmcore Calamares::calamaresui
DEFINITIONS

View File

@ -9,6 +9,7 @@
#include "Config.h"
#include "core/OsproberEntry.h"
#include "core/PartUtils.h"
#include "GlobalStorage.h"
@ -17,6 +18,7 @@
#include "utils/System.h"
#include "utils/Yaml.h"
#include <QByteArray>
#include <QObject>
#include <QtTest/QtTest>
@ -35,6 +37,9 @@ private Q_SLOTS:
void testLegacySize();
void testAll();
void testWeirdConfig();
void testNormalFstab();
void testWeirdFstab();
};
ConfigTests::ConfigTests() = default;
@ -222,6 +227,48 @@ ConfigTests::testWeirdConfig()
}
}
void
ConfigTests::testNormalFstab()
{
const auto contents
= QByteArrayLiteral( "# A FreeBSD fstab\n"
"/dev/nvd0p3 none swap sw 0 0\n" );
const auto entries = Calamares::fromEtcFstabContents( contents );
for ( const auto& e : entries )
{
QVERIFY( e.isValid() );
}
QCOMPARE( entries.count(), 1 );
}
void
ConfigTests::testWeirdFstab()
{
const auto contents
= QByteArrayLiteral( "# <file system> <mount point> <type> <options> <dump> <pass>\n"
"UUID=dae80d0a-f6c7-46f4-a04a-6761f2cfd9b6 / ext4 defaults,noatime 0 1\n"
"UUID=423892d5-a929-41a9-a846-f410cf3fe25b swap swap defaults,noatime 0 2\n"
"# another comment\n"
"borked 2\n"
"ok /dev1 ext4 none 0 0\n"
"bogus /dev2 ext4 none no later\n"
"# comment\n" );
const auto entries = Calamares::fromEtcFstabContents( contents );
QCOMPARE( entries.count(), 4 );
QStringList mountPoints;
for ( const auto& e : entries )
{
mountPoints.append( e.mountPoint );
}
mountPoints.sort();
QCOMPARE( mountPoints,
QStringList() << "/"
<< "/dev1"
<< "/dev2"
<< "swap" );
}
QTEST_GUILESS_MAIN( ConfigTests )

View File

@ -51,6 +51,11 @@ DevicesTests::testKPMScanDevices()
cDebug() << "Getting devices via KPMCore";
CoreBackend* backend = CoreBackendManager::self()->backend();
#ifdef Q_OS_FREEBSD
QEXPECT_FAIL( "", "Test backend not expected on FreeBSD", Continue );
QVERIFY( backend );
return;
#endif
QVERIFY( backend );
auto devices = backend->scanDevices( ScanFlag( ~0 ) ); // These flags try to get "all"
cDebug() << Logger::SubEntry << "Done getting devices.";

View File

@ -126,7 +126,7 @@ class RawFSItem:
config["source"], device))
self.source = os.path.realpath(config["source"])
# If source is a mount point, look for the actual device mounted on it
if os.path.ismount(self.source):
if os.path.ismount(self.source) and not libcalamares.job.configuration.get("bogus", False):
procmounts = open("/proc/mounts", "r")
for line in procmounts:
if self.source in line.split():
@ -146,9 +146,10 @@ def update_global_storage(item, gs):
ret = subprocess.run(["blkid", "-s", "UUID", "-o", "value", item.destination],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
if ret.returncode == 0:
uuid = ret.stdout.rstrip()
libcalamares.utils.debug("Setting {} UUID to {}".format(item.destination,
ret.stdout.rstrip()))
gs[gs.index(partition)]["uuid"] = ret.stdout.rstrip()
uuid or "<empty>"))
gs[gs.index(partition)]["uuid"] = uuid
gs[gs.index(partition)]["source"] = item.source
libcalamares.globalstorage.remove("partitions")

View File

@ -5,8 +5,10 @@
# Special cases for rawfs tests
#
# - On FreeBSD, /proc/mounts doesn't exist (/proc is only about processes,
# and is rarely used). Expect the test to fail.
# and is rarely used). The test would fail, except it catches that
# kind of error and ends up doing nothing.
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
set_tests_properties(load-rawfs-1 PROPERTIES WILL_FAIL TRUE)
# set_tests_properties(load-rawfs-1 PROPERTIES WILL_FAIL TRUE)
message(STATUS "rawfs tests are useless on FreeBSD")
endif()

View File

@ -16,6 +16,17 @@
# of Calamares, set on the welcome page. This may not reflect the
# chosen system language from the locale page.
#
# As a special case, variables of the form `gs[key]` where `key` is
# a dotted-keys string and `gs` is literally the letters `g` and `s`,
# use **any** value from Global Storage. For example,
#
# gs[branding.bootloader]
#
# This variable refers to the GS value stored in `bootloader` in the
# `branding` map. Examine the Debug window for information about the
# keys stored in GS. Only strings and integers are exposed this way,
# lists and other data types do not set any variable this way.
#
# Variables are written as `${var}`, e.g. `${ROOT}`.
# Write `$$` to get a shell-escaped `\$` in the shell command.
# It is not possible to get an un-escaped `$` in the shell command

View File

@ -51,7 +51,6 @@ ActiveDirectoryJob::exec()
if ( !m_ip.isEmpty() )
{
const QString hostsFilePath = Calamares::System::instance()->targetPath( QStringLiteral( "/etc/hosts" ) );
;
QFile hostsFile( hostsFilePath );
if ( hostsFile.open( QIODevice::Append | QIODevice::Text ) )
{

View File

@ -209,7 +209,8 @@ WelcomePage::retranslate()
ui->mainText->setText( message.arg( Calamares::Branding::instance()->versionedName() ) );
ui->retranslateUi( this );
ui->supportButton->setText( tr( "%1 Support", "@action" ).arg( Calamares::Branding::instance()->shortProductName() ) );
ui->supportButton->setText(
tr( "%1 Support", "@action" ).arg( Calamares::Branding::instance()->shortProductName() ) );
}
void

View File

@ -35,7 +35,7 @@ paintRequirement( QPainter* painter, const QStyleOptionViewItem& option, const Q
Calamares::ImageType statusImage = Calamares::StatusOk;
painter->setPen( QColorConstants::Black );
painter->setPen( Qt::black );
if ( index.data( Calamares::RequirementsModel::Satisfied ).toBool() )
{
painter->fillRect( textRect, option.palette.window().color() );