Compare commits

..

9 Commits

Author SHA1 Message Date
Adriaan de Groot
1b37eb1262 [machineid] Read systemd-style from config 2023-12-09 00:08:38 +01:00
Adriaan de Groot
89348910c3 [machineid] Document aliases (not visible in schema) 2023-12-09 00:08:19 +01:00
Adriaan de Groot
2f740564c6 [machineid] Run systemd-machine-id in host, telling it to modify target 2023-12-08 23:37:48 +01:00
Adriaan de Groot
e04e0260c9 [machineid] Apply coding style 2023-12-08 23:15:32 +01:00
Adriaan de Groot
e5ee28329d [machineid] Handle different settings of systemd-style 2023-12-08 22:43:00 +01:00
Adriaan de Groot
0eb387d6de [machineid] Default to running systemd-machine-id 2023-12-08 22:26:32 +01:00
Adriaan de Groot
0d11de4525 [libcalamares] Add missing parameter name 2023-12-08 22:04:46 +01:00
Adriaan de Groot
44d12379bd machineid: pass around enum for style 2023-11-02 21:22:35 +01:00
Adriaan de Groot
083b0fb1e5 machineid: add configuration option for machine-id
SEE #2225
2023-10-30 23:25:21 +01:00
91 changed files with 438 additions and 10630 deletions

View File

@@ -17,7 +17,7 @@ jobs:
build:
runs-on: ubuntu-latest
container:
image: docker://registry.fedoraproject.org/fedora:40
image: docker://fedora:39
options: --tmpfs /build:rw --user 0:0
steps:
- name: "prepare git"

View File

@@ -8,19 +8,13 @@ changelog -- this log starts with version 3.3.0. See CHANGES-3.2 for
the history of the 3.2 series (2018-05 - 2022-08).
# 3.3.0-alpha5 (2023-11-13)
# 3.3.0-alpha5 (unreleased)
This release contains contributions from (alphabetically by first name):
- Adriaan de Groot
- Alejo Fernandez
- Anke Boersma
- Christophe Marin
- Emir Sari
- Evan James
- Gaël PORTAY
- Gecko Linux
- Jeremy Whiting
- Neal Gompa
## Core ##
- Boost::Python is no longer a dependency, Calamares uses a bundled copy
@@ -31,22 +25,9 @@ This release contains contributions from (alphabetically by first name):
- Coding style now wants clang-format 15 or 16, but no longer needs astyle.
There is also a clang-tidy file for additional styling support.
- Ongoing translation improvements. (thanks Emir)
- Translations for bqi (Luri), es_AR (Castellano), eo (Esperanto),
ka (Georgian). In **non-release** builds (e.g. between releases,
so for developers building directly from git) all translations are
enabled, even the ones with no translations at all.
- The logging format in the `session.log` file and on-screen is now
more similar, although the file contains a lot more per-line information.
- The INSTALL_CONFIG option has been restored. It is still a terrible
idea to fork the repository to modify the config files, and you
probably should have a calamares-config package with those files
instead, there are packaging workflows that can usefully patch-and-
install configuration files. The option defaults to OFF.
## Modules ##
- All QML modules now have a Qt6-compatible set of QML files as well. (thanks Anke)
- *packagechooser* supports AppStream 1.0 API.
- *unpackfs* now uses the `-S` option to rsync for sparse file support. (thanks Jeremy)
# 3.3.0-alpha4 (2023-10-13)

View File

@@ -48,7 +48,7 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
set(CALAMARES_VERSION 3.3.0-alpha5)
set(CALAMARES_RELEASE_MODE ON) # Set to ON during a release
set(CALAMARES_RELEASE_MODE OFF) # Set to ON during a release
if(CMAKE_SCRIPT_MODE_FILE)
include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/ExtendedVersion.cmake)
@@ -79,7 +79,6 @@ set(CALAMARES_SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
#
option(INSTALL_POLKIT "Install Polkit configuration" ON)
option(INSTALL_COMPLETION "Install shell completions" OFF)
option(INSTALL_CONFIG "Install configuration files" OFF)
# When adding WITH_* that affects the ABI offered by libcalamares,
# also update libcalamares/CalamaresConfig.h.in
option(WITH_PYBIND11 "Use bundled pybind11 instead o Boost::Python" ON)
@@ -154,16 +153,16 @@ set(CALAMARES_DESCRIPTION_SUMMARY "The distribution-independent installer framew
# NOTE: update these lines by running `txstats.py`, or for full automation
# `txstats.py -e`. See also
#
# Total 80 languages
set( _tx_complete az_AZ ca en es fi_FI fr he hr ja lt pl sq sv
tr_TR uk zh_TW )
set( _tx_good as az be bg ca@valencia cs_CZ da de fa fur hi is
it_IT ko nl pt_BR pt_PT ru si sk tg vi zh_CN )
set( _tx_ok ar ast bn el en_GB eo es_AR es_MX et eu gl hu id ml mr
nb oc ro sl sr sr@latin th )
set( _tx_incomplete bqi es_PR gu ie ja-Hira ka kk kn lo lv mk ne_NP
ro_RO ta_IN te ur uz zh zh_HK )
# Total 80 languages
# Total 75 languages
set( _tx_complete az az_AZ ca fi_FI fr he hr ja ko lt pt_BR pt_PT
sv tr_TR uk zh_TW )
set( _tx_good as be ca@valencia cs_CZ da de es fa fur hi it_IT ml
nl ru si sk sq tg vi zh_CN )
set( _tx_ok ar ast bg bn el en_GB es_MX et eu gl hu id is mr nb oc
pl ro sl sr sr@latin th )
set( _tx_incomplete eo es_PR gu ie ja-Hira kk kn lo lv mk ne_NP
ta_IN te ur uz zh zh_HK )
# Total 75 languages
### Required versions
#
@@ -508,10 +507,6 @@ if(tx_errors)
endif()
set(CALAMARES_TRANSLATION_LANGUAGES en ${_tx_complete} ${_tx_good} ${_tx_ok})
if(NOT CALAMARES_RELEASE_MODE)
# Outside of release mode, enable all the languages
list(APPEND CALAMARES_TRANSLATION_LANGUAGES ${_tx_incomplete})
endif()
list(SORT CALAMARES_TRANSLATION_LANGUAGES)
add_subdirectory(lang) # i18n tools
@@ -683,10 +678,6 @@ install(FILES calamares.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/application
install(FILES man/calamares.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/)
if(INSTALL_CONFIG)
install(FILES settings.conf DESTINATION share/calamares)
endif()
### Uninstall
#
#

View File

@@ -167,14 +167,7 @@ function( _calamares_add_module_subdirectory_impl )
message( " ${Green}TYPE:${ColorReset} jobmodule" )
message( " ${Green}MODULE_DESTINATION:${ColorReset} ${MODULE_DESTINATION}" )
if( MODULE_CONFIG_FILES )
if (INSTALL_CONFIG)
message(" ${Green}CONFIGURATION_FILES:${ColorReset} ${MODULE_CONFIG_FILES} => [Build directory and ${MODULE_DATA_DESTINATION}]")
foreach(_cf ${MODULE_CONFIG_FILES})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${_cf} DESTINATION ${MODULE_DESTINATION})
endforeach()
else()
message(" ${Green}CONFIGURATION_FILES:${ColorReset} ${MODULE_CONFIG_FILES} => [Build directory only]")
endif()
message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${MODULE_CONFIG_FILES} => [Build directory only]" )
endif()
message( "" )
# We copy over the lang directory, if any

View File

@@ -104,9 +104,7 @@ function( calamares_add_plugin )
message( FATAL_ERROR "${Red}NO_CONFIG${ColorReset} is set, with configuration ${Red}${PLUGIN_CONFIG_FILES}${ColorReset}" )
endif()
set( _destination "(unknown)" )
if(INSTALL_CONFIG AND NOT PLUGIN_NO_INSTALL)
set(_destination "${PLUGIN_DATA_DESTINATION}")
elseif( NOT PLUGIN_NO_INSTALL )
if( NOT PLUGIN_NO_INSTALL )
set( _destination "[Build directory only]" )
else()
set( _destination "[Skipping installation]" )
@@ -215,9 +213,6 @@ function( calamares_add_plugin )
message( " ${BoldYellow}Not updating${ColorReset} ${PLUGIN_CONFIG_FILE}" )
set( _warned_config ON )
endif()
if(INSTALL_CONFIG)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE} DESTINATION ${PLUGIN_DATA_DESTINATION})
endif()
endforeach()
if ( _warned_config )
message( "" )

View File

@@ -43,4 +43,3 @@ apt-get -y install \
libpwquality-dev \
libqt5webenginewidgets5 \
qtwebengine5-dev
true

View File

@@ -1,11 +0,0 @@
#! /bin/sh
#
# Install dependencies for building on EndeavourOS
#
# There is no docker image for EndeavoudOS, and the live ISO
# for Cassini Nova is KF5 / Qt5 based, but we can build there.
# It even has most of the build-deps already installed.
pacman -Syu --noconfirm git cmake ninja jq
pacman -S --noconfirm gcc yaml-cpp icu
pacman -S --noconfigm extra-cmake-modules

View File

@@ -3,6 +3,10 @@
# Install dependencies for the nightly-fedora-qt6 build
#
# Add the KF6 repo
dnf install -y 'dnf-command(copr)'
dnf copr enable -y @kdesig/kde-nightly-qt6
yum install -y bison flex git make cmake gcc-c++ ninja-build
yum install -y yaml-cpp-devel libpwquality-devel parted-devel python-devel gettext gettext-devel
yum install -y libicu-devel libatasmart-devel
@@ -11,6 +15,4 @@ yum install -y qt6-qtbase-devel qt6-linguist qt6-qtbase-private-devel qt6-qtdecl
yum install -y kf6-kcoreaddons-devel kf6-kdbusaddons-devel kf6-kcrash-devel
yum install -y polkit-qt6-1-devel appstream-qt-devel
# Runtime dependencies for QML modules
yum install -y kf6-kirigami2-devel || true
yum install -y qt6-qt5compat-devel || true
true
yum install -y kf6-kirigami2-devel qt6-qt5compat-devel

View File

@@ -22,4 +22,4 @@ pacman -S --noconfirm \
"kio" \
"kparts" \
"qtwebengine"
true

View File

@@ -33,4 +33,3 @@ apt-get -y install \
qtdeclarative5-dev \
qttools5-dev \
qttools5-dev-tools
true

View File

@@ -18,4 +18,3 @@ zypper --non-interactive in "qt6-declarative-devel" "cmake(Qt6Concurrent)" "cmak
zypper --non-interactive in "cmake(KF6CoreAddons)" "cmake(KF6DBusAddons)" "cmake(KF6Crash)"
zypper --non-interactive in "cmake(KF6Parts)" # Also installs KF5 things
zypper --non-interactive in "cmake(PolkitQt6-1)"
true

View File

@@ -43,4 +43,3 @@ zypper --non-interactive in \
# Not actual dependencies, but good to have
zypper --non-interactive in python311-PyYAML python311-jsonschema
true

View File

@@ -32,31 +32,12 @@ class TransifexGetter(object):
raise TXError("Could not get Transifex API token")
import requests
base_url = "https://rest.api.transifex.com/resource_language_stats"
project_filter = "filter[project]=o:calamares:p:calamares"
resource_filter = "filter[resource]=o:calamares:p:calamares:r:calamares"
url = base_url + "?" + project_filter.replace(":", "%3A") + "&" + resource_filter.replace(":", "%3A")
headers = {
"accept": "application/vnd.api+json",
"authorization": "Bearer " + token
}
r = requests.get(url, headers=headers)
r = requests.get("https://api.transifex.com/organizations/calamares/projects/calamares/resources/calamares/", auth=("api", token))
if r.status_code != 200:
raise TXError("Could not get Transifex data from API")
j = r.json()
data = j["data"]
self.languages = dict()
for d in data:
translated_count = d["attributes"]["translated_strings"]
total_count = d["attributes"]["total_strings"]
language_key = d["relationships"]["language"]["data"]["id"]
assert language_key.startswith("l:")
language_key = language_key[2:]
self.languages[language_key] = dict(translated=dict(stringcount=translated_count, percentage=(translated_count / total_count)))
self.languages = j["stats"]
def get_tx_credentials(self):

View File

@@ -16,7 +16,7 @@
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="25"/>
<source>&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
<translation>El desarrollo de &lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; está patrocinado por&lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt; Blue Systems&lt;/a&gt; - Liberando Software.</translation>
<translation>El desarrollo de &lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; está patrocinado por&lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt; Blue Systems&lt;/a&gt; - Liberador de Software.</translation>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="40"/>

File diff suppressed because it is too large Load Diff

View File

@@ -11,18 +11,18 @@
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="20"/>
<source>Thanks to &lt;a href="https://calamares.io/team/"&gt;the Calamares team&lt;/a&gt; and the &lt;a href="https://app.transifex.com/calamares/calamares/"&gt;Calamares translators team&lt;/a&gt;.</source>
<translation>Agradecimientos al&lt;a href="https://calamares.io/team/"&gt;equipo de Calamares&lt;/a&gt; y al &lt;a href="https://app.transifex.com/calamares/calamares/"&gt;equipo de traductores de Calamares&lt;/a&gt;.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="25"/>
<source>&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
<translation>El desarrollo de&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt;está patrocinado por &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="40"/>
<source>Copyright %1-%2 %3 &amp;lt;%4&amp;gt;&lt;br/&gt;</source>
<extracomment>Copyright year-year Name &lt;email-address&gt;</extracomment>
<translation>Copyright %1-%2 %3 &amp;lt;%4&amp;gt;&lt;br/&gt;</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -214,7 +214,7 @@
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="39"/>
<source>Run command '%1' in target system.</source>
<translation>Ejecutar comando '%1' en el sistema de destino.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="39"/>
@@ -265,7 +265,7 @@
<message>
<location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="68"/>
<source>Loading ...</source>
<translation>Cargando ...</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="89"/>
@@ -275,7 +275,7 @@
<message>
<location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="266"/>
<source>Loading failed.</source>
<translation>Error al cargar</translation>
<translation type="unfinished"/>
</message>
</context>
<context>
@@ -306,7 +306,7 @@
<message>
<location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="129"/>
<source>System-requirements checking is complete.</source>
<translation>Se ha completado el chequeo de requerimientos del sistema.</translation>
<translation>Chequeo de requerimientos del sistema completado.</translation>
</message>
</context>
<context>
@@ -319,7 +319,7 @@
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="156"/>
<source>Installation Failed</source>
<translation>Falló la instalación</translation>
<translation>Instalación Fallida</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="159"/>
@@ -793,7 +793,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/locale/Config.cpp" line="410"/>
<source>The system language will be set to %1.</source>
<translation>El idioma del sistema será establecido a %1.</translation>
<translation>El lenguaje del sistema será establecido a %1.</translation>
</message>
<message>
<location filename="../src/modules/locale/Config.cpp" line="417"/>
@@ -858,22 +858,22 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/welcome/Config.cpp" line="264"/>
<source>&lt;h1&gt;Welcome to the Calamares setup program for %1&lt;/h1&gt;</source>
<translation>&lt;h1&gt;Bienvenido al programa de instalación de Calamares para %1&lt;/h1&gt;</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcome/Config.cpp" line="265"/>
<source>&lt;h1&gt;Welcome to %1 setup&lt;/h1&gt;</source>
<translation>&lt;h1&gt;Bienvenido a la configuración inicial de %1&lt;/h1&gt;</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcome/Config.cpp" line="269"/>
<source>&lt;h1&gt;Welcome to the Calamares installer for %1&lt;/h1&gt;</source>
<translation>&lt;h1&gt;Bienvenido al instalador Calamares para %1&lt;/h1&gt;</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcome/Config.cpp" line="270"/>
<source>&lt;h1&gt;Welcome to the %1 installer&lt;/h1&gt;</source>
<translation>&lt;h1&gt;Bienvenido al instalador de %1 &lt;/h1&gt;</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/users/Config.cpp" line="235"/>
@@ -933,7 +933,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/finished/Config.cpp" line="142"/>
<source>Installation Failed</source>
<translation>Falló la instalación</translation>
<translation>Instalación Fallida</translation>
</message>
<message>
<location filename="../src/modules/finished/Config.cpp" line="144"/>
@@ -1669,7 +1669,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="175"/>
<source>The system does not have enough working memory. At least %1 GiB is required.</source>
<translation>El sistema no tiene suficiente memoria funcional. Se requiere al menos %1 GiB.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="184"/>
@@ -1709,7 +1709,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="213"/>
<source>has a screen large enough to show the whole installer</source>
<translation>cuenta con una pantalla lo suficientemente grande para mostrar todo el instalador</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="217"/>
@@ -1744,7 +1744,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="244"/>
<source>is always true</source>
<translation>siempre es verdad</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="245"/>
@@ -1833,7 +1833,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="50"/>
<source>Please install KDE Konsole and try again!</source>
<translation>¡Por favor, instale KDE Konsole e intentelo de nuevo!</translation>
<translation>Favor instale la Konsola KDE e intentelo de nuevo!</translation>
</message>
<message>
<location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="122"/>
@@ -2655,7 +2655,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="55"/>
<source>Your Full Name</source>
<translation>Nombre completo</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="124"/>
@@ -2680,7 +2680,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="250"/>
<source>Computer Name</source>
<translation>Nombre de la computadora</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="325"/>
@@ -4091,7 +4091,7 @@ Salida
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="36"/>
<source>Installation Completed</source>
<translation>Instalación terminada</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq.qml" line="43"/>
@@ -4121,7 +4121,7 @@ Salida
<message>
<location filename="../src/modules/finishedq/finishedq@mobile.qml" line="36"/>
<source>Installation Completed</source>
<translation>Instalación terminada</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/finishedq/finishedq@mobile.qml" line="43"/>
@@ -4209,7 +4209,7 @@ Salida
<message>
<location filename="../src/modules/packagechooserq/packagechooserq.qml" line="59"/>
<source>LibreOffice</source>
<translation>LibreOffice</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/packagechooserq/packagechooserq.qml" line="108"/>
@@ -4229,7 +4229,7 @@ Salida
<message>
<location filename="../src/modules/packagechooserq/packagechooserq.qml" line="185"/>
<source>Minimal Install</source>
<translation>Instalación mínima</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/packagechooserq/packagechooserq.qml" line="233"/>
@@ -4285,7 +4285,7 @@ Salida
<message>
<location filename="../src/modules/usersq/usersq.qml" line="63"/>
<source>Your Full Name</source>
<translation>Nombre completo</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/usersq/usersq.qml" line="80"/>
@@ -4310,7 +4310,7 @@ Salida
<message>
<location filename="../src/modules/usersq/usersq.qml" line="138"/>
<source>root is not allowed as username.</source>
<translation>"root" no está permitido como nombre de usuario.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/usersq/usersq.qml" line="147"/>
@@ -4320,7 +4320,7 @@ Salida
<message>
<location filename="../src/modules/usersq/usersq.qml" line="153"/>
<source>Computer Name</source>
<translation>Nombre de la computadora</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/usersq/usersq.qml" line="180"/>
@@ -4409,28 +4409,27 @@ Salida
<location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
<source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
&lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
<translation>&lt;h3&gt;Bienvenido al instalador de &lt;quote&gt;%2&lt;/quote&gt;&lt;/h3&gt;
&lt;p&gt;Este programa te hará algunas preguntas y llevará a cabo la configuración de %1 en tu computadora.&lt;/p&gt;</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
<source>Support</source>
<translation>Soporte</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="77"/>
<source>Known issues</source>
<translation>Problemas conocidos</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="88"/>
<source>Release notes</source>
<translation>Notas de publicación</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="100"/>
<source>Donate</source>
<translation>Donaciones</translation>
<translation type="unfinished"/>
</message>
</context>
</TS>

