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 @@ Modules - الوحدا + الوحدات @@ -2834,7 +2834,7 @@ Output: %1 support - 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: Total Sectors: - + Общо сектори: 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: Physical Extent Size: - + 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. Create new volume group named %1. - + Crear un nuevo grupo de volúmenes llamado %1. Create new volume group named <strong>%1</strong>. - + Crear un nuevo grupo de volúmenes llamado <strong>%1</strong>. Creating new volume group named %1. - + Creando un nuevo grupo de volúmenes llamado %1. The installer failed to create a volume group named '%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. Deactivate volume group named %1. - + Desactivar grupo de volúmenes llamado %1. Deactivate volume group named <strong>%1</strong>. - + Desactivar grupo de volúmenes llamado <strong>%1</strong>. The installer failed to deactivate a volume group named %1. - + 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) - + %1-(%2) @@ -1726,27 +1726,27 @@ Saldrá del instalador y se perderán todos los cambios. New Volume Group - + Nuevo grupo de volúmenes Resize Volume Group - + Cambiar el tamaño del grupo de volúmenes Deactivate Volume Group - + Desactivar grupo de volúmenes Remove Volume Group - + Remover grupo de volúmenes I&nstall boot loader on: - + Instalar gestor de arranque en: @@ -2034,12 +2034,12 @@ Salida: Remove Volume Group named %1. - + Remover grupo de volúmenes llamado %1. Remove Volume Group named <strong>%1</strong>. - + Remover grupo de volúmenes llamado <strong>%1</strong>. @@ -2280,12 +2280,12 @@ Salida: Resize volume group named %1 from %2 to %3. - + Cambiar el tamaño del grupo de volúmenes llamado %1 de %2 a %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + 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: Physical Extent Size: - + Tamaño de sector físico: @@ -2780,7 +2780,7 @@ Salida: Quantity of LVs: - + 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 @@ The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. - + 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. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. - + 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. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. - + 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 @@ Master Boot Record of %1 - + %1-(e)n Master Boot Record @@ -50,7 +50,7 @@ Blank Page - + Orri zuria @@ -63,7 +63,7 @@ GlobalStorage - + Biltegiratze globala @@ -84,12 +84,12 @@ none - + Ezer ez Interface: - + Interfasea: @@ -99,7 +99,7 @@ Debug information - + Arazte informazioa @@ -146,7 +146,7 @@ Working directory %1 for python job %2 is not readable. - + %1 lanerako direktorioa %2 python lanak ezin du irakurri. @@ -161,7 +161,7 @@ Boost.Python error in job "%1". - + Boost.Python errorea "%1" lanean. @@ -192,22 +192,22 @@ Calamares Initialization Failed - + Calamares instalazioak huts egin du %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. - + %1 ezin da instalatu. Calamares ez da gai konfiguratutako modulu guztiak kargatzeko. Arazao hau banaketak Calamares erabiltzen duen eragatik da. <br/>The following modules could not be loaded: - + <br/> Ondorengo moduluak ezin izan dira kargatu: &Install - + &Instalatu @@ -218,7 +218,8 @@ Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - + 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. The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> - + %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. Unknown exception type - + Salbuespen-mota ezezaguna @@ -309,7 +310,7 @@ The installer will quit and all changes will be lost. Show debug information - + Erakutsi arazte informazioa @@ -317,17 +318,17 @@ The installer will quit and all changes will be lost. This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> - + Konputagailu honek ez dauzka gutxieneko eskakizunak %1 instalatzeko. <br/>Instalazioak ezin du jarraitu. <a href="#details">Xehetasunak...</a> This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. - + Konputagailu honek ez du betetzen gomendatutako zenbait eskakizun %1 instalatzeko. <br/>Instalazioak jarraitu ahal du, baina zenbait ezaugarri desgaituko dira. This program will ask you some questions and set up %2 on your computer. - + Konputagailuan %2 ezartzeko programa honek hainbat galdera egingo dizkizu. @@ -370,7 +371,7 @@ The installer will quit and all changes will be lost. Select storage de&vice: - + Aukeratu &biltegiratze-gailua: @@ -413,7 +414,7 @@ The installer will quit and all changes will be lost. This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + 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>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - + <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 - + MiB @@ -558,12 +559,12 @@ The installer will quit and all changes will be lost. LVM LV name - + LVM LV izena Flags: - + Banderak: @@ -573,12 +574,12 @@ The installer will quit and all changes will be lost. Si&ze: - Ta&maina: + &Tamaina: En&crypt - + En%kriptatu @@ -598,7 +599,7 @@ The installer will quit and all changes will be lost. Mountpoint already in use. Please select another one. - + Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. @@ -606,22 +607,22 @@ The installer will quit and all changes will be lost. Create new %2MB partition on %4 (%3) with file system %1. - + Sortu %2MB partizioa %4n (%3) %1 fitxategi sistemaz. Create new <strong>%2MB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. - + Sortu <strong>%2MB</strong> partizioa <strong>%4</strong>n (%3) <strong>%1</strong> fitxategi sistemaz. Creating new %1 partition on %2. - + %1 partizioa berria sortzen %2n. The installer failed to create partition on disk '%1'. - + Huts egin du instalatzaileak '%1' diskoan partizioa sortzen. @@ -634,17 +635,17 @@ The installer will quit and all changes will be lost. Creating a new partition table will delete all existing data on the disk. - + Partizio taula berria sortzean diskoan dauden datu guztiak ezabatuko dira. What kind of partition table do you want to create? - + Zein motatako partizio taula sortu nahi duzu? Master Boot Record (MBR) - + Master Boot Record (MBR) @@ -657,22 +658,22 @@ The installer will quit and all changes will be lost. Create new %1 partition table on %2. - + Sortu %1 partizio taula berria %2n. Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). - + Sortu <strong>%1</strong> partizio taula berria <strong>%2</strong>n (%3). Creating new %1 partition table on %2. - + %1 partizio taula berria %2n sortzen. The installer failed to create a partition table on %1. - + Huts egin du instalatzaileak '%1' diskoan partizioa taula sortzen. @@ -685,7 +686,7 @@ The installer will quit and all changes will be lost. Create user <strong>%1</strong>. - + Sortu <strong>%1</strong> erabiltzailea @@ -718,22 +719,22 @@ The installer will quit and all changes will be lost. Create new volume group named %1. - + Sortu bolumen talde berria %1 izenaz. Create new volume group named <strong>%1</strong>. - + Sortu bolumen talde berria<strong> %1</strong> izenaz. Creating new volume group named %1. - + Bolumen talde berria sortzen %1 izenaz. The installer failed to create a volume group named '%1'. - + Huts egin du instalatzaileak '%1' izeneko bolumen taldea sortzen. @@ -742,17 +743,17 @@ The installer will quit and all changes will be lost. Deactivate volume group named %1. - + Desaktibatu %1 izeneko bolumen taldea. Deactivate volume group named <strong>%1</strong>. - + Desaktibatu <strong>%1</strong> izeneko bolumen taldea. The installer failed to deactivate a volume group named %1. - + Huts egin du instalatzaileak '%1' izeneko bolumen taldea desaktibatzen. @@ -765,7 +766,7 @@ The installer will quit and all changes will be lost. Delete partition <strong>%1</strong>. - + Ezabatu <strong>%1</strong> partizioa. @@ -775,7 +776,7 @@ The installer will quit and all changes will be lost. The installer failed to delete partition %1. - + Huts egin du instalatzaileak %1 partizioa ezabatzen. @@ -788,7 +789,7 @@ The installer will quit and all changes will be lost. This device has a <strong>%1</strong> partition table. - + Gailuak <strong>%1</strong> partizio taula dauka. @@ -821,7 +822,7 @@ The installer will quit and all changes will be lost. %1 - (%2) - + %1 - (%2) @@ -839,7 +840,7 @@ The installer will quit and all changes will be lost. Failed to open %1 - + Huts egin du %1 irekitzean @@ -847,7 +848,7 @@ The installer will quit and all changes will be lost. Dummy C++ Job - + Dummy C++ lana @@ -855,7 +856,7 @@ The installer will quit and all changes will be lost. Edit Existing Partition - + Editatu badagoen partizioa @@ -865,7 +866,7 @@ The installer will quit and all changes will be lost. &Keep - + M&antendu @@ -890,7 +891,7 @@ The installer will quit and all changes will be lost. MiB - + MiB @@ -900,12 +901,12 @@ The installer will quit and all changes will be lost. Flags: - + Banderak: Mountpoint already in use. Please select another one. - + Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. @@ -918,22 +919,22 @@ The installer will quit and all changes will be lost. En&crypt system - + Sistema en%kriptatua Passphrase - + Pasahitza Confirm passphrase - + Berretsi pasahitza Please enter the same passphrase in both boxes. - + Mesedez sartu pasahitz berdina bi kutxatan. @@ -946,7 +947,7 @@ The installer will quit and all changes will be lost. Install %1 on <strong>new</strong> %2 system partition. - + Instalatu %1 sistemako %2 partizio <strong>berrian</strong>. @@ -966,7 +967,7 @@ The installer will quit and all changes will be lost. Install boot loader on <strong>%1</strong>. - + Instalatu abio kargatzailea <strong>%1</strong>-(e)n. @@ -1012,12 +1013,12 @@ The installer will quit and all changes will be lost. Installation Complete - + Instalazioa amaitua The installation of %1 is complete. - + %1 instalazioa amaitu da. @@ -1025,7 +1026,7 @@ The installer will quit and all changes will be lost. Format partition %1 (file system: %2, size: %3 MB) on %4. - + 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. Formatting partition %1 with file system %2. - + %1 partizioa formateatzen %2 sistemaz. The installer failed to format partition %1 on disk '%2'. - + Huts egin du instalatzaileak %1 partizioa sortzen '%2' diskoan. @@ -1053,7 +1054,7 @@ The installer will quit and all changes will be lost. Please install KDE Konsole and try again! - + Mesedez instalatu KDE kontsola eta saiatu berriz! @@ -1066,7 +1067,7 @@ The installer will quit and all changes will be lost. Script - + Script @@ -1074,12 +1075,12 @@ The installer will quit and all changes will be lost. Set keyboard model to %1.<br/> - + Ezarri teklatu mota %1ra.<br/> Set keyboard layout to %1/%2. - + Ezarri teklatu diseinua %1%2ra. @@ -1110,7 +1111,7 @@ The installer will quit and all changes will be lost. &OK - + &Ados @@ -1180,7 +1181,7 @@ The installer will quit and all changes will be lost. <a href="%1">view license agreement</a> - + <a href="%1">Ikusi lizentzia kontratua</a> @@ -1196,12 +1197,12 @@ The installer will quit and all changes will be lost. The system language will be set to %1. - + %1 ezarriko da sistemako hizkuntza bezala. The numbers and dates locale will be set to %1. - + Zenbaki eta daten eskualdea %1-(e)ra ezarri da. @@ -1222,7 +1223,7 @@ The installer will quit and all changes will be lost. Set timezone to %1/%2.<br/> - + Ordu-zonaldea %1%2-ra ezarri da.<br/> @@ -1254,7 +1255,7 @@ The installer will quit and all changes will be lost. Description - + Deskribapena @@ -1272,7 +1273,7 @@ The installer will quit and all changes will be lost. Package selection - + Pakete aukeraketa @@ -1280,17 +1281,17 @@ The installer will quit and all changes will be lost. Password is too short - + Pasahitza laburregia da Password is too long - + Pasahitza luzeegia da Password is too weak - + Pasahitza ahulegia da @@ -1305,12 +1306,12 @@ The installer will quit and all changes will be lost. The password is the same as the old one - + Pasahitza aurreko zahar baten berdina da The password is a palindrome - + Pasahitza palindromoa da @@ -1320,7 +1321,7 @@ The installer will quit and all changes will be lost. The password is too similar to the old one - + Pasahitza aurreko zahar baten oso antzerakoa da @@ -1340,52 +1341,52 @@ The installer will quit and all changes will be lost. The password contains less than %1 digits - + Pasahitzak %1 baino zenbaki gutxiago ditu The password contains too few digits - + Pasahitzak zenbaki gutxiegi ditu The password contains less than %1 uppercase letters - + Pasahitzak %1 baino maiuskula gutxiago ditu The password contains too few uppercase letters - + Pasahitzak maiuskula gutxiegi ditu The password contains less than %1 lowercase letters - + Pasahitzak %1 baino minuskula gutxiago ditu The password contains too few lowercase letters - + Pasahitzak minuskula gutxiegi ditu The password contains less than %1 non-alphanumeric characters - + Pasahitzak alfabetokoak ez diren %1 baino karaktere gutxiago ditu The password contains too few non-alphanumeric characters - + Pasahitzak alfabetokoak ez diren karaktere gutxiegi ditu The password is shorter than %1 characters - + Pasahitza %1 karaktere baino motzagoa da. The password is too short - + Pasahitza motzegia da @@ -1551,24 +1552,24 @@ The installer will quit and all changes will be lost. What name do you want to use to log in? - + Zein izen erabili nahi duzu saioa hastean? font-weight: normal - + Letra-mota zabalera: normala <small>If more than one person will use this computer, you can set up multiple accounts after installation.</small> - + <small>Ordenagailu hau pertsona batek baino gehiagok erabiltzen badu, instalazio ondoren hainbat kontu ezarri zenitzake.</small> Choose a password to keep your account safe. - + Aukeratu pasahitza zure kontua babesteko. @@ -1583,7 +1584,7 @@ The installer will quit and all changes will be lost. <small>This name will be used if you make the computer visible to others on a network.</small> - + <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>Enter the same password twice, so that it can be checked for typing errors.</small> - + <small>Sartu pasahitza birritan, honela tekleatze erroreak egiaztatzeko.</small> @@ -1611,32 +1612,32 @@ The installer will quit and all changes will be lost. Root - + Root Home - + Home Boot - + Boot EFI system - + EFI sistema Swap - + Swap New partition for %1 - + Partizio berri %1(e)ntzat @@ -1646,7 +1647,7 @@ The installer will quit and all changes will be lost. %1 %2 - + %1 %2 @@ -1694,12 +1695,12 @@ The installer will quit and all changes will be lost. Storage de&vice: - + Biltegiratze-gailua: &Revert All Changes - + Atze&ra bota aldaketa guztiak: @@ -1905,7 +1906,7 @@ The installer will quit and all changes will be lost. Saving files for later ... - + Fitxategiak geroko gordetzen... @@ -1931,32 +1932,34 @@ There was no output from the command. Output: - + +Irteera: + External command crashed. - + Kanpo-komandoak huts egin du. Command <i>%1</i> crashed. - + <i>%1</i> komandoak huts egin du. External command failed to start. - + Ezin izan da %1 kanpo-komandoa abiarazi. Command <i>%1</i> failed to start. - + Ezin izan da <i>%1</i> komandoa abiarazi. Internal error when starting command. - + Barne-akatsa komandoa abiarazterakoan. @@ -1966,7 +1969,7 @@ Output: External command failed to finish. - + Kanpo-komandoa ez da bukatu. @@ -1976,7 +1979,7 @@ Output: External command finished with errors. - + Kanpo-komandoak akatsekin bukatu da. @@ -1989,7 +1992,7 @@ Output: Default Keyboard Model - + Teklatu mota lehenetsia @@ -2000,22 +2003,22 @@ Output: unknown - + Ezezaguna extended - + Hedatua unformatted - + Formatugabea swap - + swap @@ -2167,12 +2170,12 @@ Output: The installer is not running with administrator rights. - + Instalatzailea ez dabil exekutatzen administrari eskubideekin. The screen is too small to display the installer. - + Pantaila txikiegia da instalatzailea erakusteko. @@ -2185,7 +2188,7 @@ Output: Invalid configuration - + Konfigurazio baliogabea @@ -2251,7 +2254,7 @@ Output: Resize partition %1. - + Tamaina aldatu %1 partizioari. @@ -2293,12 +2296,12 @@ Output: Scanning storage devices... - + Biltegiratze-gailuak eskaneatzen... Partitioning - + Partizioa(k) egiten @@ -2469,7 +2472,7 @@ Output: Cannot disable root account. - + Ezin da desgaitu root kontua. @@ -2517,7 +2520,7 @@ Output: Cannot set timezone, - + Ezin da ezarri ordu-zonaldea @@ -2747,12 +2750,12 @@ Output: MiB - + MiB Total Size: - + Tamaina guztira: @@ -2760,22 +2763,22 @@ Output: --- - + --- Used Size: - + Erabilitako tamaina: Total Sectors: - + Sektoreak guztira: Quantity of LVs: - + 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 @@ Calamares Initialization Failed - + A Calamares előkészítése meghiúsult %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. - + 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/>The following modules could not be loaded: - + <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 The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. - + A parancs a gazdakörnyezetben fut, és ismernie kell a gyökér útvonalát, de nincs rootMountPoint megadva. The command needs to know the user's name, but no username is defined. - + 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 Contextual Processes Job - + Környezetfüggő folyamatok feladat @@ -560,7 +560,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l LVM LV name - + LVM LV név @@ -720,22 +720,22 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l Create new volume group named %1. - + Új kötetcsoport létrehozása: %1. Create new volume group named <strong>%1</strong>. - + Új kötetcsoport létrehozása: <strong>%1</strong>. Creating new volume group named %1. - + Új kötetcsoport létrehozása: %1. The installer failed to create a volume group named '%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 Deactivate volume group named %1. - + A kötetcsoport deaktiválása: %1. Deactivate volume group named <strong>%1</strong>. - + Kötetcsoport deaktiválása: <strong>%1</strong>. The installer failed to deactivate a volume group named %1. - + 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) - + %1 – (%2) @@ -986,7 +986,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style=" font-style:italic;">Done</span> or close the installer.</p></body></html> - + <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 Password is too weak - + A jelszó túl gyenge Memory allocation error when setting '%1' - + Memóriafoglalási hiba a(z) „%1” beállításakor Memory allocation error - + Memóriafoglalási hiba The password is the same as the old one - + A jelszó ugyanaz, mint a régi The password is a palindrome - + A jelszó egy palindrom The password differs with case changes only - + A jelszó csak kis- és nagybetűben tér el The password is too similar to the old one - + A jelszó túlságosan hasonlít a régire The password contains the user name in some form - + A jelszó tartalmazza felhasználónevet valamilyen formában The password contains words from the real name of the user in some form - + A jelszó tartalmazza a felhasználó valódi nevét valamilyen formában The password contains forbidden words in some form - + A jelszó tiltott szavakat tartalmaz valamilyen formában The password contains less than %1 digits - + A jelszó kevesebb mint %1 számjegyet tartalmaz The password contains too few digits - + A jelszó túl kevés számjegyet tartalmaz The password contains less than %1 uppercase letters - + A jelszó kevesebb mint %1 nagybetűt tartalmaz The password contains too few uppercase letters - + A jelszó túl kevés nagybetűt tartalmaz The password contains less than %1 lowercase letters - + A jelszó kevesebb mint %1 kisbetűt tartalmaz The password contains too few lowercase letters - + A jelszó túl kevés kisbetűt tartalmaz The password contains less than %1 non-alphanumeric characters - + A jelszó kevesebb mint %1 nem alfanumerikus karaktert tartalmaz The password contains too few non-alphanumeric characters - + A jelszó túl kevés nem alfanumerikus karaktert tartalmaz The password is shorter than %1 characters - + A jelszó rövidebb mint %1 karakter The password is too short - + A jelszó túl rövid The password is just rotated old one - + A jelszó egy újra felhasznált régi jelszó The password contains less than %1 character classes - + A jelszó kevesebb mint %1 karaktert tartalmaz The password does not contain enough character classes - + A jelszó nem tartalmaz elég karakterosztályt The password contains more than %1 same characters consecutively - + A jelszó több mint %1 egyező karaktert tartalmaz egymás után The password contains too many same characters consecutively - + A jelszó túl sok egyező karaktert tartalmaz egymás után The password contains more than %1 characters of the same class consecutively - + A jelszó több mint %1 karaktert tartalmaz ugyanabból a karakterosztályból egymás után The password contains too many characters of the same class consecutively - + A jelszó túl sok karaktert tartalmaz ugyanabból a karakterosztályból egymás után The password contains monotonic sequence longer than %1 characters - + A jelszó %1 karakternél hosszabb monoton sorozatot tartalmaz The password contains too long of a monotonic character sequence - + A jelszó túl hosszú monoton karaktersorozatot tartalmaz No password supplied - + Nincs jelszó megadva Cannot obtain random numbers from the RNG device - + Nem nyerhetőek ki véletlenszámok az RNG eszközből Password generation failed - required entropy too low for settings - + A jelszó előállítás meghiúsult – a szükséges entrópia túl alacsony a beállításokhoz The password fails the dictionary check - %1 - + A jelszó megbukott a szótárellenőrzésen – %1 The password fails the dictionary check - + A jelszó megbukott a szótárellenőrzésen Unknown setting - %1 - + Ismeretlen beállítás – %1 Unknown setting - + Ismeretlen beállítás Bad integer value of setting - %1 - + Hibás egész érték a beállításnál – %1 Bad integer value - + Hibás egész érték Setting %1 is not of integer type - + A(z) %1 beállítás nem egész típusú Setting is not of integer type - + A beállítás nem egész típusú Setting %1 is not of string type - + A(z) %1 beállítás nem karakterlánc típusú Setting is not of string type - + A beállítás nem karakterlánc típusú Opening the configuration file failed - + A konfigurációs fájl megnyitása meghiúsult The configuration file is malformed - + A konfigurációs fájl rosszul formázott Fatal failure - + Végzetes hiba Unknown error - + Ismeretlen hiba @@ -1711,7 +1711,7 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l Cre&ate - + &Létrehozás @@ -1726,27 +1726,27 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l New Volume Group - + Új kötetcsoport Resize Volume Group - + Kötetcsoport átméretezése Deactivate Volume Group - + Kötetcsoport deaktiválása Remove Volume Group - + Kötetcsoport eltávolítása I&nstall boot loader on: - + Rendszerbetöltő &telepítése ide: @@ -1756,12 +1756,12 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l Can not create new partition - + Nem hozható létre új partíció The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. - + 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 Look-and-Feel Job - + Plasma kinézet feladat Could not select KDE Plasma Look-and-Feel package - + 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 Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. - + 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 Look-and-Feel - + Kinézet @@ -1907,17 +1907,17 @@ Telepítés nem folytatható. <a href="#details">Részletek...&l Saving files for later ... - + Fájlok mentése későbbre … No files configured to save for later. - + Nincsenek fájlok beállítva elmentésre későbbre Not all of the configured files could be preserved. - + 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 There was no output from the command. - + +A parancsnak nem volt kimenete. Output: - + +Kimenet: + @@ -1948,17 +1951,17 @@ Output: External command failed to start. - + A külső parancsot nem sikerült elindítani. Command <i>%1</i> failed to start. - + A(z) <i>%1</i> parancsot nem sikerült elindítani. Internal error when starting command. - + Belső hiba a parancs végrehajtásakor. @@ -1973,17 +1976,17 @@ Output: Command <i>%1</i> failed to finish in %2 seconds. - + A(z) <i>%1</i> parancsot nem sikerült befejezni %2 másodperc alatt. External command finished with errors. - + A külső parancs hibával fejeződött be. Command <i>%1</i> finished with exit code %2. - + A(z) <i>%1</i> parancs hibakóddal lépett ki: %2. @@ -2031,17 +2034,17 @@ Output: Remove Volume Group named %1. - + A kötetcsoport eltávolítása: %1. Remove Volume Group named <strong>%1</strong>. - + Kötetcsoport eltávolítása: <strong>%1</strong>. The installer failed to remove a volume group named '%1'. - + A telepítő nem tudta eltávolítani a kötetcsoportot: „%1”. @@ -2182,29 +2185,29 @@ Output: Resize Filesystem Job - + Fájlrendszer átméretezési feladat Invalid configuration - + Érvénytelen konfiguráció The file-system resize job has an invalid configuration and will not run. - + A fájlrendszer átméretezési feladat konfigurációja érvénytelen, és nem fog futni. KPMCore not Available - + A KPMCore nem érhető el Calamares cannot start KPMCore for the file-system resize job. - + A Calamares nem tudja elindítani a KPMCore-t a fájlrendszer átméretezési feladathoz. @@ -2213,39 +2216,39 @@ Output: Resize Failed - + Az átméretezés meghiúsult The filesystem %1 could not be found in this system, and cannot be resized. - + A(z) %1 fájlrendszer nem található a rendszeren, és nem méretezhető át. The device %1 could not be found in this system, and cannot be resized. - + A(z) %1 eszköz nem található a rendszeren, és nem méretezhető át. The filesystem %1 cannot be resized. - + A(z) %1 fájlrendszer nem méretezhető át. The device %1 cannot be resized. - + A(z) %1 eszköz nem méretezhető át. The filesystem %1 must be resized, but cannot. - + A(z) %1 fájlrendszert át kell méretezni, de nem lehet. The device %1 must be resized, but cannot - + A(z) %1 eszközt át kell méretezni, de nem lehet @@ -2277,17 +2280,17 @@ Output: Resize volume group named %1 from %2 to %3. - + A(z) %1 kötet átméretezése ekkoráról: %2, ekkorára: %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + A(z) <strong>%1</strong> kötet átméretezése ekkoráról: <strong>%2</strong>, ekkorára: <strong>%3</strong>. The installer failed to resize a volume group named '%1'. - + A telepítő nem tudta átméretezni a kötetcsoportot: „%1”. @@ -2532,7 +2535,7 @@ Output: Shell Processes Job - + Parancssori folyamatok feladat @@ -2541,7 +2544,7 @@ Output: %L1 / %L2 slide counter, %1 of %2 (numeric) - + %L1 / %L2 @@ -2725,27 +2728,27 @@ Calamares hiba %1. VolumeGroupDialog - + Kötetcsoport párbeszédablak List of Physical Volumes - + Fizikai kötetek listája Volume Group Name: - + Kötetcsoport neve: Volume Group Type: - + Kötetcsoport típusa: Physical Extent Size: - + Fizikai kiterjedés mérete: @@ -2755,7 +2758,7 @@ Calamares hiba %1. Total Size: - + Teljes méret: @@ -2763,22 +2766,22 @@ Calamares hiba %1. --- - + --- Used Size: - + Használt méret: Total Sectors: - + Szektorok összesen: Quantity of LVs: - + 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 &lt;teo@kde.org&gt;<br/>Copyright 2017 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to: Anke Boersma, Aurélien Gâteau, Kevin Kofler, Lisa Vitolo, Philip Müller, Pier Luigi Fiorini, Rohan Garg and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. - + <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017 Adriaan de Groot &lt;groot@kde.org&gt;<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 @@ This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. - 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. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. - 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 @@ Do not install a boot loader - Jangan pasang boot loader + Jangan instal boot loader @@ -107,7 +107,7 @@ Install - Pasang + Instal @@ -187,7 +187,7 @@ Cancel installation without changing the system. - Batal pemasangan tanpa mengubah sistem yang ada. + Batalkan instalasi tanpa mengubah sistem yang ada. @@ -197,7 +197,7 @@ %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. - %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 @@ &Install - &Pasang + &Instal Cancel installation? - Batalkan pemasangan? + Batalkan instalasi? Do you really want to cancel the current install process? The installer will quit and all changes will be lost. - 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. The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> - 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> &Install now - &Pasang sekarang + &Instal sekarang @@ -264,7 +264,7 @@ Pemasangan akan ditutup dan semua perubahan akan hilang. The installation is complete. Close the installer. - Pemasangan sudah lengkap. Tutup pemasang. + Instalasi sudah lengkap. Tutup installer. @@ -274,7 +274,7 @@ Pemasangan akan ditutup dan semua perubahan akan hilang. Installation Failed - Pemasangan Gagal + Instalasi Gagal @@ -305,7 +305,7 @@ Pemasangan akan ditutup dan semua perubahan akan hilang. %1 Installer - Pemasang %1 + Installer %1 @@ -319,13 +319,13 @@ Pemasangan akan ditutup dan semua perubahan akan hilang. This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> Komputer ini tidak memenuhi syarat minimum untuk memasang %1. -Pemasang tidak dapat dilanjutkan. <a href=" +Installer tidak dapat dilanjutkan. <a href=" This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. 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>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - <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. The installer failed to create partition on disk '%1'. - 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. The installer failed to create a partition table on %1. - 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. Create new volume group named %1. - + Ciptakan grup volume baru bernama %1. Create new volume group named <strong>%1</strong>. - + Ciptakan grup volume baru bernama <strong>%1</strong>. Creating new volume group named %1. - + Menciptakan grup volume baru bernama %1. The installer failed to create a volume group named '%1'. - + Installer gagal menciptakan sebuah grup volume bernama '%1'. @@ -745,17 +745,17 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. Deactivate volume group named %1. - + Nonaktifkan grup volume bernama %1. Deactivate volume group named <strong>%1</strong>. - + Nonaktifkan grup volume bernama <strong>%1</strong>. The installer failed to deactivate a volume group named %1. - + Installer gagal menonaktifkan sebuah grup volume bernama %1. @@ -778,7 +778,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. The installer failed to delete partition %1. - Pemasang gagal untuk menghapus partisi %1. + Installer gagal untuk menghapus partisi %1. @@ -786,7 +786,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. - 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. This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. - 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) - + %1 - (%2) @@ -949,7 +949,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. Install %1 on <strong>new</strong> %2 system partition. - 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. Install %2 on %3 system partition <strong>%1</strong>. - 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. Install boot loader on <strong>%1</strong>. - 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. <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style=" font-style:italic;">Done</span> or close the installer.</p></body></html> - 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>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. - <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>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %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. Installation Complete - Pemasangan Lengkap + Instalasi Lengkap The installation of %1 is complete. - Pemasangan %1 telah lengkap. + Instalasi %1 telah lengkap. @@ -1043,7 +1043,7 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. The installer failed to format partition %1 on disk '%2'. - 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 not installed - Konsole tidak terpasang + Konsole tidak terinstal Please install KDE Konsole and try again! - 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. Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. - 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. Network Installation. (Disabled: Unable to fetch package lists, check your network connection) - Pemasangan Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu) + Instalasi Jaringan. (Dinonfungsikan: Tak mampu menarik daftar paket, periksa sambungan jaringanmu) Network Installation. (Disabled: Received invalid groups data) - 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>If more than one person will use this computer, you can set up multiple accounts after installation.</small> - <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. New Volume Group - + Grup Volume Baru Resize Volume Group - + Ubah-ukuran Grup Volume Deactivate Volume Group - + Nonaktifkan Grup Volume Remove Volume Group - + Hapus Grup Volume I&nstall boot loader on: - + I&nstal boot loader di: @@ -1780,12 +1780,12 @@ Pemasangan dapat dilanjutkan, namun beberapa fitur akan dinonfungsikan. Install %1 <strong>alongside</strong> another operating system. - Pasang %1 <strong>berdampingan</strong> dengan sistem operasi lain. + Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain. <strong>Erase</strong> disk and install %1. - <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. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - 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>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - <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. Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. - 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: Remove Volume Group named %1. - + Hapus Grup Volume bernama %1. Remove Volume Group named <strong>%1</strong>. - + Hapus Grup Volume bernama <strong>%1</strong>. The installer failed to remove a volume group named '%1'. - + Installer gagal menghapus sebuah grup volume bernama '%1'. @@ -2058,7 +2058,7 @@ Keluaran: Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. - 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 cannot be installed on empty space. Please select an existing partition. - %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 cannot be installed on an extended partition. Please select an existing primary or logical partition. - %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 cannot be installed on this partition. - %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 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. - <strong>%3</strong><br/><br/>%1 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: The installer is not running with administrator rights. - Pemasang tidak dijalankan dengan kewenangan administrator. + Installer tidak dijalankan dengan kewenangan administrator. The screen is too small to display the installer. - Layar terlalu kecil untuk menampilkan pemasang. + Layar terlalu kecil untuk menampilkan installer. @@ -2186,29 +2186,29 @@ Keluaran: Resize Filesystem Job - + Tugas Ubah-ukuran Filesystem Invalid configuration - + Konfigurasi taksah The file-system resize job has an invalid configuration and will not run. - + Tugas pengubahan ukuran filesystem mempunyai sebuah konfigurasi yang taksah dan tidak akan berjalan. KPMCore not Available - + KPMCore tidak Tersedia Calamares cannot start KPMCore for the file-system resize job. - + Calamares gak bisa menjalankan KPMCore untuk tugas pengubahan ukuran filesystem. @@ -2217,39 +2217,39 @@ Keluaran: Resize Failed - + Pengubahan Ukuran, Gagal The filesystem %1 could not be found in this system, and cannot be resized. - + Filesystem %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya. The device %1 could not be found in this system, and cannot be resized. - + Perangkat %1 enggak ditemukan dalam sistem ini, dan gak bisa diubahukurannya. The filesystem %1 cannot be resized. - + Filesystem %1 gak bisa diubahukurannya. The device %1 cannot be resized. - + Perangkat %1 gak bisa diubahukurannya. The filesystem %1 must be resized, but cannot. - + Filesystem %1 mestinya bisa diubahukurannya, namun gak bisa. The device %1 must be resized, but cannot - + Perangkat %1 mestinya bisa diubahukurannya, namun gak bisa. @@ -2272,7 +2272,7 @@ Keluaran: The installer failed to resize partition %1 on disk '%2'. - 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: Resize volume group named %1 from %2 to %3. - + Ubah ukuran grup volume bernama %1 dari %2 ke %3. Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. - + Ubah ukuran grup volume bernama <strong>%1</strong> dari <strong>%2</strong> ke %3<strong>. The installer failed to resize a volume group named '%1'. - + Installer gagal mengubah ukuran sebuah grup volume bernama '%1'. @@ -2447,7 +2447,7 @@ Keluaran: The installer failed to set flags on partition %1. - Pemasang gagal menetapkan bendera pada partisi %1. + Installer gagal menetapkan bendera pada partisi %1. @@ -2553,7 +2553,7 @@ Keluaran: This is an overview of what will happen once you start the install procedure. - 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: Internal error in install-tracking. - Galat intern di pelacakan-pemasangan. + Galat intern di pelacakan-instalasi. @@ -2631,7 +2631,7 @@ Keluaran: <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> - <html><head/><body><p>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: Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - 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. By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. - 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. By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. - 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. By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %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: VolumeGroupDialog - + DialogGrupVolume List of Physical Volumes - + Daftar dari Volume Fisik Volume Group Name: - + Nama Grup Volume: Volume Group Type: - + Tipe Grup Volume: Physical Extent Size: - + Ukuran Luas Fisik: @@ -2758,7 +2758,7 @@ Keluaran: Total Size: - + Total Ukuran: @@ -2766,22 +2766,22 @@ Keluaran: --- - + --- Used Size: - + Ukuran Terpakai: Total Sectors: - + Total Sektor: Quantity of LVs: - + Kuantitas LV: @@ -2819,17 +2819,17 @@ Keluaran: <h1>Welcome to the %1 installer.</h1> - <h1>Selamat datang di pemasang %1.</h1> + <h1>Selamat datang di installer %1.</h1> <h1>Welcome to the Calamares installer for %1.</h1> - <h1>Selamat datang di Calamares pemasang untuk %1.</h1> + <h1>Selamat datang di Calamares installer untuk %1.</h1> About %1 installer - 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 Initialization Failed - + Calamares uppsetning mistókst @@ -207,7 +207,7 @@ &Install - + &Setja upp @@ -503,7 +503,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Could not run command. - + Gat ekki keyrt skipun. @@ -559,7 +559,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. LVM LV name - + LVM LV nafn @@ -822,7 +822,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. %1 - (%2) - + %1 - (%2) @@ -1281,17 +1281,17 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Password is too short - + Lykilorðið þitt er of stutt Password is too long - + Lykilorðið þitt er of langt Password is too weak - + Lykilorðið þitt er of veikt @@ -1386,7 +1386,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. The password is too short - + Lykilorðið er of stutt @@ -1906,7 +1906,7 @@ Uppsetningarforritið mun hætta og allar breytingar tapast. Saving files for later ... - + Vista skrár fyrir seinna ... @@ -2540,7 +2540,7 @@ Output: %L1 / %L2 slide counter, %1 of %2 (numeric) - + %L1 / %L2 @@ -2640,7 +2640,7 @@ Output: ... - + ... @@ -2753,7 +2753,7 @@ Output: Total Size: - + Heildar stærð: @@ -2761,12 +2761,12 @@ Output: --- - + --- Used Size: - + 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 @@ This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. - このシステムは <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 @@ &Back - 戻る(&B) + 戻る (&B) &Next - 次へ(&N) + 次へ (&N) &Cancel - 中止(&C) + 中止 (&C) @@ -197,7 +197,7 @@ %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. - %1 はインストールできません。Calamares は全てのモジュールをロードすることをできませんでした。これは、Calamares のこのディストリビューションでの使用法による問題です。 + %1 はインストールできません。Calamares はすべてのモジュールをロードすることをできませんでした。これは、Calamares のこのディストリビューションでの使用法による問題です。 @@ -207,7 +207,7 @@ &Install - インストール(&I) + インストール (&I) @@ -224,17 +224,17 @@ The installer will quit and all changes will be lost. &Yes - はい(&Y) + はい (&Y) &No - いいえ(&N) + いいえ (&N) &Close - 閉じる(&C) + 閉じる (&C) @@ -249,17 +249,17 @@ The installer will quit and all changes will be lost. &Install now - 今すぐインストール(&I) + 今すぐインストール (&I) Go &back - 戻る(&B) + 戻る (&B) &Done - 実行(&D) + 実行 (&D) @@ -371,7 +371,7 @@ The installer will quit and all changes will be lost. Select storage de&vice: - ストレージデバイスを選択(&V): + ストレージデバイスを選択 (&V): @@ -539,22 +539,22 @@ The installer will quit and all changes will be lost. Partition &Type: - パーティションの種類(&T): + パーティションの種類 (&T): &Primary - プライマリ(&P) + プライマリ (&P) E&xtended - 拡張(&x) + 拡張 (&X) Fi&le System: - ファイルシステム (&L): + ファイルシステム (&L): @@ -569,17 +569,17 @@ The installer will quit and all changes will be lost. &Mount Point: - マウントポイント(&M) + マウントポイント (&M) Si&ze: - サイズ(&Z) + サイズ (&Z) En&crypt - 暗号化(&C) + 暗号化 (&C) @@ -650,7 +650,7 @@ The installer will quit and all changes will be lost. GUID Partition Table (GPT) - GUID パーティションテーブル(GPT) + GUID パーティションテーブル (GPT) @@ -784,7 +784,7 @@ The installer will quit and all changes will be lost. The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. - 選択したストレージデバイスにおける<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. &Keep - 保持(&K) + 保持 (&K) @@ -881,12 +881,12 @@ The installer will quit and all changes will be lost. &Mount Point: - マウントポイント(&M) + マウントポイント (&M) Si&ze: - サイズ(&Z): + サイズ (&Z): @@ -896,7 +896,7 @@ The installer will quit and all changes will be lost. Fi&le System: - ファイルシステム(&L) + ファイルシステム (&L) @@ -919,7 +919,7 @@ The installer will quit and all changes will be lost. En&crypt system - システムを暗号化(&C) + システムを暗号化 (&C) @@ -990,7 +990,7 @@ The installer will quit and all changes will be lost. &Restart now - 今すぐ再起動(&R) + 今すぐ再起動 (&R) @@ -1107,12 +1107,12 @@ The installer will quit and all changes will be lost. &Cancel - 中止(&C) + 中止 (&C) &OK - 了解(&O) + 了解 (&O) @@ -1219,7 +1219,7 @@ The installer will quit and all changes will be lost. &Change... - 変更(&C)... + 変更 (&C)... @@ -1696,7 +1696,7 @@ The installer will quit and all changes will be lost. Storage de&vice: - ストレージデバイス (&V): + ストレージデバイス (&V): @@ -1706,22 +1706,22 @@ The installer will quit and all changes will be lost. New Partition &Table - 新しいパーティションテーブル(&T) + 新しいパーティションテーブル (&T) Cre&ate - 作成(&a) + 作成 (&A) &Edit - 編集(&E) + 編集 (&E) &Delete - 削除(&D) + 削除 (&D) @@ -1751,7 +1751,7 @@ The installer will quit and all changes will be lost. Are you sure you want to create a new partition table on %1? - %1 上で新しいパーティションテーブルを作成します。よろしいですか? + %1 上で新しいパーティションテーブルを作成します。よろしいですか? @@ -1859,7 +1859,7 @@ The installer will quit and all changes will be lost. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. - ブートパーティションは暗号化されたルートパーティションとともにセットアップされましたが、ブートパーティションは暗号化されていません。<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. Not all of the configured files could be preserved. - 設定ファイルは全て保護されるわけではありません。 + 設定ファイルはすべて保護されるわけではありません。 @@ -2654,7 +2654,7 @@ Output: Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. - インストールトラッキングは %1 にとって、どれだけのユーザーが どのハードに %1 をインストールするのか(下記の2つのオプション)、どのようなアプリケーションが好まれているのかについての情報を把握することの補助を行っています。 どのような情報が送信されているのか確認したい場合は、以下の各エリアのヘルプのアイコンをクリックして下さい。 + インストールトラッキングは %1 にとって、どれだけのユーザーが どのハードに %1 をインストールするのか (下記の2つのオプション)、どのようなアプリケーションが好まれているのかについての情報を把握することの補助を行っています。 どのような情報が送信されているのか確認したい場合は、以下の各エリアのヘルプのアイコンをクリックして下さい。 @@ -2757,7 +2757,7 @@ Output: Total Size: - 全てのサイズ: + すべてのサイズ: @@ -2775,7 +2775,7 @@ Output: Total Sectors: - 全てのセクター: + すべてのセクター: @@ -2793,17 +2793,17 @@ Output: &Language: - 言語(&L): + 言語 (&L): &Release notes - リリースノート(&R) + リリースノート (&R) &Known issues - 既知の問題(&K) + 既知の問題 (&K) @@ -2813,7 +2813,7 @@ Output: &About - 説明(&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 + + + The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. + + + + + This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. + + + + + This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. + + + + + BootLoaderModel + + + Master Boot Record of %1 + + + + + Boot Partition + + + + + System Partition + + + + + Do not install a boot loader + + + + + %1 (%2) + + + + + Calamares::BlankViewStep + + + Blank Page + Празна Страна + + + + Calamares::DebugWindow + + + Form + + + + + GlobalStorage + + + + + JobQueue + + + + + Modules + + + + + Type: + + + + + + none + + + + + Interface: + + + + + Tools + Алатки + + + + Debug information + + + + + Calamares::ExecutionViewStep + + + Install + Инсталирај + + + + Calamares::JobThread + + + Done + Готово + + + + Calamares::ProcessJob + + + Run command %1 %2 + + + + + Running command %1 %2 + + + + + Calamares::PythonJob + + + Running %1 operation. + + + + + Bad working directory path + + + + + Working directory %1 for python job %2 is not readable. + + + + + Bad main script file + + + + + Main script file %1 for python job %2 is not readable. + + + + + Boost.Python error in job "%1". + + + + + Calamares::ViewManager + + + &Back + + + + + + &Next + + + + + + &Cancel + + + + + + Cancel installation without changing the system. + + + + + Calamares Initialization Failed + + + + + %1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. + + + + + <br/>The following modules could not be loaded: + + + + + &Install + + + + + Cancel installation? + + + + + Do you really want to cancel the current install process? +The installer will quit and all changes will be lost. + + + + + &Yes + + + + + &No + + + + + &Close + + + + + Continue with setup? + + + + + The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong> + + + + + &Install now + + + + + Go &back + + + + + &Done + + + + + The installation is complete. Close the installer. + Инсталацијата е готова. Исклучете го инсталерот. + + + + Error + Грешка + + + + Installation Failed + + + + + CalamaresPython::Helper + + + Unknown exception type + + + + + unparseable Python error + + + + + unparseable Python traceback + + + + + Unfetchable Python error. + + + + + CalamaresWindow + + + %1 Installer + + + + + Show debug information + + + + + CheckerWidget + + + This computer does not satisfy the minimum requirements for installing %1.<br/>Installation cannot continue. <a href="#details">Details...</a> + + + + + This computer does not satisfy some of the recommended requirements for installing %1.<br/>Installation can continue, but some features might be disabled. + + + + + This program will ask you some questions and set up %2 on your computer. + + + + + For best results, please ensure that this computer: + + + + + System requirements + + + + + ChoicePage + + + Form + + + + + After: + + + + + <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. + + + + + Boot loader location: + + + + + %1 will be shrunk to %2MB and a new %3MB partition will be created for %4. + + + + + Select storage de&vice: + + + + + + + + Current: + + + + + Reuse %1 as home partition for %2. + + + + + <strong>Select a partition to shrink, then drag the bottom bar to resize</strong> + + + + + <strong>Select a partition to install on</strong> + + + + + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. + + + + + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. + + + + + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. + + + + + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. + + + + + ClearMountsJob + + + Clear mounts for partitioning operations on %1 + + + + + Clearing mounts for partitioning operations on %1. + + + + + Cleared all mounts for %1 + + + + + ClearTempMountsJob + + + Clear all temporary mounts. + + + + + Clearing all temporary mounts. + + + + + Cannot get list of temporary mounts. + + + + + Cleared all temporary mounts. + + + + + CommandList + + + + Could not run command. + + + + + The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined. + + + + + The command needs to know the user's name, but no username is defined. + + + + + ContextualProcessJob + + + Contextual Processes Job + + + + + CreatePartitionDialog + + + Create a Partition + + + + + MiB + + + + + Partition &Type: + + + + + &Primary + + + + + E&xtended + + + + + Fi&le System: + + + + + LVM LV name + + + + + Flags: + + + + + &Mount Point: + + + + + Si&ze: + + + + + En&crypt + + + + + Logical + + + + + Primary + + + + + GPT + + + + + Mountpoint already in use. Please select another one. + + + + + CreatePartitionJob + + + Create new %2MB partition on %4 (%3) with file system %1. + + + + + Create new <strong>%2MB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>. + + + + + Creating new %1 partition on %2. + + + + + The installer failed to create partition on disk '%1'. + + + + + CreatePartitionTableDialog + + + Create Partition Table + + + + + Creating a new partition table will delete all existing data on the disk. + + + + + What kind of partition table do you want to create? + + + + + Master Boot Record (MBR) + + + + + GUID Partition Table (GPT) + + + + + CreatePartitionTableJob + + + Create new %1 partition table on %2. + + + + + Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3). + + + + + Creating new %1 partition table on %2. + + + + + The installer failed to create a partition table on %1. + + + + + CreateUserJob + + + Create user %1 + + + + + Create user <strong>%1</strong>. + + + + + Creating user %1. + + + + + Sudoers dir is not writable. + + + + + Cannot create sudoers file for writing. + + + + + Cannot chmod sudoers file. + + + + + Cannot open groups file for reading. + + + + + CreateVolumeGroupJob + + + Create new volume group named %1. + + + + + Create new volume group named <strong>%1</strong>. + + + + + Creating new volume group named %1. + + + + + The installer failed to create a volume group named '%1'. + + + + + DeactivateVolumeGroupJob + + + + Deactivate volume group named %1. + + + + + Deactivate volume group named <strong>%1</strong>. + + + + + The installer failed to deactivate a volume group named %1. + + + + + DeletePartitionJob + + + Delete partition %1. + + + + + Delete partition <strong>%1</strong>. + + + + + Deleting partition %1. + + + + + The installer failed to delete partition %1. + + + + + DeviceInfoWidget + + + The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred. + + + + + This device has a <strong>%1</strong> partition table. + + + + + This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem. + + + + + This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page. + + + + + <br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment. + + + + + <br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions. + + + + + DeviceModel + + + %1 - %2 (%3) + + + + + %1 - (%2) + + + + + DracutLuksCfgJob + + + Write LUKS configuration for Dracut to %1 + + + + + Skip writing LUKS configuration for Dracut: "/" partition is not encrypted + + + + + Failed to open %1 + + + + + DummyCppJob + + + Dummy C++ Job + + + + + EditExistingPartitionDialog + + + Edit Existing Partition + + + + + Content: + + + + + &Keep + + + + + Format + + + + + Warning: Formatting the partition will erase all existing data. + + + + + &Mount Point: + + + + + Si&ze: + + + + + MiB + + + + + Fi&le System: + + + + + Flags: + + + + + Mountpoint already in use. Please select another one. + + + + + EncryptWidget + + + Form + + + + + En&crypt system + + + + + Passphrase + + + + + Confirm passphrase + + + + + Please enter the same passphrase in both boxes. + + + + + FillGlobalStorageJob + + + Set partition information + + + + + Install %1 on <strong>new</strong> %2 system partition. + + + + + Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>. + + + + + Install %2 on %3 system partition <strong>%1</strong>. + + + + + Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>. + + + + + Install boot loader on <strong>%1</strong>. + + + + + Setting up mount points. + + + + + FinishedPage + + + Form + + + + + <html><head/><body><p>When this box is checked, your system will restart immediately when you click on <span style=" font-style:italic;">Done</span> or close the installer.</p></body></html> + + + + + &Restart now + + + + + <h1>All done.</h1><br/>%1 has been installed on your computer.<br/>You may now restart into your new system, or continue using the %2 Live environment. + + + + + <h1>Installation Failed</h1><br/>%1 has not been installed on your computer.<br/>The error message was: %2. + + + + + FinishedViewStep + + + Finish + + + + + Installation Complete + + + + + The installation of %1 is complete. + + + + + FormatPartitionJob + + + Format partition %1 (file system: %2, size: %3 MB) on %4. + + + + + Format <strong>%3MB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>. + + + + + Formatting partition %1 with file system %2. + + + + + The installer failed to format partition %1 on disk '%2'. + + + + + InteractiveTerminalPage + + + Konsole not installed + + + + + Please install KDE Konsole and try again! + + + + + Executing script: &nbsp;<code>%1</code> + + + + + InteractiveTerminalViewStep + + + Script + + + + + KeyboardPage + + + Set keyboard model to %1.<br/> + + + + + Set keyboard layout to %1/%2. + + + + + KeyboardViewStep + + + Keyboard + + + + + LCLocaleDialog + + + System locale setting + + + + + The system locale setting affects the language and character set for some command line user interface elements.<br/>The current setting is <strong>%1</strong>. + + + + + &Cancel + + + + + &OK + + + + + LicensePage + + + Form + + + + + I accept the terms and conditions above. + + + + + <h1>License Agreement</h1>This setup procedure will install proprietary software that is subject to licensing terms. + + + + + Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, the setup procedure cannot continue. + + + + + <h1>License Agreement</h1>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience. + + + + + Please review the End User License Agreements (EULAs) above.<br/>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead. + + + + + <strong>%1 driver</strong><br/>by %2 + %1 is an untranslatable product name, example: Creative Audigy driver + + + + + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> + %1 is usually a vendor name, example: Nvidia graphics driver + + + + + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1 package</strong><br/><font color="Grey">by %2</font> + + + + + <strong>%1</strong><br/><font color="Grey">by %2</font> + + + + + <a href="%1">view license agreement</a> + + + + + LicenseViewStep + + + License + + + + + LocalePage + + + The system language will be set to %1. + + + + + The numbers and dates locale will be set to %1. + + + + + Region: + + + + + Zone: + + + + + + &Change... + + + + + Set timezone to %1/%2.<br/> + + + + + %1 (%2) + Language (Country) + + + + + LocaleViewStep + + + Loading location data... + + + + + Location + + + + + NetInstallPage + + + Name + + + + + Description + + + + + Network Installation. (Disabled: Unable to fetch package lists, check your network connection) + + + + + Network Installation. (Disabled: Received invalid groups data) + + + + + NetInstallViewStep + + + Package selection + + + + + PWQ + + + Password is too short + + + + + Password is too long + + + + + Password is too weak + + + + + Memory allocation error when setting '%1' + + + + + Memory allocation error + + + + + The password is the same as the old one + + + + + The password is a palindrome + + + + + The password differs with case changes only + + + + + The password is too similar to the old one + + + + + The password contains the user name in some form + + + + + The password contains words from the real name of the user in some form + + + + + The password contains forbidden words in some form + + + + + The password contains less than %1 digits + + + + + The password contains too few digits + + + + + The password contains less than %1 uppercase letters + + + + + The password contains too few uppercase letters + + + + + The password contains less than %1 lowercase letters + + + + + The password contains too few lowercase letters + + + + + The password contains less than %1 non-alphanumeric characters + + + + + The password contains too few non-alphanumeric characters + + + + + The password is shorter than %1 characters + + + + + The password is too short + + + + + The password is just rotated old one + + + + + The password contains less than %1 character classes + + + + + The password does not contain enough character classes + + + + + The password contains more than %1 same characters consecutively + + + + + The password contains too many same characters consecutively + + + + + The password contains more than %1 characters of the same class consecutively + + + + + The password contains too many characters of the same class consecutively + + + + + The password contains monotonic sequence longer than %1 characters + + + + + The password contains too long of a monotonic character sequence + + + + + No password supplied + + + + + Cannot obtain random numbers from the RNG device + + + + + Password generation failed - required entropy too low for settings + + + + + The password fails the dictionary check - %1 + + + + + The password fails the dictionary check + + + + + Unknown setting - %1 + + + + + Unknown setting + + + + + Bad integer value of setting - %1 + + + + + Bad integer value + + + + + Setting %1 is not of integer type + + + + + Setting is not of integer type + + + + + Setting %1 is not of string type + + + + + Setting is not of string type + + + + + Opening the configuration file failed + + + + + The configuration file is malformed + + + + + Fatal failure + + + + + Unknown error + + + + + Page_Keyboard + + + Form + + + + + Keyboard Model: + + + + + Type here to test your keyboard + + + + + Page_UserSetup + + + Form + + + + + What is your name? + + + + + What name do you want to use to log in? + + + + + + + font-weight: normal + + + + + <small>If more than one person will use this computer, you can set up multiple accounts after installation.</small> + + + + + Choose a password to keep your account safe. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.</small> + + + + + What is the name of this computer? + + + + + <small>This name will be used if you make the computer visible to others on a network.</small> + + + + + Log in automatically without asking for the password. + + + + + Use the same password for the administrator account. + + + + + Choose a password for the administrator account. + + + + + <small>Enter the same password twice, so that it can be checked for typing errors.</small> + + + + + PartitionLabelsView + + + Root + + + + + Home + + + + + Boot + + + + + EFI system + + + + + Swap + + + + + New partition for %1 + + + + + New partition + + + + + %1 %2 + + + + + PartitionModel + + + + Free Space + + + + + + New partition + + + + + Name + + + + + File System + + + + + Mount Point + + + + + Size + + + + + PartitionPage + + + Form + + + + + Storage de&vice: + + + + + &Revert All Changes + + + + + New Partition &Table + + + + + Cre&ate + + + + + &Edit + + + + + &Delete + + + + + New Volume Group + + + + + Resize Volume Group + + + + + Deactivate Volume Group + + + + + Remove Volume Group + + + + + I&nstall boot loader on: + + + + + Are you sure you want to create a new partition table on %1? + + + + + Can not create new partition + + + + + The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead. + + + + + PartitionViewStep + + + Gathering system information... + + + + + Partitions + + + + + Install %1 <strong>alongside</strong> another operating system. + + + + + <strong>Erase</strong> disk and install %1. + + + + + <strong>Replace</strong> a partition with %1. + + + + + <strong>Manual</strong> partitioning. + + + + + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). + + + + + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. + + + + + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. + + + + + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). + + + + + Disk <strong>%1</strong> (%2) + + + + + Current: + + + + + After: + + + + + No EFI system partition configured + + + + + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>esp</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. + + + + + EFI system partition flag not set + + + + + An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>esp</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. + + + + + Boot partition not encrypted + + + + + A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. + + + + + PlasmaLnfJob + + + Plasma Look-and-Feel Job + + + + + + Could not select KDE Plasma Look-and-Feel package + + + + + PlasmaLnfPage + + + Form + + + + + Placeholder + + + + + Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel. + + + + + PlasmaLnfViewStep + + + Look-and-Feel + + + + + PreserveFiles + + + Saving files for later ... + + + + + No files configured to save for later. + + + + + Not all of the configured files could be preserved. + + + + + ProcessResult + + + +There was no output from the command. + + + + + +Output: + + + + + + External command crashed. + + + + + Command <i>%1</i> crashed. + + + + + External command failed to start. + + + + + Command <i>%1</i> failed to start. + + + + + Internal error when starting command. + + + + + Bad parameters for process job call. + + + + + External command failed to finish. + + + + + Command <i>%1</i> failed to finish in %2 seconds. + + + + + External command finished with errors. + + + + + Command <i>%1</i> finished with exit code %2. + + + + + QObject + + + Default Keyboard Model + + + + + + Default + + + + + unknown + + + + + extended + + + + + unformatted + + + + + swap + + + + + Unpartitioned space or unknown partition table + + + + + RemoveVolumeGroupJob + + + + Remove Volume Group named %1. + + + + + Remove Volume Group named <strong>%1</strong>. + + + + + The installer failed to remove a volume group named '%1'. + + + + + ReplaceWidget + + + Form + + + + + Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. + + + + + The selected item does not appear to be a valid partition. + + + + + %1 cannot be installed on empty space. Please select an existing partition. + + + + + %1 cannot be installed on an extended partition. Please select an existing primary or logical partition. + + + + + %1 cannot be installed on this partition. + + + + + Data partition (%1) + + + + + Unknown system partition (%1) + + + + + %1 system partition (%2) + + + + + <strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB. + + + + + <strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. + + + + + + + <strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost. + + + + + The EFI system partition at %1 will be used for starting %2. + + + + + EFI system partition: + + + + + RequirementsChecker + + + Gathering system information... + + + + + has at least %1 GB available drive space + + + + + There is not enough drive space. At least %1 GB is required. + + + + + has at least %1 GB working memory + + + + + The system does not have enough working memory. At least %1 GB is required. + + + + + is plugged in to a power source + + + + + The system is not plugged in to a power source. + + + + + is connected to the Internet + + + + + The system is not connected to the Internet. + + + + + The installer is not running with administrator rights. + + + + + The screen is too small to display the installer. + + + + + ResizeFSJob + + + Resize Filesystem Job + + + + + Invalid configuration + + + + + The file-system resize job has an invalid configuration and will not run. + + + + + + KPMCore not Available + + + + + + Calamares cannot start KPMCore for the file-system resize job. + + + + + + + + + Resize Failed + + + + + The filesystem %1 could not be found in this system, and cannot be resized. + + + + + The device %1 could not be found in this system, and cannot be resized. + + + + + + The filesystem %1 cannot be resized. + + + + + + The device %1 cannot be resized. + + + + + The filesystem %1 must be resized, but cannot. + + + + + The device %1 must be resized, but cannot + + + + + ResizePartitionJob + + + Resize partition %1. + + + + + Resize <strong>%2MB</strong> partition <strong>%1</strong> to <strong>%3MB</strong>. + + + + + Resizing %2MB partition %1 to %3MB. + + + + + The installer failed to resize partition %1 on disk '%2'. + + + + + ResizeVolumeGroupJob + + + + Resize volume group named %1 from %2 to %3. + + + + + Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>. + + + + + The installer failed to resize a volume group named '%1'. + + + + + ScanningDialog + + + Scanning storage devices... + + + + + Partitioning + + + + + SetHostNameJob + + + Set hostname %1 + + + + + Set hostname <strong>%1</strong>. + + + + + Setting hostname %1. + + + + + + Internal Error + + + + + + Cannot write hostname to target system + + + + + SetKeyboardLayoutJob + + + Set keyboard model to %1, layout to %2-%3 + + + + + Failed to write keyboard configuration for the virtual console. + + + + + + + Failed to write to %1 + + + + + Failed to write keyboard configuration for X11. + + + + + Failed to write keyboard configuration to existing /etc/default directory. + + + + + SetPartFlagsJob + + + Set flags on partition %1. + + + + + Set flags on %1MB %2 partition. + + + + + Set flags on new partition. + + + + + Clear flags on partition <strong>%1</strong>. + + + + + Clear flags on %1MB <strong>%2</strong> partition. + + + + + Clear flags on new partition. + + + + + Flag partition <strong>%1</strong> as <strong>%2</strong>. + + + + + Flag %1MB <strong>%2</strong> partition as <strong>%3</strong>. + + + + + Flag new partition as <strong>%1</strong>. + + + + + Clearing flags on partition <strong>%1</strong>. + + + + + Clearing flags on %1MB <strong>%2</strong> partition. + + + + + Clearing flags on new partition. + + + + + Setting flags <strong>%2</strong> on partition <strong>%1</strong>. + + + + + Setting flags <strong>%3</strong> on %1MB <strong>%2</strong> partition. + + + + + Setting flags <strong>%1</strong> on new partition. + + + + + The installer failed to set flags on partition %1. + + + + + SetPasswordJob + + + Set password for user %1 + + + + + Setting password for user %1. + + + + + Bad destination system path. + + + + + rootMountPoint is %1 + + + + + Cannot disable root account. + + + + + passwd terminated with error code %1. + + + + + Cannot set password for user %1. + + + + + usermod terminated with error code %1. + + + + + SetTimezoneJob + + + Set timezone to %1/%2 + + + + + Cannot access selected timezone path. + + + + + Bad path: %1 + + + + + Cannot set timezone. + + + + + Link creation failed, target: %1; link name: %2 + + + + + Cannot set timezone, + + + + + Cannot open /etc/timezone for writing + + + + + ShellProcessJob + + + Shell Processes Job + + + + + SlideCounter + + + %L1 / %L2 + slide counter, %1 of %2 (numeric) + + + + + SummaryPage + + + This is an overview of what will happen once you start the install procedure. + + + + + SummaryViewStep + + + Summary + + + + + TrackingInstallJob + + + Installation feedback + + + + + Sending installation feedback. + + + + + Internal error in install-tracking. + + + + + HTTP request timed out. + + + + + TrackingMachineNeonJob + + + Machine feedback + + + + + Configuring machine feedback. + + + + + + Error in machine feedback configuration. + + + + + Could not configure machine feedback correctly, script error %1. + + + + + Could not configure machine feedback correctly, Calamares error %1. + + + + + TrackingPage + + + Form + + + + + Placeholder + + + + + <html><head/><body><p>By selecting this, you will send <span style=" font-weight:600;">no information at all</span> about your installation.</p></body></html> + + + + + + + TextLabel + + + + + + + ... + + + + + <html><head/><body><p><a href="placeholder"><span style=" text-decoration: underline; color:#2980b9;">Click here for more information about user feedback</span></a></p></body></html> + + + + + Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area. + + + + + By selecting this you will send information about your installation and hardware. This information will <b>only be sent once</b> after the installation finishes. + + + + + By selecting this you will <b>periodically</b> send information about your installation, hardware and applications, to %1. + + + + + By selecting this you will <b>regularly</b> send information about your installation, hardware, applications and usage patterns, to %1. + + + + + TrackingViewStep + + + Feedback + + + + + UsersPage + + + Your username is too long. + + + + + Your username contains invalid characters. Only lowercase letters and numbers are allowed. + + + + + Your hostname is too short. + + + + + Your hostname is too long. + + + + + Your hostname contains invalid characters. Only letters, numbers and dashes are allowed. + + + + + + Your passwords do not match! + + + + + UsersViewStep + + + Users + + + + + VolumeGroupBaseDialog + + + VolumeGroupDialog + + + + + List of Physical Volumes + + + + + Volume Group Name: + + + + + Volume Group Type: + + + + + Physical Extent Size: + + + + + MiB + + + + + Total Size: + + + + + + + + --- + + + + + Used Size: + + + + + Total Sectors: + + + + + Quantity of LVs: + + + + + WelcomePage + + + Form + + + + + &Language: + + + + + &Release notes + + + + + &Known issues + + + + + &Support + + + + + &About + + + + + <h1>Welcome to the %1 installer.</h1> + + + + + <h1>Welcome to the Calamares installer for %1.</h1> + + + + + About %1 installer + + + + + <h1>%1</h1><br/><strong>%2<br/>for %3</strong><br/><br/>Copyright 2014-2017 Teo Mrnjavac &lt;teo@kde.org&gt;<br/>Copyright 2017 Adriaan de Groot &lt;groot@kde.org&gt;<br/>Thanks to: Anke Boersma, Aurélien Gâteau, Kevin Kofler, Lisa Vitolo, Philip Müller, Pier Luigi Fiorini, Rohan Garg and the <a href="https://www.transifex.com/calamares/calamares/">Calamares translators team</a>.<br/><br/><a href="https://calamares.io/">Calamares</a> development is sponsored by <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - Liberating Software. + + + + + %1 support + + + + + WelcomeViewStep + + + Welcome + + + + \ No newline at end of file diff --git a/lang/calamares_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. Create new volume group named %1. - + Создать новую группу томов на диске %1 Create new volume group named <strong>%1</strong>. - + Создать новую группу томов на диске %1 Creating new volume group named %1. - + Cоздание новой группы томов на диске %1 The installer failed to create a volume group named '%1'. - + Программа установки не смогла создать группу томов на диске '%1'. @@ -821,7 +821,7 @@ The installer will quit and all changes will be lost. %1 - (%2) - + %1 - (%2) @@ -829,7 +829,7 @@ The installer will quit and all changes will be lost. Write LUKS configuration for Dracut to %1 - + Записать LUKS настройки для Dracut в %1 @@ -1470,7 +1470,7 @@ The installer will quit and all changes will be lost. Bad integer value of setting - %1 - + Недопустимое целое значение свойства - %1 @@ -1724,12 +1724,12 @@ The installer will quit and all changes will be lost. New Volume Group - + Новая группа томов Resize Volume Group - + Изменить размер группы томов @@ -1739,12 +1739,12 @@ The installer will quit and all changes will be lost. Remove Volume Group - + Удалить группу томов I&nstall boot loader on: - + Уст&ановить загрузчик в: @@ -1884,7 +1884,7 @@ The installer will quit and all changes will be lost. Placeholder - + Заменитель @@ -1905,12 +1905,12 @@ The installer will quit and all changes will be lost. Saving files for later ... - + Сохраняю файлы на потом... No files configured to save for later. - + Нет файлов, которые требуется сохранить на потом. @@ -1924,7 +1924,8 @@ The installer will quit and all changes will be lost. There was no output from the command. - + +Вывода из команды не последовало. @@ -2031,17 +2032,17 @@ Output: Remove Volume Group named %1. - + Удалить группу томов на диске %1 Remove Volume Group named <strong>%1</strong>. - + Удалить группу томов на диске %1 The installer failed to remove a volume group named '%1'. - + Установщик не смог удалить группу томов на диске '%1'. @@ -2182,12 +2183,12 @@ Output: Resize Filesystem Job - + Изменить размер файловой системы Invalid configuration - + Недействительная конфигурация @@ -2213,7 +2214,7 @@ Output: Resize Failed - + Не удалось изменить размер @@ -2622,7 +2623,7 @@ Output: Placeholder - + Заменитель 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.