Merge branch 'master' of https://github.com/calamares/calamares into development
This commit is contained in:
commit
d790e2489e
25
CHANGES
25
CHANGES
@ -3,10 +3,10 @@ contributors are listed. Note that Calamares does not have a historical
|
||||
changelog -- this log starts with version 3.2.0. The release notes on the
|
||||
website will have to do for older versions.
|
||||
|
||||
# 3.2.16 (unreleased) #
|
||||
# 3.2.17 (unreleased) #
|
||||
|
||||
This release contains contributions from (alphabetically by first name):
|
||||
- No other contributors this time around.
|
||||
- No external contributions.
|
||||
|
||||
## Core ##
|
||||
- No changes to core functionality
|
||||
@ -15,6 +15,27 @@ This release contains contributions from (alphabetically by first name):
|
||||
- No changes to module functionality
|
||||
|
||||
|
||||
# 3.2.16 (2019-11-01) #
|
||||
|
||||
This release contains contributions from (alphabetically by first name):
|
||||
- Bill Auger
|
||||
|
||||
## Core ##
|
||||
- Some obscure build scenarios which would lead to bogus module-is-
|
||||
misconfigured messages on startup have been resolved.
|
||||
|
||||
## Modules ##
|
||||
- The explanatory messages on the *users* page have moved to tooltips,
|
||||
and placeholder text has been added to the fields. #1202
|
||||
- The bad-password messages in the *users* page have been improved. #1261
|
||||
- Password-checking in the *users* module has been substantially
|
||||
changed. A new key *allowWeakPasswords* can be used to introduce
|
||||
an additional checkbox to the page, which can then be used to
|
||||
switch off strict password checking. (Thanks to Bill Auger)
|
||||
- The icons used in password warnings on the *users* page have been
|
||||
changed to the colorful status icons (rather than the thin red X).
|
||||
|
||||
|
||||
# 3.2.15 (2019-10-11) #
|
||||
|
||||
This release contains contributions from (alphabetically by first name):
|
||||
|
@ -40,7 +40,7 @@
|
||||
|
||||
cmake_minimum_required( VERSION 3.3 FATAL_ERROR )
|
||||
project( CALAMARES
|
||||
VERSION 3.2.16
|
||||
VERSION 3.2.17
|
||||
LANGUAGES C CXX )
|
||||
|
||||
set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development
|
||||
|
@ -3253,7 +3253,7 @@ Sortie
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
|
||||
<source>Open release notes website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ouvrir le site des notes de publication</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="182"/>
|
||||
|
@ -99,7 +99,7 @@
|
||||
<message>
|
||||
<location filename="../src/calamares/DebugWindow.ui" line="106"/>
|
||||
<source>Reload Stylesheet</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ricarica il foglio di stile</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/calamares/DebugWindow.ui" line="113"/>
|
||||
@ -210,7 +210,7 @@
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="166"/>
|
||||
<source>Waiting for %n module(s).</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>In attesa del(i) modulo(i) %n.</numerusform><numerusform>In attesa del(i) modulo(i) %n.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="167"/>
|
||||
@ -258,7 +258,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="212"/>
|
||||
<source>Would you like to paste the install log to the web?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vuoi incollare il log di installazione nel web?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="250"/>
|
||||
@ -1148,7 +1148,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="58"/>
|
||||
<source><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></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><html><head/><body><p>Quando questa casella è selezionata, il tuo computer verrà riavviato immediatamente quando clicchi su <span style="font-style:italic;">Finito</span> oppure chiudi il programma di setup.</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="66"/>
|
||||
@ -1163,7 +1163,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="133"/>
|
||||
<source><h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Installazione fallita</h1><br/>%1 non è stato installato sul tuo computer.<br/>Il messaggio di errore è: %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="139"/>
|
||||
@ -1204,12 +1204,12 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="41"/>
|
||||
<source>Format partition %1 (file system: %2, size: %3 MiB) on %4.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Formatta la partitione %1 (file system: %2, dimensione: %3 MiB) su %4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="52"/>
|
||||
<source>Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Formatta la partizione <strong>%1</strong> di dimensione <strong>%3MiB </strong> con il file system <strong>%2</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="63"/>
|
||||
@ -1298,17 +1298,17 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/IDJob.cpp" line="48"/>
|
||||
<source>Could not create directories <code>%1</code>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile creare le cartelle <code>%1</code>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/IDJob.cpp" line="60"/>
|
||||
<source>Could not open file <code>%1</code>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile aprire il file <code>%1</code>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/IDJob.cpp" line="68"/>
|
||||
<source>Could not write to file <code>%1</code>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile scrivere sul file <code>%1</code>.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1316,7 +1316,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/initcpio/InitcpioJob.cpp" line="40"/>
|
||||
<source>Creating initramfs with mkinitcpio.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sto creando initramfs con mkinitcpio.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1324,7 +1324,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/initramfs/InitramfsJob.cpp" line="37"/>
|
||||
<source>Creating initramfs.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sto creando initramfs.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1475,32 +1475,32 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="192"/>
|
||||
<source>Shows the complete license text</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mostra il testo completo della licenza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="193"/>
|
||||
<source>Hide license text</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nascondi il testo della licenza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="194"/>
|
||||
<source>Show license agreement</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mostra l'accordo di licenza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="194"/>
|
||||
<source>Hide license agreement</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nascondi l'accordo di licenza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="198"/>
|
||||
<source>Opens the license agreement in a browser window.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Apre l'accordo di licenza in una finestra del browser.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="200"/>
|
||||
<source><a href="%1">View license agreement</a></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><a href="%1">Visualizza l'accordo di licenza</a></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1556,7 +1556,7 @@ Il programma d'installazione sarà terminato e tutte le modifiche andranno
|
||||
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="156"/>
|
||||
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="164"/>
|
||||
<source>No partitions are defined.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Non è stata specificata alcuna partizione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="192"/>
|
||||
@ -2462,7 +2462,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/packagechooser/PackageModel.cpp" line="87"/>
|
||||
<source>No description provided.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Non è stata fornita alcuna descrizione.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2564,7 +2564,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="59"/>
|
||||
<source>Resize Filesystem Job</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Operazione di ridimensionamento del Filesystem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="172"/>
|
||||
@ -2574,7 +2574,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="173"/>
|
||||
<source>The file-system resize job has an invalid configuration and will not run.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>L'operazione di ridimensionamento del file-system ha una configurazione non valida e non verrà effettuata.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/>
|
||||
@ -2622,12 +2622,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="238"/>
|
||||
<source>The filesystem %1 must be resized, but cannot.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Il filesystem %1 deve essere ridimensionato, ma non è possibile farlo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="239"/>
|
||||
<source>The device %1 must be resized, but cannot</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Il dispositivo %1 deve essere ridimensionato, non è possibile farlo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2645,7 +2645,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="66"/>
|
||||
<source>Resizing %2MiB partition %1 to %3MiB.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sto ridimensionando la partizione %1 di dimensione %2MiB a %3MiB.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="85"/>
|
||||
@ -2667,12 +2667,12 @@ Output:
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="37"/>
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="55"/>
|
||||
<source>Resize volume group named %1 from %2 to %3.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ridimensiona il gruppo di volumi con nome %1 da %2 a %3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="46"/>
|
||||
<source>Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ridimensiona il gruppo di volumi con nome <strong>%1</strong> da <strong>%2</strong> a <strong>%3</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="70"/>
|
||||
@ -2685,7 +2685,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="96"/>
|
||||
<source>This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Questo computer non soddisfa i requisiti minimi per l'installazione di %1.<br/>L'installazione non può continuare. <a href="#details">Dettagli...</a></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="100"/>
|
||||
@ -2695,7 +2695,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="118"/>
|
||||
<source>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Questo computer non soddisfa alcuni requisiti raccomandati per l'installazione di %1.<br/>L'installazione può continuare, ma alcune funzionalità potrebbero essere disabilitate.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="122"/>
|
||||
@ -3230,17 +3230,17 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
|
||||
<source>Open donations website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Apri il sito web per le donazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="143"/>
|
||||
<source>&Donate</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>&Donazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="153"/>
|
||||
<source>Open help and support website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Apri il sito web per l'aiuto ed il supporto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="166"/>
|
||||
@ -3250,7 +3250,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
|
||||
<source>Open release notes website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Apri il sito web delle note di rilascio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="182"/>
|
||||
@ -3285,12 +3285,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="247"/>
|
||||
<source><h1>Welcome to the Calamares setup program for %1.</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Benvenuto nel programma di installazione Calamares di %1.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="248"/>
|
||||
<source><h1>Welcome to %1 setup.</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Benvenuto nell'installazione di %1.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="266"/>
|
||||
|
@ -1165,7 +1165,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="133"/>
|
||||
<source><h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2.</source>
|
||||
<translation><h1>セットアップに失敗しました。</h1><br/>%1 はコンピュータにセットアップされていません。<br/>エラーメッセージは次のとおりです: %2</translation>
|
||||
<translation><h1>セットアップに失敗しました。</h1><br/>%1 はコンピュータにセットアップされていません。<br/>エラーメッセージ: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/finished/FinishedPage.cpp" line="139"/>
|
||||
|
@ -135,7 +135,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamares/JobExample.cpp" line="40"/>
|
||||
<source>Programmed job failure was explicitly requested.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പ്രോഗ്രാം ചെയ്യപ്പെട്ട ജോലിയുടെ പരാജയം പ്രത്യേകമായി ആവശ്യപ്പെട്ടിരുന്നു.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -648,12 +648,12 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CommandList.cpp" line="151"/>
|
||||
<source>The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കമാൻഡ് ഹോസ്റ്റ് എൻവയോൺമെന്റിൽ പ്രവർത്തിക്കുന്നു, റൂട്ട് പാത്ത് അറിയേണ്ടതുണ്ട്, പക്ഷേ rootMountPoint നിർവചിച്ചിട്ടില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CommandList.cpp" line="164"/>
|
||||
<source>The command needs to know the user's name, but no username is defined.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കമാൻഡിന് ഉപയോക്താവിന്റെ പേര് അറിയേണ്ടതുണ്ട്,എന്നാൽ ഉപയോക്തൃനാമമൊന്നും നിർവചിച്ചിട്ടില്ല.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -661,7 +661,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/contextualprocess/ContextualProcessJob.cpp" line="123"/>
|
||||
<source>Contextual Processes Job</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>സാന്ദർഭിക പ്രക്രിയകൾ ജോലി</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -932,7 +932,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="151"/>
|
||||
<source>The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>തിരഞ്ഞെടുത്ത സ്റ്റോറേജ് ഉപകരണത്തിലെ <strong>പാർട്ടീഷൻ ടേബിളിന്റെ</strong>തരം.<br><br>പാർട്ടീഷൻ ടേബിൾ തരം മാറ്റാനുള്ള ഒരേയൊരു മാർഗ്ഗം പാർട്ടീഷൻ ടേബിൾ ആദ്യം മുതൽ മായ്ച്ചുകളയുക എന്നതാണ്,ഇത് സംഭരണ ഉപകരണത്തിലെ എല്ലാ ഡാറ്റയും നശിപ്പിക്കുന്നു.<br>നിങ്ങൾ വ്യക്തമായി തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ ഈ ഇൻസ്റ്റാളർ നിലവിലെ പാർട്ടീഷൻ ടേബിൾ സൂക്ഷിക്കും.<br>ഉറപ്പില്ലെങ്കിൽ, ആധുനിക സിസ്റ്റങ്ങളിൽ ജിപിടിയാണ് ശുപാർശ ചെയ്യുന്നത്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="108"/>
|
||||
@ -942,7 +942,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="115"/>
|
||||
<source>This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഇതൊരു <strong>ലൂപ്പ്</strong> ഉപകരണമാണ്.<br><br>ഒരു ഫയലിന്റെ ഒരു ബ്ലോക്ക് ഉപകരണമാക്കി ലഭ്യമാക്കുന്ന പാർട്ടീഷൻ ടേബിളില്ലാത്ത ഒരു കൃത്രിമ-ഉപകരണമാണിത്. ഇത്തരത്തിലുള്ള ക്രമീകരണത്തിൽ സാധാരണ ഒരൊറ്റ ഫയൽ സിസ്റ്റം മാത്രമേ കാണൂ.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="122"/>
|
||||
@ -1344,7 +1344,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="116"/>
|
||||
<source>Executing script: &nbsp;<code>%1</code></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>സ്ക്രിപ്റ്റ് നിർവ്വഹിക്കുന്നു:&nbsp;<code>%1</code></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1386,7 +1386,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="39"/>
|
||||
<source>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>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>സിസ്റ്റം ലൊക്കേൽ ഭാഷയും, കമാൻഡ് ലൈൻ സമ്പർക്കമുഖഘടകങ്ങളുടെ അക്ഷരക്കൂട്ടങ്ങളേയും സ്വാധീനിക്കും. <br/>നിലവിലുള്ള ക്രമീകരണം <strong>%1</strong> ആണ്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="63"/>
|
||||
@ -1414,22 +1414,22 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="151"/>
|
||||
<source><h1>License Agreement</h1>This setup procedure will install proprietary software that is subject to licensing terms.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>ലൈസൻസ് ഉടമ്പടി</h1>ഈ സജ്ജീകരണ നടപടിക്രമം ലൈസൻസിംഗ് നിബന്ധനകൾക്ക് വിധേയമായ കുത്തക സോഫ്റ്റ്വെയർ ഇൻസ്റ്റാൾ ചെയ്യും.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="154"/>
|
||||
<source>Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, the setup procedure cannot continue.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>മുകളിലുള്ള അന്തിമ ഉപയോക്തൃ ലൈസൻസ് കരാറുകൾ (EULAs) അവലോകനം ചെയ്യുക.<br/>നിങ്ങൾ നിബന്ധനകളോട് യോജിക്കുന്നില്ലെങ്കിൽ, സജ്ജീകരണ നടപടിക്രമം തുടരാനാവില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="158"/>
|
||||
<source><h1>License Agreement</h1>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>ലൈസൻസ് ഉടമ്പടി</h1>അധിക സവിശേഷതകൾ നൽകുന്നതിനും ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുന്നതിനും ഈ സജ്ജീകരണ നടപടിക്രമത്തിന് ലൈസൻസിംഗ് നിബന്ധനകൾക്ക് വിധേയമായ കുത്തക സോഫ്റ്റ്വെയർ ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയും.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicensePage.cpp" line="163"/>
|
||||
<source>Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>മുകളിലുള്ള അന്തിമ ഉപയോക്തൃ ലൈസൻസ് കരാറുകൾ (EULAs) അവലോകനം ചെയ്യുക.<br/>നിങ്ങൾ നിബന്ധനകളോട് യോജിക്കുന്നില്ലെങ്കിൽ, പ്രൊപ്രൈറ്ററി സോഫ്റ്റ്വെയർ ഇൻസ്റ്റാൾ ചെയ്യില്ല, പകരം ഓപ്പൺ സോഴ്സ് ഇതരമാർഗങ്ങൾ ഉപയോഗിക്കും.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1452,27 +1452,27 @@ The installer will quit and all changes will be lost.</source>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="130"/>
|
||||
<source><strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font></source>
|
||||
<extracomment>%1 is usually a vendor name, example: Nvidia graphics driver</extracomment>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1 ഗ്രാഫിക്സ് ഡ്രൈവർ</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="136"/>
|
||||
<source><strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1 ബ്രൌസർ പ്ലഗിൻ</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="142"/>
|
||||
<source><strong>%1 codec</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1 കോഡെക് </strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="148"/>
|
||||
<source><strong>%1 package</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1 പാക്കേജ് </strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="154"/>
|
||||
<source><strong>%1</strong><br/><font color="Grey">by %2</font></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1</strong><br/><font color="Grey">by %2</font></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/license/LicenseWidget.cpp" line="192"/>
|
||||
@ -1624,7 +1624,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMPage.ui" line="28"/>
|
||||
<source>Ba&tch:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കൂട്ടം (&t):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMPage.ui" line="38"/>
|
||||
@ -1634,7 +1634,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMPage.ui" line="48"/>
|
||||
<source><html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><html><head/><body><h1>OEM ക്രമീകരണം</h1><p>കലാമരേസ് ലക്ഷ്യ സിസ്റ്റം ക്രമീകരിക്കുമ്പോൾ OEM ക്രമീകരണങ്ങൾ ഉപയോഗിക്കും.</p></body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1647,7 +1647,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/oemid/OEMViewStep.cpp" line="126"/>
|
||||
<source>Set the OEM Batch Identifier to <code>%1</code>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>OEM ബാച്ച് ഐഡന്റിഫയർ <code>%1</code> ആയി ക്രമീകരിക്കുക.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1770,7 +1770,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="219"/>
|
||||
<source>The password contains less than %1 character classes</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പാസ്വേഡിൽ പ്രതീക ക്ലാസുകൾ %1 ൽ കുറവാണ്</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="220"/>
|
||||
@ -1800,12 +1800,12 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="231"/>
|
||||
<source>The password contains monotonic sequence longer than %1 characters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പാസ്വേഡിൽ %1 പ്രതീകങ്ങളേക്കാൾ ദൈർഘ്യമുള്ള മോണോടോണിക് ശ്രേണി അടങ്ങിയിരിക്കുന്നു</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="232"/>
|
||||
<source>The password contains too long of a monotonic character sequence</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പാസ്വേഡിൽ വളരെ ദൈർഘ്യമുള്ള ഒരു മോണോടോണിക് പ്രതീക ശ്രേണിയുണ്ട്</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="234"/>
|
||||
@ -1845,7 +1845,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="257"/>
|
||||
<source>Bad integer value of setting - %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ക്രമീകരണത്തിന്റെ ശരിയല്ലാത്ത സംഖ്യാമൂല്യം - %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/CheckPWQuality.cpp" line="261"/>
|
||||
@ -1987,7 +1987,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/page_usersetup.ui" line="309"/>
|
||||
<source><small>This name will be used if you make the computer visible to others on a network.</small></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><small>നിങ്ങൾ ഒരു നെറ്റ്വർക്കിൽ കമ്പ്യൂട്ടർ മറ്റുള്ളവർക്ക് ദൃശ്യമാക്കുകയാണെങ്കിൽ ഈ പേര് ഉപയോഗിക്കും.</small></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/page_usersetup.ui" line="466"/>
|
||||
@ -2007,7 +2007,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/users/page_usersetup.ui" line="601"/>
|
||||
<source><small>Enter the same password twice, so that it can be checked for typing errors.</small></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><small>ഒരേ പാസ്വേഡ് രണ്ടുതവണ നൽകുക, അതുവഴി ടൈപ്പിംഗ് പിശകുകൾ പരിശോധിക്കാൻ കഴിയും.</small></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2164,7 +2164,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="239"/>
|
||||
<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 type="unfinished"/>
|
||||
<translation>%1 ലെ പാർട്ടീഷൻ പട്ടികയിൽ ഇതിനകം %2 പ്രാഥമിക പാർട്ടീഷനുകൾ ഉണ്ട്,ഇനി ഒന്നും ചേർക്കാൻ കഴിയില്ല. പകരം ഒരു പ്രാഥമിക പാർട്ടീഷൻ നീക്കംചെയ്ത് എക്സ്ടെൻഡഡ് പാർട്ടീഷൻ ചേർക്കുക.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2182,7 +2182,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="167"/>
|
||||
<source>Install %1 <strong>alongside</strong> another operating system.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="171"/>
|
||||
@ -2197,12 +2197,12 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="180"/>
|
||||
<source><strong>Manual</strong> partitioning.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>സ്വമേധയാ</strong> ഉള്ള പാർട്ടീഷനിങ്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="193"/>
|
||||
<source>Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3).</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%2 (%3) ഡിസ്കിൽ മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="199"/>
|
||||
@ -2262,7 +2262,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="466"/>
|
||||
<source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>എൻക്രിപ്റ്റ് ചെയ്ത ഒരു റൂട്ട് പാർട്ടീഷനോടൊപ്പം ഒരു വേർപെടുത്തിയ ബൂട്ട് പാർട്ടീഷനും ക്രമീകരിക്കപ്പെട്ടിരുന്നു, എന്നാൽ ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യപ്പെട്ടതല്ല.<br/><br/>ഇത്തരം സജ്ജീകരണത്തിന്റെ സുരക്ഷ ഉത്കണ്ഠാജനകമാണ്, എന്തെന്നാൽ പ്രധാനപ്പെട്ട സിസ്റ്റം ഫയലുകൾ ഒരു എൻക്രിപ്റ്റ് ചെയ്യപ്പെടാത്ത പാർട്ടീഷനിലാണ് സൂക്ഷിച്ചിട്ടുള്ളത്.<br/> താങ്കൾക്ക് വേണമെങ്കിൽ തുടരാം, പക്ഷേ ഫയൽ സിസ്റ്റം തുറക്കൽ സിസ്റ്റം ആരംഭപ്രക്രിയയിൽ വൈകിയേ സംഭവിക്കൂ.<br/>ബൂട്ട് പാർട്ടീഷൻ എൻക്രിപ്റ്റ് ചെയ്യാനായി, തിരിച്ചു പോയി പാർട്ടീഷൻ നിർമ്മാണ ജാലകത്തിൽ <strong>എൻക്രിപ്റ്റ്</strong> തിരഞ്ഞെടുത്തുകൊണ്ട് അത് വീണ്ടും നിർമ്മിക്കുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="650"/>
|
||||
@ -2280,13 +2280,13 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="41"/>
|
||||
<source>Plasma Look-and-Feel Job</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പ്ലാസ്മ കെട്ടും മട്ടും ജോലി</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="73"/>
|
||||
<location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="74"/>
|
||||
<source>Could not select KDE Plasma Look-and-Feel package</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കെഡിഇ പ്ലാസ്മ കെട്ടും മട്ടും പാക്കേജ് തിരഞ്ഞെടുക്കാനായില്ല</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2299,12 +2299,12 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="70"/>
|
||||
<source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കെഡിഇ പ്ലാസ്മ ഡെസ്ക്ടോപ്പിനായി ഒരു കെട്ടും മട്ടും തിരഞ്ഞെടുക്കുക.നിങ്ങൾക്ക് ഈ ഘട്ടം ഇപ്പോൾ ഒഴിവാക്കി സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്തതിനു ശേഷവും കെട്ടും മട്ടും ക്രമീരകരിക്കാൻ കഴിയും.ഒരു കെട്ടും മട്ടും തിരഞ്ഞെടുക്കലിൽ ക്ലിക്കുചെയ്യുന്നത് ആ കെട്ടും മട്ടിന്റെയും തത്സമയ പ്രിവ്യൂ നൽകും.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="76"/>
|
||||
<source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കെഡിഇ പ്ലാസ്മ ഡെസ്ക്ടോപ്പിനായി ഒരു കെട്ടും മട്ടും തിരഞ്ഞെടുക്കുക.നിങ്ങൾക്ക് ഈ ഘട്ടം ഇപ്പോൾ ഒഴിവാക്കി സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്തതിനു ശേഷവും കെട്ടും മട്ടും ക്രമീരകരിക്കാൻ കഴിയും </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2312,7 +2312,7 @@ The installer will quit and all changes will be lost.</source>
|
||||
<message>
|
||||
<location filename="../src/modules/plasmalnf/PlasmaLnfViewStep.cpp" line="68"/>
|
||||
<source>Look-and-Feel</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കെട്ടും മട്ടും</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2354,7 +2354,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="412"/>
|
||||
<source>External command crashed.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ബാഹ്യമായ ആജ്ഞ തകർന്നു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="413"/>
|
||||
@ -2364,12 +2364,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="418"/>
|
||||
<source>External command failed to start.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ബാഹ്യമായ ആജ്ഞ ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="419"/>
|
||||
<source>Command <i>%1</i> failed to start.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><i>%1</i>ആജ്ഞ ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="423"/>
|
||||
@ -2379,27 +2379,27 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="424"/>
|
||||
<source>Bad parameters for process job call.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പ്രക്രിയ ജോലി വിളിയ്ക്ക് ശരിയല്ലാത്ത പരാമീറ്ററുകൾ.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="428"/>
|
||||
<source>External command failed to finish.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ബാഹ്യമായ ആജ്ഞ പൂർത്തിയാവുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="429"/>
|
||||
<source>Command <i>%1</i> failed to finish in %2 seconds.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ആജ്ഞ <i>%1</i> %2 സെക്കൻഡുകൾക്കുള്ളിൽ പൂർത്തിയാവുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="436"/>
|
||||
<source>External command finished with errors.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ബാഹ്യമായ ആജ്ഞ പിഴവുകളോട് കൂടീ പൂർത്തിയായി.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="437"/>
|
||||
<source>Command <i>%1</i> finished with exit code %2.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ആജ്ഞ <i>%1</i> എക്സിറ്റ് കോഡ് %2ഓട് കൂടി പൂർത്തിയായി.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2423,7 +2423,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/KPMHelpers.cpp" line="209"/>
|
||||
<source>extended</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>വിസ്തൃതമായത്</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/KPMHelpers.cpp" line="211"/>
|
||||
@ -2566,7 +2566,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="59"/>
|
||||
<source>Resize Filesystem Job</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫയൽ സിസ്റ്റത്തിന്റെ വലുപ്പം മാറ്റുന്ന ജോലി</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="172"/>
|
||||
@ -2576,19 +2576,19 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="173"/>
|
||||
<source>The file-system resize job has an invalid configuration and will not run.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫയൽ സിസ്റ്റം വലുപ്പം മാറ്റുന്ന ജോലിയിൽ അസാധുവായ ക്രമീകരണം ഉണ്ട്, അത് പ്രവർത്തിക്കില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="197"/>
|
||||
<source>KPMCore not Available</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KPMCore ലഭ്യമല്ല</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="188"/>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="198"/>
|
||||
<source>Calamares cannot start KPMCore for the file-system resize job.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫയൽ സിസ്റ്റം വലുപ്പം മാറ്റുന്നതിനുള്ള ജോലിക്കായി കാലാമറസിന് KPMCore ആരംഭിക്കാൻ കഴിയില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/>
|
||||
@ -2597,39 +2597,39 @@ Output:
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="237"/>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="254"/>
|
||||
<source>Resize Failed</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>വലുപ്പം മാറ്റുന്നത് പരാജയപ്പെട്ടു</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="207"/>
|
||||
<source>The filesystem %1 could not be found in this system, and cannot be resized.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫയൽ സിസ്റ്റം %1 ഈ സിസ്റ്റത്തിൽ കണ്ടെത്താനായില്ല, അതിനാൽ അതിന്റെ വലുപ്പം മാറ്റാനാവില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="208"/>
|
||||
<source>The device %1 could not be found in this system, and cannot be resized.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഉപകരണം %1 ഈ സിസ്റ്റത്തിൽ കണ്ടെത്താനായില്ല, അതിനാൽ അതിന്റെ വലുപ്പം മാറ്റാനാവില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="216"/>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="229"/>
|
||||
<source>The filesystem %1 cannot be resized.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 എന്ന ഫയൽസിസ്റ്റത്തിന്റെ വലുപ്പം മാറ്റാൻ കഴിയില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="217"/>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="230"/>
|
||||
<source>The device %1 cannot be resized.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 ഉപകരണത്തിന്റെ വലുപ്പം മാറ്റാൻ കഴിയില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="238"/>
|
||||
<source>The filesystem %1 must be resized, but cannot.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 എന്ന ഫയൽസിസ്റ്റത്തിന്റെ വലുപ്പം മാറ്റണം, പക്ഷേ കഴിയില്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="239"/>
|
||||
<source>The device %1 must be resized, but cannot</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 ഉപകരണത്തിന്റെ വലുപ്പം മാറ്റണം, പക്ഷേ കഴിയില്ല</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2637,22 +2637,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="48"/>
|
||||
<source>Resize partition %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 പാർട്ടീഷന്റെ വലുപ്പം മാറ്റുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="55"/>
|
||||
<source>Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1</strong> എന്ന <strong>%2MiB</strong> പാർട്ടീഷന്റെ വലുപ്പം <strong>%3Mib</strong>യിലേക്ക് മാറ്റുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="66"/>
|
||||
<source>Resizing %2MiB partition %1 to %3MiB.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 എന്ന %2MiB പാർട്ടീഷന്റെ വലുപ്പം %3Mibയിലേക്ക് മാറ്റുന്നു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="85"/>
|
||||
<source>The installer failed to resize partition %1 on disk '%2'.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>'%2' ഡിസ്കിലുള്ള %1 പാർട്ടീഷന്റെ വലുപ്പം മാറ്റുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2669,17 +2669,17 @@ Output:
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="37"/>
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="55"/>
|
||||
<source>Resize volume group named %1 from %2 to %3.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം %2ൽ നിന്നും %3ലേക്ക് മാറ്റുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="46"/>
|
||||
<source>Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1</strong> എന്ന് പേരുള്ള വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം <strong>%2</strong>ൽ നിന്നും <strong>%3</strong>ലേക്ക് മാറ്റുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="70"/>
|
||||
<source>The installer failed to resize a volume group named '%1'.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>'%1' എന്ന് പേരുള്ള ഒരു വോള്യം ഗ്രൂപ്പിന്റെ വലുപ്പം മാറ്റുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2712,7 +2712,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="181"/>
|
||||
<source>For best results, please ensure that this computer:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>മികച്ച ഫലങ്ങൾക്കായി ഈ കമ്പ്യൂട്ടർ താഴെപ്പറയുന്നവ നിറവേറ്റുന്നു എന്നുറപ്പുവരുത്തുക:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="209"/>
|
||||
@ -2760,7 +2760,7 @@ Output:
|
||||
<location filename="../src/modules/users/SetHostNameJob.cpp" line="76"/>
|
||||
<location filename="../src/modules/users/SetHostNameJob.cpp" line="87"/>
|
||||
<source>Cannot write hostname to target system</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ടാർഗെറ്റ് സിസ്റ്റത്തിലേക്ക് ഹോസ്റ്റ്നാമം എഴുതാൻ കഴിയില്ല</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2768,12 +2768,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="59"/>
|
||||
<source>Set keyboard model to %1, layout to %2-%3</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കീബോർഡ് മാതൃക %1 ആയി ക്രമീകരിക്കുക, രൂപരേഖ %2-%3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="321"/>
|
||||
<source>Failed to write keyboard configuration for the virtual console.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>വിർച്വൽ കൺസോളിനായുള്ള കീബോർഡ് ക്രമീകരണം എഴുതുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="322"/>
|
||||
@ -2785,12 +2785,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="325"/>
|
||||
<source>Failed to write keyboard configuration for X11.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>X11 നായി കീബോർഡ് കോൺഫിഗറേഷൻ എഴുതുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="331"/>
|
||||
<source>Failed to write keyboard configuration to existing /etc/default directory.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>നിലവിലുള്ള /etc/default ഡയറക്ടറിയിലേക്ക് കീബോർഡ് കോൺഫിഗറേഷൻ എഴുതുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2823,17 +2823,17 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="85"/>
|
||||
<source>Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1MiB <strong>%2</strong> പാർട്ടീഷൻ <strong>%3</strong> ആയി ഫ്ലാഗ് ചെയ്യുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="107"/>
|
||||
<source>Clearing flags on %1MiB <strong>%2</strong> partition.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫ്ലാഗുകൾ %1MiB <strong>%2</strong> പാർട്ടീഷനിൽ നിർമ്മിക്കുന്നു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="121"/>
|
||||
<source>Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%3</strong> ഫ്ലാഗുകൾ %1MiB <strong>%2</strong> പാർട്ടീഷനിൽ ക്രമീകരിക്കുന്നു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/>
|
||||
@ -2843,12 +2843,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="79"/>
|
||||
<source>Flag partition <strong>%1</strong> as <strong>%2</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1</strong> പാർട്ടീഷനെ <strong>%2</strong> ആയി ഫ്ലാഗ് ചെയ്യുക</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="91"/>
|
||||
<source>Flag new partition as <strong>%1</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പുതിയ പാർട്ടീഷൻ <strong>%1 </strong>ആയി ഫ്ലാഗുചെയ്യുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="103"/>
|
||||
@ -2863,12 +2863,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="115"/>
|
||||
<source>Setting flags <strong>%2</strong> on partition <strong>%1</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%2</strong> ഫ്ലാഗുകൾ <strong>%1</strong> പാർട്ടീഷനിൽ ക്രമീകരിക്കുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="127"/>
|
||||
<source>Setting flags <strong>%1</strong> on new partition.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><strong>%1</strong> ഫ്ലാഗുകൾ പുതിയ പാർട്ടീഷനിൽ ക്രമീകരിക്കുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="144"/>
|
||||
@ -2891,12 +2891,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="112"/>
|
||||
<source>Bad destination system path.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ലക്ഷ്യത്തിന്റെ സിസ്റ്റം പാത്ത് തെറ്റാണ്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="113"/>
|
||||
<source>rootMountPoint is %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>rootMountPoint %1 ആണ്</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="123"/>
|
||||
@ -2906,7 +2906,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="124"/>
|
||||
<source>passwd terminated with error code %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>passwd പിഴവ് കോഡ് %1 ഓട് കൂടീ അവസാനിച്ചു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="139"/>
|
||||
@ -2916,7 +2916,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="141"/>
|
||||
<source>usermod terminated with error code %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>usermod പിഴവ് കോഡ് %1 ഓട് കൂടീ അവസാനിച്ചു.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2924,17 +2924,17 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="43"/>
|
||||
<source>Set timezone to %1/%2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1%2 എന്നതിലേക്ക് സമയപദ്ധതി ക്രമീകരിക്കുക</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="71"/>
|
||||
<source>Cannot access selected timezone path.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>തിരഞ്ഞെടുത്ത സമയപദ്ധതി പാത്ത് ലഭ്യമല്ല.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="72"/>
|
||||
<source>Bad path: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>മോശമായ പാത്ത്: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="80"/>
|
||||
@ -2944,7 +2944,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="81"/>
|
||||
<source>Link creation failed, target: %1; link name: %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>കണ്ണി ഉണ്ടാക്കൽ പരാജയപ്പെട്ടു, ലക്ഷ്യം: %1, കണ്ണിയുടെ പേര്: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="86"/>
|
||||
@ -2962,7 +2962,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="50"/>
|
||||
<source>Shell Processes Job</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഷെൽ പ്രക്രിയകൾ ജോലി</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2971,7 +2971,7 @@ Output:
|
||||
<location filename="../src/qml/calamares/slideshow/SlideCounter.qml" line="36"/>
|
||||
<source>%L1 / %L2</source>
|
||||
<extracomment>slide counter, %1 of %2 (numeric)</extracomment>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%L1 / %L2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2984,7 +2984,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/summary/SummaryPage.cpp" line="60"/>
|
||||
<source>This is an overview of what will happen once you start the install procedure.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>നിങ്ങൾ ഇൻസ്റ്റാൾ നടപടിക്രമങ്ങൾ ആരംഭിച്ചുകഴിഞ്ഞാൽ എന്ത് സംഭവിക്കും എന്നതിന്റെ ഒരു അവലോകനമാണിത്.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3010,12 +3010,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="71"/>
|
||||
<source>Internal error in install-tracking.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഇൻസ്റ്റാൾ-പിന്തുടരുന്നതിൽ ആന്തരികമായ പിഴവ്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="72"/>
|
||||
<source>HTTP request timed out.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>HTTP അപേക്ഷയുടെ സമയപരിധി കഴിഞ്ഞു.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3023,28 +3023,28 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="80"/>
|
||||
<source>Machine feedback</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="92"/>
|
||||
<source>Configuring machine feedback.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം ക്രമീകരിക്കുന്നു.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="117"/>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="123"/>
|
||||
<source>Error in machine feedback configuration.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണത്തിന്റെ ക്രമീകരണത്തിൽ പിഴവ്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="118"/>
|
||||
<source>Could not configure machine feedback correctly, script error %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം ശരിയായി ക്രമീകരിക്കാനായില്ല. സ്ക്രിപ്റ്റ് പിഴവ് %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="124"/>
|
||||
<source>Could not configure machine feedback correctly, Calamares error %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഉപകരണത്തിൽ നിന്നുള്ള പ്രതികരണം ശരിയായി ക്രമീകരിക്കാനായില്ല. കലാമാരേസ് പിഴവ് %1.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3057,22 +3057,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="24"/>
|
||||
<source>Placeholder</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>പ്ലേസ്ഹോൾഡർ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="72"/>
|
||||
<source><html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><html><head/><body><p>ഇത് തിരഞ്ഞെടുക്കുന്നതിലൂടെ, നിങ്ങളുടെ ഇൻസ്റ്റാളേഷനെക്കുറിച്ച് <span style=" font-weight:600;">ഒരു വിവരവും നിങ്ങൾ അയയ്ക്കില്ല.</span></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="271"/>
|
||||
<source><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">ഉപയോക്തൃ ഫീഡ്ബാക്കിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് ഇവിടെ ക്ലിക്കുചെയ്യുക</span></a></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="44"/>
|
||||
<source>Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>എത്ര ഉപയോക്താക്കളുണ്ട് ,ഏത് ഹാർഡ്വെയറിലാണ് %1 ഇൻസ്റ്റാൾ ചെയ്യുന്നത് (ചുവടെയുള്ള അവസാന രണ്ടു ഓപ്ഷനുകൾക്കൊപ്പം) കൂടാതെ നിങ്ങൾ മുന്ഗണന നൽകുന്ന പ്രയോഗങ്ങളെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുന്നതിന് %1 ഇൻസ്റ്റാൾ ട്രാക്കിംഗ് സഹായിക്കുന്നു.എന്താണ് അയയ്ക്കുന്നതെന്ന് കാണാൻ, ഓരോ ഭാഗത്തിനും അടുത്തുള്ള സഹായ ഐക്കണിൽ ക്ലിക്കുചെയ്യുക.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="49"/>
|
||||
@ -3082,7 +3082,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="51"/>
|
||||
<source>By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഇത് തിരഞ്ഞെടുക്കുന്നതിലൂടെ താങ്കൾ <b>ഇടയ്ക്കിടെ</b>താങ്കളുടെ ഇൻസ്റ്റളേഷനെയും ഹാർഡ്വെയറിനെയും പ്രയോഗങ്ങളേയും പറ്റിയുള്ള വിവരങ്ങൾ %1ന് അയച്ചുകൊടുക്കും.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/TrackingPage.cpp" line="54"/>
|
||||
@ -3173,7 +3173,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="20"/>
|
||||
<source>List of Physical Volumes</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫിസിക്കൽ വോള്യങ്ങളുടെ പട്ടിക</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="30"/>
|
||||
@ -3188,7 +3188,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="56"/>
|
||||
<source>Physical Extent Size:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ഫിസിക്കൽ എക്സ്റ്റന്റ് വലുപ്പം:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="66"/>
|
||||
@ -3213,7 +3213,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="142"/>
|
||||
<source>Quantity of LVs:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>LVകളുടെ അളവ്:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3307,7 +3307,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="269"/>
|
||||
<source><h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>%1</h1><br/><strong>%2<br/>%3 ന്</strong><br/><br/>പകർപ്പവകാശം 2015-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>പകർപ്പവകാശം 2018-2019 Adriaan de Groot &lt;groot@kde.org&gt;<br/><a href="https://calamares.io/team/">കലാമരേസ് ടീമിനും</a><a href="https://www.transifex.com/calamares/calamares/">കലാമരേസ് പരിഭാഷാ ടീമിനും</a> നന്ദി.<br/><br/><a href="https://calamares.io/">കലാമരേസ്</a>വികസനം <br/><a href="http://www.blue-systems.com/">Blue Systems</a>- Liberating Software സ്പോൺസർ ചെയ്യുന്നതാണ്.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="259"/>
|
||||
|
@ -4,17 +4,17 @@
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
|
||||
<source>The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode.</source>
|
||||
<translation>Systemets <strong>uppstartsmiljö</strong>.<br><br>Äldre x86-system stödjer endast <strong>BIOS</strong>.<br>Moderna system stödjer vanligen <strong>EFI</strong>, men kan också vara i kompabilitetsläge för BIOS.</translation>
|
||||
<translation>Systemets <strong>startmiljö</strong>.<br><br>Äldre x86-system stöder endast <strong>BIOS</strong>.<br>Moderna system stöder vanligen <strong>EFI</strong>, men kan också vara i kompatibilitetsläge för BIOS.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="81"/>
|
||||
<source>This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source>
|
||||
<translation>Detta system startades med en <strong>EFI-miljö</strong>.<br><br>För att ställa in uppstart från en EFI-miljö måste en uppstartsladdare användas, t.ex. <strong>GRUB</strong> eller <strong>systemd-boot</strong> eller en <strong>EFI-systempartition</strong>. Detta sker automatiskt, såvida du inte väljer att partitionera manuellt. Då måste du själv installera en uppstartsladdare.</translation>
|
||||
<translation>Detta system startades med en <strong>EFI-miljö</strong>.<br><br>För att ställa in start från en EFI-miljö måste en starthanterare användas, t.ex. <strong>GRUB</strong> eller <strong>systemd-boot</strong> på en <strong>EFI-systempartition</strong>. Detta sker automatiskt, såvida du inte väljer att partitionera manuellt. Då måste du själv installera en starthanterare.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="93"/>
|
||||
<source>This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.</source>
|
||||
<translation>Detta system startades med en <strong>BIOS-miljö</strong>. <br><br>För att ställa in uppstart från en BIOS-miljö måste en uppstartsladdare som t.ex. <strong>GRUB</strong> installeras, antingen i början av en partition eller på <strong>huvudstartsektorn (MBR)</strong> i början av partitionstabellen. Detta sker automatiskt, såvida du inte väljer manuell partitionering. Då måste du själv installera en uppstartsladdare.</translation>
|
||||
<translation>Detta system startades med en <strong>BIOS-miljö</strong>. <br><br>För att ställa in start från en BIOS-miljö måste en starthanterare som t.ex. <strong>GRUB</strong> installeras, antingen i början av en partition eller på <strong>huvudstartsektorn (MBR)</strong> i början av partitionstabellen. Detta sker automatiskt, såvida du inte väljer manuell partitionering. Då måste du själv installera en starthanterare.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -27,7 +27,7 @@
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="104"/>
|
||||
<source>Boot Partition</source>
|
||||
<translation>Uppstartspartition</translation>
|
||||
<translation>Startpartition</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="109"/>
|
||||
@ -37,7 +37,7 @@
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="139"/>
|
||||
<source>Do not install a boot loader</source>
|
||||
<translation>Installera inte en uppstartsladdare</translation>
|
||||
<translation>Installera inte någon starthanterare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="156"/>
|
||||
@ -210,12 +210,12 @@
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="166"/>
|
||||
<source>Waiting for %n module(s).</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Väntar på %n modul(er).</numerusform><numerusform>Väntar på %n modul(er).</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="167"/>
|
||||
<source>(%n second(s))</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>(%n sekund(er))</numerusform><numerusform>(%n sekund(er))</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="172"/>
|
||||
@ -273,7 +273,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="269"/>
|
||||
<source>Calamares Initialization Failed</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Initieringen av Calamares misslyckades</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="270"/>
|
||||
@ -283,7 +283,7 @@
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="276"/>
|
||||
<source><br/>The following modules could not be loaded:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><br/>Följande moduler kunde inte hämtas:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="337"/>
|
||||
@ -363,7 +363,7 @@ Alla ändringar kommer att gå förlorade.</translation>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="342"/>
|
||||
<source>The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong></source>
|
||||
<translation>%1-installeraren är på väg att göra ändringar för att installera %2.<br/><strong>Du kommer inte att kunna ångra dessa ändringar!strong></translation>
|
||||
<translation>%1-installeraren är på väg att göra ändringar för att installera %2.<br/><strong>Du kommer inte att kunna ångra dessa ändringar.</strong></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libcalamaresui/ViewManager.cpp" line="345"/>
|
||||
@ -474,7 +474,7 @@ Alla ändringar kommer att gå förlorade.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1024"/>
|
||||
<source>Boot loader location:</source>
|
||||
<translation>Sökväg till uppstartshanterare:</translation>
|
||||
<translation>Sökväg till starthanterare:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="152"/>
|
||||
@ -522,7 +522,7 @@ Alla ändringar kommer att gå förlorade.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1146"/>
|
||||
<source>EFI system partition:</source>
|
||||
<translation>EFI system partition:</translation>
|
||||
<translation>EFI-partition:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1264"/>
|
||||
@ -988,7 +988,7 @@ Alla ändringar kommer att gå förlorade.</translation>
|
||||
<message>
|
||||
<location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="149"/>
|
||||
<source>Failed to open %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kunde inte öppna %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2637,12 +2637,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="55"/>
|
||||
<source>Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ändra <strong>%2MiB</strong>-partitionen <strong>%1</strong> till <strong>%3MB</strong>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="66"/>
|
||||
<source>Resizing %2MiB partition %1 to %3MiB.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ändrar storlek på partitionen %1 från %2MB till %3MB.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="85"/>
|
||||
@ -2682,7 +2682,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="96"/>
|
||||
<source>This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Datorn uppfyller inte minimikraven för inställning av %1.<br/>Inga inställningar kan inte göras. <a href="#details">Detaljer...</a></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="100"/>
|
||||
@ -2692,7 +2692,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="118"/>
|
||||
<source>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Några av kraven för inställning av %1 uppfylls inte av datorn.<br/>Inställningarna kan ändå göras men vissa funktioner kommer kanske inte att kunna användas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="122"/>
|
||||
@ -2785,7 +2785,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="331"/>
|
||||
<source>Failed to write keyboard configuration to existing /etc/default directory.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Misslyckades med att skriva tangentbordskonfiguration till den existerande mappen /etc/default.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2901,7 +2901,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="124"/>
|
||||
<source>passwd terminated with error code %1.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>passwd stoppades med felkod %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/SetPasswordJob.cpp" line="139"/>
|
||||
@ -3052,7 +3052,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="24"/>
|
||||
<source>Placeholder</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Platshållare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/tracking/page_trackingstep.ui" line="72"/>
|
||||
@ -3098,12 +3098,12 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/users/UsersPage.cpp" line="120"/>
|
||||
<source><small>If more than one person will use this computer, you can create multiple accounts after setup.</small></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><small>Om mer än en person skall använda datorn så kan du skapa flera användarkonton när inställningarna är klara.</small></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/UsersPage.cpp" line="126"/>
|
||||
<source><small>If more than one person will use this computer, you can create multiple accounts after installation.</small></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><small>Om mer än en person skall använda datorn så kan du skapa flera användarkonton när installationen är klar.</small></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/users/UsersPage.cpp" line="317"/>
|
||||
@ -3134,7 +3134,7 @@ Output:
|
||||
<location filename="../src/modules/users/UsersPage.cpp" line="401"/>
|
||||
<location filename="../src/modules/users/UsersPage.cpp" line="445"/>
|
||||
<source>Your passwords do not match!</source>
|
||||
<translation>Dina lösenord matchar inte!</translation>
|
||||
<translation>Lösenorden överensstämmer inte!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -3150,7 +3150,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/calamares/VariantModel.cpp" line="241"/>
|
||||
<source>Key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nyckel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/calamares/VariantModel.cpp" line="245"/>
|
||||
@ -3237,22 +3237,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="153"/>
|
||||
<source>Open help and support website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Besök webbplatsen för hjälp och support</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="166"/>
|
||||
<source>Open issues and bug-tracking website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Besök webbplatsen för problem och felsökning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
|
||||
<source>Open release notes website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Besök webbplatsen för versionsinformation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="182"/>
|
||||
<source>&Release notes</source>
|
||||
<translation>Versionsinfomation</translation>
|
||||
<translation>Versionsinformation, &R</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="169"/>
|
||||
@ -3262,22 +3262,22 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="156"/>
|
||||
<source>&Support</source>
|
||||
<translation>%Support</translation>
|
||||
<translation>&Support</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="130"/>
|
||||
<source>&About</source>
|
||||
<translation>Om</translation>
|
||||
<translation>Om, &A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="254"/>
|
||||
<source><h1>Welcome to the %1 installer.</h1></source>
|
||||
<translation><h1>V&auml;lkommen till %1-installeraren.</h1></translation>
|
||||
<translation><h1>Välkommen till %1-installeraren.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="253"/>
|
||||
<source><h1>Welcome to the Calamares installer for %1.</h1></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><h1>Välkommen till installationsprogrammet Calamares för %1.</h1></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="247"/>
|
||||
@ -3292,7 +3292,7 @@ Output:
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="266"/>
|
||||
<source>About %1 setup</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Om inställningarna för %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.cpp" line="266"/>
|
||||
|
@ -3257,7 +3257,7 @@ Kuruluma devam edebilirsiniz fakat bazı özellikler devre dışı kalabilir.</t
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
|
||||
<source>Open release notes website</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sürüm Notları web sitesini aç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/modules/welcome/WelcomePage.ui" line="182"/>
|
||||
|
Binary file not shown.
@ -92,11 +92,11 @@ msgstr ""
|
||||
|
||||
#: src/modules/umount/main.py:40
|
||||
msgid "Unmount file systems."
|
||||
msgstr "ファイルシステムをアンマウントする。"
|
||||
msgstr "ファイルシステムをアンマウント。"
|
||||
|
||||
#: src/modules/unpackfs/main.py:41
|
||||
msgid "Filling up filesystems."
|
||||
msgstr "ファイルシステムを埋める。"
|
||||
msgstr "ファイルシステムに書き込んでいます。"
|
||||
|
||||
#: src/modules/unpackfs/main.py:160
|
||||
msgid "rsync failed with error code {}."
|
||||
@ -201,7 +201,7 @@ msgstr "ディスプレイマネージャの設定が不完全です"
|
||||
|
||||
#: src/modules/initcpiocfg/main.py:36
|
||||
msgid "Configuring mkinitcpio."
|
||||
msgstr "mkinitcpioを設定中"
|
||||
msgstr "mkinitcpioを設定しています。"
|
||||
|
||||
#: src/modules/initcpiocfg/main.py:192
|
||||
#: src/modules/luksopenswaphookcfg/main.py:100
|
||||
@ -213,7 +213,7 @@ msgstr " <pre>{!s}</pre> を使用するのにルートマウントポイント
|
||||
|
||||
#: src/modules/luksopenswaphookcfg/main.py:35
|
||||
msgid "Configuring encrypted swap."
|
||||
msgstr "暗号化したswapを設定中"
|
||||
msgstr "暗号化したswapを設定しています。"
|
||||
|
||||
#: src/modules/rawfs/main.py:35
|
||||
msgid "Installing data."
|
||||
@ -274,7 +274,7 @@ msgstr "machine-id の生成"
|
||||
#: src/modules/packages/main.py:62
|
||||
#, python-format
|
||||
msgid "Processing packages (%(count)d / %(total)d)"
|
||||
msgstr "パッケージの処理中 (%(count)d / %(total)d)"
|
||||
msgstr "パッケージを処理しています (%(count)d / %(total)d)"
|
||||
|
||||
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
|
||||
msgid "Install packages."
|
||||
@ -284,13 +284,13 @@ msgstr "パッケージのインストール"
|
||||
#, python-format
|
||||
msgid "Installing one package."
|
||||
msgid_plural "Installing %(num)d packages."
|
||||
msgstr[0] " %(num)d パッケージのインストール中。"
|
||||
msgstr[0] " %(num)d パッケージをインストールしています。"
|
||||
|
||||
#: src/modules/packages/main.py:70
|
||||
#, python-format
|
||||
msgid "Removing one package."
|
||||
msgid_plural "Removing %(num)d packages."
|
||||
msgstr[0] " %(num)d パッケージの削除中。"
|
||||
msgstr[0] " %(num)d パッケージを削除しています。"
|
||||
|
||||
#: src/modules/bootloader/main.py:51
|
||||
msgid "Install bootloader."
|
||||
@ -306,7 +306,7 @@ msgstr "ハードウェアクロックの設定"
|
||||
|
||||
#: src/modules/dracut/main.py:36
|
||||
msgid "Creating initramfs with dracut."
|
||||
msgstr "dracutとinitramfsを作成中"
|
||||
msgstr "dracutとinitramfsを作成しています。"
|
||||
|
||||
#: src/modules/dracut/main.py:58
|
||||
msgid "Failed to run dracut on the target"
|
||||
@ -318,15 +318,15 @@ msgstr "停止コードは {} でした"
|
||||
|
||||
#: src/modules/initramfscfg/main.py:41
|
||||
msgid "Configuring initramfs."
|
||||
msgstr "initramfsを設定中"
|
||||
msgstr "initramfsを設定しています。"
|
||||
|
||||
#: src/modules/openrcdmcryptcfg/main.py:34
|
||||
msgid "Configuring OpenRC dmcrypt service."
|
||||
msgstr "OpenRC dmcryptサービスを設定中"
|
||||
msgstr "OpenRC dmcryptサービスを設定しています。"
|
||||
|
||||
#: src/modules/fstab/main.py:38
|
||||
msgid "Writing fstab."
|
||||
msgstr "fstabを書き込み中"
|
||||
msgstr "fstabを書き込んでいます。"
|
||||
|
||||
#: src/modules/dummypython/main.py:44
|
||||
msgid "Dummy python job."
|
||||
@ -338,8 +338,8 @@ msgstr "Dummy python step {}"
|
||||
|
||||
#: src/modules/localecfg/main.py:39
|
||||
msgid "Configuring locales."
|
||||
msgstr "ローカルを設定中"
|
||||
msgstr "ロケールを設定しています。"
|
||||
|
||||
#: src/modules/networkcfg/main.py:37
|
||||
msgid "Saving network configuration."
|
||||
msgstr "ネットワーク設定を保存中"
|
||||
msgstr "ネットワーク設定を保存しています。"
|
||||
|
Binary file not shown.
@ -5,7 +5,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# André Marcelo Alvarenga <alvarenga@kde.org>, 2019
|
||||
# Guilherme Marçal Silva <guimarcalsilva@gmail.com>, 2019
|
||||
# Guilherme <guimarcalsilva@gmail.com>, 2019
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@ -14,7 +14,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-09-15 21:54+0200\n"
|
||||
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
|
||||
"Last-Translator: Guilherme Marçal Silva <guimarcalsilva@gmail.com>, 2019\n"
|
||||
"Last-Translator: Guilherme <guimarcalsilva@gmail.com>, 2019\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
Binary file not shown.
@ -3,6 +3,9 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Jan-Olof Svensson, 2019
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@ -10,6 +13,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-09-15 21:54+0200\n"
|
||||
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
|
||||
"Last-Translator: Jan-Olof Svensson, 2019\n"
|
||||
"Language-Team: Swedish (https://www.transifex.com/calamares/teams/20061/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -208,7 +212,7 @@ msgstr ""
|
||||
|
||||
#: src/modules/rawfs/main.py:35
|
||||
msgid "Installing data."
|
||||
msgstr ""
|
||||
msgstr "Installerar data."
|
||||
|
||||
#: src/modules/services-openrc/main.py:38
|
||||
msgid "Configure OpenRC services"
|
||||
@ -268,21 +272,21 @@ msgstr ""
|
||||
|
||||
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
|
||||
msgid "Install packages."
|
||||
msgstr ""
|
||||
msgstr "Installera paket."
|
||||
|
||||
#: src/modules/packages/main.py:67
|
||||
#, python-format
|
||||
msgid "Installing one package."
|
||||
msgid_plural "Installing %(num)d packages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Installerar ett paket."
|
||||
msgstr[1] "Installerar %(num)d paket."
|
||||
|
||||
#: src/modules/packages/main.py:70
|
||||
#, python-format
|
||||
msgid "Removing one package."
|
||||
msgid_plural "Removing %(num)d packages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Tar bort ett paket."
|
||||
msgstr[1] "Tar bort %(num)d paket."
|
||||
|
||||
#: src/modules/bootloader/main.py:51
|
||||
msgid "Install bootloader."
|
||||
@ -294,7 +298,7 @@ msgstr ""
|
||||
|
||||
#: src/modules/hwclock/main.py:35
|
||||
msgid "Setting hardware clock."
|
||||
msgstr ""
|
||||
msgstr "Ställer hårdvaruklockan."
|
||||
|
||||
#: src/modules/dracut/main.py:36
|
||||
msgid "Creating initramfs with dracut."
|
||||
@ -318,7 +322,7 @@ msgstr ""
|
||||
|
||||
#: src/modules/fstab/main.py:38
|
||||
msgid "Writing fstab."
|
||||
msgstr ""
|
||||
msgstr "Skriver fstab."
|
||||
|
||||
#: src/modules/dummypython/main.py:44
|
||||
msgid "Dummy python job."
|
||||
|
@ -75,26 +75,6 @@ setButtonIcon( QPushButton* button, const QString& name )
|
||||
}
|
||||
}
|
||||
|
||||
/** @brief Creates a button with a given icon-name
|
||||
*
|
||||
* Creates a new button as child of @p parent.
|
||||
* Sets the named icon, if it exists, onto the button.
|
||||
* Returns the new button.
|
||||
*
|
||||
* There is a QPushButton constructor that takes an icon,
|
||||
* but it also needs a text and we've got translations
|
||||
* to worry about as well as state.
|
||||
*/
|
||||
static inline QPushButton*
|
||||
makeButton( QWidget* parent, const QString& name, const QString& label )
|
||||
{
|
||||
QPushButton* button = new QPushButton( parent );
|
||||
button->setObjectName( name );
|
||||
button->setText( label );
|
||||
setButtonIcon( button, name );
|
||||
return button;
|
||||
}
|
||||
|
||||
ViewManager::ViewManager( QObject* parent )
|
||||
: QObject( parent )
|
||||
, m_currentStep( 0 )
|
||||
@ -110,9 +90,12 @@ ViewManager::ViewManager( QObject* parent )
|
||||
mainLayout->addWidget( m_stack );
|
||||
|
||||
// Create buttons and sets an initial icon; the icons may change
|
||||
m_back = makeButton( m_widget, QStringLiteral( "go-previous" ), tr( "&Back" ) );
|
||||
m_next = makeButton( m_widget, QStringLiteral( "go-next" ), tr( "&Next" ) );
|
||||
m_quit = makeButton( m_widget, QStringLiteral( "dialog-cancel" ), tr( "&Cancel" ) );
|
||||
m_back = new QPushButton( getButtonIcon( QStringLiteral( "go-previous" ) ), tr( "&Back" ), m_widget );
|
||||
m_back->setObjectName( "view-button-back" );
|
||||
m_next = new QPushButton( getButtonIcon( QStringLiteral( "go-next" ) ), tr( "&Next" ), m_widget );
|
||||
m_next->setObjectName( "view-button-next" );
|
||||
m_quit = new QPushButton( getButtonIcon( QStringLiteral( "dialog-cancel" ) ), tr( "&Cancel" ), m_widget );
|
||||
m_quit->setObjectName( "view-button-cancel" );
|
||||
|
||||
CALAMARES_RETRANSLATE_SLOT( &ViewManager::updateButtonLabels )
|
||||
|
||||
|
Binary file not shown.
@ -5,7 +5,7 @@
|
||||
#
|
||||
# Translators:
|
||||
# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatic4@gmail.com>, 2017
|
||||
# Guilherme Marçal Silva <guimarcalsilva@gmail.com>, 2018
|
||||
# Guilherme <guimarcalsilva@gmail.com>, 2018
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
@ -14,7 +14,7 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-09-15 21:54+0200\n"
|
||||
"PO-Revision-Date: 2016-12-16 12:18+0000\n"
|
||||
"Last-Translator: Guilherme Marçal Silva <guimarcalsilva@gmail.com>, 2018\n"
|
||||
"Last-Translator: Guilherme <guimarcalsilva@gmail.com>, 2018\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -32,12 +32,12 @@
|
||||
|
||||
PasswordCheck::PasswordCheck()
|
||||
: m_message()
|
||||
, m_accept( []( const QString& ){ return true; } )
|
||||
, m_accept( []( const QString& ) { return true; } )
|
||||
{
|
||||
}
|
||||
|
||||
PasswordCheck::PasswordCheck( const QString& m, AcceptFunc a )
|
||||
: m_message( [m](){ return m; } )
|
||||
: m_message( [m]() { return m; } )
|
||||
, m_accept( a )
|
||||
{
|
||||
}
|
||||
@ -52,21 +52,14 @@ DEFINE_CHECK_FUNC( minLength )
|
||||
{
|
||||
int minLength = -1;
|
||||
if ( value.canConvert( QVariant::Int ) )
|
||||
{
|
||||
minLength = value.toInt();
|
||||
}
|
||||
if ( minLength > 0 )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "minLength set to" << minLength;
|
||||
checks.push_back(
|
||||
PasswordCheck(
|
||||
[]()
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "Password is too short" );
|
||||
},
|
||||
[minLength]( const QString& s )
|
||||
{
|
||||
return s.length() >= minLength;
|
||||
}
|
||||
) );
|
||||
checks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is too short" ); },
|
||||
[minLength]( const QString& s ) { return s.length() >= minLength; } ) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,21 +67,14 @@ DEFINE_CHECK_FUNC( maxLength )
|
||||
{
|
||||
int maxLength = -1;
|
||||
if ( value.canConvert( QVariant::Int ) )
|
||||
{
|
||||
maxLength = value.toInt();
|
||||
}
|
||||
if ( maxLength > 0 )
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "maxLength set to" << maxLength;
|
||||
checks.push_back(
|
||||
PasswordCheck(
|
||||
[]()
|
||||
{
|
||||
return QCoreApplication::translate("PWQ", "Password is too long" );
|
||||
},
|
||||
[maxLength]( const QString& s )
|
||||
{
|
||||
return s.length() <= maxLength;
|
||||
}
|
||||
) );
|
||||
checks.push_back( PasswordCheck( []() { return QCoreApplication::translate( "PWQ", "Password is too long" ); },
|
||||
[maxLength]( const QString& s ) { return s.length() <= maxLength; } ) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,15 +87,17 @@ DEFINE_CHECK_FUNC( maxLength )
|
||||
*/
|
||||
|
||||
/// @brief Handle libpwquality using void* to represent a long
|
||||
static inline long mungeLong( void* p )
|
||||
static inline long
|
||||
mungeLong( void* p )
|
||||
{
|
||||
return static_cast<long>( reinterpret_cast<intptr_t>( p ) );
|
||||
return static_cast< long >( reinterpret_cast< intptr_t >( p ) );
|
||||
}
|
||||
|
||||
/// @brief Handle libpwquality using void* to represent a char*
|
||||
static inline const char* mungeString( void* p )
|
||||
static inline const char*
|
||||
mungeString( void* p )
|
||||
{
|
||||
return reinterpret_cast<const char*>( p );
|
||||
return reinterpret_cast< const char* >( p );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -128,16 +116,10 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
~PWSettingsHolder()
|
||||
{
|
||||
pwquality_free_settings( m_settings );
|
||||
}
|
||||
~PWSettingsHolder() { pwquality_free_settings( m_settings ); }
|
||||
|
||||
/// Sets an option via the configuration string @p v, <key>=<value> style.
|
||||
int set( const QString& v )
|
||||
{
|
||||
return pwquality_set_option( m_settings, v.toUtf8().constData() );
|
||||
}
|
||||
int set( const QString& v ) { return pwquality_set_option( m_settings, v.toUtf8().constData() ); }
|
||||
|
||||
/// Checks the given password @p pwd against the current configuration
|
||||
int check( const QString& pwd )
|
||||
@ -148,10 +130,7 @@ public:
|
||||
return r;
|
||||
}
|
||||
|
||||
bool hasExplanation() const
|
||||
{
|
||||
return m_rv < 0;
|
||||
}
|
||||
bool hasExplanation() const { return m_rv < 0; }
|
||||
|
||||
/* This is roughly the same as the function pwquality_strerror,
|
||||
* only with QStrings instead, and using the Qt translation scheme.
|
||||
@ -164,16 +143,21 @@ public:
|
||||
m_auxerror = nullptr;
|
||||
|
||||
if ( m_rv >= arbitrary_minimum_strength )
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
if ( m_rv >= 0 )
|
||||
return QCoreApplication::translate( "PWQ", "Password is too weak" );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "Password is too weak" );
|
||||
}
|
||||
|
||||
switch ( m_rv )
|
||||
{
|
||||
case PWQ_ERROR_MEM_ALLOC:
|
||||
if ( auxerror )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" ).arg( mungeString( auxerror ) );
|
||||
QString s = QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
}
|
||||
@ -189,58 +173,94 @@ public:
|
||||
case PWQ_ERROR_USER_CHECK:
|
||||
return QCoreApplication::translate( "PWQ", "The password contains the user name in some form" );
|
||||
case PWQ_ERROR_GECOS_CHECK:
|
||||
return QCoreApplication::translate( "PWQ", "The password contains words from the real name of the user in some form" );
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains words from the real name of the user in some form" );
|
||||
case PWQ_ERROR_BAD_WORDS:
|
||||
return QCoreApplication::translate( "PWQ", "The password contains forbidden words in some form" );
|
||||
case PWQ_ERROR_MIN_DIGITS:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 digits" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 digits" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few digits" );
|
||||
case PWQ_ERROR_MIN_UPPERS:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 uppercase letters" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 uppercase letters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few uppercase letters" );
|
||||
case PWQ_ERROR_MIN_LOWERS:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 lowercase letters" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 lowercase letters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few lowercase letters" );
|
||||
case PWQ_ERROR_MIN_OTHERS:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 non-alphanumeric characters" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"The password contains less than %1 non-alphanumeric characters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too few non-alphanumeric characters" );
|
||||
case PWQ_ERROR_MIN_LENGTH:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password is shorter than %1 characters" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password is shorter than %1 characters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password is too short" );
|
||||
case PWQ_ERROR_ROTATED:
|
||||
return QCoreApplication::translate( "PWQ", "The password is just rotated old one" );
|
||||
case PWQ_ERROR_MIN_CLASSES:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 character classes" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ", "The password contains less than %1 character classes" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password does not contain enough character classes" );
|
||||
case PWQ_ERROR_MAX_CONSECUTIVE:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains more than %1 same characters consecutively" ).arg( mungeLong( auxerror ) );
|
||||
{
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"The password contains more than %1 same characters consecutively" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too many same characters consecutively" );
|
||||
case PWQ_ERROR_MAX_CLASS_REPEAT:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains more than %1 characters of the same class consecutively" ).arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too many characters of the same class consecutively" );
|
||||
{
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains more than %1 characters of the same class consecutively" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains too many characters of the same class consecutively" );
|
||||
case PWQ_ERROR_MAX_SEQUENCE:
|
||||
if ( auxerror )
|
||||
return QCoreApplication::translate( "PWQ", "The password contains monotonic sequence longer than %1 characters" ).arg( mungeLong( auxerror ) );
|
||||
return QCoreApplication::translate( "PWQ", "The password contains too long of a monotonic character sequence" );
|
||||
{
|
||||
return QCoreApplication::translate(
|
||||
"PWQ", "The password contains monotonic sequence longer than %1 characters" )
|
||||
.arg( mungeLong( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"The password contains too long of a monotonic character sequence" );
|
||||
case PWQ_ERROR_EMPTY_PASSWORD:
|
||||
return QCoreApplication::translate( "PWQ", "No password supplied" );
|
||||
case PWQ_ERROR_RNG:
|
||||
return QCoreApplication::translate( "PWQ", "Cannot obtain random numbers from the RNG device" );
|
||||
case PWQ_ERROR_GENERATION_FAILED:
|
||||
return QCoreApplication::translate( "PWQ", "Password generation failed - required entropy too low for settings" );
|
||||
return QCoreApplication::translate( "PWQ",
|
||||
"Password generation failed - required entropy too low for settings" );
|
||||
case PWQ_ERROR_CRACKLIB_CHECK:
|
||||
if ( auxerror )
|
||||
{
|
||||
/* Here the string comes from cracklib, don't free? */
|
||||
return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" ).arg( mungeString( auxerror ) );
|
||||
return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
}
|
||||
return QCoreApplication::translate( "PWQ", "The password fails the dictionary check" );
|
||||
case PWQ_ERROR_UNKNOWN_SETTING:
|
||||
@ -254,7 +274,8 @@ public:
|
||||
case PWQ_ERROR_INTEGER:
|
||||
if ( auxerror )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ).arg( mungeString( auxerror ) );
|
||||
QString s = QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
}
|
||||
@ -262,7 +283,8 @@ public:
|
||||
case PWQ_ERROR_NON_INT_SETTING:
|
||||
if ( auxerror )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ).arg( mungeString( auxerror ) );
|
||||
QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
}
|
||||
@ -270,7 +292,8 @@ public:
|
||||
case PWQ_ERROR_NON_STR_SETTING:
|
||||
if ( auxerror )
|
||||
{
|
||||
QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ).arg( mungeString( auxerror ) );
|
||||
QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" )
|
||||
.arg( mungeString( auxerror ) );
|
||||
free( auxerror );
|
||||
return s;
|
||||
}
|
||||
@ -290,7 +313,7 @@ private:
|
||||
pwquality_settings_t* m_settings;
|
||||
int m_rv;
|
||||
void* m_auxerror;
|
||||
} ;
|
||||
};
|
||||
|
||||
DEFINE_CHECK_FUNC( libpwquality )
|
||||
{
|
||||
@ -302,7 +325,7 @@ DEFINE_CHECK_FUNC( libpwquality )
|
||||
|
||||
QVariantList l = value.toList();
|
||||
unsigned int requirement_count = 0;
|
||||
auto settings = std::make_shared<PWSettingsHolder>();
|
||||
auto settings = std::make_shared< PWSettingsHolder >();
|
||||
for ( const auto& v : l )
|
||||
{
|
||||
if ( v.type() == QVariant::String )
|
||||
@ -310,7 +333,9 @@ DEFINE_CHECK_FUNC( libpwquality )
|
||||
QString option = v.toString();
|
||||
int r = settings->set( option );
|
||||
if ( r )
|
||||
{
|
||||
cWarning() << "unrecognized libpwquality setting" << option;
|
||||
}
|
||||
else
|
||||
{
|
||||
cDebug() << Logger::SubEntry << "libpwquality setting" << option;
|
||||
@ -318,28 +343,27 @@ DEFINE_CHECK_FUNC( libpwquality )
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cWarning() << "unrecognized libpwquality setting" << v;
|
||||
}
|
||||
}
|
||||
|
||||
/* Something actually added? */
|
||||
if ( requirement_count )
|
||||
{
|
||||
checks.push_back(
|
||||
PasswordCheck(
|
||||
[settings]()
|
||||
{
|
||||
return settings->explanation();
|
||||
},
|
||||
[settings]( const QString& s )
|
||||
{
|
||||
int r = settings->check( s );
|
||||
if ( r < 0 )
|
||||
cWarning() << "libpwquality error" << r;
|
||||
else if ( r < settings->arbitrary_minimum_strength )
|
||||
cDebug() << "Password strength" << r << "too low";
|
||||
return r >= settings->arbitrary_minimum_strength;
|
||||
}
|
||||
) );
|
||||
checks.push_back( PasswordCheck( [settings]() { return settings->explanation(); },
|
||||
[settings]( const QString& s ) {
|
||||
int r = settings->check( s );
|
||||
if ( r < 0 )
|
||||
{
|
||||
cWarning() << "libpwquality error" << r;
|
||||
}
|
||||
else if ( r < settings->arbitrary_minimum_strength )
|
||||
{
|
||||
cDebug() << "Password strength" << r << "too low";
|
||||
}
|
||||
return r >= settings->arbitrary_minimum_strength;
|
||||
} ) );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -35,8 +35,8 @@ class PasswordCheck
|
||||
{
|
||||
public:
|
||||
/** Return true if the string is acceptable. */
|
||||
using AcceptFunc = std::function<bool( const QString& )>;
|
||||
using MessageFunc = std::function<QString()>;
|
||||
using AcceptFunc = std::function< bool( const QString& ) >;
|
||||
using MessageFunc = std::function< QString() >;
|
||||
|
||||
/** Generate a @p message if @p filter returns true */
|
||||
PasswordCheck( MessageFunc message, AcceptFunc filter );
|
||||
@ -50,17 +50,14 @@ public:
|
||||
* according to this filter. Returns a message describing
|
||||
* what is wrong if not.
|
||||
*/
|
||||
QString filter( const QString& s ) const
|
||||
{
|
||||
return m_accept( s ) ? QString() : m_message();
|
||||
}
|
||||
QString filter( const QString& s ) const { return m_accept( s ) ? QString() : m_message(); }
|
||||
|
||||
private:
|
||||
MessageFunc m_message;
|
||||
AcceptFunc m_accept;
|
||||
} ;
|
||||
};
|
||||
|
||||
using PasswordCheckList = QVector<PasswordCheck>;
|
||||
using PasswordCheckList = QVector< PasswordCheck >;
|
||||
|
||||
/* Each of these functions adds a check (if possible) to the list
|
||||
* of checks; they use the configuration value(s) from the
|
||||
@ -68,16 +65,14 @@ using PasswordCheckList = QVector<PasswordCheck>;
|
||||
* may skip adding a check, and do nothing (it should log
|
||||
* an error, though).
|
||||
*/
|
||||
#define _xDEFINE_CHECK_FUNC(x) \
|
||||
add_check_##x( PasswordCheckList& checks, const QVariant& value )
|
||||
#define DEFINE_CHECK_FUNC(x) void _xDEFINE_CHECK_FUNC(x)
|
||||
#define DECLARE_CHECK_FUNC(x) void _xDEFINE_CHECK_FUNC(x);
|
||||
#define _xDEFINE_CHECK_FUNC( x ) add_check_##x( PasswordCheckList& checks, const QVariant& value )
|
||||
#define DEFINE_CHECK_FUNC( x ) void _xDEFINE_CHECK_FUNC( x )
|
||||
#define DECLARE_CHECK_FUNC( x ) void _xDEFINE_CHECK_FUNC( x );
|
||||
|
||||
DECLARE_CHECK_FUNC(minLength)
|
||||
DECLARE_CHECK_FUNC(maxLength)
|
||||
DECLARE_CHECK_FUNC( minLength )
|
||||
DECLARE_CHECK_FUNC( maxLength )
|
||||
#ifdef HAVE_LIBPWQUALITY
|
||||
DECLARE_CHECK_FUNC(libpwquality)
|
||||
DECLARE_CHECK_FUNC( libpwquality )
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -19,10 +19,10 @@
|
||||
|
||||
#include <CreateUserJob.h>
|
||||
|
||||
#include "JobQueue.h"
|
||||
#include "GlobalStorage.h"
|
||||
#include "utils/Logger.h"
|
||||
#include "JobQueue.h"
|
||||
#include "utils/CalamaresUtilsSystem.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QDir>
|
||||
@ -72,17 +72,20 @@ CreateUserJob::exec()
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
QDir destDir( gs->value( "rootMountPoint" ).toString() );
|
||||
|
||||
if ( gs->contains( "sudoersGroup" ) &&
|
||||
!gs->value( "sudoersGroup" ).toString().isEmpty() )
|
||||
if ( gs->contains( "sudoersGroup" ) && !gs->value( "sudoersGroup" ).toString().isEmpty() )
|
||||
{
|
||||
QFileInfo sudoersFi( destDir.absoluteFilePath( "etc/sudoers.d/10-installer" ) );
|
||||
|
||||
if ( !sudoersFi.absoluteDir().exists() )
|
||||
{
|
||||
return Calamares::JobResult::error( tr( "Sudoers dir is not writable." ) );
|
||||
}
|
||||
|
||||
QFile sudoersFile( sudoersFi.absoluteFilePath() );
|
||||
if (!sudoersFile.open( QIODevice::WriteOnly | QIODevice::Text ) )
|
||||
if ( !sudoersFile.open( QIODevice::WriteOnly | QIODevice::Text ) )
|
||||
{
|
||||
return Calamares::JobResult::error( tr( "Cannot create sudoers file for writing." ) );
|
||||
}
|
||||
|
||||
QString sudoersGroup = gs->value( "sudoersGroup" ).toString();
|
||||
|
||||
@ -96,11 +99,12 @@ CreateUserJob::exec()
|
||||
QFileInfo groupsFi( destDir.absoluteFilePath( "etc/group" ) );
|
||||
QFile groupsFile( groupsFi.absoluteFilePath() );
|
||||
if ( !groupsFile.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
||||
{
|
||||
return Calamares::JobResult::error( tr( "Cannot open groups file for reading." ) );
|
||||
}
|
||||
QString groupsData = QString::fromLocal8Bit( groupsFile.readAll() );
|
||||
QStringList groupsLines = groupsData.split( '\n' );
|
||||
for ( QStringList::iterator it = groupsLines.begin();
|
||||
it != groupsLines.end(); ++it )
|
||||
for ( QStringList::iterator it = groupsLines.begin(); it != groupsLines.end(); ++it )
|
||||
{
|
||||
int indexOfFirstToDrop = it->indexOf( ':' );
|
||||
it->truncate( indexOfFirstToDrop );
|
||||
@ -108,15 +112,13 @@ CreateUserJob::exec()
|
||||
|
||||
foreach ( const QString& group, m_defaultGroups )
|
||||
if ( !groupsLines.contains( group ) )
|
||||
CalamaresUtils::System::instance()->
|
||||
targetEnvCall( { "groupadd", group } );
|
||||
CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", group } );
|
||||
|
||||
QString defaultGroups = m_defaultGroups.join( ',' );
|
||||
if ( m_autologin )
|
||||
{
|
||||
QString autologinGroup;
|
||||
if ( gs->contains( "autologinGroup" ) &&
|
||||
!gs->value( "autologinGroup" ).toString().isEmpty() )
|
||||
if ( gs->contains( "autologinGroup" ) && !gs->value( "autologinGroup" ).toString().isEmpty() )
|
||||
{
|
||||
autologinGroup = gs->value( "autologinGroup" ).toString();
|
||||
CalamaresUtils::System::instance()->targetEnvCall( { "groupadd", autologinGroup } );
|
||||
@ -131,26 +133,20 @@ CreateUserJob::exec()
|
||||
QDir existingHome( destDir.absolutePath() + shellFriendlyHome );
|
||||
if ( existingHome.exists() )
|
||||
{
|
||||
QString backupDirName = "dotfiles_backup_" +
|
||||
QDateTime::currentDateTime()
|
||||
.toString( "yyyy-MM-dd_HH-mm-ss" );
|
||||
QString backupDirName = "dotfiles_backup_" + QDateTime::currentDateTime().toString( "yyyy-MM-dd_HH-mm-ss" );
|
||||
existingHome.mkdir( backupDirName );
|
||||
|
||||
CalamaresUtils::System::instance()->
|
||||
targetEnvCall( { "sh",
|
||||
"-c",
|
||||
"mv -f " +
|
||||
shellFriendlyHome + "/.* " +
|
||||
shellFriendlyHome + "/" +
|
||||
backupDirName
|
||||
} );
|
||||
CalamaresUtils::System::instance()->targetEnvCall(
|
||||
{ "sh", "-c", "mv -f " + shellFriendlyHome + "/.* " + shellFriendlyHome + "/" + backupDirName } );
|
||||
}
|
||||
}
|
||||
|
||||
QStringList useradd{ "useradd", "-m", "-U" };
|
||||
QStringList useradd { "useradd", "-m", "-U" };
|
||||
QString shell = gs->value( "userShell" ).toString();
|
||||
if ( !shell.isEmpty() )
|
||||
{
|
||||
useradd << "-s" << shell;
|
||||
}
|
||||
useradd << "-c" << m_fullName;
|
||||
useradd << m_userName;
|
||||
|
||||
@ -161,8 +157,8 @@ CreateUserJob::exec()
|
||||
return commandResult.explainProcess( useradd, std::chrono::seconds( 10 ) /* bogus timeout */ );
|
||||
}
|
||||
|
||||
commandResult = CalamaresUtils::System::instance()->targetEnvCommand(
|
||||
{ "usermod", "-aG", defaultGroups, m_userName } );
|
||||
commandResult
|
||||
= CalamaresUtils::System::instance()->targetEnvCommand( { "usermod", "-aG", defaultGroups, m_userName } );
|
||||
if ( commandResult.getExitCode() )
|
||||
{
|
||||
cError() << "usermod failed" << commandResult.getExitCode();
|
||||
@ -171,8 +167,7 @@ CreateUserJob::exec()
|
||||
|
||||
QString userGroup = QString( "%1:%2" ).arg( m_userName ).arg( m_userName );
|
||||
QString homeDir = QString( "/home/%1" ).arg( m_userName );
|
||||
commandResult = CalamaresUtils::System::instance()->targetEnvCommand(
|
||||
{ "chown", "-R", userGroup, homeDir } );
|
||||
commandResult = CalamaresUtils::System::instance()->targetEnvCommand( { "chown", "-R", userGroup, homeDir } );
|
||||
if ( commandResult.getExitCode() )
|
||||
{
|
||||
cError() << "chown failed" << commandResult.getExitCode();
|
||||
|
@ -27,10 +27,7 @@ class CreateUserJob : public Calamares::Job
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CreateUserJob( const QString& userName,
|
||||
const QString& fullName,
|
||||
bool autologin,
|
||||
const QStringList& defaultGroups );
|
||||
CreateUserJob( const QString& userName, const QString& fullName, bool autologin, const QStringList& defaultGroups );
|
||||
QString prettyName() const override;
|
||||
QString prettyDescription() const override;
|
||||
QString prettyStatusMessage() const override;
|
||||
|
@ -24,13 +24,9 @@
|
||||
|
||||
QTEST_GUILESS_MAIN( PasswordTests )
|
||||
|
||||
PasswordTests::PasswordTests()
|
||||
{
|
||||
}
|
||||
PasswordTests::PasswordTests() {}
|
||||
|
||||
PasswordTests::~PasswordTests()
|
||||
{
|
||||
}
|
||||
PasswordTests::~PasswordTests() {}
|
||||
|
||||
void
|
||||
PasswordTests::initTestCase()
|
||||
@ -41,7 +37,7 @@ void
|
||||
PasswordTests::testSalt()
|
||||
{
|
||||
QString s = SetPasswordJob::make_salt( 8 );
|
||||
QCOMPARE( s.length(), 4 + 8 ); // 8 salt chars, plus $6$, plus trailing $
|
||||
QCOMPARE( s.length(), 4 + 8 ); // 8 salt chars, plus $6$, plus trailing $
|
||||
QVERIFY( s.startsWith( "$6$" ) );
|
||||
QVERIFY( s.endsWith( '$' ) );
|
||||
qDebug() << "Obtained salt" << s;
|
||||
|
@ -21,11 +21,11 @@
|
||||
#include "SetHostNameJob.h"
|
||||
|
||||
#include "GlobalStorage.h"
|
||||
#include "utils/Logger.h"
|
||||
#include "JobQueue.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
|
||||
SetHostNameJob::SetHostNameJob( const QString& hostname )
|
||||
: Calamares::Job()
|
||||
@ -33,7 +33,8 @@ SetHostNameJob::SetHostNameJob( const QString& hostname )
|
||||
{
|
||||
}
|
||||
|
||||
QString SetHostNameJob::prettyName() const
|
||||
QString
|
||||
SetHostNameJob::prettyName() const
|
||||
{
|
||||
return tr( "Set hostname %1" ).arg( m_hostname );
|
||||
}
|
||||
@ -52,7 +53,8 @@ SetHostNameJob::prettyStatusMessage() const
|
||||
return tr( "Setting hostname %1." ).arg( m_hostname );
|
||||
}
|
||||
|
||||
Calamares::JobResult SetHostNameJob::exec()
|
||||
Calamares::JobResult
|
||||
SetHostNameJob::exec()
|
||||
{
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
|
||||
@ -90,11 +92,21 @@ Calamares::JobResult SetHostNameJob::exec()
|
||||
// We also need to write the appropriate entries for /etc/hosts
|
||||
QTextStream hostsfileout( &hostsfile );
|
||||
// ipv4 support
|
||||
hostsfileout << "127.0.0.1" << "\t" << "localhost" << "\n";
|
||||
hostsfileout << "127.0.1.1" << "\t" << m_hostname << "\n";
|
||||
hostsfileout << "127.0.0.1"
|
||||
<< "\t"
|
||||
<< "localhost"
|
||||
<< "\n";
|
||||
hostsfileout << "127.0.1.1"
|
||||
<< "\t" << m_hostname << "\n";
|
||||
// ipv6 support
|
||||
hostsfileout << "::1" << "\t" << "localhost ip6-localhost ip6-loopback" << "\n";
|
||||
hostsfileout << "ff02::1 ip6-allnodes" << "\n" << "ff02::2 ip6-allrouters" << "\n";
|
||||
hostsfileout << "::1"
|
||||
<< "\t"
|
||||
<< "localhost ip6-localhost ip6-loopback"
|
||||
<< "\n";
|
||||
hostsfileout << "ff02::1 ip6-allnodes"
|
||||
<< "\n"
|
||||
<< "ff02::2 ip6-allrouters"
|
||||
<< "\n";
|
||||
hostsfile.close();
|
||||
|
||||
return Calamares::JobResult::ok();
|
||||
|
@ -31,9 +31,10 @@ public:
|
||||
QString prettyDescription() const override;
|
||||
QString prettyStatusMessage() const override;
|
||||
Calamares::JobResult exec() override;
|
||||
|
||||
private:
|
||||
const QString m_hostname;
|
||||
};
|
||||
|
||||
|
||||
#endif // SETHOSTNAMEJOB_CPP_H
|
||||
#endif // SETHOSTNAMEJOB_CPP_H
|
||||
|
@ -19,10 +19,10 @@
|
||||
|
||||
#include <SetPasswordJob.h>
|
||||
|
||||
#include "JobQueue.h"
|
||||
#include "GlobalStorage.h"
|
||||
#include "utils/Logger.h"
|
||||
#include "JobQueue.h"
|
||||
#include "utils/CalamaresUtilsSystem.h"
|
||||
#include "utils/Logger.h"
|
||||
|
||||
#include <QDir>
|
||||
|
||||
@ -58,29 +58,27 @@ SetPasswordJob::prettyStatusMessage() const
|
||||
|
||||
/// Returns a modular hashing salt for method 6 (SHA512) with a 16 character random salt.
|
||||
QString
|
||||
SetPasswordJob::make_salt(int length)
|
||||
SetPasswordJob::make_salt( int length )
|
||||
{
|
||||
Q_ASSERT(length >= 8);
|
||||
Q_ASSERT(length <= 128);
|
||||
Q_ASSERT( length >= 8 );
|
||||
Q_ASSERT( length <= 128 );
|
||||
|
||||
static const char salt_chars[] = {
|
||||
'.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
|
||||
'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
|
||||
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
|
||||
's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
|
||||
static const char salt_chars[] = { '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
|
||||
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
||||
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
|
||||
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
|
||||
|
||||
static_assert( sizeof(salt_chars) == 64, "Missing salt_chars");
|
||||
static_assert( sizeof( salt_chars ) == 64, "Missing salt_chars" );
|
||||
|
||||
std::random_device r;
|
||||
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
|
||||
std::mt19937_64 twister(seed);
|
||||
std::seed_seq seed { r(), r(), r(), r(), r(), r(), r(), r() };
|
||||
std::mt19937_64 twister( seed );
|
||||
|
||||
std::uint64_t next;
|
||||
int current_length = 0;
|
||||
|
||||
QString salt_string;
|
||||
salt_string.reserve(length + 10);
|
||||
salt_string.reserve( length + 10 );
|
||||
|
||||
while ( current_length < length )
|
||||
{
|
||||
@ -89,11 +87,13 @@ SetPasswordJob::make_salt(int length)
|
||||
// to a single salt character.
|
||||
for ( unsigned int char_count = 0; char_count < 10; ++char_count )
|
||||
{
|
||||
char c = salt_chars[next & 0b0111111];
|
||||
char c = salt_chars[ next & 0b0111111 ];
|
||||
next >>= 6;
|
||||
salt_string.append( c );
|
||||
if (++current_length >= length)
|
||||
if ( ++current_length >= length )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,34 +112,21 @@ SetPasswordJob::exec()
|
||||
return Calamares::JobResult::error( tr( "Bad destination system path." ),
|
||||
tr( "rootMountPoint is %1" ).arg( destDir.absolutePath() ) );
|
||||
|
||||
if ( m_userName == "root" &&
|
||||
m_newPassword.isEmpty() ) //special case for disabling root account
|
||||
if ( m_userName == "root" && m_newPassword.isEmpty() ) //special case for disabling root account
|
||||
{
|
||||
int ec = CalamaresUtils::System::instance()->
|
||||
targetEnvCall( { "passwd",
|
||||
"-dl",
|
||||
m_userName } );
|
||||
int ec = CalamaresUtils::System::instance()->targetEnvCall( { "passwd", "-dl", m_userName } );
|
||||
if ( ec )
|
||||
return Calamares::JobResult::error( tr( "Cannot disable root account." ),
|
||||
tr( "passwd terminated with error code %1." )
|
||||
.arg( ec ) );
|
||||
tr( "passwd terminated with error code %1." ).arg( ec ) );
|
||||
return Calamares::JobResult::ok();
|
||||
}
|
||||
|
||||
QString encrypted = QString::fromLatin1(
|
||||
crypt( m_newPassword.toUtf8(),
|
||||
make_salt( 16 ).toUtf8() ) );
|
||||
QString encrypted = QString::fromLatin1( crypt( m_newPassword.toUtf8(), make_salt( 16 ).toUtf8() ) );
|
||||
|
||||
int ec = CalamaresUtils::System::instance()->
|
||||
targetEnvCall( { "usermod",
|
||||
"-p",
|
||||
encrypted,
|
||||
m_userName } );
|
||||
int ec = CalamaresUtils::System::instance()->targetEnvCall( { "usermod", "-p", encrypted, m_userName } );
|
||||
if ( ec )
|
||||
return Calamares::JobResult::error( tr( "Cannot set password for user %1." )
|
||||
.arg( m_userName ),
|
||||
tr( "usermod terminated with error code %1." )
|
||||
.arg( ec ) );
|
||||
return Calamares::JobResult::error( tr( "Cannot set password for user %1." ).arg( m_userName ),
|
||||
tr( "usermod terminated with error code %1." ).arg( ec ) );
|
||||
|
||||
return Calamares::JobResult::ok();
|
||||
}
|
||||
|
@ -27,13 +27,12 @@ class SetPasswordJob : public Calamares::Job
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SetPasswordJob( const QString& userName,
|
||||
const QString& newPassword );
|
||||
SetPasswordJob( const QString& userName, const QString& newPassword );
|
||||
QString prettyName() const override;
|
||||
QString prettyStatusMessage() const override;
|
||||
Calamares::JobResult exec() override;
|
||||
|
||||
static QString make_salt(int length);
|
||||
static QString make_salt( int length );
|
||||
|
||||
private:
|
||||
QString m_userName;
|
||||
|
@ -27,8 +27,8 @@
|
||||
#include "ui_page_usersetup.h"
|
||||
|
||||
#include "CreateUserJob.h"
|
||||
#include "SetPasswordJob.h"
|
||||
#include "SetHostNameJob.h"
|
||||
#include "SetPasswordJob.h"
|
||||
|
||||
#include "GlobalStorage.h"
|
||||
#include "JobQueue.h"
|
||||
@ -45,12 +45,28 @@
|
||||
#include <QRegExp>
|
||||
#include <QRegExpValidator>
|
||||
|
||||
static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" );
|
||||
static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" );
|
||||
static constexpr const int USERNAME_MAX_LENGTH = 31;
|
||||
static constexpr const int HOSTNAME_MIN_LENGTH = 2;
|
||||
static constexpr const int HOSTNAME_MAX_LENGTH = 63;
|
||||
|
||||
/** @brief How bad is the error for labelError() ? */
|
||||
enum class Badness
|
||||
{
|
||||
Fatal,
|
||||
Warning
|
||||
};
|
||||
|
||||
/** Add an error message and pixmap to a label. */
|
||||
static inline void
|
||||
labelError( QLabel* pix, QLabel* label, const QString& message )
|
||||
labelError( QLabel* pix, QLabel* label, const QString& message, Badness bad = Badness::Fatal )
|
||||
{
|
||||
label->setText( message );
|
||||
pix->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, CalamaresUtils::Original, label->size() ) );
|
||||
pix->setPixmap( CalamaresUtils::defaultPixmap( ( bad == Badness::Fatal ) ? CalamaresUtils::StatusError
|
||||
: CalamaresUtils::StatusWarning,
|
||||
CalamaresUtils::Original,
|
||||
label->size() ) );
|
||||
}
|
||||
|
||||
/** Clear error, indicate OK on a label. */
|
||||
@ -74,25 +90,20 @@ UsersPage::UsersPage( QWidget* parent )
|
||||
ui->setupUi( this );
|
||||
|
||||
// Connect signals and slots
|
||||
connect( ui->textBoxFullName, &QLineEdit::textEdited,
|
||||
this, &UsersPage::onFullNameTextEdited );
|
||||
connect( ui->textBoxUsername, &QLineEdit::textEdited,
|
||||
this, &UsersPage::onUsernameTextEdited );
|
||||
connect( ui->textBoxHostname, &QLineEdit::textEdited,
|
||||
this, &UsersPage::onHostnameTextEdited );
|
||||
connect( ui->textBoxUserPassword, &QLineEdit::textChanged,
|
||||
this, &UsersPage::onPasswordTextChanged );
|
||||
connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged,
|
||||
this, &UsersPage::onPasswordTextChanged );
|
||||
connect( ui->textBoxRootPassword, &QLineEdit::textChanged,
|
||||
this, &UsersPage::onRootPasswordTextChanged );
|
||||
connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged,
|
||||
this, &UsersPage::onRootPasswordTextChanged );
|
||||
connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged,
|
||||
this, [this]( int checked )
|
||||
{
|
||||
connect( ui->textBoxFullName, &QLineEdit::textEdited, this, &UsersPage::onFullNameTextEdited );
|
||||
connect( ui->textBoxUsername, &QLineEdit::textEdited, this, &UsersPage::onUsernameTextEdited );
|
||||
connect( ui->textBoxHostname, &QLineEdit::textEdited, this, &UsersPage::onHostnameTextEdited );
|
||||
connect( ui->textBoxUserPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged );
|
||||
connect( ui->textBoxUserVerifiedPassword, &QLineEdit::textChanged, this, &UsersPage::onPasswordTextChanged );
|
||||
connect( ui->textBoxRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged );
|
||||
connect( ui->textBoxVerifiedRootPassword, &QLineEdit::textChanged, this, &UsersPage::onRootPasswordTextChanged );
|
||||
connect( ui->checkBoxValidatePassword, &QCheckBox::stateChanged, this, [this]( int checked ) {
|
||||
onPasswordTextChanged( ui->textBoxUserPassword->text() );
|
||||
onRootPasswordTextChanged( ui->textBoxRootPassword->text() );
|
||||
checkReady( isReady() );
|
||||
} );
|
||||
connect( ui->checkBoxReusePassword, &QCheckBox::stateChanged, this, [this]( int checked ) {
|
||||
ui->labelChooseRootPassword->setVisible( !checked );
|
||||
ui->labelExtraRootPassword->setVisible( !checked );
|
||||
ui->labelRootPassword->setVisible( !checked );
|
||||
ui->labelRootPasswordError->setVisible( !checked );
|
||||
ui->textBoxRootPassword->setVisible( !checked );
|
||||
@ -105,47 +116,45 @@ UsersPage::UsersPage( QWidget* parent )
|
||||
|
||||
setWriteRootPassword( true );
|
||||
ui->checkBoxReusePassword->setChecked( true );
|
||||
ui->checkBoxValidatePassword->setChecked( true );
|
||||
|
||||
// Don't expand the explanations to "stupid wide", but keep them vaguely as-wide-as
|
||||
// the things they are explaining.
|
||||
int boxWidth = qMax( qMax( ui->textBoxUsername->width(), ui->textBoxHostname->width() ), ui->textBoxUserPassword->width() );
|
||||
ui->username_extra_label_2->setMaximumWidth( 3 * boxWidth );
|
||||
ui->hostname_extra_label_2->setMaximumWidth( 3 * boxWidth );
|
||||
ui->password_extra_label_3->setMaximumWidth( 3 * boxWidth );
|
||||
setPasswordCheckboxVisible( false );
|
||||
|
||||
CALAMARES_RETRANSLATE(
|
||||
ui->retranslateUi( this );
|
||||
if ( Calamares::Settings::instance()->isSetupMode() )
|
||||
{
|
||||
ui->username_extra_label_2->setText( tr( "<small>If more than one person will "
|
||||
"use this computer, you can create multiple "
|
||||
"accounts after setup.</small>" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->username_extra_label_2->setText( tr( "<small>If more than one person will "
|
||||
"use this computer, you can create multiple "
|
||||
"accounts after installation.</small>" ) );
|
||||
}
|
||||
)
|
||||
CALAMARES_RETRANSLATE_SLOT( &UsersPage::retranslate );
|
||||
}
|
||||
|
||||
|
||||
UsersPage::~UsersPage()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void
|
||||
UsersPage::retranslate()
|
||||
{
|
||||
ui->retranslateUi( this );
|
||||
if ( Calamares::Settings::instance()->isSetupMode() )
|
||||
{
|
||||
ui->textBoxUsername->setToolTip( tr( "<small>If more than one person will "
|
||||
"use this computer, you can create multiple "
|
||||
"accounts after setup.</small>" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->textBoxUsername->setToolTip( tr( "<small>If more than one person will "
|
||||
"use this computer, you can create multiple "
|
||||
"accounts after installation.</small>" ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
UsersPage::isReady()
|
||||
{
|
||||
bool readyFields = m_readyFullName &&
|
||||
m_readyHostname &&
|
||||
m_readyPassword &&
|
||||
m_readyUsername;
|
||||
bool readyFields = m_readyFullName && m_readyHostname && m_readyPassword && m_readyUsername;
|
||||
if ( !m_writeRootPassword || ui->checkBoxReusePassword->isChecked() )
|
||||
{
|
||||
return readyFields;
|
||||
}
|
||||
|
||||
return readyFields && m_readyRootPassword;
|
||||
}
|
||||
@ -156,38 +165,40 @@ UsersPage::createJobs( const QStringList& defaultGroupsList )
|
||||
{
|
||||
QList< Calamares::job_ptr > list;
|
||||
if ( !isReady() )
|
||||
{
|
||||
return list;
|
||||
}
|
||||
|
||||
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||
|
||||
Calamares::Job* j;
|
||||
j = new CreateUserJob( ui->textBoxUsername->text(),
|
||||
ui->textBoxFullName->text().isEmpty() ?
|
||||
ui->textBoxUsername->text() :
|
||||
ui->textBoxFullName->text(),
|
||||
ui->textBoxFullName->text().isEmpty() ? ui->textBoxUsername->text()
|
||||
: ui->textBoxFullName->text(),
|
||||
ui->checkBoxAutoLogin->isChecked(),
|
||||
defaultGroupsList );
|
||||
list.append( Calamares::job_ptr( j ) );
|
||||
|
||||
j = new SetPasswordJob( ui->textBoxUsername->text(),
|
||||
ui->textBoxUserPassword->text() );
|
||||
j = new SetPasswordJob( ui->textBoxUsername->text(), ui->textBoxUserPassword->text() );
|
||||
list.append( Calamares::job_ptr( j ) );
|
||||
|
||||
if ( m_writeRootPassword )
|
||||
{
|
||||
gs->insert( "reuseRootPassword", ui->checkBoxReusePassword->isChecked() );
|
||||
if ( ui->checkBoxReusePassword->isChecked() )
|
||||
j = new SetPasswordJob( "root",
|
||||
ui->textBoxUserPassword->text() );
|
||||
{
|
||||
j = new SetPasswordJob( "root", ui->textBoxUserPassword->text() );
|
||||
}
|
||||
else
|
||||
j = new SetPasswordJob( "root",
|
||||
ui->textBoxRootPassword->text() );
|
||||
{
|
||||
j = new SetPasswordJob( "root", ui->textBoxRootPassword->text() );
|
||||
}
|
||||
list.append( Calamares::job_ptr( j ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
j = new SetPasswordJob( "root",
|
||||
"" ); //explicitly disable root password
|
||||
"" ); //explicitly disable root password
|
||||
list.append( Calamares::job_ptr( j ) );
|
||||
}
|
||||
|
||||
@ -196,7 +207,9 @@ UsersPage::createJobs( const QStringList& defaultGroupsList )
|
||||
|
||||
gs->insert( "hostname", ui->textBoxHostname->text() );
|
||||
if ( ui->checkBoxAutoLogin->isChecked() )
|
||||
{
|
||||
gs->insert( "autologinUser", ui->textBoxUsername->text() );
|
||||
}
|
||||
|
||||
gs->insert( "username", ui->textBoxUsername->text() );
|
||||
gs->insert( "password", CalamaresUtils::obscure( ui->textBoxUserPassword->text() ) );
|
||||
@ -228,16 +241,19 @@ UsersPage::onFullNameTextEdited( const QString& textRef )
|
||||
ui->labelFullNameError->clear();
|
||||
ui->labelFullName->clear();
|
||||
if ( !m_customUsername )
|
||||
{
|
||||
ui->textBoxUsername->clear();
|
||||
}
|
||||
if ( !m_customHostname )
|
||||
{
|
||||
ui->textBoxHostname->clear();
|
||||
}
|
||||
m_readyFullName = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->labelFullName->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Yes,
|
||||
CalamaresUtils::Original,
|
||||
ui->labelFullName->size() ) );
|
||||
ui->labelFullName->setPixmap(
|
||||
CalamaresUtils::defaultPixmap( CalamaresUtils::Yes, CalamaresUtils::Original, ui->labelFullName->size() ) );
|
||||
m_readyFullName = true;
|
||||
fillSuggestions();
|
||||
}
|
||||
@ -250,8 +266,7 @@ UsersPage::fillSuggestions()
|
||||
{
|
||||
QString fullName = ui->textBoxFullName->text();
|
||||
QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive );
|
||||
QString cleanName = CalamaresUtils::removeDiacritics( fullName )
|
||||
.toLower().replace( rx, " " ).simplified();
|
||||
QString cleanName = CalamaresUtils::removeDiacritics( fullName ).toLower().replace( rx, " " ).simplified();
|
||||
QStringList cleanParts = cleanName.split( ' ' );
|
||||
|
||||
if ( !m_customUsername )
|
||||
@ -262,7 +277,9 @@ UsersPage::fillSuggestions()
|
||||
for ( int i = 1; i < cleanParts.length(); ++i )
|
||||
{
|
||||
if ( !cleanParts.value( i ).isEmpty() )
|
||||
{
|
||||
usernameSuggestion.append( cleanParts.value( i ).at( 0 ) );
|
||||
}
|
||||
}
|
||||
if ( USERNAME_RX.indexIn( usernameSuggestion ) != -1 )
|
||||
{
|
||||
@ -301,8 +318,8 @@ void
|
||||
UsersPage::validateUsernameText( const QString& textRef )
|
||||
{
|
||||
QString text( textRef );
|
||||
QRegExp rx( USERNAME_RX );
|
||||
QRegExpValidator val( rx );
|
||||
QRegExpValidator val_whole( USERNAME_RX );
|
||||
QRegExpValidator val_start( QRegExp( "[a-z_].*" ) ); // anchors are implicit in QRegExpValidator
|
||||
int pos = -1;
|
||||
|
||||
if ( text.isEmpty() )
|
||||
@ -313,14 +330,21 @@ UsersPage::validateUsernameText( const QString& textRef )
|
||||
}
|
||||
else if ( text.length() > USERNAME_MAX_LENGTH )
|
||||
{
|
||||
labelError( ui->labelUsername, ui->labelUsernameError,
|
||||
tr( "Your username is too long." ) );
|
||||
labelError( ui->labelUsername, ui->labelUsernameError, tr( "Your username is too long." ) );
|
||||
m_readyUsername = false;
|
||||
}
|
||||
else if ( val.validate( text, pos ) == QValidator::Invalid )
|
||||
else if ( val_start.validate( text, pos ) == QValidator::Invalid )
|
||||
{
|
||||
labelError( ui->labelUsername, ui->labelUsernameError,
|
||||
tr( "Your username contains invalid characters. Only lowercase letters and numbers are allowed." ) );
|
||||
labelError( ui->labelUsername,
|
||||
ui->labelUsernameError,
|
||||
tr( "Your username must start with a lowercase letter or underscore." ) );
|
||||
m_readyUsername = false;
|
||||
}
|
||||
else if ( val_whole.validate( text, pos ) == QValidator::Invalid )
|
||||
{
|
||||
labelError( ui->labelUsername,
|
||||
ui->labelUsernameError,
|
||||
tr( "Only lowercase letters, numbers, underscore and hyphen are allowed." ) );
|
||||
m_readyUsername = false;
|
||||
}
|
||||
else
|
||||
@ -345,32 +369,30 @@ void
|
||||
UsersPage::validateHostnameText( const QString& textRef )
|
||||
{
|
||||
QString text = textRef;
|
||||
QRegExp rx( HOSTNAME_RX );
|
||||
QRegExpValidator val( rx );
|
||||
QRegExpValidator val( HOSTNAME_RX );
|
||||
int pos = -1;
|
||||
|
||||
if ( text.isEmpty() )
|
||||
{
|
||||
ui->labelHostnameError->clear();
|
||||
ui->labelHostname->clear();
|
||||
m_readyHostname= false;
|
||||
m_readyHostname = false;
|
||||
}
|
||||
else if ( text.length() < HOSTNAME_MIN_LENGTH )
|
||||
{
|
||||
labelError( ui->labelHostname, ui->labelHostnameError,
|
||||
tr( "Your hostname is too short." ) );
|
||||
labelError( ui->labelHostname, ui->labelHostnameError, tr( "Your hostname is too short." ) );
|
||||
m_readyHostname = false;
|
||||
}
|
||||
else if ( text.length() > HOSTNAME_MAX_LENGTH )
|
||||
{
|
||||
labelError( ui->labelHostname, ui->labelHostnameError,
|
||||
tr( "Your hostname is too long." ) );
|
||||
labelError( ui->labelHostname, ui->labelHostnameError, tr( "Your hostname is too long." ) );
|
||||
m_readyHostname = false;
|
||||
}
|
||||
else if ( val.validate( text, pos ) == QValidator::Invalid )
|
||||
{
|
||||
labelError( ui->labelHostname, ui->labelHostnameError,
|
||||
tr( "Your hostname contains invalid characters. Only letters, numbers and dashes are allowed." ) );
|
||||
labelError( ui->labelHostname,
|
||||
ui->labelHostnameError,
|
||||
tr( "Only letters, numbers, underscore and hyphen are allowed." ) );
|
||||
m_readyHostname = false;
|
||||
}
|
||||
else
|
||||
@ -382,46 +404,59 @@ UsersPage::validateHostnameText( const QString& textRef )
|
||||
emit checkReady( isReady() );
|
||||
}
|
||||
|
||||
void
|
||||
UsersPage::onPasswordTextChanged( const QString& )
|
||||
bool
|
||||
UsersPage::checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message )
|
||||
{
|
||||
QString pw1 = ui->textBoxUserPassword->text();
|
||||
QString pw2 = ui->textBoxUserVerifiedPassword->text();
|
||||
|
||||
// TODO: 3.3: remove empty-check and leave it to passwordRequirements
|
||||
if ( pw1.isEmpty() && pw2.isEmpty() )
|
||||
{
|
||||
ui->labelUserPasswordError->clear();
|
||||
ui->labelUserPassword->clear();
|
||||
m_readyPassword = false;
|
||||
// Not exactly labelOk() because we also don't want a checkmark OK
|
||||
badge->clear();
|
||||
message->clear();
|
||||
return false;
|
||||
}
|
||||
else if ( pw1 != pw2 )
|
||||
{
|
||||
labelError( ui->labelUserPassword, ui->labelUserPasswordError,
|
||||
tr( "Your passwords do not match!" ) );
|
||||
m_readyPassword = false;
|
||||
labelError( badge, message, tr( "Your passwords do not match!" ) );
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool ok = true;
|
||||
bool failureIsFatal = ui->checkBoxValidatePassword->isChecked();
|
||||
bool failureFound = false;
|
||||
|
||||
for ( auto pc : m_passwordChecks )
|
||||
{
|
||||
QString s = pc.filter( pw1 );
|
||||
|
||||
if ( !s.isEmpty() )
|
||||
{
|
||||
labelError( ui->labelUserPassword, ui->labelUserPasswordError, s );
|
||||
ok = false;
|
||||
m_readyPassword = false;
|
||||
break;
|
||||
labelError( badge, message, s, failureIsFatal ? Badness::Fatal : Badness::Warning );
|
||||
failureFound = true;
|
||||
if ( failureIsFatal )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ok )
|
||||
if ( !failureFound )
|
||||
{
|
||||
labelOk( ui->labelUserPassword, ui->labelUserPasswordError );
|
||||
m_readyPassword = true;
|
||||
labelOk( badge, message );
|
||||
}
|
||||
|
||||
// Here, if failureFound is true then we've found **warnings**,
|
||||
// which is ok to continue but the user should know.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UsersPage::onPasswordTextChanged( const QString& )
|
||||
{
|
||||
m_readyPassword = checkPasswordAcceptance( ui->textBoxUserPassword->text(),
|
||||
ui->textBoxUserVerifiedPassword->text(),
|
||||
ui->labelUserPassword,
|
||||
ui->labelUserPasswordError );
|
||||
|
||||
emit checkReady( isReady() );
|
||||
}
|
||||
@ -429,48 +464,27 @@ UsersPage::onPasswordTextChanged( const QString& )
|
||||
void
|
||||
UsersPage::onRootPasswordTextChanged( const QString& )
|
||||
{
|
||||
QString pw1 = ui->textBoxRootPassword->text();
|
||||
QString pw2 = ui->textBoxVerifiedRootPassword->text();
|
||||
|
||||
// TODO: 3.3: remove empty-check and leave it to passwordRequirements
|
||||
if ( pw1.isEmpty() && pw2.isEmpty() )
|
||||
{
|
||||
ui->labelRootPasswordError->clear();
|
||||
ui->labelRootPassword->clear();
|
||||
m_readyRootPassword = false;
|
||||
}
|
||||
else if ( pw1 != pw2 )
|
||||
{
|
||||
labelError( ui->labelRootPassword, ui->labelRootPasswordError,
|
||||
tr( "Your passwords do not match!" ) );
|
||||
m_readyRootPassword = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool ok = true;
|
||||
for ( auto pc : m_passwordChecks )
|
||||
{
|
||||
QString s = pc.filter( pw1 );
|
||||
if ( !s.isEmpty() )
|
||||
{
|
||||
labelError( ui->labelRootPassword, ui->labelRootPasswordError, s );
|
||||
ok = false;
|
||||
m_readyRootPassword = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ok )
|
||||
{
|
||||
labelOk( ui->labelRootPassword, ui->labelRootPasswordError );
|
||||
m_readyRootPassword = true;
|
||||
}
|
||||
}
|
||||
|
||||
m_readyRootPassword = checkPasswordAcceptance( ui->textBoxRootPassword->text(),
|
||||
ui->textBoxVerifiedRootPassword->text(),
|
||||
ui->labelRootPassword,
|
||||
ui->labelRootPasswordError );
|
||||
emit checkReady( isReady() );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UsersPage::setPasswordCheckboxVisible( bool visible )
|
||||
{
|
||||
ui->checkBoxValidatePassword->setVisible( visible );
|
||||
}
|
||||
|
||||
void
|
||||
UsersPage::setValidatePasswordDefault( bool checked )
|
||||
{
|
||||
ui->checkBoxValidatePassword->setChecked( checked );
|
||||
emit checkReady( isReady() );
|
||||
}
|
||||
|
||||
void
|
||||
UsersPage::setAutologinDefault( bool checked )
|
||||
{
|
||||
@ -501,7 +515,9 @@ UsersPage::addPasswordCheck( const QString& key, const QVariant& value )
|
||||
{
|
||||
add_check_libpwquality( m_passwordChecks, value );
|
||||
}
|
||||
#endif
|
||||
#endif // CHECK_PWQUALITY
|
||||
else
|
||||
{
|
||||
cWarning() << "Unknown password-check key" << key;
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
class QLabel;
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class Page_UserSetup;
|
||||
@ -48,6 +50,8 @@ public:
|
||||
void onActivate();
|
||||
|
||||
void setWriteRootPassword( bool show );
|
||||
void setPasswordCheckboxVisible( bool visible );
|
||||
void setValidatePasswordDefault( bool checked );
|
||||
void setAutologinDefault( bool checked );
|
||||
void setReusePasswordDefault( bool checked );
|
||||
|
||||
@ -73,16 +77,20 @@ signals:
|
||||
void checkReady( bool );
|
||||
|
||||
private:
|
||||
/** @brief Is the password acceptable?
|
||||
*
|
||||
* Checks the two copies of the password and places error messages in the
|
||||
* given QLabels. Returns true (and clears the error messages) if the
|
||||
* password is acceptable.
|
||||
*/
|
||||
bool checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLabel* badge, QLabel* message );
|
||||
|
||||
void retranslate();
|
||||
|
||||
Ui::Page_UserSetup* ui;
|
||||
|
||||
PasswordCheckList m_passwordChecks;
|
||||
|
||||
const QRegExp USERNAME_RX = QRegExp( "^[a-z_][a-z0-9_-]*[$]?$" );
|
||||
const QRegExp HOSTNAME_RX = QRegExp( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" );
|
||||
const int USERNAME_MAX_LENGTH = 31;
|
||||
const int HOSTNAME_MIN_LENGTH = 2;
|
||||
const int HOSTNAME_MAX_LENGTH = 63;
|
||||
|
||||
bool m_readyFullName;
|
||||
bool m_readyUsername;
|
||||
bool m_customUsername;
|
||||
@ -94,4 +102,4 @@ private:
|
||||
bool m_writeRootPassword;
|
||||
};
|
||||
|
||||
#endif // USERSPAGE_H
|
||||
#endif // USERSPAGE_H
|
||||
|
@ -29,22 +29,23 @@
|
||||
#include "GlobalStorage.h"
|
||||
#include "JobQueue.h"
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersViewStepFactory, registerPlugin<UsersViewStep>(); )
|
||||
CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersViewStepFactory, registerPlugin< UsersViewStep >(); )
|
||||
|
||||
UsersViewStep::UsersViewStep( QObject* parent )
|
||||
: Calamares::ViewStep( parent )
|
||||
, m_widget( new UsersPage() )
|
||||
{
|
||||
emit nextStatusChanged( true );
|
||||
connect( m_widget, &UsersPage::checkReady,
|
||||
this, &UsersViewStep::nextStatusChanged );
|
||||
connect( m_widget, &UsersPage::checkReady, this, &UsersViewStep::nextStatusChanged );
|
||||
}
|
||||
|
||||
|
||||
UsersViewStep::~UsersViewStep()
|
||||
{
|
||||
if ( m_widget && m_widget->parent() == nullptr )
|
||||
{
|
||||
m_widget->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -116,68 +117,71 @@ UsersViewStep::onLeave()
|
||||
void
|
||||
UsersViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
{
|
||||
if ( configurationMap.contains( "defaultGroups" ) &&
|
||||
configurationMap.value( "defaultGroups" ).type() == QVariant::List )
|
||||
if ( configurationMap.contains( "defaultGroups" )
|
||||
&& configurationMap.value( "defaultGroups" ).type() == QVariant::List )
|
||||
{
|
||||
m_defaultGroups = configurationMap.value( "defaultGroups" ).toStringList();
|
||||
}
|
||||
else
|
||||
{
|
||||
cWarning() << "Using fallback groups. Please check defaultGroups in users.conf";
|
||||
m_defaultGroups = QStringList{ "lp", "video", "network", "storage", "wheel", "audio" };
|
||||
m_defaultGroups = QStringList { "lp", "video", "network", "storage", "wheel", "audio" };
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "autologinGroup" ) &&
|
||||
configurationMap.value( "autologinGroup" ).type() == QVariant::String )
|
||||
if ( configurationMap.contains( "autologinGroup" )
|
||||
&& configurationMap.value( "autologinGroup" ).type() == QVariant::String )
|
||||
{
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "autologinGroup",
|
||||
configurationMap.value( "autologinGroup" ).toString() );
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert(
|
||||
"autologinGroup", configurationMap.value( "autologinGroup" ).toString() );
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "sudoersGroup" ) &&
|
||||
configurationMap.value( "sudoersGroup" ).type() == QVariant::String )
|
||||
if ( configurationMap.contains( "sudoersGroup" )
|
||||
&& configurationMap.value( "sudoersGroup" ).type() == QVariant::String )
|
||||
{
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "sudoersGroup",
|
||||
configurationMap.value( "sudoersGroup" ).toString() );
|
||||
configurationMap.value( "sudoersGroup" ).toString() );
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "setRootPassword" ) &&
|
||||
configurationMap.value( "setRootPassword" ).type() == QVariant::Bool )
|
||||
if ( configurationMap.contains( "setRootPassword" )
|
||||
&& configurationMap.value( "setRootPassword" ).type() == QVariant::Bool )
|
||||
{
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword",
|
||||
configurationMap.value( "setRootPassword" ).toBool() );
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert(
|
||||
"setRootPassword", configurationMap.value( "setRootPassword" ).toBool() );
|
||||
m_widget->setWriteRootPassword( configurationMap.value( "setRootPassword" ).toBool() );
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "doAutologin" ) &&
|
||||
configurationMap.value( "doAutologin" ).type() == QVariant::Bool )
|
||||
if ( configurationMap.contains( "doAutologin" )
|
||||
&& configurationMap.value( "doAutologin" ).type() == QVariant::Bool )
|
||||
{
|
||||
m_widget->setAutologinDefault( configurationMap.value( "doAutologin" ).toBool() );
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "doReusePassword" ) &&
|
||||
configurationMap.value( "doReusePassword" ).type() == QVariant::Bool )
|
||||
if ( configurationMap.contains( "doReusePassword" )
|
||||
&& configurationMap.value( "doReusePassword" ).type() == QVariant::Bool )
|
||||
{
|
||||
m_widget->setReusePasswordDefault( configurationMap.value( "doReusePassword" ).toBool() );
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "passwordRequirements" ) &&
|
||||
configurationMap.value( "passwordRequirements" ).type() == QVariant::Map )
|
||||
if ( configurationMap.contains( "passwordRequirements" )
|
||||
&& configurationMap.value( "passwordRequirements" ).type() == QVariant::Map )
|
||||
{
|
||||
auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() );
|
||||
|
||||
for (decltype(pr_checks)::const_iterator i = pr_checks.constBegin();
|
||||
i != pr_checks.constEnd(); ++i)
|
||||
for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i )
|
||||
{
|
||||
m_widget->addPasswordCheck( i.key(), i.value() );
|
||||
}
|
||||
}
|
||||
|
||||
m_widget->setPasswordCheckboxVisible( CalamaresUtils::getBool( configurationMap, "allowWeakPasswords", false ) );
|
||||
m_widget->setValidatePasswordDefault( !CalamaresUtils::getBool( configurationMap, "allowWeakPasswordsDefault", false) );
|
||||
|
||||
QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all
|
||||
if ( configurationMap.contains( "userShell" ) )
|
||||
{
|
||||
shell = CalamaresUtils::getString( configurationMap, "userShell" );
|
||||
// Now it might be explicitly set to empty, which is ok
|
||||
}
|
||||
// Now it might be explicitly set to empty, which is ok
|
||||
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell );
|
||||
}
|
||||
|
||||
|
@ -65,4 +65,4 @@ private:
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersViewStepFactory )
|
||||
|
||||
#endif // USERSPAGEPLUGIN_H
|
||||
#endif // USERSPAGEPLUGIN_H
|
||||
|
@ -47,6 +47,9 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Your Full Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -137,6 +140,9 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>login</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -191,19 +197,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="username_extra_label_2">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-weight: normal</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true"><Username extra label 2 text></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_4">
|
||||
<property name="orientation">
|
||||
@ -246,6 +239,12 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><small>This name will be used if you make the computer visible to others on a network.</small></string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Computer Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -300,19 +299,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="hostname_extra_label_2">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-weight: normal</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><small>This name will be used if you make the computer visible to others on a network.</small></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
@ -355,9 +341,15 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small></string>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -374,9 +366,15 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small></string>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Repeat Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -431,19 +429,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="password_extra_label_3">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-weight: normal</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_5">
|
||||
<property name="orientation">
|
||||
@ -460,6 +445,16 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBoxValidatePassword">
|
||||
<property name="toolTip">
|
||||
<string>When this box is checked, password-strength checking is done and you will not be able to use a weak password.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Require strong passwords.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBoxAutoLogin">
|
||||
<property name="text">
|
||||
@ -516,9 +511,15 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><small>Enter the same password twice, so that it can be checked for typing errors.</small></string>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -535,9 +536,15 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><small>Enter the same password twice, so that it can be checked for typing errors.</small></string>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Repeat Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -592,19 +599,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelExtraRootPassword">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-weight: normal</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><small>Enter the same password twice, so that it can be checked for typing errors.</small></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_7">
|
||||
<property name="orientation">
|
||||
|
@ -27,26 +27,34 @@ defaultGroups:
|
||||
# the desktop environment on boot.
|
||||
# Disable when your Distribution does not require such a group.
|
||||
autologinGroup: autologin
|
||||
# You can control the initial state for the 'autologin checkbox' in UsersViewStep here.
|
||||
# Possible values are: true to enable or false to disable the checkbox by default
|
||||
# You can control the initial state for the 'autologin checkbox' here.
|
||||
# Possible values are:
|
||||
# - true to check or
|
||||
# - false to uncheck
|
||||
# These set the **initial** state of the checkbox.
|
||||
doAutologin: true
|
||||
|
||||
# When set to a non-empty string, Calamares creates a sudoers file for the user.
|
||||
# /etc/sudoers.d/10-installer
|
||||
# Remember to add sudoersGroup to defaultGroups.
|
||||
# When *sudoersGroup* is set to a non-empty string, Calamares creates a
|
||||
# sudoers file for the user. This file is located at:
|
||||
# `/etc/sudoers.d/10-installer`
|
||||
# Remember to add the (value of) *sudoersGroup* to *defaultGroups*.
|
||||
#
|
||||
# If your Distribution already sets up a group of sudoers in its packaging,
|
||||
# remove this setting (delete or comment out the line below). Otherwise,
|
||||
# the setting will be duplicated in the /etc/sudoers.d/10-installer file,
|
||||
# the setting will be duplicated in the `/etc/sudoers.d/10-installer` file,
|
||||
# potentially confusing users.
|
||||
sudoersGroup: wheel
|
||||
|
||||
# Setting this to false , causes the root account to be disabled.
|
||||
setRootPassword: true
|
||||
# You can control the initial state for the 'root password checkbox' in UsersViewStep here.
|
||||
# Possible values are: true to enable or false to disable the checkbox by default.
|
||||
# When enabled the user password is used for the root account too.
|
||||
# NOTE: doReusePassword requires setRootPassword to be enabled.
|
||||
# You can control the initial state for the 'reuse password for root'
|
||||
# checkbox here. Possible values are:
|
||||
# - true to check or
|
||||
# - false to uncheck
|
||||
#
|
||||
# When checked, the user password is used for the root account too.
|
||||
#
|
||||
# NOTE: *doReusePassword* requires *setRootPassword* to be enabled.
|
||||
doReusePassword: true
|
||||
|
||||
# These are optional password-requirements that a distro can enforce
|
||||
@ -68,12 +76,36 @@ doReusePassword: true
|
||||
#
|
||||
# (additional checks may be implemented in CheckPWQuality.cpp and
|
||||
# wired into UsersPage.cpp)
|
||||
#
|
||||
# - To disable specific password validations:
|
||||
# comment out the relevant 'passwordRequirements' keys below.
|
||||
# - To disable all password validations:
|
||||
# set both 'allowWeakPasswords' and 'allowWeakPasswordsDefault' to true.
|
||||
# (That will show the box *Allow weak passwords* in the user-
|
||||
# interface, and check it by default).
|
||||
passwordRequirements:
|
||||
minLength: -1 # Password at least this many characters
|
||||
maxLength: -1 # Password at most this many characters
|
||||
libpwquality:
|
||||
- minlen=0
|
||||
- minclass=0
|
||||
|
||||
# You can control the visibility of the 'strong passwords' checkbox here.
|
||||
# Possible values are:
|
||||
# - true to show or
|
||||
# - false to hide (default)
|
||||
# the checkbox. This checkbox allows the user to choose to disable
|
||||
# password-strength-checks. By default the box is **hidden**, so
|
||||
# that you have to pick a password that satisfies the checks.
|
||||
allowWeakPasswords: false
|
||||
# You can control the initial state for the 'strong passwords' checkbox here.
|
||||
# Possible values are:
|
||||
# - true to uncheck or
|
||||
# - false to check (default)
|
||||
# the checkbox by default. Since the box is labeled to enforce strong
|
||||
# passwords, in order to **allow** weak ones by default, the box needs
|
||||
# to be unchecked.
|
||||
allowWeakPasswordsDefault: false
|
||||
|
||||
# Shell to be used for the regular user of the target system.
|
||||
# There are three possible kinds of settings:
|
||||
|
Loading…
Reference in New Issue
Block a user