View File

@@ -92,7 +92,7 @@
<message>
<location filename="../src/calamares/DebugWindow.ui" line="28"/>
<source>GlobalStorage</source>
<translation>GlobalStorage</translation>
<translation>אחסון גלובלי</translation>
</message>
<message>
<location filename="../src/calamares/DebugWindow.ui" line="38"/>
@@ -252,7 +252,7 @@
<message>
<location filename="../src/libcalamares/PythonJob.cpp" line="270"/>
<source>Main script file %1 for python job %2 is not readable.</source>
<translation>קובץ הסקריפט הראשי %1 למשימת ה־python %2 אינו קריא.</translation>
<translation>קובץ תסריט הרצה ראשי %1 עבור משימת python %2 לא קריא. </translation>
</message>
<message>
<location filename="../src/libcalamares/PythonJob.cpp" line="343"/>
@@ -501,12 +501,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/libcalamares/PythonHelper.cpp" line="325"/>
<source>unparseable Python error</source>
<translation>שגיאת Python שלא ניתנת לניתוח</translation>
<translation>שגיאת Python לא ניתנת לניתוח</translation>
</message>
<message>
<location filename="../src/libcalamares/PythonHelper.cpp" line="369"/>
<source>unparseable Python traceback</source>
<translation>מעקב לאחור של Python לא ניתן לניתוח</translation>
<translation>עקבה לאחור של Python לא ניתנת לניתוח</translation>
</message>
<message>
<location filename="../src/libcalamares/PythonHelper.cpp" line="376"/>
@@ -543,7 +543,7 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp" line="71"/>
<location filename="../src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp" line="83"/>
<source>The installer failed to update partition table on disk '%1'.</source>
<translation>אשף ההתקנה נכשל בעת עדכון טבלת המחיצות על כונן %1.</translation>
<translation>אשף ההתקנה נכשל בעת עדכון טבלת המחיצות על כונן '%1'.</translation>
</message>
</context>
<context>
@@ -597,7 +597,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1677"/>
<source>Boot loader location:</source>
<translation>מקום מנהל אתחול המערכת:</translation>
<translation>מיקום מנהל אתחול המערכת:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1119"/>
@@ -757,12 +757,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="40"/>
<source>Clearing all temporary mounts.</source>
<translation>כל נקודות העיגון הזמניות נמחקות.</translation>
<translation>מבצע מחיקה של כל נקודות העיגון הזמניות.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="70"/>
<source>Cleared all temporary mounts.</source>
<translation>כל נקודות העיגון הזמניות נמחקו.</translation>
<translation>בוצעה מחיקה של כל נקודות העיגון הזמניות.</translation>
</message>
</context>
<context>
@@ -798,12 +798,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/locale/Config.cpp" line="410"/>
<source>The system language will be set to %1.</source>
<translation>שפת המערכת תהיה %1.</translation>
<translation>שפת המערכת תוגדר להיות %1.</translation>
</message>
<message>
<location filename="../src/modules/locale/Config.cpp" line="417"/>
<source>The numbers and dates locale will be set to %1.</source>
<translation>תבנית המספרים והתאריכים של המקום יוגדרו להיות %1.</translation>
<translation>תבנית של המספרים והתאריכים של המיקום יוגדרו להיות %1.</translation>
</message>
<message>
<location filename="../src/modules/netinstall/Config.cpp" line="53"/>
@@ -1008,7 +1008,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/summary/Config.cpp" line="103"/>
<source>This is an overview of what will happen once you start the install procedure.</source>
<translation>זו סקירה של מה שיקרה לאחר התחלת תהליך ההתקנה.</translation>
<translation>להלן סקירת המאורעות שיתרחשו עם תחילת תהליך ההתקנה.</translation>
</message>
</context>
<context>
@@ -1171,7 +1171,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="69"/>
<source>What kind of partition table do you want to create?</source>
<translation>איזה סוג של טבלת מחיצות ליצור?</translation>
<translation>איזה סוג של טבלת מחיצות ברצונך ליצור?</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="76"/>
@@ -1204,7 +1204,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="86"/>
<source>The installer failed to create a partition table on %1.</source>
<translation>אשף ההתקנה נכשל ביצירת טבלת מחיצות על %1.</translation>
<translation>אשף ההתקנה נכשל בעת יצירת טבלת המחיצות על %1.</translation>
</message>
</context>
<context>
@@ -1319,27 +1319,27 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="139"/>
<source>This device has a &lt;strong&gt;%1&lt;/strong&gt; partition table.</source>
<translation>בהתקן זה קיימת טבלת מחיצות מסוג &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>על התקן זה קיימת טבלת מחיצות &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="95"/>
<source>This is a &lt;strong&gt;loop&lt;/strong&gt; device.&lt;br&gt;&lt;br&gt;It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.</source>
<translation>זהו התקן מסוג &lt;strong&gt;loop&lt;/strong&gt;.&lt;br&gt;&lt;br&gt; זהו התקן מדומה ללא טבלת מחיצות שמאפשר גישה לקובץ כהתקן אחסון. תצורה מסוג זה בדרך כלל תכיל מערכת קבצים יחידה.</translation>
<translation>זהו התקן מסוג &lt;strong&gt;loop&lt;/strong&gt;.&lt;br&gt;&lt;br&gt; זהו התקן מדמה ללא טבלת מחיצות אשר מאפשר גישה לקובץ כהתקן בלוק. תצורה מסוג זה בדרך כלל תכיל מערכת קבצים יחידה.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="104"/>
<source>This installer &lt;strong&gt;cannot detect a partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;The device either has no partition table, or the partition table is corrupted or of an unknown type.&lt;br&gt;This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</source>
<translation>אשף ההתקנה &lt;strong&gt;לא יכול לזהות את טבלת המחיצות&lt;/strong&gt; שבהתקן האחסון הנבחר.&lt;br&gt;&lt;br&gt; ההתקן הנבחר לא מכיל טבלת מחיצות, או שטבלת המחיצות הקיימת הושחתה או שסוג הטבלה אינו מוכר.&lt;br&gt; אשף התקנה זה יכול ליצור טבלת מחיצות חדשה עבורך אוטומטית או בדף הגדרת מחיצות באופן ידני.</translation>
<translation>אשף ההתקנה &lt;strong&gt;אינו יכול לזהות את טבלת המחיצות&lt;/strong&gt; על התקן האחסון הנבחר.&lt;br&gt;&lt;br&gt; ההתקן הנבחר לא מכיל טבלת מחיצות, או שטבלת המחיצות הקיימת הושחתה או שסוג הטבלה אינו מוכר.&lt;br&gt; אשף התקנה זה יכול ליצור טבלת מחיצות חדשה עבורך אוטומטית או בדף הגדרת מחיצות באופן ידני.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="89"/>
<source>&lt;br&gt;&lt;br&gt;This is the recommended partition table type for modern systems which start from an &lt;strong&gt;EFI&lt;/strong&gt; boot environment.</source>
<translation>&lt;br&gt;&lt;br&gt; זהו סוג טבלת מחיצות מועדף במערכות מודרניות, אשר נטענות ממחיצת טעינת מערכת &lt;strong&gt;EFI&lt;/strong&gt;.</translation>
<translation>&lt;br&gt;&lt;br&gt; זהו סוג טבלת מחיצות מועדף במערכות מודרניות, אשר מאותחלות ממחיצת טעינת מערכת &lt;strong&gt;EFI&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="78"/>
<source>&lt;br&gt;&lt;br&gt;This partition table type is only advisable on older systems which start from a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment. GPT is recommended in most other cases.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Warning:&lt;/strong&gt; the MBR partition table is an obsolete MS-DOS era standard.&lt;br&gt;Only 4 &lt;em&gt;primary&lt;/em&gt; partitions may be created, and of those 4, one can be an &lt;em&gt;extended&lt;/em&gt; partition, which may in turn contain many &lt;em&gt;logical&lt;/em&gt; partitions.</source>
<translation>&lt;br&gt;&lt;br&gt;סוג זה של טבלת מחיצות מומלץ לשימוש במערכות ישנות שנטענות מסביבת טעינה מסוג &lt;strong&gt;BIOS&lt;/strong&gt;. ברוב המקרים האחרים, מומלץ להשתמש ב־GPT.&lt;br&gt;&lt;br&gt;&lt;strong&gt;אזהרה:&lt;/strong&gt; תקן טבלת המחיצות MBR הוא עוד מתקופת ה־MS-DOS.&lt;br&gt; ניתן ליצור אך ורק 4 מחיצות &lt;em&gt;ראשיות&lt;/em&gt;, מתוכן, אחת יכולה להיות מוגדרת כמחיצה &lt;em&gt;מורחבת&lt;/em&gt;, ויכולה להכיל מחיצות &lt;em&gt;לוגיות&lt;/em&gt;. </translation>
<translation>&lt;br&gt;&lt;br&gt;סוג זה של טבלת מחיצות מומלץ לשימוש על מערכות ישנות אשר מאותחלות מסביבת טעינה &lt;strong&gt;BIOS&lt;/strong&gt;. ברוב המקרים האחרים, GPT מומלץ לשימוש.&lt;br&gt;&lt;br&gt;&lt;strong&gt;אזהרה:&lt;/strong&gt; תקן טבלת המחיצות של MBR מיושן מתקופת MS-DOS.&lt;br&gt; ניתן ליצור אך ורק 4 מחיצות &lt;em&gt;ראשיות&lt;/em&gt;, מתוכן, אחת יכולה להיות מוגדרת כמחיצה &lt;em&gt;מורחבת&lt;/em&gt;, אשר יכולה להכיל מחיצות &lt;em&gt;לוגיות&lt;/em&gt;. </translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="147"/>
@@ -1563,7 +1563,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="299"/>
<source>Setting up mount points.</source>
<translation>נקודות העיגון מוגדרות.</translation>
<translation>כעת בהגדרת נקודות העיגון.</translation>
</message>
</context>
<context>
@@ -1571,7 +1571,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="102"/>
<source>&amp;Restart now</source>
<translation>לה&amp;פעיל מחדש כעת</translation>
<translation>ה&amp;פעלה מחדש כעת</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="75"/>
@@ -1586,7 +1586,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="87"/>
<source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been installed on your computer.&lt;br/&gt;You may now restart into your new system, or continue using the %2 Live environment.</source>
<translation>&lt;h1&gt;תהליך ההתקנה הסתיים.&lt;/h1&gt;&lt;br/&gt;המערכת %1 הותקנה על המחשב שלך.&lt;br/&gt; כעת ניתן לאתחל את המחשב אל תוך המערכת החדשה שהותקנה, או להמשיך להשתמש בסביבה הניסיונית של %2. </translation>
<translation>&lt;h1&gt;תהליך ההתקנה הסתיים.&lt;/h1&gt;&lt;br/&gt;%1 הותקן על המחשב שלך.&lt;br/&gt; כעת ניתן לאתחל את המחשב אל תוך המערכת החדשה שהותקנה, או להמשיך להשתמש בסביבה הנוכחית של %2. </translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="92"/>
@@ -1641,7 +1641,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="63"/>
<source>Formatting partition %1 with file system %2.</source>
<translation>המחיצה %1 עוברת פרמוט למערכת הקבצים %2 כעת.</translation>
<translation>כעת בפרמוט המחיצה %1 עם מערכת הקבצים %2.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="73"/>
@@ -1875,12 +1875,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="23"/>
<source>System locale setting</source>
<translation>הגדרות מקום המערכת</translation>
<translation>הגדרות מיקום המערכת</translation>
</message>
<message>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="30"/>
<source>The system locale setting affects the language and character set for some command line user interface elements.&lt;br/&gt;The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation>הגדרת מקום המערכת משפיעה על השפה וקידוד התווים של חלק מרכיבי ממשקי שורת פקודה למשתמש. &lt;br/&gt; ההגדרה הנוכחית היא &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>הגדרת מיקום המערכת משפיעה על השפה וקידוד התווים של חלק מרכיבי ממשקי שורת פקודה למשתמש. &lt;br/&gt; ההגדרה הנוכחית היא &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="54"/>
@@ -1973,13 +1973,13 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/license/LicenseWidget.cpp" line="109"/>
<source>&lt;strong&gt;%1 driver&lt;/strong&gt;&lt;br/&gt;by %2</source>
<extracomment>%1 is an untranslatable product name, example: Creative Audigy driver</extracomment>
<translation>&lt;strong&gt;מנהל התקן %1&lt;/strong&gt;&lt;br/&gt; מאת %2</translation>
<translation>&lt;strong&gt;התקן %1&lt;/strong&gt;&lt;br/&gt; מאת %2</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="116"/>
<source>&lt;strong&gt;%1 graphics driver&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
<extracomment>%1 is usually a vendor name, example: Nvidia graphics driver</extracomment>
<translation>&lt;strong&gt;מנהל התקן תצוגה %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt; מאת %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;התקן תצוגה %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt; מאת %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="122"/>
@@ -1989,12 +1989,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="128"/>
<source>&lt;strong&gt;%1 codec&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
<translation>&lt;strong&gt;מפענח %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt; מאת %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;קידוד %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt; מאת %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="134"/>
<source>&lt;strong&gt;%1 package&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
<translation>&lt;strong&gt;חבילת %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt; מאת %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;חבילה %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt; מאת %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="140"/>
@@ -2032,7 +2032,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/locale/LocalePage.cpp" line="131"/>
<source>Zone:</source>
<translation>אזור:</translation>
<translation>מיקום:</translation>
</message>
<message>
<location filename="../src/modules/locale/LocalePage.cpp" line="132"/>
@@ -2046,7 +2046,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/localeq/LocaleQmlViewStep.cpp" line="32"/>
<source>Location</source>
<translation>מקום</translation>
<translation>מיקום</translation>
</message>
</context>
<context>
@@ -2062,7 +2062,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/locale/LocaleViewStep.cpp" line="71"/>
<source>Location</source>
<translation>מקום</translation>
<translation>מיקום</translation>
</message>
</context>
<context>
@@ -2125,7 +2125,7 @@ The installer will quit and all changes will be lost.</source>
<source>Please select your preferred location on the map so the installer can suggest the locale
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
<translation>נא לבחור את המקום המועדף עליך במפה כדי שאשף ההתקנה יוכל להציע הגדרות מקומיות
<translation>נא לבחור את המיקום המועדף עליך במפה כדי שאשף ההתקנה יוכל להציע הגדרות מקומיות
ואזור זמן עבורך. ניתן להתאים את ההגדרות המוצעות למטה. ניתן לחפש במפה על ידי משיכה להזזתה ובכפתורים +/- כדי להתקרב/להתרחק
או להשתמש בגלילת העכבר לטובת שליטה בתקריב.</translation>
</message>
@@ -2306,7 +2306,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/localeq/Offline.qml" line="240"/>
<source>You can fine-tune Language and Locale settings below.</source>
<translation>ניתן לכוון את הגדרות השפה והמקום להלן.</translation>
<translation>ניתן לכוון את הגדרות השפה והמיקום להלן.</translation>
</message>
</context>
<context>
@@ -2734,7 +2734,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="465"/>
<source>Log in automatically without asking for the password.</source>
<translation>להיכנס אוטומטית מבלי להידרש למלא סיסמה.</translation>
<translation>כניסה אוטומטית מבלי להישאל על הסיסמה.</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="472"/>
@@ -3117,7 +3117,7 @@ Output:
<message>
<location filename="../src/libcalamares/utils/System.cpp" line="320"/>
<source>Bad parameters for process job call.</source>
<translation>משתנים שגויים בקריאה למשימת תהליך.</translation>
<translation>פרמטרים לא תקינים עבור קריאת עיבוד פעולה.</translation>
</message>
<message>
<location filename="../src/libcalamares/utils/System.cpp" line="324"/>
@@ -3427,7 +3427,7 @@ Output:
<message>
<location filename="../src/modules/users/SetHostNameJob.cpp" line="48"/>
<source>Setting hostname %1.</source>
<translation>שם המארח %1 מוגדר כעת.</translation>
<translation>כעת בהגדרת שם המארח %1.</translation>
</message>
<message>
<location filename="../src/modules/users/SetHostNameJob.cpp" line="121"/>
@@ -3447,29 +3447,29 @@ Output:
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="66"/>
<source>Set keyboard model to %1, layout to %2-%3</source>
<translation>הגדר דגם מקלדת ל־%1, פריסת לוח מקשים ל־%2-%3</translation>
<translation>הגדר דגם מקלדת ל %1, פריסת לוח מקשים ל %2-%3</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="366"/>
<source>Failed to write keyboard configuration for the virtual console.</source>
<translation>כתיבת הגדרות המקלדת למסוף הווירטואלי נכשלה.</translation>
<translation>נכשלה כתיבת הגדרת מקלדת למסוף הוירטואלי.</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="367"/>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="393"/>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="410"/>
<source>Failed to write to %1</source>
<translation>הכתיבה אל %1 נכשלה</translation>
<translation>נכשלה כתיבה ל %1</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="392"/>
<source>Failed to write keyboard configuration for X11.</source>
<translation>כתיבת הגדרת מקלדת עבור X11 נכשלה.</translation>
<translation>נכשלה כתיבת הגדרת מקלדת עבור X11.</translation>
</message>
<message>
<location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="409"/>
<source>Failed to write keyboard configuration to existing /etc/default directory.</source>
<translation>כתיבת הגדרת מקלדת לתיקיה קיימת /etc/default נכשלה.</translation>
<translation>נכשלה כתיבת הגדרת מקלדת לתיקיה קיימת /etc/default.</translation>
</message>
</context>
<context>
@@ -3477,7 +3477,7 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="44"/>
<source>Set flags on partition %1.</source>
<translation>הגדרת סימונים על המחיצה %1.</translation>
<translation>הגדר סימונים על מחיצה %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="50"/>
@@ -3502,12 +3502,12 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/>
<source>Clear flags on new partition.</source>
<translation>מחיקת סימונים מהמחיצה החדשה.</translation>
<translation>מחק סימונים על המחיצה החדשה.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="80"/>
<source>Flag partition &lt;strong&gt;%1&lt;/strong&gt; as &lt;strong&gt;%2&lt;/strong&gt;.</source>
<translation>סימון המחיצה &lt;strong&gt;%1&lt;/strong&gt; בתור &lt;strong&gt;%2&lt;/strong&gt;.</translation>
<translation>סמן מחיצה &lt;strong&gt;%1&lt;/strong&gt; כ &lt;strong&gt;%2&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="89"/>
@@ -3522,7 +3522,7 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="107"/>
<source>Clearing flags on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation>הסימונים נמחקים מהמחיצה &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>מוחק סימונים על מחיצה &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="113"/>
@@ -3532,12 +3532,12 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="118"/>
<source>Clearing flags on new partition.</source>
<translation>סימונים נמחקים מהמחיצה החדשה.</translation>
<translation>מוחק סימונים על מחיצה חדשה.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="123"/>
<source>Setting flags &lt;strong&gt;%2&lt;/strong&gt; on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation>הסימונים &lt;strong&gt;%2&lt;/strong&gt; מוגדרים על המחיצה &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>מגדיר סימונים &lt;strong&gt;%2&lt;/strong&gt; על מחיצה &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="132"/>
@@ -3547,7 +3547,7 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="139"/>
<source>Setting flags &lt;strong&gt;%1&lt;/strong&gt; on new partition.</source>
<translation>הסימונים &lt;strong&gt;%1&lt;/strong&gt; מוגדרים על מחיצה חדשה.</translation>
<translation>מגדיר סימונים &lt;strong&gt;%1&lt;/strong&gt; על מחיצה חדשה.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="152"/>
@@ -3560,17 +3560,17 @@ Output:
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="38"/>
<source>Set password for user %1</source>
<translation>הגדרת סיסמת המשתמש %1</translation>
<translation>הגדר סיסמה עבור משתמש %1</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="44"/>
<source>Setting password for user %1.</source>
<translation>הסיסמה למשתמש %1 מוגדרת כעת.</translation>
<translation>כעת בהגדרת הסיסמה למשתמש %1.</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="77"/>
<source>Bad destination system path.</source>
<translation>נתיב מערכת היעד שגוי.</translation>
<translation>יעד נתיב המערכת לא תקין.</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="78"/>
@@ -3580,12 +3580,12 @@ Output:
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="84"/>
<source>Cannot disable root account.</source>
<translation>לא ניתן להשבית את חשבון המנהל root.</translation>
<translation>לא ניתן לנטרל את חשבון המנהל root.</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="93"/>
<source>Cannot set password for user %1.</source>
<translation>לא ניתן להגדיר למשתמש %1 סיסמה.</translation>
<translation>לא ניתן להגדיר סיסמה עבור משתמש %1.</translation>
</message>
<message>
<location filename="../src/modules/users/SetPasswordJob.cpp" line="85"/>
@@ -3599,7 +3599,7 @@ Output:
<message>
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="32"/>
<source>Set timezone to %1/%2</source>
<translation>הגדרת אזור הזמן שיהיה %1/%2</translation>
<translation>הגדרת אזור זמן ל %1/%2</translation>
</message>
<message>
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="59"/>
@@ -3619,7 +3619,7 @@ Output:
<message>
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="69"/>
<source>Link creation failed, target: %1; link name: %2</source>
<translation>יצירת קיצור דרך נכשלה, מקום: %1; שם קיצור הדרך: %2</translation>
<translation>נכשלה יצירת קיצור דרך, מיקום: %1; שם קיצור הדרך: %2</translation>
</message>
<message>
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="74"/>
@@ -3629,7 +3629,7 @@ Output:
<message>
<location filename="../src/modules/locale/SetTimezoneJob.cpp" line="75"/>
<source>Cannot open /etc/timezone for writing</source>
<translation>לא ניתן לפתוח את /etc/timezone לכתיבה</translation>
<translation>לא ניתן לפתוח את /etc/timezone לכתיבה</translation>
</message>
</context>
<context>
@@ -3661,12 +3661,12 @@ Output:
<message>
<location filename="../src/modules/users/MiscJobs.cpp" line="70"/>
<source>Cannot chmod sudoers file.</source>
<translation>לא ניתן לשנות את מאפייני קובץ מנהלי המערכת (sudoers).</translation>
<translation>לא ניתן לשנות את מאפייני קובץ מנהלי המערכת.</translation>
</message>
<message>
<location filename="../src/modules/users/MiscJobs.cpp" line="75"/>
<source>Cannot create sudoers file for writing.</source>
<translation>לא ניתן ליצור את קובץ מנהלי המערכת (sudoers) לכתיבה.</translation>
<translation>לא ניתן ליצור את קובץ מנהלי המערכת לכתיבה.</translation>
</message>
</context>
<context>
@@ -3719,12 +3719,12 @@ Output:
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="100"/>
<source>Installation feedback</source>
<translation>משוב על ההתקנה</translation>
<translation>משוב בנושא ההתקנה</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="106"/>
<source>Sending installation feedback.</source>
<translation>שליחת משוב על ההתקנה.</translation>
<translation>שולח משוב בנושא ההתקנה.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="124"/>
@@ -3734,7 +3734,7 @@ Output:
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="125"/>
<source>HTTP request timed out.</source>
<translation>בקשת HTTP חרגה מזמן ההמתנה המרבי.</translation>
<translation>בקשת HTTP חרגה מזמן ההמתנה המקסימאלי.</translation>
</message>
</context>
<context>
@@ -3771,28 +3771,28 @@ Output:
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="135"/>
<source>Machine feedback</source>
<translation>משוב על עמדת המחשב</translation>
<translation>משוב בנושא עמדת המחשב</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="141"/>
<source>Configuring machine feedback.</source>
<translation>הגדרת משוב על עמדת המחשב.</translation>
<translation>מגדיר משוב בנושא עמדת המחשב.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="164"/>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="173"/>
<source>Error in machine feedback configuration.</source>
<translation>שגיאה בהגדרת המשוב על עמדת המחשב.</translation>
<translation>שגיאה בעת הגדרת המשוב בנושא עמדת המחשב.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="166"/>
<source>Could not configure machine feedback correctly, script error %1.</source>
<translation>לא ניתן להגדיר את המשוב על עמדת המחשב כראוי, שגיאת הרצה %1.</translation>
<translation>לא ניתן להגדיר את המשוב בנושא עמדת המחשב באופן תקין. שגיאת הרצה %1.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="175"/>
<source>Could not configure machine feedback correctly, Calamares error %1.</source>
<translation>לא ניתן להגדיר את המשוב על עמדת המחשב כראוי. שגיאת Calamares %1.</translation>
<translation>לא ניתן להגדיר את המשוב בנושא עמדת המחשב באופן תקין. שגיאת Calamares %1.</translation>
</message>
</context>
<context>

