diff --git a/CHANGES b/CHANGES
index 88d8c7350..0f8963ae1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,7 +3,7 @@ contributors are listed. Note that Calamares does not have a historical
changelog -- this log starts with version 3.2.0. The release notes on the
website will have to do for older versions.
-# 3.2.3 (unreleased) #
+# 3.2.4 (unreleased) #
This release contains contributions from (alphabetically by first name):
- Alf Gaida
@@ -45,6 +45,30 @@ This release contains contributions from (alphabetically by first name):
for all operations, not just during install (keep in mind that
these run as three separate shells, though).
+
+# 3.2.3 (2019-01-09) #
+
+This release contains contributions from (alphabetically by first name):
+ - aliveafter1000
+
+## Core ##
+
+There are no core changes in this release.
+
+## Modules ##
+
+ * *partition* Fixed bug where, during detection of existing systems, the
+ existing system partitions may be mounted and then files deleted.
+ This is a **limited** version of the patch from aliveafter1000
+ that will be in 3.2.4, which tries harder to mount filesystems
+ read-only and unmodifiable.
+ * *locale* It was possible to set the installer and system language
+ (e.g. to German) while the global storage value for *locale*
+ remained set to English. Then no localization packages are installed
+ (see feature `${LOCALE}` in `packages.conf`). Reported downstream
+ in Netrunner.
+
+
# 3.2.2 (2018-09-04) #
This release contains contributions from (alphabetically by first name):
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e929f298c..ee8a2d9a6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,6 +46,7 @@ option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON )
option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." ON )
option( WITH_KF5Crash "Enable crash reporting with KCrash." ON )
+
### USE_*
#
# By convention, when there are multiple modules that implement similar
@@ -74,9 +75,10 @@ set( CALAMARES_DESCRIPTION_SUMMARY
set( CALAMARES_VERSION_MAJOR 3 )
set( CALAMARES_VERSION_MINOR 2 )
-set( CALAMARES_VERSION_PATCH 2.6 )
+set( CALAMARES_VERSION_PATCH 3 )
set( CALAMARES_VERSION_RC 0 )
+
### Transifex (languages) info
#
# complete = 100% translated,
@@ -101,17 +103,17 @@ set( CALAMARES_VERSION_RC 0 )
# checks for new languages and misspelled ones are done (that is,
# copy these four lines to four backup lines, add "p", and then update
# the original four lines with the current translations).
-set( _tx_complete ca zh_TW hr cs_CZ da et fr id it_IT lt pl pt_PT es_MX tr_TR )
-set( _tx_good sq de pt_BR zh_CN ja ro es sk )
-set( _tx_ok hu ru he nl bg uk ast is ko ar sv el gl en_GB
- th fi_FI hi eu nb sr sl sr@latin mr es_PR kn kk be )
-set( _tx_bad fr_CH gu lo fa ur uz eo )
-
+set( _tx_complete zh_TW tr_TR sk pt_PT pt_BR pl lt ja id hr gl fr
+ et de da cs_CZ ca )
+set( _tx_good es sq es_MX zh_CN it_IT he en_GB ru ro hi bg hu )
+set( _tx_ok uk nl ast ko is ar sv el th fi_FI eu sr nb sl
+ sr@latin mr es_PR )
+set( _tx_bad eo kk kn uz ur mk lo gu fr_CH fa be )
### Required versions
#
# See DEPENDENCIES section below.
-set( QT_VERSION 5.7.0 )
+set( QT_VERSION 5.10.0 )
set( YAMLCPP_VERSION 0.5.1 )
set( ECM_VERSION 5.18 )
set( PYTHONLIBS_VERSION 3.3 )
@@ -142,6 +144,26 @@ set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( CMAKE_C_STANDARD 99 )
set( CMAKE_C_STANDARD_REQUIRED ON )
+# Debugging flags
+#
+# Possible debugging flags are:
+# - DEBUG_TIMEZONES draws latitude and longitude lines on the timezone
+# widget and enables chatty debug logging, for dealing with the timezone
+# location database.
+# - DEBUG_FILESYSTEMS does extra logging and checking when looking at
+# partition configuration. Lists known KPMCore FS types.
+#
+# The flags listed here are enabled in Debug builds. By default, none
+# are **actually** listed, because they're for such specific scenarios.
+set( _enable_debug_flags
+ # DEBUG_TIMEZONES
+ # DEBUG_FILESYSTEMS
+)
+# Add those flags to the CXX flags in a suitable format.
+foreach( _edf ${_enable_debug_flags} )
+ string( APPEND CMAKE_CXX_FLAGS_DEBUG " -D${_edf}" )
+endforeach()
+
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" )
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
message( STATUS "Found Clang ${CMAKE_CXX_COMPILER_VERSION}, setting up Clang-specific compiler flags." )
@@ -175,7 +197,7 @@ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( SUPPRESS_3RDPARTY_WARNINGS "-Wno-everything" )
set( SUPPRESS_BOOST_WARNINGS " -Wno-zero-as-null-pointer-constant -Wno-disabled-macro-expansion" )
- set( CMAKE_CXX_FLAGS_DEBUG "-g" )
+ set( CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_CXX_FLAGS_DEBUG}" )
set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
set( CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG" )
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
@@ -294,12 +316,14 @@ endif()
#
set( prev_tx ${p_tx_complete} ${p_tx_good} ${p_tx_ok} ${p_tx_bad} )
set( curr_tx ${_tx_complete} ${_tx_good} ${_tx_ok} ${_tx_bad} )
+set( tx_errors OFF )
if ( prev_tx )
# Gone in new list
foreach( l ${prev_tx} )
list( FIND curr_tx ${l} p_l )
if( p_l EQUAL -1 )
message(WARNING "Language ${l} was present in previous translations and is now absent.")
+ set( tx_errors ON )
endif()
endforeach()
@@ -308,10 +332,12 @@ if ( prev_tx )
list( FIND prev_tx ${l} p_l )
if( p_l EQUAL -1 )
message(WARNING "Language ${l} is new.")
+ set( tx_errors ON )
endif()
set( p_l "lang/calamares_${l}.ts" )
if( NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${p_l} )
message(WARNING "Language ${l} has no .ts file yet.")
+ set( tx_errors ON )
endif()
endforeach()
@@ -320,6 +346,9 @@ if ( prev_tx )
endif()
unset( prev_tx )
unset( curr_tx )
+if( tx_errors )
+ message( FATAL_ERROR "Translation warnings, see above." )
+endif()
set( CALAMARES_TRANSLATION_LANGUAGES en ${_tx_complete} ${_tx_good} ${_tx_ok} )
list( SORT CALAMARES_TRANSLATION_LANGUAGES )
diff --git a/calamares.desktop b/calamares.desktop
index ca766ec81..79180c475 100644
--- a/calamares.desktop
+++ b/calamares.desktop
@@ -13,169 +13,179 @@ StartupNotify=true
Categories=Qt;System;
X-AppStream-Ignore=true
-Name[ar]=نظام التثبيت
-Comment[be]=Calamares — усталёўшчык сістэмы
-Icon[be]=calamares
+Name[ar]=تثبيت النظام
+Icon[ar]=كالامارس
+GenericName[ar]=مثبت النظام
+Comment[ar]=كالامارس - مثبت النظام
Name[be]=Усталяваць сістэму
+Icon[be]=calamares
GenericName[be]=Усталёўшчык сістэмы
-Comment[bg]=Calamares — Системен Инсталатор
-Icon[bg]=calamares
+Comment[be]=Calamares — усталёўшчык сістэмы
Name[bg]=Инсталирай системата
+Icon[bg]=calamares
GenericName[bg]=Системен Инсталатор
-Comment[ca]=Calamares — Instal·lador de sistema
-Icon[ca]=calamares
+Comment[bg]=Calamares — Системен Инсталатор
Name[ca]=Instal·la el sistema
+Icon[ca]=calamares
GenericName[ca]=Instal·lador de sistema
-Comment[da]=Calamares — Systeminstallationsprogram
-Icon[da]=calamares
+Comment[ca]=Calamares — Instal·lador de sistema
Name[da]=Installér system
+Icon[da]=calamares
GenericName[da]=Systeminstallationsprogram
-Comment[de]=Calamares - Installation des Betriebssystems
-Icon[de]=calamares
+Comment[da]=Calamares — Systeminstallationsprogram
Name[de]=System installieren
+Icon[de]=calamares
GenericName[de]=Installation des Betriebssystems
-Comment[el]=Calamares — Εγκατάσταση συστήματος
-Icon[el]=calamares
+Comment[de]=Calamares - Installation des Betriebssystems
Name[el]=Εγκατάσταση συστήματος
+Icon[el]=calamares
GenericName[el]=Εγκατάσταση συστήματος
-Comment[en_GB]=Calamares — System Installer
-Icon[en_GB]=calamares
+Comment[el]=Calamares — Εγκατάσταση συστήματος
Name[en_GB]=Install System
+Icon[en_GB]=calamares
GenericName[en_GB]=System Installer
-Comment[es]=Calamares — Instalador del Sistema
-Icon[es]=calamares
+Comment[en_GB]=Calamares — System Installer
Name[es]=Instalar Sistema
+Icon[es]=calamares
GenericName[es]=Instalador del Sistema
-Comment[et]=Calamares — süsteemipaigaldaja
-Icon[et]=calamares
+Comment[es]=Calamares — Instalador del Sistema
Name[et]=Paigalda süsteem
+Icon[et]=calamares
GenericName[et]=Süsteemipaigaldaja
+Comment[et]=Calamares — süsteemipaigaldaja
Name[eu]=Sistema instalatu
+Icon[eu]=calamares
+GenericName[eu]=Sistema instalatzailea
+Comment[eu]=Calamares - sistema instalatzailea
Name[es_PR]=Instalar el sistema
-Comment[fr]=Calamares - Installateur système
-Icon[fr]=calamares
Name[fr]=Installer le système
+Icon[fr]=calamares
GenericName[fr]=Installateur système
-Comment[gl]=Calamares — Instalador de sistemas
-Icon[gl]=calamares
+Comment[fr]=Calamares - Installateur système
Name[gl]=Instalación do Sistema
+Icon[gl]=calamares
GenericName[gl]=Instalador de sistemas
-Comment[he]=Calamares - אשף התקנה
-Icon[he]=calamares
+Comment[gl]=Calamares — Instalador de sistemas
Name[he]=התקנת מערכת
+Icon[he]=calamares
GenericName[he]=אשף התקנה
-Comment[hi]=Calamares — सिस्टम इंस्टॉलर
-Icon[hi]=calamares
+Comment[he]=Calamares - אשף התקנה
Name[hi]=सिस्टम इंस्टॉल करें
+Icon[hi]=calamares
GenericName[hi]=सिस्टम इंस्टॉलर
-Comment[hr]=Calamares — Instalacija sustava
-Icon[hr]=calamares
+Comment[hi]=Calamares — सिस्टम इंस्टॉलर
Name[hr]=Instaliraj sustav
+Icon[hr]=calamares
GenericName[hr]=Instalacija sustava
-Comment[hu]=Calamares – Rendszertelepítő
-Icon[hu]=calamares
+Comment[hr]=Calamares — Instalacija sustava
Name[hu]=Rendszer telepítése
+Icon[hu]=calamares
GenericName[hu]=Rendszertelepítő
-Comment[id]=Calamares — Pemasang Sistem
-Icon[id]=calamares
+Comment[hu]=Calamares – Rendszertelepítő
Name[id]=Instal Sistem
+Icon[id]=calamares
GenericName[id]=Pemasang
-Comment[is]=Calamares — Kerfis uppsetning
-Icon[is]=calamares
+Comment[id]=Calamares — Pemasang Sistem
Name[is]=Setja upp kerfið
+Icon[is]=calamares
GenericName[is]=Kerfis uppsetning
-Comment[cs_CZ]=Calamares – instalátor operačních systémů
-Icon[cs_CZ]=calamares
+Comment[is]=Calamares — Kerfis uppsetning
Name[cs_CZ]=Nainstalovat
+Icon[cs_CZ]=calamares
GenericName[cs_CZ]=Instalátor systému
-Comment[ja]=Calamares — システムインストーラー
-Icon[ja]=calamares
+Comment[cs_CZ]=Calamares – instalátor operačních systémů
Name[ja]=システムをインストール
+Icon[ja]=calamares
GenericName[ja]=システムインストーラー
-Comment[ko]=깔라마레스 — 시스템 설치 관리자
-Icon[ko]=깔라마레스
+Comment[ja]=Calamares — システムインストーラー
Name[ko]=시스템 설치
+Icon[ko]=깔라마레스
GenericName[ko]=시스템 설치 관리자
-Comment[lt]=Calamares — Sistemos diegimo programa
-Icon[lt]=calamares
+Comment[ko]=깔라마레스 — 시스템 설치 관리자
Name[lt]=Įdiegti Sistemą
+Icon[lt]=calamares
GenericName[lt]=Sistemos diegimas į kompiuterį
-Comment[it_IT]=Calamares — Programma d'installazione del sistema
-Icon[it_IT]=calamares
+Comment[lt]=Calamares — Sistemos diegimo programa
Name[it_IT]=Installa il sistema
+Icon[it_IT]=calamares
GenericName[it_IT]=Programma d'installazione del sistema
-Comment[nb]=Calamares-systeminstallatør
-Icon[nb]=calamares
+Comment[it_IT]=Calamares — Programma d'installazione del sistema
+Name[mk]=Инсталирај го системот
+Icon[mk]=calamares
+GenericName[mk]=Системен Инсталер
+Comment[mk]=Calamares - Системен Инсталер
Name[nb]=Installer System
+Icon[nb]=calamares
GenericName[nb]=Systeminstallatør
-Comment[nl]=Calamares — Installatieprogramma
-Icon[nl]=calamares
+Comment[nb]=Calamares-systeminstallatør
Name[nl]=Installeer systeem
+Icon[nl]=calamares
GenericName[nl]=Installatieprogramma
-Comment[pl]=Calamares — Instalator systemu
-Icon[pl]=calamares
+Comment[nl]=Calamares — Installatieprogramma
Name[pl]=Zainstaluj system
+Icon[pl]=calamares
GenericName[pl]=Instalator systemu
-Comment[pt_BR]=Calamares — Instalador de Sistema
-Icon[pt_BR]=calamares
+Comment[pl]=Calamares — Instalator systemu
Name[pt_BR]=Sistema de Instalação
+Icon[pt_BR]=calamares
GenericName[pt_BR]=Instalador de Sistema
-Comment[ro]=Calamares — Instalator de sistem
-Icon[ro]=calamares
+Comment[pt_BR]=Calamares — Instalador de Sistema
Name[ro]=Instalează sistemul
+Icon[ro]=calamares
GenericName[ro]=Instalator de sistem
-Comment[ru]=Calamares - Установщик системы
-Icon[ru]=calamares
+Comment[ro]=Calamares — Instalator de sistem
Name[ru]=Установить систему
+Icon[ru]=calamares
GenericName[ru]=Установщик системы
-Comment[sk]=Calamares — Inštalátor systému
-Icon[sk]=calamares
+Comment[ru]=Calamares - Установщик системы
Name[sk]=Inštalovať systém
+Icon[sk]=calamares
GenericName[sk]=Inštalátor systému
+Comment[sk]=Calamares — Inštalátor systému
Name[sl]=Namesti sistem
-Comment[sq]=Calamares — Instalues Sistemi
-Icon[sq]=calamares
Name[sq]=Instalo Sistemin
+Icon[sq]=calamares
GenericName[sq]=Instalues Sistemi
-Comment[fi_FI]=Calamares — Järjestelmän Asentaja
-Icon[fi_FI]=calamares
+Comment[sq]=Calamares — Instalues Sistemi
Name[fi_FI]=Asenna Järjestelmä
+Icon[fi_FI]=calamares
GenericName[fi_FI]=Järjestelmän Asennusohjelma
+Comment[fi_FI]=Calamares — Järjestelmän Asentaja
Name[sr@latin]=Instaliraj sistem
Name[sr]=Инсталирај систем
-Comment[sv]=Calamares — Systeminstallerare
-Icon[sv]=calamares
Name[sv]=Installera system
+Icon[sv]=calamares
GenericName[sv]=Systeminstallerare
+Comment[sv]=Calamares — Systeminstallerare
Name[th]=ติดตั้งระบบ
-Comment[uk]=Calamares - Встановлювач системи
Name[uk]=Встановити Систему
GenericName[uk]=Встановлювач системи
-Comment[zh_CN]=Calamares — 系统安装程序
-Icon[zh_CN]=calamares
+Comment[uk]=Calamares - Встановлювач системи
Name[zh_CN]=安装系统
+Icon[zh_CN]=calamares
GenericName[zh_CN]=系统安装程序
-Comment[zh_TW]=Calamares ── 系統安裝程式
-Icon[zh_TW]=calamares
+Comment[zh_CN]=Calamares — 系统安装程序
Name[zh_TW]=安裝系統
+Icon[zh_TW]=calamares
GenericName[zh_TW]=系統安裝程式
-Comment[ast]=Calamares — Instalador del sistema
-Icon[ast]=calamares
+Comment[zh_TW]=Calamares ── 系統安裝程式
Name[ast]=Instalar sistema
+Icon[ast]=calamares
GenericName[ast]=Instalador del sistema
-Comment[eo]=Calamares — Sistema Instalilo
-Icon[eo]=calamares
+Comment[ast]=Calamares — Instalador del sistema
Name[eo]=Instali Sistemo
+Icon[eo]=calamares
GenericName[eo]=Sistema Instalilo
-Comment[es_MX]=Calamares - Instalador del sistema
-Icon[es_MX]=calamares
+Comment[eo]=Calamares — Sistema Instalilo
Name[es_MX]=Instalar el Sistema
+Icon[es_MX]=calamares
GenericName[es_MX]=Instalador del sistema
-Comment[pt_PT]=Calamares - Instalador de Sistema
-Icon[pt_PT]=calamares
+Comment[es_MX]=Calamares - Instalador del sistema
Name[pt_PT]=Instalar Sistema
+Icon[pt_PT]=calamares
GenericName[pt_PT]=Instalador de Sistema
-Comment[tr_TR]=Calamares — Sistem Yükleyici
-Icon[tr_TR]=calamares
+Comment[pt_PT]=Calamares - Instalador de Sistema
Name[tr_TR]=Sistemi Yükle
+Icon[tr_TR]=calamares
GenericName[tr_TR]=Sistem Yükleyici
+Comment[tr_TR]=Calamares — Sistem Yükleyici
diff --git a/ci/travis-config.sh b/ci/travis-config.sh
index 85e6a9790..565b3deba 100644
--- a/ci/travis-config.sh
+++ b/ci/travis-config.sh
@@ -5,6 +5,7 @@
# This file is sourced by travis.sh, and exports the variables
# to the environment.
CMAKE_ARGS="\
+ -DCMAKE_BUILD_TYPE=Release \
-DWEBVIEW_FORCE_WEBKIT=1 \
-DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
-DWITH_PYTHONQT=OFF"
diff --git a/ci/travis-continuous.sh b/ci/travis-continuous.sh
index 1b3841e54..aefaca6f8 100755
--- a/ci/travis-continuous.sh
+++ b/ci/travis-continuous.sh
@@ -12,23 +12,26 @@ test -f $SRCDIR/CMakeLists.txt || { echo "! Missing $SRCDIR/CMakeLists.txt" ; ex
cd $BUILDDIR || exit 1
+section() {
echo "###"
-echo "### cmake $CMAKE_ARGS $SRCDIR"
+echo "### $1"
echo "###"
+pwd -P
+df -h
+}
+
+section "cmake $CMAKE_ARGS $SRCDIR"
cmake $CMAKE_ARGS $SRCDIR || { echo "! CMake failed" ; exit 1 ; }
-echo -e "###\n### make\n###"
-make -j2 || { make -j1 VERBOSE=1 ; echo "! Make failed" ; exit 1 ; }
+section "make"
+make -j2 || { echo "! Make recheck" ; pwd -P ; df -h ; make -j1 VERBOSE=1 ; echo "! Make failed" ; exit 1 ; }
-echo -e "###\n### make install\n###"
+section "make install"
install_debugging() {
ls -la $( find "$1" -type f -name '*.so' )
}
-echo "# System status"
-df -h
-
echo "# Build results"
install_debugging "$BUILDDIR"
@@ -45,10 +48,8 @@ else
result=false
fi
-echo "# System status"
-df -h
-echo "# Install results"
+section "Install results"
install_debugging "$DESTDIR"
$result || { echo "! Install failed" ; exit 1 ; } # Result of make install, above
diff --git a/ci/txstats.py b/ci/txstats.py
new file mode 100644
index 000000000..368ce503e
--- /dev/null
+++ b/ci/txstats.py
@@ -0,0 +1,87 @@
+#! /usr/bin/env python
+#
+# Uses the Transifex API to get a list of enabled languages,
+# and outputs CMake settings for inclusion into CMakeLists.txt.
+import sys
+
+def get_tx_credentials():
+ """
+ Gets the API token out of the user's .transifexrc (this is supposed
+ to be secure).
+ """
+ import configparser
+ import os
+ txconfig_name = os.path.expanduser("~/.transifexrc")
+ try:
+ with open(txconfig_name, "r") as f:
+ parser = configparser.SafeConfigParser()
+ parser.readfp(f)
+
+ return parser.get("https://www.transifex.com", "password")
+ except IOError as e:
+ return None
+
+def output_langs(all_langs, label, filterfunc):
+ """
+ Output (via print) all of the languages in @p all_langs
+ that satisfy the translation-percentage filter @p filterfunc.
+ Prints a CMake set() command with the @p label as part
+ of the variable name.
+
+ Performs line-wrapping.
+ """
+ these_langs = [l for s, l in all_langs if filterfunc(s)]
+ out = " ".join(["set( _tx_%s" % label, " ".join(these_langs), ")"])
+ width = 68
+ prefix = ""
+
+ while len(out) > width - len(prefix):
+ chunk = out[:out[:width].rfind(" ")]
+ print("%s%s" % (prefix, chunk))
+ out = out[len(chunk)+1:]
+ prefix = " "
+ print("%s%s" % (prefix, out))
+
+def get_tx_stats(token):
+ """
+ Does an API request to Transifex with the given API @p token, getting
+ the translation statistics for the main body of texts. Then prints
+ out CMake settings to replace the _tx_* variables in CMakeLists.txt
+ according to standard criteria.
+ """
+ import requests
+
+ r = requests.get("https://api.transifex.com/organizations/calamares/projects/calamares/resources/calamares-master/", auth=("api", token))
+ if r.status_code != 200:
+ return 1
+
+ all_langs = []
+
+ j = r.json()
+ languages = j["stats"]
+ print("# Total %d languages" % len(languages))
+ for lang_name in languages:
+ stats = languages[lang_name]["translated"]["percentage"]
+ all_langs.append((stats, lang_name))
+
+ all_langs.sort(reverse=True)
+
+ output_langs(all_langs, "complete", lambda s : s == 1.0)
+ output_langs(all_langs, "good", lambda s : 1.0 > s >= 0.75)
+ output_langs(all_langs, "ok", lambda s : 0.75 > s >= 0.05)
+ output_langs(all_langs, "bad", lambda s : 0.05 > s)
+
+ return 0
+
+
+def main():
+ cred = get_tx_credentials()
+ if cred:
+ return get_tx_stats(cred)
+ else:
+ print("! Could not find API token in ~/.transifexrc")
+ return 1
+ return 0
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
index 65c0c4ca2..37ea8356c 100644
--- a/lang/CMakeLists.txt
+++ b/lang/CMakeLists.txt
@@ -18,7 +18,8 @@
#
###
-find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Xml )
-
-add_executable(txload txload.cpp)
-target_link_libraries(txload Qt5::Xml)
+find_package(Qt5 COMPONENTS Xml)
+if( Qt5Xml_FOUND )
+ add_executable(txload txload.cpp)
+ target_link_libraries(txload Qt5::Xml)
+endif()
diff --git a/lang/calamares_ar.ts b/lang/calamares_ar.ts
index 32ed6c1d7..f50c7d51f 100644
--- a/lang/calamares_ar.ts
+++ b/lang/calamares_ar.ts
@@ -73,7 +73,7 @@
- الوحدا
+ الوحدات
@@ -2834,7 +2834,7 @@ Output:
- 1% الدعم
+ %1 الدعم
diff --git a/lang/calamares_bg.ts b/lang/calamares_bg.ts
index 2a69a9ef6..55a48e1a8 100644
--- a/lang/calamares_bg.ts
+++ b/lang/calamares_bg.ts
@@ -2774,7 +2774,7 @@ Output:
-
+ Общо сектори:
diff --git a/lang/calamares_de.ts b/lang/calamares_de.ts
index dde1796be..ea9421a7b 100644
--- a/lang/calamares_de.ts
+++ b/lang/calamares_de.ts
@@ -2746,7 +2746,7 @@ Ausgabe:
-
+ Größe der Körpergröße:
diff --git a/lang/calamares_es.ts b/lang/calamares_es.ts
index 17c5cbde8..42c359fef 100644
--- a/lang/calamares_es.ts
+++ b/lang/calamares_es.ts
@@ -720,22 +720,22 @@ Saldrá del instalador y se perderán todos los cambios.
-
+ Crear un nuevo grupo de volúmenes llamado %1.
-
+ Crear un nuevo grupo de volúmenes llamado <strong>%1</strong>.
-
+ Creando un nuevo grupo de volúmenes llamado %1.
-
+ El instalador falló en crear un grupo de volúmenes llamado '%1'.
@@ -744,17 +744,17 @@ Saldrá del instalador y se perderán todos los cambios.
-
+ Desactivar grupo de volúmenes llamado %1.
-
+ Desactivar grupo de volúmenes llamado <strong>%1</strong>.
-
+ El instalador falló en desactivar el grupo de volúmenes llamado %1.
@@ -823,7 +823,7 @@ Saldrá del instalador y se perderán todos los cambios.
-
+ %1-(%2)
@@ -1726,27 +1726,27 @@ Saldrá del instalador y se perderán todos los cambios.
-
+ Nuevo grupo de volúmenes
-
+ Cambiar el tamaño del grupo de volúmenes
-
+ Desactivar grupo de volúmenes
-
+ Remover grupo de volúmenes
-
+ Instalar gestor de arranque en:
@@ -2034,12 +2034,12 @@ Salida:
-
+ Remover grupo de volúmenes llamado %1.
-
+ Remover grupo de volúmenes llamado <strong>%1</strong>.
@@ -2280,12 +2280,12 @@ Salida:
-
+ Cambiar el tamaño del grupo de volúmenes llamado %1 de %2 a %3.
-
+ Cambiar el tamaño del grupo de volúmenes llamado <strong>%1</strong> de <strong>%2</strong> a <strong>%3</strong>.
@@ -2747,7 +2747,7 @@ Salida:
-
+ Tamaño de sector físico:
@@ -2780,7 +2780,7 @@ Salida:
-
+ Cantidad de LVs:
diff --git a/lang/calamares_eu.ts b/lang/calamares_eu.ts
index 811d034b3..c93ffb6b1 100644
--- a/lang/calamares_eu.ts
+++ b/lang/calamares_eu.ts
@@ -4,17 +4,17 @@
-
+ Sistema honen <strong>abio ingurunea</strong>. <br><br>X86 zaharrek <strong>BIOS</strong> euskarria bakarrik daukate. <br>Sistema modernoek normalean <strong>EFI</strong> darabilte, baina BIOS bezala ere agertu daitezke konpatibilitate moduan hasiz gero.
-
+ Sistema hau <strong>EFI</strong> abio inguruneaz hasi da.<br><br>EFI ingurunetik abiaraztea konfiguratzeko instalatzaile honek abio kargatzaile aplikazioa ezarri behar du, <strong>GRUB </strong> bezalakoa edo <strong>systemd-abioa</strong> <strong>EFI sistema partizio</strong> batean. Hau automatikoa da, zuk partizioak eskuz egitea aukeratzen ez baduzu, eta kasu horretan zuk sortu edo aukeratu beharko duzu zure kabuz.
-
+ Sistema hau <strong>BIOS</strong> abio inguruneaz hasi da.<br><br>BIOS ingurunetik abiaraztea konfiguratzeko instalatzaile honek abio kargatzaile aplikazioa ezarri behar du, <strong>GRUB</strong> bezalakoa, partizioaren hasieran edo <strong>Master Boot Record</strong> deritzonean partizio taularen hasieratik gertu (hobetsia). Hau automatikoa da, zuk partizioak eskuz egitea aukeratzen ez baduzu eta kasu horretan zuk sortu edo aukeratu beharko duzu zure kabuz.
@@ -22,7 +22,7 @@
-
+ %1-(e)n Master Boot Record
@@ -50,7 +50,7 @@
-
+ Orri zuria
@@ -63,7 +63,7 @@
-
+ Biltegiratze globala
@@ -84,12 +84,12 @@
-
+ Ezer ez
-
+ Interfasea:
@@ -99,7 +99,7 @@
-
+ Arazte informazioa
@@ -146,7 +146,7 @@
-
+ %1 lanerako direktorioa %2 python lanak ezin du irakurri.
@@ -161,7 +161,7 @@
-
+ Boost.Python errorea "%1" lanean.
@@ -192,22 +192,22 @@
-
+ Calamares instalazioak huts egin du
-
+ %1 ezin da instalatu. Calamares ez da gai konfiguratutako modulu guztiak kargatzeko. Arazao hau banaketak Calamares erabiltzen duen eragatik da.
-
+ <br/> Ondorengo moduluak ezin izan dira kargatu:
-
+ &Instalatu
@@ -218,7 +218,8 @@
-
+ Ziur uneko instalazio prozesua bertan behera utzi nahi duzula?
+Instalatzailea irten egingo da eta aldaketa guztiak galduko dira.
@@ -243,7 +244,7 @@ The installer will quit and all changes will be lost.
-
+ %1 instalatzailea zure diskoan aldaketak egitera doa %2 instalatzeko.<br/><strong>Ezingo dituzu desegin aldaketa hauek.</strong>
@@ -281,7 +282,7 @@ The installer will quit and all changes will be lost.
-
+ Salbuespen-mota ezezaguna
@@ -309,7 +310,7 @@ The installer will quit and all changes will be lost.
-
+ Erakutsi arazte informazioa
@@ -317,17 +318,17 @@ The installer will quit and all changes will be lost.
-
+ Konputagailu honek ez dauzka gutxieneko eskakizunak %1 instalatzeko. <br/>Instalazioak ezin du jarraitu. <a href="#details">Xehetasunak...</a>
-
+ Konputagailu honek ez du betetzen gomendatutako zenbait eskakizun %1 instalatzeko. <br/>Instalazioak jarraitu ahal du, baina zenbait ezaugarri desgaituko dira.
-
+ Konputagailuan %2 ezartzeko programa honek hainbat galdera egingo dizkizu.
@@ -370,7 +371,7 @@ The installer will quit and all changes will be lost.
-
+ Aukeratu &biltegiratze-gailua:
@@ -413,7 +414,7 @@ The installer will quit and all changes will be lost.
-
+ Biltegiratze-gailuak badirudi ez duela sistema eragilerik. Zer egin nahiko zenuke? <br/>Zure aukerak berrikusteko eta berresteko aukera izango duzu aldaketak gauzatu aurretik biltegiratze-gailuan
@@ -421,7 +422,7 @@ The installer will quit and all changes will be lost.
-
+ <strong>Diskoa ezabatu</strong><br/>Honek orain dauden datu guztiak <font color="red">ezbatuko</font> ditu biltegiratze-gailutik.
@@ -533,7 +534,7 @@ The installer will quit and all changes will be lost.
-
+ MiB
@@ -558,12 +559,12 @@ The installer will quit and all changes will be lost.
-
+ LVM LV izena
-
+ Banderak:
@@ -573,12 +574,12 @@ The installer will quit and all changes will be lost.
- Ta&maina:
+ &Tamaina:
-
+ En%kriptatu
@@ -598,7 +599,7 @@ The installer will quit and all changes will be lost.
-
+ Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat.
@@ -606,22 +607,22 @@ The installer will quit and all changes will be lost.
-
+ Sortu %2MB partizioa %4n (%3) %1 fitxategi sistemaz.
-
+ Sortu <strong>%2MB</strong> partizioa <strong>%4</strong>n (%3) <strong>%1</strong> fitxategi sistemaz.
-
+ %1 partizioa berria sortzen %2n.
-
+ Huts egin du instalatzaileak '%1' diskoan partizioa sortzen.
@@ -634,17 +635,17 @@ The installer will quit and all changes will be lost.
-
+ Partizio taula berria sortzean diskoan dauden datu guztiak ezabatuko dira.
-
+ Zein motatako partizio taula sortu nahi duzu?
-
+ Master Boot Record (MBR)
@@ -657,22 +658,22 @@ The installer will quit and all changes will be lost.
-
+ Sortu %1 partizio taula berria %2n.
-
+ Sortu <strong>%1</strong> partizio taula berria <strong>%2</strong>n (%3).
-
+ %1 partizio taula berria %2n sortzen.
-
+ Huts egin du instalatzaileak '%1' diskoan partizioa taula sortzen.
@@ -685,7 +686,7 @@ The installer will quit and all changes will be lost.
-
+ Sortu <strong>%1</strong> erabiltzailea
@@ -718,22 +719,22 @@ The installer will quit and all changes will be lost.
-
+ Sortu bolumen talde berria %1 izenaz.
-
+ Sortu bolumen talde berria<strong> %1</strong> izenaz.
-
+ Bolumen talde berria sortzen %1 izenaz.
-
+ Huts egin du instalatzaileak '%1' izeneko bolumen taldea sortzen.
@@ -742,17 +743,17 @@ The installer will quit and all changes will be lost.
-
+ Desaktibatu %1 izeneko bolumen taldea.
-
+ Desaktibatu <strong>%1</strong> izeneko bolumen taldea.
-
+ Huts egin du instalatzaileak '%1' izeneko bolumen taldea desaktibatzen.
@@ -765,7 +766,7 @@ The installer will quit and all changes will be lost.
-
+ Ezabatu <strong>%1</strong> partizioa.
@@ -775,7 +776,7 @@ The installer will quit and all changes will be lost.
-
+ Huts egin du instalatzaileak %1 partizioa ezabatzen.
@@ -788,7 +789,7 @@ The installer will quit and all changes will be lost.
-
+ Gailuak <strong>%1</strong> partizio taula dauka.
@@ -821,7 +822,7 @@ The installer will quit and all changes will be lost.
-
+ %1 - (%2)
@@ -839,7 +840,7 @@ The installer will quit and all changes will be lost.
-
+ Huts egin du %1 irekitzean
@@ -847,7 +848,7 @@ The installer will quit and all changes will be lost.
-
+ Dummy C++ lana
@@ -855,7 +856,7 @@ The installer will quit and all changes will be lost.
-
+ Editatu badagoen partizioa
@@ -865,7 +866,7 @@ The installer will quit and all changes will be lost.
-
+ M&antendu
@@ -890,7 +891,7 @@ The installer will quit and all changes will be lost.
-
+ MiB
@@ -900,12 +901,12 @@ The installer will quit and all changes will be lost.
-
+ Banderak:
-
+ Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat.
@@ -918,22 +919,22 @@ The installer will quit and all changes will be lost.
-
+ Sistema en%kriptatua
-
+ Pasahitza
-
+ Berretsi pasahitza
-
+ Mesedez sartu pasahitz berdina bi kutxatan.
@@ -946,7 +947,7 @@ The installer will quit and all changes will be lost.
-
+ Instalatu %1 sistemako %2 partizio <strong>berrian</strong>.
@@ -966,7 +967,7 @@ The installer will quit and all changes will be lost.
-
+ Instalatu abio kargatzailea <strong>%1</strong>-(e)n.
@@ -1012,12 +1013,12 @@ The installer will quit and all changes will be lost.
-
+ Instalazioa amaitua
-
+ %1 instalazioa amaitu da.
@@ -1025,7 +1026,7 @@ The installer will quit and all changes will be lost.
-
+ Formateatu %1 partizioa %4-(e)n (fitxategi sistema: %2, tamaina: %3 MB).
@@ -1035,12 +1036,12 @@ The installer will quit and all changes will be lost.
-
+ %1 partizioa formateatzen %2 sistemaz.
-
+ Huts egin du instalatzaileak %1 partizioa sortzen '%2' diskoan.
@@ -1053,7 +1054,7 @@ The installer will quit and all changes will be lost.
-
+ Mesedez instalatu KDE kontsola eta saiatu berriz!
@@ -1066,7 +1067,7 @@ The installer will quit and all changes will be lost.
-
+ Script
@@ -1074,12 +1075,12 @@ The installer will quit and all changes will be lost.
-
+ Ezarri teklatu mota %1ra.<br/>
-
+ Ezarri teklatu diseinua %1%2ra.
@@ -1110,7 +1111,7 @@ The installer will quit and all changes will be lost.
-
+ &Ados
@@ -1180,7 +1181,7 @@ The installer will quit and all changes will be lost.
-
+ <a href="%1">Ikusi lizentzia kontratua</a>
@@ -1196,12 +1197,12 @@ The installer will quit and all changes will be lost.
-
+ %1 ezarriko da sistemako hizkuntza bezala.
-
+ Zenbaki eta daten eskualdea %1-(e)ra ezarri da.
@@ -1222,7 +1223,7 @@ The installer will quit and all changes will be lost.
-
+ Ordu-zonaldea %1%2-ra ezarri da.<br/>
@@ -1254,7 +1255,7 @@ The installer will quit and all changes will be lost.
-
+ Deskribapena
@@ -1272,7 +1273,7 @@ The installer will quit and all changes will be lost.
-
+ Pakete aukeraketa
@@ -1280,17 +1281,17 @@ The installer will quit and all changes will be lost.
-
+ Pasahitza laburregia da
-
+ Pasahitza luzeegia da
-
+ Pasahitza ahulegia da
@@ -1305,12 +1306,12 @@ The installer will quit and all changes will be lost.
-
+ Pasahitza aurreko zahar baten berdina da
-
+ Pasahitza palindromoa da
@@ -1320,7 +1321,7 @@ The installer will quit and all changes will be lost.
-
+ Pasahitza aurreko zahar baten oso antzerakoa da
@@ -1340,52 +1341,52 @@ The installer will quit and all changes will be lost.
-
+ Pasahitzak %1 baino zenbaki gutxiago ditu
-
+ Pasahitzak zenbaki gutxiegi ditu
-
+ Pasahitzak %1 baino maiuskula gutxiago ditu
-
+ Pasahitzak maiuskula gutxiegi ditu
-
+ Pasahitzak %1 baino minuskula gutxiago ditu
-
+ Pasahitzak minuskula gutxiegi ditu
-
+ Pasahitzak alfabetokoak ez diren %1 baino karaktere gutxiago ditu
-
+ Pasahitzak alfabetokoak ez diren karaktere gutxiegi ditu
-
+ Pasahitza %1 karaktere baino motzagoa da.
-
+ Pasahitza motzegia da
@@ -1551,24 +1552,24 @@ The installer will quit and all changes will be lost.
-
+ Zein izen erabili nahi duzu saioa hastean?
-
+ Letra-mota zabalera: normala
-
+ <small>Ordenagailu hau pertsona batek baino gehiagok erabiltzen badu, instalazio ondoren hainbat kontu ezarri zenitzake.</small>
-
+ Aukeratu pasahitza zure kontua babesteko.
@@ -1583,7 +1584,7 @@ The installer will quit and all changes will be lost.
-
+ <small>Izen hau erakutsiko da sarean zure ordenagailua besteei erakustean.</small>
@@ -1603,7 +1604,7 @@ The installer will quit and all changes will be lost.
-
+ <small>Sartu pasahitza birritan, honela tekleatze erroreak egiaztatzeko.</small>
@@ -1611,32 +1612,32 @@ The installer will quit and all changes will be lost.
-
+ Root
-
+ Home
-
+ Boot
-
+ EFI sistema
-
+ Swap
-
+ Partizio berri %1(e)ntzat
@@ -1646,7 +1647,7 @@ The installer will quit and all changes will be lost.
-
+ %1 %2
@@ -1694,12 +1695,12 @@ The installer will quit and all changes will be lost.
-
+ Biltegiratze-gailua:
-
+ Atze&ra bota aldaketa guztiak:
@@ -1905,7 +1906,7 @@ The installer will quit and all changes will be lost.
-
+ Fitxategiak geroko gordetzen...
@@ -1931,32 +1932,34 @@ There was no output from the command.
-
+
+Irteera:
+
-
+ Kanpo-komandoak huts egin du.
-
+ <i>%1</i> komandoak huts egin du.
-
+ Ezin izan da %1 kanpo-komandoa abiarazi.
-
+ Ezin izan da <i>%1</i> komandoa abiarazi.
-
+ Barne-akatsa komandoa abiarazterakoan.
@@ -1966,7 +1969,7 @@ Output:
-
+ Kanpo-komandoa ez da bukatu.
@@ -1976,7 +1979,7 @@ Output:
-
+ Kanpo-komandoak akatsekin bukatu da.
@@ -1989,7 +1992,7 @@ Output:
-
+ Teklatu mota lehenetsia
@@ -2000,22 +2003,22 @@ Output:
-
+ Ezezaguna
-
+ Hedatua
-
+ Formatugabea
-
+ swap
@@ -2167,12 +2170,12 @@ Output:
-
+ Instalatzailea ez dabil exekutatzen administrari eskubideekin.
-
+ Pantaila txikiegia da instalatzailea erakusteko.
@@ -2185,7 +2188,7 @@ Output:
-
+ Konfigurazio baliogabea
@@ -2251,7 +2254,7 @@ Output:
-
+ Tamaina aldatu %1 partizioari.
@@ -2293,12 +2296,12 @@ Output:
-
+ Biltegiratze-gailuak eskaneatzen...
-
+ Partizioa(k) egiten
@@ -2469,7 +2472,7 @@ Output:
-
+ Ezin da desgaitu root kontua.
@@ -2517,7 +2520,7 @@ Output:
-
+ Ezin da ezarri ordu-zonaldea
@@ -2747,12 +2750,12 @@ Output:
-
+ MiB
-
+ Tamaina guztira:
@@ -2760,22 +2763,22 @@ Output:
-
+ ---
-
+ Erabilitako tamaina:
-
+ Sektoreak guztira:
-
+ LV kopurua:
diff --git a/lang/calamares_hu.ts b/lang/calamares_hu.ts
index 0be907a6c..47a596df1 100644
--- a/lang/calamares_hu.ts
+++ b/lang/calamares_hu.ts
@@ -192,17 +192,17 @@
-
+ A Calamares előkészítése meghiúsult
-
+ A(z) %1 nem telepíthető. A Calamares nem tudta betölteni a konfigurált modulokat. Ez a probléma abból fakad, ahogy a disztribúció a Calamarest használja.
-
+ <br/>A következő modulok nem tölthetőek be:
@@ -509,12 +509,12 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ A parancs a gazdakörnyezetben fut, és ismernie kell a gyökér útvonalát, de nincs rootMountPoint megadva.
-
+ A parancsnak tudnia kell a felhasználónevet, de az nincs megadva.
@@ -522,7 +522,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Környezetfüggő folyamatok feladat
@@ -560,7 +560,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ LVM LV név
@@ -720,22 +720,22 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Új kötetcsoport létrehozása: %1.
-
+ Új kötetcsoport létrehozása: <strong>%1</strong>.
-
+ Új kötetcsoport létrehozása: %1.
-
+ A telepítő nem tudta létrehozni a kötetcsoportot: „%1”.
@@ -744,17 +744,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ A kötetcsoport deaktiválása: %1.
-
+ Kötetcsoport deaktiválása: <strong>%1</strong>.
-
+ A telepítőnek nem sikerült deaktiválnia a kötetcsoportot: %1.
@@ -823,7 +823,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ %1 – (%2)
@@ -986,7 +986,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ <html><head/><body><p>Ha ez be van jelölve, akkor a rendszer azonnal újraindul, ha a <span style=" font-style:italic;">Kész</span>-re kattint, vagy bezárja a telepítőt.</p></body></html>
@@ -1292,232 +1292,232 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ A jelszó túl gyenge
-
+ Memóriafoglalási hiba a(z) „%1” beállításakor
-
+ Memóriafoglalási hiba
-
+ A jelszó ugyanaz, mint a régi
-
+ A jelszó egy palindrom
-
+ A jelszó csak kis- és nagybetűben tér el
-
+ A jelszó túlságosan hasonlít a régire
-
+ A jelszó tartalmazza felhasználónevet valamilyen formában
-
+ A jelszó tartalmazza a felhasználó valódi nevét valamilyen formában
-
+ A jelszó tiltott szavakat tartalmaz valamilyen formában
-
+ A jelszó kevesebb mint %1 számjegyet tartalmaz
-
+ A jelszó túl kevés számjegyet tartalmaz
-
+ A jelszó kevesebb mint %1 nagybetűt tartalmaz
-
+ A jelszó túl kevés nagybetűt tartalmaz
-
+ A jelszó kevesebb mint %1 kisbetűt tartalmaz
-
+ A jelszó túl kevés kisbetűt tartalmaz
-
+ A jelszó kevesebb mint %1 nem alfanumerikus karaktert tartalmaz
-
+ A jelszó túl kevés nem alfanumerikus karaktert tartalmaz
-
+ A jelszó rövidebb mint %1 karakter
-
+ A jelszó túl rövid
-
+ A jelszó egy újra felhasznált régi jelszó
-
+ A jelszó kevesebb mint %1 karaktert tartalmaz
-
+ A jelszó nem tartalmaz elég karakterosztályt
-
+ A jelszó több mint %1 egyező karaktert tartalmaz egymás után
-
+ A jelszó túl sok egyező karaktert tartalmaz egymás után
-
+ A jelszó több mint %1 karaktert tartalmaz ugyanabból a karakterosztályból egymás után
-
+ A jelszó túl sok karaktert tartalmaz ugyanabból a karakterosztályból egymás után
-
+ A jelszó %1 karakternél hosszabb monoton sorozatot tartalmaz
-
+ A jelszó túl hosszú monoton karaktersorozatot tartalmaz
-
+ Nincs jelszó megadva
-
+ Nem nyerhetőek ki véletlenszámok az RNG eszközből
-
+ A jelszó előállítás meghiúsult – a szükséges entrópia túl alacsony a beállításokhoz
-
+ A jelszó megbukott a szótárellenőrzésen – %1
-
+ A jelszó megbukott a szótárellenőrzésen
-
+ Ismeretlen beállítás – %1
-
+ Ismeretlen beállítás
-
+ Hibás egész érték a beállításnál – %1
-
+ Hibás egész érték
-
+ A(z) %1 beállítás nem egész típusú
-
+ A beállítás nem egész típusú
-
+ A(z) %1 beállítás nem karakterlánc típusú
-
+ A beállítás nem karakterlánc típusú
-
+ A konfigurációs fájl megnyitása meghiúsult
-
+ A konfigurációs fájl rosszul formázott
-
+ Végzetes hiba
-
+ Ismeretlen hiba
@@ -1711,7 +1711,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ &Létrehozás
@@ -1726,27 +1726,27 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Új kötetcsoport
-
+ Kötetcsoport átméretezése
-
+ Kötetcsoport deaktiválása
-
+ Kötetcsoport eltávolítása
-
+ Rendszerbetöltő &telepítése ide:
@@ -1756,12 +1756,12 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Nem hozható létre új partíció
-
+ A(z) %1 lemezen lévő partíciós táblában már %2 elsődleges partíció van, és több nem adható hozzá. Helyette távolítson el egy elsődleges partíciót, és adjon hozzá egy kiterjesztett partíciót.
@@ -1867,13 +1867,13 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Plasma kinézet feladat
-
+ A KDE Plasma kinézeti csomag nem válaszható ki
@@ -1891,7 +1891,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Válasszon egy kinézetet a KDE Plasma asztali környezethez. Ki is hagyhatja ezt a lépést, és beállíthatja a kinézetet, ha a telepítés elkészült. A kinézetválasztóra kattintva élő előnézetet kaphat a kinézetről.
@@ -1899,7 +1899,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Kinézet
@@ -1907,17 +1907,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+ Fájlok mentése későbbre …
-
+ Nincsenek fájlok beállítva elmentésre későbbre
-
+ Nem az összes beállított fájl örízhető meg.
@@ -1926,14 +1926,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l
-
+
+A parancsnak nem volt kimenete.
-
+
+Kimenet:
+
@@ -1948,17 +1951,17 @@ Output:
-
+ A külső parancsot nem sikerült elindítani.
-
+ A(z) <i>%1</i> parancsot nem sikerült elindítani.
-
+ Belső hiba a parancs végrehajtásakor.
@@ -1973,17 +1976,17 @@ Output:
-
+ A(z) <i>%1</i> parancsot nem sikerült befejezni %2 másodperc alatt.
-
+ A külső parancs hibával fejeződött be.
-
+ A(z) <i>%1</i> parancs hibakóddal lépett ki: %2.
@@ -2031,17 +2034,17 @@ Output:
-
+ A kötetcsoport eltávolítása: %1.
-
+ Kötetcsoport eltávolítása: <strong>%1</strong>.
-
+ A telepítő nem tudta eltávolítani a kötetcsoportot: „%1”.
@@ -2182,29 +2185,29 @@ Output:
-
+ Fájlrendszer átméretezési feladat
-
+ Érvénytelen konfiguráció
-
+ A fájlrendszer átméretezési feladat konfigurációja érvénytelen, és nem fog futni.
-
+ A KPMCore nem érhető el
-
+ A Calamares nem tudja elindítani a KPMCore-t a fájlrendszer átméretezési feladathoz.
@@ -2213,39 +2216,39 @@ Output:
-
+ Az átméretezés meghiúsult
-
+ A(z) %1 fájlrendszer nem található a rendszeren, és nem méretezhető át.
-
+ A(z) %1 eszköz nem található a rendszeren, és nem méretezhető át.
-
+ A(z) %1 fájlrendszer nem méretezhető át.
-
+ A(z) %1 eszköz nem méretezhető át.
-
+ A(z) %1 fájlrendszert át kell méretezni, de nem lehet.
-
+ A(z) %1 eszközt át kell méretezni, de nem lehet
@@ -2277,17 +2280,17 @@ Output:
-
+ A(z) %1 kötet átméretezése ekkoráról: %2, ekkorára: %3.
-
+ A(z) <strong>%1</strong> kötet átméretezése ekkoráról: <strong>%2</strong>, ekkorára: <strong>%3</strong>.
-
+ A telepítő nem tudta átméretezni a kötetcsoportot: „%1”.
@@ -2532,7 +2535,7 @@ Output:
-
+ Parancssori folyamatok feladat
@@ -2541,7 +2544,7 @@ Output:
slide counter, %1 of %2 (numeric)
-
+ %L1 / %L2
@@ -2725,27 +2728,27 @@ Calamares hiba %1.
-
+ Kötetcsoport párbeszédablak
-
+ Fizikai kötetek listája
-
+ Kötetcsoport neve:
-
+ Kötetcsoport típusa:
-
+ Fizikai kiterjedés mérete:
@@ -2755,7 +2758,7 @@ Calamares hiba %1.
-
+ Teljes méret:
@@ -2763,22 +2766,22 @@ Calamares hiba %1.
-
+ ---
-
+ Használt méret:
-
+ Szektorok összesen:
-
+ Logkai kötetek száma:
@@ -2831,7 +2834,7 @@ Calamares hiba %1.
-
+ <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac <teo@kde.org><br/>Copyright 2017 Adriaan de Groot <groot@kde.org><br/>Köszönet: Anke Boersma, Aurélien Gâteau, Kevin Kofler, Lisa Vitolo, Philip Müller, Pier Luigi Fiorini, Rohan Garg és a <a href="https://www.transifex.com/calamares/calamares/">Calamares fordítócsapat</a>.<br/><br/>A <a href="https://calamares.io/">Calamares</a> fejlesztését a <br/><a href="http://www.blue-systems.com/">Blue Systems</a> támogatja.
diff --git a/lang/calamares_id.ts b/lang/calamares_id.ts
index 3fd711dd1..0e59d2c45 100644
--- a/lang/calamares_id.ts
+++ b/lang/calamares_id.ts
@@ -9,12 +9,12 @@
- Sistem ini telah dimulai dengan lingkungan boot <strong>EFI</strong>.<br><br>Untuk mengkonfigurasi startup dari lingkungan EFI, pemasang ini seharusnya memaparkan sebuah aplikasi boot loader, seperti <strong>GRUB</strong> atau <strong>systemd-boot</strong> pada sebuah <strong>EFI System Partition</strong>. Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus memilihnya atau menciptakannya pada milikmu.
+ Sistem ini telah dimulai dengan lingkungan boot <strong>EFI</strong>.<br><br>Untuk mengkonfigurasi startup dari lingkungan EFI, installer ini seharusnya memaparkan sebuah aplikasi boot loader, seperti <strong>GRUB</strong> atau <strong>systemd-boot</strong> pada sebuah <strong>EFI System Partition</strong>. Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus memilihnya atau menciptakannya pada milikmu.
- Sistem ini dimulai dengan sebuah lingkungan boot <strong>BIOS</strong>.<br><br>Untuk mengkonfigurasi startup dari sebuah lingkungan BIOS, pemasang ini seharusnya memasang sebuah boot loader, seperti <strong>GRUB</strong>, baik di awal partisi atau pada <strong>Master Boot Record</strong> di dekat awalan tabel partisi (yang disukai). Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus menyetelnya pada milikmu.
+ Sistem ini dimulai dengan sebuah lingkungan boot <strong>BIOS</strong>.<br><br>Untuk mengkonfigurasi startup dari sebuah lingkungan BIOS, installer ini seharusnya memasang sebuah boot loader, seperti <strong>GRUB</strong>, baik di awal partisi atau pada <strong>Master Boot Record</strong> di dekat awalan tabel partisi (yang disukai). Ini adalah otomatis, kecuali kalau kamu memilih pemartisian manual, dalam beberapa kasus kamu harus menyetelnya pada milikmu.
@@ -37,7 +37,7 @@
- Jangan pasang boot loader
+ Jangan instal boot loader
@@ -107,7 +107,7 @@
- Pasang
+ Instal
@@ -187,7 +187,7 @@
- Batal pemasangan tanpa mengubah sistem yang ada.
+ Batalkan instalasi tanpa mengubah sistem yang ada.
@@ -197,7 +197,7 @@
- %1 tidak dapat terpasang. Calamares tidak dapat memuat seluruh modul konfigurasi. Terdapat masalah dengan Calamares karena sedang digunakan oleh distribusi.
+ %1 tidak dapat terinstal. Calamares tidak dapat memuat seluruh modul konfigurasi. Terdapat masalah dengan Calamares karena sedang digunakan oleh distribusi.
@@ -207,19 +207,19 @@
- &Pasang
+ &Instal
- Batalkan pemasangan?
+ Batalkan instalasi?
- Apakah Anda benar-benar ingin membatalkan proses pemasangan ini?
-Pemasangan akan ditutup dan semua perubahan akan hilang.
+ Apakah Anda benar-benar ingin membatalkan proses instalasi ini?
+Instalasi akan ditutup dan semua perubahan akan hilang.
@@ -244,12 +244,12 @@ Pemasangan akan ditutup dan semua perubahan akan hilang.
- Pemasang %1 akan membuat perubahan ke disk Anda untuk memasang %2.<br/><strong>Anda tidak dapat membatalkan perubahan tersebut.</strong>
+ Installer %1 akan membuat perubahan ke disk Anda untuk memasang %2.<br/><strong>Anda tidak dapat membatalkan perubahan tersebut.</strong>
- &Pasang sekarang
+ &Instal sekarang
@@ -264,7 +264,7 @@ Pemasangan akan ditutup dan semua perubahan akan hilang.
- Pemasangan sudah lengkap. Tutup pemasang.
+ Instalasi sudah lengkap. Tutup installer.
@@ -274,7 +274,7 @@ Pemasangan akan ditutup dan semua perubahan akan hilang.
- Pemasangan Gagal
+ Instalasi Gagal
@@ -305,7 +305,7 @@ Pemasangan akan ditutup dan semua perubahan akan hilang.
- Pemasang %1
+ Installer %1
@@ -319,13 +319,13 @@ Pemasangan akan ditutup dan semua perubahan akan hilang.
Komputer ini tidak memenuhi syarat minimum untuk memasang %1.
-Pemasang tidak dapat dilanjutkan. <a href="
+Installer tidak dapat dilanjutkan. <a href="
Komputer ini tidak memenuhi beberapa syarat yang dianjurkan untuk memasang %1.
-Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
+Instalasi dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
@@ -437,7 +437,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- <strong>Pasang berdampingan dengan</strong><br/>Pemasang akan mengiris sebuah partisi untuk memberi ruang bagi %1.
+ <strong>Instal berdampingan dengan</strong><br/>Installer akan mengiris sebuah partisi untuk memberi ruang bagi %1.
@@ -624,7 +624,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasang gagal untuk membuat partisi di disk '%1'.
+ Installer gagal untuk membuat partisi di disk '%1'.
@@ -675,7 +675,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasang gagal membuat tabel partisi pada %1.
+ Installer gagal membuat tabel partisi pada %1.
@@ -721,22 +721,22 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
-
+ Ciptakan grup volume baru bernama %1.
-
+ Ciptakan grup volume baru bernama <strong>%1</strong>.
-
+ Menciptakan grup volume baru bernama %1.
-
+ Installer gagal menciptakan sebuah grup volume bernama '%1'.
@@ -745,17 +745,17 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
-
+ Nonaktifkan grup volume bernama %1.
-
+ Nonaktifkan grup volume bernama <strong>%1</strong>.
-
+ Installer gagal menonaktifkan sebuah grup volume bernama %1.
@@ -778,7 +778,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasang gagal untuk menghapus partisi %1.
+ Installer gagal untuk menghapus partisi %1.
@@ -786,7 +786,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Tipe dari <strong>tabel partisi</strong> pada perangkat penyimpanan terpilih.<br><br>Satu-satunya cara untuk mengubah tabel partisi adalah dengan menyetip dan menciptakan ulang tabel partisi dari awal, yang melenyapkan semua data pada perangkat penyimpanan.<br>Pemasang ini akan menjaga tabel partisi saat ini kecuali kamu secara gamblang memilih sebaliknya.<br>Jika tidak yakin, pada sistem GPT modern lebih disukai.
+ Tipe dari <strong>tabel partisi</strong> pada perangkat penyimpanan terpilih.<br><br>Satu-satunya cara untuk mengubah tabel partisi adalah dengan menyetip dan menciptakan ulang tabel partisi dari awal, yang melenyapkan semua data pada perangkat penyimpanan.<br>Installer ini akan menjaga tabel partisi saat ini kecuali kamu secara gamblang memilih sebaliknya.<br>Jika tidak yakin, pada sistem GPT modern lebih disukai.
@@ -801,7 +801,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasang <strong>tidak bisa mendeteksi tabel partisi apapun</strong> pada media penyimpanan terpilih.<br><br>Mungkin media ini tidak memiliki tabel partisi, atau tabel partisi yang ada telah korup atau tipenya tidak dikenal.<br>Pemasang dapat membuatkan partisi baru untuk Anda, baik secara otomatis atau melalui laman pemartisian manual.
+ Installer <strong>tidak bisa mendeteksi tabel partisi apapun</strong> pada media penyimpanan terpilih.<br><br>Mungkin media ini tidak memiliki tabel partisi, atau tabel partisi yang ada telah korup atau tipenya tidak dikenal.<br>Installer dapat membuatkan partisi baru untuk Anda, baik secara otomatis atau melalui laman pemartisian manual.
@@ -824,7 +824,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
-
+ %1 - (%2)
@@ -949,7 +949,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pasang %1 pada partisi sistem %2 <strong>baru</strong>
+ Instal %1 pada partisi sistem %2 <strong>baru</strong>
@@ -959,7 +959,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pasang %2 pada sistem partisi %3 <strong>%1</strong>.
+ Instal %2 pada sistem partisi %3 <strong>%1</strong>.
@@ -969,7 +969,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pasang boot loader di <strong>%1</strong>.
+ Instal boot loader di <strong>%1</strong>.
@@ -987,7 +987,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Ketika kotak ini dicentang, sistem kamu akan segera dimulai kembali saat mengklik Selesai atau menutup pemasang.
+ Ketika kotak ini dicentang, sistem kamu akan segera dimulai kembali saat mengklik Selesai atau menutup installer.
@@ -997,12 +997,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- <h1>Selesai.</h1><br>%1 sudah terpasang di komputer Anda.<br/>Anda dapat memulai ulang ke sistem baru atau lanjut menggunakan lingkungan Live %2.
+ <h1>Selesai.</h1><br>%1 sudah terinstal di komputer Anda.<br/>Anda dapat memulai ulang ke sistem baru atau lanjut menggunakan lingkungan Live %2.
- <h1>Pemasangan Gagal</h1><br/>%1 tidak bisa dipasang pada komputermu.<br/>Pesan galatnya adalah: %2.
+ <h1>Instalasi Gagal</h1><br/>%1 tidak bisa diinstal pada komputermu.<br/>Pesan galatnya adalah: %2.
@@ -1015,12 +1015,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasangan Lengkap
+ Instalasi Lengkap
- Pemasangan %1 telah lengkap.
+ Instalasi %1 telah lengkap.
@@ -1043,7 +1043,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasang gagal memformat partisi %1 pada disk '%2'.'%2'.
+ Installer gagal memformat partisi %1 pada disk '%2'.'%2'.
@@ -1051,12 +1051,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Konsole tidak terpasang
+ Konsole tidak terinstal
- Silahkan pasang KDE Konsole dan ulangi lagi!
+ Silahkan instal KDE Konsole dan ulangi lagi!
@@ -1146,7 +1146,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Mohon periksa End User License Agreements(EULA) di atas.<br/>Bila Anda tidak setuju, perangkat lunak proprietary tidak akan dipasang, dan alternatif open source akan dipasang sebagai gantinya
+ Mohon periksa End User License Agreements(EULA) di atas.<br/>Bila Anda tidak setuju, perangkat lunak proprietary tidak akan diinstal, dan alternatif open source akan diinstal sebagai gantinya
@@ -1262,12 +1262,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pemasangan Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu)
+ Instalasi Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu)
- Pemasangan jaringan. (Menonaktifkan: Penerimaan kelompok data yang tidak sah)
+ Instalasi jaringan. (Menonaktifkan: Penerimaan kelompok data yang tidak sah)
@@ -1566,7 +1566,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- <small>Jika lebih dari satu orang akan menggunakan komputer ini, Anda dapat mengatur beberapa akun setelah pemasangan.</small>
+ <small>Jika lebih dari satu orang akan menggunakan komputer ini, Anda dapat mengatur beberapa akun setelah instalasi.</small>
@@ -1727,27 +1727,27 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
-
+ Grup Volume Baru
-
+ Ubah-ukuran Grup Volume
-
+ Nonaktifkan Grup Volume
-
+ Hapus Grup Volume
-
+ I&nstal boot loader di:
@@ -1780,12 +1780,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pasang %1 <strong>berdampingan</strong> dengan sistem operasi lain.
+ Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain.
- <strong>Hapus</strong> diska dan pasang %1.
+ <strong>Hapus</strong> diska dan instal %1.
@@ -1800,12 +1800,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Pasang %1 <strong>berdampingan</strong> dengan sistem operasi lain di disk <strong>%2</strong> (%3).
+ Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain di disk <strong>%2</strong> (%3).
- <strong>Hapus</strong> diska <strong>%2</strong> (%3) dan pasang %1.
+ <strong>Hapus</strong> diska <strong>%2</strong> (%3) dan instal %1.
@@ -1892,7 +1892,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan.
- Silakan pilih sebuah look-and-feel untuk KDE Plasma Desktop. Anda juga dapat melewati langkah ini dan konfigurasi look-and-feel sekali ketika sistem terpasang. Mengeklik pilihan look-and-feel akan memberi Anda pratinjau langsung dari look-and-feel.
+ Silakan pilih sebuah look-and-feel untuk KDE Plasma Desktop. Anda juga dapat melewati langkah ini dan konfigurasi look-and-feel setelah sistem terinstal. Mengeklik pilihan look-and-feel akan memberi Anda pratinjau langsung pada look-and-feel tersebut.
@@ -2035,17 +2035,17 @@ Keluaran:
-
+ Hapus Grup Volume bernama %1.
-
+ Hapus Grup Volume bernama <strong>%1</strong>.
-
+ Installer gagal menghapus sebuah grup volume bernama '%1'.
@@ -2058,7 +2058,7 @@ Keluaran:
- Pilih tempat pemasangan %1.<br/><font color="red">Peringatan: </font>hal ini akan menghapus semua berkas di partisi terpilih.
+ Pilih tempat instalasi %1.<br/><font color="red">Peringatan: </font>hal ini akan menghapus semua berkas di partisi terpilih.
@@ -2068,17 +2068,17 @@ Keluaran:
- %1 tidak dapat dipasang di ruang kosong. Mohon pilih partisi yang tersedia.
+ %1 tidak dapat diinstal di ruang kosong. Mohon pilih partisi yang tersedia.
- %1 tidak bisa dipasang pada Partisi Extended. Mohon pilih Partisi Primary atau Logical yang tersedia.
+ %1 tidak bisa diinstal pada Partisi Extended. Mohon pilih Partisi Primary atau Logical yang tersedia.
- %1 tidak dapat dipasang di partisi ini.
+ %1 tidak dapat diinstal di partisi ini.
@@ -2110,7 +2110,7 @@ Keluaran:
- <strong>%3</strong><br/><br/>%1 akan dipasang pada %2.<br/><font color="red">Peringatan: </font>seluruh data %2 akan hilang.
+ <strong>%3</strong><br/><br/>%1 akan diinstal pada %2.<br/><font color="red">Peringatan: </font>seluruh data %2 akan hilang.
@@ -2173,12 +2173,12 @@ Keluaran:
- Pemasang tidak dijalankan dengan kewenangan administrator.
+ Installer tidak dijalankan dengan kewenangan administrator.
- Layar terlalu kecil untuk menampilkan pemasang.
+ Layar terlalu kecil untuk menampilkan installer.
@@ -2186,29 +2186,29 @@ Keluaran:
-
+ Tugas Ubah-ukuran Filesystem
-
+ Konfigurasi taksah
-
+ Tugas pengubahan ukuran filesystem mempunyai sebuah konfigurasi yang taksah dan tidak akan berjalan.
-
+ KPMCore tidak Tersedia
-
+ Calamares gak bisa menjalankan KPMCore untuk tugas pengubahan ukuran filesystem.
@@ -2217,39 +2217,39 @@ Keluaran:
-
+ Pengubahan Ukuran, Gagal
-
+ Filesystem %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya.
-
+ Perangkat %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya.
-
+ Filesystem %1 gak bisa diubahukurannya.
-
+ Perangkat %1 gak bisa diubahukurannya.
-
+ Filesystem %1 mestinya bisa diubahukurannya, namun gak bisa.
-
+ Perangkat %1 mestinya bisa diubahukurannya, namun gak bisa.
@@ -2272,7 +2272,7 @@ Keluaran:
- Pemasang gagal untuk merubah ukuran partisi %1 pada disk '%2'.
+ Installer gagal untuk merubah ukuran partisi %1 pada disk '%2'.
@@ -2281,17 +2281,17 @@ Keluaran:
-
+ Ubah ukuran grup volume bernama %1 dari %2 ke %3.
-
+ Ubah ukuran grup volume bernama <strong>%1</strong> dari <strong>%2</strong> ke %3<strong>.
-
+ Installer gagal mengubah ukuran sebuah grup volume bernama '%1'.
@@ -2447,7 +2447,7 @@ Keluaran:
- Pemasang gagal menetapkan bendera pada partisi %1.
+ Installer gagal menetapkan bendera pada partisi %1.
@@ -2553,7 +2553,7 @@ Keluaran:
- Berikut adalah tinjauan mengenai yang akan terjadi setelah Anda memulai prosedur pemasangan.
+ Berikut adalah tinjauan mengenai yang akan terjadi setelah Anda memulai prosedur instalasi.
@@ -2579,7 +2579,7 @@ Keluaran:
- Galat intern di pelacakan-pemasangan.
+ Galat intern di pelacakan-instalasi.
@@ -2631,7 +2631,7 @@ Keluaran:
- <html><head/><body><p>Dengan memilih ini, Anda akan mengirim <span style=" font-weight:600;">tidak ada informasi di </span> tentang pemasangan Anda. </p></body></html>
+ <html><head/><body><p>Dengan memilih ini, Anda akan mengirim <span style=" font-weight:600;">tidak ada informasi di </span> tentang instalasi Anda. </p></body></html>
@@ -2655,22 +2655,22 @@ Keluaran:
- Pasang bantuan pelacakan %1 untuk melihat berapa banyak pengguna memiliki, piranti keras apa yang mereka pasang %1 dan (dengan dua pilihan terakhir), dapatkan informasi berkelanjutan tentang aplikasi yang disukai. Untuk melihat apa yang akan dikirim, silakan klik ikon bantuan ke beberapa area selanjtunya.
+ Instal bantuan pelacakan %1 untuk melihat berapa banyak pengguna memiliki, piranti keras apa yang mereka instal %1 dan (dengan dua pilihan terakhir), dapatkan informasi berkelanjutan tentang aplikasi yang disukai. Untuk melihat apa yang akan dikirim, silakan klik ikon bantuan ke beberapa area selanjtunya.
- Dengan memilih ini Anda akan mengirim informasi tentang pemasangan dan piranti keras Anda. Informasi ini hanya akan <b>dikirim sekali</b> setelah pemasangan selesai.
+ Dengan memilih ini Anda akan mengirim informasi tentang instalasi dan piranti keras Anda. Informasi ini hanya akan <b>dikirim sekali</b> setelah instalasi selesai.
- Dengan memilih ini anda akan <b> secara berkala</b> mengirim informasi tentang pemasangan, piranti keras dan aplikasi Anda, ke %1.
+ Dengan memilih ini anda akan <b> secara berkala</b> mengirim informasi tentang instalasi, piranti keras dan aplikasi Anda, ke %1.
- Dengan memilih ini anda akan<b>secara teratur</b> mengirim informasi tentang pemasangan, piranti keras, aplikasi dan pola pemakaian Anda, ke %1.
+ Dengan memilih ini anda akan<b>secara teratur</b> mengirim informasi tentang instalasi, piranti keras, aplikasi dan pola pemakaian Anda, ke %1.
@@ -2728,27 +2728,27 @@ Keluaran:
-
+ DialogGrupVolume
-
+ Daftar dari Volume Fisik
-
+ Nama Grup Volume:
-
+ Tipe Grup Volume:
-
+ Ukuran Luas Fisik:
@@ -2758,7 +2758,7 @@ Keluaran:
-
+ Total Ukuran:
@@ -2766,22 +2766,22 @@ Keluaran:
-
+ ---
-
+ Ukuran Terpakai:
-
+ Total Sektor:
-
+ Kuantitas LV:
@@ -2819,17 +2819,17 @@ Keluaran:
- <h1>Selamat datang di pemasang %1.</h1>
+ <h1>Selamat datang di installer %1.</h1>
- <h1>Selamat datang di Calamares pemasang untuk %1.</h1>
+ <h1>Selamat datang di Calamares installer untuk %1.</h1>
- Tentang pemasang %1
+ Tentang installer %1
diff --git a/lang/calamares_is.ts b/lang/calamares_is.ts
index 181ca9986..196215a0c 100644
--- a/lang/calamares_is.ts
+++ b/lang/calamares_is.ts
@@ -192,7 +192,7 @@
-
+ Calamares uppsetning mistókst
@@ -207,7 +207,7 @@
-
+ &Setja upp
@@ -503,7 +503,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast.
-
+ Gat ekki keyrt skipun.
@@ -559,7 +559,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast.
-
+ LVM LV nafn
@@ -822,7 +822,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast.
-
+ %1 - (%2)
@@ -1281,17 +1281,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast.
-
+ Lykilorðið þitt er of stutt
-
+ Lykilorðið þitt er of langt
-
+ Lykilorðið þitt er of veikt
@@ -1386,7 +1386,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast.
-
+ Lykilorðið er of stutt
@@ -1906,7 +1906,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast.
-
+ Vista skrár fyrir seinna ...
@@ -2540,7 +2540,7 @@ Output:
slide counter, %1 of %2 (numeric)
-
+ %L1 / %L2
@@ -2640,7 +2640,7 @@ Output:
-
+ ...
@@ -2753,7 +2753,7 @@ Output:
-
+ Heildar stærð:
@@ -2761,12 +2761,12 @@ Output:
-
+ ---
-
+ Notuð stærð:
diff --git a/lang/calamares_ja.ts b/lang/calamares_ja.ts
index 001e1a19e..1fb982825 100644
--- a/lang/calamares_ja.ts
+++ b/lang/calamares_ja.ts
@@ -14,7 +14,7 @@
- このシステムは <strong>BIOS</strong> ブート環境で起動しました。<br><br> BIOS環境からの起動について設定するためには、パーティションの開始位置あるいはパーティションテーブルの開始位置の近く(推奨)にある<strong>マスターブートレコード</strong>に <strong>GRUB</strong> のようなブートローダーをインストールしなければなりません。手動によるパーティショニングを選択する場合はユーザー自身で設定しなければなりません。そうでない場合は、この操作は自動的に行われます。
+ このシステムは <strong>BIOS</strong> ブート環境で起動しました。<br><br> BIOS環境からの起動について設定するためには、パーティションの開始位置あるいはパーティションテーブルの開始位置の近く (推奨) にある<strong>マスターブートレコード</strong>に <strong>GRUB</strong> のようなブートローダーをインストールしなければなりません。手動によるパーティショニングを選択する場合はユーザー自身で設定しなければなりません。そうでない場合は、この操作は自動的に行われます。
@@ -169,19 +169,19 @@
- 戻る(&B)
+ 戻る (&B)
- 次へ(&N)
+ 次へ (&N)
- 中止(&C)
+ 中止 (&C)
@@ -197,7 +197,7 @@
- %1 はインストールできません。Calamares は全てのモジュールをロードすることをできませんでした。これは、Calamares のこのディストリビューションでの使用法による問題です。
+ %1 はインストールできません。Calamares はすべてのモジュールをロードすることをできませんでした。これは、Calamares のこのディストリビューションでの使用法による問題です。
@@ -207,7 +207,7 @@
- インストール(&I)
+ インストール (&I)
@@ -224,17 +224,17 @@ The installer will quit and all changes will be lost.
- はい(&Y)
+ はい (&Y)
- いいえ(&N)
+ いいえ (&N)
- 閉じる(&C)
+ 閉じる (&C)
@@ -249,17 +249,17 @@ The installer will quit and all changes will be lost.
- 今すぐインストール(&I)
+ 今すぐインストール (&I)
- 戻る(&B)
+ 戻る (&B)
- 実行(&D)
+ 実行 (&D)
@@ -371,7 +371,7 @@ The installer will quit and all changes will be lost.
- ストレージデバイスを選択(&V):
+ ストレージデバイスを選択 (&V):
@@ -539,22 +539,22 @@ The installer will quit and all changes will be lost.
- パーティションの種類(&T):
+ パーティションの種類 (&T):
- プライマリ(&P)
+ プライマリ (&P)
- 拡張(&x)
+ 拡張 (&X)
- ファイルシステム (&L):
+ ファイルシステム (&L):
@@ -569,17 +569,17 @@ The installer will quit and all changes will be lost.
- マウントポイント(&M)
+ マウントポイント (&M)
- サイズ(&Z)
+ サイズ (&Z)
- 暗号化(&C)
+ 暗号化 (&C)
@@ -650,7 +650,7 @@ The installer will quit and all changes will be lost.
- GUID パーティションテーブル(GPT)
+ GUID パーティションテーブル (GPT)
@@ -784,7 +784,7 @@ The installer will quit and all changes will be lost.
- 選択したストレージデバイスにおける<strong> パーティションテーブル </strong> の種類。 <br><br> パーティションテーブルの種類を変更する唯一の方法は、パーティションテーブルを消去し、最初から再作成を行うことですが、この操作はストレージ上の全てのデータを破壊します。 <br> このインストーラーは、他の種類へ明示的に変更ししない限り、現在のパーティションテーブルが保持されます。よくわからない場合、最近のシステムではGPTが推奨されます。
+ 選択したストレージデバイスにおける<strong> パーティションテーブル </strong> の種類。 <br><br> パーティションテーブルの種類を変更する唯一の方法は、パーティションテーブルを消去し、最初から再作成を行うことですが、この操作はストレージ上のすべてのデータを破壊します。 <br> このインストーラーは、他の種類へ明示的に変更ししない限り、現在のパーティションテーブルが保持されます。よくわからない場合、最近のシステムではGPTが推奨されます。
@@ -866,7 +866,7 @@ The installer will quit and all changes will be lost.
- 保持(&K)
+ 保持 (&K)
@@ -881,12 +881,12 @@ The installer will quit and all changes will be lost.
- マウントポイント(&M)
+ マウントポイント (&M)
- サイズ(&Z):
+ サイズ (&Z):
@@ -896,7 +896,7 @@ The installer will quit and all changes will be lost.
- ファイルシステム(&L)
+ ファイルシステム (&L)
@@ -919,7 +919,7 @@ The installer will quit and all changes will be lost.
- システムを暗号化(&C)
+ システムを暗号化 (&C)
@@ -990,7 +990,7 @@ The installer will quit and all changes will be lost.
- 今すぐ再起動(&R)
+ 今すぐ再起動 (&R)
@@ -1107,12 +1107,12 @@ The installer will quit and all changes will be lost.
- 中止(&C)
+ 中止 (&C)
- 了解(&O)
+ 了解 (&O)
@@ -1219,7 +1219,7 @@ The installer will quit and all changes will be lost.
- 変更(&C)...
+ 変更 (&C)...
@@ -1696,7 +1696,7 @@ The installer will quit and all changes will be lost.
- ストレージデバイス (&V):
+ ストレージデバイス (&V):
@@ -1706,22 +1706,22 @@ The installer will quit and all changes will be lost.
- 新しいパーティションテーブル(&T)
+ 新しいパーティションテーブル (&T)
- 作成(&a)
+ 作成 (&A)
- 編集(&E)
+ 編集 (&E)
- 削除(&D)
+ 削除 (&D)
@@ -1751,7 +1751,7 @@ The installer will quit and all changes will be lost.
- %1 上で新しいパーティションテーブルを作成します。よろしいですか?
+ %1 上で新しいパーティションテーブルを作成します。よろしいですか?
@@ -1859,7 +1859,7 @@ The installer will quit and all changes will be lost.
- ブートパーティションは暗号化されたルートパーティションとともにセットアップされましたが、ブートパーティションは暗号化されていません。<br/><br/>重要なシステムファイルが暗号化されていないパーティションに残されているため、このようなセットアップは安全上の懸念があります。<br/>セットアップを続行することはできますが、後でシステムの起動中にファイルシステムが解除されるおそれがあります。<br/>ブートパーティションを暗号化させるには、前の画面に戻って、再度パーティションを作成し、パーティション作成ウィンドウ内で<strong>Encrypt</strong>(暗号化)を選択してください。
+ ブートパーティションは暗号化されたルートパーティションとともにセットアップされましたが、ブートパーティションは暗号化されていません。<br/><br/>重要なシステムファイルが暗号化されていないパーティションに残されているため、このようなセットアップは安全上の懸念があります。<br/>セットアップを続行することはできますが、後でシステムの起動中にファイルシステムが解除されるおそれがあります。<br/>ブートパーティションを暗号化させるには、前の画面に戻って、再度パーティションを作成し、パーティション作成ウィンドウ内で<strong>Encrypt</strong> (暗号化) を選択してください。
@@ -1917,7 +1917,7 @@ The installer will quit and all changes will be lost.
- 設定ファイルは全て保護されるわけではありません。
+ 設定ファイルはすべて保護されるわけではありません。
@@ -2654,7 +2654,7 @@ Output:
- インストールトラッキングは %1 にとって、どれだけのユーザーが どのハードに %1 をインストールするのか(下記の2つのオプション)、どのようなアプリケーションが好まれているのかについての情報を把握することの補助を行っています。 どのような情報が送信されているのか確認したい場合は、以下の各エリアのヘルプのアイコンをクリックして下さい。
+ インストールトラッキングは %1 にとって、どれだけのユーザーが どのハードに %1 をインストールするのか (下記の2つのオプション)、どのようなアプリケーションが好まれているのかについての情報を把握することの補助を行っています。 どのような情報が送信されているのか確認したい場合は、以下の各エリアのヘルプのアイコンをクリックして下さい。
@@ -2757,7 +2757,7 @@ Output:
- 全てのサイズ:
+ すべてのサイズ:
@@ -2775,7 +2775,7 @@ Output:
- 全てのセクター:
+ すべてのセクター:
@@ -2793,17 +2793,17 @@ Output:
- 言語(&L):
+ 言語 (&L):
- リリースノート(&R)
+ リリースノート (&R)
- 既知の問題(&K)
+ 既知の問題 (&K)
@@ -2813,7 +2813,7 @@ Output:
- 説明(&A)
+ 説明 (&A)
diff --git a/lang/calamares_mk.ts b/lang/calamares_mk.ts
new file mode 100644
index 000000000..b6002eb4a
--- /dev/null
+++ b/lang/calamares_mk.ts
@@ -0,0 +1,2847 @@
+
+
+ BootInfoWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BootLoaderModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::BlankViewStep
+
+
+
+ Празна Страна
+
+
+
+ Calamares::DebugWindow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Алатки
+
+
+
+
+
+
+
+
+ Calamares::ExecutionViewStep
+
+
+
+ Инсталирај
+
+
+
+ Calamares::JobThread
+
+
+
+ Готово
+
+
+
+ Calamares::ProcessJob
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::PythonJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Calamares::ViewManager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Инсталацијата е готова. Исклучете го инсталерот.
+
+
+
+
+ Грешка
+
+
+
+
+
+
+
+
+ CalamaresPython::Helper
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CalamaresWindow
+
+
+
+
+
+
+
+
+
+
+
+
+ CheckerWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ChoicePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ClearMountsJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ClearTempMountsJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CommandList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ContextualProcessJob
+
+
+
+
+
+
+
+ CreatePartitionDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreatePartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreatePartitionTableDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreatePartitionTableJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreateUserJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CreateVolumeGroupJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeactivateVolumeGroupJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeletePartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInfoWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceModel
+
+
+
+
+
+
+
+
+
+
+
+
+ DracutLuksCfgJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DummyCppJob
+
+
+
+
+
+
+
+ EditExistingPartitionDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EncryptWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FillGlobalStorageJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FinishedPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FinishedViewStep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FormatPartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ InteractiveTerminalPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ InteractiveTerminalViewStep
+
+
+
+
+
+
+
+ KeyboardPage
+
+
+
+
+
+
+
+
+
+
+
+
+ KeyboardViewStep
+
+
+
+
+
+
+
+ LCLocaleDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LicensePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %1 is an untranslatable product name, example: Creative Audigy driver
+
+
+
+
+
+ %1 is usually a vendor name, example: Nvidia graphics driver
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LicenseViewStep
+
+
+
+
+
+
+
+ LocalePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Language (Country)
+
+
+
+
+ LocaleViewStep
+
+
+
+
+
+
+
+
+
+
+
+
+ NetInstallPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NetInstallViewStep
+
+
+
+
+
+
+
+ PWQ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page_Keyboard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page_UserSetup
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionLabelsView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionModel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PartitionViewStep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PlasmaLnfJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PlasmaLnfPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PlasmaLnfViewStep
+
+
+
+
+
+
+
+ PreserveFiles
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ProcessResult
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ QObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RemoveVolumeGroupJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ReplaceWidget
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RequirementsChecker
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResizeFSJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResizePartitionJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResizeVolumeGroupJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ScanningDialog
+
+
+
+
+
+
+
+
+
+
+
+
+ SetHostNameJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetKeyboardLayoutJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetPartFlagsJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetPasswordJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetTimezoneJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ShellProcessJob
+
+
+
+
+
+
+
+ SlideCounter
+
+
+
+ slide counter, %1 of %2 (numeric)
+
+
+
+
+ SummaryPage
+
+
+
+
+
+
+
+ SummaryViewStep
+
+
+
+
+
+
+
+ TrackingInstallJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingMachineNeonJob
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingViewStep
+
+
+
+
+
+
+
+ UsersPage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UsersViewStep
+
+
+
+
+
+
+
+ VolumeGroupBaseDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WelcomePage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WelcomeViewStep
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lang/calamares_ru.ts b/lang/calamares_ru.ts
index 18740e526..1dffae487 100644
--- a/lang/calamares_ru.ts
+++ b/lang/calamares_ru.ts
@@ -718,22 +718,22 @@ The installer will quit and all changes will be lost.
-
+ Создать новую группу томов на диске %1
-
+ Создать новую группу томов на диске %1
-
+ Cоздание новой группы томов на диске %1
-
+ Программа установки не смогла создать группу томов на диске '%1'.
@@ -821,7 +821,7 @@ The installer will quit and all changes will be lost.
-
+ %1 - (%2)
@@ -829,7 +829,7 @@ The installer will quit and all changes will be lost.
-
+ Записать LUKS настройки для Dracut в %1
@@ -1470,7 +1470,7 @@ The installer will quit and all changes will be lost.
-
+ Недопустимое целое значение свойства - %1
@@ -1724,12 +1724,12 @@ The installer will quit and all changes will be lost.
-
+ Новая группа томов
-
+ Изменить размер группы томов
@@ -1739,12 +1739,12 @@ The installer will quit and all changes will be lost.
-
+ Удалить группу томов
-
+ Уст&ановить загрузчик в:
@@ -1884,7 +1884,7 @@ The installer will quit and all changes will be lost.
-
+ Заменитель
@@ -1905,12 +1905,12 @@ The installer will quit and all changes will be lost.
-
+ Сохраняю файлы на потом...
-
+ Нет файлов, которые требуется сохранить на потом.
@@ -1924,7 +1924,8 @@ The installer will quit and all changes will be lost.
-
+
+Вывода из команды не последовало.
@@ -2031,17 +2032,17 @@ Output:
-
+ Удалить группу томов на диске %1
-
+ Удалить группу томов на диске %1
-
+ Установщик не смог удалить группу томов на диске '%1'.
@@ -2182,12 +2183,12 @@ Output:
-
+ Изменить размер файловой системы
-
+ Недействительная конфигурация
@@ -2213,7 +2214,7 @@ Output:
-
+ Не удалось изменить размер
@@ -2622,7 +2623,7 @@ Output:
-
+ Заменитель
diff --git a/lang/python/ar/LC_MESSAGES/python.mo b/lang/python/ar/LC_MESSAGES/python.mo
index 05f9dbc33..43e3ffa7e 100644
Binary files a/lang/python/ar/LC_MESSAGES/python.mo and b/lang/python/ar/LC_MESSAGES/python.mo differ
diff --git a/lang/python/ar/LC_MESSAGES/python.po b/lang/python/ar/LC_MESSAGES/python.po
index 9c1c7bda4..0250a0690 100644
--- a/lang/python/ar/LC_MESSAGES/python.po
+++ b/lang/python/ar/LC_MESSAGES/python.po
@@ -3,6 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
+# Translators:
+# Abubakaragoub Y , 2018
+#
#, fuzzy
msgid ""
msgstr ""
@@ -10,6 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
+"Last-Translator: Abubakaragoub Y , 2018\n"
"Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,43 +23,43 @@ msgstr ""
#: src/modules/displaymanager/main.py:380
msgid "Cannot write KDM configuration file"
-msgstr ""
+msgstr "فشلت كتابة ملف ضبط KDM."
#: src/modules/displaymanager/main.py:381
msgid "KDM config file {!s} does not exist"
-msgstr ""
+msgstr "ملف ضبط KDM {!s} غير موجود"
#: src/modules/displaymanager/main.py:442
msgid "Cannot write LXDM configuration file"
-msgstr ""
+msgstr "فشلت كتابة ملف ضبط LXDM."
#: src/modules/displaymanager/main.py:443
msgid "LXDM config file {!s} does not exist"
-msgstr ""
+msgstr "ملف ضبط LXDM {!s} غير موجود"
#: src/modules/displaymanager/main.py:517
msgid "Cannot write LightDM configuration file"
-msgstr ""
+msgstr "فشلت كتابة ملف ضبط LightDM."
#: src/modules/displaymanager/main.py:518
msgid "LightDM config file {!s} does not exist"
-msgstr ""
+msgstr "ملف ضبط LightDM {!s} غير موجود"
#: src/modules/displaymanager/main.py:592
msgid "Cannot configure LightDM"
-msgstr ""
+msgstr "فشل ضبط LightDM"
#: src/modules/displaymanager/main.py:593
msgid "No LightDM greeter installed."
-msgstr ""
+msgstr "لم يتم تصيب LightDM"
#: src/modules/displaymanager/main.py:624
msgid "Cannot write SLIM configuration file"
-msgstr ""
+msgstr "فشلت كتابة ملف ضبط SLIM."
#: src/modules/displaymanager/main.py:625
msgid "SLIM config file {!s} does not exist"
-msgstr ""
+msgstr "ملف ضبط SLIM {!s} غير موجود"
#: src/modules/displaymanager/main.py:740
#: src/modules/displaymanager/main.py:772
@@ -78,28 +82,28 @@ msgstr ""
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
-msgstr ""
+msgstr "الغاء تحميل ملف النظام"
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
-msgstr ""
+msgstr "عملية بايثون دميه"
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
-msgstr ""
+msgstr "عملية دميه خطوه بايثون {}"
#: src/modules/machineid/main.py:35
msgid "Generate machine-id."
-msgstr ""
+msgstr "توليد معرف الجهاز"
#: src/modules/packages/main.py:62
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
-msgstr ""
+msgstr "جاري تحميل الحزم (%(count)d/%(total)d)"
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
msgid "Install packages."
-msgstr ""
+msgstr "تثبيت الحزم"
#: src/modules/packages/main.py:67
#, python-format
diff --git a/lang/python/es/LC_MESSAGES/python.mo b/lang/python/es/LC_MESSAGES/python.mo
index a8182412d..e3aaa18ec 100644
Binary files a/lang/python/es/LC_MESSAGES/python.mo and b/lang/python/es/LC_MESSAGES/python.mo differ
diff --git a/lang/python/es/LC_MESSAGES/python.po b/lang/python/es/LC_MESSAGES/python.po
index 6cd814f28..7298ce485 100644
--- a/lang/python/es/LC_MESSAGES/python.po
+++ b/lang/python/es/LC_MESSAGES/python.po
@@ -6,6 +6,7 @@
# Translators:
# strel, 2017
# Francisco Sánchez López de Lerma , 2018
+# Guido Grasso , 2018
#
#, fuzzy
msgid ""
@@ -14,7 +15,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
-"Last-Translator: Francisco Sánchez López de Lerma , 2018\n"
+"Last-Translator: Guido Grasso , 2018\n"
"Language-Team: Spanish (https://www.transifex.com/calamares/teams/20061/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,31 +25,31 @@ msgstr ""
#: src/modules/displaymanager/main.py:380
msgid "Cannot write KDM configuration file"
-msgstr ""
+msgstr "No se puede escribir el archivo de configuración KDM"
#: src/modules/displaymanager/main.py:381
msgid "KDM config file {!s} does not exist"
-msgstr ""
+msgstr "El archivo de configuración {!s} de KDM no existe"
#: src/modules/displaymanager/main.py:442
msgid "Cannot write LXDM configuration file"
-msgstr ""
+msgstr "No se puede escribir el archivo de configuración LXDM"
#: src/modules/displaymanager/main.py:443
msgid "LXDM config file {!s} does not exist"
-msgstr ""
+msgstr "El archivo de configuracion {!s} de LXDM no existe"
#: src/modules/displaymanager/main.py:517
msgid "Cannot write LightDM configuration file"
-msgstr ""
+msgstr "No se puede escribir el archivo de configuración de LightDM"
#: src/modules/displaymanager/main.py:518
msgid "LightDM config file {!s} does not exist"
-msgstr ""
+msgstr "El archivo de configuración {!s} de LightDM no existe"
#: src/modules/displaymanager/main.py:592
msgid "Cannot configure LightDM"
-msgstr ""
+msgstr "No se puede configurar LightDM"
#: src/modules/displaymanager/main.py:593
msgid "No LightDM greeter installed."
@@ -56,16 +57,18 @@ msgstr ""
#: src/modules/displaymanager/main.py:624
msgid "Cannot write SLIM configuration file"
-msgstr ""
+msgstr "No se puede escribir el archivo de configuración de SLIM"
#: src/modules/displaymanager/main.py:625
msgid "SLIM config file {!s} does not exist"
-msgstr ""
+msgstr "El archivo de configuración {!s} de SLIM no existe"
#: src/modules/displaymanager/main.py:740
#: src/modules/displaymanager/main.py:772
msgid "No display managers selected for the displaymanager module."
msgstr ""
+"No se ha seleccionado ningún gestor de pantalla para el modulo "
+"displaymanager"
#: src/modules/displaymanager/main.py:741
msgid ""
@@ -76,10 +79,12 @@ msgstr ""
#: src/modules/displaymanager/main.py:773
msgid "The list is empty after checking for installed display managers."
msgstr ""
+"La lista está vacía después de haber chequeado los gestores de pantalla "
+"instalados"
#: src/modules/displaymanager/main.py:821
msgid "Display manager configuration was incomplete"
-msgstr ""
+msgstr "La configuración del gestor de pantalla estaba incompleta"
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
diff --git a/lang/python/eu/LC_MESSAGES/python.mo b/lang/python/eu/LC_MESSAGES/python.mo
index 5c9c13e0c..5abe8e5b2 100644
Binary files a/lang/python/eu/LC_MESSAGES/python.mo and b/lang/python/eu/LC_MESSAGES/python.mo differ
diff --git a/lang/python/eu/LC_MESSAGES/python.po b/lang/python/eu/LC_MESSAGES/python.po
index 57a4e1b84..dc5751b86 100644
--- a/lang/python/eu/LC_MESSAGES/python.po
+++ b/lang/python/eu/LC_MESSAGES/python.po
@@ -3,6 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
+# Translators:
+# Ander Elortondo, 2019
+#
#, fuzzy
msgid ""
msgstr ""
@@ -10,6 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
+"Last-Translator: Ander Elortondo, 2019\n"
"Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,98 +23,102 @@ msgstr ""
#: src/modules/displaymanager/main.py:380
msgid "Cannot write KDM configuration file"
-msgstr ""
+msgstr "Ezin da KDM konfigurazio fitxategia idatzi"
#: src/modules/displaymanager/main.py:381
msgid "KDM config file {!s} does not exist"
-msgstr ""
+msgstr "KDM konfigurazio fitxategia {!s} ez da existitzen"
#: src/modules/displaymanager/main.py:442
msgid "Cannot write LXDM configuration file"
-msgstr ""
+msgstr "Ezin da LXDM konfigurazio fitxategia idatzi"
#: src/modules/displaymanager/main.py:443
msgid "LXDM config file {!s} does not exist"
-msgstr ""
+msgstr "LXDM konfigurazio fitxategia {!s} ez da existitzen"
#: src/modules/displaymanager/main.py:517
msgid "Cannot write LightDM configuration file"
-msgstr ""
+msgstr "Ezin da LightDM konfigurazio fitxategia idatzi"
#: src/modules/displaymanager/main.py:518
msgid "LightDM config file {!s} does not exist"
-msgstr ""
+msgstr "LightDM konfigurazio fitxategia {!s} ez da existitzen"
#: src/modules/displaymanager/main.py:592
msgid "Cannot configure LightDM"
-msgstr ""
+msgstr "Ezin da LightDM konfiguratu"
#: src/modules/displaymanager/main.py:593
msgid "No LightDM greeter installed."
-msgstr ""
+msgstr "Ez dago LightDM harrera instalatua."
#: src/modules/displaymanager/main.py:624
msgid "Cannot write SLIM configuration file"
-msgstr ""
+msgstr "Ezin da SLIM konfigurazio fitxategia idatzi"
#: src/modules/displaymanager/main.py:625
msgid "SLIM config file {!s} does not exist"
-msgstr ""
+msgstr "SLIM konfigurazio fitxategia {!s} ez da existitzen"
#: src/modules/displaymanager/main.py:740
#: src/modules/displaymanager/main.py:772
msgid "No display managers selected for the displaymanager module."
msgstr ""
+"Ez da pantaila kudeatzailerik aukeratu pantaila-kudeatzaile modulurako."
#: src/modules/displaymanager/main.py:741
msgid ""
"The displaymanagers list is empty or undefined in bothglobalstorage and "
"displaymanager.conf."
msgstr ""
+"Pantaila-kudeatzaile-zerrenda hutsik dago edo definitzeke bothglobalstorage "
+"eta displaymanager.conf"
#: src/modules/displaymanager/main.py:773
msgid "The list is empty after checking for installed display managers."
msgstr ""
+"Zerrenda hutsik dago instalatutako pantaila-kudeatzaileak egiaztatu ondoren."
#: src/modules/displaymanager/main.py:821
msgid "Display manager configuration was incomplete"
-msgstr ""
+msgstr "Pantaila kudeatzaile konfigurazioa osotu gabe"
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
-msgstr ""
+msgstr "Fitxategi sistemak desmuntatu."
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
-msgstr ""
+msgstr "Dummy python lana."
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
-msgstr ""
+msgstr "Dummy python urratsa {}"
#: src/modules/machineid/main.py:35
msgid "Generate machine-id."
-msgstr ""
+msgstr "Sortu makina-id."
#: src/modules/packages/main.py:62
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
-msgstr ""
+msgstr "Paketeak prozesatzen (%(count)d/ %(total)d) "
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
msgid "Install packages."
-msgstr ""
+msgstr "Instalatu paketeak"
#: src/modules/packages/main.py:67
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pakete bat instalatzen."
+msgstr[1] "%(num)dpakete instalatzen."
#: src/modules/packages/main.py:70
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pakete bat kentzen."
+msgstr[1] "%(num)dpakete kentzen."
diff --git a/lang/python/fr/LC_MESSAGES/python.mo b/lang/python/fr/LC_MESSAGES/python.mo
index 602af1c17..21eee76c0 100644
Binary files a/lang/python/fr/LC_MESSAGES/python.mo and b/lang/python/fr/LC_MESSAGES/python.mo differ
diff --git a/lang/python/fr/LC_MESSAGES/python.po b/lang/python/fr/LC_MESSAGES/python.po
index c1c4af1ef..f51f485b0 100644
--- a/lang/python/fr/LC_MESSAGES/python.po
+++ b/lang/python/fr/LC_MESSAGES/python.po
@@ -6,8 +6,10 @@
# Translators:
# Paul Combal , 2017
# Abdallah B , 2017
-# Aestan , 2018
+# Aestan , 2018
# Jeremy Gourmel , 2018
+# Aurnytoraink , 2018
+# Florian B , 2018
#
#, fuzzy
msgid ""
@@ -16,7 +18,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
-"Last-Translator: Jeremy Gourmel , 2018\n"
+"Last-Translator: Florian B , 2018\n"
"Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,23 +28,23 @@ msgstr ""
#: src/modules/displaymanager/main.py:380
msgid "Cannot write KDM configuration file"
-msgstr ""
+msgstr "Impossible d'écrire le fichier de configuration KDM"
#: src/modules/displaymanager/main.py:381
msgid "KDM config file {!s} does not exist"
-msgstr ""
+msgstr "Le fichier de configuration KDM n'existe pas"
#: src/modules/displaymanager/main.py:442
msgid "Cannot write LXDM configuration file"
-msgstr ""
+msgstr "Impossible d'écrire le fichier de configuration LXDM"
#: src/modules/displaymanager/main.py:443
msgid "LXDM config file {!s} does not exist"
-msgstr ""
+msgstr "Le fichier de configuration LXDM n'existe pas"
#: src/modules/displaymanager/main.py:517
msgid "Cannot write LightDM configuration file"
-msgstr ""
+msgstr "Impossible d'écrire le fichier de configuration LightDM"
#: src/modules/displaymanager/main.py:518
msgid "LightDM config file {!s} does not exist"
@@ -50,15 +52,15 @@ msgstr ""
#: src/modules/displaymanager/main.py:592
msgid "Cannot configure LightDM"
-msgstr ""
+msgstr "Impossible de configurer LightDM"
#: src/modules/displaymanager/main.py:593
msgid "No LightDM greeter installed."
-msgstr ""
+msgstr "Aucun hôte LightDM est installé"
#: src/modules/displaymanager/main.py:624
msgid "Cannot write SLIM configuration file"
-msgstr ""
+msgstr "Impossible d'écrire le fichier de configuration SLIM"
#: src/modules/displaymanager/main.py:625
msgid "SLIM config file {!s} does not exist"
@@ -68,20 +70,26 @@ msgstr ""
#: src/modules/displaymanager/main.py:772
msgid "No display managers selected for the displaymanager module."
msgstr ""
+"Aucun gestionnaire d'affichage n'a été sélectionné pour le module de "
+"gestionnaire d'affichage"
#: src/modules/displaymanager/main.py:741
msgid ""
"The displaymanagers list is empty or undefined in bothglobalstorage and "
"displaymanager.conf."
msgstr ""
+"La liste des gestionnaires d'affichage est vide ou indéfinie dans "
+"bothglobalstorage et displaymanager.conf."
#: src/modules/displaymanager/main.py:773
msgid "The list is empty after checking for installed display managers."
msgstr ""
+"La liste est vide après vérification des gestionnaires d'affichage "
+"installés."
#: src/modules/displaymanager/main.py:821
msgid "Display manager configuration was incomplete"
-msgstr ""
+msgstr "La configuration du gestionnaire d'affichage était incomplète"
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
diff --git a/lang/python/id/LC_MESSAGES/python.mo b/lang/python/id/LC_MESSAGES/python.mo
index 0dba5b35a..9c932366f 100644
Binary files a/lang/python/id/LC_MESSAGES/python.mo and b/lang/python/id/LC_MESSAGES/python.mo differ
diff --git a/lang/python/id/LC_MESSAGES/python.po b/lang/python/id/LC_MESSAGES/python.po
index c3d730acd..718ed81cc 100644
--- a/lang/python/id/LC_MESSAGES/python.po
+++ b/lang/python/id/LC_MESSAGES/python.po
@@ -6,6 +6,7 @@
# Translators:
# Choiril Abdul, 2018
# Harry Suryapambagya , 2018
+# Wantoyo , 2018
#
#, fuzzy
msgid ""
@@ -14,7 +15,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
-"Last-Translator: Harry Suryapambagya , 2018\n"
+"Last-Translator: Wantoyo , 2018\n"
"Language-Team: Indonesian (https://www.transifex.com/calamares/teams/20061/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,62 +25,66 @@ msgstr ""
#: src/modules/displaymanager/main.py:380
msgid "Cannot write KDM configuration file"
-msgstr ""
+msgstr "Gak bisa menulis file konfigurasi KDM"
#: src/modules/displaymanager/main.py:381
msgid "KDM config file {!s} does not exist"
-msgstr ""
+msgstr "File {!s} config KDM belum ada"
#: src/modules/displaymanager/main.py:442
msgid "Cannot write LXDM configuration file"
-msgstr ""
+msgstr "Gak bisa menulis file konfigurasi LXDM"
#: src/modules/displaymanager/main.py:443
msgid "LXDM config file {!s} does not exist"
-msgstr ""
+msgstr "File {!s} config LXDM enggak ada"
#: src/modules/displaymanager/main.py:517
msgid "Cannot write LightDM configuration file"
-msgstr ""
+msgstr "Gak bisa menulis file konfigurasi LightDM"
#: src/modules/displaymanager/main.py:518
msgid "LightDM config file {!s} does not exist"
-msgstr ""
+msgstr "File {!s} config LightDM belum ada"
#: src/modules/displaymanager/main.py:592
msgid "Cannot configure LightDM"
-msgstr ""
+msgstr "Gak bisa mengkonfigurasi LightDM"
#: src/modules/displaymanager/main.py:593
msgid "No LightDM greeter installed."
-msgstr ""
+msgstr "Tiada LightDM greeter yang terinstal."
#: src/modules/displaymanager/main.py:624
msgid "Cannot write SLIM configuration file"
-msgstr ""
+msgstr "Gak bisa menulis file konfigurasi SLIM"
#: src/modules/displaymanager/main.py:625
msgid "SLIM config file {!s} does not exist"
-msgstr ""
+msgstr "File {!s} config SLIM belum ada"
#: src/modules/displaymanager/main.py:740
#: src/modules/displaymanager/main.py:772
msgid "No display managers selected for the displaymanager module."
-msgstr ""
+msgstr "Tiada display manager yang dipilih untuk modul displaymanager."
#: src/modules/displaymanager/main.py:741
msgid ""
"The displaymanagers list is empty or undefined in bothglobalstorage and "
"displaymanager.conf."
msgstr ""
+"Daftar displaymanager telah kosong atau takdidefinisikan dalam "
+"bothglobalstorage dan displaymanager.conf."
#: src/modules/displaymanager/main.py:773
msgid "The list is empty after checking for installed display managers."
msgstr ""
+"Daftar telah kosong sesudah pemeriksaan untuk display manager yang "
+"terinstal."
#: src/modules/displaymanager/main.py:821
msgid "Display manager configuration was incomplete"
-msgstr ""
+msgstr "Konfigurasi display manager belum rampung"
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
@@ -104,13 +109,13 @@ msgstr "Paket pemrosesan (%(count)d/%(total)d)"
#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
msgid "Install packages."
-msgstr "pasang paket"
+msgstr "Instal paket-paket."
#: src/modules/packages/main.py:67
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
-msgstr[0] "memasang paket %(num)d"
+msgstr[0] "Menginstal paket %(num)d"
#: src/modules/packages/main.py:70
#, python-format
diff --git a/lang/python/ja/LC_MESSAGES/python.mo b/lang/python/ja/LC_MESSAGES/python.mo
index f95e6b93a..687043bbf 100644
Binary files a/lang/python/ja/LC_MESSAGES/python.mo and b/lang/python/ja/LC_MESSAGES/python.mo differ
diff --git a/lang/python/ja/LC_MESSAGES/python.po b/lang/python/ja/LC_MESSAGES/python.po
index 8a51a0394..d6b28c627 100644
--- a/lang/python/ja/LC_MESSAGES/python.po
+++ b/lang/python/ja/LC_MESSAGES/python.po
@@ -5,6 +5,7 @@
#
# Translators:
# Takefumi Nagata, 2018
+# 諏訪子 洩矢, 2018
#
#, fuzzy
msgid ""
@@ -13,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
-"Last-Translator: Takefumi Nagata, 2018\n"
+"Last-Translator: 諏訪子 洩矢, 2018\n"
"Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -75,7 +76,7 @@ msgstr ""
#: src/modules/displaymanager/main.py:773
msgid "The list is empty after checking for installed display managers."
-msgstr ""
+msgstr "インストールされたディスプレイマネージャーに検索しましたと、リストが空です。"
#: src/modules/displaymanager/main.py:821
msgid "Display manager configuration was incomplete"
diff --git a/lang/python/mk/LC_MESSAGES/python.mo b/lang/python/mk/LC_MESSAGES/python.mo
new file mode 100644
index 000000000..62fdc0d8a
Binary files /dev/null and b/lang/python/mk/LC_MESSAGES/python.mo differ
diff --git a/lang/python/mk/LC_MESSAGES/python.po b/lang/python/mk/LC_MESSAGES/python.po
new file mode 100644
index 000000000..16a51e0c2
--- /dev/null
+++ b/lang/python/mk/LC_MESSAGES/python.po
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+# Translators:
+# Martin Ristovski , 2018
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-10-05 11:34-0400\n"
+"PO-Revision-Date: 2017-08-09 10:34+0000\n"
+"Last-Translator: Martin Ristovski , 2018\n"
+"Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+#: src/modules/displaymanager/main.py:380
+msgid "Cannot write KDM configuration file"
+msgstr "KDM конфигурациониот фајл не може да се создаде"
+
+#: src/modules/displaymanager/main.py:381
+msgid "KDM config file {!s} does not exist"
+msgstr "KDM конфигурациониот фајл {!s} не постои"
+
+#: src/modules/displaymanager/main.py:442
+msgid "Cannot write LXDM configuration file"
+msgstr "LXDM конфигурациониот фајл не може да се создаде"
+
+#: src/modules/displaymanager/main.py:443
+msgid "LXDM config file {!s} does not exist"
+msgstr "LXDM конфигурациониот фајл {!s} не постои"
+
+#: src/modules/displaymanager/main.py:517
+msgid "Cannot write LightDM configuration file"
+msgstr "LightDM конфигурациониот фајл не може да се создаде"
+
+#: src/modules/displaymanager/main.py:518
+msgid "LightDM config file {!s} does not exist"
+msgstr "LightDM конфигурациониот фајл {!s} не постои"
+
+#: src/modules/displaymanager/main.py:592
+msgid "Cannot configure LightDM"
+msgstr "Не може да се подеси LightDM"
+
+#: src/modules/displaymanager/main.py:593
+msgid "No LightDM greeter installed."
+msgstr "Нема инсталирано LightDM поздравувач"
+
+#: src/modules/displaymanager/main.py:624
+msgid "Cannot write SLIM configuration file"
+msgstr "SLIM конфигурациониот фајл не може да се создаде"
+
+#: src/modules/displaymanager/main.py:625
+msgid "SLIM config file {!s} does not exist"
+msgstr "SLIM конфигурациониот фајл {!s} не постои"
+
+#: src/modules/displaymanager/main.py:740
+#: src/modules/displaymanager/main.py:772
+msgid "No display managers selected for the displaymanager module."
+msgstr "Немате избрано дисплеј менаџер за displaymanager модулот."
+
+#: src/modules/displaymanager/main.py:741
+msgid ""
+"The displaymanagers list is empty or undefined in bothglobalstorage and "
+"displaymanager.conf."
+msgstr ""
+
+#: src/modules/displaymanager/main.py:773
+msgid "The list is empty after checking for installed display managers."
+msgstr ""
+
+#: src/modules/displaymanager/main.py:821
+msgid "Display manager configuration was incomplete"
+msgstr ""
+
+#: src/modules/umount/main.py:40
+msgid "Unmount file systems."
+msgstr ""
+
+#: src/modules/dummypython/main.py:44
+msgid "Dummy python job."
+msgstr ""
+
+#: src/modules/dummypython/main.py:97
+msgid "Dummy python step {}"
+msgstr ""
+
+#: src/modules/machineid/main.py:35
+msgid "Generate machine-id."
+msgstr ""
+
+#: src/modules/packages/main.py:62
+#, python-format
+msgid "Processing packages (%(count)d / %(total)d)"
+msgstr ""
+
+#: src/modules/packages/main.py:64 src/modules/packages/main.py:74
+msgid "Install packages."
+msgstr ""
+
+#: src/modules/packages/main.py:67
+#, python-format
+msgid "Installing one package."
+msgid_plural "Installing %(num)d packages."
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/modules/packages/main.py:70
+#, python-format
+msgid "Removing one package."
+msgid_plural "Removing %(num)d packages."
+msgstr[0] ""
+msgstr[1] ""
diff --git a/lang/txload.cpp b/lang/txload.cpp
index 51b9dacb1..36e0f71a2 100644
--- a/lang/txload.cpp
+++ b/lang/txload.cpp
@@ -16,6 +16,11 @@
* along with Calamares. If not, see .
*/
+/*
+ * Tool to find differences between translations (can be used to help
+ * merging them into one). See usage string, below, for details.
+ */
+
#include
#include
#include
@@ -23,6 +28,16 @@
#include
+static const char usage[] = "Usage: txload [ ...]\n"
+ "\n"
+ "Reads a .ts source file and zero or more .ts \n"
+ "files, and does a comparison between the translations. Source (English)\n"
+ "strings that are untranslated are flagged in each of the translation\n"
+ "files, while differences in the translations are themselves also shown.\n"
+ "\n"
+ "Outputs to stdout a human-readable list of differences between the\n"
+ "translations.\n";
+
bool load_file(const char* filename, QDomDocument& doc)
{
QFile file(filename);
@@ -158,7 +173,10 @@ int main(int argc, char** argv)
QCoreApplication a(argc, argv);
if (argc < 2)
+ {
+ qWarning() << usage;
return 1;
+ }
QDomDocument doc("master");
if ( !load_file(argv[1], doc) )
diff --git a/src/libcalamares/PythonJobApi.cpp b/src/libcalamares/PythonJobApi.cpp
index f540c2683..b953f821a 100644
--- a/src/libcalamares/PythonJobApi.cpp
+++ b/src/libcalamares/PythonJobApi.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
- * Copyright 2017-2018, Adriaan de Groot
+ * Copyright 2017-2019, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -275,16 +275,21 @@ gettext_path()
}
_add_localedirs( candidatePaths, QDir().canonicalPath() ); // .
- cDebug() << "Standard paths" << candidatePaths;
+ cDebug() << "Determining gettext path from" << candidatePaths;
- for ( auto lang : _gettext_languages() )
+ QStringList candidateLanguages = _gettext_languages();
+
+ for ( const auto& lang : candidateLanguages )
for ( auto localedir : candidatePaths )
{
QDir ldir( localedir );
- cDebug() << "Checking" << lang << "in" <, YEAR.
#
+# Translators:
+# Abubakaragoub Y , 2018
+#
#, fuzzy
msgid ""
msgstr ""
@@ -10,6 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2016-12-16 12:18+0000\n"
+"Last-Translator: Abubakaragoub Y , 2018\n"
"Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,24 +23,24 @@ msgstr ""
#: src/modules/dummypythonqt/main.py:84
msgid "Click me!"
-msgstr ""
+msgstr "اضغط علي!"
#: src/modules/dummypythonqt/main.py:94
msgid "A new QLabel."
-msgstr ""
+msgstr "QLabel جديد"
#: src/modules/dummypythonqt/main.py:97
msgid "Dummy PythonQt ViewStep"
-msgstr ""
+msgstr "دميه خطوة PythonQt "
#: src/modules/dummypythonqt/main.py:183
msgid "The Dummy PythonQt Job"
-msgstr ""
+msgstr "دميه عملية PythonQt "
#: src/modules/dummypythonqt/main.py:186
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
-msgstr ""
+msgstr "هذة دميه عملية خطوة PythonQt. و تقول: {}"
#: src/modules/dummypythonqt/main.py:190
msgid "A status message for Dummy PythonQt Job."
-msgstr ""
+msgstr "رسالة حاله دميه عملية خطوة PythonQt"
diff --git a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo
index 60bb83584..d508e3fac 100644
Binary files a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo and b/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po
index 9ac8d08f0..a336c22a0 100644
--- a/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po
+++ b/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po
@@ -3,6 +3,9 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
+# Translators:
+# Ander Elortondo, 2019
+#
#, fuzzy
msgid ""
msgstr ""
@@ -10,6 +13,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2016-12-16 12:18+0000\n"
+"Last-Translator: Ander Elortondo, 2019\n"
"Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,24 +23,24 @@ msgstr ""
#: src/modules/dummypythonqt/main.py:84
msgid "Click me!"
-msgstr ""
+msgstr "Egidazu klik!"
#: src/modules/dummypythonqt/main.py:94
msgid "A new QLabel."
-msgstr ""
+msgstr "QLabel berria."
#: src/modules/dummypythonqt/main.py:97
msgid "Dummy PythonQt ViewStep"
-msgstr ""
+msgstr "Dummy PythonQt pauso-ikuspegia"
#: src/modules/dummypythonqt/main.py:183
msgid "The Dummy PythonQt Job"
-msgstr ""
+msgstr " Dummy PythonQt lana"
#: src/modules/dummypythonqt/main.py:186
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
-msgstr ""
+msgstr "Hau Dummy PythonQt lana da. Dummy lanak zera dio: {}"
#: src/modules/dummypythonqt/main.py:190
msgid "A status message for Dummy PythonQt Job."
-msgstr ""
+msgstr "Dummy PythonQt lanaren egoera mezua."
diff --git a/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo
index 45d8fc355..c309c24d6 100644
Binary files a/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo and b/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po
index 082109871..fe75d0c55 100644
--- a/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po
+++ b/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po
@@ -5,7 +5,7 @@
#
# Translators:
# Paul Combal , 2017
-# Aestan , 2018
+# Aestan , 2018
#
#, fuzzy
msgid ""
@@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"PO-Revision-Date: 2016-12-16 12:18+0000\n"
-"Last-Translator: Aestan , 2018\n"
+"Last-Translator: Aestan , 2018\n"
"Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
diff --git a/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo b/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo
new file mode 100644
index 000000000..aae5bd9b4
Binary files /dev/null and b/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.mo differ
diff --git a/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.po b/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.po
new file mode 100644
index 000000000..82998bf47
--- /dev/null
+++ b/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.po
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+# Translators:
+# Martin Ristovski , 2018
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-10-05 11:34-0400\n"
+"PO-Revision-Date: 2016-12-16 12:18+0000\n"
+"Last-Translator: Martin Ristovski , 2018\n"
+"Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+#: src/modules/dummypythonqt/main.py:84
+msgid "Click me!"
+msgstr "Кликни ме!"
+
+#: src/modules/dummypythonqt/main.py:94
+msgid "A new QLabel."
+msgstr "Нов QLabel."
+
+#: src/modules/dummypythonqt/main.py:97
+msgid "Dummy PythonQt ViewStep"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:183
+msgid "The Dummy PythonQt Job"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:186
+msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
+msgstr ""
+
+#: src/modules/dummypythonqt/main.py:190
+msgid "A status message for Dummy PythonQt Job."
+msgstr ""
diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt
index 576f2e16e..b70c6d1ab 100644
--- a/src/modules/locale/CMakeLists.txt
+++ b/src/modules/locale/CMakeLists.txt
@@ -53,6 +53,17 @@ if( ECM_FOUND AND BUILD_TESTING )
${YAMLCPP_LIBRARY}
)
set_target_properties( geoiptest PROPERTIES AUTOMOC TRUE )
+
+ ecm_add_test(
+ Tests.cpp
+ LocaleConfiguration.cpp
+ TEST_NAME
+ localetest
+ LINK_LIBRARIES
+ calamares
+ Qt5::Test
+ )
+ set_target_properties( localetest PROPERTIES AUTOMOC TRUE )
endif()
if( BUILD_TESTING )
diff --git a/src/modules/locale/LocaleConfiguration.cpp b/src/modules/locale/LocaleConfiguration.cpp
index 7c8ad3305..8bc2b2c77 100644
--- a/src/modules/locale/LocaleConfiguration.cpp
+++ b/src/modules/locale/LocaleConfiguration.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2016, Teo Mrnjavac
- * Copyright 2017-2018, Adriaan de Groot
+ * Copyright 2017-2019, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,14 +27,23 @@ LocaleConfiguration::LocaleConfiguration()
}
-LocaleConfiguration
-LocaleConfiguration::createDefault()
+LocaleConfiguration::LocaleConfiguration( const QString& localeName, const QString& formatsName )
+ : LocaleConfiguration()
{
- LocaleConfiguration lc = LocaleConfiguration();
- lc.lang = lc.lc_numeric = lc.lc_time = lc.lc_monetary = lc.lc_paper = lc.lc_name
- = lc.lc_address = lc.lc_telephone = lc.lc_measurement
- = lc.lc_identification = "en_US.UTF-8";
- return lc;
+ lc_numeric = lc_time = lc_monetary = lc_paper = lc_name
+ = lc_address = lc_telephone = lc_measurement
+ = lc_identification = formatsName;
+
+ (void) setLanguage( localeName );
+}
+
+
+void
+LocaleConfiguration::setLanguage(const QString& localeName )
+{
+ QString language = localeName.split( '_' ).first();
+ m_languageLocaleBcp47 = QLocale( language ).bcp47Name().toLower();
+ m_lang = localeName;
}
@@ -43,11 +52,7 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale,
const QStringList& availableLocales,
const QString& countryCode )
{
- LocaleConfiguration lc;
-
- // Note that the documentation how this works is in packages.conf
QString language = languageLocale.split( '_' ).first();
- lc.myLanguageLocaleBcp47 = QLocale(language).bcp47Name().toLower();
QStringList linesForLanguage;
for ( const QString &line : availableLocales )
@@ -264,19 +269,14 @@ LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale,
if ( lc_formats.isEmpty() )
lc_formats = lang;
- lc.lang = lang;
- lc.lc_address = lc.lc_identification = lc.lc_measurement = lc.lc_monetary
- = lc.lc_name = lc.lc_numeric = lc.lc_paper = lc.lc_telephone
- = lc.lc_time = lc_formats;
-
- return lc;
+ return LocaleConfiguration( lang, lc_formats );
}
bool
LocaleConfiguration::isEmpty() const
{
- return lang.isEmpty() &&
+ return m_lang.isEmpty() &&
lc_numeric.isEmpty() &&
lc_time.isEmpty() &&
lc_monetary.isEmpty() &&
@@ -294,8 +294,8 @@ LocaleConfiguration::toMap() const
{
QMap< QString, QString > map;
- if ( !lang.isEmpty() )
- map.insert( "LANG", lang );
+ if ( !m_lang.isEmpty() )
+ map.insert( "LANG", m_lang );
if ( !lc_numeric.isEmpty() )
map.insert( "LC_NUMERIC", lc_numeric );
@@ -327,8 +327,3 @@ LocaleConfiguration::toMap() const
return map;
}
-QString
-LocaleConfiguration::toBcp47() const
-{
- return myLanguageLocaleBcp47;
-}
diff --git a/src/modules/locale/LocaleConfiguration.h b/src/modules/locale/LocaleConfiguration.h
index c077ef6f7..abe90ffcb 100644
--- a/src/modules/locale/LocaleConfiguration.h
+++ b/src/modules/locale/LocaleConfiguration.h
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2016, Teo Mrnjavac
- * Copyright 2017-2018, Adriaan de Groot
+ * Copyright 2017-2019, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,28 +20,42 @@
#ifndef LOCALECONFIGURATION_H
#define LOCALECONFIGURATION_H
+#include
#include
#include
class LocaleConfiguration
{
public:
+ /// @brief Create an empty locale, with nothing set
explicit LocaleConfiguration();
+ /// @brief Create a locale with everything set to the given @p localeName
+ explicit LocaleConfiguration( const QString& localeName /* "en_US.UTF-8" */ )
+ : LocaleConfiguration( localeName, localeName ) { };
+ /// @brief Create a locale with language and formats separate
+ explicit LocaleConfiguration( const QString& localeName, const QString& formatsName );
- static LocaleConfiguration createDefault();
static LocaleConfiguration fromLanguageAndLocation( const QString& language,
const QStringList& availableLocales,
const QString& countryCode );
bool isEmpty() const;
- QMap< QString, QString > toMap() const;
+ /** @brief sets lang and the BCP47 representation
+ *
+ * Note that the documentation how this works is in packages.conf
+ */
+ void setLanguage( const QString& localeName );
+ QString language() const { return m_lang; }
+
// Note that the documentation how this works is in packages.conf
- QString toBcp47() const;
+ QString toBcp47() const { return m_languageLocaleBcp47; }
+
+ QMap< QString, QString > toMap() const;
// These become all uppercase in locale.conf, but we keep them lowercase here to
// avoid confusion with locale.h.
- QString lang, lc_numeric, lc_time, lc_monetary, lc_paper, lc_name, lc_address,
+ QString lc_numeric, lc_time, lc_monetary, lc_paper, lc_name, lc_address,
lc_telephone, lc_measurement, lc_identification;
// If the user has explicitly selected language (from the dialog)
@@ -49,7 +63,13 @@ public:
bool explicit_lang, explicit_lc;
private:
- QString myLanguageLocaleBcp47;
+ QString m_lang;
+ QString m_languageLocaleBcp47;
};
+inline QDebug& operator <<( QDebug& s, const LocaleConfiguration& l )
+{
+ return s << l.language() << '(' << l.toBcp47() << ") +" << l.lc_numeric;
+}
+
#endif // LOCALECONFIGURATION_H
diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp
index ea77d6b9f..9616ff22d 100644
--- a/src/modules/locale/LocalePage.cpp
+++ b/src/modules/locale/LocalePage.cpp
@@ -1,7 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
- * Copyright 2017-2018, Adriaan de Groot
+ * Copyright 2017-2019, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -164,16 +164,17 @@ LocalePage::LocalePage( QWidget* parent )
{
LCLocaleDialog* dlg =
new LCLocaleDialog( m_selectedLocaleConfiguration.isEmpty() ?
- guessLocaleConfiguration().lang :
- m_selectedLocaleConfiguration.lang,
+ guessLocaleConfiguration().language() :
+ m_selectedLocaleConfiguration.language(),
m_localeGenLines,
this );
dlg->exec();
if ( dlg->result() == QDialog::Accepted &&
!dlg->selectedLCLocale().isEmpty() )
{
- m_selectedLocaleConfiguration.lang = dlg->selectedLCLocale();
+ m_selectedLocaleConfiguration.setLanguage( dlg->selectedLCLocale() );
m_selectedLocaleConfiguration.explicit_lang = true;
+ this->updateGlobalLocale();
this->updateLocaleLabels();
}
@@ -317,7 +318,7 @@ LocalePage::init( const QString& initialRegion,
}
else
{
- cDebug() << "Cannot open file" << localeGenPath
+ cWarning() << "Cannot open file" << localeGenPath
<< ". Assuming the supported languages are already built into "
"the locale archive.";
QProcess localeA;
@@ -386,7 +387,11 @@ std::pair< QString, QString > LocalePage::prettyLocaleStatus( const LocaleConfig
{
using CalamaresUtils::LocaleLabel;
+<<<<<<< HEAD
LocaleLabel lang( lc.lang, LocaleLabel::LabelFormat::AlwaysWithCountry );
+=======
+ LocaleLabel lang( lc.language(), LocaleLabel::LabelFormat::AlwaysWithCountry );
+>>>>>>> 44211ee19a30eb062508bba565da274c53b16a71
LocaleLabel num( lc.lc_numeric, LocaleLabel::LabelFormat::AlwaysWithCountry );
return std::make_pair< QString, QString >(
@@ -443,7 +448,8 @@ LocalePage::onActivate()
!m_selectedLocaleConfiguration.explicit_lang )
{
auto newLocale = guessLocaleConfiguration();
- m_selectedLocaleConfiguration.lang = newLocale.lang;
+ m_selectedLocaleConfiguration.setLanguage( newLocale.language() );
+ updateGlobalLocale();
updateLocaleLabels();
}
}
@@ -452,41 +458,42 @@ LocalePage::onActivate()
LocaleConfiguration
LocalePage::guessLocaleConfiguration() const
{
- QLocale myLocale; // User-selected language
-
- // If we cannot say anything about available locales
- if ( m_localeGenLines.isEmpty() )
- {
- cWarning() << "guessLocaleConfiguration can't guess from an empty list.";
- return LocaleConfiguration::createDefault();
- }
-
- QString myLanguageLocale = myLocale.name();
- if ( myLanguageLocale.isEmpty() )
- return LocaleConfiguration::createDefault();
-
- return LocaleConfiguration::fromLanguageAndLocation( myLanguageLocale,
+ return LocaleConfiguration::fromLanguageAndLocation( QLocale().name(),
m_localeGenLines,
m_tzWidget->getCurrentLocation().country );
}
+<<<<<<< HEAD
+=======
+void
+LocalePage::updateGlobalLocale()
+{
+ auto *gs = Calamares::JobQueue::instance()->globalStorage();
+ const QString bcp47 = m_selectedLocaleConfiguration.toBcp47();
+ gs->insert( "locale", bcp47 );
+}
+
+
+>>>>>>> 44211ee19a30eb062508bba565da274c53b16a71
void
LocalePage::updateGlobalStorage()
{
- LocaleGlobal::Location location = m_tzWidget->getCurrentLocation();
- Calamares::JobQueue::instance()->globalStorage()
- ->insert( "locationRegion", location.region );
- Calamares::JobQueue::instance()->globalStorage()
- ->insert( "locationZone", location.zone );
+ auto *gs = Calamares::JobQueue::instance()->globalStorage();
- const QString bcp47 = m_selectedLocaleConfiguration.toBcp47();
- Calamares::JobQueue::instance()->globalStorage()->insert( "locale", bcp47 );
+ LocaleGlobal::Location location = m_tzWidget->getCurrentLocation();
+ bool locationChanged = ( location.region != gs->value( "locationRegion" ) ) ||
+ ( location.zone != gs->value( "locationZone" ) );
+
+ gs->insert( "locationRegion", location.region );
+ gs->insert( "locationZone", location.zone );
+
+ updateGlobalLocale();
// If we're in chroot mode (normal install mode), then we immediately set the
// timezone on the live system. When debugging timezones, don't bother.
#ifndef DEBUG_TIMEZONES
- if ( Calamares::Settings::instance()->doChroot() )
+ if ( locationChanged && Calamares::Settings::instance()->doChroot() )
{
QProcess::execute( "timedatectl", // depends on systemd
{ "set-timezone",
@@ -498,7 +505,7 @@ LocalePage::updateGlobalStorage()
auto newLocale = guessLocaleConfiguration();
if ( !m_selectedLocaleConfiguration.isEmpty() &&
m_selectedLocaleConfiguration.explicit_lang )
- newLocale.lang = m_selectedLocaleConfiguration.lang;
+ newLocale.setLanguage( m_selectedLocaleConfiguration.language() );
if ( !m_selectedLocaleConfiguration.isEmpty() &&
m_selectedLocaleConfiguration.explicit_lc )
{
diff --git a/src/modules/locale/LocalePage.h b/src/modules/locale/LocalePage.h
index fae16cfb9..2a9dc8b60 100644
--- a/src/modules/locale/LocalePage.h
+++ b/src/modules/locale/LocalePage.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014, Teo Mrnjavac
+ * Copyright 2019, Adriaan de Groot
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -56,6 +57,12 @@ private:
// the settings for language and numbers.
std::pair< QString, QString > prettyLocaleStatus( const LocaleConfiguration& ) const;
+ /** @brief Update the GS *locale* key with the selected system language.
+ *
+ * This uses whatever is set in m_selectedLocaleConfiguration as the language,
+ * and writes it to GS *locale* key (as a string, in BCP47 format).
+ */
+ void updateGlobalLocale();
void updateGlobalStorage();
void updateLocaleLabels();
diff --git a/src/modules/locale/Tests.cpp b/src/modules/locale/Tests.cpp
new file mode 100644
index 000000000..0e1a3eb48
--- /dev/null
+++ b/src/modules/locale/Tests.cpp
@@ -0,0 +1,80 @@
+/* === This file is part of Calamares - ===
+ *
+ * Copyright 2019, Adriaan de Groot
+ *
+ * Calamares is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Calamares is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Calamares. If not, see .
+ */
+
+
+#include "Tests.h"
+#include "LocaleConfiguration.h"
+
+#include
+
+QTEST_GUILESS_MAIN( LocaleTests )
+
+
+LocaleTests::LocaleTests()
+{
+}
+
+LocaleTests::~LocaleTests()
+{
+}
+
+void LocaleTests::initTestCase()
+{
+}
+
+void LocaleTests::testEmptyLocaleConfiguration()
+{
+ LocaleConfiguration lc;
+
+ QVERIFY( lc.isEmpty() );
+ QCOMPARE( lc.toBcp47(), QString() );
+}
+
+void LocaleTests::testDefaultLocaleConfiguration()
+{
+ LocaleConfiguration lc( "en_US.UTF-8" );
+ QVERIFY( !lc.isEmpty() );
+ QCOMPARE( lc.language(), "en_US.UTF-8" );
+ QCOMPARE( lc.toBcp47(), "en" );
+
+ LocaleConfiguration lc2( "de_DE.UTF-8" );
+ QVERIFY( !lc2.isEmpty() );
+ QCOMPARE( lc2.language(), "de_DE.UTF-8" );
+ QCOMPARE( lc2.toBcp47(), "de" );
+}
+
+void LocaleTests::testSplitLocaleConfiguration()
+{
+ LocaleConfiguration lc( "en_US.UTF-8", "de_DE.UTF-8" );
+ QVERIFY( !lc.isEmpty() );
+ QCOMPARE( lc.language(), "en_US.UTF-8" );
+ QCOMPARE( lc.toBcp47(), "en" );
+ QCOMPARE( lc.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) );
+
+ LocaleConfiguration lc2( "de_DE.UTF-8", "da_DK.UTF-8" );
+ QVERIFY( !lc2.isEmpty() );
+ QCOMPARE( lc2.language(), "de_DE.UTF-8" );
+ QCOMPARE( lc2.toBcp47(), "de" );
+ QCOMPARE( lc2.lc_numeric, "da_DK.UTF-8" );
+
+ LocaleConfiguration lc3( "da_DK.UTF-8", "de_DE.UTF-8" );
+ QVERIFY( !lc3.isEmpty() );
+ QCOMPARE( lc3.toBcp47(), "da" );
+ QCOMPARE( lc3.lc_numeric, "de_DE.UTF-8" );
+
+}
diff --git a/src/modules/locale/Tests.h b/src/modules/locale/Tests.h
new file mode 100644
index 000000000..299eac61d
--- /dev/null
+++ b/src/modules/locale/Tests.h
@@ -0,0 +1,40 @@
+/* === This file is part of Calamares - ===
+ *
+ * Copyright 2019, Adriaan de Groot
+ *
+ * Calamares is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Calamares is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Calamares. If not, see .
+ */
+
+
+#ifndef TESTS_H
+#define TESTS_H
+
+#include
+
+class LocaleTests : public QObject
+{
+ Q_OBJECT
+public:
+ LocaleTests();
+ ~LocaleTests() override;
+
+private Q_SLOTS:
+ void initTestCase();
+ // Check the sample config file is processed correctly
+ void testEmptyLocaleConfiguration();
+ void testDefaultLocaleConfiguration();
+ void testSplitLocaleConfiguration();
+};
+
+#endif
diff --git a/src/modules/locale/timezonewidget/localeglobal.h b/src/modules/locale/timezonewidget/localeglobal.h
index 5452b0b09..1a8f796d4 100644
--- a/src/modules/locale/timezonewidget/localeglobal.h
+++ b/src/modules/locale/timezonewidget/localeglobal.h
@@ -1,6 +1,7 @@
/* === This file is part of Calamares - ===
*
* Copyright 2014-2016, Teo Mrnjavac
+ * Copyright 2019, Adriaan de Groot
*
* Originally from the Manjaro Installation Framework
* by Roland Singer
@@ -38,11 +39,13 @@
class LocaleGlobal
{
public:
- struct Locale {
+ struct Locale
+ {
QString description, locale;
};
- struct Location {
+ struct Location
+ {
QString region, zone, country;
double latitude, longitude;
static QString pretty( const QString& s );
@@ -59,7 +62,12 @@ private:
static void initLocales();
static void initLocations();
- static double getRightGeoLocation(QString str);
+ static double getRightGeoLocation( QString str );
};
+inline QDebug& operator <<( QDebug& s, const LocaleGlobal::Location& l )
+{
+ return s << l.region << '/' << l.zone << '(' << l.country << ") @N" << l.latitude << 'E' << l.longitude;
+}
+
#endif // LOCALEGLOBAL_H
diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py
index 9116cf2ef..aac1aa6f9 100644
--- a/src/modules/packages/main.py
+++ b/src/modules/packages/main.py
@@ -150,10 +150,10 @@ class PackageManager(metaclass=abc.ABCMeta):
@param packagedata: str|dict
"""
if isinstance(packagedata, str):
- self.remove([packagedata], from_local=from_local)
+ self.remove([packagedata])
else:
self.run(packagedata["pre-script"])
- self.remove([packagedata["package"]], from_local=from_local)
+ self.remove([packagedata["package"]])
self.run(packagedata["post-script"])
diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp
index 7dddec414..d61064041 100644
--- a/src/modules/partition/core/PartUtils.cpp
+++ b/src/modules/partition/core/PartUtils.cpp
@@ -80,26 +80,47 @@ bool
canBeResized( Partition* candidate )
{
if ( !candidate )
+ {
+ cDebug() << "Partition* is NULL";
return false;
+ }
+ cDebug() << "Checking if" << candidate->partitionPath() << "can be resized.";
if ( !candidate->fileSystem().supportGrow() ||
!candidate->fileSystem().supportShrink() )
+ {
+ cDebug() << " .. filesystem" << candidate->fileSystem().name()
+ << "does not support resize.";
return false;
+ }
if ( KPMHelpers::isPartitionFreeSpace( candidate ) )
+ {
+ cDebug() << " .. partition is free space";
return false;
+ }
if ( candidate->isMounted() )
+ {
+ cDebug() << " .. partition is mounted";
return false;
+ }
if ( candidate->roles().has( PartitionRole::Primary ) )
{
PartitionTable* table = dynamic_cast< PartitionTable* >( candidate->parent() );
if ( !table )
+ {
+ cDebug() << " .. no partition table found";
return false;
+ }
if ( table->numPrimaries() >= table->maxPrimaries() )
+ {
+ cDebug() << " .. partition table already has"
+ << table->maxPrimaries() << "primary partitions.";
return false;
+ }
}
bool ok = false;
@@ -136,11 +157,10 @@ bool
canBeResized( PartitionCoreModule* core, const QString& partitionPath )
{
//FIXME: check for max partitions count on DOS MBR
- cDebug() << "checking if" << partitionPath << "can be resized.";
+ cDebug() << "Checking if" << partitionPath << "can be resized.";
QString partitionWithOs = partitionPath;
if ( partitionWithOs.startsWith( "/dev/" ) )
{
- cDebug() << partitionWithOs << "seems like a good path";
DeviceModel* dm = core->deviceModel();
for ( int i = 0; i < dm->rowCount(); ++i )
{
@@ -148,10 +168,11 @@ canBeResized( PartitionCoreModule* core, const QString& partitionPath )
Partition* candidate = KPMHelpers::findPartitionByPath( { dev }, partitionWithOs );
if ( candidate )
{
- cDebug() << "found Partition* for" << partitionWithOs;
+ cDebug() << " .. found Partition* for" << partitionWithOs;
return canBeResized( candidate );
}
}
+ cDebug() << " .. no Partition* found for" << partitionWithOs;
}
cDebug() << "Partition" << partitionWithOs << "CANNOT BE RESIZED FOR AUTOINSTALL.";
@@ -177,6 +198,9 @@ lookForFstabEntries( const QString& partitionPath )
mountOptions.append( "noload" );
}
+ cDebug() << "Checking device" << partitionPath
+ << "for fstab (fs=" << r.getOutput() << ')';
+
FstabEntryList fstabEntries;
QTemporaryDir mountsDir;
mountsDir.setAutoRemove( false );
@@ -185,6 +209,9 @@ lookForFstabEntries( const QString& partitionPath )
if ( !exit ) // if all is well
{
QFile fstabFile( mountsDir.path() + "/etc/fstab" );
+
+ cDebug() << " .. reading" << fstabFile.fileName();
+
if ( fstabFile.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
const QStringList fstabLines = QString::fromLocal8Bit( fstabFile.readAll() )
@@ -193,12 +220,18 @@ lookForFstabEntries( const QString& partitionPath )
for ( const QString& rawLine : fstabLines )
fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) );
fstabFile.close();
+ cDebug() << " .. got" << fstabEntries.count() << "lines.";
std::remove_if( fstabEntries.begin(), fstabEntries.end(), [](const FstabEntry& x) { return !x.isValid(); } );
+ cDebug() << " .. got" << fstabEntries.count() << "fstab entries.";
}
+ else
+ cWarning() << "Could not read fstab from mounted fs";
if ( QProcess::execute( "umount", { "-R", mountsDir.path() } ) )
cWarning() << "Could not unmount" << mountsDir.path();
}
+ else
+ cWarning() << "Could not mount existing fs";
return fstabEntries;
}
diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp
index fc4914696..a4f2baa17 100644
--- a/src/modules/partition/core/PartitionActions.cpp
+++ b/src/modules/partition/core/PartitionActions.cpp
@@ -28,7 +28,6 @@
#include "utils/Units.h"
#include "JobQueue.h"
#include "utils/Logger.h"
-#include "GlobalStorage.h"
#include
#include
@@ -43,58 +42,38 @@ using CalamaresUtils::operator""_GiB;
using CalamaresUtils::operator""_MiB;
qint64
-swapSuggestion( const qint64 availableSpaceB )
+swapSuggestion( const qint64 availableSpaceB, Choices::SwapChoice swap )
{
- /* If suspend-to-disk is demanded, then we always need enough
- * swap to write the whole memory to disk -- between 2GB and 8GB
- * RAM give proportionally more swap, and from 8GB RAM keep
- * swap = RAM.
- *
- * If suspend-to-disk is not demanded, then ramp up more slowly,
- * to 8GB swap at 16GB memory, and then drop to 4GB for "large
- * memory" machines, on the assumption that those don't need swap
- * because they have tons of memory (or whatever they are doing,
- * had better not run into swap).
- */
+ if ( ( swap != Choices::SmallSwap ) && ( swap != Choices::FullSwap ) )
+ return 0;
+
+ // See partition.conf for explanation
qint64 suggestedSwapSizeB = 0;
auto memory = CalamaresUtils::System::instance()->getTotalMemoryB();
qint64 availableRamB = memory.first;
qreal overestimationFactor = memory.second;
- bool ensureSuspendToDisk =
- Calamares::JobQueue::instance()->globalStorage()->
- value( "ensureSuspendToDisk" ).toBool();
+ bool ensureSuspendToDisk = swap == Choices::FullSwap;
- if ( ensureSuspendToDisk )
- {
- if ( availableRamB < 4_GiB )
- suggestedSwapSizeB = qMax( 2_GiB, availableRamB * 2 );
- else if ( availableRamB >= 4_GiB && availableRamB < 8_GiB )
- suggestedSwapSizeB = 8_GiB;
- else
- suggestedSwapSizeB = availableRamB;
+ // Ramp up quickly to 8GiB, then follow memory size
+ if ( availableRamB <= 4_GiB )
+ suggestedSwapSizeB = availableRamB * 2;
+ else if ( availableRamB <= 8_GiB )
+ suggestedSwapSizeB = 8_GiB;
+ else
+ suggestedSwapSizeB = availableRamB;
- suggestedSwapSizeB *= overestimationFactor;
- }
- else //if we don't care about suspend to disk
- {
- if ( availableRamB < 2_GiB )
- suggestedSwapSizeB = qMax( 2_GiB, availableRamB * 2 );
- else if ( availableRamB >= 2_GiB && availableRamB < 8_GiB )
- suggestedSwapSizeB = availableRamB;
- else if ( availableRamB >= 8_GiB && availableRamB < 16_GiB )
- suggestedSwapSizeB = 8_GiB;
- else
- suggestedSwapSizeB = 4_GiB;
+ // .. top out at 8GiB if we don't care about suspend
+ if ( !ensureSuspendToDisk )
+ suggestedSwapSizeB = qMin( 8_GiB, suggestedSwapSizeB );
- suggestedSwapSizeB *= overestimationFactor;
- // don't use more than 10% of available space
- qreal maxSwapDiskRatio = 0.10;
- qint64 maxSwapSizeB = availableSpaceB * maxSwapDiskRatio;
- if ( suggestedSwapSizeB > maxSwapSizeB )
- suggestedSwapSizeB = maxSwapSizeB;
- }
+ // Allow for a fudge factor
+ suggestedSwapSizeB *= overestimationFactor;
+
+ // don't use more than 10% of available space
+ if ( !ensureSuspendToDisk )
+ suggestedSwapSizeB = qMin( suggestedSwapSizeB, qint64( 0.10 * availableSpaceB ) );
cDebug() << "Suggested swap size:" << suggestedSwapSizeB / 1024. / 1024. / 1024. << "GiB";
@@ -118,16 +97,14 @@ bytesToSectors( qint64 bytes, qint64 blocksize )
}
void
-doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPassphrase )
+doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions o )
{
- Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
-
- bool isEfi = PartUtils::isEfiSystem();
-
- QString defaultFsType = gs->value( "defaultFileSystemType" ).toString();
+ QString defaultFsType = o.defaultFsType;
if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown )
defaultFsType = "ext4";
+ bool isEfi = PartUtils::isEfiSystem();
+
// Partition sizes are expressed in MiB, should be multiples of
// the logical sector size (usually 512B). EFI starts with 2MiB
// empty and a 300MiB EFI boot partition, while BIOS starts at
@@ -160,8 +137,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
PartitionTable::FlagNone
);
PartitionInfo::setFormat( efiPartition, true );
- PartitionInfo::setMountPoint( efiPartition, gs->value( "efiSystemPartition" )
- .toString() );
+ PartitionInfo::setMountPoint( efiPartition, o.efiPartitionMountPoint );
core->createPartition( dev, efiPartition, PartitionTable::FlagEsp );
firstFreeSector = lastSector + 1;
}
@@ -170,20 +146,18 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
core->createPartitionTable( dev, PartitionTable::msdos );
}
- const bool mayCreateSwap = !gs->value( "neverCreateSwap" ).toBool();
+ const bool mayCreateSwap = ( o.swap == Choices::SmallSwap ) || ( o.swap == Choices::FullSwap );
bool shouldCreateSwap = false;
qint64 suggestedSwapSizeB = 0;
if ( mayCreateSwap )
{
qint64 availableSpaceB = ( dev->totalLogical() - firstFreeSector ) * dev->logicalSize();
- suggestedSwapSizeB = swapSuggestion( availableSpaceB );
+ suggestedSwapSizeB = swapSuggestion( availableSpaceB, o.swap );
// Space required by this installation is what the distro claims is needed
// (via global configuration) plus the swap size plus a fudge factor of
// 0.6GiB (this was 2.1GiB up to Calamares 3.2.2).
- qint64 requiredSpaceB =
- GiBtoBytes( gs->value( "requiredStorageGB" ).toDouble() + 0.6 ) +
- suggestedSwapSizeB;
+ qint64 requiredSpaceB = o.requiredSpaceB + 600_MiB + suggestedSwapSizeB;
// If there is enough room for ESP + root + swap, create swap, otherwise don't.
shouldCreateSwap = availableSpaceB > requiredSpaceB;
@@ -196,7 +170,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
}
Partition* rootPartition = nullptr;
- if ( luksPassphrase.isEmpty() )
+ if ( o.luksPassphrase.isEmpty() )
{
rootPartition = KPMHelpers::createNewPartition(
dev->partitionTable(),
@@ -217,7 +191,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
FileSystem::typeForName( defaultFsType ),
firstFreeSector,
lastSectorForRoot,
- luksPassphrase,
+ o.luksPassphrase,
PartitionTable::FlagNone
);
}
@@ -232,7 +206,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
if ( shouldCreateSwap )
{
Partition* swapPartition = nullptr;
- if ( luksPassphrase.isEmpty() )
+ if ( o.luksPassphrase.isEmpty() )
{
swapPartition = KPMHelpers::createNewPartition(
dev->partitionTable(),
@@ -253,7 +227,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
FileSystem::LinuxSwap,
lastSectorForRoot + 1,
dev->totalLogical() - 1,
- luksPassphrase,
+ o.luksPassphrase,
PartitionTable::FlagNone
);
}
@@ -269,13 +243,11 @@ void
doReplacePartition( PartitionCoreModule* core,
Device* dev,
Partition* partition,
- const QString& luksPassphrase )
+ Choices::ReplacePartitionOptions o )
{
cDebug() << "doReplacePartition for device" << partition->partitionPath();
- QString defaultFsType = Calamares::JobQueue::instance()->
- globalStorage()->
- value( "defaultFileSystemType" ).toString();
+ QString defaultFsType = o.defaultFsType;
if ( FileSystem::typeForName( defaultFsType ) == FileSystem::Unknown )
defaultFsType = "ext4";
@@ -296,7 +268,7 @@ doReplacePartition( PartitionCoreModule* core,
}
Partition* newPartition = nullptr;
- if ( luksPassphrase.isEmpty() )
+ if ( o.luksPassphrase.isEmpty() )
{
newPartition = KPMHelpers::createNewPartition(
partition->parent(),
@@ -317,7 +289,7 @@ doReplacePartition( PartitionCoreModule* core,
FileSystem::typeForName( defaultFsType ),
partition->firstSector(),
partition->lastSector(),
- luksPassphrase,
+ o.luksPassphrase,
PartitionTable::FlagNone
);
}
diff --git a/src/modules/partition/core/PartitionActions.h b/src/modules/partition/core/PartitionActions.h
index bb624552f..5acf444fa 100644
--- a/src/modules/partition/core/PartitionActions.h
+++ b/src/modules/partition/core/PartitionActions.h
@@ -27,29 +27,74 @@ class Partition;
namespace PartitionActions
{
+/** @brief Namespace for enums
+ *
+ * This namespace houses non-class enums.....
+ */
+namespace Choices
+{
+ /** @brief Ccchoice of swap (size and type) */
+ enum SwapChoice
+ {
+ NoSwap, // don't create any swap, don't use any
+ ReuseSwap, // don't create, but do use existing
+ SmallSwap, // up to 8GiB of swap
+ FullSwap, // ensureSuspendToDisk -- at least RAM size
+ SwapFile // use a file (if supported)
+ };
+
+ struct ReplacePartitionOptions
+ {
+ QString defaultFsType; // e.g. "ext4" or "btrfs"
+ QString luksPassphrase; // optional
+
+ ReplacePartitionOptions( const QString& fs, const QString& luks )
+ : defaultFsType( fs )
+ , luksPassphrase( luks )
+ {
+ }
+ };
+
+ struct AutoPartitionOptions : ReplacePartitionOptions
+ {
+ QString efiPartitionMountPoint; // optional, e.g. "/boot"
+ quint64 requiredSpaceB; // estimated required space for root partition
+ SwapChoice swap;
+
+ AutoPartitionOptions( const QString& fs, const QString& luks, const QString& efi, qint64 r, SwapChoice s )
+ : ReplacePartitionOptions( fs, luks )
+ , efiPartitionMountPoint( efi )
+ , requiredSpaceB( r > 0 ? r : 0 )
+ , swap( s )
+ {
+ }
+ };
+
+} // namespace Choices
/**
* @brief doAutopartition sets up an autopartitioning operation on the given Device.
* @param core a pointer to the PartitionCoreModule instance.
* @param dev the device to wipe.
- * @param luksPassphrase the passphrase for LUKS encryption (optional, default is empty).
+ * @param options settings for autopartitioning.
*/
void doAutopartition( PartitionCoreModule* core,
Device* dev,
- const QString& luksPassphrase = QString() );
+ Choices::AutoPartitionOptions options );
/**
* @brief doReplacePartition sets up replace-partitioning with the given partition.
* @param core a pointer to the PartitionCoreModule instance.
* @param dev a pointer to the Device on which to replace a partition.
* @param partition a pointer to the Partition to be replaced.
- * @param luksPassphrase the passphrase for LUKS encryption (optional, default is empty).
+ * @param options settings for partitioning (not all fields apply)
+ *
* @note this function also takes care of requesting PCM to delete the partition.
*/
void doReplacePartition( PartitionCoreModule* core,
Device* dev,
Partition* partition,
- const QString& luksPassphrase = QString() );
-}
+ Choices::ReplacePartitionOptions options );
+} // namespace PartitionActions
#endif // PARTITIONACTIONS_H
diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp
index 74410ee80..ba49bd95d 100644
--- a/src/modules/partition/gui/ChoicePage.cpp
+++ b/src/modules/partition/gui/ChoicePage.cpp
@@ -20,31 +20,33 @@
#include "ChoicePage.h"
#include "core/BootLoaderModel.h"
-#include "core/PartitionActions.h"
-#include "core/PartitionCoreModule.h"
#include "core/DeviceModel.h"
-#include "core/PartitionModel.h"
+#include "core/KPMHelpers.h"
#include "core/OsproberEntry.h"
#include "core/PartUtils.h"
+#include "core/PartitionActions.h"
+#include "core/PartitionCoreModule.h"
+#include "core/PartitionInfo.h"
#include "core/PartitionIterator.h"
+#include "core/PartitionModel.h"
-#include "ReplaceWidget.h"
-#include "PrettyRadioButton.h"
+#include "BootInfoWidget.h"
+#include "DeviceInfoWidget.h"
#include "PartitionBarsView.h"
#include "PartitionLabelsView.h"
#include "PartitionSplitterWidget.h"
-#include "BootInfoWidget.h"
-#include "DeviceInfoWidget.h"
+#include "PrettyRadioButton.h"
+#include "ReplaceWidget.h"
#include "ScanningDialog.h"
#include "utils/CalamaresUtilsGui.h"
#include "utils/Logger.h"
#include "utils/Retranslator.h"
+#include "utils/Units.h"
+
#include "Branding.h"
-#include "core/KPMHelpers.h"
-#include "JobQueue.h"
#include "GlobalStorage.h"
-#include "core/PartitionInfo.h"
+#include "JobQueue.h"
#include
#include
@@ -61,7 +63,7 @@
#include
#include
-
+using PartitionActions::Choices::SwapChoice;
/**
* @brief ChoicePage::ChoicePage is the default constructor. Called on startup as part of
@@ -81,6 +83,9 @@ ChoicePage::ChoicePage( QWidget* parent )
, m_eraseButton( nullptr )
, m_replaceButton( nullptr )
, m_somethingElseButton( nullptr )
+ , m_eraseSwapChoices( nullptr )
+ , m_replaceSwapChoices( nullptr )
+ , m_alongsideSwapChoices( nullptr )
, m_deviceInfoWidget( nullptr )
, m_beforePartitionBarsView( nullptr )
, m_beforePartitionLabelsView( nullptr )
@@ -176,6 +181,19 @@ ChoicePage::init( PartitionCoreModule* core )
}
+/** @brief Creates a combobox with the given choices in it.
+ *
+ * No texts are set -- that happens later by the translator functions.
+ */
+static inline QComboBox*
+createCombo( std::initializer_list< SwapChoice > l )
+{
+ QComboBox* box = new QComboBox;
+ for ( SwapChoice c : l )
+ box->addItem( QString(), c );
+ return box;
+}
+
/**
* @brief ChoicePage::setupChoices creates PrettyRadioButton objects for the action
* choices.
@@ -229,6 +247,19 @@ ChoicePage::setupChoices()
iconSize ) );
m_grp->addButton( m_replaceButton->buttonWidget(), Replace );
+ // Fill up swap options
+ // .. TODO: only if enabled in the config
+ m_eraseSwapChoices = createCombo( { SwapChoice::NoSwap, SwapChoice::SmallSwap, SwapChoice::FullSwap } );
+ m_eraseButton->addOptionsComboBox( m_eraseSwapChoices );
+
+#if 0
+ m_replaceSwapChoices = createCombo( { SwapChoice::NoSwap, SwapChoice::ReuseSwap, SwapChoice::SmallSwap, SwapChoice::FullSwap } );
+ m_replaceButton->addOptionsComboBox( m_replaceSwapChoices );
+
+ m_alongsideSwapChoices = createCombo( { SwapChoice::NoSwap, SwapChoice::ReuseSwap, SwapChoice::SmallSwap, SwapChoice::FullSwap } );
+ m_alongsideButton->addOptionsComboBox( m_alongsideSwapChoices );
+#endif
+
m_itemsLayout->addWidget( m_alongsideButton );
m_itemsLayout->addWidget( m_replaceButton );
m_itemsLayout->addWidget( m_eraseButton );
@@ -252,7 +283,7 @@ ChoicePage::setupChoices()
{
if ( checked ) // An action was picked.
{
- m_choice = static_cast< Choice >( id );
+ m_choice = static_cast< InstallChoice >( id );
updateNextEnabled();
emit actionChosen();
@@ -282,6 +313,12 @@ ChoicePage::setupChoices()
applyActionChoice( currentChoice() );
}
} );
+
+ CALAMARES_RETRANSLATE(
+ updateSwapChoicesTr( m_eraseSwapChoices );
+ updateSwapChoicesTr( m_alongsideSwapChoices );
+ updateSwapChoicesTr( m_replaceSwapChoices );
+ )
}
@@ -376,7 +413,7 @@ ChoicePage::continueApplyDeviceChoice()
void
-ChoicePage::applyActionChoice( ChoicePage::Choice choice )
+ChoicePage::applyActionChoice( ChoicePage::InstallChoice choice )
{
m_beforePartitionBarsView->selectionModel()->
disconnect( SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ) );
@@ -386,30 +423,37 @@ ChoicePage::applyActionChoice( ChoicePage::Choice choice )
switch ( choice )
{
case Erase:
- if ( m_core->isDirty() )
{
- ScanningDialog::run( QtConcurrent::run( [ = ]
- {
- QMutexLocker locker( &m_coreMutex );
- m_core->revertDevice( selectedDevice() );
- } ),
- [ = ]
- {
- PartitionActions::doAutopartition( m_core,
- selectedDevice(),
- m_encryptWidget->passphrase() );
- emit deviceChosen();
- },
- this );
- }
- else
- {
- PartitionActions::doAutopartition( m_core,
- selectedDevice(),
- m_encryptWidget->passphrase() );
- emit deviceChosen();
- }
+ auto gs = Calamares::JobQueue::instance()->globalStorage();
+ PartitionActions::Choices::AutoPartitionOptions options {
+ gs->value( "defaultFileSystemType" ).toString(),
+ m_encryptWidget->passphrase(),
+ gs->value( "efiSystemPartition" ).toString(),
+ CalamaresUtils::GiBtoBytes( gs->value( "requiredStorageGB" ).toDouble() ),
+ static_cast( m_eraseSwapChoices->currentData().toInt() )
+ };
+
+ if ( m_core->isDirty() )
+ {
+ ScanningDialog::run( QtConcurrent::run( [ = ]
+ {
+ QMutexLocker locker( &m_coreMutex );
+ m_core->revertDevice( selectedDevice() );
+ } ),
+ [ = ]
+ {
+ PartitionActions::doAutopartition( m_core, selectedDevice(), options );
+ emit deviceChosen();
+ },
+ this );
+ }
+ else
+ {
+ PartitionActions::doAutopartition( m_core, selectedDevice(), options );
+ emit deviceChosen();
+ }
+ }
break;
case Replace:
if ( m_core->isDirty() )
@@ -487,6 +531,7 @@ ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current,
->value( "requiredStorageGB" )
.toDouble();
+ // TODO: make this consistent
qint64 requiredStorageB = qRound64( requiredStorageGB + 0.1 + 2.0 ) * 1024 * 1024 * 1024;
m_afterPartitionSplitterWidget->setSplitPartition(
@@ -777,14 +822,19 @@ ChoicePage::doReplaceSelectedPartition( const QModelIndex& current )
if ( homePartitionPath->isEmpty() )
doReuseHomePartition = false;
- PartitionActions::doReplacePartition( m_core,
- selectedDevice(),
- selectedPartition,
- m_encryptWidget->passphrase() );
+ Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
+
+ PartitionActions::doReplacePartition(
+ m_core,
+ selectedDevice(),
+ selectedPartition,
+ {
+ gs->value( "defaultFileSystemType" ).toString(),
+ m_encryptWidget->passphrase()
+ } );
Partition* homePartition = KPMHelpers::findPartitionByPath( { selectedDevice() },
*homePartitionPath );
- Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
if ( homePartition && doReuseHomePartition )
{
PartitionInfo::setMountPoint( homePartition, "/home" );
@@ -897,7 +947,7 @@ ChoicePage::updateDeviceStatePreview()
* @param choice the chosen partitioning action.
*/
void
-ChoicePage::updateActionChoicePreview( ChoicePage::Choice choice )
+ChoicePage::updateActionChoicePreview( ChoicePage::InstallChoice choice )
{
Device* currentDevice = selectedDevice();
Q_ASSERT( currentDevice );
@@ -1386,7 +1436,7 @@ ChoicePage::isNextEnabled() const
}
-ChoicePage::Choice
+ChoicePage::InstallChoice
ChoicePage::currentChoice() const
{
return m_choice;
@@ -1434,3 +1484,42 @@ ChoicePage::updateNextEnabled()
emit nextStatusChanged( enabled );
}
+void
+ChoicePage::updateSwapChoicesTr(QComboBox* box)
+{
+ if ( !box )
+ return;
+
+ static_assert(SwapChoice::NoSwap == 0, "Enum values out-of-sync");
+ for ( int index = 0; index < box->count(); ++index )
+ {
+ bool ok = false;
+ int value = 0;
+
+ switch ( value = box->itemData( index ).toInt( &ok ) )
+ {
+ // case 0:
+ case SwapChoice::NoSwap:
+ // toInt() returns 0 on failure, so check for ok
+ if ( ok ) // It was explicitly set to 0
+ box->setItemText( index, tr( "No Swap" ) );
+ else
+ cWarning() << "Box item" << index << box->itemText( index ) << "has non-integer role.";
+ break;
+ case SwapChoice::ReuseSwap:
+ box->setItemText( index, tr( "Reuse Swap" ) );
+ break;
+ case SwapChoice::SmallSwap:
+ box->setItemText( index, tr( "Swap (no Hibernate)" ) );
+ break;
+ case SwapChoice::FullSwap:
+ box->setItemText( index, tr( "Swap (with Hibernate)" ) );
+ break;
+ case SwapChoice::SwapFile:
+ box->setItemText( index, tr( "Swap to file" ) );
+ break;
+ default:
+ cWarning() << "Box item" << index << box->itemText( index ) << "has role" << value;
+ }
+ }
+}
diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h
index c36747e93..07d052c2d 100644
--- a/src/modules/partition/gui/ChoicePage.h
+++ b/src/modules/partition/gui/ChoicePage.h
@@ -53,7 +53,7 @@ class ChoicePage : public QWidget, private Ui::ChoicePage
{
Q_OBJECT
public:
- enum Choice
+ enum InstallChoice
{
NoChoice,
Alongside,
@@ -84,7 +84,7 @@ public:
* currently selected partitioning mode (with a PrettyRadioButton).
* @return the enum Choice value.
*/
- Choice currentChoice() const;
+ InstallChoice currentChoice() const;
/**
* @brief onLeave runs when control passes from this page to another one.
@@ -95,7 +95,7 @@ public:
* @brief applyActionChoice reacts to a choice of partitioning mode.
* @param choice the partitioning action choice.
*/
- void applyActionChoice( ChoicePage::Choice choice );
+ void applyActionChoice( ChoicePage::InstallChoice choice );
signals:
void nextStatusChanged( bool );
@@ -121,18 +121,21 @@ private:
void continueApplyDeviceChoice(); // .. called after scan
void updateDeviceStatePreview();
- void updateActionChoicePreview( ChoicePage::Choice choice );
+ void updateActionChoicePreview( ChoicePage::InstallChoice choice );
void setupActions();
OsproberEntryList getOsproberEntriesForDevice( Device* device ) const;
void doAlongsideApply();
void setupEfiSystemPartitionSelector();
+ // Translations support
+ void updateSwapChoicesTr( QComboBox* box );
+
bool m_nextEnabled;
PartitionCoreModule* m_core;
QMutex m_previewsMutex;
- Choice m_choice;
+ InstallChoice m_choice;
bool m_isEfi;
QComboBox* m_drivesCombo;
@@ -142,6 +145,9 @@ private:
PrettyRadioButton* m_eraseButton;
PrettyRadioButton* m_replaceButton;
PrettyRadioButton* m_somethingElseButton;
+ QComboBox* m_eraseSwapChoices;
+ QComboBox* m_replaceSwapChoices;
+ QComboBox* m_alongsideSwapChoices;
DeviceInfoWidget* m_deviceInfoWidget;
diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp
index b49b6c93b..0152f8bec 100644
--- a/src/modules/partition/gui/PartitionViewStep.cpp
+++ b/src/modules/partition/gui/PartitionViewStep.cpp
@@ -21,6 +21,7 @@
#include "gui/PartitionViewStep.h"
#include "core/DeviceModel.h"
+#include "core/PartitionActions.h"
#include "core/PartitionCoreModule.h"
#include "core/PartitionModel.h"
#include "core/KPMHelpers.h"
@@ -138,7 +139,7 @@ PartitionViewStep::createSummaryWidget() const
widget->setLayout( mainLayout );
mainLayout->setMargin( 0 );
- ChoicePage::Choice choice = m_choicePage->currentChoice();
+ ChoicePage::InstallChoice choice = m_choicePage->currentChoice();
QFormLayout* formLayout = new QFormLayout( widget );
const int MARGIN = CalamaresUtils::defaultFontHeight() / 2;
@@ -470,92 +471,129 @@ PartitionViewStep::onLeave()
}
+static PartitionActions::Choices::SwapChoice
+nameToChoice( QString name, bool& ok )
+{
+ ok = false;
+ name = name.toLower();
+
+ using namespace PartitionActions::Choices;
+
+ // Each return here first sets ok to true, returns enum value
+ if ( name == QStringLiteral( "none" ) )
+ return( ok=true, SwapChoice::NoSwap );
+ else if ( name == QStringLiteral( "small" ) )
+ return( ok=true, SwapChoice::SmallSwap);
+ else if ( name == QStringLiteral( "suspend" ) )
+ return( ok=true, SwapChoice::FullSwap );
+ else if ( name == QStringLiteral( "reuse" ) )
+ return( ok=true, SwapChoice::ReuseSwap );
+ else if ( name == QStringLiteral( "file" ) )
+ return( ok=true, SwapChoice::SwapFile );
+
+ ok = false;
+ return SwapChoice::NoSwap;
+}
+
+
void
PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
{
// Copy the efiSystemPartition setting to the global storage. It is needed not only in
// the EraseDiskPage, but also in the bootloader configuration modules (grub, bootloader).
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
- if ( configurationMap.contains( "efiSystemPartition" ) &&
- configurationMap.value( "efiSystemPartition" ).type() == QVariant::String &&
- !configurationMap.value( "efiSystemPartition" ).toString().isEmpty() )
- {
- gs->insert( "efiSystemPartition", configurationMap.value( "efiSystemPartition" ).toString() );
- }
- else
- {
- gs->insert( "efiSystemPartition", QStringLiteral( "/boot/efi" ) );
- }
+ QString efiSP = CalamaresUtils::getString( configurationMap, "efiSystemPartition" );
+ if ( efiSP.isEmpty() )
+ efiSP = QStringLiteral( "/boot/efi" );
+ gs->insert( "efiSystemPartition", efiSP );
- if ( configurationMap.contains( "ensureSuspendToDisk" ) &&
- configurationMap.value( "ensureSuspendToDisk" ).type() == QVariant::Bool )
- {
- gs->insert( "ensureSuspendToDisk", configurationMap.value( "ensureSuspendToDisk" ).toBool() );
- }
- else
- {
- gs->insert( "ensureSuspendToDisk", true );
- }
+ // SWAP SETTINGS
+ //
+ // This is a bit convoluted because there's legacy settings to handle as well
+ // as the new-style list of choices, with mapping back-and-forth.
+ if ( configurationMap.contains( "userSwapChoices" ) &&
+ ( configurationMap.contains( "ensureSuspendToDisk" ) || configurationMap.contains( "neverCreateSwap" ) ) )
+ cError() << "Partition-module configuration mixes old- and new-style swap settings.";
- if ( configurationMap.contains( "neverCreateSwap" ) &&
- configurationMap.value( "neverCreateSwap" ).type() == QVariant::Bool )
- {
- gs->insert( "neverCreateSwap", configurationMap.value( "neverCreateSwap" ).toBool() );
- }
- else
- {
- gs->insert( "neverCreateSwap", false );
- }
+ if ( configurationMap.contains( "ensureSuspendToDisk" ) )
+ cWarning() << "Partition-module setting *ensureSuspendToDisk* is deprecated.";
+ bool ensureSuspendToDisk = CalamaresUtils::getBool( configurationMap, "ensureSuspendToDisk", true );
- if ( configurationMap.contains( "drawNestedPartitions" ) &&
- configurationMap.value( "drawNestedPartitions" ).type() == QVariant::Bool )
- {
- gs->insert( "drawNestedPartitions",
- configurationMap.value( "drawNestedPartitions", false ).toBool() );
- }
- else
- {
- gs->insert( "drawNestedPartitions", false );
- }
+ if ( configurationMap.contains( "neverCreateSwap" ) )
+ cWarning() << "Partition-module setting *neverCreateSwap* is deprecated.";
+ bool neverCreateSwap = CalamaresUtils::getBool( configurationMap, "neverCreateSwap", false );
- if ( configurationMap.contains( "alwaysShowPartitionLabels" ) &&
- configurationMap.value( "alwaysShowPartitionLabels" ).type() == QVariant::Bool )
+ QSet< PartitionActions::Choices::SwapChoice > choices; // Available swap choices
+ if ( configurationMap.contains( "userSwapChoices" ) )
{
- gs->insert( "alwaysShowPartitionLabels",
- configurationMap.value( "alwaysShowPartitionLabels", true ).toBool() );
- }
- else
- {
- gs->insert( "alwaysShowPartitionLabels", true );
- }
+ // We've already warned about overlapping settings with the
+ // legacy *ensureSuspendToDisk* and *neverCreateSwap*.
+ QStringList l = configurationMap[ "userSwapChoices" ].toStringList();
- if ( configurationMap.contains( "defaultFileSystemType" ) &&
- configurationMap.value( "defaultFileSystemType" ).type() == QVariant::String &&
- !configurationMap.value( "defaultFileSystemType" ).toString().isEmpty() )
- {
- QString typeString = configurationMap.value( "defaultFileSystemType" ).toString();
- gs->insert( "defaultFileSystemType", typeString );
- if ( FileSystem::typeForName( typeString ) == FileSystem::Unknown )
+ for ( const auto& item : l )
{
- cWarning() << "bad default filesystem configuration for partition module. Reverting to ext4 as default.";
- gs->insert( "defaultFileSystemType", "ext4" );
+ bool ok = false;
+ auto v = nameToChoice( item, ok );
+ if ( ok )
+ choices.insert( v );
}
+
+ if ( choices.isEmpty() )
+ {
+ cWarning() << "Partition-module configuration for *userSwapChoices* is empty:" << l;
+ choices.insert( PartitionActions::Choices::SwapChoice::FullSwap );
+ }
+
+ // suspend if it's one of the possible choices; suppress swap only if it's
+ // the **only** choice available.
+ ensureSuspendToDisk = choices.contains( PartitionActions::Choices::SwapChoice::FullSwap );
+ neverCreateSwap = ( choices.count() == 1 ) && choices.contains( PartitionActions::Choices::SwapChoice::NoSwap );
}
else
{
- gs->insert( "defaultFileSystemType", QStringLiteral( "ext4" ) );
+ // Convert the legacy settings into a single setting for now.
+ if ( neverCreateSwap )
+ choices.insert( PartitionActions::Choices::SwapChoice::NoSwap );
+ else if ( ensureSuspendToDisk )
+ choices.insert( PartitionActions::Choices::SwapChoice::FullSwap );
+ else
+ choices.insert( PartitionActions::Choices::SwapChoice::SmallSwap );
}
- if ( configurationMap.contains( "enableLuksAutomatedPartitioning" ) &&
- configurationMap.value( "enableLuksAutomatedPartitioning" ).type() == QVariant::Bool )
- {
- gs->insert( "enableLuksAutomatedPartitioning",
- configurationMap.value( "enableLuksAutomatedPartitioning" ).toBool() );
- }
+ // These gs settings seem to be unused (in upstream Calamares) outside of
+ // the partition module itself.
+ gs->insert( "ensureSuspendToDisk", ensureSuspendToDisk );
+ gs->insert( "neverCreateSwap", neverCreateSwap );
+
+ // OTHER SETTINGS
+ //
+ gs->insert( "drawNestedPartitions", CalamaresUtils::getBool( configurationMap, "drawNestedPartitions", false ) );
+ gs->insert( "alwaysShowPartitionLabels", CalamaresUtils::getBool( configurationMap, "alwaysShowPartitionLabels", true ) );
+ gs->insert( "enableLuksAutomatedPartitioning", CalamaresUtils::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) );
+
+ QString defaultFS = CalamaresUtils::getString( configurationMap, "defaultFileSystemType" );
+ if ( defaultFS.isEmpty() )
+ defaultFS = QStringLiteral( "ext4" );
else
+ cDebug() << "Partition-module setting *defaultFileSystemType*" << defaultFS;
+ if ( FileSystem::typeForName( defaultFS ) == FileSystem::Unknown )
{
- gs->insert( "enableLuksAutomatedPartitioning", true );
+ cWarning() << "Partition-module setting *defaultFileSystemType* is bad (" << defaultFS << ") using ext4.";
+ defaultFS = QStringLiteral( "ext4" );
+#ifdef DEBUG_FILESYSTEMS
+ // This bit is for distro's debugging their settings, and shows
+ // all the strings that KPMCore is matching against for FS type.
+ {
+ Logger::CLog d( Logger::LOGDEBUG );
+ using TR = Logger::DebugRow< int, QString >;
+ const auto fstypes = FileSystem::types();
+ d << "Available types (" << fstypes.count() << ')';
+ for ( FileSystem::Type t : fstypes )
+ d << TR( static_cast( t ), FileSystem::nameForType( t ) );
+ }
+#endif
}
+ gs->insert( "defaultFileSystemType", defaultFS );
// Now that we have the config, we load the PartitionCoreModule in the background
@@ -563,7 +601,7 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
// and remove the spinner.
QFutureWatcher< void >* watcher = new QFutureWatcher< void >();
connect( watcher, &QFutureWatcher< void >::finished,
- this, [ this, watcher ]
+ this, [ this, watcher, choices ]
{
continueLoading();
watcher->deleteLater();
diff --git a/src/modules/partition/gui/PrettyRadioButton.cpp b/src/modules/partition/gui/PrettyRadioButton.cpp
index a697ed270..18627f41c 100644
--- a/src/modules/partition/gui/PrettyRadioButton.cpp
+++ b/src/modules/partition/gui/PrettyRadioButton.cpp
@@ -21,29 +21,34 @@
#include "utils/CalamaresUtilsGui.h"
#include "widgets/ClickableLabel.h"
+#include
+#include
+#include
#include
-#include
PrettyRadioButton::PrettyRadioButton( QWidget* parent )
: QWidget( parent )
+ , m_label( new ClickableLabel )
+ , m_radio( new QRadioButton )
+ , m_mainLayout( new QGridLayout )
+ , m_optionsLayout( nullptr )
{
- QHBoxLayout* mainLayout = new QHBoxLayout;
- setLayout( mainLayout );
+ setLayout( m_mainLayout );
- m_radio = new QRadioButton;
- m_label = new ClickableLabel;
-
- connect( m_label, &ClickableLabel::clicked,
- m_radio, &QRadioButton::click );
m_label->setBuddy( m_radio );
m_label->setWordWrap( true );
m_label->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
- mainLayout->addWidget( m_radio );
- mainLayout->addWidget( m_label );
- mainLayout->setContentsMargins( 0, 0, 0, 0 );
+ m_mainLayout->addWidget( m_radio, 0, 0 );
+ m_mainLayout->addWidget( m_label, 0, 1 );
+ m_mainLayout->setContentsMargins( 0, 0, 0, 0 );
+
+ connect( m_label, &ClickableLabel::clicked,
+ m_radio, &QRadioButton::click );
+ connect( m_radio, &QRadioButton::toggled,
+ this, &PrettyRadioButton::toggleOptions );
}
@@ -80,3 +85,32 @@ PrettyRadioButton::buttonWidget() const
{
return m_radio;
}
+
+void
+PrettyRadioButton::addOptionsComboBox( QComboBox* box )
+{
+ if ( !box )
+ return;
+
+ if ( !m_optionsLayout )
+ {
+ QWidget* w = new QWidget;
+ m_optionsLayout = new QHBoxLayout;
+ m_optionsLayout->setAlignment( Qt::AlignmentFlag::AlignLeft );
+ m_optionsLayout->addStretch( 1 );
+
+ w->setLayout( m_optionsLayout );
+ m_mainLayout->addWidget( w, 1, 1 );
+
+ toggleOptions( m_radio->isChecked() );
+ }
+
+ m_optionsLayout->insertWidget( m_optionsLayout->count()-1, box );
+}
+
+void
+PrettyRadioButton::toggleOptions( bool toggle )
+{
+ if ( m_optionsLayout )
+ m_optionsLayout->parentWidget()->setVisible( toggle );
+}
diff --git a/src/modules/partition/gui/PrettyRadioButton.h b/src/modules/partition/gui/PrettyRadioButton.h
index f475ce528..c88c00728 100644
--- a/src/modules/partition/gui/PrettyRadioButton.h
+++ b/src/modules/partition/gui/PrettyRadioButton.h
@@ -22,7 +22,17 @@
#include
class ClickableLabel;
+class QComboBox;
+class QGridLayout;
+class QHBoxLayout;
+/** @brief A radio button with fancy label next to it.
+ *
+ * The radio button itself can be retrieved with buttonWidget(),
+ * and the whole behaves a lot like a label. Extra options can be
+ * added to the display (options are hidden when the button is
+ * not selected) with addOptionsComboBox().
+ */
class PrettyRadioButton : public QWidget
{
Q_OBJECT
@@ -40,9 +50,18 @@ public:
virtual QRadioButton* buttonWidget() const;
+ /** @brief Add an options drop-down to this button. */
+ void addOptionsComboBox( QComboBox* );
+
+protected slots:
+ /// Options are hidden when the radio button is off
+ void toggleOptions( bool checked );
+
protected:
ClickableLabel* m_label;
QRadioButton* m_radio;
+ QGridLayout* m_mainLayout;
+ QHBoxLayout* m_optionsLayout;
};
#endif // PRETTYRADIOBUTTON_H
diff --git a/src/modules/partition/gui/ReplaceWidget.cpp b/src/modules/partition/gui/ReplaceWidget.cpp
index 524932057..faedc03d4 100644
--- a/src/modules/partition/gui/ReplaceWidget.cpp
+++ b/src/modules/partition/gui/ReplaceWidget.cpp
@@ -85,6 +85,8 @@ ReplaceWidget::reset()
void
ReplaceWidget::applyChanges()
{
+ auto gs = Calamares::JobQueue::instance()->globalStorage();
+
PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() );
if ( model )
{
@@ -93,7 +95,9 @@ ReplaceWidget::applyChanges()
{
Device* dev = model->device();
- PartitionActions::doReplacePartition( m_core, dev, partition );
+ PartitionActions::doReplacePartition(
+ m_core, dev, partition,
+ { gs->value( "defaultFileSystemType" ).toString(), QString() } );
if ( m_isEfi )
{
@@ -102,17 +106,13 @@ ReplaceWidget::applyChanges()
{
PartitionInfo::setMountPoint(
efiSystemPartitions.first(),
- Calamares::JobQueue::instance()->
- globalStorage()->
- value( "efiSystemPartition" ).toString() );
+ gs->value( "efiSystemPartition" ).toString() );
}
else if ( efiSystemPartitions.count() > 1 )
{
PartitionInfo::setMountPoint(
efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ),
- Calamares::JobQueue::instance()->
- globalStorage()->
- value( "efiSystemPartition" ).toString() );
+ gs->value( "efiSystemPartition" ).toString() );
}
}
diff --git a/src/modules/partition/partition.conf b/src/modules/partition/partition.conf
index 78ad82f10..229ffc32c 100644
--- a/src/modules/partition/partition.conf
+++ b/src/modules/partition/partition.conf
@@ -3,22 +3,37 @@
# etc.) use just /boot.
efiSystemPartition: "/boot/efi"
-# Make sure an autogenerated swap partition is big enough for hibernation in
-# automated partitioning modes. Swap can be disabled through *neverCreateSwap*.
+# In autogenerated partitioning, allow the user to select a swap size?
+# If there is exactly one choice, no UI is presented, and the user
+# cannot make a choice -- this setting is used. If there is more than
+# one choice, a UI is presented.
#
-# When *ensureSuspendToDisk* is true, swap is never smaller than physical
-# memory, follows the guideline 2 * memory until swap reaches 8GiB.
-# When *ensureSuspendToDisk* is false, swap size scales up with memory
-# size until 8GiB, then at roughly half of memory size.
+# Legacy settings *neverCreateSwap* and *ensureSuspendToDisk* correspond
+# to values of *userSwapChoices* as follows:
+# - *neverCreateSwap* is true, means [none]
+# - *neverCreateSwap* is false, *ensureSuspendToDisk* is false, [small]
+# - *neverCreateSwap* is false, *ensureSuspendToDisk* is true, [suspend]
#
-#
-# Default is true.
-ensureSuspendToDisk: true
+# Autogenerated swap sizes are as follows:
+# - *suspend*: Swap is always at least total memory size,
+# and up to 4GiB RAM follows the rule-of-thumb 2 * memory;
+# from 4GiB to 8 GiB it stays steady at 8GiB, and over 8 GiB memory
+# swap is the size of main memory.
+# - *small*: Follows the rules above, but Swap is at
+# most 8GiB, and no more than 10% of available disk.
+# In both cases, a fudge factor (usually 10% extra) is applied so that there
+# is some space for administrative overhead (e.g. 8 GiB swap will allocate
+# 8.8GiB on disk in the end).
+userSwapChoices:
+ - none # Create no swap, use no swap
+ # - reuse # Re-use existing swap, but don't create any
+ - small # Up to 4GB
+ - suspend # At least main memory size
+ # - file # To swap file instead of partition (unsupported right now)
-# Never create swap partitions in automated partitioning modes.
-# If this is true, ensureSuspendToDisk is ignored.
-# Default is false.
-neverCreateSwap: false
+# LEGACY SETTINGS (these will generate a warning)
+# ensureSuspendToDisk: true
+# neverCreateSwap: false
# Correctly draw nested (e.g. logical) partitions as such.
drawNestedPartitions: false
@@ -38,6 +53,8 @@ alwaysShowPartitionLabels: true
#
# Suggested values: ext2, ext3, ext4, reiser, xfs, jfs, btrfs
# If nothing is specified, Calamares defaults to "ext4".
+#
+# Names are case-sensitive and defined by KPMCore.
defaultFileSystemType: "ext4"
# Show/hide LUKS related functionality in automated partitioning modes.