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

This commit is contained in:
Philip Müller 2019-06-19 08:22:12 +02:00
commit 7afb2443d5
41 changed files with 4359 additions and 319 deletions

10
CHANGES
View File

@ -7,6 +7,10 @@ website will have to do for older versions.
This release contains contributions from (alphabetically by first name):
Distributions are **advised** to check the slideshow they use for the
installation step; changes in loading and translation mechanisms may
require changes in the slideshow.
## Core ##
- With this release, option *WITH_PYTHONQT* changes default to **off**.
@ -18,6 +22,12 @@ This release contains contributions from (alphabetically by first name):
configured after the last *exec* section of the sequence has been
solved. The *finished* page can be left out (but then you don't get
the restart-now functionality). #1168
- The *slideshow* which is run during installation now has API versions.
API version 1 (the default) runs as before, where the slideshow is loaded
when the installation starts. API version 2 loads the slideshow on
Calamares startup, thus improving responsiveness. Documentation
in `src/branding/README.md`. #1152
- The example slideshow now uses API version 2.
## Modules ##

View File

@ -84,7 +84,7 @@ set( CALAMARES_DESCRIPTION_SUMMARY
# complete = 100% translated,
# good = nearly complete (use own judgement, right now >= 75%)
# ok = incomplete (more than 25% untranslated, at least 5% translated),
# bad = 0% translated, placeholder in tx; these are not included.
# incomplete = <5% translated, placeholder in tx; these are not included.
#
# Language en (source language) is added later. It isn't listed in
# Transifex either. Get the list of languages and their status
@ -106,12 +106,11 @@ set( CALAMARES_DESCRIPTION_SUMMARY
# the original four lines with the current translations).
set( _tx_complete ca cs_CZ da de fr he hr hu ko lt pt_BR sq tr_TR
zh_TW )
set( _tx_good ast en_GB es es_MX et gl id it_IT ja nl pl pt_PT ro
ru sk zh_CN )
set( _tx_ok ar bg el es_PR eu fi_FI hi is mr nb sl sr sr@latin sv
th uk )
set( _tx_bad be eo fa fr_CH gu kk kn lo mk ne_NP ur uz )
set( _tx_good ast en_GB es es_MX et fi_FI gl id it_IT ja nl pl
pt_PT ro ru sk zh_CN )
set( _tx_ok ar bg el es_PR eu hi is mr nb sl sr sr@latin sv th
uk )
set( _tx_incomplete be ca@valencia eo fa fr_CH gu kk kn lo mk ne_NP ur uz )
### Required versions
#
@ -325,8 +324,8 @@ endif()
# then run an extra cmake-time check for consistency of the old
# (p_tx*) and new (_tx*) lists.
#
set( prev_tx ${p_tx_complete} ${p_tx_good} ${p_tx_ok} ${p_tx_bad} )
set( curr_tx ${_tx_complete} ${_tx_good} ${_tx_ok} ${_tx_bad} )
set( prev_tx ${p_tx_complete} ${p_tx_good} ${p_tx_ok} ${p_tx_incomplete} )
set( curr_tx ${_tx_complete} ${_tx_good} ${_tx_ok} ${_tx_incomplete} )
set( tx_errors OFF )
if ( prev_tx )
# Gone in new list

View File

@ -107,7 +107,10 @@ function( calamares_add_branding_translations NAME )
file( GLOB BRANDING_TRANSLATION_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${SUBDIRECTORY}/lang/calamares-${NAME}_*.ts" )
if ( BRANDING_TRANSLATION_FILES )
qt5_add_translation( QM_FILES ${BRANDING_TRANSLATION_FILES} )
add_custom_target( branding-translation-${NAME} ALL DEPENDS ${QM_FILES} )
add_custom_target( branding-translation-${NAME} ALL DEPENDS ${QM_FILES}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/lang/
COMMAND ${CMAKE_COMMAND} -E copy ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/lang/
)
install( FILES ${QM_FILES} DESTINATION ${BRANDING_COMPONENT_DESTINATION}/lang/ )
list( LENGTH BRANDING_TRANSLATION_FILES _branding_count )
message( " ${Green}BRANDING_TRANSLATIONS:${ColorReset} ${_branding_count} language(s)" )

View File

@ -14,8 +14,8 @@ def get_tx_credentials():
txconfig_name = os.path.expanduser("~/.transifexrc")
try:
with open(txconfig_name, "r") as f:
parser = configparser.SafeConfigParser()
parser.readfp(f)
parser = configparser.ConfigParser()
parser.read_file(f)
return parser.get("https://www.transifex.com", "password")
except IOError as e:
@ -71,7 +71,7 @@ def get_tx_stats(token):
output_langs(all_langs, "complete", lambda s : s == 1.0)
output_langs(all_langs, "good", lambda s : 1.0 > s >= 0.75)
output_langs(all_langs, "ok", lambda s : 0.75 > s >= 0.05)
output_langs(all_langs, "bad", lambda s : 0.05 > s)
output_langs(all_langs, "incomplete", lambda s : 0.05 > s)
return 0

View File

@ -149,12 +149,12 @@
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="52"/>
<source>Run command %1 %2</source>
<translation>شغّل الأمر 1% 2%</translation>
<translation>شغّل الأمر %1 %2</translation>
</message>
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="61"/>
<source>Running command %1 %2</source>
<translation>يشغّل الأمر 1% 2%</translation>
<translation>يشغّل الأمر %1 %2</translation>
</message>
</context>
<context>

File diff suppressed because it is too large Load Diff

View File

@ -58,7 +58,7 @@
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="24"/>
@ -73,23 +73,23 @@
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="44"/>
<source>Modules</source>
<translation type="unfinished"/>
<translation>Moduloj</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="57"/>
<source>Type:</source>
<translation type="unfinished"/>
<translation>Tipo:</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="64"/>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="78"/>
<source>none</source>
<translation type="unfinished"/>
<translation>neniu</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="71"/>
<source>Interface:</source>
<translation type="unfinished"/>
<translation>Interfaco:</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="93"/>
@ -422,7 +422,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="154"/>
@ -1025,7 +1025,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/partition/gui/EncryptWidget.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/EncryptWidget.ui" line="32"/>
@ -1091,7 +1091,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="95"/>
@ -1349,7 +1349,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/license/LicensePage.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/license/LicensePage.cpp" line="123"/>
@ -1807,7 +1807,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/keyboard/KeyboardPage.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/keyboard/KeyboardPage.ui" line="70"/>
@ -1825,7 +1825,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="36"/>
@ -1962,7 +1962,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="22"/>
@ -2162,7 +2162,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.</translation>
<message>
<location filename="../src/modules/plasmalnf/page_plasmalnf.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="70"/>
@ -2346,7 +2346,7 @@ Output:
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="135"/>
@ -2907,7 +2907,7 @@ Output:
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="24"/>
@ -3063,7 +3063,7 @@ Output:
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="14"/>
<source>Form</source>
<translation type="unfinished"/>
<translation>Formularo</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="160"/>

View File

@ -2051,47 +2051,47 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="166"/>
<source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system.</source>
<translation type="unfinished"/>
<translation>Asenna toisen käyttöjärjestelmän %1 &lt;strong&gt;rinnalle&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="170"/>
<source>&lt;strong&gt;Erase&lt;/strong&gt; disk and install %1.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;Tyhjennä&lt;/strong&gt; levy ja asenna %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="174"/>
<source>&lt;strong&gt;Replace&lt;/strong&gt; a partition with %1.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;Vaihda&lt;/strong&gt; osio jolla on %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="179"/>
<source>&lt;strong&gt;Manual&lt;/strong&gt; partitioning.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;Manuaalinen&lt;/strong&gt; osointi.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="192"/>
<source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system on disk &lt;strong&gt;%2&lt;/strong&gt; (%3).</source>
<translation type="unfinished"/>
<translation>Asenna toisen käyttöjärjestelmän %1 &lt;strong&gt;rinnalle&lt;/strong&gt; levylle &lt;strong&gt;%2&lt;/strong&gt; (%3).</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="198"/>
<source>&lt;strong&gt;Erase&lt;/strong&gt; disk &lt;strong&gt;%2&lt;/strong&gt; (%3) and install %1.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;Tyhjennä&lt;/strong&gt; levy &lt;strong&gt;%2&lt;/strong&gt; (%3) ja asenna %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="204"/>
<source>&lt;strong&gt;Replace&lt;/strong&gt; a partition on disk &lt;strong&gt;%2&lt;/strong&gt; (%3) with %1.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;Korvaa&lt;/strong&gt; levyn osio &lt;strong&gt;%2&lt;/strong&gt; (%3) jolla on %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="211"/>
<source>&lt;strong&gt;Manual&lt;/strong&gt; partitioning on disk &lt;strong&gt;%1&lt;/strong&gt; (%2).</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;Manuaalinen&lt;/strong&gt; osiointi levyllä &lt;strong&gt;%1&lt;/strong&gt; (%2).</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="219"/>
<source>Disk &lt;strong&gt;%1&lt;/strong&gt; (%2)</source>
<translation type="unfinished"/>
<translation>Levy &lt;strong&gt;%1&lt;/strong&gt; (%2)</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="247"/>
@ -2111,7 +2111,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="407"/>
<source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;To configure an EFI system partition, go back and select or create a FAT32 filesystem with the &lt;strong&gt;esp&lt;/strong&gt; flag enabled and mount point &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;You can continue without setting up an EFI system partition but your system may fail to start.</source>
<translation type="unfinished"/>
<translation>EFI-järjestelmäosio on välttämätön käynnistystä varten %1.&lt;br/&gt;&lt;br/&gt;Jos haluat tehdä EFI-järjestelmäosion, mene takaisin ja luo FAT32-tiedostojärjestelmä, jossa on&lt;strong&gt;esp&lt;/strong&gt; lippu yhdistettynä asennuspisteen liitokseen &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;Voit jatkaa ilman EFI-järjestelmäosiota, mutta järjestelmä ei ehkä käynnisty.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="420"/>
@ -2121,7 +2121,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="421"/>
<source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;A partition was configured with mount point &lt;strong&gt;%2&lt;/strong&gt; but its &lt;strong&gt;esp&lt;/strong&gt; flag is not set.&lt;br/&gt;To set the flag, go back and edit the partition.&lt;br/&gt;&lt;br/&gt;You can continue without setting the flag but your system may fail to start.</source>
<translation type="unfinished"/>
<translation>EFI-järjestelmäosio on välttämätön käynnistystä varten %1.&lt;br/&gt;&lt;br/&gt;Osio määritettiin liittymäpisteellä, &lt;strong&gt;%2&lt;/strong&gt; mutta sen &lt;strong&gt;esp&lt;/strong&gt; lippua ei ole asetettu.&lt;br/&gt;Jos haluat asettaa lipun, palaa takaisin ja muokkaa osiota.&lt;br/&gt;&lt;br/&gt;Voit jatkaa lippua asettamatta, mutta järjestelmä ei ehkä käynnisty.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="456"/>
@ -2131,7 +2131,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="457"/>
<source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.&lt;br/&gt;&lt;br/&gt;There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.&lt;br/&gt;You may continue if you wish, but filesystem unlocking will happen later during system startup.&lt;br/&gt;To encrypt the boot partition, go back and recreate it, selecting &lt;strong&gt;Encrypt&lt;/strong&gt; in the partition creation window.</source>
<translation type="unfinished"/>
<translation>Erillinen käynnistysosio perustettiin yhdessä salatun juuriosion kanssa, mutta käynnistysosio ei ole salattu.&lt;br/&gt;&lt;br/&gt;Tällaisissa asetuksissa on tietoturvaongelmia, koska tärkeät järjestelmätiedostot pidetään salaamattomassa osiossa.&lt;br/&gt;Voit jatkaa, jos haluat, mutta tiedostojärjestelmän lukituksen avaaminen tapahtuu myöhemmin järjestelmän käynnistyksen aikana.&lt;br/&gt;Käynnistysosion salaamiseksi siirry takaisin ja luo se uudelleen valitsemalla &lt;strong&gt;Salaa&lt;/strong&gt; osion luominen -ikkunassa. </translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="638"/>
@ -2141,7 +2141,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="639"/>
<source>There are no partitons to install on.</source>
<translation type="unfinished"/>
<translation>Asennettavia osioita ei ole.</translation>
</message>
</context>
<context>
@ -2149,13 +2149,13 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="41"/>
<source>Plasma Look-and-Feel Job</source>
<translation type="unfinished"/>
<translation>Plasman ulkoasu</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>KDE-plasman ulkoasupakettia ei voi valita</translation>
</message>
</context>
<context>
@ -2168,12 +2168,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<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>Valitse ulkoasu KDE-plasma -työpöydälle. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asetettu. Klikkaamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta.</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>Valitse KDE-plasma -työpöydän ulkoasu. Voit myös ohittaa tämän vaiheen ja määrittää ulkoasun, kun järjestelmä on asennettu. Klikkaamalla ulkoasun valintaa saat suoran esikatselun tästä ulkoasusta.</translation>
</message>
</context>
<context>
@ -2181,7 +2181,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/plasmalnf/PlasmaLnfViewStep.cpp" line="68"/>
<source>Look-and-Feel</source>
<translation type="unfinished"/>
<translation>Ulkoasu</translation>
</message>
</context>
<context>
@ -2194,12 +2194,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="122"/>
<source>No files configured to save for later.</source>
<translation type="unfinished"/>
<translation>Ei tiedostoja, joita olisi määritetty tallentamaan myöhemmin.</translation>
</message>
<message>
<location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="176"/>
<source>Not all of the configured files could be preserved.</source>
<translation type="unfinished"/>
<translation>Kaikkia määritettyjä tiedostoja ei voitu säilyttää.</translation>
</message>
</context>
<context>
@ -2208,7 +2208,8 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="306"/>
<source>
There was no output from the command.</source>
<translation type="unfinished"/>
<translation>
Komentoa ei voitu ajaa.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="307"/>
@ -2222,27 +2223,27 @@ Ulostulo:
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="310"/>
<source>External command crashed.</source>
<translation type="unfinished"/>
<translation>Ulkoinen komento kaatui.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="311"/>
<source>Command &lt;i&gt;%1&lt;/i&gt; crashed.</source>
<translation type="unfinished"/>
<translation>Komento &lt;i&gt;%1&lt;/i&gt; kaatui.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="316"/>
<source>External command failed to start.</source>
<translation type="unfinished"/>
<translation>Ulkoisen komennon käynnistäminen epäonnistui.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="317"/>
<source>Command &lt;i&gt;%1&lt;/i&gt; failed to start.</source>
<translation type="unfinished"/>
<translation>Komennon &lt;i&gt;%1&lt;/i&gt; käynnistäminen epäonnistui.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="321"/>
<source>Internal error when starting command.</source>
<translation type="unfinished"/>
<translation>Sisäinen virhe käynnistettäessä komentoa.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="322"/>
@ -2252,22 +2253,22 @@ Ulostulo:
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="325"/>
<source>External command failed to finish.</source>
<translation type="unfinished"/>
<translation>Ulkoinen komento ei onnistunut.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="326"/>
<source>Command &lt;i&gt;%1&lt;/i&gt; failed to finish in %2 seconds.</source>
<translation type="unfinished"/>
<translation>Komento &lt;i&gt;%1&lt;/i&gt; epäonnistui %2 sekunnissa.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="332"/>
<source>External command finished with errors.</source>
<translation type="unfinished"/>
<translation>Ulkoinen komento päättyi virheisiin.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="333"/>
<source>Command &lt;i&gt;%1&lt;/i&gt; finished with exit code %2.</source>
<translation type="unfinished"/>
<translation>Komento &lt;i&gt;%1&lt;/i&gt; päättyi koodiin %2.</translation>
</message>
</context>
<context>
@ -2306,7 +2307,7 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="51"/>
<source>Unpartitioned space or unknown partition table</source>
<translation type="unfinished"/>
<translation>Osioimaton tila tai tuntematon osion taulu</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="47"/>
@ -2316,7 +2317,7 @@ Ulostulo:
<message>
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="62"/>
<source>Requirements checking for module &lt;i&gt;%1&lt;/i&gt; is complete.</source>
<translation type="unfinished"/>
<translation>Moduulin vaatimusten tarkistaminen &lt;i&gt;%1&lt;/i&gt; on valmis.</translation>
</message>
<message>
<location filename="../src/libcalamares/locale/Label.cpp" line="44"/>
@ -2331,17 +2332,17 @@ Ulostulo:
<location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="34"/>
<location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="48"/>
<source>Remove Volume Group named %1.</source>
<translation type="unfinished"/>
<translation>Poista asemaryhmä nimeltä %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="41"/>
<source>Remove Volume Group named &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Poista asemaryhmä nimeltä &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="61"/>
<source>The installer failed to remove a volume group named &apos;%1&apos;.</source>
<translation type="unfinished"/>
<translation>Asentaja ei onnistunut poistamaan nimettyä asemaryhmää &apos;%1&apos;.</translation>
</message>
</context>
<context>
@ -2394,19 +2395,19 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="228"/>
<source>&lt;strong&gt;%4&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;%4&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Osio %1 on liian pieni %2. Valitse osio, jonka kapasiteetti on vähintään %3 GiB.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="251"/>
<source>&lt;strong&gt;%2&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;%2&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;EFI-järjestelmäosiota ei löydy mistään tässä järjestelmässä. Palaa takaisin ja käytä manuaalista osiointia määrittämällä %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="262"/>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="279"/>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="303"/>
<source>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 will be installed on %2.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Warning: &lt;/font&gt;all data on partition %2 will be lost.</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 asennetaan %2.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Varoitus: &lt;/font&gt;kaikki osion %2 tiedot katoavat.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="271"/>
@ -2424,7 +2425,7 @@ Ulostulo:
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="59"/>
<source>Resize Filesystem Job</source>
<translation type="unfinished"/>
<translation>Muuta tiedostojärjestelmän kokoa</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="172"/>
@ -2434,7 +2435,7 @@ Ulostulo:
<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>Tiedostojärjestelmän koon muutto ei kelpaa eikä sitä suoriteta.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/>
@ -2446,7 +2447,7 @@ Ulostulo:
<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>Calamares ei voi käynnistää KPMCore-tiedostoa tiedostojärjestelmän koon muuttamiseksi.</translation>
</message>
<message>
<location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/>
@ -2460,34 +2461,34 @@ Ulostulo:
<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>Tiedostojärjestelmää %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa.</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>Laitetta %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa.</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>Tiedostojärjestelmän %1 kokoa ei voi muuttaa.</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>Laitteen %1 kokoa ei voi muuttaa.</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>Tiedostojärjestelmän %1 kokoa on muutettava, mutta ei onnistu.</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>Laitteen %1 kokoa on muutettava, mutta ei onnistu.</translation>
</message>
</context>
<context>
@ -2500,12 +2501,12 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="55"/>
<source>Resize &lt;strong&gt;%2MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; to &lt;strong&gt;%3MiB&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Muuta &lt;strong&gt;%2MiB&lt;/strong&gt; osiota &lt;strong&gt;%1&lt;/strong&gt; - &lt;strong&gt;%3MiB&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="66"/>
<source>Resizing %2MiB partition %1 to %3MiB.</source>
<translation type="unfinished"/>
<translation>Muuntaa %2MiB osion %1 to %3MiB.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="85"/>
@ -2527,17 +2528,17 @@ Ulostulo:
<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>Muuta %1 levyn kokoa %2:sta %3.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="46"/>
<source>Resize volume group named &lt;strong&gt;%1&lt;/strong&gt; from &lt;strong&gt;%2&lt;/strong&gt; to &lt;strong&gt;%3&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Muuta levyä nimeltä &lt;strong&gt;%1&lt;/strong&gt; lähde &lt;strong&gt;%2&lt;/strong&gt; - &lt;strong&gt;%3&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="70"/>
<source>The installer failed to resize a volume group named &apos;%1&apos;.</source>
<translation type="unfinished"/>
<translation>Asentaja ei onnistunut muuttamaan nimettyä levyä &apos;%1&apos;.</translation>
</message>
</context>
<context>
@ -2545,27 +2546,28 @@ Ulostulo:
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="96"/>
<source>This computer does not satisfy the minimum requirements for setting up %1.&lt;br/&gt;Setup cannot continue. &lt;a href=&quot;#details&quot;&gt;Details...&lt;/a&gt;</source>
<translation type="unfinished"/>
<translation>Tämä tietokone ei täytä vähimmäisvaatimuksia, %1.&lt;br/&gt;Asennusta ei voi jatkaa. &lt;a href=&quot;#details&quot;&gt;Yksityiskohdat...&lt;/a&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="100"/>
<source>This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;Installation cannot continue. &lt;a href=&quot;#details&quot;&gt;Details...&lt;/a&gt;</source>
<translation type="unfinished"/>
<translation>Tämä tietokone ei täytä asennuksen vähimmäisvaatimuksia, %1.&lt;br/&gt;Asennus ei voi jatkua. &lt;a href=&quot;#details&quot;&gt;Yksityiskohdat...&lt;/a&gt;</translation>
</message>
<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.&lt;br/&gt;Setup can continue, but some features might be disabled.</source>
<translation type="unfinished"/>
<translation>Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.&lt;br/&gt;Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="122"/>
<source>This computer does not satisfy some of the recommended requirements for installing %1.&lt;br/&gt;Installation can continue, but some features might be disabled.</source>
<translation type="unfinished"/>
<translation>Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.
Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="160"/>
<source>This program will ask you some questions and set up %2 on your computer.</source>
<translation type="unfinished"/>
<translation>Tämä ohjelma kysyy joitakin kysymyksiä %2 ja asentaa tietokoneeseen.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="181"/>
@ -2601,12 +2603,12 @@ Ulostulo:
<message>
<location filename="../src/modules/users/SetHostNameJob.cpp" line="45"/>
<source>Set hostname &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Aseta koneellenimi &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/users/SetHostNameJob.cpp" line="52"/>
<source>Setting hostname %1.</source>
<translation type="unfinished"/>
<translation>Asetetaan koneellenimi %1.</translation>
</message>
<message>
<location filename="../src/modules/users/SetHostNameJob.cpp" line="62"/>
@ -2648,7 +2650,7 @@ Ulostulo:
<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>Näppäimistöasetusten kirjoittaminen epäonnistui olemassa olevaan /etc/default hakemistoon.</translation>
</message>
</context>
<context>
@ -2656,82 +2658,82 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="49"/>
<source>Set flags on partition %1.</source>
<translation type="unfinished"/>
<translation>Aseta liput osioon %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="52"/>
<source>Set flags on %1MiB %2 partition.</source>
<translation type="unfinished"/>
<translation>Aseta liput %1MiB %2 osioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="56"/>
<source>Set flags on new partition.</source>
<translation type="unfinished"/>
<translation>Aseta liput uuteen osioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="67"/>
<source>Clear flags on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Poista liput osiosta &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="71"/>
<source>Clear flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
<translation type="unfinished"/>
<translation>Poista liput %1MiB &lt;strong&gt;%2&lt;/strong&gt; osiosta.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="85"/>
<source>Flag %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition as &lt;strong&gt;%3&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Lippu %1MiB &lt;strong&gt;%2&lt;/strong&gt; osiosta &lt;strong&gt;%3&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="107"/>
<source>Clearing flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
<translation type="unfinished"/>
<translation>Tyhjennä liput %1MiB &lt;strong&gt;%2&lt;/strong&gt; osiossa.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="121"/>
<source>Setting flags &lt;strong&gt;%3&lt;/strong&gt; on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
<translation type="unfinished"/>
<translation>Asetetaan liput &lt;strong&gt;%3&lt;/strong&gt; %1MiB &lt;strong&gt;%2&lt;/strong&gt; osioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/>
<source>Clear flags on new partition.</source>
<translation type="unfinished"/>
<translation>Tyhjennä liput uuteen osioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="79"/>
<source>Flag partition &lt;strong&gt;%1&lt;/strong&gt; as &lt;strong&gt;%2&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Merkitse osio &lt;strong&gt;%1&lt;/strong&gt; - &lt;strong&gt;%2&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="91"/>
<source>Flag new partition as &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Merkitse uusi osio &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="103"/>
<source>Clearing flags on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Lipun poisto osiosta &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="111"/>
<source>Clearing flags on new partition.</source>
<translation type="unfinished"/>
<translation>Uusien osioiden lippujen poistaminen.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="115"/>
<source>Setting flags &lt;strong&gt;%2&lt;/strong&gt; on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Lippujen &lt;strong&gt;%2&lt;/strong&gt; asettaminen osioon &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="127"/>
<source>Setting flags &lt;strong&gt;%1&lt;/strong&gt; on new partition.</source>
<translation type="unfinished"/>
<translation>Asetetaan liput &lt;strong&gt;%1&lt;/strong&gt; uuteen osioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="144"/>
<source>The installer failed to set flags on partition %1.</source>
<translation type="unfinished"/>
<translation>Asennusohjelma ei voinut asettaa lippuja osioon %1.</translation>
</message>
</context>
<context>
@ -2744,7 +2746,7 @@ Ulostulo:
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="55"/>
<source>Setting password for user %1.</source>
<translation type="unfinished"/>
<translation>Salasanan asettaminen käyttäjälle %1.</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="112"/>
@ -2764,7 +2766,7 @@ Ulostulo:
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="124"/>
<source>passwd terminated with error code %1.</source>
<translation type="unfinished"/>
<translation>passwd päättyi virhekoodiin %1.</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="139"/>
@ -2812,7 +2814,7 @@ Ulostulo:
<message>
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="97"/>
<source>Cannot open /etc/timezone for writing</source>
<translation type="unfinished"/>
<translation>Ei voi avata /etc/timezone</translation>
</message>
</context>
<context>
@ -2820,7 +2822,7 @@ Ulostulo:
<message>
<location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="50"/>
<source>Shell Processes Job</source>
<translation type="unfinished"/>
<translation>Shell-prosessien työ</translation>
</message>
</context>
<context>
@ -2829,7 +2831,7 @@ Ulostulo:
<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>
@ -2837,12 +2839,12 @@ Ulostulo:
<message>
<location filename="../src/modules/summary/SummaryPage.cpp" line="57"/>
<source>This is an overview of what will happen once you start the setup procedure.</source>
<translation type="unfinished"/>
<translation>Tämä on yleiskuva siitä, mitä tapahtuu, kun asennusohjelma käynnistetään.</translation>
</message>
<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>Tämä on yleiskuva siitä, mitä tapahtuu asennuksen aloittamisen jälkeen.</translation>
</message>
</context>
<context>
@ -2863,17 +2865,17 @@ Ulostulo:
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="53"/>
<source>Sending installation feedback.</source>
<translation type="unfinished"/>
<translation>Lähetetään asennuksen palautetta.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="88"/>
<source>Internal error in install-tracking.</source>
<translation type="unfinished"/>
<translation>Sisäinen virhe asennuksen seurannassa.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="89"/>
<source>HTTP request timed out.</source>
<translation type="unfinished"/>
<translation>HTTP -pyyntö aikakatkaistiin.</translation>
</message>
</context>
<context>
@ -2881,28 +2883,28 @@ Ulostulo:
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="104"/>
<source>Machine feedback</source>
<translation type="unfinished"/>
<translation>Koneen palaute</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="114"/>
<source>Configuring machine feedback.</source>
<translation type="unfinished"/>
<translation>Konekohtaisen palautteen määrittäminen.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="133"/>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="136"/>
<source>Error in machine feedback configuration.</source>
<translation type="unfinished"/>
<translation>Virhe koneen palautteen määrityksessä.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="134"/>
<source>Could not configure machine feedback correctly, script error %1.</source>
<translation type="unfinished"/>
<translation>Konekohtaista palautetta ei voitu määrittää oikein, komentosarjan virhe %1.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="137"/>
<source>Could not configure machine feedback correctly, Calamares error %1.</source>
<translation type="unfinished"/>
<translation>Koneen palautetta ei voitu määrittää oikein, Calamares-virhe %1.</translation>
</message>
</context>
<context>
@ -2915,37 +2917,37 @@ Ulostulo:
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="24"/>
<source>Placeholder</source>
<translation type="unfinished"/>
<translation>Paikkamerkki</translation>
</message>
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="72"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;By selecting this, you will send &lt;span style=&quot; font-weight:600;&quot;&gt;no information at all&lt;/span&gt; about your installation.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Valitsemalla tämän, &lt;span style=&quot; font-weight:600;&quot;&gt;et lähetä mitään&lt;/span&gt; tietoja asennuksesta.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="271"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;placeholder&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;Click here for more information about user feedback&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;placeholder&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;Klikkaa tästä saadaksesi lisätietoja käyttäjäpalautteesta&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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>Asentamalla seuranta autat %1 näkemään, kuinka monta käyttäjää heillä on, mitä laitteita he asentavat %1 ja (kahdella viimeisellä vaihtoehdolla), saat jatkuvaa tietoa suosituista sovelluksista. Jos haluat nähdä, mitä tietoa lähetetään, napsauta kunkin alueen vieressä olevaa ohjekuvaketta.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="45"/>
<source>By selecting this you will send information about your installation and hardware. This information will &lt;b&gt;only be sent once&lt;/b&gt; after the installation finishes.</source>
<translation type="unfinished"/>
<translation>Kun valitset tämän, lähetät tietoja asennuksesta ja laitteistosta. &lt;b&gt;Nämä tiedot lähetetään vain kerran&lt;/b&gt; asennuksen päättymisen jälkeen.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="46"/>
<source>By selecting this you will &lt;b&gt;periodically&lt;/b&gt; send information about your installation, hardware and applications, to %1.</source>
<translation type="unfinished"/>
<translation>Kun valitset tämän, lähetät &lt;b&gt;määräajoin &lt;/b&gt; tietoja asennuksesta, laitteistosta ja sovelluksista osoitteeseen %1.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="47"/>
<source>By selecting this you will &lt;b&gt;regularly&lt;/b&gt; send information about your installation, hardware, applications and usage patterns, to %1.</source>
<translation type="unfinished"/>
<translation>Kun valitset tämän, lähetät &lt;b&gt;säännöllisesti &lt;/b&gt; tietoja asennuksesta, laitteistosta, sovelluksista ja käyttötavoista osoitteeseen %1.</translation>
</message>
</context>
<context>
@ -2961,12 +2963,12 @@ Ulostulo:
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="120"/>
<source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after setup.&lt;/small&gt;</source>
<translation type="unfinished"/>
<translation>&lt;small&gt;Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.&lt;/small&gt;</translation>
</message>
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="126"/>
<source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after installation.&lt;/small&gt;</source>
<translation type="unfinished"/>
<translation>&lt;small&gt;Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.&lt;/small&gt;</translation>
</message>
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="317"/>
@ -2976,7 +2978,7 @@ Ulostulo:
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="323"/>
<source>Your username contains invalid characters. Only lowercase letters and numbers are allowed.</source>
<translation type="unfinished"/>
<translation>Käyttäjätunnuksesi sisältää virheellisiä merkkejä. Vain pienet kirjaimet ja numerot ovat sallittuja.</translation>
</message>
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="361"/>
@ -3018,17 +3020,17 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="20"/>
<source>List of Physical Volumes</source>
<translation type="unfinished"/>
<translation>Fyysisten levyjen luoettelo</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="30"/>
<source>Volume Group Name:</source>
<translation type="unfinished"/>
<translation>Aseman ryhmän nimi:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="43"/>
<source>Volume Group Type:</source>
<translation type="unfinished"/>
<translation>Aseman ryhmän tyyppi:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="56"/>
@ -3058,7 +3060,7 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="142"/>
<source>Quantity of LVs:</source>
<translation type="unfinished"/>
<translation>Määrä LVs:</translation>
</message>
</context>
<context>
@ -3071,12 +3073,12 @@ Ulostulo:
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="160"/>
<source>&amp;Release notes</source>
<translation type="unfinished"/>
<translation>&amp;Julkaisutiedot</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="150"/>
<source>&amp;Known issues</source>
<translation type="unfinished"/>
<translation>&amp;Tunnetut ongelmat</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="17"/>
@ -3087,7 +3089,7 @@ Ulostulo:
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
<source>&amp;Support</source>
<translation type="unfinished"/>
<translation>&amp;Tuki</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="130"/>
@ -3097,27 +3099,27 @@ Ulostulo:
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="76"/>
<source>&lt;h1&gt;Welcome to the %1 installer.&lt;/h1&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Tervetuloa %1 -asennusohjelmaan.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="75"/>
<source>&lt;h1&gt;Welcome to the Calamares installer for %1.&lt;/h1&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Tervetuloa Calamares -asennusohjelmaan %1.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="71"/>
<source>&lt;h1&gt;Welcome to the Calamares setup program for %1.&lt;/h1&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Tervetuloa Calamares -asennusohjelmaan %1.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="72"/>
<source>&lt;h1&gt;Welcome to %1 setup.&lt;/h1&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Tervetuloa %1 asennukseen.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="90"/>
<source>About %1 setup</source>
<translation type="unfinished"/>
<translation>Tietoja %1 asetuksista</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="91"/>
@ -3127,7 +3129,7 @@ Ulostulo:
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="94"/>
<source>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2019 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Thanks to &lt;a href=&quot;https://calamares.io/team/&quot;&gt;the Calamares team&lt;/a&gt; and the &lt;a href=&quot;https://www.transifex.com/calamares/calamares/&quot;&gt;Calamares translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://calamares.io/&quot;&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href=&quot;http://www.blue-systems.com/&quot;&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;- %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2019 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Kiitokset &lt;a href=&quot;https://calamares.io/team/&quot;&gt;Calamares-tiimille&lt;/a&gt; ja &lt;a href=&quot;https://www.transifex.com/calamares/calamares/&quot;&gt;Calamares kääntäjille&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://calamares.io/&quot;&gt;Calamaresin&lt;/a&gt; kehitystä sponsoroi &lt;br/&gt;&lt;a href=&quot;http://www.blue-systems.com/&quot;&gt;Blue Systems&lt;/a&gt; - Liberating Software.</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="201"/>

View File

@ -107,7 +107,7 @@
<message>
<location filename="../src/libcalamaresui/ExecutionViewStep.cpp" line="82"/>
<source>Set up</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/libcalamaresui/ExecutionViewStep.cpp" line="83"/>
@ -195,12 +195,12 @@
<message numerus="yes">
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="147"/>
<source>Waiting for %n module(s).</source>
<translation type="unfinished"><numerusform></numerusform></translation>
<translation><numerusform> %n </numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="148"/>
<source>(%n second(s))</source>
<translation type="unfinished"><numerusform></numerusform></translation>
<translation><numerusform>(%n (s))</numerusform></translation>
</message>
<message>
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="152"/>
@ -466,7 +466,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="969"/>
<source>%1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.</source>
<translation type="unfinished"/>
<translation>%1 %2MiB %4 %3MiB </translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1067"/>
@ -709,12 +709,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="44"/>
<source>Create new %2MiB partition on %4 (%3) with file system %1.</source>
<translation type="unfinished"/>
<translation> %4 (%3) %1 %2MiB </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="55"/>
<source>Create new &lt;strong&gt;%2MiB&lt;/strong&gt; partition on &lt;strong&gt;%4&lt;/strong&gt; (%3) with file system &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Create new &lt;strong&gt;%4&lt;/strong&gt; (%3) &lt;strong&gt;%1&lt;/strong&gt; &lt;strong&gt;%2MiB&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="67"/>

View File

@ -292,7 +292,7 @@
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="372"/>
<source>Cancel setup?</source>
<translation type="unfinished"/>
<translation>Anulować ustawianie?</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="373"/>
@ -1144,7 +1144,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.</translatio
<message>
<location filename="../src/modules/finished/FinishedViewStep.cpp" line="132"/>
<source>Setup Complete</source>
<translation type="unfinished"/>
<translation>Ustawianie ukończone</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedViewStep.cpp" line="133"/>
@ -1154,7 +1154,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.</translatio
<message>
<location filename="../src/modules/finished/FinishedViewStep.cpp" line="135"/>
<source>The setup of %1 is complete.</source>
<translation type="unfinished"/>
<translation>Ustawianie %1 jest ukończone.</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedViewStep.cpp" line="136"/>
@ -1551,7 +1551,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.</translatio
<message>
<location filename="../src/modules/oemid/OEMViewStep.cpp" line="115"/>
<source>OEM Configuration</source>
<translation type="unfinished"/>
<translation>Konfiguracja OEM</translation>
</message>
<message>
<location filename="../src/modules/oemid/OEMViewStep.cpp" line="120"/>
@ -2140,7 +2140,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.</translatio
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="639"/>
<source>There are no partitons to install on.</source>
<translation type="unfinished"/>
<translation>Brak partycji, na których można zainstalować.</translation>
</message>
</context>
<context>
@ -2311,7 +2311,7 @@ Wyjście:
<message>
<location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="47"/>
<source>(no mount point)</source>
<translation type="unfinished"/>
<translation>(brak punktu montowania)</translation>
</message>
<message>
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="62"/>
@ -3083,7 +3083,7 @@ i nie uruchomi się</translation>
<location filename="../src/modules/welcome/WelcomePage.ui" line="17"/>
<location filename="../src/modules/welcome/WelcomePage.ui" line="72"/>
<source>Select language</source>
<translation type="unfinished"/>
<translation>Wybierz język</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
@ -3113,7 +3113,7 @@ i nie uruchomi się</translation>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="72"/>
<source>&lt;h1&gt;Welcome to %1 setup.&lt;/h1&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Witamy w ustawianiu %1.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="90"/>

Binary file not shown.

View File

@ -0,0 +1,372 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-10 19:18-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca@valencia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/modules/grubcfg/main.py:37
msgid "Configure GRUB."
msgstr ""
#: src/modules/mount/main.py:38
msgid "Mounting partitions."
msgstr ""
#: src/modules/mount/main.py:150 src/modules/initcpiocfg/main.py:187
#: src/modules/initcpiocfg/main.py:191
#: src/modules/luksopenswaphookcfg/main.py:95
#: src/modules/luksopenswaphookcfg/main.py:99 src/modules/rawfs/main.py:171
#: src/modules/machineid/main.py:49 src/modules/initramfscfg/main.py:94
#: src/modules/initramfscfg/main.py:98 src/modules/openrcdmcryptcfg/main.py:78
#: src/modules/openrcdmcryptcfg/main.py:82
#: src/modules/luksbootkeyfile/main.py:51 src/modules/fstab/main.py:312
#: src/modules/fstab/main.py:316 src/modules/localecfg/main.py:144
#: src/modules/networkcfg/main.py:48
msgid "Configuration Error"
msgstr ""
#: src/modules/mount/main.py:151 src/modules/initcpiocfg/main.py:188
#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172
#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79
#: src/modules/luksbootkeyfile/main.py:52 src/modules/fstab/main.py:313
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/services-systemd/main.py:35
msgid "Configure systemd services"
msgstr ""
#: src/modules/services-systemd/main.py:68
#: src/modules/services-openrc/main.py:102
msgid "Cannot modify service"
msgstr ""
#: src/modules/services-systemd/main.py:69
msgid ""
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-systemd/main.py:72
#: src/modules/services-systemd/main.py:76
msgid "Cannot enable systemd service <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:74
msgid "Cannot enable systemd target <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:78
msgid "Cannot disable systemd target <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:80
msgid "Cannot mask systemd unit <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:82
msgid ""
"Unknown systemd commands <code>{command!s}</code> and "
"<code>{suffix!s}</code> for unit {name!s}."
msgstr ""
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
msgstr ""
#: src/modules/unpackfs/main.py:41
msgid "Filling up filesystems."
msgstr ""
#: src/modules/unpackfs/main.py:159
msgid "rsync failed with error code {}."
msgstr ""
#: src/modules/unpackfs/main.py:220 src/modules/unpackfs/main.py:238
msgid "Failed to unpack image \"{}\""
msgstr ""
#: src/modules/unpackfs/main.py:221
msgid ""
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
"installed"
msgstr ""
#: src/modules/unpackfs/main.py:320
msgid "No mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:321
msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
msgstr ""
#: src/modules/unpackfs/main.py:326
msgid "Bad mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:327
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
msgstr ""
#: src/modules/unpackfs/main.py:340 src/modules/unpackfs/main.py:347
#: src/modules/unpackfs/main.py:352
msgid "Bad unsquash configuration"
msgstr ""
#: src/modules/unpackfs/main.py:341
msgid "The filesystem for \"{}\" ({}) is not supported"
msgstr ""
#: src/modules/unpackfs/main.py:348
msgid "The source filesystem \"{}\" does not exist"
msgstr ""
#: src/modules/unpackfs/main.py:353
msgid "The destination \"{}\" in the target system is not a directory"
msgstr ""
#: src/modules/displaymanager/main.py:381
msgid "Cannot write KDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:382
msgid "KDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:443
msgid "Cannot write LXDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:444
msgid "LXDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:527
msgid "Cannot write LightDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:528
msgid "LightDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:602
msgid "Cannot configure LightDM"
msgstr ""
#: src/modules/displaymanager/main.py:603
msgid "No LightDM greeter installed."
msgstr ""
#: src/modules/displaymanager/main.py:634
msgid "Cannot write SLIM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:635
msgid "SLIM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:750
msgid "No display managers selected for the displaymanager module."
msgstr ""
#: src/modules/displaymanager/main.py:751
msgid ""
"The displaymanagers list is empty or undefined in bothglobalstorage and "
"displaymanager.conf."
msgstr ""
#: src/modules/displaymanager/main.py:831
msgid "Display manager configuration was incomplete"
msgstr ""
#: src/modules/initcpiocfg/main.py:36
msgid "Configuring mkinitcpio."
msgstr ""
#: src/modules/initcpiocfg/main.py:192
#: src/modules/luksopenswaphookcfg/main.py:100
#: src/modules/machineid/main.py:50 src/modules/initramfscfg/main.py:99
#: src/modules/openrcdmcryptcfg/main.py:83 src/modules/fstab/main.py:317
#: src/modules/localecfg/main.py:145 src/modules/networkcfg/main.py:49
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/initcpio/main.py:33
msgid "Creating initramfs with mkinitcpio."
msgstr ""
#: src/modules/initcpio/main.py:47
msgid "Process Failed"
msgstr ""
#: src/modules/initcpio/main.py:48
msgid ""
"Process <pre>mkinitcpio</pre> failed with error code {!s}. The command was "
"<pre>{!s}</pre>."
msgstr ""
#: src/modules/luksopenswaphookcfg/main.py:35
msgid "Configuring encrypted swap."
msgstr ""
#: src/modules/rawfs/main.py:35
msgid "Installing data."
msgstr ""
#: src/modules/services-openrc/main.py:38
msgid "Configure OpenRC services"
msgstr ""
#: src/modules/services-openrc/main.py:66
msgid "Cannot add service {name!s} to run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:68
msgid "Cannot remove service {name!s} from run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:70
msgid ""
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
"level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:103
msgid ""
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-openrc/main.py:110
msgid "Target runlevel does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:111
msgid ""
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/services-openrc/main.py:119
msgid "Target service does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:120
msgid ""
"The path for service {name!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/plymouthcfg/main.py:36
msgid "Configure Plymouth theme"
msgstr ""
#: src/modules/machineid/main.py:36
msgid "Generate machine-id."
msgstr ""
#: src/modules/packages/main.py:62
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
msgid "Install packages."
msgstr ""
#: src/modules/packages/main.py:67
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
#: src/modules/packages/main.py:70
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
#: src/modules/bootloader/main.py:51
msgid "Install bootloader."
msgstr ""
#: src/modules/removeuser/main.py:34
msgid "Remove live user from target system"
msgstr ""
#: src/modules/initramfs/main.py:35
msgid "Creating initramfs."
msgstr ""
#: src/modules/initramfs/main.py:49
msgid "Failed to run update-initramfs on the target"
msgstr ""
#: src/modules/initramfs/main.py:50 src/modules/dracut/main.py:59
msgid "The exit code was {}"
msgstr ""
#: src/modules/hwclock/main.py:35
msgid "Setting hardware clock."
msgstr ""
#: src/modules/dracut/main.py:36
msgid "Creating initramfs with dracut."
msgstr ""
#: src/modules/dracut/main.py:58
msgid "Failed to run dracut on the target"
msgstr ""
#: src/modules/initramfscfg/main.py:41
msgid "Configuring initramfs."
msgstr ""
#: src/modules/openrcdmcryptcfg/main.py:34
msgid "Configuring OpenRC dmcrypt service."
msgstr ""
#: src/modules/luksbootkeyfile/main.py:35
msgid "Configuring LUKS key file."
msgstr ""
#: src/modules/luksbootkeyfile/main.py:74
msgid "Encrypted rootfs setup error"
msgstr ""
#: src/modules/luksbootkeyfile/main.py:75
msgid "Rootfs partition {!s} is LUKS but no passphrase found."
msgstr ""
#: src/modules/fstab/main.py:38
msgid "Writing fstab."
msgstr ""
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
msgstr ""
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
msgstr ""
#: src/modules/localecfg/main.py:39
msgid "Configuring locales."
msgstr ""
#: src/modules/networkcfg/main.py:37
msgid "Saving network configuration."
msgstr ""

View File

@ -47,7 +47,7 @@ msgstr "Määritysvirhe"
#: src/modules/initramfscfg/main.py:95 src/modules/openrcdmcryptcfg/main.py:79
#: src/modules/luksbootkeyfile/main.py:52 src/modules/fstab/main.py:313
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr ""
msgstr "Ei ole määritetty käyttämään osioita <pre>{!s}</pre> ."
#: src/modules/services-systemd/main.py:35
msgid "Configure systemd services"
@ -61,30 +61,32 @@ msgstr "Palvelua ei voi muokata"
#: src/modules/services-systemd/main.py:69
msgid ""
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
msgstr "<code>systemctl {arg!s}</code> chroot palautti virhe koodin {num!s}."
#: src/modules/services-systemd/main.py:72
#: src/modules/services-systemd/main.py:76
msgid "Cannot enable systemd service <code>{name!s}</code>."
msgstr ""
msgstr "Systemd-palvelua ei saa käyttöön <code>{name!s}</code>."
#: src/modules/services-systemd/main.py:74
msgid "Cannot enable systemd target <code>{name!s}</code>."
msgstr ""
msgstr "Systemd-kohdetta ei saa käyttöön <code>{name!s}</code>."
#: src/modules/services-systemd/main.py:78
msgid "Cannot disable systemd target <code>{name!s}</code>."
msgstr ""
msgstr "Systemd-kohdetta ei-voi poistaa käytöstä <code>{name!s}</code>."
#: src/modules/services-systemd/main.py:80
msgid "Cannot mask systemd unit <code>{name!s}</code>."
msgstr ""
msgstr "Ei voi peittää systemd-yksikköä <code>{name!s}</code>."
#: src/modules/services-systemd/main.py:82
msgid ""
"Unknown systemd commands <code>{command!s}</code> and "
"<code>{suffix!s}</code> for unit {name!s}."
msgstr ""
"Tuntematon systemd-komennot <code>{command!s}</code> ja "
"<code>{suffix!s}</code> yksikölle {name!s}."
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
@ -112,11 +114,11 @@ msgstr ""
#: src/modules/unpackfs/main.py:320
msgid "No mount point for root partition"
msgstr ""
msgstr "Ei liitoskohtaa juuri root-osiolle"
#: src/modules/unpackfs/main.py:321
msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
msgstr ""
msgstr "globalstorage ei sisällä \"rootMountPoint\" avainta, eikä tee mitään"
#: src/modules/unpackfs/main.py:326
msgid "Bad mount point for root partition"
@ -124,7 +126,7 @@ msgstr "Huono kiinnityspiste root-osioon"
#: src/modules/unpackfs/main.py:327
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
msgstr ""
msgstr "rootMountPoint on \"{}\", jota ei ole, eikä tee mitään"
#: src/modules/unpackfs/main.py:340 src/modules/unpackfs/main.py:347
#: src/modules/unpackfs/main.py:352
@ -133,39 +135,39 @@ msgstr "Huono epäpuhdas kokoonpano"
#: src/modules/unpackfs/main.py:341
msgid "The filesystem for \"{}\" ({}) is not supported"
msgstr ""
msgstr "Tiedostojärjestelmää \"{}\" ({}) ei tueta"
#: src/modules/unpackfs/main.py:348
msgid "The source filesystem \"{}\" does not exist"
msgstr ""
msgstr "Lähde tiedostojärjestelmää \"{}\" ei ole olemassa"
#: src/modules/unpackfs/main.py:353
msgid "The destination \"{}\" in the target system is not a directory"
msgstr ""
msgstr "Kohdejärjestelmän \"{}\" kohde ei ole hakemisto"
#: src/modules/displaymanager/main.py:381
msgid "Cannot write KDM configuration file"
msgstr ""
msgstr "KDM-määritystiedostoa ei voi kirjoittaa"
#: src/modules/displaymanager/main.py:382
msgid "KDM config file {!s} does not exist"
msgstr ""
msgstr "KDM-määritystiedostoa {!s} ei ole olemassa"
#: src/modules/displaymanager/main.py:443
msgid "Cannot write LXDM configuration file"
msgstr ""
msgstr "LXDM-määritystiedostoa ei voi kirjoittaa"
#: src/modules/displaymanager/main.py:444
msgid "LXDM config file {!s} does not exist"
msgstr ""
msgstr "LXDM-määritystiedostoa {!s} ei ole olemassa"
#: src/modules/displaymanager/main.py:527
msgid "Cannot write LightDM configuration file"
msgstr ""
msgstr "LightDM-määritystiedostoa ei voi kirjoittaa"
#: src/modules/displaymanager/main.py:528
msgid "LightDM config file {!s} does not exist"
msgstr ""
msgstr "LightDM-määritystiedostoa {!s} ei ole olemassa"
#: src/modules/displaymanager/main.py:602
msgid "Cannot configure LightDM"
@ -185,13 +187,15 @@ msgstr "SLIM-määritystiedostoa {!s} ei ole olemassa"
#: src/modules/displaymanager/main.py:750
msgid "No display managers selected for the displaymanager module."
msgstr ""
msgstr "Displaymanager-moduulia varten ei ole valittu näyttönhallintaa."
#: src/modules/displaymanager/main.py:751
msgid ""
"The displaymanagers list is empty or undefined in bothglobalstorage and "
"displaymanager.conf."
msgstr ""
"Displaymanager-luettelo on tyhjä tai määrittelemätön, sekä globalstorage, "
"että displaymanager.conf tiedostossa."
#: src/modules/displaymanager/main.py:831
msgid "Display manager configuration was incomplete"
@ -208,10 +212,11 @@ msgstr "Määritetään mkinitcpio."
#: src/modules/localecfg/main.py:145 src/modules/networkcfg/main.py:49
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
"Root-juuri kiinnityspistettä <pre>{!s}</pre> ei ole annettu käytettäväksi."
#: src/modules/initcpio/main.py:33
msgid "Creating initramfs with mkinitcpio."
msgstr ""
msgstr "Initramfs luominen mkinitcpion avulla."
#: src/modules/initcpio/main.py:47
msgid "Process Failed"
@ -222,10 +227,12 @@ msgid ""
"Process <pre>mkinitcpio</pre> failed with error code {!s}. The command was "
"<pre>{!s}</pre>."
msgstr ""
"Prosessi <pre>mkinitcpio</pre> epäonnistui virhekoodilla {!s}. Komento oli "
"<pre>{!s}</pre>."
#: src/modules/luksopenswaphookcfg/main.py:35
msgid "Configuring encrypted swap."
msgstr ""
msgstr "Salatun swapin määrittäminen."
#: src/modules/rawfs/main.py:35
msgid "Installing data."
@ -233,63 +240,67 @@ msgstr "Asennetaan tietoja."
#: src/modules/services-openrc/main.py:38
msgid "Configure OpenRC services"
msgstr ""
msgstr "Määritä OpenRC-palvelut"
#: src/modules/services-openrc/main.py:66
msgid "Cannot add service {name!s} to run-level {level!s}."
msgstr ""
msgstr "Palvelua {name!s} ei-voi lisätä suorituksen tasolle {level!s}."
#: src/modules/services-openrc/main.py:68
msgid "Cannot remove service {name!s} from run-level {level!s}."
msgstr ""
msgstr "Ei voi poistaa palvelua {name!s} ajo-tasolla {level!s}."
#: src/modules/services-openrc/main.py:70
msgid ""
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
"level {level!s}."
msgstr ""
"Tuntematon huoltotoiminto<code>{arg!s}</code> palvelun {name!s} "
"palvelutasolle {level!s}."
#: src/modules/services-openrc/main.py:103
msgid ""
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
"<code>rc-update {arg!s}</code> palautti chrootissa virhekoodin {num!s}."
#: src/modules/services-openrc/main.py:110
msgid "Target runlevel does not exist"
msgstr ""
msgstr "Kohde runlevel ei ole olemassa"
#: src/modules/services-openrc/main.py:111
msgid ""
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
msgstr "Ajotason polku {level!s} on <code>{path!s}</code>, jota ei ole."
#: src/modules/services-openrc/main.py:119
msgid "Target service does not exist"
msgstr ""
msgstr "Kohdepalvelua ei ole"
#: src/modules/services-openrc/main.py:120
msgid ""
"The path for service {name!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
"Palvelun polku {name!s} on <code>{path!s}</code>, jota ei ole olemassa."
#: src/modules/plymouthcfg/main.py:36
msgid "Configure Plymouth theme"
msgstr ""
msgstr "Määritä Plymouthin teema"
#: src/modules/machineid/main.py:36
msgid "Generate machine-id."
msgstr ""
msgstr "Luo koneen-id."
#: src/modules/packages/main.py:62
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
msgstr "Pakettien käsittely (%(count)d / %(total)d)"
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
msgid "Install packages."
msgstr ""
msgstr "Asenna paketteja."
#: src/modules/packages/main.py:67
#, python-format
@ -307,72 +318,72 @@ msgstr[1] ""
#: src/modules/bootloader/main.py:51
msgid "Install bootloader."
msgstr ""
msgstr "Asenna bootloader."
#: src/modules/removeuser/main.py:34
msgid "Remove live user from target system"
msgstr ""
msgstr "Poista Live-käyttäjä kohdejärjestelmästä"
#: src/modules/initramfs/main.py:35
msgid "Creating initramfs."
msgstr ""
msgstr "Luodaan initramfs."
#: src/modules/initramfs/main.py:49
msgid "Failed to run update-initramfs on the target"
msgstr ""
msgstr "Kohteen update-initramfs suorittaminen epäonnistui"
#: src/modules/initramfs/main.py:50 src/modules/dracut/main.py:59
msgid "The exit code was {}"
msgstr ""
msgstr "Poistumiskoodi oli {}"
#: src/modules/hwclock/main.py:35
msgid "Setting hardware clock."
msgstr ""
msgstr "Laitteiston kellon asettaminen."
#: src/modules/dracut/main.py:36
msgid "Creating initramfs with dracut."
msgstr ""
msgstr "Initramfs luominen dracut:lla."
#: src/modules/dracut/main.py:58
msgid "Failed to run dracut on the target"
msgstr ""
msgstr "Dracut-ohjelman suorittaminen ei onnistunut"
#: src/modules/initramfscfg/main.py:41
msgid "Configuring initramfs."
msgstr ""
msgstr "Määritetään initramfs."
#: src/modules/openrcdmcryptcfg/main.py:34
msgid "Configuring OpenRC dmcrypt service."
msgstr ""
msgstr "OpenRC dmcrypt-palvelun määrittäminen."
#: src/modules/luksbootkeyfile/main.py:35
msgid "Configuring LUKS key file."
msgstr ""
msgstr "LUKS-avaintiedoston määrittäminen."
#: src/modules/luksbootkeyfile/main.py:74
msgid "Encrypted rootfs setup error"
msgstr ""
msgstr "Salattu rootfs asennusvirhe"
#: src/modules/luksbootkeyfile/main.py:75
msgid "Rootfs partition {!s} is LUKS but no passphrase found."
msgstr ""
msgstr "Rootfs-osio {!s} on LUKS, mutta salasanaa ei löydy."
#: src/modules/fstab/main.py:38
msgid "Writing fstab."
msgstr ""
msgstr "Fstab kirjoittaminen."
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
msgstr ""
msgstr "Harjoitus python-työ."
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
msgstr ""
msgstr "Harjoitus python-vaihe {}"
#: src/modules/localecfg/main.py:39
msgid "Configuring locales."
msgstr ""
msgstr "Määritetään locales."
#: src/modules/networkcfg/main.py:37
msgid "Saving network configuration."
msgstr ""
msgstr "Tallennetaan verkon määrityksiä."

Binary file not shown.

View File

@ -25,11 +25,11 @@ msgstr ""
#: src/modules/grubcfg/main.py:37
msgid "Configure GRUB."
msgstr ""
msgstr "Konfiguracja GRUB."
#: src/modules/mount/main.py:38
msgid "Mounting partitions."
msgstr ""
msgstr "Montowanie partycji."
#: src/modules/mount/main.py:150 src/modules/initcpiocfg/main.py:187
#: src/modules/initcpiocfg/main.py:191
@ -42,7 +42,7 @@ msgstr ""
#: src/modules/fstab/main.py:316 src/modules/localecfg/main.py:144
#: src/modules/networkcfg/main.py:48
msgid "Configuration Error"
msgstr ""
msgstr "Błąd konfiguracji"
#: src/modules/mount/main.py:151 src/modules/initcpiocfg/main.py:188
#: src/modules/luksopenswaphookcfg/main.py:96 src/modules/rawfs/main.py:172
@ -53,12 +53,12 @@ msgstr ""
#: src/modules/services-systemd/main.py:35
msgid "Configure systemd services"
msgstr ""
msgstr "Konfiguracja usług systemd"
#: src/modules/services-systemd/main.py:68
#: src/modules/services-openrc/main.py:102
msgid "Cannot modify service"
msgstr ""
msgstr "Nie można zmodyfikować usług"
#: src/modules/services-systemd/main.py:69
msgid ""
@ -167,11 +167,11 @@ msgstr "Plik konfiguracji LXDM {!s} nie istnieje"
#: src/modules/displaymanager/main.py:527
msgid "Cannot write LightDM configuration file"
msgstr "nie można zapisać pliku konfiguracji LightDM"
msgstr "Nie można zapisać pliku konfiguracji LightDM"
#: src/modules/displaymanager/main.py:528
msgid "LightDM config file {!s} does not exist"
msgstr "Plik konfiguracji {!s} nie istnieje"
msgstr "Plik konfiguracji LightDM {!s} nie istnieje"
#: src/modules/displaymanager/main.py:602
msgid "Cannot configure LightDM"
@ -179,7 +179,7 @@ msgstr "Nie można skonfigurować LightDM"
#: src/modules/displaymanager/main.py:603
msgid "No LightDM greeter installed."
msgstr "Nie zainstalowano ekranu witającego LightDM"
msgstr "Nie zainstalowano ekranu powitalnego LightDM."
#: src/modules/displaymanager/main.py:634
msgid "Cannot write SLIM configuration file"
@ -191,7 +191,7 @@ msgstr "Plik konfiguracji SLIM {!s} nie istnieje"
#: src/modules/displaymanager/main.py:750
msgid "No display managers selected for the displaymanager module."
msgstr "Brak wybranych menedżerów wyświetlania dla modułu displaymanager"
msgstr "Brak wybranych menedżerów wyświetlania dla modułu displaymanager."
#: src/modules/displaymanager/main.py:751
msgid ""
@ -203,11 +203,11 @@ msgstr ""
#: src/modules/displaymanager/main.py:831
msgid "Display manager configuration was incomplete"
msgstr "Konfiguracja menedzera wyświetlania była niekompletna"
msgstr "Konfiguracja menedżera wyświetlania była niekompletna"
#: src/modules/initcpiocfg/main.py:36
msgid "Configuring mkinitcpio."
msgstr ""
msgstr "Konfigurowanie mkinitcpio."
#: src/modules/initcpiocfg/main.py:192
#: src/modules/luksopenswaphookcfg/main.py:100
@ -219,11 +219,11 @@ msgstr ""
#: src/modules/initcpio/main.py:33
msgid "Creating initramfs with mkinitcpio."
msgstr ""
msgstr "Tworzenie initramfs z mkinitcpio."
#: src/modules/initcpio/main.py:47
msgid "Process Failed"
msgstr ""
msgstr "Błąd procesu"
#: src/modules/initcpio/main.py:48
msgid ""
@ -241,7 +241,7 @@ msgstr "Instalowanie danych."
#: src/modules/services-openrc/main.py:38
msgid "Configure OpenRC services"
msgstr ""
msgstr "Konfiguracja usług OpenRC"
#: src/modules/services-openrc/main.py:66
msgid "Cannot add service {name!s} to run-level {level!s}."
@ -274,7 +274,7 @@ msgstr ""
#: src/modules/services-openrc/main.py:119
msgid "Target service does not exist"
msgstr ""
msgstr "Docelowa usługa nie istnieje"
#: src/modules/services-openrc/main.py:120
msgid ""
@ -284,7 +284,7 @@ msgstr ""
#: src/modules/plymouthcfg/main.py:36
msgid "Configure Plymouth theme"
msgstr ""
msgstr "Konfiguracja motywu Plymouth"
#: src/modules/machineid/main.py:36
msgid "Generate machine-id."
@ -319,7 +319,7 @@ msgstr[3] "Usuwanie %(num)d pakietów."
#: src/modules/bootloader/main.py:51
msgid "Install bootloader."
msgstr ""
msgstr "Instalacja programu rozruchowego."
#: src/modules/removeuser/main.py:34
msgid "Remove live user from target system"
@ -327,7 +327,7 @@ msgstr ""
#: src/modules/initramfs/main.py:35
msgid "Creating initramfs."
msgstr ""
msgstr "Tworzenie initramfs."
#: src/modules/initramfs/main.py:49
msgid "Failed to run update-initramfs on the target"
@ -343,7 +343,7 @@ msgstr ""
#: src/modules/dracut/main.py:36
msgid "Creating initramfs with dracut."
msgstr ""
msgstr "Tworzenie initramfs z dracut."
#: src/modules/dracut/main.py:58
msgid "Failed to run dracut on the target"
@ -351,7 +351,7 @@ msgstr ""
#: src/modules/initramfscfg/main.py:41
msgid "Configuring initramfs."
msgstr ""
msgstr "Konfigurowanie initramfs."
#: src/modules/openrcdmcryptcfg/main.py:34
msgid "Configuring OpenRC dmcrypt service."
@ -359,7 +359,7 @@ msgstr ""
#: src/modules/luksbootkeyfile/main.py:35
msgid "Configuring LUKS key file."
msgstr ""
msgstr "Konfigurowanie pliku klucza LUKS."
#: src/modules/luksbootkeyfile/main.py:74
msgid "Encrypted rootfs setup error"
@ -371,7 +371,7 @@ msgstr ""
#: src/modules/fstab/main.py:38
msgid "Writing fstab."
msgstr ""
msgstr "Zapisywanie fstab."
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
@ -383,8 +383,8 @@ msgstr "Krok fikcyjny Python {}"
#: src/modules/localecfg/main.py:39
msgid "Configuring locales."
msgstr ""
msgstr "Konfigurowanie ustawień lokalnych."
#: src/modules/networkcfg/main.py:37
msgid "Saving network configuration."
msgstr ""
msgstr "Zapisywanie konfiguracji sieci."

View File

@ -1,7 +1 @@
file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" )
foreach( SUBDIRECTORY ${SUBDIRECTORIES} )
set( _sd "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}" )
if( IS_DIRECTORY "${_sd}" AND EXISTS "${_sd}/branding.desc" )
calamares_add_branding_subdirectory( ${SUBDIRECTORY} )
endif()
endforeach()
calamares_add_branding_subdirectory( default )

View File

@ -12,6 +12,7 @@ forking Calamares just for adding some files. Calamares installs
CMake support macros to help create branding packages. See the
calamares-branding repository for examples of stand-alone branding.
## Examples
There is one example of a branding component included with Calamares,
@ -20,7 +21,9 @@ so that it can be run directly from the build directory for testing purposes:
- `default/` is a sample brand for the Generic Linux distribution. It uses
the default Calamares icons and a as start-page splash it provides a
tag-cloud view of languages. The slideshow is a basic one with a few
slides of text and a single image. No translations are provided.
slides of text and a single image. Translations (done by hand, not via
the usual mechanism of Calamares translations) in English, Arabic, Dutch
and French are available.
Since the slideshow can be **any** QML, it is limited only by your designers
imagination and your QML experience. For straightforward presentations,
@ -29,6 +32,41 @@ repository.
[1] https://github.com/calamares/calamares-branding
## API Versions
In Calamares versions prior to 3.2.10, the QML slideshow was loaded
synchronously when the installation page is shown. This can lead to
noticeable lag when showing that page. The QML is written start when
it is loaded, by responding to the `onComplete` signal.
Calamares 3.2.10 introduces an API versioning scheme which uses different
loading mechanisms.
- **API version 1** Loads the QML slideshow synchronously, as before.
- The QML can use `onComplete` to start timers, etc. for progress
or animation.
- Translations are supported through `qsTr()` and the language that is
in use when the installation slideshow is loaded, will be used
(once the installation part is running, it can't change anyway).
- **API version 2** Loads the QML slideshow **a**synchronously, on
startup (generally during the requirements-checking phase of Calamares)
so that no compilation lag is seen.
- The QML should **not** use `onComplete`, since the QML is loaded and
instantiated at startup. Instead,
- The QML should provide functions `onActivate()` and `onLeave()` in the
root object of the slideshow. These are called when the slideshow
should start (e.g. becomes visible) and stop.
- Translations are supported through `qsTr()`. However, since the language
can change after the QML is loaded, code should count on the bindings
being re-evaluated on language change. Translation updates (e.g. change
of language) is **only supported** with Qt 5.10 and later.
The setting *slideshowAPI* in `branding.desc` indicates which one to use
for a given branding slideshow. Which API to use is really a function of
the QML. Expect the version 1 API to be deprecated in the course of Calamares 3.3.
## Translations
QML files in a branding component can be translated. Translations should
@ -37,6 +75,9 @@ Qt translation files are supported (`.ts` sources which get compiled into
`.qm`). Inside the `lang` subdirectory all translation files must be named
according to the scheme `calamares-<component name>_<language>.ts`.
The example branding component, called *default*, therefore has translation
files names `calamares-default_nl.ts` (similar for other languages than Dutch).
Text in your `show.qml` (or whatever *slideshow* is set to in the descriptor
file) should be enclosed in this form for translations
@ -53,6 +94,7 @@ If you are packaging the branding by hand, use
```
with all the language suffixes to *file*.
## Presentation
The default QML classes provided by Calamares can be used for a simple
@ -83,7 +125,8 @@ Generally, you will add a few presentation-level elements first,
then slides.
- For visible navigation arrows, add elements of class *ForwardButton* and
*BackwardButton*. Set the *source* property of each to a suitable
image. See the `fancy/` example. It is recommended to turn off other
image. See the `fancy/` example in the external branding-examples
repository. It is recommended to turn off other
kinds of navigation when visible navigation is used.
- To indicate where the user is, add an element of class *SlideCounter*.
This indicates in "n / total" form where the user is in the slideshow.
@ -107,6 +150,7 @@ The presentation classes can be used to produce a fairly dry slideshow
for the installation process; it is recommended to experiment with the
visual effects and classes available in QtQuick.
## Project Layout
A branding component that is created and installed outside of Calamares

View File

@ -93,6 +93,17 @@ images:
# The slideshow is displayed during execution steps (e.g. when the
# installer is actually writing to disk and doing other slow things).
slideshow: "show.qml"
# There are two available APIs for the slideshow:
# - 1 (the default) loads the entire slideshow when the installation-
# slideshow page is shown and starts the QML then. The QML
# is never stopped (after installation is done, times etc.
# continue to fire).
# - 2 loads the slideshow on startup and calls onActivate() and
# onLeave() in the root object. After the installation is done,
# the show is stopped (first by calling onLeave(), then destroying
# the QML components).
slideshowAPI: 2
# Colors for text and background components.
#

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="nl">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="64"/>
<source>This is a second Slide element.</source>
<translation>عرض الثاني</translation>
</message>
<message>
<location filename="../show.qml" line="68"/>
<source>This is a third Slide element.</source>
<translation>عرض الثالث</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="64"/>
<source>This is a second Slide element.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../show.qml" line="68"/>
<source>This is a third Slide element.</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="nl">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="64"/>
<source>This is a second Slide element.</source>
<translation>Ceci est la deuxieme affiche.</translation>
</message>
<message>
<location filename="../show.qml" line="68"/>
<source>This is a third Slide element.</source>
<translation>La troisième affice ce trouve ici.</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="nl">
<context>
<name>show</name>
<message>
<location filename="../show.qml" line="64"/>
<source>This is a second Slide element.</source>
<translation>Dit is het tweede Dia element.</translation>
</message>
<message>
<location filename="../show.qml" line="68"/>
<source>This is a third Slide element.</source>
<translation>Dit is het derde Dia element.</translation>
</message>
</context>
</TS>

View File

@ -24,12 +24,17 @@ Presentation
{
id: presentation
function nextSlide() {
console.log("Next slide");
presentation.goToNextSlide();
}
Timer {
id: advanceTimer
interval: 5000
interval: 1000
running: false
repeat: true
onTriggered: presentation.goToNextSlide()
onTriggered: nextSlide()
}
Slide {
@ -56,12 +61,16 @@ Presentation
}
Slide {
centeredText: "This is a second Slide element."
centeredText: qsTr("This is a second Slide element.")
}
Slide {
centeredText: "This is a third Slide element."
centeredText: qsTr("This is a third Slide element.")
}
Component.onCompleted: advanceTimer.running = true
function onActivate() {
presentation.currentSlide = 0;
advanceTimer.running = true
console.log("Component activated");
}
}

View File

@ -177,6 +177,16 @@ if ( ECM_FOUND AND BUILD_TESTING )
Qt5::Test
)
calamares_automoc( libcalamarespartitiontest )
ecm_add_test(
locale/Tests.cpp
TEST_NAME
libcalamareslocaletest
LINK_LIBRARIES
calamares
Qt5::Test
)
calamares_automoc( libcalamareslocaletest )
endif()
if( BUILD_TESTING )

View File

@ -64,17 +64,21 @@ Handler::Handler( const QString& implementation, const QString& url, const QStri
{
bool ok = false;
m_type = handlerTypes().find( implementation, ok );
#if !defined(QT_XML_LIB)
if ( m_type == Type::XML )
{
m_type = Type::None;
cWarning() << "GeoIP style XML is not supported in this version of Calamares.";
}
#endif
if ( !ok )
{
cWarning() << "GeoIP Style" << implementation << "is not recognized.";
cWarning() << "GeoIP style" << implementation << "is not recognized.";
}
else if ( m_type == Type::None )
{
cWarning() << "GeoIP style *none* does not do anything.";
}
#if !defined(QT_XML_LIB)
else if ( m_type == Type::XML )
{
m_type = Type::None;
cWarning() << "GeoIP style *xml* is not supported in this version of Calamares.";
}
#endif
}
Handler::~Handler()

View File

@ -80,6 +80,8 @@ public:
bool isValid() const { return m_type != Type::None; }
Type type() const { return m_type; }
QString url() const { return m_url; }
QString selector() const { return m_selector; }
private:
Type m_type;

View File

@ -0,0 +1,87 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2019, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#include "Tests.h"
#include "locale/LabelModel.h"
#include "utils/Logger.h"
#include <QtTest/QtTest>
QTEST_GUILESS_MAIN( LocaleTests )
LocaleTests::LocaleTests()
{
}
LocaleTests::~LocaleTests()
{
}
void
LocaleTests::initTestCase()
{
}
void
LocaleTests::testLanguageModelCount()
{
const auto* m = CalamaresUtils::Locale::availableTranslations();
QVERIFY( m );
QVERIFY( m->rowCount( QModelIndex() ) > 1 );
int dutch = m->find( QLocale( "nl_NL" ) );
QVERIFY( dutch > 0 );
QCOMPARE( m->find( "NL" ), dutch );
// must be capitals
QCOMPARE( m->find( "nl" ), -1 );
QCOMPARE( m->find( QLocale( "nl" ) ), dutch );
// Belgium speaks Dutch as well
QCOMPARE( m->find( "BE" ), dutch );
}
void
LocaleTests::testEsperanto()
{
Logger::setupLogLevel( Logger::LOGDEBUG );
const auto* m = CalamaresUtils::Locale::availableTranslations();
QVERIFY( m );
// Cursory test that all the locales found have a sensible language,
// and that some specific languages have sensible corresponding data.
//
// This fails on Esperanto (or, if Esperanto is added to Qt, then
// this will pass and the test after the loop will fail.
for ( int i = 0; i < m->rowCount( QModelIndex() ); ++i )
{
const auto& label = m->locale( i );
const auto locale = label.locale();
cDebug() << label.label() << locale;
QVERIFY( locale.language() == QLocale::Greek ? locale.script() == QLocale::GreekScript : true );
QVERIFY( locale.language() == QLocale::Korean ? locale.script() == QLocale::KoreanScript : true );
QVERIFY( locale.language() == QLocale::Lithuanian ? locale.country() == QLocale::Lithuania : true );
QVERIFY( locale.language() != QLocale::C );
}
QCOMPARE( QLocale( "eo" ).language(), QLocale::C );
}

View File

@ -0,0 +1,38 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2019, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef LIBCALAMARES_LOCALE_TESTS_H
#define LIBCALAMARES_LOCALE_TESTS_H
#include <QObject>
class LocaleTests : public QObject
{
Q_OBJECT
public:
LocaleTests();
~LocaleTests() override;
private Q_SLOTS:
void initTestCase();
void testLanguageModelCount();
void testEsperanto();
};
#endif

View File

@ -127,6 +127,7 @@ Branding::Branding( const QString& brandingFilePath,
, m_descriptorPath( brandingFilePath )
, m_welcomeStyleCalamares( false )
, m_welcomeExpandingLogo( true )
, m_slideshowAPI( 1 )
{
cDebug() << "Using Calamares branding file at" << brandingFilePath;
@ -234,6 +235,14 @@ Branding::Branding( const QString& brandingFilePath,
}
else
bail( "Syntax error in slideshow sequence." );
int api = doc[ "slideshowAPI" ].IsScalar() ? doc[ "slideshowAPI" ].as<int>() : -1;
if ( ( api < 1 ) || ( api > 2 ) )
{
cWarning() << "Invalid or missing *slideshowAPI* in branding file.";
api = 1;
}
m_slideshowAPI = api;
}
catch ( YAML::Exception& e )
{

View File

@ -118,6 +118,7 @@ public:
/** @brief Path to the slideshow QML file, if any. */
QString slideshowPath() const { return m_slideshowPath; }
int slideshowAPI() const { return m_slideshowAPI; }
QString string( Branding::StringEntry stringEntry ) const;
QString styleString( Branding::StyleEntry styleEntry ) const;
@ -172,6 +173,7 @@ private:
QMap< QString, QString > m_images;
QMap< QString, QString > m_style;
QString m_slideshowPath;
int m_slideshowAPI;
QString m_translationsPathPrefix;
/** @brief Initialize the simple settings below */

View File

@ -36,10 +36,40 @@
#include <QDir>
#include <QLabel>
#include <QProgressBar>
#include <QVBoxLayout>
#include <QtQuickWidgets/QQuickWidget>
#include <QQmlComponent>
#include <QQmlEngine>
#include <QQuickItem>
#include <QQuickWidget>
#include <QVBoxLayout>
/** @brief Calls the QML method @p method()
*
* Pass in only the name of the method (e.g. onActivate). This function
* checks if the method exists (with no arguments) before trying to
* call it, so that no warnings are printed due to missing methods.
*
* If there is a return value from the QML method, it is logged (but not otherwise used).
*/
static void
callQMLFunction( QQuickItem* qmlObject, const char* method )
{
QByteArray methodSignature( method );
methodSignature.append( "()" );
if ( qmlObject && qmlObject->metaObject()->indexOfMethod( methodSignature ) >= 0 )
{
QVariant returnValue;
QMetaObject::invokeMethod( qmlObject, method, Q_RETURN_ARG( QVariant, returnValue ) );
if ( !returnValue.isNull() )
{
cDebug() << "QML" << methodSignature << "returned" << returnValue;
}
}
else if ( qmlObject )
{
cDebug() << "QML" << methodSignature << "is missing.";
}
}
namespace Calamares
{
@ -47,31 +77,40 @@ namespace Calamares
ExecutionViewStep::ExecutionViewStep( QObject* parent )
: ViewStep( parent )
, m_widget( new QWidget )
, m_progressBar( new QProgressBar )
, m_label( new QLabel )
, m_qmlShow( new QQuickWidget )
, m_qmlComponent( nullptr )
, m_qmlObject( nullptr )
{
m_progressBar = new QProgressBar;
m_progressBar->setMaximum( 10000 );
m_label = new QLabel;
QVBoxLayout* layout = new QVBoxLayout( m_widget );
QVBoxLayout* innerLayout = new QVBoxLayout;
m_slideShow = new QQuickWidget;
layout->addWidget( m_slideShow );
m_progressBar->setMaximum( 10000 );
m_qmlShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
m_qmlShow->setResizeMode( QQuickWidget::SizeRootObjectToView );
m_qmlShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() );
layout->addWidget( m_qmlShow );
CalamaresUtils::unmarginLayout( layout );
layout->addLayout( innerLayout );
m_slideShow->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
m_slideShow->setResizeMode( QQuickWidget::SizeRootObjectToView );
m_slideShow->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() );
innerLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 );
innerLayout->addWidget( m_progressBar );
innerLayout->addWidget( m_label );
cDebug() << "QML import paths:" << Logger::DebugList( m_slideShow->engine()->importPathList() );
cDebug() << "QML import paths:" << Logger::DebugList( m_qmlShow->engine()->importPathList() );
if ( Branding::instance()->slideshowAPI() == 2 )
{
cDebug() << "QML load on startup, API 2.";
loadQmlV2();
}
connect( JobQueue::instance(), &JobQueue::progress,
this, &ExecutionViewStep::updateFromJobQueue );
connect( JobQueue::instance(), &JobQueue::progress, this, &ExecutionViewStep::updateFromJobQueue );
#if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 )
CALAMARES_RETRANSLATE( m_qmlShow->engine()->retranslate(); )
#endif
}
@ -130,22 +169,67 @@ ExecutionViewStep::isAtEnd() const
return true;
}
void
ExecutionViewStep::loadQmlV2()
{
if ( !m_qmlComponent && !Calamares::Branding::instance()->slideshowPath().isEmpty() )
{
m_qmlComponent = new QQmlComponent( m_qmlShow->engine(),
QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ),
QQmlComponent::CompilationMode::Asynchronous
);
connect( m_qmlComponent, &QQmlComponent::statusChanged, this, &ExecutionViewStep::loadQmlV2Complete );
}
}
void
ExecutionViewStep::loadQmlV2Complete()
{
if ( m_qmlComponent && m_qmlComponent->isReady() && !m_qmlObject )
{
cDebug() << "QML loading complete, API 2";
// Don't do this again
disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &ExecutionViewStep::loadQmlV2Complete );
QObject* o = m_qmlComponent->create();
m_qmlObject = qobject_cast< QQuickItem* >( o );
if ( !m_qmlObject )
delete o;
else
{
// setContent() is public API, but not documented publicly.
// It is marked \internal in the Qt sources, but does exactly
// what is needed: sets up visual parent by replacing the root
// item, and handling resizes.
m_qmlShow->setContent( QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ), m_qmlComponent, m_qmlObject );
if ( ViewManager::instance()->currentStep() == this )
{
// We're alreay visible! Must have been slow QML loading, and we
// passed onActivate already.
callQMLFunction( m_qmlObject, "onActivate" );
}
}
}
}
void
ExecutionViewStep::onActivate()
{
CALAMARES_RETRANSLATE_WIDGET( m_widget,
if ( !Calamares::Branding::instance()->slideshowPath().isEmpty() )
m_slideShow->setSource( QUrl::fromLocalFile( Calamares::Branding::instance()
->slideshowPath() ) );
)
if ( Branding::instance()->slideshowAPI() == 2 )
{
// The QML was already loaded in the constructor, need to start it
callQMLFunction( m_qmlObject, "onActivate" );
}
else if ( !Calamares::Branding::instance()->slideshowPath().isEmpty() )
{
// API version 1 assumes onCompleted is the trigger
m_qmlShow->setSource( QUrl::fromLocalFile( Calamares::Branding::instance()->slideshowPath() ) );
}
JobQueue* queue = JobQueue::instance();
foreach ( const QString& instanceKey, m_jobInstanceKeys )
{
Calamares::Module* module = Calamares::ModuleManager::instance()
->moduleInstance( instanceKey );
Calamares::Module* module = Calamares::ModuleManager::instance()->moduleInstance( instanceKey );
if ( module )
{
auto jl = module->jobs();
@ -183,4 +267,16 @@ ExecutionViewStep::updateFromJobQueue( qreal percent, const QString& message )
m_label->setText( message );
}
void
ExecutionViewStep::onLeave()
{
// API version 2 is explicitly stopped; version 1 keeps running
if ( Branding::instance()->slideshowAPI() == 2 )
{
callQMLFunction( m_qmlObject, "onLeave" );
delete m_qmlObject;
m_qmlObject = nullptr;
}
}
} // namespace

View File

@ -25,7 +25,10 @@
#include <QStringList>
class QLabel;
class QObject;
class QProgressBar;
class QQmlComponent;
class QQuickItem;
class QQuickWidget;
namespace Calamares
@ -51,19 +54,26 @@ public:
bool isAtEnd() const override;
void onActivate() override;
void onLeave() override;
JobList jobs() const override;
void appendJobModuleInstanceKey( const QString& instanceKey );
public slots:
void loadQmlV2Complete();
private:
QWidget* m_widget;
QProgressBar* m_progressBar;
QLabel* m_label;
QQuickWidget* m_slideShow;
QQuickWidget* m_qmlShow;
QQmlComponent* m_qmlComponent;
QQuickItem* m_qmlObject; //< The actual show
QStringList m_jobInstanceKeys;
void loadQmlV2(); //< Loads the slideshow QML (from branding) for API version 2
void updateFromJobQueue( qreal percent, const QString& message );
};

View File

@ -54,6 +54,41 @@ ViewManager::instance( QObject* parent )
return s_instance;
}
/** @brief Get a button-sized icon. */
static inline QPixmap
getButtonIcon( const QString& name )
{
return Calamares::Branding::instance()->image( name, QSize( 22, 22 ) );
}
static inline void
setButtonIcon( QPushButton* button, const QString& name )
{
auto icon = getButtonIcon( name );
if ( button && !icon.isNull() )
{
button->setIcon( icon );
}
}
/** @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 )
{
QPushButton* button = new QPushButton( parent );
setButtonIcon( button, name );
return button;
}
ViewManager::ViewManager( QObject* parent )
: QObject( parent )
, m_currentStep( 0 )
@ -68,18 +103,13 @@ ViewManager::ViewManager( QObject* parent )
m_stack->setContentsMargins( 0, 0, 0, 0 );
mainLayout->addWidget( m_stack );
m_back = new QPushButton( m_widget );
m_next = new QPushButton( m_widget );
m_quit = new QPushButton( m_widget );
// Create buttons and sets an initial icon; the icons may change
m_back = makeButton( m_widget, "go-previous" );
m_next = makeButton( m_widget, "go-next" );
m_quit = makeButton( m_widget, "dialog-cancel" );
CALAMARES_RETRANSLATE(
m_back->setText( tr( "&Back" ) );
m_next->setText( tr( "&Next" ) );
m_quit->setText( tr( "&Cancel" ) );
QString tooltip = Calamares::Settings::instance()->isSetupMode()
? tr( "Cancel setup without changing the system." )
: tr( "Cancel installation without changing the system." );
m_quit->setToolTip( tooltip );
updateButtonLabels();
)
QBoxLayout* bottomLayout = new QHBoxLayout;
@ -321,27 +351,38 @@ ViewManager::updateButtonLabels()
{
const auto* const settings = Calamares::Settings::instance();
QString next = settings->isSetupMode()
QString nextIsInstallationStep = settings->isSetupMode()
? tr( "&Set up" )
: tr( "&Install" );
QString complete = settings->isSetupMode()
QString quitOnCompleteTooltip = settings->isSetupMode()
? tr( "Setup is complete. Close the setup program." )
: tr( "The installation is complete. Close the installer." );
QString quit = settings->isSetupMode()
QString cancelBeforeInstallationTooltip = settings->isSetupMode()
? tr( "Cancel setup without changing the system." )
: tr( "Cancel installation without changing the system." );
// If we're going into the execution step / install phase, other message
if ( stepIsExecute( m_steps, m_currentStep+1 ) )
m_next->setText( next );
{
m_next->setText( nextIsInstallationStep );
setButtonIcon( m_next, "run-install" );
}
else
{
m_next->setText( tr( "&Next" ) );
setButtonIcon( m_next, "go-next" );
}
// Going back is always simple
m_back->setText( tr( "&Back" ) );
// Cancel button changes label at the end
if ( isAtVeryEnd() )
{
m_quit->setText( tr( "&Done" ) );
m_quit->setToolTip( complete );
m_quit->setToolTip( quitOnCompleteTooltip );
m_quit->setVisible( true ); // At end, always visible and enabled.
setButtonIcon( m_quit, "dialog-ok-apply" );
updateCancelEnabled( true );
}
else
@ -351,7 +392,8 @@ ViewManager::updateButtonLabels()
updateCancelEnabled( !settings->disableCancel() && !( stepIsExecute( m_steps, m_currentStep ) && settings->disableCancelDuringExec() ) );
m_quit->setText( tr( "&Cancel" ) );
m_quit->setToolTip( quit );
m_quit->setToolTip( cancelBeforeInstallationTooltip );
setButtonIcon( m_quit, "dialog-cancel" );
}
}

View File

@ -198,7 +198,7 @@ Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Ex
return;
}
}
cDebug() << "No config file found in" << Logger::DebugList( configCandidates );
cDebug() << "No config file for" << m_name << "found anywhere at" << Logger::DebugList( configCandidates );
}

View File

@ -90,10 +90,14 @@ ModuleManager::doInit()
if ( success )
{
QFileInfo descriptorFileInfo( currentDir.absoluteFilePath( QLatin1Literal( "module.desc") ) );
if ( ! ( descriptorFileInfo.exists() && descriptorFileInfo.isReadable() ) )
if ( !descriptorFileInfo.exists() )
{
cDebug() << Q_FUNC_INFO << "unreadable file: "
<< descriptorFileInfo.absoluteFilePath();
cDebug() << "ModuleManager expected descriptor is missing:" << descriptorFileInfo.absoluteFilePath();
continue;
}
if ( !descriptorFileInfo.isReadable() )
{
cDebug() << "ModuleManager descriptor file is unreadable:" << descriptorFileInfo.absoluteFilePath();
continue;
}
@ -111,13 +115,14 @@ ModuleManager::doInit()
}
else
{
cWarning() << "Cannot cd into module directory "
<< path << "/" << subdir;
cWarning() << "ModuleManager module directory is not accessible:" << path << "/" << subdir;
}
}
}
else
cDebug() << "ModuleManager bad search path" << path;
{
cDebug() << "ModuleManager module search path does not exist:" << path;
}
}
// At this point m_availableModules is filled with whatever was found in the
// search paths.

View File

@ -5,5 +5,5 @@ type: "job"
name: "dummyprocess"
interface: "process"
chroot: false
command: "/bin/sh -c \"touch ~/calamares-dummyprocess\""
timeout: 5
command: "/bin/sh -c \"sleep 5 ; touch ~/calamares-dummyprocess\""
timeout: 8

View File

@ -0,0 +1,42 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-10 19:18-0400\n"
"PO-Revision-Date: 2016-12-16 12:18+0000\n"
"Language-Team: Catalan (Valencian) (https://www.transifex.com/calamares/teams/20061/ca@valencia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca@valencia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/modules/dummypythonqt/main.py:84
msgid "Click me!"
msgstr ""
#: src/modules/dummypythonqt/main.py:94
msgid "A new QLabel."
msgstr ""
#: src/modules/dummypythonqt/main.py:97
msgid "Dummy PythonQt ViewStep"
msgstr ""
#: src/modules/dummypythonqt/main.py:183
msgid "The Dummy PythonQt Job"
msgstr ""
#: src/modules/dummypythonqt/main.py:186
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
msgstr ""
#: src/modules/dummypythonqt/main.py:190
msgid "A status message for Dummy PythonQt Job."
msgstr ""

View File

@ -128,17 +128,25 @@ WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap )
CalamaresUtils::getString( geoip, "style" ),
CalamaresUtils::getString( geoip, "url" ),
CalamaresUtils::getString( geoip, "selector" ) );
if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None )
{
auto* future = new FWString();
connect( future, &FWString::finished, [view=this, f=future, h=handler]()
{
QString countryResult = f->future().result();
cDebug() << "GeoIP result for welcome=" << countryResult;
view->setCountry( countryResult );
view->setCountry( countryResult, h );
f->deleteLater();
delete h;
} );
future->setFuture( handler->queryRaw() );
}
else
{
// Would not produce useful country code anyway.
delete handler;
}
}
QString language = CalamaresUtils::getString( configurationMap, "languageIcon" );
@ -156,12 +164,22 @@ WelcomeViewStep::checkRequirements()
return m_requirementsChecker->checkRequirements();
}
static inline void
logGeoIPHandler( CalamaresUtils::GeoIP::Handler* handler )
{
if ( handler )
{
cDebug() << Logger::SubEntry << "Obtained from" << handler->url() << " (" << static_cast<int>( handler->type() ) << handler->selector() << ')';
}
}
void
WelcomeViewStep::setCountry( const QString& countryCode )
WelcomeViewStep::setCountry( const QString& countryCode, CalamaresUtils::GeoIP::Handler* handler )
{
if ( countryCode.length() != 2 )
{
cDebug() << "Unusable country code" << countryCode;
logGeoIPHandler( handler );
return;
}
@ -169,6 +187,7 @@ WelcomeViewStep::setCountry( const QString& countryCode )
if ( c_l.first == QLocale::Country::AnyCountry )
{
cDebug() << "Unusable country code" << countryCode;
logGeoIPHandler( handler );
return;
}
else

View File

@ -32,6 +32,14 @@
class WelcomePage;
class GeneralRequirements;
namespace CalamaresUtils
{
namespace GeoIP
{
class Handler;
}
} // namespace
class PLUGINDLLEXPORT WelcomeViewStep : public Calamares::ViewStep
{
Q_OBJECT
@ -57,9 +65,10 @@ public:
/** @brief Sets the country that Calamares is running in.
*
* This (ideally) sets up language and locale settings that are right for
* the given 2-letter country code.
* the given 2-letter country code. Uses the handler's information (if
* given) for error reporting.
*/
void setCountry( const QString& );
void setCountry( const QString&, CalamaresUtils::GeoIP::Handler* handler );
Calamares::RequirementsList checkRequirements() override;