View File

@@ -11,12 +11,12 @@
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="20"/>
<source>Thanks to &lt;a href="https://calamares.io/team/"&gt;the Calamares team&lt;/a&gt; and the &lt;a href="https://app.transifex.com/calamares/calamares/"&gt;Calamares translators team&lt;/a&gt;.</source>
<translation>Hvala &lt;a href="https://calamares.io/team/"&gt;Calamares timu&lt;/a&gt; i &lt;a href="https://app.transifex.com/calamares/calamares/"&gt;Calamares timu za prevođenje&lt;/a&gt;.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="25"/>
<source>&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
<translation>Razvoj &lt;a href="https://calamares.io/"&gt;Calamaresa&lt;/a&gt;sponzorira &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt;- Liberating Software.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="40"/>
@@ -2647,7 +2647,7 @@ te korištenjem tipki +/- ili skrolanjem miša za zumiranje.</translation>
<message>
<location filename="../src/modules/keyboard/KeyboardPage.ui" line="153"/>
<source>Keyboard Switch:</source>
<translation>Prekidač tipkovnice:</translation>
<translation type="unfinished"/>
</message>
</context>
<context>

File diff suppressed because it is too large Load Diff

View File

@@ -11,12 +11,12 @@
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="20"/>
<source>Thanks to &lt;a href="https://calamares.io/team/"&gt;the Calamares team&lt;/a&gt; and the &lt;a href="https://app.transifex.com/calamares/calamares/"&gt;Calamares translators team&lt;/a&gt;.</source>
<translation>Teşekkürler &lt;a href="https://calamares.io/team/"&gt;Calamares takımı&lt;/a&gt; ve &lt;a href="https://app.transifex.com/calamares/calamares/"&gt;Calamares çevirmenleri&lt;/a&gt;.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="25"/>
<source>&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
<translation>&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; gelişim sponsoru &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Özgür Yazılım.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libcalamares/CalamaresAbout.cpp" line="40"/>
@@ -2637,7 +2637,7 @@ Kurulum sürdürülebilir; ancak bazı özellikler devre dışı bırakılabilir
<message>
<location filename="../src/modules/keyboard/KeyboardPage.ui" line="153"/>
<source>Keyboard Switch:</source>
<translation>Klavye değiştir:</translation>
<translation type="unfinished"/>
</message>
</context>
<context>

View File

@@ -1,429 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Alejo Fernandez <alejoo.fernandez.2003@gmail.com>, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-28 22:49+0200\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Alejo Fernandez <alejoo.fernandez.2003@gmail.com>, 2023\n"
"Language-Team: Spanish (Argentina) (https://app.transifex.com/calamares/teams/20061/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es_AR\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: src/modules/bootloader/main.py:46
msgid "Install bootloader."
msgstr "Instalar el cargador de arranque."
#: src/modules/bootloader/main.py:644
msgid "Failed to install grub, no partitions defined in global storage"
msgstr ""
"Error al instalar GRUB; no hay particiones definidas en el almacenamiento "
"global"
#: src/modules/bootloader/main.py:899
msgid "Bootloader installation error"
msgstr "Error al instalar el cargador de arranque"
#: src/modules/bootloader/main.py:900
msgid ""
"The bootloader could not be installed. The installation command "
"<pre>{!s}</pre> returned error code {!s}."
msgstr ""
"El cargador de arranque no se pudo instalar. la orden de instalación "
"<pre>{!s}</pre> lamentablemente devolvió el código de error {!s}."
#: src/modules/displaymanager/main.py:509
msgid "Cannot write LXDM configuration file"
msgstr "No se puede escribir el archivo de configuración LXDM"
#: src/modules/displaymanager/main.py:510
msgid "LXDM config file {!s} does not exist"
msgstr "El archivo de configuracion {!s} de LXDM no existe"
#: src/modules/displaymanager/main.py:598
msgid "Cannot write LightDM configuration file"
msgstr "No se puede escribir el archivo de configuración de LightDM"
#: src/modules/displaymanager/main.py:599
msgid "LightDM config file {!s} does not exist"
msgstr "El archivo de configuración {!s} de LightDM no existe"
#: src/modules/displaymanager/main.py:684
msgid "Cannot configure LightDM"
msgstr "No se puede configurar LightDM"
#: src/modules/displaymanager/main.py:685
msgid "No LightDM greeter installed."
msgstr "No hay ningún GREATER de LightDM instalado."
#: src/modules/displaymanager/main.py:716
msgid "Cannot write SLIM configuration file"
msgstr "No se puede escribir el archivo de configuración de SLIM"
#: src/modules/displaymanager/main.py:717
msgid "SLIM config file {!s} does not exist"
msgstr "El archivo de configuración {!s} de SLIM no existe"
#: src/modules/displaymanager/main.py:935
msgid "No display managers selected for the displaymanager module."
msgstr ""
"No se ha elegido ningún gestor de pantalla para el módulo "
"\"displaymanager»\""
#: src/modules/displaymanager/main.py:936
msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
"La lista de gestores de pantalla está vacía o sin definir tanto en "
"\"globalstorage\" como en \"displaymanager.conf\"."
#: src/modules/displaymanager/main.py:1023
msgid "Display manager configuration was incomplete"
msgstr "La configuración de DISPLAY MANAGER estaba incompleta"
#: src/modules/dracut/main.py:29
msgid "Creating initramfs with dracut."
msgstr "Creando \"initrams\" con \"dracut\"."
#: src/modules/dracut/main.py:63
msgid "Failed to run dracut"
msgstr "Falló al ejecutar dracut"
#: src/modules/dracut/main.py:64
#, python-brace-format
msgid "Dracut failed to run on the target with return code: {return_code}"
msgstr ""
"Dracut falló ejecutarse en el objetivo, lamentablemente con el código de "
"retorno: {return_code}"
#: src/modules/dummypython/main.py:35
msgid "Dummy python job."
msgstr "Trabajo python ficticio."
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
#: src/modules/dummypython/main.py:94
msgid "Dummy python step {}"
msgstr "Paso ficticio de python {}"
#: src/modules/fstab/main.py:28
msgid "Writing fstab."
msgstr "Escribiendo \"fstab\"."
#: src/modules/fstab/main.py:377 src/modules/fstab/main.py:383
#: src/modules/fstab/main.py:411 src/modules/initcpiocfg/main.py:256
#: src/modules/initcpiocfg/main.py:260 src/modules/initramfscfg/main.py:85
#: src/modules/initramfscfg/main.py:89 src/modules/localecfg/main.py:140
#: src/modules/mount/main.py:329 src/modules/networkcfg/main.py:105
#: src/modules/openrcdmcryptcfg/main.py:72
#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/rawfs/main.py:164
msgid "Configuration Error"
msgstr "Error en la configuración"
#: src/modules/fstab/main.py:378 src/modules/initramfscfg/main.py:86
#: src/modules/mount/main.py:330 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/rawfs/main.py:165
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr "No hay ninguna partición en <pre>{!s}</pre> que se pueda usar."
#: src/modules/fstab/main.py:384 src/modules/initramfscfg/main.py:90
#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106
#: src/modules/openrcdmcryptcfg/main.py:77
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr "No hay ningún punto de montaje en <pre>{!s}</pre> que se pueda usar."
#: src/modules/fstab/main.py:412
msgid "No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use."
msgstr ""
"No se proporciona ninguna configuración de <pre>{!s}</pre> que "
"<pre>{!s}</pre> pueda usar."
#: src/modules/grubcfg/main.py:29
msgid "Configure GRUB."
msgstr "Configurar GRUB."
#: src/modules/hwclock/main.py:26
msgid "Setting hardware clock."
msgstr "Ajustar el reloj del HARDWARE."
#: src/modules/initcpiocfg/main.py:27
msgid "Configuring mkinitcpio."
msgstr "Configurando \"mkinitcpio\"."
#: src/modules/initcpiocfg/main.py:257
msgid "No partitions are defined for <pre>initcpiocfg</pre>."
msgstr "No se definen particiones para <pre>initcpiocfg</pre>."
#: src/modules/initcpiocfg/main.py:261
msgid "No root mount point for <pre>initcpiocfg</pre>."
msgstr "No hay punto de montaje raíz para <pre>initcpiocfg</pre>."
#: src/modules/initramfscfg/main.py:32
msgid "Configuring initramfs."
msgstr "Configurando initramfs."
#: src/modules/localecfg/main.py:31
msgid "Configuring locales."
msgstr "Configurando locales."
#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr "Creando initramfs con mkinitfs."
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr "Hubo un error al ejecutar \"mkinitfs\" en el destino"
#: src/modules/mkinitfs/main.py:50
msgid "The exit code was {}"
msgstr "Lamentablemente el código de salida fue {}"
#: src/modules/mount/main.py:43
msgid "Mounting partitions."
msgstr "Montando particiones."
#: src/modules/mount/main.py:164 src/modules/mount/main.py:200
msgid "Internal error mounting zfs datasets"
msgstr "No se pudieron montar los DATASETS de zfs por un error interno"
#: src/modules/mount/main.py:176
msgid "Failed to import zpool"
msgstr "No se pudo importar el \"zpool\""
#: src/modules/mount/main.py:192
msgid "Failed to unlock zpool"
msgstr "Falló al desbloquear el «zpool»"
#: src/modules/mount/main.py:209 src/modules/mount/main.py:214
msgid "Failed to set zfs mountpoint"
msgstr "Falló al establecer el punto de montaje zfs"
#: src/modules/mount/main.py:365
msgid "zfs mounting error"
msgstr "Error de montaje zfs"
#: src/modules/networkcfg/main.py:29
msgid "Saving network configuration."
msgstr "Guardando configuración de red."
#: src/modules/openrcdmcryptcfg/main.py:26
msgid "Configuring OpenRC dmcrypt service."
msgstr "Configurando el servicio de arranque cifrado \"dmcrypt\" para OpenRC "
#: src/modules/packages/main.py:54 src/modules/packages/main.py:65
#: src/modules/packages/main.py:75
msgid "Install packages."
msgstr "Instalar paquetes."
#: src/modules/packages/main.py:63
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr "Procesando paquetes (%(count)d/%(total)d)"
#: src/modules/packages/main.py:68
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] "Instalando un paquete."
msgstr[1] "Instalando%(num)d paquetes."
msgstr[2] "Instalando%(num)d paquetes."
#: src/modules/packages/main.py:71
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] "Removiendo un paquete."
msgstr[1] "Removiendo %(num)d paquetes."
msgstr[2] "Removiendo %(num)dpaquetes."
#: src/modules/packages/main.py:740 src/modules/packages/main.py:752
#: src/modules/packages/main.py:780
msgid "Package Manager error"
msgstr "Erroe del gestor de paquetes"
#: src/modules/packages/main.py:741
msgid ""
"The package manager could not prepare updates. The command <pre>{!s}</pre> "
"returned error code {!s}."
msgstr ""
"El gestor de paquetes no pudo preparar las actualizaciones. La orden "
"<pre>{!s}</pre> lamentablemente devolvió el código de error {!s}."
#: src/modules/packages/main.py:753
msgid ""
"The package manager could not update the system. The command <pre>{!s}</pre>"
" returned error code {!s}."
msgstr ""
"El gestor de paquetes no pudo actualizar el sistema. La orden "
"<pre>{!s}</pre> lamentablemente devolvió el código de error {!s}."
#: src/modules/packages/main.py:781
msgid ""
"The package manager could not make changes to the installed system. The "
"command <pre>{!s}</pre> returned error code {!s}."
msgstr ""
"El gestor de paquetes no pudo realizar cambios en el sistema a instalar: La "
"orden <pre>{!s}</pre> lamentablemente devolvió el código de error {!s}."
#: src/modules/plymouthcfg/main.py:27
msgid "Configure Plymouth theme"
msgstr "Configurar tema de Plymouth"
#: src/modules/rawfs/main.py:26
msgid "Installing data."
msgstr "Instalando los datos."
#: src/modules/services-openrc/main.py:29
msgid "Configure OpenRC services"
msgstr "Configurar servicios de OpenRC"
#: src/modules/services-openrc/main.py:57
msgid "Cannot add service {name!s} to run-level {level!s}."
msgstr "No se puede añadir el servicio {name!s} a \"run-level\" {level!s}."
#: src/modules/services-openrc/main.py:59
msgid "Cannot remove service {name!s} from run-level {level!s}."
msgstr "No se puede borrar el servicio {name!s} del run-level {level!s}."
#: src/modules/services-openrc/main.py:61
msgid ""
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
"level {level!s}."
msgstr ""
"Acción del \"service-action\" desconocida <code>{arg!s}</code> para el "
"servicio {name!s} en el run-level {level!s}."
#: src/modules/services-openrc/main.py:93
msgid "Cannot modify service"
msgstr "No se puede modificar el servicio."
#: src/modules/services-openrc/main.py:94
msgid ""
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
"<code>rc-update {arg!s}</code> en la raíz cambiada \"chroot\" "
"lamentablemente ha devuelto el código de error {num!s}."
#: src/modules/services-openrc/main.py:101
msgid "Target runlevel does not exist"
msgstr "El RUNLEVEL objetivo no existe"
#: src/modules/services-openrc/main.py:102
msgid ""
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr "La ruta para el RUNLEVEL {level!s} es {path!s}, que no existe."
#: src/modules/services-openrc/main.py:110
msgid "Target service does not exist"
msgstr "El servicio de destino no existe"
#: src/modules/services-openrc/main.py:111
msgid ""
"The path for service {name!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
"La ruta para el servicio {name!s} es <code>{path!s}</code>, que no existe."
#: src/modules/services-systemd/main.py:26
msgid "Configure systemd units"
msgstr "Configurar unidades systemd"
#: src/modules/services-systemd/main.py:64
msgid "Cannot modify unit"
msgstr "No se puede modificar la unidad"
#: src/modules/services-systemd/main.py:65
msgid ""
"<code>systemctl {_action!s}</code> call in chroot returned error code "
"{_exit_code!s}."
msgstr ""
"<code>systemctl {_action!s}</code> la llamada en chroot lamentablemente "
"devolvió el código de error {_exit_code!s}."
#: src/modules/services-systemd/main.py:66
msgid "Cannot {_action!s} systemd unit <code>{_name!s}</code>."
msgstr "No se puede {_action!s} unidad systemd<code> {_name!s}</code>."
#: src/modules/unpackfs/main.py:34
msgid "Filling up filesystems."
msgstr "Llenando sistema de archivos."
#: src/modules/unpackfs/main.py:254
msgid "rsync failed with error code {}."
msgstr "Lamentablemente \"rsync\" falló con el código de error {}."
#: src/modules/unpackfs/main.py:299
msgid "Unpacking image {}/{}, file {}/{}"
msgstr "Desempaquetando imagen {}/{}, archivo {}/{}"
#: src/modules/unpackfs/main.py:314
msgid "Starting to unpack {}"
msgstr "Empezando a desempaquetar {}"
#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467
msgid "Failed to unpack image \"{}\""
msgstr "Falló en desempaquetar la imagen \"{}\""
#: src/modules/unpackfs/main.py:430
msgid "No mount point for root partition"
msgstr "No existe punto de montaje para la partición ROOT"
#: src/modules/unpackfs/main.py:431
msgid "globalstorage does not contain a \"rootMountPoint\" key."
msgstr "Parece que \"globalstorage\" no contiene una clave \"rootMountPoint\"."
#: src/modules/unpackfs/main.py:434
msgid "Bad mount point for root partition"
msgstr "El punto de montaje de la partición ROOT no es correcto"
#: src/modules/unpackfs/main.py:435
msgid "rootMountPoint is \"{}\", which does not exist."
msgstr "\"rootMountPoint\" es «{}», que no existe."
#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455
#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465
#: src/modules/unpackfs/main.py:480
msgid "Bad unpackfs configuration"
msgstr "La configuración de \"unpackfs\" no es correcta"
#: src/modules/unpackfs/main.py:440
msgid "There is no configuration information."
msgstr "No hay información de configuración."
#: src/modules/unpackfs/main.py:456
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr ""
"El sistema de archivos para \"{}\" ({}) no es compatible con su kernel "
"actual"
#: src/modules/unpackfs/main.py:460
msgid "The source filesystem \"{}\" does not exist"
msgstr "El sistema de archivos fuente \"{}\" no existe"
#: src/modules/unpackfs/main.py:466
msgid ""
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
"installed."
msgstr ""
"Falló al encontrar unsquashfs, asegúrese de tener instalado el paquete "
"\"squashfs-tools\"."
#: src/modules/unpackfs/main.py:481
msgid "The destination \"{}\" in the target system is not a directory"
msgstr "El destino «{}» en el sistema elegido no es una carpeta"
#: src/modules/zfshostid/main.py:27
msgid "Copying zfs generated hostid."
msgstr "Copiando hostid generado por zfs."

