diff --git a/CHANGES b/CHANGES
index 9f72f515c..dcc32eea0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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 ##
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 882aafe6c..cf078193c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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
diff --git a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake
index 78330e245..80cf86f38 100644
--- a/CMakeModules/CalamaresAddBrandingSubdirectory.cmake
+++ b/CMakeModules/CalamaresAddBrandingSubdirectory.cmake
@@ -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)" )
diff --git a/ci/txstats.py b/ci/txstats.py
index 39ec65575..d29e7dc75 100644
--- a/ci/txstats.py
+++ b/ci/txstats.py
@@ -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
diff --git a/lang/calamares_ar.ts b/lang/calamares_ar.ts
index e60c06393..3a7d77f4d 100644
--- a/lang/calamares_ar.ts
+++ b/lang/calamares_ar.ts
@@ -149,12 +149,12 @@
Run command %1 %2
- شغّل الأمر 1% 2%
+ شغّل الأمر %1 %2Running command %1 %2
- يشغّل الأمر 1% 2%
+ يشغّل الأمر %1 %2
diff --git a/lang/calamares_ca@valencia.ts b/lang/calamares_ca@valencia.ts
new file mode 100644
index 000000000..e738a9628
--- /dev/null
+++ b/lang/calamares_ca@valencia.ts
@@ -0,0 +1,3142 @@
+
+
+ BootInfoWidget
+
+
+ The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode.
+
+
+
+
+ This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.
+
+
+
+
+ This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.
+
+
+
+
+ BootLoaderModel
+
+
+ Master Boot Record of %1
+
+
+
+
+ Boot Partition
+
+
+
+
+ System Partition
+
+
+
+
+ Do not install a boot loader
+
+
+
+
+ %1 (%2)
+
+
+
+
+ Calamares::BlankViewStep
+
+
+ Blank Page
+
+
+
+
+ Calamares::DebugWindow
+
+
+ Form
+
+
+
+
+ GlobalStorage
+
+
+
+
+ JobQueue
+
+
+
+
+ Modules
+
+
+
+
+ Type:
+
+
+
+
+
+ none
+
+
+
+
+ Interface:
+
+
+
+
+ Tools
+
+
+
+
+ Debug information
+
+
+
+
+ Calamares::ExecutionViewStep
+
+
+ Set up
+
+
+
+
+ Install
+
+
+
+
+ Calamares::FailJob
+
+
+ Job failed (%1)
+
+
+
+
+ Programmed job failure was explicitly requested.
+
+
+
+
+ Calamares::JobThread
+
+
+ Done
+
+
+
+
+ Calamares::NamedJob
+
+
+ Example job (%1)
+
+
+
+
+ Calamares::ProcessJob
+
+
+ Run command %1 %2
+
+
+
+
+ Running command %1 %2
+
+
+
+
+ Calamares::PythonJob
+
+
+ Running %1 operation.
+
+
+
+
+ Bad working directory path
+
+
+
+
+ Working directory %1 for python job %2 is not readable.
+
+
+
+
+ Bad main script file
+
+
+
+
+ Main script file %1 for python job %2 is not readable.
+
+
+
+
+ Boost.Python error in job "%1".
+
+
+
+
+ Calamares::RequirementsChecker
+
+
+ Waiting for %n module(s).
+
+
+
+
+ (%n second(s))
+
+
+
+
+ System-requirements checking is complete.
+
+
+
+
+ Calamares::ViewManager
+
+
+ &Back
+
+
+
+
+
+ &Next
+
+
+
+
+
+ &Cancel
+
+
+
+
+
+ Cancel setup without changing the system.
+
+
+
+
+
+ Cancel installation without changing the system.
+
+
+
+
+ Setup Failed
+
+
+
+
+ Calamares Initialization Failed
+
+
+
+
+ %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution.
+
+
+
+
+ <br/>The following modules could not be loaded:
+
+
+
+
+ Continue with installation?
+
+
+
+
+ The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong>
+
+
+
+
+ &Set up now
+
+
+
+
+ &Set up
+
+
+
+
+ &Install
+
+
+
+
+ Setup is complete. Close the setup program.
+
+
+
+
+ Cancel setup?
+
+
+
+
+ Cancel installation?
+
+
+
+
+ Do you really want to cancel the current setup process?
+The setup program will quit and all changes will be lost.
+
+
+
+
+ Do you really want to cancel the current install process?
+The installer will quit and all changes will be lost.
+
+
+
+
+ &Yes
+
+
+
+
+ &No
+
+
+
+
+ &Close
+
+
+
+
+ Continue with setup?
+
+
+
+
+ The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong>
+
+
+
+
+ &Install now
+
+
+
+
+ Go &back
+
+
+
+
+ &Done
+
+
+
+
+ The installation is complete. Close the installer.
+
+
+
+
+ Error
+
+
+
+
+ Installation Failed
+
+
+
+
+ CalamaresPython::Helper
+
+
+ Unknown exception type
+
+
+
+
+ unparseable Python error
+
+
+
+
+ unparseable Python traceback
+
+
+
+
+ Unfetchable Python error.
+
+
+
+
+ CalamaresWindow
+
+
+ %1 Setup Program
+
+
+
+
+ %1 Installer
+
+
+
+
+ Show debug information
+
+
+
+
+ CheckerContainer
+
+
+ Gathering system information...
+
+
+
+
+ ChoicePage
+
+
+ Form
+
+
+
+
+ After:
+
+
+
+
+ <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.
+
+
+
+
+ Boot loader location:
+
+
+
+
+ Select storage de&vice:
+
+
+
+
+
+
+
+ Current:
+
+
+
+
+ Reuse %1 as home partition for %2.
+
+
+
+
+ <strong>Select a partition to shrink, then drag the bottom bar to resize</strong>
+
+
+
+
+ %1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.
+
+
+
+
+ <strong>Select a partition to install on</strong>
+
+
+
+
+ An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.
+
+
+
+
+ The EFI system partition at %1 will be used for starting %2.
+
+
+
+
+ EFI system partition:
+
+
+
+
+ This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.
+
+
+
+
+
+
+
+ <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device.
+
+
+
+
+ This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.
+
+
+
+
+ No Swap
+
+
+
+
+ Reuse Swap
+
+
+
+
+ Swap (no Hibernate)
+
+
+
+
+ Swap (with Hibernate)
+
+
+
+
+ Swap to file
+
+
+
+
+
+
+
+ <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1.
+
+
+
+
+
+
+
+ <strong>Replace a partition</strong><br/>Replaces a partition with %1.
+
+
+
+
+ This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.
+
+
+
+
+ This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.
+
+
+
+
+ ClearMountsJob
+
+
+ Clear mounts for partitioning operations on %1
+
+
+
+
+ Clearing mounts for partitioning operations on %1.
+
+
+
+
+ Cleared all mounts for %1
+
+
+
+
+ ClearTempMountsJob
+
+
+ Clear all temporary mounts.
+
+
+
+
+ Clearing all temporary mounts.
+
+
+
+
+ Cannot get list of temporary mounts.
+
+
+
+
+ Cleared all temporary mounts.
+
+
+
+
+ CommandList
+
+
+
+ Could not run command.
+
+
+
+
+ The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined.
+
+
+
+
+ The command needs to know the user's name, but no username is defined.
+
+
+
+
+ ContextualProcessJob
+
+
+ Contextual Processes Job
+
+
+
+
+ CreatePartitionDialog
+
+
+ Create a Partition
+
+
+
+
+ MiB
+
+
+
+
+ Partition &Type:
+
+
+
+
+ &Primary
+
+
+
+
+ E&xtended
+
+
+
+
+ Fi&le System:
+
+
+
+
+ LVM LV name
+
+
+
+
+ Flags:
+
+
+
+
+ &Mount Point:
+
+
+
+
+ Si&ze:
+
+
+
+
+ En&crypt
+
+
+
+
+ Logical
+
+
+
+
+ Primary
+
+
+
+
+ GPT
+
+
+
+
+ Mountpoint already in use. Please select another one.
+
+
+
+
+ CreatePartitionJob
+
+
+ Create new %2MiB partition on %4 (%3) with file system %1.
+
+
+
+
+ Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>.
+
+
+
+
+ Creating new %1 partition on %2.
+
+
+
+
+ The installer failed to create partition on disk '%1'.
+
+
+
+
+ CreatePartitionTableDialog
+
+
+ Create Partition Table
+
+
+
+
+ Creating a new partition table will delete all existing data on the disk.
+
+
+
+
+ What kind of partition table do you want to create?
+
+
+
+
+ Master Boot Record (MBR)
+
+
+
+
+ GUID Partition Table (GPT)
+
+
+
+
+ CreatePartitionTableJob
+
+
+ Create new %1 partition table on %2.
+
+
+
+
+ Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3).
+
+
+
+
+ Creating new %1 partition table on %2.
+
+
+
+
+ The installer failed to create a partition table on %1.
+
+
+
+
+ CreateUserJob
+
+
+ Create user %1
+
+
+
+
+ Create user <strong>%1</strong>.
+
+
+
+
+ Creating user %1.
+
+
+
+
+ Sudoers dir is not writable.
+
+
+
+
+ Cannot create sudoers file for writing.
+
+
+
+
+ Cannot chmod sudoers file.
+
+
+
+
+ Cannot open groups file for reading.
+
+
+
+
+ CreateVolumeGroupDialog
+
+
+ Create Volume Group
+
+
+
+
+ CreateVolumeGroupJob
+
+
+ Create new volume group named %1.
+
+
+
+
+ Create new volume group named <strong>%1</strong>.
+
+
+
+
+ Creating new volume group named %1.
+
+
+
+
+ The installer failed to create a volume group named '%1'.
+
+
+
+
+ DeactivateVolumeGroupJob
+
+
+
+ Deactivate volume group named %1.
+
+
+
+
+ Deactivate volume group named <strong>%1</strong>.
+
+
+
+
+ The installer failed to deactivate a volume group named %1.
+
+
+
+
+ DeletePartitionJob
+
+
+ Delete partition %1.
+
+
+
+
+ Delete partition <strong>%1</strong>.
+
+
+
+
+ Deleting partition %1.
+
+
+
+
+ The installer failed to delete partition %1.
+
+
+
+
+ DeviceInfoWidget
+
+
+ The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred.
+
+
+
+
+ This device has a <strong>%1</strong> partition table.
+
+
+
+
+ This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.
+
+
+
+
+ This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page.
+
+
+
+
+ <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment.
+
+
+
+
+ <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions.
+
+
+
+
+ DeviceModel
+
+
+ %1 - %2 (%3)
+ device[name] - size[number] (device-node[name])
+
+
+
+
+ %1 - (%2)
+ device[name] - (device-node[name])
+
+
+
+
+ DracutLuksCfgJob
+
+
+ Write LUKS configuration for Dracut to %1
+
+
+
+
+ Skip writing LUKS configuration for Dracut: "/" partition is not encrypted
+
+
+
+
+ Failed to open %1
+
+
+
+
+ DummyCppJob
+
+
+ Dummy C++ Job
+
+
+
+
+ EditExistingPartitionDialog
+
+
+ Edit Existing Partition
+
+
+
+
+ Content:
+
+
+
+
+ &Keep
+
+
+
+
+ Format
+
+
+
+
+ Warning: Formatting the partition will erase all existing data.
+
+
+
+
+ &Mount Point:
+
+
+
+
+ Si&ze:
+
+
+
+
+ MiB
+
+
+
+
+ Fi&le System:
+
+
+
+
+ Flags:
+
+
+
+
+ Mountpoint already in use. Please select another one.
+
+
+
+
+ EncryptWidget
+
+
+ Form
+
+
+
+
+ En&crypt system
+
+
+
+
+ Passphrase
+
+
+
+
+ Confirm passphrase
+
+
+
+
+ Please enter the same passphrase in both boxes.
+
+
+
+
+ FillGlobalStorageJob
+
+
+ Set partition information
+
+
+
+
+ Install %1 on <strong>new</strong> %2 system partition.
+
+
+
+
+ Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>.
+
+
+
+
+ Install %2 on %3 system partition <strong>%1</strong>.
+
+
+
+
+ Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>.
+
+
+
+
+ Install boot loader on <strong>%1</strong>.
+
+
+
+
+ Setting up mount points.
+
+
+
+
+ FinishedPage
+
+
+ Form
+
+
+
+
+ <Restart checkbox tooltip>
+
+
+
+
+ &Restart now
+
+
+
+
+ <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system.
+
+
+
+
+ <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the setup program.</p></body></html>
+
+
+
+
+ <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment.
+
+
+
+
+ <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style="font-style:italic;">Done</span> or close the installer.</p></body></html>
+
+
+
+
+ <h1>Setup Failed</h1><br/>%1 has not been set up on your computer.<br/>The error message was: %2.
+
+
+
+
+ <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2.
+
+
+
+
+ FinishedViewStep
+
+
+ Finish
+
+
+
+
+ Setup Complete
+
+
+
+
+ Installation Complete
+
+
+
+
+ The setup of %1 is complete.
+
+
+
+
+ The installation of %1 is complete.
+
+
+
+
+ FormatPartitionJob
+
+
+ Format partition %1 (file system: %2, size: %3 MiB) on %4.
+
+
+
+
+ Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>.
+
+
+
+
+ Formatting partition %1 with file system %2.
+
+
+
+
+ The installer failed to format partition %1 on disk '%2'.
+
+
+
+
+ GeneralRequirements
+
+
+ has at least %1 GiB available drive space
+
+
+
+
+ There is not enough drive space. At least %1 GiB is required.
+
+
+
+
+ has at least %1 GiB working memory
+
+
+
+
+ The system does not have enough working memory. At least %1 GiB is required.
+
+
+
+
+ is plugged in to a power source
+
+
+
+
+ The system is not plugged in to a power source.
+
+
+
+
+ is connected to the Internet
+
+
+
+
+ The system is not connected to the Internet.
+
+
+
+
+ The setup program is not running with administrator rights.
+
+
+
+
+ The installer is not running with administrator rights.
+
+
+
+
+ The screen is too small to display the setup program.
+
+
+
+
+ The screen is too small to display the installer.
+
+
+
+
+ IDJob
+
+
+
+
+
+ OEM Batch Identifier
+
+
+
+
+ Could not create directories <code>%1</code>.
+
+
+
+
+ Could not open file <code>%1</code>.
+
+
+
+
+ Could not write to file <code>%1</code>.
+
+
+
+
+ InteractiveTerminalPage
+
+
+ Konsole not installed
+
+
+
+
+ Please install KDE Konsole and try again!
+
+
+
+
+ Executing script: <code>%1</code>
+
+
+
+
+ InteractiveTerminalViewStep
+
+
+ Script
+
+
+
+
+ KeyboardPage
+
+
+ Set keyboard model to %1.<br/>
+
+
+
+
+ Set keyboard layout to %1/%2.
+
+
+
+
+ KeyboardViewStep
+
+
+ Keyboard
+
+
+
+
+ LCLocaleDialog
+
+
+ System locale setting
+
+
+
+
+ The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>.
+
+
+
+
+ &Cancel
+
+
+
+
+ &OK
+
+
+
+
+ LicensePage
+
+
+ Form
+
+
+
+
+ I accept the terms and conditions above.
+
+
+
+
+ <h1>License Agreement</h1>This setup procedure will install proprietary software that is subject to licensing terms.
+
+
+
+
+ Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, the setup procedure cannot continue.
+
+
+
+
+ <h1>License Agreement</h1>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience.
+
+
+
+
+ Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.
+
+
+
+
+ LicenseViewStep
+
+
+ License
+
+
+
+
+ LicenseWidget
+
+
+ <strong>%1 driver</strong><br/>by %2
+ %1 is an untranslatable product name, example: Creative Audigy driver
+
+
+
+
+ <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font>
+ %1 is usually a vendor name, example: Nvidia graphics driver
+
+
+
+
+ <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font>
+
+
+
+
+ <strong>%1 codec</strong><br/><font color="Grey">by %2</font>
+
+
+
+
+ <strong>%1 package</strong><br/><font color="Grey">by %2</font>
+
+
+
+
+ <strong>%1</strong><br/><font color="Grey">by %2</font>
+
+
+
+
+ Shows the complete license text
+
+
+
+
+ Hide license text
+
+
+
+
+ Show license agreement
+
+
+
+
+ Hide license agreement
+
+
+
+
+ Opens the license agreement in a browser window.
+
+
+
+
+ <a href="%1">View license agreement</a>
+
+
+
+
+ LocalePage
+
+
+ The system language will be set to %1.
+
+
+
+
+ The numbers and dates locale will be set to %1.
+
+
+
+
+ Region:
+
+
+
+
+ Zone:
+
+
+
+
+
+ &Change...
+
+
+
+
+ Set timezone to %1/%2.<br/>
+
+
+
+
+ LocaleViewStep
+
+
+ Loading location data...
+
+
+
+
+ Location
+
+
+
+
+ NetInstallPage
+
+
+ Name
+
+
+
+
+ Description
+
+
+
+
+ Network Installation. (Disabled: Unable to fetch package lists, check your network connection)
+
+
+
+
+ Network Installation. (Disabled: Received invalid groups data)
+
+
+
+
+ NetInstallViewStep
+
+
+ Package selection
+
+
+
+
+ OEMPage
+
+
+ Ba&tch:
+
+
+
+
+ <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html>
+
+
+
+
+ <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html>
+
+
+
+
+ OEMViewStep
+
+
+ OEM Configuration
+
+
+
+
+ Set the OEM Batch Identifier to <code>%1</code>.
+
+
+
+
+ PWQ
+
+
+ Password is too short
+
+
+
+
+ Password is too long
+
+
+
+
+ Password is too weak
+
+
+
+
+ Memory allocation error when setting '%1'
+
+
+
+
+ Memory allocation error
+
+
+
+
+ The password is the same as the old one
+
+
+
+
+ The password is a palindrome
+
+
+
+
+ The password differs with case changes only
+
+
+
+
+ The password is too similar to the old one
+
+
+
+
+ The password contains the user name in some form
+
+
+
+
+ The password contains words from the real name of the user in some form
+
+
+
+
+ The password contains forbidden words in some form
+
+
+
+
+ The password contains less than %1 digits
+
+
+
+
+ The password contains too few digits
+
+
+
+
+ The password contains less than %1 uppercase letters
+
+
+
+
+ The password contains too few uppercase letters
+
+
+
+
+ The password contains less than %1 lowercase letters
+
+
+
+
+ The password contains too few lowercase letters
+
+
+
+
+ The password contains less than %1 non-alphanumeric characters
+
+
+
+
+ The password contains too few non-alphanumeric characters
+
+
+
+
+ The password is shorter than %1 characters
+
+
+
+
+ The password is too short
+
+
+
+
+ The password is just rotated old one
+
+
+
+
+ The password contains less than %1 character classes
+
+
+
+
+ The password does not contain enough character classes
+
+
+
+
+ The password contains more than %1 same characters consecutively
+
+
+
+
+ The password contains too many same characters consecutively
+
+
+
+
+ The password contains more than %1 characters of the same class consecutively
+
+
+
+
+ The password contains too many characters of the same class consecutively
+
+
+
+
+ The password contains monotonic sequence longer than %1 characters
+
+
+
+
+ The password contains too long of a monotonic character sequence
+
+
+
+
+ No password supplied
+
+
+
+
+ Cannot obtain random numbers from the RNG device
+
+
+
+
+ Password generation failed - required entropy too low for settings
+
+
+
+
+ The password fails the dictionary check - %1
+
+
+
+
+ The password fails the dictionary check
+
+
+
+
+ Unknown setting - %1
+
+
+
+
+ Unknown setting
+
+
+
+
+ Bad integer value of setting - %1
+
+
+
+
+ Bad integer value
+
+
+
+
+ Setting %1 is not of integer type
+
+
+
+
+ Setting is not of integer type
+
+
+
+
+ Setting %1 is not of string type
+
+
+
+
+ Setting is not of string type
+
+
+
+
+ Opening the configuration file failed
+
+
+
+
+ The configuration file is malformed
+
+
+
+
+ Fatal failure
+
+
+
+
+ Unknown error
+
+
+
+
+ Page_Keyboard
+
+
+ Form
+
+
+
+
+ Keyboard Model:
+
+
+
+
+ Type here to test your keyboard
+
+
+
+
+ Page_UserSetup
+
+
+ Form
+
+
+
+
+ What is your name?
+
+
+
+
+ What name do you want to use to log in?
+
+
+
+
+ Choose a password to keep your account safe.
+
+
+
+
+ <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small>
+
+
+
+
+ What is the name of this computer?
+
+
+
+
+ <small>This name will be used if you make the computer visible to others on a network.</small>
+
+
+
+
+ Log in automatically without asking for the password.
+
+
+
+
+ Use the same password for the administrator account.
+
+
+
+
+ Choose a password for the administrator account.
+
+
+
+
+ <small>Enter the same password twice, so that it can be checked for typing errors.</small>
+
+
+
+
+ PartitionLabelsView
+
+
+ Root
+
+
+
+
+ Home
+
+
+
+
+ Boot
+
+
+
+
+ EFI system
+
+
+
+
+ Swap
+
+
+
+
+ New partition for %1
+
+
+
+
+ New partition
+
+
+
+
+ %1 %2
+ size[number] filesystem[name]
+
+
+
+
+ PartitionModel
+
+
+
+ Free Space
+
+
+
+
+
+ New partition
+
+
+
+
+ Name
+
+
+
+
+ File System
+
+
+
+
+ Mount Point
+
+
+
+
+ Size
+
+
+
+
+ PartitionPage
+
+
+ Form
+
+
+
+
+ Storage de&vice:
+
+
+
+
+ &Revert All Changes
+
+
+
+
+ New Partition &Table
+
+
+
+
+ Cre&ate
+
+
+
+
+ &Edit
+
+
+
+
+ &Delete
+
+
+
+
+ New Volume Group
+
+
+
+
+ Resize Volume Group
+
+
+
+
+ Deactivate Volume Group
+
+
+
+
+ Remove Volume Group
+
+
+
+
+ I&nstall boot loader on:
+
+
+
+
+ Are you sure you want to create a new partition table on %1?
+
+
+
+
+ Can not create new partition
+
+
+
+
+ The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead.
+
+
+
+
+ PartitionViewStep
+
+
+ Gathering system information...
+
+
+
+
+ Partitions
+
+
+
+
+ Install %1 <strong>alongside</strong> another operating system.
+
+
+
+
+ <strong>Erase</strong> disk and install %1.
+
+
+
+
+ <strong>Replace</strong> a partition with %1.
+
+
+
+
+ <strong>Manual</strong> partitioning.
+
+
+
+
+ Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3).
+
+
+
+
+ <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1.
+
+
+
+
+ <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1.
+
+
+
+
+ <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2).
+
+
+
+
+ Disk <strong>%1</strong> (%2)
+
+
+
+
+ Current:
+
+
+
+
+ After:
+
+
+
+
+ No EFI system partition configured
+
+
+
+
+ An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.
+
+
+
+
+ EFI system partition flag not set
+
+
+
+
+ An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.
+
+
+
+
+ Boot partition not encrypted
+
+
+
+
+ A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.
+
+
+
+
+ has at least one disk device available.
+
+
+
+
+ There are no partitons to install on.
+
+
+
+
+ PlasmaLnfJob
+
+
+ Plasma Look-and-Feel Job
+
+
+
+
+
+ Could not select KDE Plasma Look-and-Feel package
+
+
+
+
+ PlasmaLnfPage
+
+
+ Form
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ PlasmaLnfViewStep
+
+
+ Look-and-Feel
+
+
+
+
+ PreserveFiles
+
+
+ Saving files for later ...
+
+
+
+
+ No files configured to save for later.
+
+
+
+
+ Not all of the configured files could be preserved.
+
+
+
+
+ ProcessResult
+
+
+
+There was no output from the command.
+
+
+
+
+
+Output:
+
+
+
+
+
+ External command crashed.
+
+
+
+
+ Command <i>%1</i> crashed.
+
+
+
+
+ External command failed to start.
+
+
+
+
+ Command <i>%1</i> failed to start.
+
+
+
+
+ Internal error when starting command.
+
+
+
+
+ Bad parameters for process job call.
+
+
+
+
+ External command failed to finish.
+
+
+
+
+ Command <i>%1</i> failed to finish in %2 seconds.
+
+
+
+
+ External command finished with errors.
+
+
+
+
+ Command <i>%1</i> finished with exit code %2.
+
+
+
+
+ QObject
+
+
+ Default Keyboard Model
+
+
+
+
+
+ Default
+
+
+
+
+ unknown
+
+
+
+
+ extended
+
+
+
+
+ unformatted
+
+
+
+
+ swap
+
+
+
+
+ Unpartitioned space or unknown partition table
+
+
+
+
+ (no mount point)
+
+
+
+
+ Requirements checking for module <i>%1</i> is complete.
+
+
+
+
+ %1 (%2)
+ language[name] (country[name])
+
+
+
+
+ RemoveVolumeGroupJob
+
+
+
+ Remove Volume Group named %1.
+
+
+
+
+ Remove Volume Group named <strong>%1</strong>.
+
+
+
+
+ The installer failed to remove a volume group named '%1'.
+
+
+
+
+ ReplaceWidget
+
+
+ Form
+
+
+
+
+ Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition.
+
+
+
+
+ The selected item does not appear to be a valid partition.
+
+
+
+
+ %1 cannot be installed on empty space. Please select an existing partition.
+
+
+
+
+ %1 cannot be installed on an extended partition. Please select an existing primary or logical partition.
+
+
+
+
+ %1 cannot be installed on this partition.
+
+
+
+
+ Data partition (%1)
+
+
+
+
+ Unknown system partition (%1)
+
+
+
+
+ %1 system partition (%2)
+
+
+
+
+ <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.
+
+
+
+
+ <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.
+
+
+
+
+
+
+ <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost.
+
+
+
+
+ The EFI system partition at %1 will be used for starting %2.
+
+
+
+
+ EFI system partition:
+
+
+
+
+ ResizeFSJob
+
+
+ Resize Filesystem Job
+
+
+
+
+ Invalid configuration
+
+
+
+
+ The file-system resize job has an invalid configuration and will not run.
+
+
+
+
+
+ KPMCore not Available
+
+
+
+
+
+ Calamares cannot start KPMCore for the file-system resize job.
+
+
+
+
+
+
+
+
+ Resize Failed
+
+
+
+
+ The filesystem %1 could not be found in this system, and cannot be resized.
+
+
+
+
+ The device %1 could not be found in this system, and cannot be resized.
+
+
+
+
+
+ The filesystem %1 cannot be resized.
+
+
+
+
+
+ The device %1 cannot be resized.
+
+
+
+
+ The filesystem %1 must be resized, but cannot.
+
+
+
+
+ The device %1 must be resized, but cannot
+
+
+
+
+ ResizePartitionJob
+
+
+ Resize partition %1.
+
+
+
+
+ Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.
+
+
+
+
+ Resizing %2MiB partition %1 to %3MiB.
+
+
+
+
+ The installer failed to resize partition %1 on disk '%2'.
+
+
+
+
+ ResizeVolumeGroupDialog
+
+
+ Resize Volume Group
+
+
+
+
+ ResizeVolumeGroupJob
+
+
+
+ Resize volume group named %1 from %2 to %3.
+
+
+
+
+ Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.
+
+
+
+
+ The installer failed to resize a volume group named '%1'.
+
+
+
+
+ ResultsListWidget
+
+
+ This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a>
+
+
+
+
+ This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a>
+
+
+
+
+ This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled.
+
+
+
+
+ This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled.
+
+
+
+
+ This program will ask you some questions and set up %2 on your computer.
+
+
+
+
+ For best results, please ensure that this computer:
+
+
+
+
+ System requirements
+
+
+
+
+ ScanningDialog
+
+
+ Scanning storage devices...
+
+
+
+
+ Partitioning
+
+
+
+
+ SetHostNameJob
+
+
+ Set hostname %1
+
+
+
+
+ Set hostname <strong>%1</strong>.
+
+
+
+
+ Setting hostname %1.
+
+
+
+
+
+ Internal Error
+
+
+
+
+
+ Cannot write hostname to target system
+
+
+
+
+ SetKeyboardLayoutJob
+
+
+ Set keyboard model to %1, layout to %2-%3
+
+
+
+
+ Failed to write keyboard configuration for the virtual console.
+
+
+
+
+
+
+ Failed to write to %1
+
+
+
+
+ Failed to write keyboard configuration for X11.
+
+
+
+
+ Failed to write keyboard configuration to existing /etc/default directory.
+
+
+
+
+ SetPartFlagsJob
+
+
+ Set flags on partition %1.
+
+
+
+
+ Set flags on %1MiB %2 partition.
+
+
+
+
+ Set flags on new partition.
+
+
+
+
+ Clear flags on partition <strong>%1</strong>.
+
+
+
+
+ Clear flags on %1MiB <strong>%2</strong> partition.
+
+
+
+
+ Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>.
+
+
+
+
+ Clearing flags on %1MiB <strong>%2</strong> partition.
+
+
+
+
+ Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition.
+
+
+
+
+ Clear flags on new partition.
+
+
+
+
+ Flag partition <strong>%1</strong> as <strong>%2</strong>.
+
+
+
+
+ Flag new partition as <strong>%1</strong>.
+
+
+
+
+ Clearing flags on partition <strong>%1</strong>.
+
+
+
+
+ Clearing flags on new partition.
+
+
+
+
+ Setting flags <strong>%2</strong> on partition <strong>%1</strong>.
+
+
+
+
+ Setting flags <strong>%1</strong> on new partition.
+
+
+
+
+ The installer failed to set flags on partition %1.
+
+
+
+
+ SetPasswordJob
+
+
+ Set password for user %1
+
+
+
+
+ Setting password for user %1.
+
+
+
+
+ Bad destination system path.
+
+
+
+
+ rootMountPoint is %1
+
+
+
+
+ Cannot disable root account.
+
+
+
+
+ passwd terminated with error code %1.
+
+
+
+
+ Cannot set password for user %1.
+
+
+
+
+ usermod terminated with error code %1.
+
+
+
+
+ SetTimezoneJob
+
+
+ Set timezone to %1/%2
+
+
+
+
+ Cannot access selected timezone path.
+
+
+
+
+ Bad path: %1
+
+
+
+
+ Cannot set timezone.
+
+
+
+
+ Link creation failed, target: %1; link name: %2
+
+
+
+
+ Cannot set timezone,
+
+
+
+
+ Cannot open /etc/timezone for writing
+
+
+
+
+ ShellProcessJob
+
+
+ Shell Processes Job
+
+
+
+
+ SlideCounter
+
+
+ %L1 / %L2
+ slide counter, %1 of %2 (numeric)
+
+
+
+
+ SummaryPage
+
+
+ This is an overview of what will happen once you start the setup procedure.
+
+
+
+
+ This is an overview of what will happen once you start the install procedure.
+
+
+
+
+ SummaryViewStep
+
+
+ Summary
+
+
+
+
+ TrackingInstallJob
+
+
+ Installation feedback
+
+
+
+
+ Sending installation feedback.
+
+
+
+
+ Internal error in install-tracking.
+
+
+
+
+ HTTP request timed out.
+
+
+
+
+ TrackingMachineNeonJob
+
+
+ Machine feedback
+
+
+
+
+ Configuring machine feedback.
+
+
+
+
+
+ Error in machine feedback configuration.
+
+
+
+
+ Could not configure machine feedback correctly, script error %1.
+
+
+
+
+ Could not configure machine feedback correctly, Calamares error %1.
+
+
+
+
+ TrackingPage
+
+
+ Form
+
+
+
+
+ Placeholder
+
+
+
+
+ <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html>
+
+
+
+
+ <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html>
+
+
+
+
+ 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.
+
+
+
+
+ By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes.
+
+
+
+
+ By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1.
+
+
+
+
+ By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1.
+
+
+
+
+ TrackingViewStep
+
+
+ Feedback
+
+
+
+
+ UsersPage
+
+
+ <small>If more than one person will use this computer, you can create multiple accounts after setup.</small>
+
+
+
+
+ <small>If more than one person will use this computer, you can create multiple accounts after installation.</small>
+
+
+
+
+ Your username is too long.
+
+
+
+
+ Your username contains invalid characters. Only lowercase letters and numbers are allowed.
+
+
+
+
+ Your hostname is too short.
+
+
+
+
+ Your hostname is too long.
+
+
+
+
+ Your hostname contains invalid characters. Only letters, numbers and dashes are allowed.
+
+
+
+
+
+ Your passwords do not match!
+
+
+
+
+ UsersViewStep
+
+
+ Users
+
+
+
+
+ VolumeGroupBaseDialog
+
+
+ Create Volume Group
+
+
+
+
+ List of Physical Volumes
+
+
+
+
+ Volume Group Name:
+
+
+
+
+ Volume Group Type:
+
+
+
+
+ Physical Extent Size:
+
+
+
+
+ MiB
+
+
+
+
+ Total Size:
+
+
+
+
+ Used Size:
+
+
+
+
+ Total Sectors:
+
+
+
+
+ Quantity of LVs:
+
+
+
+
+ WelcomePage
+
+
+ Form
+
+
+
+
+ &Release notes
+
+
+
+
+ &Known issues
+
+
+
+
+
+ Select language
+
+
+
+
+ &Support
+
+
+
+
+ &About
+
+
+
+
+ <h1>Welcome to the %1 installer.</h1>
+
+
+
+
+ <h1>Welcome to the Calamares installer for %1.</h1>
+
+
+
+
+ <h1>Welcome to the Calamares setup program for %1.</h1>
+
+
+
+
+ <h1>Welcome to %1 setup.</h1>
+
+
+
+
+ About %1 setup
+
+
+
+
+ About %1 installer
+
+
+
+
+ <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac <teo@kde.org><br/>Copyright 2017-2019 Adriaan de Groot <groot@kde.org><br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.
+
+
+
+
+ %1 support
+
+
+
+
+ WelcomeViewStep
+
+
+ Welcome
+
+
+
+
\ No newline at end of file
diff --git a/lang/calamares_eo.ts b/lang/calamares_eo.ts
index 558006b8e..df38c5e88 100644
--- a/lang/calamares_eo.ts
+++ b/lang/calamares_eo.ts
@@ -58,7 +58,7 @@
Form
-
+ Formularo
@@ -73,23 +73,23 @@
Modules
-
+ ModulojType:
-
+ Tipo:none
-
+ neniuInterface:
-
+ Interfaco:
@@ -422,7 +422,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -1025,7 +1025,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -1091,7 +1091,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -1349,7 +1349,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -1807,7 +1807,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -1825,7 +1825,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -1962,7 +1962,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -2162,7 +2162,7 @@ La instalilo forlasos kaj ĉiuj ŝanĝoj perdos.
Form
-
+ Formularo
@@ -2346,7 +2346,7 @@ Output:
Form
-
+ Formularo
@@ -2907,7 +2907,7 @@ Output:
Form
-
+ Formularo
@@ -3063,7 +3063,7 @@ Output:
Form
-
+ Formularo
diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts
index c2868130d..ee397d052 100644
--- a/lang/calamares_fi_FI.ts
+++ b/lang/calamares_fi_FI.ts
@@ -2051,47 +2051,47 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
Install %1 <strong>alongside</strong> another operating system.
-
+ Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong>.<strong>Erase</strong> disk and install %1.
-
+ <strong>Tyhjennä</strong> levy ja asenna %1.<strong>Replace</strong> a partition with %1.
-
+ <strong>Vaihda</strong> osio jolla on %1.<strong>Manual</strong> partitioning.
-
+ <strong>Manuaalinen</strong> osointi.Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3).
-
+ Asenna toisen käyttöjärjestelmän %1 <strong>rinnalle</strong> levylle <strong>%2</strong> (%3).<strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1.
-
+ <strong>Tyhjennä</strong> levy <strong>%2</strong> (%3) ja asenna %1.<strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1.
-
+ <strong>Korvaa</strong> levyn osio <strong>%2</strong> (%3) jolla on %1.<strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2).
-
+ <strong>Manuaalinen</strong> osiointi levyllä <strong>%1</strong> (%2).Disk <strong>%1</strong> (%2)
-
+ Levy <strong>%1</strong> (%2)
@@ -2111,7 +2111,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start.
-
+ EFI-järjestelmäosio on välttämätön käynnistystä varten %1.<br/><br/>Jos haluat tehdä EFI-järjestelmäosion, mene takaisin ja luo FAT32-tiedostojärjestelmä, jossa on<strong>esp</strong> lippu yhdistettynä asennuspisteen liitokseen <strong>%2</strong>.<br/><br/>Voit jatkaa ilman EFI-järjestelmäosiota, mutta järjestelmä ei ehkä käynnisty.
@@ -2121,7 +2121,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start.
-
+ EFI-järjestelmäosio on välttämätön käynnistystä varten %1.<br/><br/>Osio määritettiin liittymäpisteellä, <strong>%2</strong> mutta sen <strong>esp</strong> lippua ei ole asetettu.<br/>Jos haluat asettaa lipun, palaa takaisin ja muokkaa osiota.<br/><br/>Voit jatkaa lippua asettamatta, mutta järjestelmä ei ehkä käynnisty.
@@ -2131,7 +2131,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.
-
+ Erillinen käynnistysosio perustettiin yhdessä salatun juuriosion kanssa, mutta käynnistysosio ei ole salattu.<br/><br/>Tällaisissa asetuksissa on tietoturvaongelmia, koska tärkeät järjestelmätiedostot pidetään salaamattomassa osiossa.<br/>Voit jatkaa, jos haluat, mutta tiedostojärjestelmän lukituksen avaaminen tapahtuu myöhemmin järjestelmän käynnistyksen aikana.<br/>Käynnistysosion salaamiseksi siirry takaisin ja luo se uudelleen valitsemalla <strong>Salaa</strong> osion luominen -ikkunassa.
@@ -2141,7 +2141,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
There are no partitons to install on.
-
+ Asennettavia osioita ei ole.
@@ -2149,13 +2149,13 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
Plasma Look-and-Feel Job
-
+ Plasman ulkoasuCould not select KDE Plasma Look-and-Feel package
-
+ KDE-plasman ulkoasupakettia ei voi valita
@@ -2168,12 +2168,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
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.
-
+ 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.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.
-
+ 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.
@@ -2181,7 +2181,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
Look-and-Feel
-
+ Ulkoasu
@@ -2194,12 +2194,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
No files configured to save for later.
-
+ Ei tiedostoja, joita olisi määritetty tallentamaan myöhemmin.Not all of the configured files could be preserved.
-
+ Kaikkia määritettyjä tiedostoja ei voitu säilyttää.
@@ -2208,7 +2208,8 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.
There was no output from the command.
-
+
+Komentoa ei voitu ajaa.
@@ -2222,27 +2223,27 @@ Ulostulo:
External command crashed.
-
+ Ulkoinen komento kaatui.Command <i>%1</i> crashed.
-
+ Komento <i>%1</i> kaatui.External command failed to start.
-
+ Ulkoisen komennon käynnistäminen epäonnistui.Command <i>%1</i> failed to start.
-
+ Komennon <i>%1</i> käynnistäminen epäonnistui.Internal error when starting command.
-
+ Sisäinen virhe käynnistettäessä komentoa.
@@ -2252,22 +2253,22 @@ Ulostulo:
External command failed to finish.
-
+ Ulkoinen komento ei onnistunut.Command <i>%1</i> failed to finish in %2 seconds.
-
+ Komento <i>%1</i> epäonnistui %2 sekunnissa.External command finished with errors.
-
+ Ulkoinen komento päättyi virheisiin.Command <i>%1</i> finished with exit code %2.
-
+ Komento <i>%1</i> päättyi koodiin %2.
@@ -2306,7 +2307,7 @@ Ulostulo:
Unpartitioned space or unknown partition table
-
+ Osioimaton tila tai tuntematon osion taulu
@@ -2316,7 +2317,7 @@ Ulostulo:
Requirements checking for module <i>%1</i> is complete.
-
+ Moduulin vaatimusten tarkistaminen <i>%1</i> on valmis.
@@ -2331,17 +2332,17 @@ Ulostulo:
Remove Volume Group named %1.
-
+ Poista asemaryhmä nimeltä %1.Remove Volume Group named <strong>%1</strong>.
-
+ Poista asemaryhmä nimeltä <strong>%1</strong>.The installer failed to remove a volume group named '%1'.
-
+ Asentaja ei onnistunut poistamaan nimettyä asemaryhmää '%1'.
@@ -2394,19 +2395,19 @@ Ulostulo:
<strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.
-
+ <strong>%4</strong><br/><br/>Osio %1 on liian pieni %2. Valitse osio, jonka kapasiteetti on vähintään %3 GiB.<strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.
-
+ <strong>%2</strong><br/><br/>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.<strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost.
-
+ <strong>%3</strong><br/><br/>%1 asennetaan %2.<br/><font color="red">Varoitus: </font>kaikki osion %2 tiedot katoavat.
@@ -2424,7 +2425,7 @@ Ulostulo:
Resize Filesystem Job
-
+ Muuta tiedostojärjestelmän kokoa
@@ -2434,7 +2435,7 @@ Ulostulo:
The file-system resize job has an invalid configuration and will not run.
-
+ Tiedostojärjestelmän koon muutto ei kelpaa eikä sitä suoriteta.
@@ -2446,7 +2447,7 @@ Ulostulo:
Calamares cannot start KPMCore for the file-system resize job.
-
+ Calamares ei voi käynnistää KPMCore-tiedostoa tiedostojärjestelmän koon muuttamiseksi.
@@ -2460,34 +2461,34 @@ Ulostulo:
The filesystem %1 could not be found in this system, and cannot be resized.
-
+ Tiedostojärjestelmää %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa.The device %1 could not be found in this system, and cannot be resized.
-
+ Laitetta %1 ei löydy tästä järjestelmästä, eikä sen kokoa voi muuttaa.The filesystem %1 cannot be resized.
-
+ Tiedostojärjestelmän %1 kokoa ei voi muuttaa.The device %1 cannot be resized.
-
+ Laitteen %1 kokoa ei voi muuttaa.The filesystem %1 must be resized, but cannot.
-
+ Tiedostojärjestelmän %1 kokoa on muutettava, mutta ei onnistu.The device %1 must be resized, but cannot
-
+ Laitteen %1 kokoa on muutettava, mutta ei onnistu.
@@ -2500,12 +2501,12 @@ Ulostulo:
Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.
-
+ Muuta <strong>%2MiB</strong> osiota <strong>%1</strong> - <strong>%3MiB</strong>.Resizing %2MiB partition %1 to %3MiB.
-
+ Muuntaa %2MiB osion %1 to %3MiB.
@@ -2527,17 +2528,17 @@ Ulostulo:
Resize volume group named %1 from %2 to %3.
-
+ Muuta %1 levyn kokoa %2:sta %3.Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.
-
+ Muuta levyä nimeltä <strong>%1</strong> lähde <strong>%2</strong> - <strong>%3</strong>.The installer failed to resize a volume group named '%1'.
-
+ Asentaja ei onnistunut muuttamaan nimettyä levyä '%1'.
@@ -2545,27 +2546,28 @@ Ulostulo:
This computer does not satisfy the minimum requirements for setting up %1.<br/>Setup cannot continue. <a href="#details">Details...</a>
-
+ Tämä tietokone ei täytä vähimmäisvaatimuksia, %1.<br/>Asennusta ei voi jatkaa. <a href="#details">Yksityiskohdat...</a>This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a>
-
+ Tämä tietokone ei täytä asennuksen vähimmäisvaatimuksia, %1.<br/>Asennus ei voi jatkua. <a href="#details">Yksityiskohdat...</a>This computer does not satisfy some of the recommended requirements for setting up %1.<br/>Setup can continue, but some features might be disabled.
-
+ Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.<br/>Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled.
-
+ Tämä tietokone ei täytä joitakin suositeltuja vaatimuksia %1.
+Asennus voi jatkua, mutta jotkin toiminnot saattavat olla pois käytöstä.This program will ask you some questions and set up %2 on your computer.
-
+ Tämä ohjelma kysyy joitakin kysymyksiä %2 ja asentaa tietokoneeseen.
@@ -2601,12 +2603,12 @@ Ulostulo:
Set hostname <strong>%1</strong>.
-
+ Aseta koneellenimi <strong>%1</strong>.Setting hostname %1.
-
+ Asetetaan koneellenimi %1.
@@ -2648,7 +2650,7 @@ Ulostulo:
Failed to write keyboard configuration to existing /etc/default directory.
-
+ Näppäimistöasetusten kirjoittaminen epäonnistui olemassa olevaan /etc/default hakemistoon.
@@ -2656,82 +2658,82 @@ Ulostulo:
Set flags on partition %1.
-
+ Aseta liput osioon %1.Set flags on %1MiB %2 partition.
-
+ Aseta liput %1MiB %2 osioon.Set flags on new partition.
-
+ Aseta liput uuteen osioon.Clear flags on partition <strong>%1</strong>.
-
+ Poista liput osiosta <strong>%1</strong>.Clear flags on %1MiB <strong>%2</strong> partition.
-
+ Poista liput %1MiB <strong>%2</strong> osiosta.Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>.
-
+ Lippu %1MiB <strong>%2</strong> osiosta <strong>%3</strong>.Clearing flags on %1MiB <strong>%2</strong> partition.
-
+ Tyhjennä liput %1MiB <strong>%2</strong> osiossa.Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition.
-
+ Asetetaan liput <strong>%3</strong> %1MiB <strong>%2</strong> osioon.Clear flags on new partition.
-
+ Tyhjennä liput uuteen osioon.Flag partition <strong>%1</strong> as <strong>%2</strong>.
-
+ Merkitse osio <strong>%1</strong> - <strong>%2</strong>.Flag new partition as <strong>%1</strong>.
-
+ Merkitse uusi osio <strong>%1</strong>.Clearing flags on partition <strong>%1</strong>.
-
+ Lipun poisto osiosta <strong>%1</strong>.Clearing flags on new partition.
-
+ Uusien osioiden lippujen poistaminen.Setting flags <strong>%2</strong> on partition <strong>%1</strong>.
-
+ Lippujen <strong>%2</strong> asettaminen osioon <strong>%1</strong>.Setting flags <strong>%1</strong> on new partition.
-
+ Asetetaan liput <strong>%1</strong> uuteen osioon.The installer failed to set flags on partition %1.
-
+ Asennusohjelma ei voinut asettaa lippuja osioon %1.
@@ -2744,7 +2746,7 @@ Ulostulo:
Setting password for user %1.
-
+ Salasanan asettaminen käyttäjälle %1.
@@ -2764,7 +2766,7 @@ Ulostulo:
passwd terminated with error code %1.
-
+ passwd päättyi virhekoodiin %1.
@@ -2812,7 +2814,7 @@ Ulostulo:
Cannot open /etc/timezone for writing
-
+ Ei voi avata /etc/timezone
@@ -2820,7 +2822,7 @@ Ulostulo:
Shell Processes Job
-
+ Shell-prosessien työ
@@ -2829,7 +2831,7 @@ Ulostulo:
%L1 / %L2slide counter, %1 of %2 (numeric)
-
+ %L1 / %L2
@@ -2837,12 +2839,12 @@ Ulostulo:
This is an overview of what will happen once you start the setup procedure.
-
+ Tämä on yleiskuva siitä, mitä tapahtuu, kun asennusohjelma käynnistetään.This is an overview of what will happen once you start the install procedure.
-
+ Tämä on yleiskuva siitä, mitä tapahtuu asennuksen aloittamisen jälkeen.
@@ -2863,17 +2865,17 @@ Ulostulo:
Sending installation feedback.
-
+ Lähetetään asennuksen palautetta.Internal error in install-tracking.
-
+ Sisäinen virhe asennuksen seurannassa.HTTP request timed out.
-
+ HTTP -pyyntö aikakatkaistiin.
@@ -2881,28 +2883,28 @@ Ulostulo:
Machine feedback
-
+ Koneen palauteConfiguring machine feedback.
-
+ Konekohtaisen palautteen määrittäminen.Error in machine feedback configuration.
-
+ Virhe koneen palautteen määrityksessä.Could not configure machine feedback correctly, script error %1.
-
+ Konekohtaista palautetta ei voitu määrittää oikein, komentosarjan virhe %1.Could not configure machine feedback correctly, Calamares error %1.
-
+ Koneen palautetta ei voitu määrittää oikein, Calamares-virhe %1.
@@ -2915,37 +2917,37 @@ Ulostulo:
Placeholder
-
+ Paikkamerkki<html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html>
-
+ <html><head/><body><p>Valitsemalla tämän, <span style=" font-weight:600;">et lähetä mitään</span> tietoja asennuksesta.</p></body></html><html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html>
-
+ <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Klikkaa tästä saadaksesi lisätietoja käyttäjäpalautteesta</span></a></p></body></html>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.
-
+ 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.By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes.
-
+ Kun valitset tämän, lähetät tietoja asennuksesta ja laitteistosta. <b>Nämä tiedot lähetetään vain kerran</b> asennuksen päättymisen jälkeen.By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1.
-
+ Kun valitset tämän, lähetät <b>määräajoin </b> tietoja asennuksesta, laitteistosta ja sovelluksista osoitteeseen %1.By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1.
-
+ Kun valitset tämän, lähetät <b>säännöllisesti </b> tietoja asennuksesta, laitteistosta, sovelluksista ja käyttötavoista osoitteeseen %1.
@@ -2961,12 +2963,12 @@ Ulostulo:
<small>If more than one person will use this computer, you can create multiple accounts after setup.</small>
-
+ <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small><small>If more than one person will use this computer, you can create multiple accounts after installation.</small>
-
+ <small>Jos useampi kuin yksi henkilö käyttää tätä tietokonetta, voit luoda useita tilejä asennuksen jälkeen.</small>
@@ -2976,7 +2978,7 @@ Ulostulo:
Your username contains invalid characters. Only lowercase letters and numbers are allowed.
-
+ Käyttäjätunnuksesi sisältää virheellisiä merkkejä. Vain pienet kirjaimet ja numerot ovat sallittuja.
@@ -3018,17 +3020,17 @@ Ulostulo:
List of Physical Volumes
-
+ Fyysisten levyjen luoetteloVolume Group Name:
-
+ Aseman ryhmän nimi:Volume Group Type:
-
+ Aseman ryhmän tyyppi:
@@ -3058,7 +3060,7 @@ Ulostulo:
Quantity of LVs:
-
+ Määrä LVs:
@@ -3071,12 +3073,12 @@ Ulostulo:
&Release notes
-
+ &Julkaisutiedot&Known issues
-
+ &Tunnetut ongelmat
@@ -3087,7 +3089,7 @@ Ulostulo:
&Support
-
+ &Tuki
@@ -3097,27 +3099,27 @@ Ulostulo:
<h1>Welcome to the %1 installer.</h1>
-
+ <h1>Tervetuloa %1 -asennusohjelmaan.</h1><h1>Welcome to the Calamares installer for %1.</h1>
-
+ <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1><h1>Welcome to the Calamares setup program for %1.</h1>
-
+ <h1>Tervetuloa Calamares -asennusohjelmaan %1.</h1><h1>Welcome to %1 setup.</h1>
-
+ <h1>Tervetuloa %1 asennukseen.</h1>About %1 setup
-
+ Tietoja %1 asetuksista
@@ -3127,7 +3129,7 @@ Ulostulo:
<h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac <teo@kde.org><br/>Copyright 2017-2019 Adriaan de Groot <groot@kde.org><br/>Thanks to <a href="https://calamares.io/team/">the Calamares team</a> and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.
-
+ <h1>%1</h1><br/><strong>%2<br/>- %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac <teo@kde.org><br/>Copyright 2017-2019 Adriaan de Groot <groot@kde.org><br/>Kiitokset <a href="https://calamares.io/team/">Calamares-tiimille</a> ja <a href="https://www.transifex.com/calamares/calamares/">Calamares kääntäjille</a>.<br/><br/><a href="https://calamares.io/">Calamaresin</a> kehitystä sponsoroi <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software.
diff --git a/lang/calamares_ja.ts b/lang/calamares_ja.ts
index 0efaed04b..cc379bc46 100644
--- a/lang/calamares_ja.ts
+++ b/lang/calamares_ja.ts
@@ -107,7 +107,7 @@
Set up
-
+ セットアップ
@@ -195,12 +195,12 @@
Waiting for %n module(s).
-
+ %n モジュールを待機中。(%n second(s))
-
+ (%n 秒(s))
@@ -466,7 +466,7 @@ The installer will quit and all changes will be lost.
%1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.
-
+ %1 は %2MiB に縮小され新たに %4 に %3MiB のパーティションが作成されます。
@@ -709,12 +709,12 @@ The installer will quit and all changes will be lost.
Create new %2MiB partition on %4 (%3) with file system %1.
-
+ %4 (%3) に新たにファイルシステム %1 の %2MiB のパーティションが作成されます。Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>.
-
+ Create new <strong>%4</strong> (%3) に新たにファイルシステム<strong>%1</strong>の <strong>%2MiB</strong> のパーティションが作成されます。
diff --git a/lang/calamares_pl.ts b/lang/calamares_pl.ts
index bbdfe0294..4cd49e159 100644
--- a/lang/calamares_pl.ts
+++ b/lang/calamares_pl.ts
@@ -292,7 +292,7 @@
Cancel setup?
-
+ Anulować ustawianie?
@@ -1144,7 +1144,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.
Setup Complete
-
+ Ustawianie ukończone
@@ -1154,7 +1154,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.
The setup of %1 is complete.
-
+ Ustawianie %1 jest ukończone.
@@ -1551,7 +1551,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.
OEM Configuration
-
+ Konfiguracja OEM
@@ -2140,7 +2140,7 @@ Instalator zostanie zamknięty i wszystkie zmiany zostaną utracone.
There are no partitons to install on.
-
+ Brak partycji, na których można zainstalować.
@@ -2311,7 +2311,7 @@ Wyjście:
(no mount point)
-
+ (brak punktu montowania)
@@ -3083,7 +3083,7 @@ i nie uruchomi się
Select language
-
+ Wybierz język
@@ -3113,7 +3113,7 @@ i nie uruchomi się
<h1>Welcome to %1 setup.</h1>
-
+ <h1>Witamy w ustawianiu %1.</h1>
diff --git a/lang/python/ca@valencia/LC_MESSAGES/python.mo b/lang/python/ca@valencia/LC_MESSAGES/python.mo
new file mode 100644
index 000000000..ab2697f1e
Binary files /dev/null and b/lang/python/ca@valencia/LC_MESSAGES/python.mo differ
diff --git a/lang/python/ca@valencia/LC_MESSAGES/python.po b/lang/python/ca@valencia/LC_MESSAGES/python.po
new file mode 100644
index 000000000..8e6674400
--- /dev/null
+++ b/lang/python/ca@valencia/LC_MESSAGES/python.po
@@ -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 , 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
{!s}
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 ""
+"systemctl {arg!s} 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 {name!s}."
+msgstr ""
+
+#: src/modules/services-systemd/main.py:74
+msgid "Cannot enable systemd target {name!s}."
+msgstr ""
+
+#: src/modules/services-systemd/main.py:78
+msgid "Cannot disable systemd target {name!s}."
+msgstr ""
+
+#: src/modules/services-systemd/main.py:80
+msgid "Cannot mask systemd unit {name!s}."
+msgstr ""
+
+#: src/modules/services-systemd/main.py:82
+msgid ""
+"Unknown systemd commands {command!s} and "
+"{suffix!s} 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
."
+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 {arg!s} for service {name!s} in run-"
+"level {level!s}."
+msgstr ""
+
+#: src/modules/services-openrc/main.py:103
+msgid ""
+"rc-update {arg!s} 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 {path!s}, 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 {path!s}, 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 ""
diff --git a/lang/python/fi_FI/LC_MESSAGES/python.mo b/lang/python/fi_FI/LC_MESSAGES/python.mo
index 02ef2d1f4..b46237dde 100644
Binary files a/lang/python/fi_FI/LC_MESSAGES/python.mo and b/lang/python/fi_FI/LC_MESSAGES/python.mo differ
diff --git a/lang/python/fi_FI/LC_MESSAGES/python.po b/lang/python/fi_FI/LC_MESSAGES/python.po
index 4348bb437..88edb80d4 100644
--- a/lang/python/fi_FI/LC_MESSAGES/python.po
+++ b/lang/python/fi_FI/LC_MESSAGES/python.po
@@ -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
{!s}
to use."
-msgstr ""
+msgstr "Ei ole määritetty käyttämään osioita
{!s}
."
#: 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 ""
"systemctl {arg!s} call in chroot returned error code {num!s}."
-msgstr ""
+msgstr "systemctl {arg!s} 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 {name!s}."
-msgstr ""
+msgstr "Systemd-palvelua ei saa käyttöön {name!s}."
#: src/modules/services-systemd/main.py:74
msgid "Cannot enable systemd target {name!s}."
-msgstr ""
+msgstr "Systemd-kohdetta ei saa käyttöön {name!s}."
#: src/modules/services-systemd/main.py:78
msgid "Cannot disable systemd target {name!s}."
-msgstr ""
+msgstr "Systemd-kohdetta ei-voi poistaa käytöstä {name!s}."
#: src/modules/services-systemd/main.py:80
msgid "Cannot mask systemd unit {name!s}."
-msgstr ""
+msgstr "Ei voi peittää systemd-yksikköä {name!s}."
#: src/modules/services-systemd/main.py:82
msgid ""
"Unknown systemd commands {command!s} and "
"{suffix!s} for unit {name!s}."
msgstr ""
+"Tuntematon systemd-komennot {command!s} ja "
+"{suffix!s} 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
{!s}
to use."
msgstr ""
+"Root-juuri kiinnityspistettä
{!s}
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
mkinitcpio
failed with error code {!s}. The command was "
"
{!s}
."
msgstr ""
+"Prosessi
mkinitcpio
epäonnistui virhekoodilla {!s}. Komento oli "
+"
{!s}
."
#: 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 {arg!s} for service {name!s} in run-"
"level {level!s}."
msgstr ""
+"Tuntematon huoltotoiminto{arg!s} palvelun {name!s} "
+"palvelutasolle {level!s}."
#: src/modules/services-openrc/main.py:103
msgid ""
"rc-update {arg!s} call in chroot returned error code {num!s}."
msgstr ""
+"rc-update {arg!s} 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 {path!s}, which does not "
"exist."
-msgstr ""
+msgstr "Ajotason polku {level!s} on {path!s}, 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 {path!s}, which does not "
"exist."
msgstr ""
+"Palvelun polku {name!s} on {path!s}, 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ä."
diff --git a/lang/python/pl/LC_MESSAGES/python.mo b/lang/python/pl/LC_MESSAGES/python.mo
index cf7829295..ea1d34269 100644
Binary files a/lang/python/pl/LC_MESSAGES/python.mo and b/lang/python/pl/LC_MESSAGES/python.mo differ
diff --git a/lang/python/pl/LC_MESSAGES/python.po b/lang/python/pl/LC_MESSAGES/python.po
index e7d8ea3be..dcc9bae84 100644
--- a/lang/python/pl/LC_MESSAGES/python.po
+++ b/lang/python/pl/LC_MESSAGES/python.po
@@ -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."
diff --git a/src/branding/CMakeLists.txt b/src/branding/CMakeLists.txt
index b03127e39..981da1468 100644
--- a/src/branding/CMakeLists.txt
+++ b/src/branding/CMakeLists.txt
@@ -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 )
diff --git a/src/branding/README.md b/src/branding/README.md
index 1d816911e..1b9eb57fd 100644
--- a/src/branding/README.md
+++ b/src/branding/README.md
@@ -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-_.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
diff --git a/src/branding/default/branding.desc b/src/branding/default/branding.desc
index 1dd4de03a..1bd76cd29 100644
--- a/src/branding/default/branding.desc
+++ b/src/branding/default/branding.desc
@@ -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.
#
diff --git a/src/branding/default/lang/calamares-default_ar.ts b/src/branding/default/lang/calamares-default_ar.ts
new file mode 100644
index 000000000..05463dd72
--- /dev/null
+++ b/src/branding/default/lang/calamares-default_ar.ts
@@ -0,0 +1,17 @@
+
+
+
+
+ show
+
+
+ This is a second Slide element.
+ عرض الثاني
+
+
+
+ This is a third Slide element.
+ عرض الثالث
+
+
+
diff --git a/src/branding/default/lang/calamares-default_en.ts b/src/branding/default/lang/calamares-default_en.ts
new file mode 100644
index 000000000..30474fc02
--- /dev/null
+++ b/src/branding/default/lang/calamares-default_en.ts
@@ -0,0 +1,17 @@
+
+
+
+
+ show
+
+
+ This is a second Slide element.
+
+
+
+
+ This is a third Slide element.
+
+
+
+
diff --git a/src/branding/default/lang/calamares-default_fr.ts b/src/branding/default/lang/calamares-default_fr.ts
new file mode 100644
index 000000000..9329e61ee
--- /dev/null
+++ b/src/branding/default/lang/calamares-default_fr.ts
@@ -0,0 +1,17 @@
+
+
+
+
+ show
+
+
+ This is a second Slide element.
+ Ceci est la deuxieme affiche.
+
+
+
+ This is a third Slide element.
+ La troisième affice ce trouve ici.
+
+
+
diff --git a/src/branding/default/lang/calamares-default_nl.ts b/src/branding/default/lang/calamares-default_nl.ts
new file mode 100644
index 000000000..aad00eaf7
--- /dev/null
+++ b/src/branding/default/lang/calamares-default_nl.ts
@@ -0,0 +1,17 @@
+
+
+
+
+ show
+
+
+ This is a second Slide element.
+ Dit is het tweede Dia element.
+
+
+
+ This is a third Slide element.
+ Dit is het derde Dia element.
+
+
+
diff --git a/src/branding/default/show.qml b/src/branding/default/show.qml
index b724a4832..43b407283 100644
--- a/src/branding/default/show.qml
+++ b/src/branding/default/show.qml
@@ -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");
+ }
}
diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt
index 7ce1d7a01..b0f369c2f 100644
--- a/src/libcalamares/CMakeLists.txt
+++ b/src/libcalamares/CMakeLists.txt
@@ -209,6 +209,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 )
diff --git a/src/libcalamares/geoip/Handler.cpp b/src/libcalamares/geoip/Handler.cpp
index 192ab1a7c..df033f476 100644
--- a/src/libcalamares/geoip/Handler.cpp
+++ b/src/libcalamares/geoip/Handler.cpp
@@ -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()
diff --git a/src/libcalamares/geoip/Handler.h b/src/libcalamares/geoip/Handler.h
index 5c3207b60..8e435b5b7 100644
--- a/src/libcalamares/geoip/Handler.h
+++ b/src/libcalamares/geoip/Handler.h
@@ -25,7 +25,7 @@
#include
#include
-namespace CalamaresUtils
+namespace CalamaresUtils
{
namespace GeoIP
{
@@ -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;
diff --git a/src/libcalamares/locale/Tests.cpp b/src/libcalamares/locale/Tests.cpp
new file mode 100644
index 000000000..6fd0f3e61
--- /dev/null
+++ b/src/libcalamares/locale/Tests.cpp
@@ -0,0 +1,87 @@
+/* === This file is part of Calamares - ===
+ *
+ * Copyright 2019, Adriaan de Groot
+ *
+ * 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 .
+ */
+
+#include "Tests.h"
+
+#include "locale/LabelModel.h"
+#include "utils/Logger.h"
+
+#include
+
+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 );
+}
diff --git a/src/libcalamares/locale/Tests.h b/src/libcalamares/locale/Tests.h
new file mode 100644
index 000000000..be712388f
--- /dev/null
+++ b/src/libcalamares/locale/Tests.h
@@ -0,0 +1,38 @@
+/* === This file is part of Calamares - ===
+ *
+ * Copyright 2019, Adriaan de Groot
+ *
+ * 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 .
+ */
+
+#ifndef LIBCALAMARES_LOCALE_TESTS_H
+#define LIBCALAMARES_LOCALE_TESTS_H
+
+#include
+
+class LocaleTests : public QObject
+{
+ Q_OBJECT
+public:
+ LocaleTests();
+ ~LocaleTests() override;
+
+private Q_SLOTS:
+ void initTestCase();
+
+ void testLanguageModelCount();
+ void testEsperanto();
+};
+
+#endif
diff --git a/src/libcalamaresui/Branding.cpp b/src/libcalamaresui/Branding.cpp
index 48917f1ba..876fdfa80 100644
--- a/src/libcalamaresui/Branding.cpp
+++ b/src/libcalamaresui/Branding.cpp
@@ -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() : -1;
+ if ( ( api < 1 ) || ( api > 2 ) )
+ {
+ cWarning() << "Invalid or missing *slideshowAPI* in branding file.";
+ api = 1;
+ }
+ m_slideshowAPI = api;
}
catch ( YAML::Exception& e )
{
diff --git a/src/libcalamaresui/Branding.h b/src/libcalamaresui/Branding.h
index 23a7a7a49..a3909bc00 100644
--- a/src/libcalamaresui/Branding.h
+++ b/src/libcalamaresui/Branding.h
@@ -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 */
diff --git a/src/libcalamaresui/ExecutionViewStep.cpp b/src/libcalamaresui/ExecutionViewStep.cpp
index a65ab3a1c..e242622a0 100644
--- a/src/libcalamaresui/ExecutionViewStep.cpp
+++ b/src/libcalamaresui/ExecutionViewStep.cpp
@@ -36,10 +36,40 @@
#include
#include
#include
-#include
-#include
+#include
#include
+#include
+#include
+#include
+/** @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
diff --git a/src/libcalamaresui/ExecutionViewStep.h b/src/libcalamaresui/ExecutionViewStep.h
index ed6de4382..c1183e110 100644
--- a/src/libcalamaresui/ExecutionViewStep.h
+++ b/src/libcalamaresui/ExecutionViewStep.h
@@ -25,7 +25,10 @@
#include
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 );
};
diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp
index 3a5d24feb..16c38b1bc 100644
--- a/src/libcalamaresui/ViewManager.cpp
+++ b/src/libcalamaresui/ViewManager.cpp
@@ -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" );
}
}
diff --git a/src/libcalamaresui/modulesystem/Module.cpp b/src/libcalamaresui/modulesystem/Module.cpp
index d05245384..44798b32b 100644
--- a/src/libcalamaresui/modulesystem/Module.cpp
+++ b/src/libcalamaresui/modulesystem/Module.cpp
@@ -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 );
}
diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp
index 185ec37e9..a030e55cd 100644
--- a/src/libcalamaresui/modulesystem/ModuleManager.cpp
+++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp
@@ -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.
@@ -359,7 +364,7 @@ ModuleManager::checkDependencies()
m_availableDescriptorsByModuleName.erase( it );
failed << moduleName;
cWarning() << "Module" << moduleName << "requires modules" << Logger::DebugList( unmet );
- cWarning() << Logger::SubEntry << "but these are not available (listed in settings, or installed).";
+ cWarning() << Logger::SubEntry << "but these are not available (listed in settings, or installed).";
break;
}
}
diff --git a/src/modules/dummyprocess/module.desc b/src/modules/dummyprocess/module.desc
index 6463e7a43..55d11cfab 100644
--- a/src/modules/dummyprocess/module.desc
+++ b/src/modules/dummyprocess/module.desc
@@ -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
diff --git a/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo
new file mode 100644
index 000000000..b22984ed7
Binary files /dev/null and b/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.po
new file mode 100644
index 000000000..e67e371f3
--- /dev/null
+++ b/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.po
@@ -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 , 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 ""
diff --git a/src/modules/welcome/WelcomeViewStep.cpp b/src/modules/welcome/WelcomeViewStep.cpp
index a27cc4cf0..938fe1f45 100644
--- a/src/modules/welcome/WelcomeViewStep.cpp
+++ b/src/modules/welcome/WelcomeViewStep.cpp
@@ -128,16 +128,24 @@ WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap )
CalamaresUtils::getString( geoip, "style" ),
CalamaresUtils::getString( geoip, "url" ),
CalamaresUtils::getString( geoip, "selector" ) );
- auto* future = new FWString();
- connect( future, &FWString::finished, [view=this, f=future, h=handler]()
+ if ( handler->type() != CalamaresUtils::GeoIP::Handler::Type::None )
{
- QString countryResult = f->future().result();
- cDebug() << "GeoIP result for welcome=" << countryResult;
- view->setCountry( countryResult );
- f->deleteLater();
- delete h;
- } );
- future->setFuture( handler->queryRaw() );
+ 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, h );
+ f->deleteLater();
+ delete h;
+ } );
+ future->setFuture( handler->queryRaw() );
+ }
+ else
+ {
+ // Would not produce useful country code anyway.
+ delete handler;
+ }
}
@@ -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( 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
diff --git a/src/modules/welcome/WelcomeViewStep.h b/src/modules/welcome/WelcomeViewStep.h
index 7deed2167..5d27d7aad 100644
--- a/src/modules/welcome/WelcomeViewStep.h
+++ b/src/modules/welcome/WelcomeViewStep.h
@@ -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;