View File

@@ -7,7 +7,7 @@
# Pierfrancesco Passerini <p.passerini@gmail.com>, 2019
# Pietro F. Fontana, 2020
# Saverio <saverio.brancaccio@gmail.com>, 2020
# Giuseppe Pignataro (Fastbyte01) <rogepix@gmail.com>, 2021
# Giuseppe Pignataro <rogepix@gmail.com>, 2021
# Vincenzo Reale <vinx.reale@gmail.com>, 2022
# vincenzo sammarco, 2022
# Paolo Zamponi <feus73@gmail.com>, 2023

View File

@@ -5,7 +5,7 @@
#
# Translators:
# Ji-Hyeon Gim <potatogim@potatogim.net>, 2018
# Junghee Lee <daemul72@gmail.com>, 2023
# JungHee Lee <daemul72@gmail.com>, 2023
#
#, fuzzy
msgid ""
@@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-28 22:49+0200\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Junghee Lee <daemul72@gmail.com>, 2023\n"
"Last-Translator: JungHee Lee <daemul72@gmail.com>, 2023\n"
"Language-Team: Korean (https://app.transifex.com/calamares/teams/20061/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"

View File

@@ -1,396 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-28 22:49+0200\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Language-Team: Romanian (Romania) (https://app.transifex.com/calamares/teams/20061/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: src/modules/bootloader/main.py:46
msgid "Install bootloader."
msgstr ""
#: src/modules/bootloader/main.py:644
msgid "Failed to install grub, no partitions defined in global storage"
msgstr ""
#: src/modules/bootloader/main.py:899
msgid "Bootloader installation error"
msgstr ""
#: src/modules/bootloader/main.py:900
msgid ""
"The bootloader could not be installed. The installation command "
"<pre>{!s}</pre> returned error code {!s}."
msgstr ""
#: src/modules/displaymanager/main.py:509
msgid "Cannot write LXDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:510
msgid "LXDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:598
msgid "Cannot write LightDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:599
msgid "LightDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:684
msgid "Cannot configure LightDM"
msgstr ""
#: src/modules/displaymanager/main.py:685
msgid "No LightDM greeter installed."
msgstr ""
#: src/modules/displaymanager/main.py:716
msgid "Cannot write SLIM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:717
msgid "SLIM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:935
msgid "No display managers selected for the displaymanager module."
msgstr ""
#: src/modules/displaymanager/main.py:936
msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
#: src/modules/displaymanager/main.py:1023
msgid "Display manager configuration was incomplete"
msgstr ""
#: src/modules/dracut/main.py:29
msgid "Creating initramfs with dracut."
msgstr ""
#: src/modules/dracut/main.py:63
msgid "Failed to run dracut"
msgstr ""
#: src/modules/dracut/main.py:64
#, python-brace-format
msgid "Dracut failed to run on the target with return code: {return_code}"
msgstr ""
#: src/modules/dummypython/main.py:35
msgid "Dummy python job."
msgstr ""
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
#: src/modules/dummypython/main.py:94
msgid "Dummy python step {}"
msgstr ""
#: src/modules/fstab/main.py:28
msgid "Writing fstab."
msgstr ""
#: src/modules/fstab/main.py:377 src/modules/fstab/main.py:383
#: src/modules/fstab/main.py:411 src/modules/initcpiocfg/main.py:256
#: src/modules/initcpiocfg/main.py:260 src/modules/initramfscfg/main.py:85
#: src/modules/initramfscfg/main.py:89 src/modules/localecfg/main.py:140
#: src/modules/mount/main.py:329 src/modules/networkcfg/main.py:105
#: src/modules/openrcdmcryptcfg/main.py:72
#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/rawfs/main.py:164
msgid "Configuration Error"
msgstr ""
#: src/modules/fstab/main.py:378 src/modules/initramfscfg/main.py:86
#: src/modules/mount/main.py:330 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/rawfs/main.py:165
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/fstab/main.py:384 src/modules/initramfscfg/main.py:90
#: src/modules/localecfg/main.py:141 src/modules/networkcfg/main.py:106
#: src/modules/openrcdmcryptcfg/main.py:77
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/fstab/main.py:412
msgid "No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/grubcfg/main.py:29
msgid "Configure GRUB."
msgstr ""
#: src/modules/hwclock/main.py:26
msgid "Setting hardware clock."
msgstr ""
#: src/modules/initcpiocfg/main.py:27
msgid "Configuring mkinitcpio."
msgstr ""
#: src/modules/initcpiocfg/main.py:257
msgid "No partitions are defined for <pre>initcpiocfg</pre>."
msgstr ""
#: src/modules/initcpiocfg/main.py:261
msgid "No root mount point for <pre>initcpiocfg</pre>."
msgstr ""
#: src/modules/initramfscfg/main.py:32
msgid "Configuring initramfs."
msgstr ""
#: src/modules/localecfg/main.py:31
msgid "Configuring locales."
msgstr ""
#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr ""
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr ""
#: src/modules/mkinitfs/main.py:50
msgid "The exit code was {}"
msgstr ""
#: src/modules/mount/main.py:43
msgid "Mounting partitions."
msgstr ""
#: src/modules/mount/main.py:164 src/modules/mount/main.py:200
msgid "Internal error mounting zfs datasets"
msgstr ""
#: src/modules/mount/main.py:176
msgid "Failed to import zpool"
msgstr ""
#: src/modules/mount/main.py:192
msgid "Failed to unlock zpool"
msgstr ""
#: src/modules/mount/main.py:209 src/modules/mount/main.py:214
msgid "Failed to set zfs mountpoint"
msgstr ""
#: src/modules/mount/main.py:365
msgid "zfs mounting error"
msgstr ""
#: src/modules/networkcfg/main.py:29
msgid "Saving network configuration."
msgstr ""
#: src/modules/openrcdmcryptcfg/main.py:26
msgid "Configuring OpenRC dmcrypt service."
msgstr ""
#: src/modules/packages/main.py:54 src/modules/packages/main.py:65
#: src/modules/packages/main.py:75
msgid "Install packages."
msgstr ""
#: src/modules/packages/main.py:63
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
#: src/modules/packages/main.py:68
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#: src/modules/packages/main.py:71
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#: src/modules/packages/main.py:740 src/modules/packages/main.py:752
#: src/modules/packages/main.py:780
msgid "Package Manager error"
msgstr ""
#: src/modules/packages/main.py:741
msgid ""
"The package manager could not prepare updates. The command <pre>{!s}</pre> "
"returned error code {!s}."
msgstr ""
#: src/modules/packages/main.py:753
msgid ""
"The package manager could not update the system. The command <pre>{!s}</pre>"
" returned error code {!s}."
msgstr ""
#: src/modules/packages/main.py:781
msgid ""
"The package manager could not make changes to the installed system. The "
"command <pre>{!s}</pre> returned error code {!s}."
msgstr ""
#: src/modules/plymouthcfg/main.py:27
msgid "Configure Plymouth theme"
msgstr ""
#: src/modules/rawfs/main.py:26
msgid "Installing data."
msgstr ""
#: src/modules/services-openrc/main.py:29
msgid "Configure OpenRC services"
msgstr ""
#: src/modules/services-openrc/main.py:57
msgid "Cannot add service {name!s} to run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:59
msgid "Cannot remove service {name!s} from run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:61
msgid ""
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
"level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:93
msgid "Cannot modify service"
msgstr ""
#: src/modules/services-openrc/main.py:94
msgid ""
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-openrc/main.py:101
msgid "Target runlevel does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:102
msgid ""
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/services-openrc/main.py:110
msgid "Target service does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:111
msgid ""
"The path for service {name!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/services-systemd/main.py:26
msgid "Configure systemd units"
msgstr ""
#: src/modules/services-systemd/main.py:64
msgid "Cannot modify unit"
msgstr ""
#: src/modules/services-systemd/main.py:65
msgid ""
"<code>systemctl {_action!s}</code> call in chroot returned error code "
"{_exit_code!s}."
msgstr ""
#: src/modules/services-systemd/main.py:66
msgid "Cannot {_action!s} systemd unit <code>{_name!s}</code>."
msgstr ""
#: src/modules/unpackfs/main.py:34
msgid "Filling up filesystems."
msgstr ""
#: src/modules/unpackfs/main.py:254
msgid "rsync failed with error code {}."
msgstr ""
#: src/modules/unpackfs/main.py:299
msgid "Unpacking image {}/{}, file {}/{}"
msgstr ""
#: src/modules/unpackfs/main.py:314
msgid "Starting to unpack {}"
msgstr ""
#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467
msgid "Failed to unpack image \"{}\""
msgstr ""
#: src/modules/unpackfs/main.py:430
msgid "No mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:431
msgid "globalstorage does not contain a \"rootMountPoint\" key."
msgstr ""
#: src/modules/unpackfs/main.py:434
msgid "Bad mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:435
msgid "rootMountPoint is \"{}\", which does not exist."
msgstr ""
#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455
#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465
#: src/modules/unpackfs/main.py:480
msgid "Bad unpackfs configuration"
msgstr ""
#: src/modules/unpackfs/main.py:440
msgid "There is no configuration information."
msgstr ""
#: src/modules/unpackfs/main.py:456
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr ""
#: src/modules/unpackfs/main.py:460
msgid "The source filesystem \"{}\" does not exist"
msgstr ""
#: src/modules/unpackfs/main.py:466
msgid ""
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
"installed."
msgstr ""
#: src/modules/unpackfs/main.py:481
msgid "The destination \"{}\" in the target system is not a directory"
msgstr ""
#: src/modules/zfshostid/main.py:27
msgid "Copying zfs generated hostid."
msgstr ""

View File

@@ -66,8 +66,6 @@ CalamaresApplication::init()
{
Logger::setupLogfile();
cDebug() << "Calamares version:" << CALAMARES_VERSION;
cDebug() << Logger::SubEntry << "Using settings:" << Calamares::Settings::instance()->path();
cDebug() << Logger::SubEntry << "Using log file:" << Logger::logFile();
cDebug() << Logger::SubEntry << "languages:" << Calamares::Locale::availableLanguages();
if ( !Calamares::Settings::instance() )

View File

@@ -88,13 +88,6 @@ GlobalStorage::remove( const QString& key )
return nItems;
}
void
GlobalStorage::clear()
{
WriteLock l( this );
m.clear();
}
QVariant
GlobalStorage::value( const QString& key ) const
{

View File

@@ -70,9 +70,6 @@ public:
*/
int remove( const QString& key );
/// @brief Clears all keys in this GS object
void clear();
/** @brief dump keys and values to the debug log
*
* All the keys and their values are written to the debug log.

View File

@@ -76,7 +76,7 @@ public:
* Pass in a suitable error code; using 0 (which would normally mean "ok") instead
* gives you a GenericError code.
*/
static JobResult internalError( const QString&, const QString& details, int errorCode );
static JobResult internalError( const QString& message, const QString& details, int errorCode );
protected:
explicit JobResult( const QString& message, const QString& details, int errorCode );

View File

@@ -258,10 +258,9 @@ PythonJob::exec()
QDir workingDir( m_workingPath );
if ( !workingDir.exists() || !workingDir.isReadable() )
{
return JobResult::error( tr( "Bad working directory path", "@error" ),
tr( "Working directory %1 for python job %2 is not readable.", "@error" )
.arg( m_workingPath )
.arg( prettyName() ) );
return JobResult::error(
tr( "Bad working directory path", "@error" ),
tr( "Working directory %1 for python job %2 is not readable.", "@error" ).arg( m_workingPath ).arg( prettyName() ) );
}
QFileInfo scriptFI( workingDir.absoluteFilePath( m_scriptFile ) );
@@ -340,9 +339,8 @@ PythonJob::exec()
}
bp::handle_exception();
PyErr_Clear();
return JobResult::internalError( tr( "Boost.Python error in job \"%1\"", "@error" ).arg( prettyName() ),
msg,
JobResult::PythonUncaughtException );
return JobResult::internalError(
tr( "Boost.Python error in job \"%1\"", "@error" ).arg( prettyName() ), msg, JobResult::PythonUncaughtException );
}
}

View File

@@ -250,7 +250,6 @@ Settings::Settings( bool debugMode )
Settings::Settings( const QString& settingsFilePath, bool debugMode )
: QObject()
, m_settingsPath( settingsFilePath )
, m_debug( debugMode )
, m_doChroot( true )
, m_promptInstall( false )

View File

@@ -89,9 +89,6 @@ public:
/// @brief Explicif filename, debug is always true (for testing)
static Settings* init( const QString& filename );
/// @brief Get the path this settings was created for (may be empty)
QString path() const { return m_settingsPath; }
QStringList modulesSearchPaths() const;
using InstanceDescriptionList = QList< InstanceDescription >;
@@ -180,7 +177,6 @@ public:
private:
static Settings* s_instance;
QString m_settingsPath;
QStringList m_modulesSearchPaths;

View File

@@ -87,21 +87,6 @@ static constexpr const TranslationSpecialCase special_cases[] = {
QLocale::Script::AnyScript,
QLocale::Country::AnyCountry,
"Lenga d'òc" },
// Luri
{ "bqi",
nullptr,
QLocale::Language::NorthernLuri,
QLocale::Script::AnyScript,
QLocale::Country::AnyCountry,
nullptr },
// Interlingue is mapped to interlingu*a* because
// the real Language::Interlingue acts like C locale.
{ "ie",
nullptr,
QLocale::Language::Interlingua,
QLocale::Script::AnyScript,
QLocale::Country::AnyCountry,
"Interlingue" },
};
static inline bool

View File

@@ -22,9 +22,6 @@
namespace py = pybind11;
// Forward-declare function generated by PYBIND11_MODULE
static void pybind11_init_libcalamares( ::pybind11::module_& variable );
namespace
{
@@ -243,49 +240,12 @@ Job::exec()
py::scoped_interpreter guard {};
// Import, but do not keep the handle lying around
try
{
// import() only works if the library can be found through
// normal Python import mechanisms -- and after installation,
// libcalamares can not be found. An alternative, like using
// PYBIND11_EMBEDDED_MODULE, falls foul of not being able
// to `import libcalamares` from external Python scripts,
// which are used in tests.
//
// auto calamaresModule = py::module_::import( "libcalamares" );
//
// Using the constructor directly generates compiler warnings
// because this is deprecated.
//
// auto calamaresModule = py::module_("libcalamares");
//
// So create it by hand, using code cribbed from pybind11/embed.h
// to register an extension module. This does not make it
// available to the current interpreter.
//
static ::pybind11::module_::module_def libcalamares_def;
auto calamaresModule = py::module_::create_extension_module( "libcalamares", nullptr, &libcalamares_def );
pybind11_init_libcalamares( calamaresModule );
// Add libcalamares to the main namespace (as if it has already
// been imported) and also to sys.modules under its own name.
// Now `import libcalamares` in modules will find the already-
// loaded module.
auto scope = py::module_::import( "__main__" ).attr( "__dict__" );
scope[ "libcalamares" ] = calamaresModule;
auto sys = scope[ "sys" ].attr( "modules" );
sys[ "libcalamares" ] = calamaresModule;
auto calamaresModule = py::module_::import( "libcalamares" );
calamaresModule.attr( "job" ) = Calamares::Python::JobProxy( this );
calamaresModule.attr( "globalstorage" )
= Calamares::Python::GlobalStorageProxy( JobQueue::instance()->globalStorage() );
}
catch ( const py::error_already_set& e )
{
cError() << "Error in import:" << e.what();
throw; // This is non-recoverable
}
if ( s_preScript )
{

View File

@@ -83,7 +83,7 @@ log_enabled( unsigned int level )
}
static void
log_implementation( const char* msg, unsigned int debugLevel, const char* funcinfo )
log_implementation( const char* msg, unsigned int debugLevel, const bool withTime )
{
Calamares::MutexLocker lock( &s_mutex );
@@ -93,27 +93,18 @@ log_implementation( const char* msg, unsigned int debugLevel, const char* funcin
// If we don't format the date as a Qt::ISODate then we get a crash when
// logging at exit as Qt tries to use QLocale to format, but QLocale is
// on its way out.
if ( funcinfo )
{
logfile << date.toUtf8().data() << " - " << time.toUtf8().data() << " [" << debugLevel << "]: " << funcinfo
<< '\n';
}
if ( msg )
{
logfile << date.toUtf8().data() << " - " << time.toUtf8().data() << " [" << debugLevel
<< ( funcinfo ? "]: " : "]: " ) << msg << '\n';
}
logfile << date.toUtf8().data() << " - " << time.toUtf8().data() << " [" << debugLevel << "]: " << msg << std::endl;
logfile.flush();
if ( logLevelEnabled( debugLevel ) )
{
if ( funcinfo )
if ( withTime )
{
std::cout << time.toUtf8().data() << " [" << debugLevel << "]: " << funcinfo
<< ( msg ? s_Continuation : "" );
std::cout << time.toUtf8().data() << " [" << debugLevel << "]: ";
}
// The endl is desired, since it also flushes (like the logfile, above)
std::cout << ( msg ? msg : "" ) << std::endl;
std::cout << msg << std::endl;
}
}
@@ -121,25 +112,20 @@ static void
CalamaresLogHandler( QtMsgType type, const QMessageLogContext&, const QString& msg )
{
unsigned int level = LOGVERBOSE;
const char* funcinfo = nullptr;
switch ( type )
{
case QtInfoMsg:
level = LOGVERBOSE;
funcinfo = "INFO";
break;
case QtDebugMsg:
level = LOGDEBUG;
funcinfo = "DEBUG";
break;
case QtWarningMsg:
level = LOGWARNING;
funcinfo = "WARNING";
break;
case QtCriticalMsg:
case QtFatalMsg:
level = LOGERROR;
funcinfo = "ERROR";
break;
}
@@ -148,8 +134,7 @@ CalamaresLogHandler( QtMsgType type, const QMessageLogContext&, const QString& m
return;
}
log_implementation(
nullptr, level, ( QString( funcinfo ) + QStringLiteral( " (Qt): " ) + msg ).toUtf8().constData() );
log_implementation( msg.toUtf8().constData(), level, true );
}
QString
@@ -217,7 +202,12 @@ CDebug::~CDebug()
{
if ( log_enabled( m_debugLevel ) )
{
log_implementation( m_msg.toUtf8().data(), m_debugLevel, m_funcinfo );
if ( m_funcinfo )
{
m_msg.prepend( s_Continuation ); // Prepending, so back-to-front
m_msg.prepend( m_funcinfo );
}
log_implementation( m_msg.toUtf8().data(), m_debugLevel, bool( m_funcinfo ) );
}
}

View File

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

View File

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

View File

@@ -43,7 +43,7 @@ FinishedViewStep::~FinishedViewStep()
QString
FinishedViewStep::prettyName() const
{
return tr( "Finish", "@label" );
return tr( "Finish" );
}

View File

@@ -32,7 +32,7 @@ FinishedQmlViewStep::FinishedQmlViewStep( QObject* parent )
QString
FinishedQmlViewStep::prettyName() const
{
return tr( "Finish", "@label" );
return tr( "Finish" );
}
bool

View File

@@ -32,7 +32,7 @@ Page {
horizontalAlignment: Qt.AlignHCenter
color: Kirigami.Theme.textColor
level: 1
text: qsTr("Installation Completed", "@title")
text: qsTr("Installation Completed")
Text {
anchors.top: header.bottom
@@ -40,8 +40,7 @@ Page {
horizontalAlignment: Text.AlignHCenter
font.pointSize: 12
text: qsTr("%1 has been installed on your computer.<br/>
You may now restart into your new system, or continue using the Live environment.", "@info, %1 is the product name")
.arg(Branding.string(Branding.ProductName))
You may now restart into your new system, or continue using the Live environment.").arg(Branding.string(Branding.ProductName))
}
Image {
@@ -62,13 +61,13 @@ Page {
Button {
id: button
text: qsTr("Close Installer", "@button")
text: qsTr("Close Installer")
icon.name: "application-exit"
onClicked: { ViewManager.quit(); }
}
Button {
text: qsTr("Restart System", "@button")
text: qsTr("Restart System")
icon.name: "system-reboot"
onClicked: { config.doRestart(true); }
}
@@ -87,7 +86,7 @@ Page {
anchors.top: parent.top
horizontalAlignment: Text.AlignHCenter
text: qsTr("<p>A full log of the install is available as installation.log in the home directory of the Live user.<br/>
This log is copied to /var/log/installation.log of the target system.</p>", "@info")
This log is copied to /var/log/installation.log of the target system.</p>")
}
}

View File

@@ -33,7 +33,7 @@ Page {
horizontalAlignment: Qt.AlignHCenter
color: Kirigami.Theme.textColor
level: 1
text: qsTr("Installation Completed", "@title")
text: qsTr("Installation Completed")
Text {
anchors.top: header.bottom
@@ -41,8 +41,7 @@ Page {
horizontalAlignment: Text.AlignHCenter
font.pointSize: 12
text: qsTr("%1 has been installed on your computer.<br/>
You may now restart your device.", "@info, %1 is the product name")
.arg(Branding.string(Branding.ProductName))
You may now restart your device.").arg(Branding.string(Branding.ProductName))
}
Image {
@@ -63,13 +62,13 @@ Page {
Button {
id: button
text: qsTr("Close", "@button")
text: qsTr("Close")
icon.name: "application-exit"
onClicked: { ViewManager.quit(); }
}
Button {
text: qsTr("Restart", "@button")
text: qsTr("Restart")
icon.name: "system-reboot"
onClicked: { config.doRestart(true); }
}

View File

@@ -40,7 +40,7 @@ ResizeFSJob::~ResizeFSJob() {}
QString
ResizeFSJob::prettyName() const
{
return tr( "Performing file system resize…", "@status" );
return tr( "Resize Filesystem Job" );
}
ResizeFSJob::PartitionMatch
@@ -159,15 +159,15 @@ ResizeFSJob::exec()
if ( !isValid() )
{
return Calamares::JobResult::error(
tr( "Invalid configuration", "@error" ),
tr( "The file-system resize job has an invalid configuration and will not run.", "@error" ) );
tr( "Invalid configuration" ),
tr( "The file-system resize job has an invalid configuration and will not run." ) );
}
if ( !m_kpmcore )
{
cWarning() << "Could not load KPMCore backend (2).";
return Calamares::JobResult::error( tr( "KPMCore not available", "@error" ),
tr( "Calamares cannot start KPMCore for the file system resize job.", "@error" ) );
return Calamares::JobResult::error( tr( "KPMCore not Available" ),
tr( "Calamares cannot start KPMCore for the file-system resize job." ) );
}
m_kpmcore.backend()->initFSSupport(); // Might not be enough, see below
@@ -176,20 +176,20 @@ ResizeFSJob::exec()
if ( !m.first || !m.second )
{
return Calamares::JobResult::error(
tr( "Resize failed.", "@error" ),
tr( "Resize Failed" ),
!m_fsname.isEmpty()
? tr( "The filesystem %1 could not be found in this system, and cannot be resized.", "@info" ).arg( m_fsname )
: tr( "The device %1 could not be found in this system, and cannot be resized.", "@info" ).arg( m_devicename ) );
? tr( "The filesystem %1 could not be found in this system, and cannot be resized." ).arg( m_fsname )
: tr( "The device %1 could not be found in this system, and cannot be resized." ).arg( m_devicename ) );
}
m.second->fileSystem().init(); // Initialize support for specific FS
if ( !ResizeOperation::canGrow( m.second ) )
{
cDebug() << "canGrow() returned false.";
return Calamares::JobResult::error( tr( "Resize Failed", "@error" ),
return Calamares::JobResult::error( tr( "Resize Failed" ),
!m_fsname.isEmpty()
? tr( "The filesystem %1 cannot be resized.", "@error" ).arg( m_fsname )
: tr( "The device %1 cannot be resized.", "@error" ).arg( m_devicename ) );
? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname )
: tr( "The device %1 cannot be resized." ).arg( m_devicename ) );
}
qint64 new_end = findGrownEnd( m );
@@ -198,10 +198,10 @@ ResizeFSJob::exec()
if ( new_end < 0 )
{
return Calamares::JobResult::error( tr( "Resize Failed", "@error" ),
return Calamares::JobResult::error( tr( "Resize Failed" ),
!m_fsname.isEmpty()
? tr( "The filesystem %1 cannot be resized.", "@error" ).arg( m_fsname )
: tr( "The device %1 cannot be resized.", "@error" ).arg( m_devicename ) );
? tr( "The filesystem %1 cannot be resized." ).arg( m_fsname )
: tr( "The device %1 cannot be resized." ).arg( m_devicename ) );
}
if ( new_end == 0 )
{
@@ -209,9 +209,9 @@ ResizeFSJob::exec()
if ( m_required )
{
return Calamares::JobResult::error(
tr( "Resize Failed", "@error" ),
!m_fsname.isEmpty() ? tr( "The file system %1 must be resized, but cannot.", "@info" ).arg( m_fsname )
: tr( "The device %1 must be resized, but cannot", "@info" ).arg( m_fsname ) );
tr( "Resize Failed" ),
!m_fsname.isEmpty() ? tr( "The filesystem %1 must be resized, but cannot." ).arg( m_fsname )
: tr( "The device %1 must be resized, but cannot" ).arg( m_fsname ) );
}
return Calamares::JobResult::ok();
@@ -228,7 +228,7 @@ ResizeFSJob::exec()
else
{
cDebug() << "Resize failed." << op_report.output();
return Calamares::JobResult::error( tr( "Resize Failed", "@error" ), op_report.toText() );
return Calamares::JobResult::error( tr( "Resize Failed" ), op_report.toText() );
}
}

View File

@@ -36,7 +36,7 @@ HostInfoJob::~HostInfoJob() {}
QString
HostInfoJob::prettyName() const
{
return tr( "Collecting information about your machine", "@status" );
return tr( "Collecting information about your machine." );
}
QString

View File

@@ -28,7 +28,7 @@ InitcpioJob::~InitcpioJob() {}
QString
InitcpioJob::prettyName() const
{
return tr( "Creating initramfs with mkinitcpio", "@status" );
return tr( "Creating initramfs with mkinitcpio." );
}
/** @brief Sets secure permissions on each initramfs

View File

@@ -24,7 +24,7 @@ InitramfsJob::~InitramfsJob() {}
QString
InitramfsJob::prettyName() const
{
return tr( "Creating initramfs", "@status" );
return tr( "Creating initramfs." );
}
Calamares::JobResult

View File

@@ -46,8 +46,8 @@ void
InteractiveTerminalPage::errorKonsoleNotInstalled()
{
QMessageBox mb( QMessageBox::Critical,
tr( "Konsole not installed.", "@error" ),
tr( "Please install KDE Konsole and try again!", "@info" ),
tr( "Konsole not installed" ),
tr( "Please install KDE Konsole and try again!" ),
QMessageBox::Ok );
Calamares::fixButtonLabels( &mb );
mb.exec();
@@ -119,5 +119,5 @@ InteractiveTerminalPage::setCommand( const QString& command )
{
m_command = command;
CALAMARES_RETRANSLATE(
m_headerLabel->setText( tr( "Executing script: &nbsp;<code>%1</code>", "@info" ).arg( m_command ) ); );
m_headerLabel->setText( tr( "Executing script: &nbsp;<code>%1</code>" ).arg( m_command ) ); );
}

View File

@@ -37,7 +37,7 @@ InteractiveTerminalViewStep::~InteractiveTerminalViewStep()
QString
InteractiveTerminalViewStep::prettyName() const
{
return tr( "Script", "@label" );
return tr( "Script" );
}
QWidget*

View File

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

View File

@@ -71,7 +71,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Keyboard model:</string>
<string>Keyboard Model:</string>
</property>
</widget>
</item>
@@ -150,7 +150,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Keyboard switch:</string>
<string>Keyboard Switch:</string>
</property>
</widget>
</item>

View File

@@ -38,7 +38,7 @@ KeyboardViewStep::~KeyboardViewStep()
QString
KeyboardViewStep::prettyName() const
{
return tr( "Keyboard", "@label" );
return tr( "Keyboard" );
}

View File

@@ -63,8 +63,7 @@ SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model,
QString
SetKeyboardLayoutJob::prettyName() const
{
return tr( "Setting keyboard model to %1, layout as %2-%3", "@status, %1 model, %2 layout, %3 variant" )
.arg( m_model ).arg( m_layout ).arg( m_variant );
return tr( "Set keyboard model to %1, layout to %2-%3" ).arg( m_model ).arg( m_layout ).arg( m_variant );
}
@@ -365,8 +364,8 @@ SetKeyboardLayoutJob::exec()
if ( !writeVConsoleData( vconsoleConfPath, convertedKeymapPath ) )
{
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for the virtual console.", "@error" ),
tr( "Failed to write to %1", "@error, %1 is virtual console configuration path" ).arg( vconsoleConfPath ) );
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for the virtual console." ),
tr( "Failed to write to %1" ).arg( vconsoleConfPath ) );
}
// Get the path to the destination's /etc/X11/xorg.conf.d/00-keyboard.conf
@@ -391,8 +390,8 @@ SetKeyboardLayoutJob::exec()
if ( !writeX11Data( keyboardConfPath ) )
{
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11.", "@error" ),
tr( "Failed to write to %1", "@error, %1 is keyboard configuration path" ).arg( keyboardConfPath ) );
return Calamares::JobResult::error( tr( "Failed to write keyboard configuration for X11." ),
tr( "Failed to write to %1" ).arg( keyboardConfPath ) );
}
}
@@ -408,8 +407,8 @@ SetKeyboardLayoutJob::exec()
if ( !writeDefaultKeyboardData( defaultKeyboardPath ) )
{
return Calamares::JobResult::error(
tr( "Failed to write keyboard configuration to existing /etc/default directory.", "@error" ),
tr( "Failed to write to %1", "@error, %1 is default keyboard path" ).arg( defaultKeyboardPath ) );
tr( "Failed to write keyboard configuration to existing /etc/default directory." ),
tr( "Failed to write to %1" ).arg( defaultKeyboardPath ) );
}
}
}

View File

@@ -29,7 +29,7 @@ KeyboardQmlViewStep::KeyboardQmlViewStep( QObject* parent )
QString
KeyboardQmlViewStep::prettyName() const
{
return tr( "Keyboard", "@label" );
return tr( "Keyboard" );
}
QString

View File

@@ -58,7 +58,7 @@ Item {
Label {
id: header
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Select a layout to activate keyboard preview", "@label")
text: qsTr("To activate keyboard preview, select a layout.")
color: textColor
font.bold: true
}
@@ -141,7 +141,7 @@ Item {
}
Text {
anchors.centerIn: parent
text: qsTr("<b>Keyboard model:&nbsp;&nbsp;</b>", "@label") + models.currentItem.currentModel.label
text: qsTr("<b>Keyboard Model:&nbsp;&nbsp;</b>") + models.currentItem.currentModel.label
color: textColor
}
Image {
@@ -182,7 +182,7 @@ Item {
z: 2
color:backgroundColor
Text {
text: qsTr("Layout", "@label")
text: qsTr("Layout")
anchors.centerIn: parent
color: textColor
font.bold: true
@@ -255,7 +255,7 @@ Item {
z: 2
color:backgroundColor
Text {
text: qsTr("Variant", "@label")
text: qsTr("Variant")
anchors.centerIn: parent
color: textColor
font.bold: true
@@ -308,7 +308,7 @@ Item {
TextField {
id: textInput
placeholderText: qsTr("Type here to test your keyboard…", "@label")
placeholderText: qsTr("Type here to test your keyboard")
height: 36
width: parent.width / 1.6
horizontalAlignment: TextInput.AlignHCenter

View File

@@ -58,7 +58,7 @@ Item {
Label {
id: header
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Select a layout to activate keyboard preview", "@label")
text: qsTr("To activate keyboard preview, select a layout.")
color: textColor
font.bold: true
}
@@ -141,7 +141,7 @@ Item {
}
Text {
anchors.centerIn: parent
text: qsTr("<b>Keyboard model:&nbsp;&nbsp;</b>", "@label") + models.currentItem.currentModel.label
text: qsTr("<b>Keyboard Model:&nbsp;&nbsp;</b>") + models.currentItem.currentModel.label
color: textColor
}
Image {
@@ -182,7 +182,7 @@ Item {
z: 2
color:backgroundColor
Text {
text: qsTr("Layout", "@label")
text: qsTr("Layout")
anchors.centerIn: parent
color: textColor
font.bold: true
@@ -255,7 +255,7 @@ Item {
z: 2
color:backgroundColor
Text {
text: qsTr("Variant", "@label")
text: qsTr("Variant")
anchors.centerIn: parent
color: textColor
font.bold: true
@@ -308,7 +308,7 @@ Item {
TextField {
id: textInput
placeholderText: qsTr("Type here to test your keyboard…", "@label")
placeholderText: qsTr("Type here to test your keyboard")
height: 36
width: parent.width / 1.6
horizontalAlignment: TextInput.AlignHCenter

View File

@@ -139,17 +139,17 @@ LicensePage::setEntries( const QList< LicenseEntry >& entriesList )
void
LicensePage::retranslate()
{
ui->acceptCheckBox->setText( tr( "I accept the terms and conditions above.", "@info" ) );
ui->acceptCheckBox->setText( tr( "I accept the terms and conditions above." ) );
QString review = tr( "Please review the End User License Agreements (EULAs).", "@info" );
QString review = tr( "Please review the End User License Agreements (EULAs)." );
const auto br = QStringLiteral( "<br/>" );
if ( !m_allLicensesOptional )
{
ui->mainText->setText( tr( "This setup procedure will install proprietary "
"software that is subject to licensing terms.", "@info" )
"software that is subject to licensing terms." )
+ br + review );
QString mustAcceptText( tr( "If you do not agree with the terms, the setup procedure cannot continue.", "@info" ) );
QString mustAcceptText( tr( "If you do not agree with the terms, the setup procedure cannot continue." ) );
ui->acceptCheckBox->setToolTip( mustAcceptText );
}
else
@@ -157,10 +157,10 @@ LicensePage::retranslate()
ui->mainText->setText( tr( "This setup procedure can install proprietary "
"software that is subject to licensing terms "
"in order to provide additional features and enhance the user "
"experience.", "@info" )
"experience." )
+ br + review );
QString okAcceptText( tr( "If you do not agree with the terms, proprietary software will not "
"be installed, and open source alternatives will be used instead.", "@info" ) );
"be installed, and open source alternatives will be used instead." ) );
ui->acceptCheckBox->setToolTip( okAcceptText );
}
ui->retranslateUi( this );

View File

@@ -42,7 +42,7 @@ LicenseViewStep::~LicenseViewStep()
QString
LicenseViewStep::prettyName() const
{
return tr( "License", "@label" );
return tr( "License" );
}

View File

@@ -85,7 +85,7 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent )
}
else
{
m_licenceTextLabel->setText( tr( "URL: %1", "@label" ).arg( m_entry.m_url.toDisplayString() ) );
m_licenceTextLabel->setText( tr( "URL: %1" ).arg( m_entry.m_url.toDisplayString() ) );
connect( m_viewLicenseButton, &QAbstractButton::clicked, this, &LicenseWidget::viewClicked );
}
m_licenceTextLabel->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
@@ -107,38 +107,38 @@ LicenseWidget::retranslateUi()
case LicenseEntry::Type::Driver:
//: %1 is an untranslatable product name, example: Creative Audigy driver
productDescription = tr( "<strong>%1 driver</strong><br/>"
"by %2", "@label, %1 is product name, %2 is product vendor" )
"by %2" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::GpuDriver:
//: %1 is usually a vendor name, example: Nvidia graphics driver
productDescription = tr( "<strong>%1 graphics driver</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::BrowserPlugin:
productDescription = tr( "<strong>%1 browser plugin</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::Codec:
productDescription = tr( "<strong>%1 codec</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::Package:
productDescription = tr( "<strong>%1 package</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
break;
case LicenseEntry::Type::Software:
productDescription = tr( "<strong>%1</strong><br/>"
"<font color=\"Grey\">by %2</font>", "@label, %1 is product name, %2 is product vendor" )
"<font color=\"Grey\">by %2</font>" )
.arg( m_entry.m_prettyName )
.arg( m_entry.m_prettyVendor );
}
@@ -160,7 +160,7 @@ LicenseWidget::showLocalLicenseText()
{
fileName = fileName.remove( 0, 5 );
}
m_licenceTextLabel->setText( tr( "File: %1", "@label" ).arg( fileName ) );
m_licenceTextLabel->setText( tr( "File: %1" ).arg( fileName ) );
}
}
@@ -183,11 +183,11 @@ LicenseWidget::updateExpandToolTip()
{
if ( m_entry.isLocal() )
{
m_viewLicenseButton->setText( m_isExpanded ? tr( "Hide the license text", "@tooltip" ) : tr( "Show the license text", "@tooltip" ) );
m_viewLicenseButton->setText( m_isExpanded ? tr( "Hide license text" ) : tr( "Show the license text" ) );
}
else
{
m_viewLicenseButton->setText( tr( "Open the license agreement in browser", "@tooltip" ) );
m_viewLicenseButton->setText( tr( "Open license agreement in browser." ) );
}
}

View File

@@ -370,7 +370,7 @@ Config::setLCLocaleExplicitly( const QString& locale )
QString
Config::currentLocationStatus() const
{
return tr( "Set timezone to %1/%2", "@action" )
return tr( "Set timezone to %1/%2." )
.arg( m_currentLocation ? m_currentLocation->region() : QString(),
m_currentLocation ? m_currentLocation->zone() : QString() );
}
@@ -407,14 +407,14 @@ localeLabel( const QString& s )
QString
Config::currentLanguageStatus() const
{
return tr( "The system language will be set to %1", "@info" )
return tr( "The system language will be set to %1." )
.arg( localeLabel( m_selectedLocaleConfiguration.language() ) );
}
QString
Config::currentLCStatus() const
{
return tr( "The numbers and dates locale will be set to %1", "@info" )
return tr( "The numbers and dates locale will be set to %1." )
.arg( localeLabel( m_selectedLocaleConfiguration.lc_numeric ) );
}

View File

@@ -20,7 +20,7 @@ LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringLis
: QDialog( parent )
{
setModal( true );
setWindowTitle( tr( "System Locale Setting", "@title" ) );
setWindowTitle( tr( "System locale setting" ) );
QBoxLayout* mainLayout = new QVBoxLayout;
setLayout( mainLayout );
@@ -29,7 +29,7 @@ LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringLis
upperText->setWordWrap( true );
upperText->setText( tr( "The system locale setting affects the language and character "
"set for some command line user interface elements.<br/>"
"The current setting is <strong>%1</strong>.", "@info" )
"The current setting is <strong>%1</strong>." )
.arg( guessedLCLocale ) );
mainLayout->addWidget( upperText );
setMinimumWidth( upperText->fontMetrics().height() * 24 );
@@ -51,8 +51,8 @@ LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringLis
QDialogButtonBox* dbb
= new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this );
dbb->button( QDialogButtonBox::Cancel )->setText( tr( "&Cancel", "@button" ) );
dbb->button( QDialogButtonBox::Ok )->setText( tr( "&OK", "@button" ) );
dbb->button( QDialogButtonBox::Cancel )->setText( tr( "&Cancel" ) );
dbb->button( QDialogButtonBox::Ok )->setText( tr( "&OK" ) );
mainLayout->addWidget( dbb );

View File

@@ -127,10 +127,10 @@ LocalePage::~LocalePage() {}
void
LocalePage::updateLocaleLabels()
{
m_regionLabel->setText( tr( "Region:", "@label" ) );
m_zoneLabel->setText( tr( "Zone:", "@label" ) );
m_localeChangeButton->setText( tr( "&Change", "@button" ) );
m_formatsChangeButton->setText( tr( "&Change", "@button" ) );
m_regionLabel->setText( tr( "Region:" ) );
m_zoneLabel->setText( tr( "Zone:" ) );
m_localeChangeButton->setText( tr( "&Change..." ) );
m_formatsChangeButton->setText( tr( "&Change..." ) );
m_localeLabel->setText( m_config->currentLanguageStatus() );
m_formatsLabel->setText( m_config->currentLCStatus() );
}

View File

@@ -68,7 +68,7 @@ LocaleViewStep::setUpPage()
QString
LocaleViewStep::prettyName() const
{
return tr( "Location", "@label" );
return tr( "Location" );
}
QString

View File

@@ -29,7 +29,7 @@ SetTimezoneJob::SetTimezoneJob( const QString& region, const QString& zone )
QString
SetTimezoneJob::prettyName() const
{
return tr( "Setting timezone to %1/%2", "@status" ).arg( m_region ).arg( m_zone );
return tr( "Set timezone to %1/%2" ).arg( m_region ).arg( m_zone );
}
Calamares::JobResult
@@ -57,8 +57,8 @@ SetTimezoneJob::exec()
QFileInfo zoneFile( gs->value( "rootMountPoint" ).toString() + zoneinfoPath );
if ( !zoneFile.exists() || !zoneFile.isReadable() )
{
return Calamares::JobResult::error( tr( "Cannot access selected timezone path.", "@error" ),
tr( "Bad path: %1", "@error" ).arg( zoneFile.absolutePath() ) );
return Calamares::JobResult::error( tr( "Cannot access selected timezone path." ),
tr( "Bad path: %1" ).arg( zoneFile.absolutePath() ) );
}
// Make sure /etc/localtime doesn't exist, otherwise symlinking will fail
@@ -68,16 +68,16 @@ SetTimezoneJob::exec()
if ( ec )
{
return Calamares::JobResult::error(
tr( "Cannot set timezone.", "@error" ),
tr( "Link creation failed, target: %1; link name: %2", "@info" ).arg( zoneinfoPath ).arg( "/etc/localtime" ) );
tr( "Cannot set timezone." ),
tr( "Link creation failed, target: %1; link name: %2" ).arg( zoneinfoPath ).arg( "/etc/localtime" ) );
}
QFile timezoneFile( gs->value( "rootMountPoint" ).toString() + "/etc/timezone" );
if ( !timezoneFile.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) )
{
return Calamares::JobResult::error( tr( "Cannot set timezone.", "@error" ),
tr( "Cannot open /etc/timezone for writing", "@info" ) );
return Calamares::JobResult::error( tr( "Cannot set timezone," ),
tr( "Cannot open /etc/timezone for writing" ) );
}
QTextStream out( &timezoneFile );

View File

@@ -29,7 +29,7 @@ LocaleQmlViewStep::getConfig()
QString
LocaleQmlViewStep::prettyName() const
{
return tr( "Location", "@label" );
return tr( "Location" );
}
QString

View File

@@ -234,7 +234,7 @@ Column {
Text {
id: tzText
text: qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
text: qsTr("Timezone: %1").arg(config.currentTimezoneName)
color: Kirigami.Theme.textColor
anchors.centerIn: parent
}
@@ -257,7 +257,7 @@ Column {
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
text: qsTr("Please select your preferred location on the map so the installer can suggest the locale
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.", "@label")
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.")
}
}
}

View File

@@ -234,7 +234,7 @@ Column {
Text {
id: tzText
text: qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
text: qsTr("Timezone: %1").arg(config.currentTimezoneName)
color: Kirigami.Theme.textColor
anchors.centerIn: parent
}
@@ -257,7 +257,7 @@ Column {
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
text: qsTr("Please select your preferred location on the map so the installer can suggest the locale
and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.", "@info")
to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.")
}
}
}

View File

@@ -44,7 +44,7 @@ Page {
anchors.horizontalCenter: parent.horizontalCenter
color: textColor
horizontalAlignment: Text.AlignCenter
text: qsTr("Select your preferred region, or use the default settings", "@label")
text: qsTr("Select your preferred Region, or use the default settings.")
}
ListView {
@@ -100,7 +100,7 @@ Page {
list.currentIndex = index
control.currentRegion = model.name
config.regionalZonesModel.region = control.currentRegion
tztext.text = qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName)
stack.push(zoneView)
}
}
@@ -117,7 +117,7 @@ Page {
id: zone
anchors.horizontalCenter: parent.horizontalCenter
color: textColor
text: qsTr("Select your preferred zone within your region", "@label")
text: qsTr("Select your preferred Zone within your Region.")
}
ListView {
@@ -177,7 +177,7 @@ Page {
list2.positionViewAtIndex(index, ListView.Center)
control.currentZone = model.name
config.setCurrentLocation(control.currentRegion, control.currentZone)
tztext.text = qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName)
}
}
}
@@ -190,7 +190,7 @@ Page {
anchors.left: parent.left
anchors.leftMargin: parent.width / 15
icon.name: "go-previous"
text: qsTr("Zones", "@button")
text: qsTr("Zones")
onClicked: stack.pop()
}
}
@@ -221,7 +221,7 @@ Page {
Text {
id: tztext
text: qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
text: qsTr("Timezone: %1").arg(config.currentTimezoneName)
color: Kirigami.Theme.textColor
anchors.centerIn: parent
}
@@ -237,7 +237,7 @@ Page {
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
text: qsTr("You can fine-tune language and locale settings below", "@label")
text: qsTr("You can fine-tune Language and Locale settings below.")
}
}
}

View File

@@ -44,7 +44,7 @@ Page {
anchors.horizontalCenter: parent.horizontalCenter
color: textColor
horizontalAlignment: Text.AlignCenter
text: qsTr("Select your preferred region, or use the default settings", "@label")
text: qsTr("Select your preferred Region, or use the default settings.")
}
ListView {
@@ -100,7 +100,7 @@ Page {
list.currentIndex = index
control.currentRegion = model.name
config.regionalZonesModel.region = control.currentRegion
tztext.text = qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName)
stack.push(zoneView)
}
}
@@ -117,7 +117,7 @@ Page {
id: zone
anchors.horizontalCenter: parent.horizontalCenter
color: textColor
text: qsTr("Select your preferred zone within your region", "@label")
text: qsTr("Select your preferred Zone within your Region.")
}
ListView {
@@ -177,7 +177,7 @@ Page {
list2.positionViewAtIndex(index, ListView.Center)
control.currentZone = model.name
config.setCurrentLocation(control.currentRegion, control.currentZone)
tztext.text = qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
tztext.text = qsTr("Timezone: %1").arg(config.currentTimezoneName)
}
}
}
@@ -190,7 +190,7 @@ Page {
anchors.left: parent.left
anchors.leftMargin: parent.width / 15
icon.name: "go-previous"
text: qsTr("Zones", "@button")
text: qsTr("Zones")
onClicked: stack.pop()
}
}
@@ -221,7 +221,7 @@ Page {
Text {
id: tztext
text: qsTr("Timezone: %1", "@label").arg(config.currentTimezoneName)
text: qsTr("Timezone: %1").arg(config.currentTimezoneName)
color: Kirigami.Theme.textColor
anchors.centerIn: parent
}
@@ -237,7 +237,7 @@ Page {
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor
text: qsTr("You can fine-tune language and locale settings below", "@label")
text: qsTr("You can fine-tune Language and Locale settings below.")
}
}
}

View File

@@ -73,7 +73,7 @@ Page {
Button {
Layout.alignment: Qt.AlignRight|Qt.AlignVCenter
Layout.columnSpan: 2
text: qsTr("Change", "@button")
text: qsTr("Change")
onClicked: {
drawerLanguage.open()
}
@@ -103,7 +103,7 @@ Page {
Button {
Layout.alignment: Qt.AlignRight|Qt.AlignVCenter
Layout.columnSpan: 2
text: qsTr("Change", "@button")
text: qsTr("Change")
onClicked: {
drawerLocale.open()
}
@@ -140,7 +140,7 @@ Page {
anchors.fill: parent
wrapMode: Text.WordWrap
text: qsTr("<h3>Languages</h3> </br>
The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.", "@info").arg(config.currentLanguageCode)
The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.").arg(config.currentLanguageCode)
font.pointSize: 10
}
}
@@ -211,7 +211,7 @@ Page {
anchors.fill: parent
wrapMode: Text.WordWrap
text: qsTr("<h3>Locales</h3> </br>
The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.", "@info").arg(config.currentLCCode)
The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.").arg(config.currentLCCode)
font.pointSize: 10
}
}

View File

@@ -73,7 +73,7 @@ Page {
Button {
Layout.alignment: Qt.AlignRight|Qt.AlignVCenter
Layout.columnSpan: 2
text: qsTr("Change", "@button")
text: qsTr("Change")
onClicked: {
drawerLanguage.open()
}
@@ -103,7 +103,7 @@ Page {
Button {
Layout.alignment: Qt.AlignRight|Qt.AlignVCenter
Layout.columnSpan: 2
text: qsTr("Change", "@button")
text: qsTr("Change")
onClicked: {
drawerLocale.open()
}
@@ -140,7 +140,7 @@ Page {
anchors.fill: parent
wrapMode: Text.WordWrap
text: qsTr("<h3>Languages</h3> </br>
The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.", "@info").arg(config.currentLanguageCode)
The system locale setting affects the language and character set for some command line user interface elements. The current setting is <strong>%1</strong>.").arg(config.currentLanguageCode)
font.pointSize: 10
}
}
@@ -211,7 +211,7 @@ Page {
anchors.fill: parent
wrapMode: Text.WordWrap
text: qsTr("<h3>Locales</h3> </br>
The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.", "@info").arg(config.currentLCCode)
The system locale setting affects the numbers and dates format. The current setting is <strong>%1</strong>.").arg(config.currentLCCode)
font.pointSize: 10
}
}

View File

@@ -14,6 +14,7 @@
#include "Workers.h"
#include "utils/Logger.h"
#include "utils/NamedEnum.h"
#include "utils/System.h"
#include "utils/Variant.h"
@@ -22,6 +23,25 @@
#include <QFile>
const NamedEnumTable< MachineId::SystemdMachineIdStyle >&
styleNames()
{
using T = MachineId::SystemdMachineIdStyle;
// *INDENT-OFF*
// clang-format off
static const NamedEnumTable< MachineId::SystemdMachineIdStyle > names {
{ QStringLiteral( "none" ), T::Blank },
{ QStringLiteral( "blank" ), T::Blank },
{ QStringLiteral( "uuid" ), T::Uuid },
{ QStringLiteral( "systemd" ), T::Uuid },
{ QStringLiteral( "literal-uninitialized" ), T::Uninitialized },
};
// clang-format on
// *INDENT-ON*
return names;
}
MachineIdJob::MachineIdJob( QObject* parent )
: Calamares::CppJob( parent )
{
@@ -96,7 +116,7 @@ MachineIdJob::exec()
{
cWarning() << "Could not create systemd data-directory.";
}
auto r = MachineId::createSystemdMachineId( root, target_systemd_machineid_file );
auto r = MachineId::createSystemdMachineId( m_systemd_style, root, target_systemd_machineid_file );
if ( !r )
{
return r;
@@ -134,6 +154,12 @@ MachineIdJob::setConfigurationMap( const QVariantMap& map )
{
m_systemd = Calamares::getBool( map, "systemd", false );
const auto style = Calamares::getString( map, "systemd-style", QString() );
if ( !style.isEmpty() )
{
m_systemd_style = styleNames().find( style, MachineId::SystemdMachineIdStyle::Uuid );
}
m_dbus = Calamares::getBool( map, "dbus", false );
if ( map.contains( "dbus-symlink" ) )
{

View File

@@ -10,16 +10,16 @@
#ifndef MACHINEIDJOB_H
#define MACHINEIDJOB_H
#include "Workers.h"
#include "CppJob.h"
#include "DllMacro.h"
#include "utils/PluginFactory.h"
#include <QObject>
#include <QStringList>
#include <QVariantMap>
#include "CppJob.h"
#include "utils/PluginFactory.h"
#include "DllMacro.h"
/** @brief Write 'random' data: machine id, entropy, UUIDs
*
*/
@@ -48,6 +48,8 @@ public:
private:
bool m_systemd = false; ///< write systemd's files
MachineId::SystemdMachineIdStyle m_systemd_style = MachineId::SystemdMachineIdStyle::Uuid;
bool m_dbus = false; ///< write dbus files
bool m_dbus_symlink = false; ///< .. or just symlink to systemd

View File

@@ -141,9 +141,10 @@ createEntropy( const EntropyGeneration kind, const QString& rootMountPoint, cons
}
static Calamares::JobResult
runCmd( const QStringList& cmd )
runCmd( const QStringList& cmd, bool inTarget )
{
auto r = Calamares::System::instance()->targetEnvCommand( cmd );
auto r = inTarget ? Calamares::System::instance()->targetEnvCommand( cmd )
: Calamares::System::instance()->runCommand( cmd, std::chrono::seconds( 0 ) );
if ( r.getExitCode() )
{
return r.explainProcess( cmd, std::chrono::seconds( 0 ) );
@@ -153,11 +154,26 @@ runCmd( const QStringList& cmd )
}
Calamares::JobResult
createSystemdMachineId( const QString& rootMountPoint, const QString& fileName )
createSystemdMachineId( SystemdMachineIdStyle style, const QString& rootMountPoint, const QString& machineIdFile )
{
Q_UNUSED( rootMountPoint )
Q_UNUSED( fileName )
return runCmd( QStringList { QStringLiteral( "systemd-machine-id-setup" ) } );
switch ( style )
{
case SystemdMachineIdStyle::Uuid:
return runCmd(
QStringList { QStringLiteral( "systemd-machine-id-setup" ), QStringLiteral( "--root=" ) + rootMountPoint },
false );
case SystemdMachineIdStyle::Blank:
Calamares::System::instance()->createTargetFile(
machineIdFile, QByteArray(), Calamares::System::WriteMode::Overwrite );
return Calamares::JobResult::ok();
case SystemdMachineIdStyle::Uninitialized:
Calamares::System::instance()->createTargetFile(
machineIdFile, "uninitialized\n", Calamares::System::WriteMode::Overwrite );
return Calamares::JobResult::ok();
}
return Calamares::JobResult::internalError( QStringLiteral( "Invalid systemd-style" ),
QStringLiteral( "Invalid value %1" ).arg( int( style ) ),
Calamares::JobResult::InvalidConfiguration );
}
Calamares::JobResult
@@ -165,14 +181,14 @@ createDBusMachineId( const QString& rootMountPoint, const QString& fileName )
{
Q_UNUSED( rootMountPoint )
Q_UNUSED( fileName )
return runCmd( QStringList { QStringLiteral( "dbus-uuidgen" ), QStringLiteral( "--ensure" ) } );
return runCmd( QStringList { QStringLiteral( "dbus-uuidgen" ), QStringLiteral( "--ensure" ) }, true );
}
Calamares::JobResult
createDBusLink( const QString& rootMountPoint, const QString& fileName, const QString& systemdFileName )
{
Q_UNUSED( rootMountPoint )
return runCmd( QStringList { QStringLiteral( "ln" ), QStringLiteral( "-sf" ), systemdFileName, fileName } );
return runCmd( QStringList { QStringLiteral( "ln" ), QStringLiteral( "-sf" ), systemdFileName, fileName }, true );
}
} // namespace MachineId

View File

@@ -52,6 +52,7 @@ createEntropy( const EntropyGeneration kind, const QString& rootMountPoint, cons
* Creating UUIDs for DBUS and SystemD.
*/
/// @brief Create a new DBus UUID file
Calamares::JobResult createDBusMachineId( const QString& rootMountPoint, const QString& fileName );
@@ -59,7 +60,15 @@ Calamares::JobResult createDBusMachineId( const QString& rootMountPoint, const Q
Calamares::JobResult
createDBusLink( const QString& rootMountPoint, const QString& fileName, const QString& systemdFileName );
Calamares::JobResult createSystemdMachineId( const QString& rootMountPoint, const QString& fileName );
enum class SystemdMachineIdStyle
{
Uuid,
Blank,
Uninitialized
};
Calamares::JobResult
createSystemdMachineId( SystemdMachineIdStyle style, const QString& rootMountPoint, const QString& fileName );
} // namespace MachineId

View File

@@ -13,6 +13,13 @@
# Whether to create /etc/machine-id for systemd.
# The default is *false*.
systemd: true
# If systemd is true, the kind of /etc/machine-id to create in the target
# - uuid (default) generates a UUID
# - systemd alias of uuid
# - blank creates the file but leaves it empty at 0 bytes
# - none alias of blank (use `systemd: false` if you don't want one at all)
# - literal-uninitialized creates the file and writes the string "uninitialized\n"
systemd-style: uuid
# Whether to create /var/lib/dbus/machine-id for D-Bus.
# The default is *false*.

View File

@@ -7,6 +7,7 @@ additionalProperties: false
type: object
properties:
systemd: { type: boolean, default: false }
"systemd-style": { type: string, enum: [ uuid, blank, literal-uninitialized ] }
dbus: { type: boolean, default: false }
"dbus-symlink": { type: boolean, default: false }
"entropy-copy": { type: boolean, default: false }

View File

@@ -298,12 +298,7 @@ def mount_partition(root_mount_point, partition, partitions, mount_options, moun
mount_option_no_subvol = get_mount_options("btrfs_swap", mount_options, partition)
else:
mount_option_no_subvol = get_mount_options(fstype, mount_options, partition)
# Only add subvol= argument if we are not mounting the entire filesystem
if s['subvolume']:
mount_option = f"subvol={s['subvolume']},{mount_option_no_subvol}"
else:
mount_option = mount_option_no_subvol
mount_option = f"subvol={s['subvolume']},{mount_option_no_subvol}"
subvolume_mountpoint = mount_point[:-1] + s['mountPoint']
mount_options_list.append({"mountpoint": s['mountPoint'], "option_string": mount_option_no_subvol})
if libcalamares.utils.mount(device,

View File

@@ -274,66 +274,39 @@ fillGSConfigurationEFI( Calamares::GlobalStorage* gs, const QVariantMap& configu
QString firmwareType( PartUtils::isEfiSystem() ? QStringLiteral( "efi" ) : QStringLiteral( "bios" ) );
gs->insert( "firmwareType", firmwareType );
bool ok = false;
auto efiConfiguration = Calamares::getSubMap( configurationMap, "efi", ok );
gs->insert( "efiSystemPartition",
Calamares::getString( configurationMap, "efiSystemPartition", QStringLiteral( "/boot/efi" ) ) );
// Mount Point
// Read and parse key efiSystemPartitionSize
if ( configurationMap.contains( "efiSystemPartitionSize" ) )
{
const auto efiSystemPartition = Calamares::getString(
efiConfiguration,
"mountPoint",
Calamares::getString( configurationMap, "efiSystemPartition", QStringLiteral( "/boot/efi" ) ) );
// This specific GS key is also used by bootloader and grubcfg modules,
// as well as partition module internalls.
gs->insert( "efiSystemPartition", efiSystemPartition );
}
// Sizes
{
const auto efiRecommendedSize = Calamares::getString(
efiConfiguration, "recommendedSize", Calamares::getString( configurationMap, "efiSystemPartitionSize" ) );
if ( !efiRecommendedSize.isEmpty() )
const QString sizeString = Calamares::getString( configurationMap, "efiSystemPartitionSize" );
Calamares::Partition::PartitionSize part_size = Calamares::Partition::PartitionSize( sizeString );
if ( part_size.isValid() )
{
Calamares::Partition::PartitionSize part_size = Calamares::Partition::PartitionSize( efiRecommendedSize );
if ( part_size.isValid() )
{
gs->insert( PartUtils::efiFilesystemRecommendedSizeGSKey(), part_size.toBytes() );
// Insert once as string, once as a size-in-bytes;
// changes to these keys should be synchronized with PartUtils.cpp
gs->insert( "efiSystemPartitionSize", sizeString );
gs->insert( "efiSystemPartitionSize_i", part_size.toBytes() );
// Assign long long int to long unsigned int to prevent compilation warning,
// checks for loss-of-precision in the conversion.
auto byte_part_size = part_size.toBytes();
if ( byte_part_size != PartUtils::efiFilesystemRecommendedSize() )
{
cWarning() << "EFI partition size" << efiRecommendedSize << "has been adjusted to"
<< PartUtils::efiFilesystemRecommendedSize() << "bytes";
}
}
else
// Assign long long int to long unsigned int to prevent compilation warning
auto byte_part_size = part_size.toBytes();
if ( byte_part_size != PartUtils::efiFilesystemMinimumSize() )
{
cWarning() << "EFI partition size" << efiRecommendedSize << "is invalid, ignored";
cWarning() << "EFI partition size" << sizeString << "has been adjusted to"
<< PartUtils::efiFilesystemMinimumSize() << "bytes";
}
}
const auto efiMinimumSize = Calamares::getString( efiConfiguration, "minimumSize" );
if ( !efiMinimumSize.isEmpty() )
else
{
Calamares::Partition::PartitionSize part_size = Calamares::Partition::PartitionSize( efiMinimumSize );
if ( part_size.isValid() )
{
gs->insert( PartUtils::efiFilesystemMinimumSizeGSKey(), part_size.toBytes() );
}
cWarning() << "EFI partition size" << sizeString << "is invalid, ignored";
}
}
// Name (label) of partition
// Read and parse key efiSystemPartitionName
if ( configurationMap.contains( "efiSystemPartitionName" ) )
{
const auto efiLabel = Calamares::getString(
efiConfiguration, "label", Calamares::getString( configurationMap, "efiSystemPartitionName" ) );
if ( !efiLabel.isEmpty() )
{
gs->insert( "efiSystemPartitionName", efiLabel );
}
gs->insert( "efiSystemPartitionName", Calamares::getString( configurationMap, "efiSystemPartitionName" ) );
}
}

View File

@@ -527,8 +527,8 @@ PartitionViewStep::onLeave()
Logger::Once o;
const bool okType = esp && PartUtils::isEfiFilesystemSuitableType( esp );
const bool okRecommendedSize = esp && PartUtils::isEfiFilesystemRecommendedSize( esp );
const bool okMinimumSize = esp && PartUtils::isEfiFilesystemMinimumSize( esp );
const bool okRecommendedSize = esp && PartUtils::isEfiFilesystemSuitableSize( esp );
const bool okMinimumSize = esp && PartUtils::isEfiFilesystemSuitableMinimumSize( esp );
const bool okFlag = esp && PartUtils::isEfiBootable( esp );
const bool espExistsButIsWrong = esp && !( okType && okMinimumSize && okFlag );
@@ -552,21 +552,24 @@ PartitionViewStep::onLeave()
const QString wrongFlagMessage = tr( "The filesystem must have flag <strong>%1</strong> set." )
.arg( PartitionTable::flagName( PartitionTable::Flag::Boot ) );
const auto recommendedMiB = Calamares::BytesToMiB( PartUtils::efiFilesystemRecommendedSize() );
const auto minimumMiB = Calamares::BytesToMiB( PartUtils::efiFilesystemMinimumSize() );
// Three flavors of size-is-wrong
using Calamares::Units::operator""_MiB;
const qint64 atLeastBytes = static_cast< qint64 >( PartUtils::efiFilesystemMinimumSize() );
const auto atLeastMiB = Calamares::BytesToMiB( atLeastBytes );
const QString requireConfiguredSize
= tr( "The filesystem must be at least %1 MiB in size." ).arg( recommendedMiB );
= tr( "The filesystem must be at least %1 MiB in size." ).arg( atLeastMiB );
const QString requiredMinimumSize
= tr( "The filesystem must be at least %1 MiB in size." ).arg( minimumMiB );
= tr( "The filesystem must be at least %1 MiB in size." ).arg( Calamares::BytesToMiB( 32_MiB ) );
const QString suggestConfiguredSize
= tr( "The minimum recommended size for the filesystem is %1 MiB." ).arg( recommendedMiB );
= tr( "The minimum recommended size for the filesystem is %1 MiB." ).arg( atLeastMiB );
const QString mayFail = tr( "You can continue without setting up an EFI system "
"partition but your system may fail to start." );
const QString possibleFail = tr( "You can continue with this EFI system "
"partition configuration but your system may fail to start." );
"partition configuration but your system may fail to start." );
const QString startList = QStringLiteral( "<br/><br/><ul>" );
const QString endList = QStringLiteral( "</ul><br/><br/>" );

View File

@@ -35,10 +35,6 @@
using Calamares::Partition::isPartitionFreeSpace;
using Calamares::Partition::isPartitionNew;
using Calamares::Units::operator""_MiB;
static constexpr qint64 efiSpecificationHardMinimumSize = 32_MiB;
namespace PartUtils
{
@@ -475,7 +471,7 @@ isEfiFilesystemSuitableType( const Partition* candidate )
}
bool
isEfiFilesystemRecommendedSize( const Partition* candidate )
isEfiFilesystemSuitableSize( const Partition* candidate )
{
auto size = candidate->capacity(); // bytes
if ( size <= 0 )
@@ -483,7 +479,7 @@ isEfiFilesystemRecommendedSize( const Partition* candidate )
return false;
}
if ( size >= efiFilesystemRecommendedSize() )
if ( size >= efiFilesystemMinimumSize() )
{
return true;
}
@@ -495,7 +491,7 @@ isEfiFilesystemRecommendedSize( const Partition* candidate )
}
bool
isEfiFilesystemMinimumSize( const Partition* candidate )
isEfiFilesystemSuitableMinimumSize( const Partition* candidate )
{
using Calamares::Units::operator""_MiB;
@@ -504,12 +500,8 @@ isEfiFilesystemMinimumSize( const Partition* candidate )
{
return false;
}
if ( size < efiSpecificationHardMinimumSize )
{
return false;
}
if ( size >= efiFilesystemMinimumSize() )
if ( size >= 32_MiB )
{
return true;
}
@@ -530,65 +522,30 @@ isEfiBootable( const Partition* candidate )
return flags.testFlag( KPM_PARTITION_FLAG_ESP );
}
QString
efiFilesystemRecommendedSizeGSKey()
{
return QStringLiteral( "efiSystemPartitionSize_i" );
}
// TODO: this is configurable via the config file **already**
qint64
efiFilesystemRecommendedSize()
efiFilesystemMinimumSize()
{
const QString key = efiFilesystemRecommendedSizeGSKey();
using Calamares::Units::operator""_MiB;
qint64 uefisys_part_sizeB = 300_MiB;
// The default can be overridden; the key used here comes
// from the partition module Config.cpp
auto* gs = Calamares::JobQueue::instance()->globalStorage();
if ( gs->contains( key ) )
if ( gs->contains( "efiSystemPartitionSize_i" ) )
{
qint64 v = gs->value( key ).toLongLong();
qint64 v = gs->value( "efiSystemPartitionSize_i" ).toLongLong();
uefisys_part_sizeB = v > 0 ? v : 0;
}
// There is a lower limit of what can be configured
if ( uefisys_part_sizeB < efiSpecificationHardMinimumSize )
if ( uefisys_part_sizeB < 32_MiB )
{
uefisys_part_sizeB = efiSpecificationHardMinimumSize;
uefisys_part_sizeB = 32_MiB;
}
return uefisys_part_sizeB;
}
QString
efiFilesystemMinimumSizeGSKey()
{
return QStringLiteral( "efiSystemPartitionMinimumSize_i" );
}
qint64
efiFilesystemMinimumSize()
{
const QString key = efiFilesystemMinimumSizeGSKey();
qint64 uefisys_part_sizeB = efiFilesystemRecommendedSize();
// The default can be overridden; the key used here comes
// from the partition module Config.cpp
auto* gs = Calamares::JobQueue::instance()->globalStorage();
if ( gs->contains( key ) )
{
qint64 v = gs->value( key ).toLongLong();
uefisys_part_sizeB = v > 0 ? v : 0;
}
// There is a lower limit of what can be configured
if ( uefisys_part_sizeB < efiSpecificationHardMinimumSize )
{
uefisys_part_sizeB = efiSpecificationHardMinimumSize;
}
return uefisys_part_sizeB;
return efiSpecificationHardMinimumSize;
}
QString
canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType )
{

View File

@@ -95,15 +95,15 @@ bool isEfiFilesystemSuitableType( const Partition* candidate );
/**
* @brief Is the @p partition suitable as an EFI boot partition?
* Checks for filesystem size (300MiB, see efi.recommendedSize).
* Checks for filesystem size (300MiB, see efiFilesystemMinimumSize).
*/
bool isEfiFilesystemRecommendedSize( const Partition* candidate );
bool isEfiFilesystemSuitableSize( const Partition* candidate );
/**
* @brief Is the @p candidate suitable as an EFI boot partition?
* Checks for filesystem size (32MiB at least, see efi.minimumSize).
* This checks the bonkers-small minimum of 32MiB.
*/
bool isEfiFilesystemMinimumSize( const Partition* candidate );
bool isEfiFilesystemSuitableMinimumSize( const Partition* candidate );
/** @brief Returns the minimum size of an EFI boot partition in bytes.
*
@@ -113,25 +113,13 @@ bool isEfiFilesystemMinimumSize( const Partition* candidate );
* by the standard and how all of those are different).
*
* This can be configured through the `partition.conf` file,
* key *efi.recommendedSize*, which will then apply to both
* key *efiSystemPartitionSize*, which will then apply to both
* automatic partitioning **and** the warning for manual partitioning.
*
* A minimum of 32MiB (which is bonkers-small) is enforced.
*/
qint64 efiFilesystemRecommendedSize();
// Helper for consistency: the GS key used to share the recommended size
QString efiFilesystemRecommendedSizeGSKey();
/** @brief Returns the hard-minimum size of an EFI boot partition in bytes.
*
* This is 32MiB, based on the FAT32 standard and EFI documentation.
*/
qint64 efiFilesystemMinimumSize();
// Helper for consistency: the GS key used to share the minimum size
QString efiFilesystemMinimumSizeGSKey();
/**
* @brief Is the given @p partition bootable in EFI? Depending on
* the partition table layout, this may mean different flags.

View File

@@ -118,7 +118,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO
if ( isEfi )
{
qint64 uefisys_part_sizeB = PartUtils::efiFilesystemRecommendedSize();
qint64 uefisys_part_sizeB = PartUtils::efiFilesystemMinimumSize();
qint64 efiSectorCount = Calamares::bytesToSectors( uefisys_part_sizeB, dev->logicalSize() );
Q_ASSERT( efiSectorCount > 0 );

View File

@@ -1,49 +1,26 @@
# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Options for EFI system partition.
# This setting specifies the mount point of the EFI system partition. Some
# distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS,
# etc.) use just /boot.
#
# - *mountPoint*
# This setting specifies the mount point of the EFI system partition. Some
# distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS,
# etc.) use just /boot.
#
# Defaults to "/boot/efi", may be empty (but weird effects ensue)
# - *recommendedSize*
# This optional setting specifies the size of the EFI system partition.
# If nothing is specified, the default size of 300MiB will be used.
# When writing quantities here, M is treated as MiB, and if you really
# want one-million (10^6) bytes, use MB.
# - *minimumSize*
# This optional setting specifies the absolute minimum size of the EFI
# system partition. If nothing is specified, the *recommendedSize*
# is used instead.
# - *label*
# This optional setting specifies the name of the EFI system partition (see
# PARTLABEL; gpt only; requires KPMCore >= 4.2.0).
# If nothing is specified, the partition name is left unset.
#
# Going below the *recommended* size is allowed, but the user will
# get a warning that it might not work. Going below the *minimum*
# size is not allowed and the user will be told it will not work.
#
# Both quantities must be at least 32MiB, this is enforced by the EFI
# spec. If minimum is not specified, it defaults to the recommended
# size. Distro's that allow more user latitude can set the minimum lower.
efi:
mountPoint: "/boot/efi"
recommendedSize: 300MiB
minimumSize: 32MiB
label: "EFI"
# Defaults to "/boot/efi", may be empty (but weird effects ensue)
efiSystemPartition: "/boot/efi"
# Deprecated alias of efi.mountPoint
# efiSystemPartition: "/boot/efi"
# This optional setting specifies the size of the EFI system partition.
# If nothing is specified, the default size of 300MiB will be used.
#
# This size applies both to automatic partitioning and the checks
# during manual partitioning. A minimum of 32MiB is enforced,
# 300MiB is the default, M is treated as MiB, and if you really want
# one-million (10^6) bytes, use MB.
#
# efiSystemPartitionSize: 300M
# Deprecated alias of efi.recommendedSize
# efiSystemPartitionSize: 300MiB
# Deprecated alias of efi.label
# This optional setting specifies the name of the EFI system partition (see
# PARTLABEL; gpt only; requires KPMCore >= 4.2.0).
# If nothing is specified, the partition name is left unset.
# efiSystemPartitionName: EFI
# In autogenerated partitioning, allow the user to select a swap size?
@@ -193,8 +170,8 @@ initialSwapChoice: none
# Default filesystem type, used when a "new" partition is made.
#
# When replacing a partition, the new filesystem type will be from the
# defaultFileSystemType value. In other cases, e.g. Erase and Alongside,
# When replacing a partition, the existing filesystem inside the
# partition is retained. In other cases, e.g. Erase and Alongside,
# as well as when using manual partitioning and creating a new
# partition, this filesystem type is pre-selected. Note that
# editing a partition in manual-creation mode will not automatically

View File

@@ -7,18 +7,9 @@ $id: https://calamares.io/schemas/partition
additionalProperties: false
type: object
properties:
efiSystemPartition: { type: string } # Deprecated alias of efi.mountPoint
efiSystemPartitionSize: { type: string } # Deprecated alias of efi.recommendedSize
efiSystemPartitionName: { type: string } # Deprecated alias of efi.label
efi:
type: object
properties:
recommendedSize: { type: string }
minimumSize: { type: string }
label: { type: string }
mountPoint: { type: string }
additionalProperties: false
efiSystemPartition: { type: string } # Mount point
efiSystemPartitionSize: { type: string }
efiSystemPartitionName: { type: string }
userSwapChoices: { type: array, items: { type: string, enum: [ none, reuse, small, suspend, file ] } }
# ensureSuspendToDisk: { type: boolean, default: true } # Legacy
@@ -43,4 +34,5 @@ properties:
requiredStorage: { type: number }
required:
- efiSystemPartition
- userSwapChoices

View File

@@ -1,2 +0,0 @@
---
efiSystemPartitionSize: 100MiB

View File

@@ -1,2 +0,0 @@
---
efiSystemPartitionSize: 100MB

View File

@@ -1,9 +0,0 @@
---
# Deprecated alias of efi.mountPoint
efiSystemPartition: "/boot/thisisatest"
# Deprecated alias of efi.recommendedSize
efiSystemPartitionSize: 75MiB
# Deprecated alias of efi.label
efiSystemPartitionName: testLabel

View File

@@ -1,6 +0,0 @@
---
efi:
mountPoint: "/boot/thisismodern"
recommendedSize: 80MiB
minimumSize: 65MiB
label: "UEFI"

View File

@@ -1,7 +0,0 @@
---
efi:
mountPoint: "/boot/thisismixed"
minimumSize: 80MiB
efiSystemPartitionSize: 175MiB
efiSystemPartitionName: legacy

View File

@@ -1,9 +0,0 @@
---
efi:
mountPoint: "/boot/thisoverlaps"
minimumSize: 100MiB
recommendedSize: 300MiB
efiSystemPartition: "/boot/ignored"
efiSystemPartitionSize: 175MiB
efiSystemPartitionName: legacy

View File

@@ -61,16 +61,3 @@ calamares_add_test(
LIBRARIES calamares::kpmcore
DEFINITIONS ${_partition_defs}
)
calamares_add_test(
partitionconfigtest
SOURCES
ConfigTests.cpp
${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp
${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp
${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp
${PartitionModule_SOURCE_DIR}/Config.cpp
LIBRARIES calamares::kpmcore Calamares::calamaresui
DEFINITIONS
${_partition_defs}
)

View File

@@ -1,203 +0,0 @@
/* === This file is part of Calamares - <https://calamares.io> ===
*
* SPDX-FileCopyrightText: 2023 Adriaan de Groot <groot@kde.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*
* Calamares is Free Software: see the License-Identifier above.
*
*/
#include "Config.h"
#include "core/PartUtils.h"
#include "GlobalStorage.h"
#include "JobQueue.h"
#include "utils/Logger.h"
#include "utils/System.h"
#include "utils/Yaml.h"
#include <QObject>
#include <QtTest/QtTest>
using Calamares::Units::operator""_MiB;
class ConfigTests : public QObject
{
Q_OBJECT
public:
ConfigTests();
private Q_SLOTS:
void initTestCase();
void testEmptyConfig();
void testLegacySize();
void testAll();
};
ConfigTests::ConfigTests() = default;
void
ConfigTests::initTestCase()
{
Logger::setupLogLevel( Logger::LOGVERBOSE );
// Ensure we have a system object, expect it to be a "bogus" one
Calamares::System* system = Calamares::System::instance();
QVERIFY( system );
QVERIFY( system->doChroot() );
// Ensure we have a system-wide GlobalStorage with /tmp as root
if ( !Calamares::JobQueue::instance() )
{
cDebug() << "Creating new JobQueue";
(void)new Calamares::JobQueue();
}
Calamares::GlobalStorage* gs
= Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr;
QVERIFY( gs );
}
void
ConfigTests::testEmptyConfig()
{
Config c( nullptr );
c.setConfigurationMap( {} );
const auto* gs = Calamares::JobQueue::instanceGlobalStorage();
QVERIFY( gs );
QVERIFY( c.initialInstallChoice() == Config::InstallChoice::NoChoice );
QVERIFY( !gs->value( PartUtils::efiFilesystemRecommendedSizeGSKey() ).isValid() ); // Nothing filled in
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 300_MiB ); // Default value
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 300_MiB ); // Default value
const auto firmware = gs->value( "firmwareType" ).toString();
QVERIFY( firmware == "efi" || firmware == "bios" );
QCOMPARE( gs->value( "efiSystemPartition" ).toString(), "/boot/efi" ); // Default
}
void
ConfigTests::testLegacySize()
{
Config c( nullptr );
auto* gs = Calamares::JobQueue::instanceGlobalStorage();
QVERIFY( gs );
// Config with just one legacy key
{
const auto file = QStringLiteral( BUILD_AS_TEST "/1a-legacy.conf" );
bool ok = false;
c.setConfigurationMap( Calamares::YAML::load( file, &ok ) );
cDebug() << "Tried to load" << file << "success?" << ok;
QVERIFY( ok );
QVERIFY( gs->value( PartUtils::efiFilesystemRecommendedSizeGSKey() ).isValid() ); // Something was filled in
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 100_MiB ); // From config
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 100_MiB ); // Taken from config
}
// Different legacy key value
{
bool ok = false;
c.setConfigurationMap( Calamares::YAML::load( QStringLiteral( BUILD_AS_TEST "/1b-legacy.conf" ), &ok ) );
QVERIFY( ok );
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 100000000 ); // From config, MB
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 100000000 ); // Taken from config
}
}
void
ConfigTests::testAll()
{
Config c( nullptr );
auto* gs = Calamares::JobQueue::instanceGlobalStorage();
QVERIFY( gs );
// Legacy only
{
gs->clear();
const auto file = QStringLiteral( BUILD_AS_TEST "/2a-legacy.conf" );
bool ok = false;
c.setConfigurationMap( Calamares::YAML::load( file, &ok ) );
cDebug() << "Tried to load" << file << "success?" << ok;
QVERIFY( ok );
QVERIFY( gs->value( PartUtils::efiFilesystemRecommendedSizeGSKey() ).isValid() ); // Something was filled in
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 75_MiB ); // From config
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 75_MiB ); // No separate setting
QCOMPARE( gs->value( "efiSystemPartition" ).toString(), QStringLiteral( "/boot/thisisatest" ) );
QCOMPARE( gs->value( "efiSystemPartitionName" ).toString(), QStringLiteral( "testLabel" ) );
}
// Modern only
{
gs->clear();
bool ok = false;
c.setConfigurationMap( Calamares::YAML::load( QStringLiteral( BUILD_AS_TEST "/2b-modern.conf" ), &ok ) );
QVERIFY( ok );
QVERIFY( PartUtils::efiFilesystemRecommendedSizeGSKey() != PartUtils::efiFilesystemMinimumSizeGSKey() );
QCOMPARE( gs->value( PartUtils::efiFilesystemRecommendedSizeGSKey() ).toString(),
QStringLiteral( "83886080" ) );
QCOMPARE( gs->value( PartUtils::efiFilesystemMinimumSizeGSKey() ).toString(), QStringLiteral( "68157440" ) );
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 80_MiB ); // From config
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 65_MiB ); // Taken from config
QCOMPARE( gs->value( "efiSystemPartition" ).toString(), QStringLiteral( "/boot/thisismodern" ) );
QCOMPARE( gs->value( "efiSystemPartitionName" ).toString(), QStringLiteral( "UEFI" ) );
}
// Mixed settings
{
gs->clear();
bool ok = false;
c.setConfigurationMap( Calamares::YAML::load( QStringLiteral( BUILD_AS_TEST "/2c-mixed.conf" ), &ok ) );
QVERIFY( ok );
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 175_MiB ); // From config
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 80_MiB ); // Taken from config
QCOMPARE( gs->value( "efiSystemPartition" ).toString(), QStringLiteral( "/boot/thisismixed" ) );
QCOMPARE( gs->value( "efiSystemPartitionName" ).toString(), QStringLiteral( "legacy" ) );
}
// Mixed settings with overlap
{
gs->clear();
bool ok = false;
c.setConfigurationMap( Calamares::YAML::load( QStringLiteral( BUILD_AS_TEST "/2d-overlap.conf" ), &ok ) );
QVERIFY( ok );
QCOMPARE( PartUtils::efiFilesystemRecommendedSize(), 300_MiB ); // From modern config
QCOMPARE( PartUtils::efiFilesystemMinimumSize(), 100_MiB ); // Taken from modern config, legacy ignored
QCOMPARE( gs->value( "efiSystemPartition" ).toString(), QStringLiteral( "/boot/thisoverlaps" ) );
QCOMPARE( gs->value( "efiSystemPartitionName" ).toString(), QStringLiteral( "legacy" ) );
}
}
QTEST_GUILESS_MAIN( ConfigTests )
#include "utils/moc-warnings.h"
#include "ConfigTests.moc"

View File

@@ -176,7 +176,7 @@ def file_copy(source, entry, progress_cb):
num_files_total_local = 0
num_files_copied = 0 # Gets updated through rsync output
args = ['rsync', '-aHAXSr', '--filter=-x trusted.overlay.*']
args = ['rsync', '-aHAXr', '--filter=-x trusted.overlay.*']
args.extend(global_excludes())
if entry.excludeFile:
args.extend(["--exclude-from=" + entry.excludeFile])