diff --git a/.travis.yml b/.travis.yml
index a9fcbb28b388d256c9af2590d414b253af3a8ee0..9f52226bf07c739ba6bcecacf09d747d5962757a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,5 +19,5 @@ install:
   - docker build -t calamares .
 
 script:
-  - docker run -v $PWD:/src --tmpfs /build:rw,size=81920k -e SRCDIR=/src -e BUILDDIR=/build calamares "/src/ci/travis.sh"
+  - docker run -v $PWD:/src --tmpfs /build:rw,size=112M -e SRCDIR=/src -e BUILDDIR=/build calamares "/src/ci/travis.sh"
 
diff --git a/CHANGES b/CHANGES
index 911f7156e599ae228cf8a092d6defdc48fe9dbfe..73c99cf9bf469c4ba8f37bfc53606d6c4885ce5b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -10,13 +10,22 @@ website will have to do for older versions.
 # 3.2.33 (unreleased) #
 
 This release contains contributions from (alphabetically by first name):
- - No external contributors yet
+ - Anke Boersma
+ - Andrius Å tikonas
+ - Artem Grinev
+ - Gaël PORTAY
+ - TTran Me
 
 ## Core ##
- - No core changes yet
+ - Calamares now sets the C++ standard for compilation to C++17; this
+   is for better compatibility and fewer warnings when building with
+   modern KDE Frameworks and KPMcore 4.2.0.
+ - Vietnamese translations have been added. Welcome!
 
 ## Modules ##
- - No module changes yet
+ - The *keyboard* and *keyboardq* modules now share backend code
+   and handle non-ASCII layouts better (for setting passwords
+   and usernames).
 
 
 # 3.2.32.1 (2020-10-17) #
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 99f6cd42a295fd161eb4921b4b8b6974f1c7b954..b20ce50d9d9e6f8ec72ac0b2a7a977dbe0b45eb0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -140,12 +140,13 @@ set( CALAMARES_DESCRIPTION_SUMMARY
 # NOTE: update these lines by running `txstats.py`, or for full automation
 #       `txstats.py -e`. See also
 #
-# Total 70 languages
-set( _tx_complete ca cs_CZ he hr sq tr_TR uk )
-set( _tx_good as ast az az_AZ be da de es fa fi_FI fr hi hu it_IT
-    ja ko lt ml nl pt_BR pt_PT ru sk sv tg zh_CN zh_TW )
-set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu fur gl id is mr nb
-    pl ro sl sr sr@latin th )
+# Total 71 languages
+set( _tx_complete be ca cs_CZ da fi_FI fur he hi hr ja pt_BR sq sv
+    tg uk vi zh_TW )
+set( _tx_good as ast az az_AZ de es fa fr hu it_IT ko lt ml nl
+    pt_PT ru sk tr_TR zh_CN )
+set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu gl id is mr nb pl
+    ro sl sr sr@latin th )
 set( _tx_incomplete ca@valencia eo fr_CH gu ie kk kn lo lv mk ne_NP
     te ur uz )
 
@@ -190,23 +191,30 @@ include( CMakeColors )
 
 ### C++ SETUP
 #
-set( CMAKE_CXX_STANDARD 14 )
+set( CMAKE_CXX_STANDARD 17 )
 set( CMAKE_CXX_STANDARD_REQUIRED ON )
+set( CMAKE_CXX_FLAGS                "${CMAKE_CXX_FLAGS} -Wall -Werror=return-type" )
+set( CMAKE_CXX_FLAGS_DEBUG          "-g ${CMAKE_CXX_FLAGS_DEBUG}" )
+set( CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG" )
+set( CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG" )
+set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
+
 set( CMAKE_C_STANDARD 99 )
 set( CMAKE_C_STANDARD_REQUIRED ON )
-
 set( CMAKE_C_FLAGS                  "${CMAKE_C_FLAGS} -Wall" )
+set( CMAKE_C_FLAGS_DEBUG            "-g" )
+set( CMAKE_C_FLAGS_MINSIZEREL       "-Os -DNDEBUG" )
+set( CMAKE_C_FLAGS_RELEASE          "-O4 -DNDEBUG" )
+set( CMAKE_C_FLAGS_RELWITHDEBINFO   "-O2 -g" )
+
+set( CMAKE_SHARED_LINKER_FLAGS      "-Wl,--no-undefined -Wl,--fatal-warnings" )
+
 if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
     message( STATUS "Found Clang ${CMAKE_CXX_COMPILER_VERSION}, setting up Clang-specific compiler flags." )
-    set( CMAKE_C_FLAGS                  "${CMAKE_C_FLAGS} -Wall" )
-    set( CMAKE_C_FLAGS_DEBUG            "-g" )
-    set( CMAKE_C_FLAGS_MINSIZEREL       "-Os -DNDEBUG" )
-    set( CMAKE_C_FLAGS_RELEASE          "-O4 -DNDEBUG" )
-    set( CMAKE_C_FLAGS_RELWITHDEBINFO   "-O2 -g" )
 
     # Clang warnings: doing *everything* is counter-productive, since it warns
     # about things which we can't fix (e.g. C++98 incompatibilities, but
-    # Calamares is C++14).
+    # Calamares is C++17).
     foreach( CLANG_WARNINGS
         -Weverything
         -Wno-c++98-compat
@@ -218,40 +226,26 @@ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
         -Wno-missing-prototypes
         -Wno-documentation-unknown-command
         -Wno-unknown-warning-option
-        -Werror=return-type
     )
         string( APPEND CMAKE_CXX_FLAGS " ${CLANG_WARNINGS}" )
     endforeach()
-    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='//' -DFALLTHRU='[[clang::fallthrough]]'")
 
     # Third-party code where we don't care so much about compiler warnings
     # (because it's uncomfortable to patch) get different flags; use
     #       mark_thirdparty_code( <file> [<file>...] )
     # to switch off warnings for those sources.
     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 ${CMAKE_CXX_FLAGS_DEBUG}" )
-    set( CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG" )
-    set( CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG" )
-    set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" )
 
     set( CMAKE_TOOLCHAIN_PREFIX "llvm-" )
 
-    set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
-
     # The path prefix is only relevant for CMake 3.16 and later, fixes #1286
     set( CMAKE_AUTOMOC_PATH_PREFIX OFF )
     set( CALAMARES_AUTOMOC_OPTIONS "-butils/moc-warnings.h" )
     set( CALAMARES_AUTOUIC_OPTIONS --include utils/moc-warnings.h )
 else()
-    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined" )
-    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--fatal-warnings -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type" )
+    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Woverloaded-virtual" )
 
     set( SUPPRESS_3RDPARTY_WARNINGS "" )
-    set( SUPPRESS_BOOST_WARNINGS "" )
-
-    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOTREACHED='__builtin_unreachable();' -DFALLTHRU='/* */'" )
 endif()
 
 # Use mark_thirdparty_code() to reduce warnings from the compiler
diff --git a/README.md b/README.md
index 3049fbabc28720115625f2a0c176afb1f8eb90e0..7ad26e2c5f9631ce7fbacd36389e83d26764a777 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ Clone Calamares from GitHub. The default branch is called *calamares*.
 git clone https://github.com/calamares/calamares.git
 ```
 
-Calamares is a KDE-Frameworks and Qt-based, C++14, CMake-built application.
+Calamares is a KDE-Frameworks and Qt-based, C++17, CMake-built application.
 The dependencies are explainged in [CONTRIBUTING.md](CONTRIBUTING.md).
 
 ## Contributing to Calamares
diff --git a/calamares.desktop b/calamares.desktop
index b6cafe61271dc2ccba99f8c75d0b8ab3c3a8cda6..834c4a518218f0078422aee07b6950396898fd96 100644
--- a/calamares.desktop
+++ b/calamares.desktop
@@ -201,6 +201,10 @@ Name[uk]=Встановити Систему
 Icon[uk]=calamares
 GenericName[uk]=Встановлювач системи
 Comment[uk]=Calamares - Встановлювач системи
+Name[vi]=Cài đặt hệ thống
+Icon[vi]=calamares
+GenericName[vi]=Bộ cài đặt hệ thống
+Comment[vi]=Calamares — Bộ cài đặt hệ thống
 Name[zh_CN]=安装系统
 Icon[zh_CN]=calamares
 GenericName[zh_CN]=系统安装程序
diff --git a/ci/calamaresstyle b/ci/calamaresstyle
index bd715eee185d41edb185462f2c03357536117d33..42adc33cc38e35e8b96cec29515217f1dc34c966 100755
--- a/ci/calamaresstyle
+++ b/ci/calamaresstyle
@@ -22,7 +22,7 @@ export LANG LC_ALL LC_NUMERIC
 
 AS=$( which astyle )
 
-CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format-9.0.1 clang-format"
+CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format90 clang-format-9.0.1 clang-format"
 for _cf in $CF_VERSIONS
 do
 	# Not an error if this particular clang-format isn't found
diff --git a/lang/calamares_be.ts b/lang/calamares_be.ts
index 27c5422ae0a55fda0b8353676d17edbc1ca57c39..41502ddfcc4041f8ffbce859a4f25f28cbd11135 100644
--- a/lang/calamares_be.ts
+++ b/lang/calamares_be.ts
@@ -532,7 +532,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="305"/>
       <source>&lt;strong&gt;Manual partitioning&lt;/strong&gt;&lt;br/&gt;You can create or resize partitions yourself.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;strong&gt;Уласнаручная разметка&lt;/strong&gt;&lt;br/&gt;Вы можаце самастойна ствараць раздзелы або змяняць іх памеры.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="831"/>
@@ -621,17 +621,17 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>На гэтай прыладзе ўжо ўсталяваная аперацыйная сістэма, але табліца раздзелаў &lt;strong&gt;%1&lt;/strong&gt; не такая, як патрэбна &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Адзін з раздзелаў гэтай назапашвальнай прылады&lt;strong&gt;прымантаваны&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>Гэтая назапашвальная прылада ёсць часткай&lt;strong&gt;неактыўнага RAID&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
@@ -734,7 +734,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/locale/Config.cpp" line="334"/>
       <source>Set timezone to %1/%2.</source>
-      <translation type="unfinished"/>
+      <translation>Вызначыць часавы пояс %1/%2.</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/Config.cpp" line="372"/>
@@ -794,22 +794,22 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/welcome/Config.cpp" line="244"/>
       <source>&lt;h1&gt;Welcome to the Calamares setup program for %1&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Вітаем у праграме ўсталёўкі Calamares для %1&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/Config.cpp" line="245"/>
       <source>&lt;h1&gt;Welcome to %1 setup&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Вітаем у праграме ўсталёўкі %1&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/Config.cpp" line="250"/>
       <source>&lt;h1&gt;Welcome to the Calamares installer for %1&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Вітаем у праграме ўсталёўкі Calamares для %1&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/Config.cpp" line="251"/>
       <source>&lt;h1&gt;Welcome to the %1 installer&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Вітаем у праграме ўсталёўкі %1&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/users/Config.cpp" line="164"/>
@@ -819,7 +819,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/users/Config.cpp" line="170"/>
       <source>'%1' is not allowed as username.</source>
-      <translation type="unfinished"/>
+      <translation>'%1' немагчыма выкарыстаць як імя карыстальніка.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/Config.cpp" line="177"/>
@@ -844,7 +844,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/users/Config.cpp" line="237"/>
       <source>'%1' is not allowed as hostname.</source>
-      <translation type="unfinished"/>
+      <translation>'%1' немагчыма выкарыстаць як назву хоста.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/Config.cpp" line="243"/>
@@ -1817,14 +1817,16 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/localeq/Map.qml" line="243"/>
       <source>Timezone: %1</source>
-      <translation type="unfinished"/>
+      <translation>Часавы пояс: %1</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/Map.qml" line="264"/>
       <source>Please select your preferred location on the map so the installer can suggest the locale
             and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
             to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
-      <translation type="unfinished"/>
+      <translation>Калі ласка, абярыце неабходнае месца на мапе, каб праграма прапанавала мову
+             і налады часавога пояса.  Вы можаце дакладна наладзіць прапанаваныя параметры ніжэй. Месца на мапе можна абраць перацягваючы
+             яе пры дапамозе мышы. Для павелічэння і памяншэння выкарыстоўвайце кнопкі +/- і кола мышы.</translation>
     </message>
   </context>
   <context>
@@ -1944,7 +1946,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/oemid/OEMPage.ui" line="42"/>
       <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter a batch-identifier here. This will be stored in the target system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Увядзіце сюды масавы ідэнтыфікатар. Ён захавецца ў мэтавай сістэме.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Увядзіце сюды масавы ідэнтыфікатар. Ён захаваецца ў мэтавай сістэме.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/oemid/OEMPage.ui" line="52"/>
@@ -1970,29 +1972,29 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="37"/>
       <source>Select your preferred Region, or use the default one based on your current location.</source>
-      <translation type="unfinished"/>
+      <translation>Абярыце пераважны рэгіён альбо выкарыстоўвайце прадвызначаны ў залежнасці ад вашага бягучага месцазнаходжання.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="94"/>
       <location filename="../src/modules/localeq/Offline.qml" line="169"/>
       <location filename="../src/modules/localeq/Offline.qml" line="213"/>
       <source>Timezone: %1</source>
-      <translation type="unfinished"/>
+      <translation>Часавы пояс: %1</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="111"/>
       <source>Select your preferred Zone within your Region.</source>
-      <translation type="unfinished"/>
+      <translation>Абярыце часавы пояс для вашага рэгіёна.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="182"/>
       <source>Zones</source>
-      <translation type="unfinished"/>
+      <translation>Часавыя паясы</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="229"/>
       <source>You can fine-tune Language and Locale settings below.</source>
-      <translation type="unfinished"/>
+      <translation>Ніжэй вы можаце наладзіць мову і мясцовасць.</translation>
     </message>
   </context>
   <context>
@@ -2644,12 +2646,12 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
       <source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;To configure an EFI system partition, go back and select or create a FAT32 filesystem with the &lt;strong&gt;%3&lt;/strong&gt; flag enabled and mount point &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;You can continue without setting up an EFI system partition but your system may fail to start.</source>
-      <translation type="unfinished"/>
+      <translation>Для таго, каб пачаць %1, патрабуецца сістэмны раздзел EFI.&lt;br/&gt;&lt;br/&gt; Каб наладзіць сістэмны раздзел EFI, вярніцеся назад, абярыце альбо стварыце файлавую сістэму FAT32 са сцягам &lt;strong&gt;%3&lt;/strong&gt; і пунктам мантавання &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;Вы можаце працягнуць і без наладкі сістэмнага раздзела EFI, але ваша сістэма можа не загрузіцца.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
       <source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;A partition was configured with mount point &lt;strong&gt;%2&lt;/strong&gt; but its &lt;strong&gt;%3&lt;/strong&gt; flag is not set.&lt;br/&gt;To set the flag, go back and edit the partition.&lt;br/&gt;&lt;br/&gt;You can continue without setting the flag but your system may fail to start.</source>
-      <translation type="unfinished"/>
+      <translation>Для таго, каб пачаць %1, патрабуецца сістэмны раздзел EFI.&lt;br/&gt;&lt;br/&gt;Быў наладжаны раздзел з пунктам мантавання&lt;strong&gt;%2&lt;/strong&gt; але яго сцяг &lt;strong&gt;%3&lt;/strong&gt; не вызначаны.&lt;br/&gt;Каб вызначыць сцяг, вярніцеся назад і адрэдагуйце раздзел.&lt;br/&gt;&lt;br/&gt; Вы можаце працягнуць без наладкі раздзела, але ваша сістэма можа не загрузіцца.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/>
@@ -2868,7 +2870,7 @@ Output:
     <message>
       <location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
       <source>Directory not found</source>
-      <translation type="unfinished"/>
+      <translation>Каталог не знойдзены</translation>
     </message>
     <message>
       <location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
@@ -2903,7 +2905,8 @@ Output:
       <location filename="../src/modules/welcomeq/Recommended.qml" line="40"/>
       <source>&lt;p&gt;This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;
         Setup can continue, but some features might be disabled.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;p&gt;Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.&lt;br/&gt;
+        Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі.&lt;/p&gt;</translation>
     </message>
   </context>
   <context>
@@ -3014,13 +3017,15 @@ Output:
       <location filename="../src/modules/welcomeq/Requirements.qml" line="38"/>
       <source>&lt;p&gt;This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;
         Installation cannot continue.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;p&gt;Гэты камп’ютар не адпавядае мінімальным патрэбам для ўсталёўкі %1.&lt;p&gt;
+        Немагчыма працягнуць. &lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/Requirements.qml" line="40"/>
       <source>&lt;p&gt;This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;
         Setup can continue, but some features might be disabled.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;p&gt;Гэты камп’ютар адпавядае не ўсім патрэбам для ўсталёўкі %1.&lt;br/&gt;
+        Можна працягнуць усталёўку, але некаторыя магчымасці могуць быць недаступнымі.&lt;/p&gt;</translation>
     </message>
   </context>
   <context>
@@ -3038,7 +3043,7 @@ Output:
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/>
       <source>The file-system resize job has an invalid configuration and will not run.</source>
-      <translation>У задачы па змене памеру файлавай сістэмы хібная канфігурафыя, таму яна не будзе выконвацца.</translation>
+      <translation>У задачы па змене памеру файлавай сістэмы хібная канфігурацыя, таму яна не будзе выконвацца.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/>
@@ -3486,28 +3491,28 @@ Output:
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/>
       <source>KDE user feedback</source>
-      <translation type="unfinished"/>
+      <translation>Зваротная сувязь KDE</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/>
       <source>Configuring KDE user feedback.</source>
-      <translation type="unfinished"/>
+      <translation>Наладка зваротнай сувязі KDE.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/>
       <source>Error in KDE user feedback configuration.</source>
-      <translation type="unfinished"/>
+      <translation>Падчас наладкі зваротнай сувязі KDE адбылася памылка.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/>
       <source>Could not configure KDE user feedback correctly, script error %1.</source>
-      <translation type="unfinished"/>
+      <translation>Не атрымалася наладзіць зваротную сувязь KDE, памылка скрыпта %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/>
       <source>Could not configure KDE user feedback correctly, Calamares error %1.</source>
-      <translation type="unfinished"/>
+      <translation>Не атрымалася наладзіць зваротную сувязь KDE, памылка Calamares %1.</translation>
     </message>
   </context>
   <context>
@@ -3554,7 +3559,7 @@ Output:
     <message>
       <location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/>
       <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click here to send &lt;span style=" font-weight:600;"&gt;no information at all&lt;/span&gt; about your installation.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Пстрыкніце сюды, каб не адпраўляць &lt;span style=" font-weight:600;"&gt;ніякіх звестак&lt;/span&gt; пра вашу ўсталёўку.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/>
@@ -3564,22 +3569,22 @@ Output:
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/>
       <source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source>
-      <translation type="unfinished"/>
+      <translation>Адсочванне дапамагае праекту %1 бачыць, як часта ён усталёўваецца, на якім абсталяванні ён усталёўваецца, якія праграмы выкарыстоўваюцца. Каб убачыць, што будзе адпраўлена, пстрыкніце па значку ля кожнай вобласці.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/>
       <source>By selecting this you will send information about your installation and hardware. This information will only be sent &lt;b&gt;once&lt;/b&gt; after the installation finishes.</source>
-      <translation type="unfinished"/>
+      <translation>Абраўшы гэты пункт вы адправіце звесткі пра сваю канфігурацыю ўсталёўкі і ваша абсталяванне. Звесткі адправяцца &lt;b&gt;адзін раз&lt;/b&gt; пасля завяршэння ўсталёўкі.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/>
       <source>By selecting this you will periodically send information about your &lt;b&gt;machine&lt;/b&gt; installation, hardware and applications, to %1.</source>
-      <translation type="unfinished"/>
+      <translation>Абраўшы гэты пункт вы будзеце перыядычна адпраўляць звесткі пра усталёўку, абсталяванне і праграмы вашага &lt;b&gt;камп'ютара&lt;/b&gt; на %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/>
       <source>By selecting this you will regularly send information about your &lt;b&gt;user&lt;/b&gt; installation, hardware, applications and application usage patterns, to %1.</source>
-      <translation type="unfinished"/>
+      <translation>Абраўшы гэты пункт вы будзеце перыядычна адпраўляць звесткі пра усталёўку, абсталяванне, праграмы &lt;b&gt;карыстальніка&lt;/b&gt; і вобласці іх выкарыстання на %1.</translation>
     </message>
   </context>
   <context>
@@ -3625,7 +3630,7 @@ Output:
       <location filename="../src/calamares/VariantModel.cpp" line="232"/>
       <source>Key</source>
       <comment>Column header for key/value</comment>
-      <translation>Клавіша</translation>
+      <translation>Ключ</translation>
     </message>
     <message>
       <location filename="../src/calamares/VariantModel.cpp" line="236"/>
@@ -3783,7 +3788,7 @@ Output:
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/>
       <source>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Thanks to &lt;a href="https://calamares.io/team/"&gt;the Calamares team&lt;/a&gt; and the &lt;a href="https://www.transifex.com/calamares/calamares/"&gt;Calamares translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Аўтарскія правы 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Аўтарскія правы 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Шчырыя падзякі &lt;a href="https://calamares.io/team/"&gt;камандзе распрацоўкі Calamares&lt;/a&gt; і &lt;a href="https://www.transifex.com/calamares/calamares/"&gt;камандзе перакладчыкаў Calamares&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; распрацоўваецца пры падтрымцы&lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</translation>
     </message>
   </context>
   <context>
@@ -3818,7 +3823,17 @@ Output:
                         development is sponsored by &lt;br/&gt;
                         &lt;a href='http://www.blue-systems.com/'&gt;Blue Systems&lt;/a&gt; -
                         Liberating Software.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;
+                        &lt;strong&gt;%2&lt;br/&gt;
+                        for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
+                        Аўтарскія правы 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;
+                        Аўтарскія правы 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;
+                        Шчырыя падзякі &lt;a href='https://calamares.io/team/'&gt;камандзе распрацоўкі Calamares &lt;/a&gt; 
+                        і &lt;a href='https://www.transifex.com/calamares/calamares/'&gt; перакладчыкам Calamares&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;
+                        &lt;a href='https://calamares.io/'&gt;Calamares&lt;/a&gt; 
+                        распрацоўваецца пры падтрымцы &lt;br/&gt;
+                        &lt;a href='http://www.blue-systems.com/'&gt;Blue Systems&lt;/a&gt; - 
+                        Liberating Software.</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/about.qml" line="96"/>
@@ -3832,13 +3847,15 @@ Output:
       <location filename="../src/modules/localeq/i18n.qml" line="46"/>
       <source>&lt;h1&gt;Languages&lt;/h1&gt; &lt;/br&gt;
                     The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Мовы&lt;/h1&gt;&lt;/br&gt;
+                    Сістэмныя рэгіянальныя налады вызначаюць мову і кадаванне для пэўных элементаў інтэрфейсу загаднага радка. Бягучыя налады &lt;strong&gt;%1&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/i18n.qml" line="106"/>
       <source>&lt;h1&gt;Locales&lt;/h1&gt; &lt;/br&gt;
                     The system locale setting affects the numbers and dates format. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Рэгіянальныя налады&lt;/h1&gt;&lt;/br&gt;
+                    Сістэмныя рэгіянальныя налады вызначаюць фармат нумароў і датаў. Бягучыя налады &lt;strong&gt;%1&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/i18n.qml" line="158"/>
@@ -3866,7 +3883,7 @@ Output:
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
       <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
-      <translation type="unfinished"/>
+      <translation>Пстрыкніце на пераважную мадэль клавіятуры, каб абраць раскладку і варыянт, альбо выкарыстоўвайце прадвызначаную ў залежнасці ад выяўленага абсталявання.</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
@@ -3881,7 +3898,7 @@ Output:
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/>
       <source>Keyboard Variant</source>
-      <translation type="unfinished"/>
+      <translation>Варыянт клавіятуры</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/>
@@ -3894,7 +3911,7 @@ Output:
     <message>
       <location filename="../src/modules/localeq/localeq.qml" line="81"/>
       <source>Change</source>
-      <translation type="unfinished"/>
+      <translation>Змяніць</translation>
     </message>
   </context>
   <context>
@@ -3932,7 +3949,28 @@ Output:
             &lt;/ul&gt;
 
             &lt;p&gt;The vertical scrollbar is adjustable, current width set to 10.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h3&gt;%1&lt;/h3&gt;
+             &lt;p&gt;Гэта прыклад файла QML, у якім паказваюцца параметры RichText са зменным змесцівам.&lt;/p&gt;
+
+             &lt;p&gt;QML з RichText можа выкарыстоўваць пазнакі HTML. Зменнае змесціва карысна для сэнсарных экранаў.&lt;/p&gt;
+
+             &lt;p&gt;&lt;b&gt;Гэта паўтлусты тэкст&lt;/b&gt;&lt;/p&gt;
+             &lt;p&gt;&lt;i&gt;Гэта тэкст курсівам&lt;/i&gt;&lt;/p&gt;
+             &lt;p&gt;&lt;u&gt;Гэта падкрэслены&lt;/u&gt;&lt;/p&gt;
+             &lt;p&gt;&lt;center&gt;Гэта выраўнаваны па цэнтры тэкст.&lt;/center&gt;&lt;s&gt;
+             &lt;p&gt;&lt;s&gt;Гэта закрэслены тэкст&lt;/s&gt;&lt;/p&gt;
+
+             &lt;p&gt;Прыклад кода:
+             &lt;code&gt;ls -l /
+/home&lt;/code&gt;&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;Спісы:&lt;/b&gt;&lt;/p&gt;
+            &lt;ul&gt;
+                &lt;li&gt;Сістэмы з Intel CPU&lt;/li&gt;
+                &lt;li&gt;Сістэмы з AMD CPU&lt;/li&gt;
+            &lt;/ul&gt;
+
+            &lt;p&gt;Вертыкальная паласа пракруткі наладжваецца. Бягучая шырыня - 10.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/release_notes.qml" line="76"/>
@@ -3945,7 +3983,7 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="36"/>
       <source>Pick your user name and credentials to login and perform admin tasks</source>
-      <translation type="unfinished"/>
+      <translation>Абярыце свае імя карыстальніка і ўліковыя даныя для ўваходу і выканання задач адміністратара</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="52"/>
@@ -3965,12 +4003,12 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="87"/>
       <source>Login Name</source>
-      <translation type="unfinished"/>
+      <translation>Лагін</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="103"/>
       <source>If more than one person will use this computer, you can create multiple accounts after installation.</source>
-      <translation type="unfinished"/>
+      <translation>Калі камп’ютарам карыстаецца некалькі чалавек, то вы можаце стварыць для іх акаўнты пасля завяршэння ўсталёўкі.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="118"/>
@@ -3985,7 +4023,7 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="140"/>
       <source>This name will be used if you make the computer visible to others on a network.</source>
-      <translation type="unfinished"/>
+      <translation>Назва будзе выкарыстоўвацца для пазначэння камп’ютара ў сетцы.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="155"/>
@@ -4005,12 +4043,12 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="204"/>
       <source>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.</source>
-      <translation type="unfinished"/>
+      <translation>Увядзіце двойчы аднолькавы пароль. Гэта неабходна для таго, каб пазбегнуць памылак. Надзейны пароль павінен складацца з літар, лічбаў, знакаў пунктуацыі. Ён павінен змяшчаць прынамсі 8 знакаў, яго перыядычна трэба змяняць.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="216"/>
       <source>Validate passwords quality</source>
-      <translation type="unfinished"/>
+      <translation>Праверка якасці пароляў</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="226"/>
@@ -4020,12 +4058,12 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="234"/>
       <source>Log in automatically without asking for the password</source>
-      <translation type="unfinished"/>
+      <translation>Аўтаматычна ўваходзіць без уводу пароля</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="243"/>
       <source>Reuse user password as root password</source>
-      <translation type="unfinished"/>
+      <translation>Выкарыстоўваць пароль карыстальніка як пароль адміністратара</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="253"/>
@@ -4035,22 +4073,22 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="268"/>
       <source>Choose a root password to keep your account safe.</source>
-      <translation type="unfinished"/>
+      <translation>Абярыце пароль адміністратара для абароны вашага акаўнта.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="279"/>
       <source>Root Password</source>
-      <translation type="unfinished"/>
+      <translation>Пароль адміністратара</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="298"/>
       <source>Repeat Root Password</source>
-      <translation type="unfinished"/>
+      <translation>Паўтарыце пароль адміністратара</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="318"/>
       <source>Enter the same password twice, so that it can be checked for typing errors.</source>
-      <translation type="unfinished"/>
+      <translation>Увядзіце пароль двойчы, каб пазбегнуць памылак уводу.</translation>
     </message>
   </context>
   <context>
@@ -4059,7 +4097,8 @@ Output:
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
       <source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
             &lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h3&gt;Вітаем у %1, праграме ўсталёўкі&lt;quote&gt;%2&lt;/quote&gt; &lt;/h3&gt;
+            &lt;p&gt;Гэтая праграма дапаможа вам усталяваць %1 на ваш камп'ютар.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
diff --git a/lang/calamares_bg.ts b/lang/calamares_bg.ts
index b2a6b2b02a9df79c35c26d3dd814496b04761069..cacab19d02b21e21f640b3b63b2efe7f4fe5e72e 100644
--- a/lang/calamares_bg.ts
+++ b/lang/calamares_bg.ts
@@ -6,7 +6,7 @@
     <message>
       <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="61"/>
       <source>The &lt;strong&gt;boot environment&lt;/strong&gt; of this system.&lt;br&gt;&lt;br&gt;Older x86 systems only support &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Modern systems usually use &lt;strong&gt;EFI&lt;/strong&gt;, but may also show up as BIOS if started in compatibility mode.</source>
-      <translation>&lt;strong&gt;Среда за начално зареждане&lt;/strong&gt; на тази система.&lt;br&gt;&lt;br&gt;Старите x86 системи поддържат само &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Модерните системи обикновено използват &lt;strong&gt;EFI&lt;/strong&gt;, но може също така да използват BIOS, ако са стартирани в режим на съвместимост.</translation>
+      <translation>&lt;strong&gt;Средата за начално зареждане&lt;/strong&gt; на тази система.&lt;br&gt;&lt;br&gt;Старите x86 системи поддържат само &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Модерните системи обикновено използват &lt;strong&gt;EFI&lt;/strong&gt;, но може също така да използват BIOS, ако са стартирани в режим на съвместимост.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
@@ -132,7 +132,7 @@
     <message>
       <location filename="../src/libcalamares/JobExample.cpp" line="29"/>
       <source>Job failed (%1)</source>
-      <translation type="unfinished"/>
+      <translation>Задачата се провали (%1)</translation>
     </message>
     <message>
       <location filename="../src/libcalamares/JobExample.cpp" line="30"/>
@@ -153,7 +153,7 @@
     <message>
       <location filename="../src/libcalamares/JobExample.cpp" line="17"/>
       <source>Example job (%1)</source>
-      <translation type="unfinished"/>
+      <translation>Примерна задача (%1)</translation>
     </message>
   </context>
   <context>
@@ -199,7 +199,7 @@
     <message>
       <location filename="../src/libcalamares/PythonJob.cpp" line="229"/>
       <source>Main script file %1 for python job %2 is not readable.</source>
-      <translation>Файлът на главен скрипт %1 за python задача %2 не се чете.</translation>
+      <translation>Файла на главен скрипт %1 за python задача %2 не се чете.</translation>
     </message>
     <message>
       <location filename="../src/libcalamares/PythonJob.cpp" line="297"/>
@@ -3755,12 +3755,12 @@ Output:
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/>
       <source>&lt;h1&gt;Welcome to the Calamares installer for %1.&lt;/h1&gt;</source>
-      <translation>&lt;h1&gt;Добре дошли при инсталатора Calamares на %1.&lt;/h1&gt;</translation>
+      <translation>&lt;h1&gt;Добре дошли в инсталатора Calamares за %1.&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/>
       <source>&lt;h1&gt;Welcome to the %1 installer.&lt;/h1&gt;</source>
-      <translation>&lt;h1&gt;Добре дошли при инсталатора на %1.&lt;/h1&gt;</translation>
+      <translation>&lt;h1&gt;Добре дошли в инсталатора на %1.&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/>
diff --git a/lang/calamares_ca.ts b/lang/calamares_ca.ts
index 07df2503f05b54a402eec986735c13aabf244db2..49d14be33aeaaf80903fff57588ef7757a7cbc67 100644
--- a/lang/calamares_ca.ts
+++ b/lang/calamares_ca.ts
@@ -619,7 +619,7 @@ L'instal·lador es tancarà i tots els canvis es perdran.</translation>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Aquest dispositiu d'emmagatzematge ja té un sistema operatiu, però la taula de particions &lt;strong&gt;%1&lt;/strong&gt; és diferent de la necessària: &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt; </translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
diff --git a/lang/calamares_cs_CZ.ts b/lang/calamares_cs_CZ.ts
index 2ceef96192fb2f0d429e1a134461392ec8c849eb..7f63af78e56ac0951b9a45904abc2eb95f24b7a0 100644
--- a/lang/calamares_cs_CZ.ts
+++ b/lang/calamares_cs_CZ.ts
@@ -623,7 +623,7 @@ Instalační program bude ukončen a všechny změny ztraceny.</translation>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Na tomto úložném zařízení se už nachází operační systém, ale tabulka rozdělení &lt;strong&gt;%1&lt;/strong&gt; je jiná než potřebná &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
diff --git a/lang/calamares_da.ts b/lang/calamares_da.ts
index e2fc210854c11f66f5fea2b1df70431af80ba4ee..e5593c7d0bae111cdcdf860c19602db0a4f9d5ce 100644
--- a/lang/calamares_da.ts
+++ b/lang/calamares_da.ts
@@ -619,17 +619,17 @@ Installationsprogrammet vil stoppe og alle ændringer vil gå tabt.</translation
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Lagerenheden har allerede et styresystem på den men partitionstabellen &lt;strong&gt;%1&lt;/strong&gt; er ikke magen til den nødvendige &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Lagerenhden har en af sine partitioner &lt;strong&gt;monteret&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>Lagringsenheden er en del af en &lt;strong&gt;inaktiv RAID&lt;/strong&gt;-enhed.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/calamares_fi_FI.ts b/lang/calamares_fi_FI.ts
index e3ff2229ea3b84844ee3d6182592446c3cbb6920..1bf0d09ccd15b5fda918284f767fc9c4198cbd94 100644
--- a/lang/calamares_fi_FI.ts
+++ b/lang/calamares_fi_FI.ts
@@ -619,17 +619,17 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Tässä kiintolevyssä on jo käyttöjärjestelmä, mutta osiotaulukko &lt;strong&gt;%1&lt;/strong&gt; on erilainen kuin tarvittava &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Tähän kiintolevyyn on &lt;strong&gt;asennettu&lt;/strong&gt; yksi osioista.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>Tämä kiintolevy on osa &lt;strong&gt;passiivista RAID&lt;/strong&gt; -laitetta.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/calamares_fur.ts b/lang/calamares_fur.ts
index 7575c0e2a3949e3cecdb5cab357d0d260912e1a0..d2f3a81275bbced7da065e0b90df3eea4016cf9d 100644
--- a/lang/calamares_fur.ts
+++ b/lang/calamares_fur.ts
@@ -153,7 +153,7 @@
     <message>
       <location filename="../src/libcalamares/JobExample.cpp" line="17"/>
       <source>Example job (%1)</source>
-      <translation>Operazion di esempli (%1)</translation>
+      <translation>Lavôr di esempli (%1)</translation>
     </message>
   </context>
   <context>
@@ -189,7 +189,7 @@
     <message>
       <location filename="../src/libcalamares/PythonJob.cpp" line="222"/>
       <source>Working directory %1 for python job %2 is not readable.</source>
-      <translation>No si rive a lei la cartele di lavôr %1 pe ativitât di python %2.</translation>
+      <translation>No si rive a lei la cartele di lavôr %1 pe operazion di python %2.</translation>
     </message>
     <message>
       <location filename="../src/libcalamares/PythonJob.cpp" line="228"/>
@@ -199,7 +199,7 @@
     <message>
       <location filename="../src/libcalamares/PythonJob.cpp" line="229"/>
       <source>Main script file %1 for python job %2 is not readable.</source>
-      <translation>No si rive a lei il file di script principâl %1 pe ativitât di python %2.</translation>
+      <translation>No si rive a lei il file di script principâl %1 pe operazion di python %2.</translation>
     </message>
     <message>
       <location filename="../src/libcalamares/PythonJob.cpp" line="297"/>
@@ -2258,7 +2258,7 @@ Il program di instalazion al jessarà e dutis lis modifichis a laran pierdudis.<
     <message>
       <location filename="../src/modules/packagechooser/page_package.ui" line="57"/>
       <source>TextLabel</source>
-      <translation type="unfinished"/>
+      <translation>EticheteTest</translation>
     </message>
     <message>
       <location filename="../src/modules/packagechooser/page_package.ui" line="73"/>
@@ -2366,7 +2366,7 @@ Il program di instalazion al jessarà e dutis lis modifichis a laran pierdudis.<
       <location filename="../src/modules/users/page_usersetup.ui" line="349"/>
       <location filename="../src/modules/users/page_usersetup.ui" line="374"/>
       <source>&lt;small&gt;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.&lt;/small&gt;</source>
-      <translation>&lt;small&gt;Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di scriture. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars, e si scugnarà cambiâle a intervai regolârs.&lt;/small&gt;</translation>
+      <translation>&lt;small&gt;Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars, e si scugnarà cambiâle a intervai regolârs.&lt;/small&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/users/page_usersetup.ui" line="355"/>
@@ -2791,7 +2791,7 @@ Output:
     <message>
       <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="429"/>
       <source>Bad parameters for process job call.</source>
-      <translation>Parametris sbaliâts par processâ la clamade dal lavôr.</translation>
+      <translation>Parametris sbaliâts par processâ la clamade de operazion.</translation>
     </message>
     <message>
       <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="433"/>
@@ -2979,24 +2979,24 @@ Output:
     <message>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="207"/>
       <source>%1 system partition (%2)</source>
-      <translation type="unfinished"/>
+      <translation>%1 partizion di sisteme (%2)</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="218"/>
       <source>&lt;strong&gt;%4&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;strong&gt;%4&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;La partizion %1 e je masse piçule par %2. Selezione une partizion cun almancul %3 GiB di capacitât.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="240"/>
       <source>&lt;strong&gt;%2&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;strong&gt;%2&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;No si rive a cjatâ di nissune bande su cheste machine une partizion di sisteme EFI. Par plasê torne indaûr e dopre il partizionament manuâl par configurâ %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="251"/>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="267"/>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="292"/>
       <source>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 will be installed on %2.&lt;br/&gt;&lt;font color="red"&gt;Warning: &lt;/font&gt;all data on partition %2 will be lost.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Si instalarà %1 su %2.&lt;br/&gt;&lt;font color="red"&gt;Atenzion: &lt;/font&gt;ducj i dâts de partizion %2 a laran pierdûts.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="259"/>
@@ -3015,7 +3015,8 @@ Output:
       <location filename="../src/modules/welcomeq/Requirements.qml" line="38"/>
       <source>&lt;p&gt;This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;
         Installation cannot continue.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;p&gt;Chest computer nol sodisfe i recuisîts minims pe instalazion di %1.&lt;br/&gt;
+        La instalazion no pues continuâ.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/Requirements.qml" line="40"/>
@@ -3030,27 +3031,27 @@ Output:
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="46"/>
       <source>Resize Filesystem Job</source>
-      <translation type="unfinished"/>
+      <translation>Operazion di ridimensionament dal filesystem</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/>
       <source>Invalid configuration</source>
-      <translation type="unfinished"/>
+      <translation>Configurazion no valide</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/>
       <source>The file-system resize job has an invalid configuration and will not run.</source>
-      <translation type="unfinished"/>
+      <translation>La operazion di ridimensionament dal filesystem e à une configurazion no valide e no vignarà eseguide.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/>
       <source>KPMCore not Available</source>
-      <translation type="unfinished"/>
+      <translation>KPMCore no disponibil</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="176"/>
       <source>Calamares cannot start KPMCore for the file-system resize job.</source>
-      <translation type="unfinished"/>
+      <translation>Calamares nol rive a inviâ KPMCore pe operazion di ridimensionament dal filesystem.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="184"/>
@@ -3059,39 +3060,39 @@ Output:
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="213"/>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="231"/>
       <source>Resize Failed</source>
-      <translation type="unfinished"/>
+      <translation>Ridimensionament falît</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/>
       <source>The filesystem %1 could not be found in this system, and cannot be resized.</source>
-      <translation type="unfinished"/>
+      <translation>Nol è stât pussibil cjatâ in chest sisteme il filesystem %1 e duncje nol pues jessi ridimensionât.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/>
       <source>The device %1 could not be found in this system, and cannot be resized.</source>
-      <translation type="unfinished"/>
+      <translation>Nol è stât pussibil cjatâ in chest sisteme il dispositîf %1 e duncje nol pues jessi ridimensionât.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/>
       <source>The filesystem %1 cannot be resized.</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil ridimensionâ il filesystem %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="196"/>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="207"/>
       <source>The device %1 cannot be resized.</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil ridimensionâ il dispositîf %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="214"/>
       <source>The filesystem %1 must be resized, but cannot.</source>
-      <translation type="unfinished"/>
+      <translation>Si scugne ridimensionâ il filesystem %1, ma no si rive.</translation>
     </message>
     <message>
       <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="215"/>
       <source>The device %1 must be resized, but cannot</source>
-      <translation type="unfinished"/>
+      <translation>Si scugne ridimensionâ il filesystem %1, ma no si rive.</translation>
     </message>
   </context>
   <context>
@@ -3099,22 +3100,22 @@ Output:
     <message>
       <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="40"/>
       <source>Resize partition %1.</source>
-      <translation type="unfinished"/>
+      <translation>Ridimensionâ partizion %1</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="47"/>
       <source>Resize &lt;strong&gt;%2MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; to &lt;strong&gt;%3MiB&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Ridimensionâ la partizion &lt;strong&gt;%1&lt;/strong&gt; di &lt;strong&gt;%2MiB&lt;/strong&gt; a &lt;strong&gt;%3MiB&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="58"/>
       <source>Resizing %2MiB partition %1 to %3MiB.</source>
-      <translation type="unfinished"/>
+      <translation>Ridimensionâ la partizion %1 di %2MiB a %3MiB.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="77"/>
       <source>The installer failed to resize partition %1 on disk '%2'.</source>
-      <translation type="unfinished"/>
+      <translation>Il program di instalazion nol è rivât a ridimensionâ la partizion %1 sul disc '%2'.</translation>
     </message>
   </context>
   <context>
@@ -3131,17 +3132,17 @@ Output:
       <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="27"/>
       <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="45"/>
       <source>Resize volume group named %1 from %2 to %3.</source>
-      <translation type="unfinished"/>
+      <translation>Ridimensionâ il grup di volums clamât %1 di %2 a %3.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="36"/>
       <source>Resize volume group named &lt;strong&gt;%1&lt;/strong&gt; from &lt;strong&gt;%2&lt;/strong&gt; to &lt;strong&gt;%3&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Ridimensionâ il grup di volums clamât &lt;strong&gt;%1&lt;/strong&gt; di &lt;strong&gt;%2&lt;/strong&gt; a &lt;strong&gt;%3&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="60"/>
       <source>The installer failed to resize a volume group named '%1'.</source>
-      <translation type="unfinished"/>
+      <translation>Il program di instalazion nol è rivât a ridimensionâ un grup di volums clamât '%1'.</translation>
     </message>
   </context>
   <context>
@@ -3149,12 +3150,12 @@ Output:
     <message>
       <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="133"/>
       <source>For best results, please ensure that this computer:</source>
-      <translation type="unfinished"/>
+      <translation>Par otignî i miôrs risultâts, siguriti che chest computer:</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="134"/>
       <source>System requirements</source>
-      <translation type="unfinished"/>
+      <translation>Recuisîts di sisteme</translation>
     </message>
   </context>
   <context>
@@ -3190,12 +3191,12 @@ Output:
     <message>
       <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/>
       <source>Scanning storage devices...</source>
-      <translation type="unfinished"/>
+      <translation>Scandai dai dispositîfs di memorie...</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/>
       <source>Partitioning</source>
-      <translation type="unfinished"/>
+      <translation>Partizionament</translation>
     </message>
   </context>
   <context>
@@ -3203,29 +3204,29 @@ Output:
     <message>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="37"/>
       <source>Set hostname %1</source>
-      <translation type="unfinished"/>
+      <translation>Stabilî il non-host a %1</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="44"/>
       <source>Set hostname &lt;strong&gt;%1&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Stabilî il non-host a &lt;strong&gt;%1&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="51"/>
       <source>Setting hostname %1.</source>
-      <translation type="unfinished"/>
+      <translation>Daûr a stabilî il non-host a %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="122"/>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="129"/>
       <source>Internal Error</source>
-      <translation type="unfinished"/>
+      <translation>Erôr interni</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="137"/>
       <location filename="../src/modules/users/SetHostNameJob.cpp" line="146"/>
       <source>Cannot write hostname to target system</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil scrivi il non-host sul sisteme di destinazion</translation>
     </message>
   </context>
   <context>
@@ -3233,29 +3234,29 @@ Output:
     <message>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="53"/>
       <source>Set keyboard model to %1, layout to %2-%3</source>
-      <translation type="unfinished"/>
+      <translation>Stabilî il model di tastiere a %1, disposizion a %2-%3</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="356"/>
       <source>Failed to write keyboard configuration for the virtual console.</source>
-      <translation type="unfinished"/>
+      <translation>No si è rivâts a scrivi la configurazion de tastiere pe console virtuâl.</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="357"/>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="361"/>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/>
       <source>Failed to write to %1</source>
-      <translation type="unfinished"/>
+      <translation>No si è rivâts a scrivi su %1</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="360"/>
       <source>Failed to write keyboard configuration for X11.</source>
-      <translation type="unfinished"/>
+      <translation>No si è rivâts a scrivi la configurazion de tastiere par X11.</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="367"/>
       <source>Failed to write keyboard configuration to existing /etc/default directory.</source>
-      <translation type="unfinished"/>
+      <translation>No si è rivâts a scrivi la configurazion de tastiere te cartele esistente /etc/default .</translation>
     </message>
   </context>
   <context>
@@ -3346,42 +3347,42 @@ Output:
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="40"/>
       <source>Set password for user %1</source>
-      <translation type="unfinished"/>
+      <translation>Stabilî la password pal utent %1</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="47"/>
       <source>Setting password for user %1.</source>
-      <translation type="unfinished"/>
+      <translation>Daûr a stabilî la password pal utent %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="81"/>
       <source>Bad destination system path.</source>
-      <translation type="unfinished"/>
+      <translation>Percors di sisteme de destinazion sbaliât.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="82"/>
       <source>rootMountPoint is %1</source>
-      <translation type="unfinished"/>
+      <translation>Il rootMountPoint (pont di montaç de lidrîs) al è %1</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="88"/>
       <source>Cannot disable root account.</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil disabilitâ l'account di root.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="89"/>
       <source>passwd terminated with error code %1.</source>
-      <translation type="unfinished"/>
+      <translation>passwd terminât cun codiç di erôr %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="97"/>
       <source>Cannot set password for user %1.</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil stabilî la password pal utent %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/users/SetPasswordJob.cpp" line="98"/>
       <source>usermod terminated with error code %1.</source>
-      <translation type="unfinished"/>
+      <translation>usermod terminât cun codiç di erôr %1.</translation>
     </message>
   </context>
   <context>
@@ -3389,37 +3390,37 @@ Output:
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="34"/>
       <source>Set timezone to %1/%2</source>
-      <translation type="unfinished"/>
+      <translation>Meti il fûs orari su %1/%2</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="62"/>
       <source>Cannot access selected timezone path.</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil acedi al percors dal fûs orari selezionât.</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="63"/>
       <source>Bad path: %1</source>
-      <translation type="unfinished"/>
+      <translation>Percors no valit: %1</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="71"/>
       <source>Cannot set timezone.</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil stabilî il fûs orari.</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="72"/>
       <source>Link creation failed, target: %1; link name: %2</source>
-      <translation type="unfinished"/>
+      <translation>Creazion dal colegament falide, destinazion: %1; non colegament: %2</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="77"/>
       <source>Cannot set timezone,</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil stabilî il fûs orari,</translation>
     </message>
     <message>
       <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="78"/>
       <source>Cannot open /etc/timezone for writing</source>
-      <translation type="unfinished"/>
+      <translation>Impussibil vierzi /etc/timezone pe scriture</translation>
     </message>
   </context>
   <context>
@@ -3427,7 +3428,7 @@ Output:
     <message>
       <location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="41"/>
       <source>Shell Processes Job</source>
-      <translation type="unfinished"/>
+      <translation>Operazion dai procès de shell</translation>
     </message>
   </context>
   <context>
@@ -3436,7 +3437,7 @@ Output:
       <location filename="../src/qml/calamares/slideshow/SlideCounter.qml" line="27"/>
       <source>%L1 / %L2</source>
       <extracomment>slide counter, %1 of %2 (numeric)</extracomment>
-      <translation type="unfinished"/>
+      <translation>%L1 / %L2</translation>
     </message>
   </context>
   <context>
@@ -3444,12 +3445,12 @@ Output:
     <message>
       <location filename="../src/modules/summary/SummaryPage.cpp" line="47"/>
       <source>This is an overview of what will happen once you start the setup procedure.</source>
-      <translation type="unfinished"/>
+      <translation>Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di configurazion.</translation>
     </message>
     <message>
       <location filename="../src/modules/summary/SummaryPage.cpp" line="49"/>
       <source>This is an overview of what will happen once you start the install procedure.</source>
-      <translation type="unfinished"/>
+      <translation>Cheste e je une panoramiche di ce che al sucedarà une volte inviade la procedure di instalazion.</translation>
     </message>
   </context>
   <context>
@@ -3457,7 +3458,7 @@ Output:
     <message>
       <location filename="../src/modules/summary/SummaryViewStep.cpp" line="36"/>
       <source>Summary</source>
-      <translation type="unfinished"/>
+      <translation>Sintesi</translation>
     </message>
   </context>
   <context>
@@ -3465,22 +3466,22 @@ Output:
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="37"/>
       <source>Installation feedback</source>
-      <translation type="unfinished"/>
+      <translation>Opinion su la instalazion</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="43"/>
       <source>Sending installation feedback.</source>
-      <translation type="unfinished"/>
+      <translation>Daûr a inviâ la opinion su la instalazion.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="60"/>
       <source>Internal error in install-tracking.</source>
-      <translation type="unfinished"/>
+      <translation>Erôr interni in install-tracking.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="61"/>
       <source>HTTP request timed out.</source>
-      <translation type="unfinished"/>
+      <translation>Richieste HTTP scjadude.</translation>
     </message>
   </context>
   <context>
@@ -3488,28 +3489,28 @@ Output:
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/>
       <source>KDE user feedback</source>
-      <translation type="unfinished"/>
+      <translation>Opinion dal utent di KDE</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/>
       <source>Configuring KDE user feedback.</source>
-      <translation type="unfinished"/>
+      <translation>Daûr a configurâ la opinione dal utent di KDE.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/>
       <source>Error in KDE user feedback configuration.</source>
-      <translation type="unfinished"/>
+      <translation>Erôr te configurazion de opinion dal utent di KDE.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/>
       <source>Could not configure KDE user feedback correctly, script error %1.</source>
-      <translation type="unfinished"/>
+      <translation>Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di script %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/>
       <source>Could not configure KDE user feedback correctly, Calamares error %1.</source>
-      <translation type="unfinished"/>
+      <translation>Nol è stât pussibil configurâ in maniere juste la opinion dal utent di KDE, erôr di Calamares %1.</translation>
     </message>
   </context>
   <context>
@@ -3517,28 +3518,28 @@ Output:
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="71"/>
       <source>Machine feedback</source>
-      <translation type="unfinished"/>
+      <translation>Opinion su la machine</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="77"/>
       <source>Configuring machine feedback.</source>
-      <translation type="unfinished"/>
+      <translation>Daûr a configurâ la opinion su la machine.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="100"/>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="106"/>
       <source>Error in machine feedback configuration.</source>
-      <translation type="unfinished"/>
+      <translation>Erôr inte configurazion de opinion su la machine.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="101"/>
       <source>Could not configure machine feedback correctly, script error %1.</source>
-      <translation type="unfinished"/>
+      <translation>Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di script %1.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingJobs.cpp" line="107"/>
       <source>Could not configure machine feedback correctly, Calamares error %1.</source>
-      <translation type="unfinished"/>
+      <translation>Nol è stât pussibil configurâ in maniere juste la opinion su la machine, erôr di Calamares %1.</translation>
     </message>
   </context>
   <context>
@@ -3551,37 +3552,37 @@ Output:
     <message>
       <location filename="../src/modules/tracking/page_trackingstep.ui" line="28"/>
       <source>Placeholder</source>
-      <translation type="unfinished"/>
+      <translation>Segnepuest</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/>
       <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click here to send &lt;span style=" font-weight:600;"&gt;no information at all&lt;/span&gt; about your installation.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fâs clic achì par &lt;span style=" font-weight:600;"&gt;no inviâ nissune informazion&lt;/span&gt; su la tô instalazion.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/>
       <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href="placeholder"&gt;&lt;span style=" text-decoration: underline; color:#2980b9;"&gt;Click here for more information about user feedback&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href="placeholder"&gt;&lt;span style=" text-decoration: underline; color:#2980b9;"&gt;Fâs clic achì par vê plui informazions su lis opinions dai utents&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/>
       <source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source>
-      <translation type="unfinished"/>
+      <translation>Tignî i indizis al jude %1 a viodi trop dispès che al ven instalât, in cuâl hardware e ce aplicazions che a vegnin dopradis. Par viodi ce che al ven inviât, fâs clic su pe icone di jutori dongje a ogni aree.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/>
       <source>By selecting this you will send information about your installation and hardware. This information will only be sent &lt;b&gt;once&lt;/b&gt; after the installation finishes.</source>
-      <translation type="unfinished"/>
+      <translation>Selezionant chest tu inviarâs informazions sul to hardware e su la tô instalazion. Cheste informazion e vignarà mandade dome &lt;b&gt;une volte&lt;/b&gt;, dopo finide la instalazion.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/>
       <source>By selecting this you will periodically send information about your &lt;b&gt;machine&lt;/b&gt; installation, hardware and applications, to %1.</source>
-      <translation type="unfinished"/>
+      <translation>Selezionant chest tu mandarâs informazions in mût periodic a %1 su la instalazion, l'hardware e lis aplicazions de tô &lt;b&gt;machine&lt;/b&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/>
       <source>By selecting this you will regularly send information about your &lt;b&gt;user&lt;/b&gt; installation, hardware, applications and application usage patterns, to %1.</source>
-      <translation type="unfinished"/>
+      <translation>Selezionant chest tu mandarâs cun regolaritât informazions a %1 su la instalazion, l'hardware, lis aplicazions e modei di ûs de aplicazion dal tô &lt;b&gt;utent&lt;/b&gt;.</translation>
     </message>
   </context>
   <context>
@@ -3589,7 +3590,7 @@ Output:
     <message>
       <location filename="../src/modules/tracking/TrackingViewStep.cpp" line="49"/>
       <source>Feedback</source>
-      <translation type="unfinished"/>
+      <translation>Opinion</translation>
     </message>
   </context>
   <context>
@@ -3597,12 +3598,12 @@ Output:
     <message>
       <location filename="../src/modules/users/UsersPage.cpp" line="156"/>
       <source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after setup.&lt;/small&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;small&gt;Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la configurazion.&lt;/small&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/users/UsersPage.cpp" line="162"/>
       <source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after installation.&lt;/small&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;small&gt;Se chest computer al vignarà doprât di plui di une persone, si pues creâ plui accounts dopo vê completade la instalazion.&lt;/small&gt;</translation>
     </message>
   </context>
   <context>
@@ -3610,7 +3611,7 @@ Output:
     <message>
       <location filename="../src/modules/usersq/UsersQmlViewStep.cpp" line="39"/>
       <source>Users</source>
-      <translation type="unfinished"/>
+      <translation>Utents</translation>
     </message>
   </context>
   <context>
@@ -3618,7 +3619,7 @@ Output:
     <message>
       <location filename="../src/modules/users/UsersViewStep.cpp" line="48"/>
       <source>Users</source>
-      <translation type="unfinished"/>
+      <translation>Utents</translation>
     </message>
   </context>
   <context>
@@ -3627,13 +3628,13 @@ Output:
       <location filename="../src/calamares/VariantModel.cpp" line="232"/>
       <source>Key</source>
       <comment>Column header for key/value</comment>
-      <translation type="unfinished"/>
+      <translation>Clâf</translation>
     </message>
     <message>
       <location filename="../src/calamares/VariantModel.cpp" line="236"/>
       <source>Value</source>
       <comment>Column header for key/value</comment>
-      <translation type="unfinished"/>
+      <translation>Valôr</translation>
     </message>
   </context>
   <context>
@@ -3646,22 +3647,22 @@ Output:
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="24"/>
       <source>List of Physical Volumes</source>
-      <translation type="unfinished"/>
+      <translation>Liste di volums fisics</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="34"/>
       <source>Volume Group Name:</source>
-      <translation type="unfinished"/>
+      <translation>Non dal grup di volums:</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="47"/>
       <source>Volume Group Type:</source>
-      <translation type="unfinished"/>
+      <translation>Gjenar dal grup di volums:</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="60"/>
       <source>Physical Extent Size:</source>
-      <translation type="unfinished"/>
+      <translation>Dimension de estension fisiche:</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="70"/>
@@ -3671,22 +3672,22 @@ Output:
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="86"/>
       <source>Total Size:</source>
-      <translation type="unfinished"/>
+      <translation>Dimension totâl:</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="106"/>
       <source>Used Size:</source>
-      <translation type="unfinished"/>
+      <translation>Dimension doprade:</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="126"/>
       <source>Total Sectors:</source>
-      <translation type="unfinished"/>
+      <translation>Setôrs totâi:</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="146"/>
       <source>Quantity of LVs:</source>
-      <translation type="unfinished"/>
+      <translation>Cuantitât di VLs:</translation>
     </message>
   </context>
   <context>
@@ -3700,92 +3701,92 @@ Output:
       <location filename="../src/modules/welcome/WelcomePage.ui" line="79"/>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="98"/>
       <source>Select application and system language</source>
-      <translation type="unfinished"/>
+      <translation>Selezionâ lenghe di sisteme e di aplicazions</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
       <source>&amp;About</source>
-      <translation type="unfinished"/>
+      <translation>&amp;Informazions</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="150"/>
       <source>Open donations website</source>
-      <translation type="unfinished"/>
+      <translation>Vierç il sît web pes donazions</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="153"/>
       <source>&amp;Donate</source>
-      <translation type="unfinished"/>
+      <translation>&amp;Done</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="163"/>
       <source>Open help and support website</source>
-      <translation type="unfinished"/>
+      <translation>Vierç il sît web pal jutori e pal supuart</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="166"/>
       <source>&amp;Support</source>
-      <translation type="unfinished"/>
+      <translation>&amp;Supuart</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="176"/>
       <source>Open issues and bug-tracking website</source>
-      <translation type="unfinished"/>
+      <translation>Vierç il sît web sui problemis e lis segnalazions/indizis sui erôrs</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
       <source>&amp;Known issues</source>
-      <translation type="unfinished"/>
+      <translation>&amp;Problemis cognossûts</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="189"/>
       <source>Open release notes website</source>
-      <translation type="unfinished"/>
+      <translation>Vierç il sît web des notis di publicazion</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.ui" line="192"/>
       <source>&amp;Release notes</source>
-      <translation type="unfinished"/>
+      <translation>&amp;Notis di publicazion</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="216"/>
       <source>&lt;h1&gt;Welcome to the Calamares setup program for %1.&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Benvignûts sul program di configurazion Calamares par %1.&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="217"/>
       <source>&lt;h1&gt;Welcome to %1 setup.&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Benvignûts te configurazion di %1.&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/>
       <source>&lt;h1&gt;Welcome to the Calamares installer for %1.&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Benvignûts sul program di instalazion Calamares par %1.&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/>
       <source>&lt;h1&gt;Welcome to the %1 installer.&lt;/h1&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Benvignûts sul program di instalazion di %1.&lt;/h1&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/>
       <source>%1 support</source>
-      <translation type="unfinished"/>
+      <translation>Supuart di %1</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/>
       <source>About %1 setup</source>
-      <translation type="unfinished"/>
+      <translation>Informazions su la configurazion di %1</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/>
       <source>About %1 installer</source>
-      <translation type="unfinished"/>
+      <translation>Informazion su la instalazion di %1</translation>
     </message>
     <message>
       <location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/>
       <source>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Thanks to &lt;a href="https://calamares.io/team/"&gt;the Calamares team&lt;/a&gt; and the &lt;a href="https://www.transifex.com/calamares/calamares/"&gt;Calamares translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;par %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Gracie a &lt;a href="https://calamares.io/team/"&gt;il grup di Calamares&lt;/a&gt; e al &lt;a href="https://www.transifex.com/calamares/calamares/"&gt;grup di tradutôrs di Calamares&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Il disvilup di &lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; al è patrocinât di &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</translation>
     </message>
   </context>
   <context>
@@ -3793,7 +3794,7 @@ Output:
     <message>
       <location filename="../src/modules/welcomeq/WelcomeQmlViewStep.cpp" line="41"/>
       <source>Welcome</source>
-      <translation type="unfinished"/>
+      <translation>Benvignûts</translation>
     </message>
   </context>
   <context>
@@ -3801,7 +3802,7 @@ Output:
     <message>
       <location filename="../src/modules/welcome/WelcomeViewStep.cpp" line="48"/>
       <source>Welcome</source>
-      <translation type="unfinished"/>
+      <translation>Benvignûts</translation>
     </message>
   </context>
   <context>
@@ -3820,12 +3821,23 @@ Output:
                         development is sponsored by &lt;br/&gt;
                         &lt;a href='http://www.blue-systems.com/'&gt;Blue Systems&lt;/a&gt; -
                         Liberating Software.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;
+                        &lt;strong&gt;%2&lt;br/&gt;
+                        par %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
+                        Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;
+                        Copyright 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;
+                        Gracie a &lt;a href='https://calamares.io/team/'&gt;il grup di Calamares&lt;/a&gt;
+                        e al &lt;a href='https://www.transifex.com/calamares/calamares/'&gt;grup di tradutôrs
+                        di Calamares&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;
+                        Il disvilup di
+                        &lt;a href='https://calamares.io/'&gt;Calamares&lt;/a&gt; al è patrocinât di &lt;br/&gt;
+                        &lt;a href='http://www.blue-systems.com/'&gt;Blue Systems&lt;/a&gt; -
+                        Liberating Software.</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/about.qml" line="96"/>
       <source>Back</source>
-      <translation type="unfinished"/>
+      <translation>Indaûr</translation>
     </message>
   </context>
   <context>
@@ -3834,18 +3846,20 @@ Output:
       <location filename="../src/modules/localeq/i18n.qml" line="46"/>
       <source>&lt;h1&gt;Languages&lt;/h1&gt; &lt;/br&gt;
                     The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Lenghis&lt;/h1&gt; &lt;/br&gt;
+                    La impostazion di localizazion dal sisteme e influence la lenghe e la cumbinazion di caratars par cualchi element de interface utent a rie di comant. La impostazion atuâl e je &lt;strong&gt;%1&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/i18n.qml" line="106"/>
       <source>&lt;h1&gt;Locales&lt;/h1&gt; &lt;/br&gt;
                     The system locale setting affects the numbers and dates format. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h1&gt;Localitâts&lt;/h1&gt; &lt;/br&gt;
+                    La impostazions di localizazion dal sisteme e influence il formât des datis e dai numars. La impostazion atuâl e je &lt;strong&gt;%1&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/i18n.qml" line="158"/>
       <source>Back</source>
-      <translation type="unfinished"/>
+      <translation>Indaûr</translation>
     </message>
   </context>
   <context>
@@ -3853,42 +3867,42 @@ Output:
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="45"/>
       <source>Keyboard Model</source>
-      <translation type="unfinished"/>
+      <translation>Model di tastiere</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="377"/>
       <source>Layouts</source>
-      <translation type="unfinished"/>
+      <translation>Disposizions</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="148"/>
       <source>Keyboard Layout</source>
-      <translation type="unfinished"/>
+      <translation>Disposizion di tastiere</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
       <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
-      <translation type="unfinished"/>
+      <translation>Fâs clic sul model di tastiere preferît par selezionâ la disposizion e la variante, o dopre chel predefinît basât sul hardware rilevât.</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
       <source>Models</source>
-      <translation type="unfinished"/>
+      <translation>Modei</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="260"/>
       <source>Variants</source>
-      <translation type="unfinished"/>
+      <translation>Variantis</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/>
       <source>Keyboard Variant</source>
-      <translation type="unfinished"/>
+      <translation>Variante di tastiere</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/>
       <source>Test your keyboard</source>
-      <translation type="unfinished"/>
+      <translation>Prove la tastiere</translation>
     </message>
   </context>
   <context>
@@ -3896,7 +3910,7 @@ Output:
     <message>
       <location filename="../src/modules/localeq/localeq.qml" line="81"/>
       <source>Change</source>
-      <translation type="unfinished"/>
+      <translation>Cambie</translation>
     </message>
   </context>
   <context>
@@ -3905,7 +3919,8 @@ Output:
       <location filename="../src/modules/notesqml/notesqml.qml" line="50"/>
       <source>&lt;h3&gt;%1&lt;/h3&gt;
             &lt;p&gt;These are example release notes.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h3&gt;%1&lt;/h3&gt;
+            &lt;p&gt;Chescj a son esemplis di notis di publicazion.&lt;/p&gt;</translation>
     </message>
   </context>
   <context>
@@ -3933,12 +3948,32 @@ Output:
             &lt;/ul&gt;
 
             &lt;p&gt;The vertical scrollbar is adjustable, current width set to 10.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h3&gt;%1&lt;/h3&gt;
+            &lt;p&gt;Chest esempli di file QML, al mostre lis opzions in test formatât cun contignût che si pues dai une passade.&lt;/p&gt;
+
+            &lt;p&gt;Il QML cun test formatât al pues doprâ etichetis HTML, il contignût che si pues scori al è util pai touchscreens.&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;Chest al è test in neret&lt;/b&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;i&gt;Chest al è test corsîf&lt;/i&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;u&gt;Chest al è test sotlineât&lt;/u&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;center&gt;Chest test al vignarà centrât.&lt;/center&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;s&gt;Chest al è stricât&lt;/s&gt;&lt;/p&gt;
+
+            &lt;p&gt;Esempli di codiç:
+            &lt;code&gt;ls -l /home&lt;/code&gt;&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;Listis:&lt;/b&gt;&lt;/p&gt;
+            &lt;ul&gt;
+                &lt;li&gt;Sistemis a CPU Intel&lt;/li&gt;
+                &lt;li&gt;Sistemis a CPU AMD&lt;/li&gt;
+            &lt;/ul&gt;
+
+            &lt;p&gt;La sbare di scoriment verticâl si pues justâ, cumò la largjece e je metude a 10.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/release_notes.qml" line="76"/>
       <source>Back</source>
-      <translation type="unfinished"/>
+      <translation>Indaûr</translation>
     </message>
   </context>
   <context>
@@ -3946,7 +3981,7 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="36"/>
       <source>Pick your user name and credentials to login and perform admin tasks</source>
-      <translation type="unfinished"/>
+      <translation>Sielç e dopre il to non utent e lis credenziâls par jentrâ e eseguî ativitâts di aministradôr</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="52"/>
@@ -3966,12 +4001,12 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="87"/>
       <source>Login Name</source>
-      <translation type="unfinished"/>
+      <translation>Non di acès</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="103"/>
       <source>If more than one person will use this computer, you can create multiple accounts after installation.</source>
-      <translation type="unfinished"/>
+      <translation>Se chest computer al vignarà doprât di plui personis, tu puedis creâ plui account dopo vê completade la instalazion.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="118"/>
@@ -3986,7 +4021,7 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="140"/>
       <source>This name will be used if you make the computer visible to others on a network.</source>
-      <translation type="unfinished"/>
+      <translation>Si doprarà chest non se tu rindis visibil a altris chest computer suntune rêt.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="155"/>
@@ -4006,12 +4041,12 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="204"/>
       <source>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.</source>
-      <translation type="unfinished"/>
+      <translation>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure. Une buine password e contignarà un miscliç di letaris, numars e puntuazions, e sarà lungje almancul vot caratars e si scugnarà cambiâle a intervai regolârs.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="216"/>
       <source>Validate passwords quality</source>
-      <translation type="unfinished"/>
+      <translation>Convalidâ la cualitât des passwords</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="226"/>
@@ -4021,12 +4056,12 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="234"/>
       <source>Log in automatically without asking for the password</source>
-      <translation type="unfinished"/>
+      <translation>Jentre in automatic cence domandâ la password</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="243"/>
       <source>Reuse user password as root password</source>
-      <translation type="unfinished"/>
+      <translation>Torne dopre la password dal utent pe password di root</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="253"/>
@@ -4036,22 +4071,22 @@ Output:
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="268"/>
       <source>Choose a root password to keep your account safe.</source>
-      <translation type="unfinished"/>
+      <translation>Sielç une password di root par tignî il to account al sigûr.</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="279"/>
       <source>Root Password</source>
-      <translation type="unfinished"/>
+      <translation>Password di root</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="298"/>
       <source>Repeat Root Password</source>
-      <translation type="unfinished"/>
+      <translation>Ripeti password di root</translation>
     </message>
     <message>
       <location filename="../src/modules/usersq/usersq.qml" line="318"/>
       <source>Enter the same password twice, so that it can be checked for typing errors.</source>
-      <translation type="unfinished"/>
+      <translation>Inserìs la stesse password dôs voltis, in mût di evitâ erôrs di batidure.</translation>
     </message>
   </context>
   <context>
@@ -4060,32 +4095,33 @@ Output:
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
       <source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
             &lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
-      <translation type="unfinished"/>
+      <translation>&lt;h3&gt;Benvignûts sul program di instalazion &lt;quote&gt;%2&lt;/quote&gt; par %1&lt;/h3&gt;
+            &lt;p&gt;Chest program al fasarà cualchi domande e al configurarà %1 sul to computer.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
       <source>About</source>
-      <translation type="unfinished"/>
+      <translation>Informazions</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/>
       <source>Support</source>
-      <translation type="unfinished"/>
+      <translation>Supuart</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/>
       <source>Known issues</source>
-      <translation type="unfinished"/>
+      <translation>Problemis cognossûts</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/>
       <source>Release notes</source>
-      <translation type="unfinished"/>
+      <translation>Notis di publicazion</translation>
     </message>
     <message>
       <location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/>
       <source>Donate</source>
-      <translation type="unfinished"/>
+      <translation>Done</translation>
     </message>
   </context>
 </TS>
diff --git a/lang/calamares_he.ts b/lang/calamares_he.ts
index 6c7ea88d80738c2b9016d8a6cb579d0e4456214f..e87f6bb19ebf8b092951ee6ad3511465dc3ed596 100644
--- a/lang/calamares_he.ts
+++ b/lang/calamares_he.ts
@@ -11,12 +11,12 @@
     <message>
       <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
       <source>This system was started with an &lt;strong&gt;EFI&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from an EFI environment, this installer must deploy a boot loader application, like &lt;strong&gt;GRUB&lt;/strong&gt; or &lt;strong&gt;systemd-boot&lt;/strong&gt; on an &lt;strong&gt;EFI System Partition&lt;/strong&gt;. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source>
-      <translation>מערכת זו הופעלה בתצורת אתחול &lt;strong&gt;EFI&lt;/strong&gt;.&lt;br&gt;&lt;br&gt; כדי להגדיר הפעלה מתצורת אתחול EFI, על אשף ההתקנה להתקין מנהל אתחול מערכת, לדוגמה &lt;strong&gt;GRUB&lt;/strong&gt; או &lt;strong&gt;systemd-boot&lt;/strong&gt; על &lt;strong&gt;מחיצת מערכת EFI&lt;/strong&gt;. פעולה זו היא אוטומטית, אלא אם כן העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה עליך לבחור זאת או להגדיר בעצמך.</translation>
+      <translation>מערכת זו הופעלה בתצורת אתחול &lt;strong&gt;EFI&lt;/strong&gt;.&lt;br&gt;&lt;br&gt; כדי להגדיר הפעלה מתצורת אתחול EFI, על תכנית ההתקנה להתקין מנהל אתחול מערכת, לדוגמה &lt;strong&gt;GRUB&lt;/strong&gt; או &lt;strong&gt;systemd-boot&lt;/strong&gt; על &lt;strong&gt;מחיצת מערכת EFI&lt;/strong&gt;. פעולה זו היא אוטומטית, אלא אם כן העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה יש לבחור זאת או להגדיר בעצמך.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="83"/>
       <source>This system was started with a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from a BIOS environment, this installer must install a boot loader, like &lt;strong&gt;GRUB&lt;/strong&gt;, either at the beginning of a partition or on the &lt;strong&gt;Master Boot Record&lt;/strong&gt; 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.</source>
-      <translation>מערכת זו הופעלה בתצורת אתחול &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;&lt;br&gt; כדי להגדיר הפעלה מתצורת אתחול BIOS, על אשף ההתקנה להתקין מנהל אתחול מערכת, לדוגמה &lt;strong&gt;GRUB&lt;/strong&gt;, בתחילת המחיצה או על ה־&lt;strong&gt;Master Boot Record&lt;/strong&gt; בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם כן תבחר להגדיר מחיצות באופן ידני, במקרה זה עליך להגדיר זאת בעצמך.</translation>
+      <translation>מערכת זו הופעלה בתצורת אתחול &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;&lt;br&gt; כדי להגדיר הפעלה מתצורת אתחול BIOS, על תכנית ההתקנה להתקין מנהל אתחול מערכת, לדוגמה &lt;strong&gt;GRUB&lt;/strong&gt;, בתחילת המחיצה או על ה־&lt;strong&gt;Master Boot Record&lt;/strong&gt; בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם כן תבחר להגדיר מחיצות באופן ידני, במקרה זה יש להגדיר זאת בעצמך.</translation>
     </message>
   </context>
   <context>
@@ -340,7 +340,7 @@
     <message>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/>
       <source>The %1 installer is about to make changes to your disk in order to install %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
-      <translation>אשף ההתקנה של %1 הולך לבצע שינויים בכונן שלך לטובת התקנת %2.&lt;br/&gt;&lt;strong&gt;לא תוכל לבטל את השינויים הללו.&lt;/strong&gt;</translation>
+      <translation>תכנית ההתקנה של %1 עומדת לבצע שינויים בכונן שלך לטובת התקנת %2.&lt;br/&gt;&lt;strong&gt;לא תהיה אפשרות לבטל את השינויים הללו.&lt;/strong&gt;</translation>
     </message>
     <message>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/>
@@ -375,7 +375,7 @@
     <message>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/>
       <source>The installation is complete. Close the installer.</source>
-      <translation>תהליך ההתקנה הושלם. נא לסגור את אשף ההתקנה.</translation>
+      <translation>תהליך ההתקנה הושלם. נא לסגור את תכנית ההתקנה.</translation>
     </message>
     <message>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/>
@@ -428,8 +428,8 @@ The setup program will quit and all changes will be lost.</source>
       <location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/>
       <source>Do you really want to cancel the current install process?
 The installer will quit and all changes will be lost.</source>
-      <translation>האם ברצונך לבטל את תהליך ההתקנה?
-אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation>
+      <translation>האם אכן ברצונך לבטל את תהליך ההתקנה?
+תכנית ההתקנה תיסגר וכל השינויים יאבדו.</translation>
     </message>
   </context>
   <context>
@@ -495,7 +495,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/calamares/CalamaresWindow.cpp" line="305"/>
       <source>%1 Installer</source>
-      <translation>אשף התקנה של %1</translation>
+      <translation>תכנית התקנת %1</translation>
     </message>
   </context>
   <context>
@@ -638,7 +638,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
       <source>No Swap</source>
-      <translation>בלי החלפה</translation>
+      <translation>ללא החלפה</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1611"/>
@@ -1117,7 +1117,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="56"/>
       <source>The installer failed to delete partition %1.</source>
-      <translation>אשף ההתקנה נכשל בעת מחיקת מחיצה %1.</translation>
+      <translation>תכנית ההתקנה כשלה במחיקת המחיצה %1.</translation>
     </message>
   </context>
   <context>
@@ -1644,7 +1644,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/license/LicensePage.cpp" line="146"/>
       <source>If you do not agree with the terms, the setup procedure cannot continue.</source>
-      <translation>אם התנאים האלה אינם מקובלים עליך, אי אפשר להמשיך בתהליך ההתקנה.</translation>
+      <translation>אם התנאים האלה אינם מקובלים עליכם, אי אפשר להמשיך בתהליך ההתקנה.</translation>
     </message>
     <message>
       <location filename="../src/modules/license/LicensePage.cpp" line="151"/>
@@ -1654,7 +1654,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/license/LicensePage.cpp" line="156"/>
       <source>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source>
-      <translation>אם תנאים אלו אינם מקובלים עליך, לא תותקן תכנה קניינית וייעשה שימוש בחלופות בקוד פתוח במקום.</translation>
+      <translation>אם התנאים הללו אינם מקובלים עליכם, תוכנה קניינית לא תותקן, ובמקומן יעשה שימוש בחלופות בקוד פתוח.</translation>
     </message>
   </context>
   <context>
@@ -1826,8 +1826,8 @@ The installer will quit and all changes will be lost.</source>
       <source>Please select your preferred location on the map so the installer can suggest the locale
             and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
             to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
-      <translation>נא לבחור את המיקום המועדף עליך על המפה כדי שתכנית ההתקנה תוכל להציע הגדרות מקומיות
-             ואזור זמן עבורך. ניתן לכוונן את ההגדרות המוצעות להלן. לחפש במפה על ידי משיכה להזזתה ובכפתורים +/- כדי להתקרב/להתרחק
+      <translation>נא לבחור את המיקום המועדף עליכם על המפה כדי שתכנית ההתקנה תוכל להציע הגדרות מקומיות
+             ואזור זמן עבורכם. ניתן לכוונן את ההגדרות המוצעות להלן. לחפש במפה על ידי משיכה להזזתה ובכפתורים +/- כדי להתקרב/להתרחק
             או להשתמש בגלילת העכבר לטובת שליטה בתקריב.</translation>
     </message>
   </context>
@@ -1974,7 +1974,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="37"/>
       <source>Select your preferred Region, or use the default one based on your current location.</source>
-      <translation>נא לבחור את המחוז המועדף עליך או להשתמש בבררת המחדל לפי המיקום הנוכחי שלך.</translation>
+      <translation>נא לבחור את המחוז המועדף עליכם או להשתמש בברירת המחדל לפי המיקום הנוכחי שלכם.</translation>
     </message>
     <message>
       <location filename="../src/modules/localeq/Offline.qml" line="94"/>
@@ -2029,7 +2029,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/users/CheckPWQuality.cpp" line="158"/>
       <source>The password is the same as the old one</source>
-      <translation>הססמה זהה לישנה</translation>
+      <translation>הססמה הזו זהה לישנה</translation>
     </message>
     <message>
       <location filename="../src/modules/users/CheckPWQuality.cpp" line="160"/>
@@ -2413,7 +2413,7 @@ The installer will quit and all changes will be lost.</source>
       <location filename="../src/modules/users/page_usersetup.ui" line="519"/>
       <location filename="../src/modules/users/page_usersetup.ui" line="544"/>
       <source>&lt;small&gt;Enter the same password twice, so that it can be checked for typing errors.&lt;/small&gt;</source>
-      <translation>&lt;small&gt;עליך להקליד את אותה הססמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה.&lt;/small&gt;</translation>
+      <translation>&lt;small&gt;יש להקליד את אותה הססמה פעמיים כדי לאפשר זיהוי של שגיאות הקלדה.&lt;/small&gt;</translation>
     </message>
   </context>
   <context>
@@ -2648,12 +2648,12 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
       <source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;To configure an EFI system partition, go back and select or create a FAT32 filesystem with the &lt;strong&gt;%3&lt;/strong&gt; flag enabled and mount point &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;You can continue without setting up an EFI system partition but your system may fail to start.</source>
-      <translation>מחיצת מערכת EFI נדרשת כדי להפעיל את %1.&lt;br/&gt;&lt;br/&gt; כדי להגדיר מחיצת מערכת EFI, עליך לחזור ולבחור או ליצור מערכת קבצים מסוג FAT32 עם סימון &lt;strong&gt;%3&lt;/strong&gt; פעיל ועם נקודת עיגון &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt; ניתן להמשיך ללא הגדרת מחיצת מערכת EFI אך טעינת המערכת עשויה להיכשל.</translation>
+      <translation>מחיצת מערכת EFI נדרשת כדי להפעיל את %1.&lt;br/&gt;&lt;br/&gt; כדי להגדיר מחיצת מערכת EFI, יש לחזור ולבחור או ליצור מערכת קבצים מסוג FAT32 עם סימון &lt;strong&gt;%3&lt;/strong&gt; פעיל ועם נקודת עיגון &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt; ניתן להמשיך ללא הגדרת מחיצת מערכת EFI אך טעינת המערכת עשויה להיכשל.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
       <source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;A partition was configured with mount point &lt;strong&gt;%2&lt;/strong&gt; but its &lt;strong&gt;%3&lt;/strong&gt; flag is not set.&lt;br/&gt;To set the flag, go back and edit the partition.&lt;br/&gt;&lt;br/&gt;You can continue without setting the flag but your system may fail to start.</source>
-      <translation>לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.&lt;br/&gt;&lt;br/&gt; הוגדרה מחיצה עם נקודת עיגון &lt;strong&gt;%2&lt;/strong&gt; אך לא הוגדר סימון &lt;strong&gt;%3&lt;/strong&gt;.&lt;br/&gt; כדי לסמן את המחיצה, עליך לחזור ולערוך את המחיצה.&lt;br/&gt;&lt;br/&gt; ניתן להמשיך ללא הוספת הסימון אך טעינת המערכת עשויה להיכשל.</translation>
+      <translation>לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.&lt;br/&gt;&lt;br/&gt; הוגדרה מחיצה עם נקודת עיגון &lt;strong&gt;%2&lt;/strong&gt; אך לא הוגדר סימון &lt;strong&gt;%3&lt;/strong&gt;.&lt;br/&gt; כדי לסמן את המחיצה, יש לחזור ולערוך את המחיצה.&lt;br/&gt;&lt;br/&gt; ניתן להמשיך ללא הוספת הסימון אך טעינת המערכת עשויה להיכשל.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/>
@@ -2843,7 +2843,7 @@ Output:
     <message>
       <location filename="../src/libcalamares/partition/FileSystem.cpp" line="34"/>
       <source>swap</source>
-      <translation>דפדוף, swap</translation>
+      <translation>דפדוף swap</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="90"/>
@@ -3886,7 +3886,7 @@ Output:
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
       <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
-      <translation>נא ללחוץ על דרם המקלדת המועדף עליך כדי לבחור בפריסה ובהגוון או להשתמש בבררת המחדל בהתאם לחומרה שזוהתה.</translation>
+      <translation>נא ללחוץ על דגם המקלדת המועדף עליכם כדי לבחור בפריסה ובהגוון או להשתמש בברירת המחדל בהתאם לחומרה שזוהתה.</translation>
     </message>
     <message>
       <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
diff --git a/lang/calamares_hi.ts b/lang/calamares_hi.ts
index 1f220d9e5fcbfe5fe1c1054c74ad155aee28b46e..f6d73519d6e8dc09120e3ab520a86cc4765f6322 100644
--- a/lang/calamares_hi.ts
+++ b/lang/calamares_hi.ts
@@ -619,17 +619,17 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>इस संचय उपकरण पर पहले से ऑपरेटिंग सिस्टम है, परंतु &lt;strong&gt;%1&lt;/strong&gt; विभाजन तालिका अपेक्षित &lt;strong&gt;%2&lt;/strong&gt; से भिन्न है।&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>इस संचय उपकरण के विभाजनों में से कोई एक विभाजन &lt;strong&gt;माउंट&lt;/strong&gt; है।</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>यह संचय उपकरण एक &lt;strong&gt;निष्क्रिय RAID&lt;/strong&gt; उपकरण का हिस्सा है।</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/calamares_hr.ts b/lang/calamares_hr.ts
index e9e5c252a5ca800c5a5c6c24aa744538e654154a..256de9da61c5bbbc7c9c68e39eebc90a63e5e9f7 100644
--- a/lang/calamares_hr.ts
+++ b/lang/calamares_hr.ts
@@ -621,7 +621,7 @@ Instalacijski program će izaći i sve promjene će biti izgubljene.</translatio
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Ovaj uređaj za pohranu već ima operativni sustav, ali njegova particijska tablica &lt;strong&gt;%1&lt;/strong&gt; razlikuje se od potrebne &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
diff --git a/lang/calamares_ja.ts b/lang/calamares_ja.ts
index 0a798b844541a55da76136a72a9231959c3e4944..3a820770fa9afdaed1e9591ed707f43084536da3 100644
--- a/lang/calamares_ja.ts
+++ b/lang/calamares_ja.ts
@@ -617,7 +617,7 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>このストレージデバイスにはすでにオペレーティングシステムがインストールされていますが、パーティションテーブル &lt;strong&gt;%1&lt;/strong&gt; は必要な &lt;strong&gt;%2&lt;/strong&gt; とは異なります。&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
diff --git a/lang/calamares_pt_BR.ts b/lang/calamares_pt_BR.ts
index 2423033088540b32e3b5d803f8702e0ae17b86f2..9897c6c1a1a02d83ce0df3ca51a04e426ca81442 100644
--- a/lang/calamares_pt_BR.ts
+++ b/lang/calamares_pt_BR.ts
@@ -619,17 +619,17 @@ O instalador será fechado e todas as alterações serão perdidas.</translation
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>O dispositivo de armazenamento já possui um sistema operacional, mas a tabela de partições &lt;strong&gt;%1&lt;/strong&gt; é diferente da necessária &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>O dispositivo de armazenamento tem uma de suas partições &lt;strong&gt;montada&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>O dispositivo de armazenamento é parte de um dispositivo &lt;strong&gt;RAID inativo&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/calamares_sv.ts b/lang/calamares_sv.ts
index 3f03caf4eac322235834bb7d369cc3d8dadf4aa6..ec72fefa9c42e8f25822f5b9a5ba3f99e2dff185 100644
--- a/lang/calamares_sv.ts
+++ b/lang/calamares_sv.ts
@@ -618,17 +618,17 @@ Alla ändringar kommer att gå förlorade.</translation>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Denna lagringsenhet har redan ett operativsystem installerat på sig, men partitionstabellen &lt;strong&gt;%1&lt;/strong&gt; skiljer sig från den som behövs &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Denna lagringsenhet har en av dess partitioner &lt;strong&gt;monterad&lt;/strong&gt;.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>Denna lagringsenhet är en del av en &lt;strong&gt;inaktiv RAID&lt;/strong&gt;enhet.    </translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/calamares_tg.ts b/lang/calamares_tg.ts
index eac2d747e290063e835cc535e03c35a085ae3690..9c291054745348d8b781eb709a16cd90261246ea 100644
--- a/lang/calamares_tg.ts
+++ b/lang/calamares_tg.ts
@@ -620,17 +620,17 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>Ин дастгоҳи захирагоҳ аллакай дорои низоми амалкунанда мебошад, аммо ҷадвали қисми диски &lt;strong&gt;%1&lt;/strong&gt; аз диски лозимии &lt;strong&gt;%2&lt;/strong&gt; фарқ мекунад.&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>Яке аз қисмҳои диски ин дастгоҳи захирагоҳ &lt;strong&gt;васлшуда&lt;/strong&gt; мебошад.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>Ин дастгоҳи захирагоҳ қисми дасгоҳи &lt;strong&gt;RAID-и ғайрифаъол&lt;/strong&gt; мебошад.</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/calamares_vi.ts b/lang/calamares_vi.ts
new file mode 100644
index 0000000000000000000000000000000000000000..140da8aad8b2609e3eec9911246cb4448ae1f964
--- /dev/null
+++ b/lang/calamares_vi.ts
@@ -0,0 +1,4124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS language="vi" version="2.1">
+  <context>
+    <name>BootInfoWidget</name>
+    <message>
+      <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="61"/>
+      <source>The &lt;strong&gt;boot environment&lt;/strong&gt; of this system.&lt;br&gt;&lt;br&gt;Older x86 systems only support &lt;strong&gt;BIOS&lt;/strong&gt;.&lt;br&gt;Modern systems usually use &lt;strong&gt;EFI&lt;/strong&gt;, but may also show up as BIOS if started in compatibility mode.</source>
+      <translation>&lt;strong&gt; Môi trường khởi động &lt;/strong&gt; của hệ thống này. &lt;br&gt; &lt;br&gt; Các hệ thống x86 cũ hơn chỉ hỗ trợ &lt;strong&gt; BIOS &lt;/strong&gt;. &lt;br&gt; Các hệ thống hiện đại thường sử dụng &lt;strong&gt; EFI &lt;/strong&gt;, nhưng cũng có thể hiển thị dưới dạng BIOS nếu được khởi động ở chế độ tương thích.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="71"/>
+      <source>This system was started with an &lt;strong&gt;EFI&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from an EFI environment, this installer must deploy a boot loader application, like &lt;strong&gt;GRUB&lt;/strong&gt; or &lt;strong&gt;systemd-boot&lt;/strong&gt; on an &lt;strong&gt;EFI System Partition&lt;/strong&gt;. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source>
+      <translation>Hệ thống này được khởi động bằng môi trường khởi động &lt;strong&gt; EFI &lt;/strong&gt;. &lt;br&gt; &lt;br&gt; Để định cấu hình khởi động từ môi trường EFI, trình cài đặt này phải triển khai ứng dụng trình tải khởi động, như &lt;strong&gt; GRUB &lt;/strong&gt; hoặc &lt;strong&gt; systemd-boot &lt;/strong&gt; trên &lt;strong&gt; Phân vùng hệ thống EFI &lt;/strong&gt;. Điều này là tự động, trừ khi bạn chọn phân vùng thủ công, trong trường hợp này, bạn phải chọn nó hoặc tự tạo nó.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="83"/>
+      <source>This system was started with a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from a BIOS environment, this installer must install a boot loader, like &lt;strong&gt;GRUB&lt;/strong&gt;, either at the beginning of a partition or on the &lt;strong&gt;Master Boot Record&lt;/strong&gt; 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.</source>
+      <translation>Hệ thống này được khởi động với môi trường khởi động &lt;strong&gt; BIOS &lt;/strong&gt;. &lt;br&gt; &lt;br&gt; Để định cấu hình khởi động từ môi trường BIOS, trình cài đặt này phải cài đặt một trình tải khởi động, chẳng hạn như &lt;strong&gt; GRUB &lt;/strong&gt; ở đầu phân vùng hoặc trên &lt;strong&gt; Bản ghi khởi động chính &lt;/strong&gt; gần đầu bảng phân vùng (ưu tiên). Điều này là tự động, trừ khi bạn chọn phân vùng thủ công, trong trường hợp đó, bạn phải tự thiết lập nó.</translation>
+    </message>
+  </context>
+  <context>
+    <name>BootLoaderModel</name>
+    <message>
+      <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="58"/>
+      <source>Master Boot Record of %1</source>
+      <translation>Bản ghi khởi động chính của %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="91"/>
+      <source>Boot Partition</source>
+      <translation>Phân vùng khởi động</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="98"/>
+      <source>System Partition</source>
+      <translation>Phân vùng hệ thống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="128"/>
+      <source>Do not install a boot loader</source>
+      <translation>Không cài đặt bộ tải khởi động</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="146"/>
+      <source>%1 (%2)</source>
+      <translation>%1 (%2)</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::BlankViewStep</name>
+    <message>
+      <location filename="../src/libcalamaresui/viewpages/BlankViewStep.cpp" line="61"/>
+      <source>Blank Page</source>
+      <translation>Trang trắng</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::DebugWindow</name>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="18"/>
+      <source>Form</source>
+      <translation>Mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="28"/>
+      <source>GlobalStorage</source>
+      <translation>Lưu trữ tổng quát</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="38"/>
+      <source>JobQueue</source>
+      <translation>Hàng đợi công việc</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="48"/>
+      <source>Modules</source>
+      <translation>Mô-đun</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="61"/>
+      <source>Type:</source>
+      <translation>Kiểu:</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="68"/>
+      <location filename="../src/calamares/DebugWindow.ui" line="82"/>
+      <source>none</source>
+      <translation>không</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="75"/>
+      <source>Interface:</source>
+      <translation>Giao diện:</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="97"/>
+      <source>Tools</source>
+      <translation>Công cụ</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="110"/>
+      <source>Reload Stylesheet</source>
+      <translation>Tải lại bảng định kiểu</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.ui" line="117"/>
+      <source>Widget Tree</source>
+      <translation>Cây công cụ</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/DebugWindow.cpp" line="217"/>
+      <source>Debug information</source>
+      <translation>Thông tin gỡ lỗi</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::ExecutionViewStep</name>
+    <message>
+      <location filename="../src/libcalamaresui/viewpages/ExecutionViewStep.cpp" line="85"/>
+      <source>Set up</source>
+      <translation>Thiết lập</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/viewpages/ExecutionViewStep.cpp" line="85"/>
+      <source>Install</source>
+      <translation>Cài đặt</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::FailJob</name>
+    <message>
+      <location filename="../src/libcalamares/JobExample.cpp" line="29"/>
+      <source>Job failed (%1)</source>
+      <translation>Công việc thất bại (%1)</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/JobExample.cpp" line="30"/>
+      <source>Programmed job failure was explicitly requested.</source>
+      <translation>Lỗi công việc được lập trình đã được yêu cầu rõ ràng.</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::JobThread</name>
+    <message>
+      <location filename="../src/libcalamares/JobQueue.cpp" line="196"/>
+      <source>Done</source>
+      <translation>Xong</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::NamedJob</name>
+    <message>
+      <location filename="../src/libcalamares/JobExample.cpp" line="17"/>
+      <source>Example job (%1)</source>
+      <translation>Ví dụ về công việc (%1)</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::ProcessJob</name>
+    <message>
+      <location filename="../src/libcalamares/ProcessJob.cpp" line="43"/>
+      <source>Run command '%1' in target system.</source>
+      <translation>Chạy lệnh '%1' trong hệ thống đích.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/ProcessJob.cpp" line="43"/>
+      <source> Run command '%1'.</source>
+      <translation> Chạy lệnh '%1'.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/ProcessJob.cpp" line="50"/>
+      <source>Running command %1 %2</source>
+      <translation>Đang chạy lệnh %1 %2</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::PythonJob</name>
+    <message>
+      <location filename="../src/libcalamares/PythonJob.cpp" line="192"/>
+      <source>Running %1 operation.</source>
+      <translation>Đang chạy %1 thao tác.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonJob.cpp" line="221"/>
+      <source>Bad working directory path</source>
+      <translation>Sai đường dẫn thư mục làm việc</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonJob.cpp" line="222"/>
+      <source>Working directory %1 for python job %2 is not readable.</source>
+      <translation>Không thể đọc thư mục làm việc %1 của công việc python %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonJob.cpp" line="228"/>
+      <source>Bad main script file</source>
+      <translation>Sai tệp kịch bản chính</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonJob.cpp" line="229"/>
+      <source>Main script file %1 for python job %2 is not readable.</source>
+      <translation>Không thể đọc tập tin kịch bản chính %1 của công việc python %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonJob.cpp" line="297"/>
+      <source>Boost.Python error in job "%1".</source>
+      <translation>Lỗi Boost.Python trong công việc "%1".</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::QmlViewStep</name>
+    <message>
+      <location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="67"/>
+      <source>Loading ...</source>
+      <translation>Đang tải ...</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="88"/>
+      <source>QML Step &lt;i&gt;%1&lt;/i&gt;.</source>
+      <translation>QML bÆ°á»›c &lt;i&gt;%1&lt;/i&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/viewpages/QmlViewStep.cpp" line="268"/>
+      <source>Loading failed.</source>
+      <translation>Không tải được.</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::RequirementsChecker</name>
+    <message>
+      <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="94"/>
+      <source>Requirements checking for module &lt;i&gt;%1&lt;/i&gt; is complete.</source>
+      <translation>Kiểm tra các yêu cầu cho mô-đun &lt;i&gt; %1 &lt;/i&gt; đã hoàn tất.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="115"/>
+      <source>Waiting for %n module(s).</source>
+      <translation>
+        <numerusform>Đang đợi %n mô-đun.</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="116"/>
+      <source>(%n second(s))</source>
+      <translation>
+        <numerusform>(%n giây)</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/modulesystem/RequirementsChecker.cpp" line="121"/>
+      <source>System-requirements checking is complete.</source>
+      <translation>Kiểm tra yêu cầu hệ thống đã hoàn tất.</translation>
+    </message>
+  </context>
+  <context>
+    <name>Calamares::ViewManager</name>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="150"/>
+      <source>Setup Failed</source>
+      <translation>Thiết lập không thành công</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="150"/>
+      <source>Installation Failed</source>
+      <translation>Cài đặt thất bại</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="151"/>
+      <source>Would you like to paste the install log to the web?</source>
+      <translation>Bạn có muốn gửi nhật ký cài đặt lên web không?</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="164"/>
+      <source>Error</source>
+      <translation>Lá»—i</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="171"/>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="518"/>
+      <source>&amp;Yes</source>
+      <translation>&amp;Có</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="172"/>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="519"/>
+      <source>&amp;No</source>
+      <translation>&amp;Không</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="178"/>
+      <source>&amp;Close</source>
+      <translation>Đón&amp;g</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="189"/>
+      <source>Install Log Paste URL</source>
+      <translation>URL để gửi nhật ký cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="192"/>
+      <source>The upload was unsuccessful. No web-paste was done.</source>
+      <translation>Tải lên không thành công. Không có quá trình gửi lên web nào được thực hiện.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="208"/>
+      <source>Calamares Initialization Failed</source>
+      <translation>Khởi tạo không thành công</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="209"/>
+      <source>%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.</source>
+      <translation>%1 không thể được cài đặt.Không thể tải tất cả các mô-đun đã định cấu hình. Đây là vấn đề với cách phân phối sử dụng.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="215"/>
+      <source>&lt;br/&gt;The following modules could not be loaded:</source>
+      <translation>&lt;br/&gt; Không thể tải các mô-đun sau:</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="327"/>
+      <source>Continue with setup?</source>
+      <translation>Tiếp tục thiết lập?</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="327"/>
+      <source>Continue with installation?</source>
+      <translation>Tiếp tục cài đặt?</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="329"/>
+      <source>The %1 setup program is about to make changes to your disk in order to set up %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
+      <translation>Chương trình thiết lập %1 sắp thực hiện các thay đổi đối với đĩa của bạn để thiết lập %2. &lt;br/&gt; &lt;strong&gt; Bạn sẽ không thể hoàn tác các thay đổi này. &lt;/strong&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/>
+      <source>The %1 installer is about to make changes to your disk in order to install %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
+      <translation>Trình cài đặt %1 sắp thực hiện các thay đổi đối với đĩa của bạn để cài đặt %2. &lt;br/&gt; &lt;strong&gt; Bạn sẽ không thể hoàn tác các thay đổi này. &lt;/strong&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/>
+      <source>&amp;Set up now</source>
+      <translation>&amp;Thiết lập ngay</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="335"/>
+      <source>&amp;Install now</source>
+      <translation>&amp;Cài đặt ngay</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="343"/>
+      <source>Go &amp;back</source>
+      <translation>&amp;Quay lại</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/>
+      <source>&amp;Set up</source>
+      <translation>&amp;Thiết lập</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/>
+      <source>&amp;Install</source>
+      <translation>&amp;Cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="394"/>
+      <source>Setup is complete. Close the setup program.</source>
+      <translation>Thiết lập hoàn tất. Đóng chương trình cài đặt.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/>
+      <source>The installation is complete. Close the installer.</source>
+      <translation>Quá trình cài đặt hoàn tất. Đóng trình cài đặt.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/>
+      <source>Cancel setup without changing the system.</source>
+      <translation>Hủy thiết lập mà không thay đổi hệ thống.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/>
+      <source>Cancel installation without changing the system.</source>
+      <translation>Hủy cài đặt mà không thay đổi hệ thống.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="408"/>
+      <source>&amp;Next</source>
+      <translation>&amp;Tiếp</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="413"/>
+      <source>&amp;Back</source>
+      <translation>&amp;Quay lại</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="419"/>
+      <source>&amp;Done</source>
+      <translation>&amp;Xong</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="438"/>
+      <source>&amp;Cancel</source>
+      <translation>&amp;Hủy</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="511"/>
+      <source>Cancel setup?</source>
+      <translation>Hủy thiết lập?</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="511"/>
+      <source>Cancel installation?</source>
+      <translation>Hủy cài đặt?</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="512"/>
+      <source>Do you really want to cancel the current setup process?
+The setup program will quit and all changes will be lost.</source>
+      <translation>Bạn có thực sự muốn hủy quá trình thiết lập hiện tại không?
+Chương trình thiết lập sẽ thoát và tất cả các thay đổi sẽ bị mất.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/>
+      <source>Do you really want to cancel the current install process?
+The installer will quit and all changes will be lost.</source>
+      <translation>Bạn có thực sự muốn hủy quá trình cài đặt hiện tại không?
+Trình cài đặt sẽ thoát và tất cả các thay đổi sẽ bị mất.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CalamaresPython::Helper</name>
+    <message>
+      <location filename="../src/libcalamares/PythonHelper.cpp" line="288"/>
+      <source>Unknown exception type</source>
+      <translation>Không nhận ra kiểu của ngoại lệ</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonHelper.cpp" line="306"/>
+      <source>unparseable Python error</source>
+      <translation>lỗi không thể phân tích cú pháp Python</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonHelper.cpp" line="350"/>
+      <source>unparseable Python traceback</source>
+      <translation>truy vết không thể phân tích cú pháp Python</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/PythonHelper.cpp" line="357"/>
+      <source>Unfetchable Python error.</source>
+      <translation>Lỗi Python không thể try cập.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CalamaresUtils</name>
+    <message>
+      <location filename="../src/libcalamaresui/utils/Paste.cpp" line="25"/>
+      <source>Install log posted to:
+%1</source>
+      <translation>Cài đặt nhật ký được đăng lên:
+%1</translation>
+    </message>
+  </context>
+  <context>
+    <name>CalamaresWindow</name>
+    <message>
+      <location filename="../src/calamares/CalamaresWindow.cpp" line="101"/>
+      <source>Show debug information</source>
+      <translation>Hiện thông tin gỡ lỗi</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/CalamaresWindow.cpp" line="155"/>
+      <source>&amp;Back</source>
+      <translation>Trở &amp;về</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/CalamaresWindow.cpp" line="167"/>
+      <source>&amp;Next</source>
+      <translation>&amp;Tiếp theo</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/CalamaresWindow.cpp" line="180"/>
+      <source>&amp;Cancel</source>
+      <translation>&amp;Hủy bỏ</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/CalamaresWindow.cpp" line="304"/>
+      <source>%1 Setup Program</source>
+      <translation>%1 Thiết lập chương trình</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/CalamaresWindow.cpp" line="305"/>
+      <source>%1 Installer</source>
+      <translation>%1 cài đặt hệ điều hành</translation>
+    </message>
+  </context>
+  <context>
+    <name>CheckerContainer</name>
+    <message>
+      <location filename="../src/modules/welcome/checker/CheckerContainer.cpp" line="37"/>
+      <source>Gathering system information...</source>
+      <translation>Thu thập thông tin hệ thống ...</translation>
+    </message>
+  </context>
+  <context>
+    <name>ChoicePage</name>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="126"/>
+      <source>Select storage de&amp;vice:</source>
+      <translation>&amp;Chọn thiết bị lưu trữ:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="127"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="963"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1008"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1098"/>
+      <source>Current:</source>
+      <translation>Hiện tại:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="128"/>
+      <source>After:</source>
+      <translation>Sau khi cài đặt:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="305"/>
+      <source>&lt;strong&gt;Manual partitioning&lt;/strong&gt;&lt;br/&gt;You can create or resize partitions yourself.</source>
+      <translation>&lt;strong&gt; Phân vùng thủ công &lt;/strong&gt; &lt;br/&gt; Bạn có thể tự tạo hoặc thay đổi kích thước phân vùng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="831"/>
+      <source>Reuse %1 as home partition for %2.</source>
+      <translation>Sử dụng lại %1 làm phân vùng chính cho %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="964"/>
+      <source>&lt;strong&gt;Select a partition to shrink, then drag the bottom bar to resize&lt;/strong&gt;</source>
+      <translation>&lt;strong&gt; Chọn một phân vùng để thu nhỏ, sau đó kéo thanh dưới cùng để thay đổi kích thước &lt;/strong&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="981"/>
+      <source>%1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.</source>
+      <translation>%1 sẽ được thu nhỏ thành %2MiB và phân vùng %3MiB mới sẽ được tạo cho %4.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1037"/>
+      <source>Boot loader location:</source>
+      <translation>Vị trí bộ tải khởi động:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1089"/>
+      <source>&lt;strong&gt;Select a partition to install on&lt;/strong&gt;</source>
+      <translation>&lt;strong&gt; Chọn phân vùng để cài đặt &lt;/strong&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1146"/>
+      <source>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source>
+      <translation>Không thể tìm thấy phân vùng hệ thống EFI ở bất kỳ đâu trên hệ thống này. Vui lòng quay lại và sử dụng phân vùng thủ công để thiết lập %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1154"/>
+      <source>The EFI system partition at %1 will be used for starting %2.</source>
+      <translation>Phân vùng hệ thống EFI tại %1 sẽ được sử dụng để bắt đầu %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1162"/>
+      <source>EFI system partition:</source>
+      <translation>Phân vùng hệ thống EFI:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1296"/>
+      <source>This storage device does not seem to have an operating system on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
+      <translation>Thiết bị lưu trữ này dường như không có hệ điều hành trên đó. Bạn muốn làm gì? &lt;br/&gt; Bạn sẽ có thể xem xét và xác nhận lựa chọn của mình trước khi thực hiện bất kỳ thay đổi nào đối với thiết bị lưu trữ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1301"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1338"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1360"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1385"/>
+      <source>&lt;strong&gt;Erase disk&lt;/strong&gt;&lt;br/&gt;This will &lt;font color="red"&gt;delete&lt;/font&gt; all data currently present on the selected storage device.</source>
+      <translation>&lt;strong&gt; Xóa đĩa &lt;/strong&gt; &lt;br/&gt; Thao tác này sẽ &lt;font color = "red"&gt; xóa &lt;/font&gt; tất cả dữ liệu hiện có trên thiết bị lưu trữ đã chọn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1305"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1334"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1356"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1381"/>
+      <source>&lt;strong&gt;Install alongside&lt;/strong&gt;&lt;br/&gt;The installer will shrink a partition to make room for %1.</source>
+      <translation>&lt;strong&gt; Cài đặt cùng với &lt;/strong&gt; &lt;br/&gt; Trình cài đặt sẽ thu nhỏ phân vùng để nhường chỗ cho %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1309"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1343"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1364"/>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1389"/>
+      <source>&lt;strong&gt;Replace a partition&lt;/strong&gt;&lt;br/&gt;Replaces a partition with %1.</source>
+      <translation>&lt;strong&gt; Thay thế phân vùng &lt;/strong&gt; &lt;br/&gt; Thay thế phân vùng bằng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1328"/>
+      <source>This storage device has %1 on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
+      <translation>Thiết bị lưu trữ này có %1 trên đó. Bạn muốn làm gì? &lt;br/&gt; Bạn sẽ có thể xem lại và xác nhận lựa chọn của mình trước khi thực hiện bất kỳ thay đổi nào đối với thiết bị lưu trữ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1351"/>
+      <source>This storage device already has an operating system on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
+      <translation>Thiết bị lưu trữ này đã có hệ điều hành trên đó. Bạn muốn làm gì? &lt;br/&gt; Bạn sẽ có thể xem lại và xác nhận lựa chọn của mình trước khi thực hiện bất kỳ thay đổi nào đối với thiết bị lưu trữ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1376"/>
+      <source>This storage device has multiple operating systems on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
+      <translation>Thiết bị lưu trữ này có nhiều hệ điều hành trên đó. Bạn muốn làm gì? &lt;br/&gt; Bạn sẽ có thể xem lại và xác nhận lựa chọn của mình trước khi thực hiện bất kỳ thay đổi nào đối với thiết bị lưu trữ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
+      <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
+      <translation>Thiết bị lưu trữ này đã có sẵn hệ điều hành, nhưng bảng phân vùng &lt;strong&gt; %1 &lt;/strong&gt; khác với bảng &lt;strong&gt; %2 &lt;/strong&gt; cần thiết. &lt;br/&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
+      <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
+      <translation>Thiết bị lưu trữ này có một trong các phân vùng được &lt;strong&gt; gắn kết &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
+      <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
+      <translation>Thiết bị lưu trữ này là một phần của thiết bị &lt;strong&gt; RAID không hoạt động &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
+      <source>No Swap</source>
+      <translation>Không hoán đổi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1611"/>
+      <source>Reuse Swap</source>
+      <translation>Sử dụng lại Hoán đổi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1614"/>
+      <source>Swap (no Hibernate)</source>
+      <translation>Hoán đổi (không ngủ đông)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1617"/>
+      <source>Swap (with Hibernate)</source>
+      <translation>Hoán đổi (ngủ đông)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1620"/>
+      <source>Swap to file</source>
+      <translation>Hoán đổi sang tệp</translation>
+    </message>
+  </context>
+  <context>
+    <name>ClearMountsJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="42"/>
+      <source>Clear mounts for partitioning operations on %1</source>
+      <translation>Xóa gắn kết cho các hoạt động phân vùng trên %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="49"/>
+      <source>Clearing mounts for partitioning operations on %1.</source>
+      <translation>Xóa các gắn kết cho các hoạt động phân vùng trên %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="224"/>
+      <source>Cleared all mounts for %1</source>
+      <translation>Đã xóa tất cả các gắn kết cho %1</translation>
+    </message>
+  </context>
+  <context>
+    <name>ClearTempMountsJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="32"/>
+      <source>Clear all temporary mounts.</source>
+      <translation>Xóa tất cả các gắn kết tạm thời.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="39"/>
+      <source>Clearing all temporary mounts.</source>
+      <translation>Đang xóa tất cả các gắn kết tạm thời.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="51"/>
+      <source>Cannot get list of temporary mounts.</source>
+      <translation>Không thể lấy danh sách các gắn kết tạm thời.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="92"/>
+      <source>Cleared all temporary mounts.</source>
+      <translation>Xóa tất cả các gắn kết tạm thời.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CommandList</name>
+    <message>
+      <location filename="../src/libcalamares/utils/CommandList.cpp" line="142"/>
+      <location filename="../src/libcalamares/utils/CommandList.cpp" line="155"/>
+      <source>Could not run command.</source>
+      <translation>Không thể chạy lệnh.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CommandList.cpp" line="143"/>
+      <source>The command runs in the host environment and needs to know the root path, but no rootMountPoint is defined.</source>
+      <translation>Lệnh chạy trong môi trường máy chủ và cần biết đường dẫn gốc, nhưng không có biến rootMountPoint nào được xác định.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CommandList.cpp" line="156"/>
+      <source>The command needs to know the user's name, but no username is defined.</source>
+      <translation>Lệnh cần biết tên của người dùng, nhưng không có tên người dùng nào được xác định.</translation>
+    </message>
+  </context>
+  <context>
+    <name>Config</name>
+    <message>
+      <location filename="../src/modules/keyboard/Config.cpp" line="340"/>
+      <source>Set keyboard model to %1.&lt;br/&gt;</source>
+      <translation>Thiệt lập bàn phím kiểu %1.&lt;br/&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/Config.cpp" line="347"/>
+      <source>Set keyboard layout to %1/%2.</source>
+      <translation>Thiết lập bố cục bàn phím thành %1/%2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/Config.cpp" line="334"/>
+      <source>Set timezone to %1/%2.</source>
+      <translation>Thiết lập múi giờ sang %1/%2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/Config.cpp" line="372"/>
+      <source>The system language will be set to %1.</source>
+      <translation>Ngôn ngữ hệ thống sẽ được đặt thành %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/Config.cpp" line="379"/>
+      <source>The numbers and dates locale will be set to %1.</source>
+      <translation>Định dạng ngôn ngữ của số và ngày tháng sẽ được chuyển thành %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/Config.cpp" line="38"/>
+      <source>Network Installation. (Disabled: Incorrect configuration)</source>
+      <translation>Cài đặt mạng. (Tắt: Sai cấu hình)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/Config.cpp" line="40"/>
+      <source>Network Installation. (Disabled: Received invalid groups data)</source>
+      <translation>Cài đặt mạng. (Tắt: Nhận được dữ liệu nhóm bị sai)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/Config.cpp" line="42"/>
+      <source>Network Installation. (Disabled: internal error)</source>
+      <translation>Cài đặt mạng. (Tắt: Lỗi nội bộ)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/Config.cpp" line="44"/>
+      <source>Network Installation. (Disabled: Unable to fetch package lists, check your network connection)</source>
+      <translation>Cài đặt mạng. (Tắt: Không thể lấy được danh sách gói ứng dụng, kiểm tra kết nối mạng)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="50"/>
+      <source>This computer does not satisfy the minimum requirements for setting up %1.&lt;br/&gt;Setup cannot continue. &lt;a href="#details"&gt;Details...&lt;/a&gt;</source>
+      <translation>Máy tính này không đạt đủ yêu cấu tối thiểu để thiết lập %1.&lt;br/&gt;Không thể tiếp tục thiết lập. &lt;a href="#details"&gt;Chi tiết...&lt;/a&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="54"/>
+      <source>This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;Installation cannot continue. &lt;a href="#details"&gt;Details...&lt;/a&gt;</source>
+      <translation>Máy tính này không đạt đủ yêu cấu tối thiểu để cài đặt %1.&lt;br/&gt;Không thể tiếp tục cài đặt. &lt;a href="#details"&gt;Chi tiết...&lt;/a&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="61"/>
+      <source>This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;Setup can continue, but some features might be disabled.</source>
+      <translation>Máy tính này không đạt đủ yêu cấu khuyến nghị để thiết lập %1.&lt;br/&gt;Thiết lập có thể tiếp tục, nhưng một số tính năng có thể sẽ bị tắt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="65"/>
+      <source>This computer does not satisfy some of the recommended requirements for installing %1.&lt;br/&gt;Installation can continue, but some features might be disabled.</source>
+      <translation>Máy tính này không đạt đủ yêu cấu khuyến nghị để cài đặt %1.&lt;br/&gt;Cài đặt có thể tiếp tục, nhưng một số tính năng có thể sẽ bị tắt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="75"/>
+      <source>This program will ask you some questions and set up %2 on your computer.</source>
+      <translation>Chương trình này sẽ hỏi bạn vài câu hỏi và thiết lập %2 trên máy tính của bạn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="244"/>
+      <source>&lt;h1&gt;Welcome to the Calamares setup program for %1&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với chương trình Calamares để thiết lập %1&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="245"/>
+      <source>&lt;h1&gt;Welcome to %1 setup&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với thiết lập %1 &lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="250"/>
+      <source>&lt;h1&gt;Welcome to the Calamares installer for %1&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với chương trình Calamares để cài đặt %1&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/Config.cpp" line="251"/>
+      <source>&lt;h1&gt;Welcome to the %1 installer&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với bộ cài đặt %1 &lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="164"/>
+      <source>Your username is too long.</source>
+      <translation>Tên bạn hơi dài.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="170"/>
+      <source>'%1' is not allowed as username.</source>
+      <translation>'%1' không được phép dùng làm tên.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="177"/>
+      <source>Your username must start with a lowercase letter or underscore.</source>
+      <translation>Tên người dùng của bạn phải bắt đầu bằng chữ cái viết thường hoặc dấu gạch dưới.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="181"/>
+      <source>Only lowercase letters, numbers, underscore and hyphen are allowed.</source>
+      <translation>Chỉ cho phép các chữ cái viết thường, số, gạch dưới và gạch nối.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="227"/>
+      <source>Your hostname is too short.</source>
+      <translation>Tên máy chủ quá ngắn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="231"/>
+      <source>Your hostname is too long.</source>
+      <translation>Tên máy chủ quá dài.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="237"/>
+      <source>'%1' is not allowed as hostname.</source>
+      <translation>'%1' không được phép dùng làm tên máy chủ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="243"/>
+      <source>Only letters, numbers, underscore and hyphen are allowed.</source>
+      <translation>Chỉ cho phép các chữ cái, số, gạch dưới và gạch nối.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="446"/>
+      <source>Your passwords do not match!</source>
+      <translation>Mật khẩu nhập lại không khớp!</translation>
+    </message>
+  </context>
+  <context>
+    <name>ContextualProcessJob</name>
+    <message>
+      <location filename="../src/modules/contextualprocess/ContextualProcessJob.cpp" line="119"/>
+      <source>Contextual Processes Job</source>
+      <translation>Công việc xử lý theo ngữ cảnh</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreatePartitionDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="18"/>
+      <source>Create a Partition</source>
+      <translation>Tạo phân vùng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="42"/>
+      <source>Si&amp;ze:</source>
+      <translation>&amp;Kích thước:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="52"/>
+      <source> MiB</source>
+      <translation> MiB</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="59"/>
+      <source>Partition &amp;Type:</source>
+      <translation>&amp;Loại phân vùng:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="71"/>
+      <source>&amp;Primary</source>
+      <translation>&amp;Sơ cấp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="81"/>
+      <source>E&amp;xtended</source>
+      <translation>&amp;Mở rộng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="123"/>
+      <source>Fi&amp;le System:</source>
+      <translation>&amp;Tập tin hệ thống:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="155"/>
+      <source>LVM LV name</source>
+      <translation>Tên LVM LV</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="165"/>
+      <source>&amp;Mount Point:</source>
+      <translation>&amp;Điểm gắn kết:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="192"/>
+      <source>Flags:</source>
+      <translation>Cờ:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="66"/>
+      <source>En&amp;crypt</source>
+      <translation>&amp;Mã hóa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="161"/>
+      <source>Logical</source>
+      <translation>Lô-gic</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="166"/>
+      <source>Primary</source>
+      <translation>Sơ cấp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="185"/>
+      <source>GPT</source>
+      <translation>GPT</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="265"/>
+      <source>Mountpoint already in use. Please select another one.</source>
+      <translation>Điểm gắn kết đã được sử dụng. Vui lòng chọn một cái khác.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreatePartitionJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="38"/>
+      <source>Create new %2MiB partition on %4 (%3) with file system %1.</source>
+      <translation>Tạo phân vùng %2MiB mới trên %4 (%3) với hệ thống tệp %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="49"/>
+      <source>Create new &lt;strong&gt;%2MiB&lt;/strong&gt; partition on &lt;strong&gt;%4&lt;/strong&gt; (%3) with file system &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Tạo phân vùng &lt;strong&gt;%2MiB &lt;/strong&gt; mới trên &lt;strong&gt;%4 &lt;/strong&gt; (%3) với hệ thống tệp &lt;strong&gt;%1 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="61"/>
+      <source>Creating new %1 partition on %2.</source>
+      <translation>Tạo phân vùng %1 mới trên %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="73"/>
+      <source>The installer failed to create partition on disk '%1'.</source>
+      <translation>Trình cài đặt không tạo được phân vùng trên đĩa '%1'.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreatePartitionTableDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="24"/>
+      <source>Create Partition Table</source>
+      <translation>Tạo bảng phân vùng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="43"/>
+      <source>Creating a new partition table will delete all existing data on the disk.</source>
+      <translation>Tạo bảng phân vùng mới sẽ xóa tất cả dữ liệu hiện có trên đĩa.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="69"/>
+      <source>What kind of partition table do you want to create?</source>
+      <translation>Bạn muốn tạo loại bảng phân vùng nào?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="76"/>
+      <source>Master Boot Record (MBR)</source>
+      <translation>Bản ghi khởi động chính (MBR)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/CreatePartitionTableDialog.ui" line="86"/>
+      <source>GUID Partition Table (GPT)</source>
+      <translation>Bảng phân vùng GUID (GPT)</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreatePartitionTableJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="39"/>
+      <source>Create new %1 partition table on %2.</source>
+      <translation>Tạo bảng phân vùng %1 mới trên %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="47"/>
+      <source>Create new &lt;strong&gt;%1&lt;/strong&gt; partition table on &lt;strong&gt;%2&lt;/strong&gt; (%3).</source>
+      <translation>Tạo bảng phân vùng &lt;strong&gt;%1 &lt;/strong&gt; mới trên &lt;strong&gt;%2 &lt;/strong&gt; (%3).</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="57"/>
+      <source>Creating new %1 partition table on %2.</source>
+      <translation>Tạo bảng phân vùng %1 mới trên %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="75"/>
+      <source>The installer failed to create a partition table on %1.</source>
+      <translation>Trình cài đặt không tạo được bảng phân vùng trên %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreateUserJob</name>
+    <message>
+      <location filename="../src/modules/users/CreateUserJob.cpp" line="40"/>
+      <source>Create user %1</source>
+      <translation>Khởi tạo người dùng %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CreateUserJob.cpp" line="47"/>
+      <source>Create user &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Tạo người dùng &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CreateUserJob.cpp" line="54"/>
+      <source>Creating user %1.</source>
+      <translation>Đang tạo người dùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CreateUserJob.cpp" line="186"/>
+      <source>Cannot create sudoers file for writing.</source>
+      <translation>Không thể tạo tệp sudoers để viết.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CreateUserJob.cpp" line="181"/>
+      <source>Cannot chmod sudoers file.</source>
+      <translation>Không thể sửa đổi mod của tệp sudoers.</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreateVolumeGroupDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/CreateVolumeGroupDialog.cpp" line="28"/>
+      <source>Create Volume Group</source>
+      <translation>Tạo nhóm ổ đĩa</translation>
+    </message>
+  </context>
+  <context>
+    <name>CreateVolumeGroupJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="31"/>
+      <source>Create new volume group named %1.</source>
+      <translation>Tạo nhóm ổ đĩa mới có tên %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="37"/>
+      <source>Create new volume group named &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Tạo nhóm ổ đĩa mới có tên &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="43"/>
+      <source>Creating new volume group named %1.</source>
+      <translation>Đang tạo nhóm ổ đĩa mới có tên %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="55"/>
+      <source>The installer failed to create a volume group named '%1'.</source>
+      <translation>Trình cài đặt không tạo được nhóm ổ đĩa có tên '%1'.</translation>
+    </message>
+  </context>
+  <context>
+    <name>DeactivateVolumeGroupJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="24"/>
+      <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="36"/>
+      <source>Deactivate volume group named %1.</source>
+      <translation>Hủy kích hoạt nhóm ổ đĩa có tên %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="30"/>
+      <source>Deactivate volume group named &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Hủy kích hoạt nhóm ổ đĩa có tên &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="48"/>
+      <source>The installer failed to deactivate a volume group named %1.</source>
+      <translation>Trình cài đặt không thể hủy kích hoạt nhóm ổ đĩa có tên %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>DeletePartitionJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="31"/>
+      <source>Delete partition %1.</source>
+      <translation>Xóa phân vùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="38"/>
+      <source>Delete partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Xóa phân vùng &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="45"/>
+      <source>Deleting partition %1.</source>
+      <translation>Đang xóa phân vùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="56"/>
+      <source>The installer failed to delete partition %1.</source>
+      <translation>Trình cài đặt không thể xóa phân vùng %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>DeviceInfoWidget</name>
+    <message>
+      <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="97"/>
+      <source>This device has a &lt;strong&gt;%1&lt;/strong&gt; partition table.</source>
+      <translation>Thiết bị này có bảng phân vùng &lt;strong&gt; %1 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="104"/>
+      <source>This is a &lt;strong&gt;loop&lt;/strong&gt; device.&lt;br&gt;&lt;br&gt;It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.</source>
+      <translation>Đây là thiết bị &lt;strong&gt; vòng lặp &lt;/strong&gt;. &lt;br&gt; &lt;br&gt; Đây là thiết bị giả không có bảng phân vùng giúp tệp có thể truy cập được dưới dạng thiết bị khối. Loại thiết lập này thường chỉ chứa một hệ thống tệp duy nhất.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="111"/>
+      <source>This installer &lt;strong&gt;cannot detect a partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;The device either has no partition table, or the partition table is corrupted or of an unknown type.&lt;br&gt;This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</source>
+      <translation>Trình cài đặt này &lt;strong&gt; không thể phát hiện bảng phân vùng &lt;/strong&gt; trên thiết bị lưu trữ đã chọn. &lt;br&gt; &lt;br&gt; Thiết bị không có bảng phân vùng hoặc bảng phân vùng bị hỏng hoặc thuộc loại không xác định. &lt;br&gt; Điều này trình cài đặt có thể tạo bảng phân vùng mới cho bạn, tự động hoặc thông qua trang phân vùng thủ công.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="121"/>
+      <source>&lt;br&gt;&lt;br&gt;This is the recommended partition table type for modern systems which start from an &lt;strong&gt;EFI&lt;/strong&gt; boot environment.</source>
+      <translation>&lt;br&gt; &lt;br&gt; Đây là loại bảng phân vùng được khuyến nghị cho các hệ thống hiện đại bắt đầu từ môi trường khởi động &lt;strong&gt; EFI &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="127"/>
+      <source>&lt;br&gt;&lt;br&gt;This partition table type is only advisable on older systems which start from a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment. GPT is recommended in most other cases.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Warning:&lt;/strong&gt; the MBR partition table is an obsolete MS-DOS era standard.&lt;br&gt;Only 4 &lt;em&gt;primary&lt;/em&gt; partitions may be created, and of those 4, one can be an &lt;em&gt;extended&lt;/em&gt; partition, which may in turn contain many &lt;em&gt;logical&lt;/em&gt; partitions.</source>
+      <translation>&lt;br&gt; &lt;br&gt; Loại bảng phân vùng này chỉ được khuyến khích trên các hệ thống cũ hơn bắt đầu từ môi trường khởi động &lt;strong&gt; BIOS &lt;/strong&gt;. GPT được khuyến nghị trong hầu hết các trường hợp khác. &lt;br&gt; &lt;br&gt; &lt;strong&gt; Cảnh báo: &lt;/strong&gt; bảng phân vùng MBR là tiêu chuẩn thời đại MS-DOS lỗi thời. &lt;br&gt; Chỉ có 4 phân vùng &lt;em&gt; chính &lt;/em&gt; có thể được tạo và trong số 4 phân vùng đó, một phân vùng có thể là phân vùng &lt;em&gt; mở rộng &lt;/em&gt;, đến lượt nó có thể chứa nhiều phân vùng &lt;em&gt; logic &lt;/em&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="140"/>
+      <source>The type of &lt;strong&gt;partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;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.&lt;br&gt;This installer will keep the current partition table unless you explicitly choose otherwise.&lt;br&gt;If unsure, on modern systems GPT is preferred.</source>
+      <translation>Loại &lt;strong&gt; bảng phân vùng &lt;/strong&gt; trên thiết bị lưu trữ đã chọn. &lt;br&gt; &lt;br&gt; Cách duy nhất để thay đổi loại bảng phân vùng là xóa và tạo lại bảng phân vùng từ đầu, việc này sẽ hủy tất cả dữ liệu trên thiết bị lưu trữ. &lt;br&gt; Trình cài đặt này sẽ giữ bảng phân vùng hiện tại trừ khi bạn chọn rõ ràng khác. &lt;br&gt; Nếu không chắc chắn, trên các hệ thống hiện đại, GPT được ưu tiên hơn.</translation>
+    </message>
+  </context>
+  <context>
+    <name>DeviceModel</name>
+    <message>
+      <location filename="../src/modules/partition/core/DeviceModel.cpp" line="84"/>
+      <source>%1 - %2 (%3)</source>
+      <extracomment>device[name] - size[number] (device-node[name])</extracomment>
+      <translation>%1 - %2 (%3)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/DeviceModel.cpp" line="95"/>
+      <source>%1 - (%2)</source>
+      <extracomment>device[name] - (device-node[name])</extracomment>
+      <translation>%1 - (%2)</translation>
+    </message>
+  </context>
+  <context>
+    <name>DracutLuksCfgJob</name>
+    <message>
+      <location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="127"/>
+      <source>Write LUKS configuration for Dracut to %1</source>
+      <translation>Lưu cấu hình LUKS cho Dracut vào %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="131"/>
+      <source>Skip writing LUKS configuration for Dracut: "/" partition is not encrypted</source>
+      <translation>Không lưu cấu hình LUKS cho Dracut: phân vùng "/" không được mã hoá</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/dracutlukscfg/DracutLuksCfgJob.cpp" line="148"/>
+      <source>Failed to open %1</source>
+      <translation>Mở %1 thất bại</translation>
+    </message>
+  </context>
+  <context>
+    <name>DummyCppJob</name>
+    <message>
+      <location filename="../src/modules/dummycpp/DummyCppJob.cpp" line="37"/>
+      <source>Dummy C++ Job</source>
+      <translation>Công việc C++ ví dụ</translation>
+    </message>
+  </context>
+  <context>
+    <name>EditExistingPartitionDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="24"/>
+      <source>Edit Existing Partition</source>
+      <translation>Chỉnh sửa phân vùng hiện có</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="54"/>
+      <source>Content:</source>
+      <translation>Ná»™i dung:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="64"/>
+      <source>&amp;Keep</source>
+      <translation>&amp;Giữ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="74"/>
+      <source>Format</source>
+      <translation>Định dạng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="93"/>
+      <source>Warning: Formatting the partition will erase all existing data.</source>
+      <translation>Cảnh báo: Định dạng phân vùng sẽ xóa tất cả dữ liệu hiện có.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="103"/>
+      <source>&amp;Mount Point:</source>
+      <translation>&amp;Điểm gắn kết:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="123"/>
+      <source>Si&amp;ze:</source>
+      <translation>&amp;Kích thước:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="133"/>
+      <source> MiB</source>
+      <translation> MiB</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="140"/>
+      <source>Fi&amp;le System:</source>
+      <translation>&amp;Tập tin hệ thống:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="153"/>
+      <source>Flags:</source>
+      <translation>Cờ:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.cpp" line="272"/>
+      <source>Mountpoint already in use. Please select another one.</source>
+      <translation>Điểm gắn kết đã được sử dụng. Vui lòng chọn một cái khác.</translation>
+    </message>
+  </context>
+  <context>
+    <name>EncryptWidget</name>
+    <message>
+      <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="36"/>
+      <source>En&amp;crypt system</source>
+      <translation>&amp;Mã hóa hệ thống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="46"/>
+      <source>Passphrase</source>
+      <translation>Cụm mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="56"/>
+      <source>Confirm passphrase</source>
+      <translation>Xác nhận cụm mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="104"/>
+      <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="114"/>
+      <source>Please enter the same passphrase in both boxes.</source>
+      <translation>Vui lòng nhập cùng một cụm mật khẩu vào cả hai hộp.</translation>
+    </message>
+  </context>
+  <context>
+    <name>FillGlobalStorageJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="138"/>
+      <source>Set partition information</source>
+      <translation>Đặt thông tin phân vùng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="164"/>
+      <source>Install %1 on &lt;strong&gt;new&lt;/strong&gt; %2 system partition.</source>
+      <translation>Cài đặt %1 trên phân vùng hệ thống &lt;strong&gt; mới &lt;/strong&gt; %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="170"/>
+      <source>Set up &lt;strong&gt;new&lt;/strong&gt; %2 partition with mount point &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Thiết lập phân vùng &lt;strong&gt; mới &lt;/strong&gt; %2 với điểm gắn kết &lt;strong&gt; %1 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="180"/>
+      <source>Install %2 on %3 system partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Cài đặt %2 trên phân vùng hệ thống %3 &lt;strong&gt; %1 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="187"/>
+      <source>Set up %3 partition &lt;strong&gt;%1&lt;/strong&gt; with mount point &lt;strong&gt;%2&lt;/strong&gt;.</source>
+      <translation>Thiết lập phân vùng %3 &lt;strong&gt; %1 &lt;/strong&gt; với điểm gắn kết &lt;strong&gt; %2 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="200"/>
+      <source>Install boot loader on &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Cài đặt trình tải khởi động trên &lt;strong&gt; %1 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="209"/>
+      <source>Setting up mount points.</source>
+      <translation>Thiết lập điểm gắn kết.</translation>
+    </message>
+  </context>
+  <context>
+    <name>FinishedPage</name>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.ui" line="102"/>
+      <source>&amp;Restart now</source>
+      <translation>&amp;Khởi động lại ngay</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.cpp" line="44"/>
+      <source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been set up on your computer.&lt;br/&gt;You may now start using your new system.</source>
+      <translation>&lt;h1&gt;Hoàn thành.&lt;/h1&gt;&lt;br/&gt;%1 đã được cài đặt thành công.&lt;br/&gt;Hãy khởi động lại máy tính.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.cpp" line="48"/>
+      <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, your system will restart immediately when you click on &lt;span style="font-style:italic;"&gt;Done&lt;/span&gt; or close the setup program.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Tích chọn để khởi động lại sau khi ấn &lt;span style="font-style:italic;"&gt;Hoàn thành&lt;/span&gt; hoặc đóng phần mềm thiết lập.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.cpp" line="54"/>
+      <source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been installed on your computer.&lt;br/&gt;You may now restart into your new system, or continue using the %2 Live environment.</source>
+      <translation>&lt;h1&gt;Hoàn thành.&lt;/h1&gt;&lt;br/&gt;%1 đã được cài đặt trên máy.&lt;br/&gt;hãy khởi động lại, hoặc cũng có thể tiếp tục sử dụng %2 môi trường USB.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.cpp" line="59"/>
+      <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, your system will restart immediately when you click on &lt;span style="font-style:italic;"&gt;Done&lt;/span&gt; or close the installer.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Tích chọn để khởi động lại sau khi ấn &lt;span style="font-style:italic;"&gt;Hoàn thành&lt;/span&gt; hoặc đóng phần mềm cài đặt.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.cpp" line="116"/>
+      <source>&lt;h1&gt;Setup Failed&lt;/h1&gt;&lt;br/&gt;%1 has not been set up on your computer.&lt;br/&gt;The error message was: %2.</source>
+      <translation>&lt;h1&gt;Thiết lập lỗi&lt;/h1&gt;&lt;br/&gt;%1 đã không được thiết lập trên máy tính.&lt;br/&gt;tin báo lỗi: %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedPage.cpp" line="122"/>
+      <source>&lt;h1&gt;Installation Failed&lt;/h1&gt;&lt;br/&gt;%1 has not been installed on your computer.&lt;br/&gt;The error message was: %2.</source>
+      <translation>&lt;h1&gt;Cài đặt lỗi&lt;/h1&gt;&lt;br/&gt;%1 chưa được cài đặt trên máy tính&lt;br/&gt;Tin báo lỗi: %2.</translation>
+    </message>
+  </context>
+  <context>
+    <name>FinishedViewStep</name>
+    <message>
+      <location filename="../src/modules/finished/FinishedViewStep.cpp" line="67"/>
+      <source>Finish</source>
+      <translation>Hoàn thành</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedViewStep.cpp" line="125"/>
+      <source>Setup Complete</source>
+      <translation>Thiết lập xong</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedViewStep.cpp" line="125"/>
+      <source>Installation Complete</source>
+      <translation>Cài đặt xong</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedViewStep.cpp" line="127"/>
+      <source>The setup of %1 is complete.</source>
+      <translation>Thiết lập %1 đã xong.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/finished/FinishedViewStep.cpp" line="128"/>
+      <source>The installation of %1 is complete.</source>
+      <translation>Cài đặt của %1 đã xong.</translation>
+    </message>
+  </context>
+  <context>
+    <name>FormatPartitionJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="36"/>
+      <source>Format partition %1 (file system: %2, size: %3 MiB) on %4.</source>
+      <translation>Định dạng phân vùng %1 (tập tin hệ thống:%2, kích thước: %3 MiB) trên %4.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="47"/>
+      <source>Format &lt;strong&gt;%3MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; with file system &lt;strong&gt;%2&lt;/strong&gt;.</source>
+      <translation>Định dạng &lt;strong&gt;%3MiB&lt;/strong&gt; phân vùng &lt;strong&gt;%1&lt;/strong&gt;với tập tin hệ thống &lt;strong&gt;%2&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="58"/>
+      <source>Formatting partition %1 with file system %2.</source>
+      <translation>Đang định dạng phân vùng %1 với tập tin hệ thống %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="72"/>
+      <source>The installer failed to format partition %1 on disk '%2'.</source>
+      <translation>Không thể định dạng %1 ở đĩa '%2'.</translation>
+    </message>
+  </context>
+  <context>
+    <name>GeneralRequirements</name>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="149"/>
+      <source>has at least %1 GiB available drive space</source>
+      <translation>có ít nhất %1 GiB dung lượng ổ đĩa khả dụng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="151"/>
+      <source>There is not enough drive space. At least %1 GiB is required.</source>
+      <translation>Không có đủ dung lượng ổ đĩa. Ít nhất %1 GiB là bắt buộc.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="160"/>
+      <source>has at least %1 GiB working memory</source>
+      <translation>có ít nhất %1 GiB bộ nhớ làm việc</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="162"/>
+      <source>The system does not have enough working memory. At least %1 GiB is required.</source>
+      <translation>Hệ thống không có đủ bộ nhớ hoạt động. Ít nhất %1 GiB là bắt buộc.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="171"/>
+      <source>is plugged in to a power source</source>
+      <translation>được cắm vào nguồn điện</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="172"/>
+      <source>The system is not plugged in to a power source.</source>
+      <translation>Hệ thống chưa được cắm vào nguồn điện.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="179"/>
+      <source>is connected to the Internet</source>
+      <translation>được kết nối với Internet</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="180"/>
+      <source>The system is not connected to the Internet.</source>
+      <translation>Hệ thống không được kết nối với Internet.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="187"/>
+      <source>is running the installer as an administrator (root)</source>
+      <translation>đang chạy trình cài đặt với tư cách quản trị viên (root)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="190"/>
+      <source>The setup program is not running with administrator rights.</source>
+      <translation>Chương trình thiết lập không chạy với quyền quản trị viên.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="191"/>
+      <source>The installer is not running with administrator rights.</source>
+      <translation>Trình cài đặt không chạy với quyền quản trị viên.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="199"/>
+      <source>has a screen large enough to show the whole installer</source>
+      <translation>có màn hình đủ lớn để hiển thị toàn bộ trình cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="202"/>
+      <source>The screen is too small to display the setup program.</source>
+      <translation>Màn hình quá nhỏ để hiển thị chương trình cài đặt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="203"/>
+      <source>The screen is too small to display the installer.</source>
+      <translation>Màn hình quá nhỏ để hiển thị trình cài đặt.</translation>
+    </message>
+  </context>
+  <context>
+    <name>HostInfoJob</name>
+    <message>
+      <location filename="../src/modules/hostinfo/HostInfoJob.cpp" line="42"/>
+      <source>Collecting information about your machine.</source>
+      <translation>Thu thập thông tin về máy của bạn.</translation>
+    </message>
+  </context>
+  <context>
+    <name>IDJob</name>
+    <message>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="30"/>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="39"/>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="52"/>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="59"/>
+      <source>OEM Batch Identifier</source>
+      <translation>Định danh lô OEM</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="40"/>
+      <source>Could not create directories &lt;code&gt;%1&lt;/code&gt;.</source>
+      <translation>Không thể tạo thư mục &lt;code&gt; %1 &lt;/code&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="53"/>
+      <source>Could not open file &lt;code&gt;%1&lt;/code&gt;.</source>
+      <translation>Không thể mở được tệp &lt;code&gt; %1 &lt;/code&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/oemid/IDJob.cpp" line="60"/>
+      <source>Could not write to file &lt;code&gt;%1&lt;/code&gt;.</source>
+      <translation>Không thể ghi vào tệp &lt;code&gt; %1 &lt;/code&gt;.</translation>
+    </message>
+  </context>
+  <context>
+    <name>InitcpioJob</name>
+    <message>
+      <location filename="../src/modules/initcpio/InitcpioJob.cpp" line="31"/>
+      <source>Creating initramfs with mkinitcpio.</source>
+      <translation>Đang tạo initramfs bằng mkinitcpio.</translation>
+    </message>
+  </context>
+  <context>
+    <name>InitramfsJob</name>
+    <message>
+      <location filename="../src/modules/initramfs/InitramfsJob.cpp" line="28"/>
+      <source>Creating initramfs.</source>
+      <translation>Đang tạo initramfs.</translation>
+    </message>
+  </context>
+  <context>
+    <name>InteractiveTerminalPage</name>
+    <message>
+      <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="44"/>
+      <source>Konsole not installed</source>
+      <translation>Konsole chưa được cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="44"/>
+      <source>Please install KDE Konsole and try again!</source>
+      <translation>Vui lòng cài đặt KDE Konsole rồi thử lại!</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="102"/>
+      <source>Executing script: &amp;nbsp;&lt;code&gt;%1&lt;/code&gt;</source>
+      <translation>Đang thực thi kịch bản: &amp;nbsp;&lt;code&gt;%1&lt;/code&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>InteractiveTerminalViewStep</name>
+    <message>
+      <location filename="../src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp" line="41"/>
+      <source>Script</source>
+      <translation>Kịch bản</translation>
+    </message>
+  </context>
+  <context>
+    <name>KeyboardPage</name>
+    <message>
+      <location filename="../src/modules/keyboard/KeyboardPage.cpp" line="204"/>
+      <source>Set keyboard model to %1.&lt;br/&gt;</source>
+      <translation>Thiết lập bàn phím kiểu %1.&lt;br/&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/KeyboardPage.cpp" line="208"/>
+      <source>Set keyboard layout to %1/%2.</source>
+      <translation>Thiết lập bố cục bàn phím thành %1/%2.</translation>
+    </message>
+  </context>
+  <context>
+    <name>KeyboardQmlViewStep</name>
+    <message>
+      <location filename="../src/modules/keyboardq/KeyboardQmlViewStep.cpp" line="33"/>
+      <source>Keyboard</source>
+      <translation>Bàn phím</translation>
+    </message>
+  </context>
+  <context>
+    <name>KeyboardViewStep</name>
+    <message>
+      <location filename="../src/modules/keyboard/KeyboardViewStep.cpp" line="45"/>
+      <source>Keyboard</source>
+      <translation>Bàn phím</translation>
+    </message>
+  </context>
+  <context>
+    <name>LCLocaleDialog</name>
+    <message>
+      <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="23"/>
+      <source>System locale setting</source>
+      <translation>Cài đặt ngôn ngữ hệ thống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="30"/>
+      <source>The system locale setting affects the language and character set for some command line user interface elements.&lt;br/&gt;The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Thiết lập ngôn ngữ hệ thống ảnh hưởng tới ngôn ngữ và bộ kí tự của một vài thành phần trong giao diện dòng lệnh cho người dùng.&lt;br/&gt;Thiết lập hiện tại là &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="54"/>
+      <source>&amp;Cancel</source>
+      <translation>&amp;Huỷ bỏ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/LCLocaleDialog.cpp" line="55"/>
+      <source>&amp;OK</source>
+      <translation>&amp;OK</translation>
+    </message>
+  </context>
+  <context>
+    <name>LicensePage</name>
+    <message>
+      <location filename="../src/modules/license/LicensePage.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.ui" line="26"/>
+      <source>&lt;h1&gt;License Agreement&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Điều khoản giấy phép&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.cpp" line="136"/>
+      <source>I accept the terms and conditions above.</source>
+      <translation>Tôi đồng ý với điều khoản và điều kiện trên.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.cpp" line="138"/>
+      <source>Please review the End User License Agreements (EULAs).</source>
+      <translation>Vui lòng đọc thoả thuận giấy phép người dùng cuối (EULAs).</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.cpp" line="143"/>
+      <source>This setup procedure will install proprietary software that is subject to licensing terms.</source>
+      <translation>Quy trình thiết lập này sẽ cài đặt phần mềm độc quyền tuân theo các điều khoản cấp phép.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.cpp" line="146"/>
+      <source>If you do not agree with the terms, the setup procedure cannot continue.</source>
+      <translation>Nếu bạn không đồng ý với các điều khoản, quy trình thiết lập không thể tiếp tục.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.cpp" line="151"/>
+      <source>This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience.</source>
+      <translation>Quy trình thiết lập này có thể cài đặt phần mềm độc quyền tuân theo các điều khoản cấp phép để cung cấp các tính năng bổ sung và nâng cao trải nghiệm người dùng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicensePage.cpp" line="156"/>
+      <source>If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source>
+      <translation>Nếu bạn không đồng ý với các điều khoản, phần mềm độc quyền sẽ không được cài đặt và các giải pháp thay thế nguồn mở sẽ được sử dụng thay thế.</translation>
+    </message>
+  </context>
+  <context>
+    <name>LicenseViewStep</name>
+    <message>
+      <location filename="../src/modules/license/LicenseViewStep.cpp" line="43"/>
+      <source>License</source>
+      <translation>Giấy phép</translation>
+    </message>
+  </context>
+  <context>
+    <name>LicenseWidget</name>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="87"/>
+      <source>URL: %1</source>
+      <translation>URL: %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="108"/>
+      <source>&lt;strong&gt;%1 driver&lt;/strong&gt;&lt;br/&gt;by %2</source>
+      <extracomment>%1 is an untranslatable product name, example: Creative Audigy driver</extracomment>
+      <translation>&lt;strong&gt;trình điều khiển %1&lt;/strong&gt;&lt;br/&gt;bởi %2</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="115"/>
+      <source>&lt;strong&gt;%1 graphics driver&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
+      <extracomment>%1 is usually a vendor name, example: Nvidia graphics driver</extracomment>
+      <translation>&lt;strong&gt;trình điều khiển đồ hoạc %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;bởi %2&lt;/font&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="121"/>
+      <source>&lt;strong&gt;%1 browser plugin&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
+      <translation>&lt;strong&gt;plugin trình duyệt %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;bởi %2&lt;/font&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="127"/>
+      <source>&lt;strong&gt;%1 codec&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
+      <translation>&lt;strong&gt;%1 codec&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;bởi %2&lt;/font&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="133"/>
+      <source>&lt;strong&gt;%1 package&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
+      <translation>&lt;strong&gt;gói %1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;bởi %2&lt;/font&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="139"/>
+      <source>&lt;strong&gt;%1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;by %2&lt;/font&gt;</source>
+      <translation>&lt;strong&gt;%1&lt;/strong&gt;&lt;br/&gt;&lt;font color="Grey"&gt;bởi %2&lt;/font&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="162"/>
+      <source>File: %1</source>
+      <translation>Tệp: %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="185"/>
+      <source>Hide license text</source>
+      <translation>Ẩn thông tin giấy phép</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="185"/>
+      <source>Show the license text</source>
+      <translation>Hiện thông tin giấy phép</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/license/LicenseWidget.cpp" line="189"/>
+      <source>Open license agreement in browser.</source>
+      <translation>Mở điều khoản giấy phép trên trình duyệt.</translation>
+    </message>
+  </context>
+  <context>
+    <name>LocalePage</name>
+    <message>
+      <location filename="../src/modules/locale/LocalePage.cpp" line="124"/>
+      <source>Region:</source>
+      <translation>Khu vá»±c:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/LocalePage.cpp" line="125"/>
+      <source>Zone:</source>
+      <translation>Vùng:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/LocalePage.cpp" line="126"/>
+      <location filename="../src/modules/locale/LocalePage.cpp" line="127"/>
+      <source>&amp;Change...</source>
+      <translation>&amp;Thay đổi...</translation>
+    </message>
+  </context>
+  <context>
+    <name>LocaleQmlViewStep</name>
+    <message>
+      <location filename="../src/modules/localeq/LocaleQmlViewStep.cpp" line="32"/>
+      <source>Location</source>
+      <translation>Vị trí</translation>
+    </message>
+  </context>
+  <context>
+    <name>LocaleViewStep</name>
+    <message>
+      <location filename="../src/modules/locale/LocaleViewStep.cpp" line="76"/>
+      <source>Location</source>
+      <translation>Vị trí</translation>
+    </message>
+  </context>
+  <context>
+    <name>LuksBootKeyFileJob</name>
+    <message>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="28"/>
+      <source>Configuring LUKS key file.</source>
+      <translation>Định cấu hình tệp khóa LUKS.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="145"/>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="153"/>
+      <source>No partitions are defined.</source>
+      <translation>Không có phân vùng nào được xác định.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="181"/>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="188"/>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="196"/>
+      <source>Encrypted rootfs setup error</source>
+      <translation>Lỗi thiết lập rootfs mã hóa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="182"/>
+      <source>Root partition %1 is LUKS but no passphrase has been set.</source>
+      <translation>Phân vùng gốc %1 là LUKS nhưng không có cụm mật khẩu nào được đặt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="189"/>
+      <source>Could not create LUKS key file for root partition %1.</source>
+      <translation>Không thể tạo tệp khóa LUKS cho phân vùng gốc %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp" line="197"/>
+      <source>Could not configure LUKS key file on partition %1.</source>
+      <translation>Không thể định cấu hình tệp khóa LUKS trên phân vùng %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>MachineIdJob</name>
+    <message>
+      <location filename="../src/modules/machineid/MachineIdJob.cpp" line="37"/>
+      <source>Generate machine-id.</source>
+      <translation>Tạo ID máy.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/machineid/MachineIdJob.cpp" line="53"/>
+      <source>Configuration Error</source>
+      <translation>Lỗi cấu hình</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/machineid/MachineIdJob.cpp" line="54"/>
+      <source>No root mount point is set for MachineId.</source>
+      <translation>Không có điểm gắn kết gốc nào được đặt cho ID máy</translation>
+    </message>
+  </context>
+  <context>
+    <name>Map</name>
+    <message>
+      <location filename="../src/modules/localeq/Map.qml" line="243"/>
+      <source>Timezone: %1</source>
+      <translation>Múi giờ: %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/Map.qml" line="264"/>
+      <source>Please select your preferred location on the map so the installer can suggest the locale
+            and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging
+            to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming.</source>
+      <translation>Vui lòng chọn vị trí ưa thích của bạn trên bản đồ để trình cài đặt có thể đề xuất ngôn ngữ
+            và cài đặt múi giờ cho bạn. Bạn có thể tinh chỉnh các cài đặt được đề xuất bên dưới. Tìm kiếm bản đồ bằng cách kéo
+            để di chuyển và sử dụng các nút +/- để phóng to / thu nhỏ hoặc sử dụng cuộn chuột để phóng to.</translation>
+    </message>
+  </context>
+  <context>
+    <name>NetInstallViewStep</name>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="47"/>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="54"/>
+      <source>Package selection</source>
+      <translation>Chọn phân vùng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="55"/>
+      <source>Office software</source>
+      <translation>Phần mềm văn phòng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="56"/>
+      <source>Office package</source>
+      <translation>Gói văn phòng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="57"/>
+      <source>Browser software</source>
+      <translation>Phần mềm trình duyệt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="58"/>
+      <source>Browser package</source>
+      <translation>Gói trình duyệt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="59"/>
+      <source>Web browser</source>
+      <translation>Trình duyệt web</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="60"/>
+      <source>Kernel</source>
+      <translation>Lõi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="61"/>
+      <source>Services</source>
+      <translation>Dịch vụ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="62"/>
+      <source>Login</source>
+      <translation>Đăng nhập</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="63"/>
+      <source>Desktop</source>
+      <translation>Màn hình chính</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="64"/>
+      <source>Applications</source>
+      <translation>Ứng dụng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="65"/>
+      <source>Communication</source>
+      <translation>Cộng đồng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="66"/>
+      <source>Development</source>
+      <translation>Phát triển</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="67"/>
+      <source>Office</source>
+      <translation>Văn phòng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="68"/>
+      <source>Multimedia</source>
+      <translation>Đa phương tiện</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="69"/>
+      <source>Internet</source>
+      <translation>Mạng Internet</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="70"/>
+      <source>Theming</source>
+      <translation>Chủ đề</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="71"/>
+      <source>Gaming</source>
+      <translation>Trò chơi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/NetInstallViewStep.cpp" line="72"/>
+      <source>Utilities</source>
+      <translation>Tiện ích</translation>
+    </message>
+  </context>
+  <context>
+    <name>NotesQmlViewStep</name>
+    <message>
+      <location filename="../src/modules/notesqml/NotesQmlViewStep.cpp" line="23"/>
+      <source>Notes</source>
+      <translation>Ghi chú</translation>
+    </message>
+  </context>
+  <context>
+    <name>OEMPage</name>
+    <message>
+      <location filename="../src/modules/oemid/OEMPage.ui" line="32"/>
+      <source>Ba&amp;tch:</source>
+      <translation>&amp;Lô:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/oemid/OEMPage.ui" line="42"/>
+      <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter a batch-identifier here. This will be stored in the target system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt; &lt;p&gt; Nhập số nhận dạng lô tại đây. Điều này sẽ được lưu trữ trong hệ thống đích. &lt;/p&gt; &lt;/body&gt; &lt;/html&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/oemid/OEMPage.ui" line="52"/>
+      <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;h1&gt;OEM Configuration&lt;/h1&gt;&lt;p&gt;Calamares will use OEM settings while configuring the target system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt; &lt;h1&gt; Cấu hình OEM &lt;/h1&gt; &lt;p&gt; Calamares sẽ sử dụng cài đặt OEM trong khi định cấu hình hệ thống đích. &lt;/p&gt; &lt;/body&gt; &lt;/html&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>OEMViewStep</name>
+    <message>
+      <location filename="../src/modules/oemid/OEMViewStep.cpp" line="122"/>
+      <source>OEM Configuration</source>
+      <translation>Cấu hình OEM</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/oemid/OEMViewStep.cpp" line="128"/>
+      <source>Set the OEM Batch Identifier to &lt;code&gt;%1&lt;/code&gt;.</source>
+      <translation>Đặt số nhận dạng lô OEM thành &lt;code&gt; %1 &lt;/code&gt;.</translation>
+    </message>
+  </context>
+  <context>
+    <name>Offline</name>
+    <message>
+      <location filename="../src/modules/localeq/Offline.qml" line="37"/>
+      <source>Select your preferred Region, or use the default one based on your current location.</source>
+      <translation>Chọn khu vực ưa thích của bạn hoặc sử dụng khu vực mặc định dựa trên vị trí hiện tại của bạn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/Offline.qml" line="94"/>
+      <location filename="../src/modules/localeq/Offline.qml" line="169"/>
+      <location filename="../src/modules/localeq/Offline.qml" line="213"/>
+      <source>Timezone: %1</source>
+      <translation>Múi giờ: %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/Offline.qml" line="111"/>
+      <source>Select your preferred Zone within your Region.</source>
+      <translation>Chọn vùng ưa thích của bạn trong khu vực của bạn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/Offline.qml" line="182"/>
+      <source>Zones</source>
+      <translation>Vùng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/Offline.qml" line="229"/>
+      <source>You can fine-tune Language and Locale settings below.</source>
+      <translation>Bạn có thể tinh chỉnh cài đặt Ngôn ngữ và Bản địa bên dưới.</translation>
+    </message>
+  </context>
+  <context>
+    <name>PWQ</name>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="51"/>
+      <source>Password is too short</source>
+      <translation>Mật khẩu quá ngắn</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="67"/>
+      <source>Password is too long</source>
+      <translation>Mật khẩu quá dài</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="143"/>
+      <source>Password is too weak</source>
+      <translation>Mật khẩu quá yếu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="151"/>
+      <source>Memory allocation error when setting '%1'</source>
+      <translation>Lỗi phân bổ bộ nhớ khi cài đặt '%1'</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="156"/>
+      <source>Memory allocation error</source>
+      <translation>Lỗi phân bổ bộ nhớ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="158"/>
+      <source>The password is the same as the old one</source>
+      <translation>Mật khẩu giống với mật khẩu cũ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="160"/>
+      <source>The password is a palindrome</source>
+      <translation>Mật khẩu là chuỗi đối xứng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="162"/>
+      <source>The password differs with case changes only</source>
+      <translation>Mật khẩu chỉ khác khi thay đổi chữ hoa chữ thường</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="164"/>
+      <source>The password is too similar to the old one</source>
+      <translation>Mật khẩu giống mật khẩu cũ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="166"/>
+      <source>The password contains the user name in some form</source>
+      <translation>Mật khẩu chứa tên người dùng ở một số dạng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="168"/>
+      <source>The password contains words from the real name of the user in some form</source>
+      <translation>Mật khẩu chứa các từ từ tên thật của người dùng dưới một số hình thức</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="171"/>
+      <source>The password contains forbidden words in some form</source>
+      <translation>Mật khẩu chứa các từ bị cấm dưới một số hình thức</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="175"/>
+      <source>The password contains less than %1 digits</source>
+      <translation>Mật khẩu chứa ít hơn %1 ký tự</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="178"/>
+      <source>The password contains too few digits</source>
+      <translation>Mật khẩu chứa quá ít ký tự</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="182"/>
+      <source>The password contains less than %1 uppercase letters</source>
+      <translation>Mật khẩu có ít nhất %1 chữ viết hoa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="185"/>
+      <source>The password contains too few uppercase letters</source>
+      <translation>Mật khẩu chứa quá ít chữ hoa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="189"/>
+      <source>The password contains less than %1 lowercase letters</source>
+      <translation>Mật khẩu chứa ít hơn %1 chữ thường</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="192"/>
+      <source>The password contains too few lowercase letters</source>
+      <translation>Mật khẩu chứa quá ít chữ thường</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="196"/>
+      <source>The password contains less than %1 non-alphanumeric characters</source>
+      <translation>Mật khẩu chứa ít hơn %1 ký tự không phải chữ và số</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="200"/>
+      <source>The password contains too few non-alphanumeric characters</source>
+      <translation>Mật khẩu chứa quá ít ký tự không phải chữ và số</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="204"/>
+      <source>The password is shorter than %1 characters</source>
+      <translation>Mật khẩu ngắn hơn %1 ký tự</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="207"/>
+      <source>The password is too short</source>
+      <translation>Mật khẩu quá ngắn</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="209"/>
+      <source>The password is just rotated old one</source>
+      <translation>Mật khẩu vừa được xoay vòng cũ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="213"/>
+      <source>The password contains less than %1 character classes</source>
+      <translation>Mật khẩu chứa ít hơn %1 lớp ký tự</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="216"/>
+      <source>The password does not contain enough character classes</source>
+      <translation>Mật khẩu không chứa đủ các lớp ký tự</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="220"/>
+      <source>The password contains more than %1 same characters consecutively</source>
+      <translation>Mật khẩu chứa nhiều hơn %1 ký tự giống nhau liên tiếp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="224"/>
+      <source>The password contains too many same characters consecutively</source>
+      <translation>Mật khẩu chứa quá nhiều ký tự giống nhau liên tiếp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="228"/>
+      <source>The password contains more than %1 characters of the same class consecutively</source>
+      <translation>Mật khẩu chứa nhiều hơn %1 ký tự của cùng một lớp liên tiếp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="232"/>
+      <source>The password contains too many characters of the same class consecutively</source>
+      <translation>Mật khẩu chứa quá nhiều ký tự của cùng một lớp liên tiếp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="237"/>
+      <source>The password contains monotonic sequence longer than %1 characters</source>
+      <translation>Mật khẩu chứa chuỗi đơn điệu dài hơn %1 ký tự</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="241"/>
+      <source>The password contains too long of a monotonic character sequence</source>
+      <translation>Mật khẩu chứa một chuỗi ký tự đơn điệu quá dài</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="244"/>
+      <source>No password supplied</source>
+      <translation>Chưa cung cấp mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="246"/>
+      <source>Cannot obtain random numbers from the RNG device</source>
+      <translation>Không thể lấy số ngẫu nhiên từ thiết bị RNG</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="248"/>
+      <source>Password generation failed - required entropy too low for settings</source>
+      <translation>Tạo mật khẩu không thành công - yêu cầu entropy quá thấp để cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="254"/>
+      <source>The password fails the dictionary check - %1</source>
+      <translation>Mật khẩu không kiểm tra được từ điển - %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="257"/>
+      <source>The password fails the dictionary check</source>
+      <translation>Mật khẩu không kiểm tra được từ điển</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="261"/>
+      <source>Unknown setting - %1</source>
+      <translation>Cài đặt không xác định - %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="265"/>
+      <source>Unknown setting</source>
+      <translation>Cài đặt không xác định</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="269"/>
+      <source>Bad integer value of setting - %1</source>
+      <translation>Giá trị số nguyên không hợp lệ của cài đặt - %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="274"/>
+      <source>Bad integer value</source>
+      <translation>Giá trị số nguyên không hợp lệ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="278"/>
+      <source>Setting %1 is not of integer type</source>
+      <translation>Cài đặt %1 không thuộc kiểu số nguyên</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="283"/>
+      <source>Setting is not of integer type</source>
+      <translation>Cài đặt không thuộc kiểu số nguyên</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="287"/>
+      <source>Setting %1 is not of string type</source>
+      <translation>Cài đặt %1 không thuộc loại chuỗi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="292"/>
+      <source>Setting is not of string type</source>
+      <translation>Cài đặt không thuộc loại chuỗi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="294"/>
+      <source>Opening the configuration file failed</source>
+      <translation>Không mở được tệp cấu hình</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="296"/>
+      <source>The configuration file is malformed</source>
+      <translation>Tệp cấu hình không đúng định dạng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="298"/>
+      <source>Fatal failure</source>
+      <translation>Thất bại nghiêm trọng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/CheckPWQuality.cpp" line="300"/>
+      <source>Unknown error</source>
+      <translation>Lỗi không xác định</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/Config.cpp" line="651"/>
+      <source>Password is empty</source>
+      <translation>Mật khẩu trống</translation>
+    </message>
+  </context>
+  <context>
+    <name>PackageChooserPage</name>
+    <message>
+      <location filename="../src/modules/packagechooser/page_package.ui" line="24"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/page_package.ui" line="44"/>
+      <source>Product Name</source>
+      <translation>Tên sản phẩm</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/page_package.ui" line="57"/>
+      <source>TextLabel</source>
+      <translation>Nhãn văn bản</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/page_package.ui" line="73"/>
+      <source>Long Product Description</source>
+      <translation>Mô tả đầy đủ sản phẩm</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/PackageChooserPage.cpp" line="25"/>
+      <source>Package Selection</source>
+      <translation>Lựa chọn gói</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/PackageChooserPage.cpp" line="26"/>
+      <source>Please pick a product from the list. The selected product will be installed.</source>
+      <translation>Vui lòng chọn một sản phẩm từ danh sách. Sản phẩm đã chọn sẽ được cài đặt.</translation>
+    </message>
+  </context>
+  <context>
+    <name>PackageChooserViewStep</name>
+    <message>
+      <location filename="../src/modules/packagechooser/PackageChooserViewStep.cpp" line="61"/>
+      <source>Packages</source>
+      <translation>Gói</translation>
+    </message>
+  </context>
+  <context>
+    <name>PackageModel</name>
+    <message>
+      <location filename="../src/modules/netinstall/PackageModel.cpp" line="168"/>
+      <source>Name</source>
+      <translation>Tên</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/netinstall/PackageModel.cpp" line="168"/>
+      <source>Description</source>
+      <translation>Mô tả</translation>
+    </message>
+  </context>
+  <context>
+    <name>Page_Keyboard</name>
+    <message>
+      <location filename="../src/modules/keyboard/KeyboardPage.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/KeyboardPage.ui" line="74"/>
+      <source>Keyboard Model:</source>
+      <translation>Mẫu bàn phím:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/KeyboardPage.ui" line="135"/>
+      <source>Type here to test your keyboard</source>
+      <translation>Gõ vào đây để thử bàn phím</translation>
+    </message>
+  </context>
+  <context>
+    <name>Page_UserSetup</name>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="18"/>
+      <source>Form</source>
+      <translation>Mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="40"/>
+      <source>What is your name?</source>
+      <translation>Hãy cho Vigo biết tên đầy đủ của bạn?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="55"/>
+      <source>Your Full Name</source>
+      <translation>Tên đầy đủ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="124"/>
+      <source>What name do you want to use to log in?</source>
+      <translation>Bạn sẽ dùng tên nào để đăng nhập vào máy tính?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="148"/>
+      <source>login</source>
+      <translation>Tên đăng nhập</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="223"/>
+      <source>What is the name of this computer?</source>
+      <translation>Tên máy tính này là?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="247"/>
+      <source>&lt;small&gt;This name will be used if you make the computer visible to others on a network.&lt;/small&gt;</source>
+      <translation>&lt;small&gt;Tên này được dùng nếu máy tính được nhìn thấy trong mạng.&lt;/small&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="250"/>
+      <source>Computer Name</source>
+      <translation>Tên máy</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="325"/>
+      <source>Choose a password to keep your account safe.</source>
+      <translation>Chọn một mật khẩu để giữ an toàn cho tài khoản của bạn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="349"/>
+      <location filename="../src/modules/users/page_usersetup.ui" line="374"/>
+      <source>&lt;small&gt;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.&lt;/small&gt;</source>
+      <translation>&lt;small&gt;Nhập mật khẩu hai lần giống nhau để kiểm tra nếu gõ sai.Một mật khẩu tốt được kết hợp giữ ký tự, số và ký tự đặc biệt; ít nhất 8 ký tự và nên được thay đổi định kỳ.&lt;/small&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="355"/>
+      <location filename="../src/modules/users/page_usersetup.ui" line="525"/>
+      <source>Password</source>
+      <translation>Mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="380"/>
+      <location filename="../src/modules/users/page_usersetup.ui" line="550"/>
+      <source>Repeat Password</source>
+      <translation>Nhập lại mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="455"/>
+      <source>When this box is checked, password-strength checking is done and you will not be able to use a weak password.</source>
+      <translation>Khi chọn mục này, bạn có thể chọn mật khẩu yếu.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="458"/>
+      <source>Require strong passwords.</source>
+      <translation>Yêu cầu mật khẩu mạnh.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="465"/>
+      <source>Log in automatically without asking for the password.</source>
+      <translation>Tự đăng nhật không cần mật khẩu.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="472"/>
+      <source>Use the same password for the administrator account.</source>
+      <translation>Dùng cùng một mật khẩu cho tài khoản quản trị.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="495"/>
+      <source>Choose a password for the administrator account.</source>
+      <translation>Chọn một mật khẩu cho tài khoản quản trị.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/page_usersetup.ui" line="519"/>
+      <location filename="../src/modules/users/page_usersetup.ui" line="544"/>
+      <source>&lt;small&gt;Enter the same password twice, so that it can be checked for typing errors.&lt;/small&gt;</source>
+      <translation>&lt;small&gt;Nhập mật khẩu hai lần giống nhau để kiểm tra nếu gõ sai.&lt;/small&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>PartitionLabelsView</name>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="190"/>
+      <source>Root</source>
+      <translation>Gốc</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="194"/>
+      <source>Home</source>
+      <translation>Nhà</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="198"/>
+      <source>Boot</source>
+      <translation>Khởi động</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="203"/>
+      <source>EFI system</source>
+      <translation>Hệ thống EFI</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="207"/>
+      <source>Swap</source>
+      <translation>Hoán đổi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="211"/>
+      <source>New partition for %1</source>
+      <translation>Phân vùng mới cho %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="215"/>
+      <source>New partition</source>
+      <translation>Phân vùng mới</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="239"/>
+      <source>%1  %2</source>
+      <extracomment>size[number] filesystem[name]</extracomment>
+      <translation>%1  %2</translation>
+    </message>
+  </context>
+  <context>
+    <name>PartitionModel</name>
+    <message>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="159"/>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="199"/>
+      <source>Free Space</source>
+      <translation>Không gian trống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="163"/>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="203"/>
+      <source>New partition</source>
+      <translation>Phân vùng mới</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="296"/>
+      <source>Name</source>
+      <translation>Tên</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="298"/>
+      <source>File System</source>
+      <translation>Tập tin hệ thống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="300"/>
+      <source>Mount Point</source>
+      <translation>Điểm gắn kết</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/core/PartitionModel.cpp" line="302"/>
+      <source>Size</source>
+      <translation>Kích cỡ</translation>
+    </message>
+  </context>
+  <context>
+    <name>PartitionPage</name>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="26"/>
+      <source>Storage de&amp;vice:</source>
+      <translation>Thiết &amp;bị lưu trữ:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="55"/>
+      <source>&amp;Revert All Changes</source>
+      <translation>&amp;Hoàn tác tất cả thay đổi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="91"/>
+      <source>New Partition &amp;Table</source>
+      <translation>Phân vùng &amp;Bảng mới</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="111"/>
+      <source>Cre&amp;ate</source>
+      <translation>&amp;Tạo</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="118"/>
+      <source>&amp;Edit</source>
+      <translation>&amp;Sá»­a</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="125"/>
+      <source>&amp;Delete</source>
+      <translation>&amp;Xóa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="136"/>
+      <source>New Volume Group</source>
+      <translation>Nhóm ổ đĩa mới</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="143"/>
+      <source>Resize Volume Group</source>
+      <translation>Thay đổi kích thước nhóm ổ đĩa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="150"/>
+      <source>Deactivate Volume Group</source>
+      <translation>Hủy kích hoạt nhóm ổ đĩa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="157"/>
+      <source>Remove Volume Group</source>
+      <translation>Xóa nhóm ổ đĩa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.ui" line="184"/>
+      <source>I&amp;nstall boot loader on:</source>
+      <translation>&amp;Cài đặt bộ tải khởi động trên:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="219"/>
+      <source>Are you sure you want to create a new partition table on %1?</source>
+      <translation>Bạn có chắc chắn muốn tạo một bảng phân vùng mới trên %1 không?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="254"/>
+      <source>Can not create new partition</source>
+      <translation>Không thể tạo phân vùng mới</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="255"/>
+      <source>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.</source>
+      <translation>Bảng phân vùng trên %1 đã có %2 phân vùng chính và không thể thêm được nữa. Vui lòng xóa một phân vùng chính và thêm một phân vùng mở rộng, thay vào đó.</translation>
+    </message>
+  </context>
+  <context>
+    <name>PartitionViewStep</name>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="69"/>
+      <source>Gathering system information...</source>
+      <translation>Thu thập thông tin hệ thống ...</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="124"/>
+      <source>Partitions</source>
+      <translation>Phân vùng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="162"/>
+      <source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system.</source>
+      <translation>Cài đặt %1 &lt;strong&gt; cùng với &lt;/strong&gt; hệ điều hành khác.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="166"/>
+      <source>&lt;strong&gt;Erase&lt;/strong&gt; disk and install %1.</source>
+      <translation>&lt;strong&gt; Xóa &lt;/strong&gt; đĩa và cài đặt %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="169"/>
+      <source>&lt;strong&gt;Replace&lt;/strong&gt; a partition with %1.</source>
+      <translation>&lt;strong&gt;thay thế&lt;/strong&gt; một phân vùng với %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="173"/>
+      <source>&lt;strong&gt;Manual&lt;/strong&gt; partitioning.</source>
+      <translation>Phân vùng &lt;strong&gt; thủ công &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="186"/>
+      <source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system on disk &lt;strong&gt;%2&lt;/strong&gt; (%3).</source>
+      <translation>Cài đặt %1 &lt;strong&gt; cùng với &lt;/strong&gt; hệ điều hành khác trên đĩa &lt;strong&gt;%2&lt;/strong&gt; (%3).</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="193"/>
+      <source>&lt;strong&gt;Erase&lt;/strong&gt; disk &lt;strong&gt;%2&lt;/strong&gt; (%3) and install %1.</source>
+      <translation>&lt;strong&gt; Xóa &lt;/strong&gt; đĩa &lt;strong&gt;%2 &lt;/strong&gt; (%3) và cài đặt %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="199"/>
+      <source>&lt;strong&gt;Replace&lt;/strong&gt; a partition on disk &lt;strong&gt;%2&lt;/strong&gt; (%3) with %1.</source>
+      <translation>&lt;strong&gt; Thay thế &lt;/strong&gt; phân vùng trên đĩa &lt;strong&gt;%2 &lt;/strong&gt; (%3) bằng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="206"/>
+      <source>&lt;strong&gt;Manual&lt;/strong&gt; partitioning on disk &lt;strong&gt;%1&lt;/strong&gt; (%2).</source>
+      <translation>Phân vùng &lt;strong&gt; thủ công &lt;/strong&gt; trên đĩa &lt;strong&gt;%1 &lt;/strong&gt; (%2).</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="215"/>
+      <source>Disk &lt;strong&gt;%1&lt;/strong&gt; (%2)</source>
+      <translation>Đĩa &lt;strong&gt;%1&lt;/strong&gt; (%2)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="241"/>
+      <source>Current:</source>
+      <translation>Hiện tại:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="259"/>
+      <source>After:</source>
+      <translation>Sau:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="426"/>
+      <source>No EFI system partition configured</source>
+      <translation>Không có hệ thống phân vùng EFI được cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="427"/>
+      <source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;To configure an EFI system partition, go back and select or create a FAT32 filesystem with the &lt;strong&gt;%3&lt;/strong&gt; flag enabled and mount point &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;You can continue without setting up an EFI system partition but your system may fail to start.</source>
+      <translation>Cần có phân vùng hệ thống EFI để khởi động %1. &lt;br/&gt; &lt;br/&gt; Để định cấu hình phân vùng hệ thống EFI, hãy quay lại và chọn hoặc tạo hệ thống tệp FAT32 với cờ &lt;strong&gt; %3 &lt;/strong&gt; được bật và gắn kết point &lt;strong&gt; %2 &lt;/strong&gt;. &lt;br/&gt; &lt;br/&gt; Bạn có thể tiếp tục mà không cần thiết lập phân vùng hệ thống EFI nhưng hệ thống của bạn có thể không khởi động được.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="441"/>
+      <source>An EFI system partition is necessary to start %1.&lt;br/&gt;&lt;br/&gt;A partition was configured with mount point &lt;strong&gt;%2&lt;/strong&gt; but its &lt;strong&gt;%3&lt;/strong&gt; flag is not set.&lt;br/&gt;To set the flag, go back and edit the partition.&lt;br/&gt;&lt;br/&gt;You can continue without setting the flag but your system may fail to start.</source>
+      <translation>Một phân vùng hệ thống EFI là cần thiết để bắt đầu %1. &lt;br/&gt; &lt;br/&gt; Một phân vùng đã được định cấu hình với điểm gắn kết &lt;strong&gt; %2 &lt;/strong&gt; nhưng cờ &lt;strong&gt; %3 &lt;/strong&gt; của nó không được đặt . &lt;br/&gt; Để đặt cờ, hãy quay lại và chỉnh sửa phân vùng. &lt;br/&gt; &lt;br/&gt; Bạn có thể tiếp tục mà không cần đặt cờ nhưng hệ thống của bạn có thể không khởi động được.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="440"/>
+      <source>EFI system partition flag not set</source>
+      <translation>Cờ phân vùng hệ thống EFI chưa được đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="467"/>
+      <source>Option to use GPT on BIOS</source>
+      <translation>Lựa chọn dùng GPT trên BIOS</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="468"/>
+      <source>A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.&lt;br/&gt;&lt;br/&gt;To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the &lt;strong&gt;bios_grub&lt;/strong&gt; flag enabled.&lt;br/&gt;&lt;br/&gt;An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT.</source>
+      <translation>Bảng phân vùng GPT là lựa chọn tốt nhất cho tất cả các hệ thống. Trình cài đặt này cũng hỗ trợ thiết lập như vậy cho các hệ thống BIOS. &lt;br/&gt; &lt;br/&gt; Để định cấu hình bảng phân vùng GPT trên BIOS, (nếu chưa thực hiện xong) hãy quay lại và đặt bảng phân vùng thành GPT, tiếp theo tạo 8 MB phân vùng chưa định dạng với cờ &lt;strong&gt; bios_grub &lt;/strong&gt; được bật. &lt;br/&gt; &lt;br/&gt; Cần có phân vùng 8 MB chưa được định dạng để khởi động %1 trên hệ thống BIOS có GPT.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="496"/>
+      <source>Boot partition not encrypted</source>
+      <translation>Phân vùng khởi động không được mã hóa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="497"/>
+      <source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.&lt;br/&gt;&lt;br/&gt;There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.&lt;br/&gt;You may continue if you wish, but filesystem unlocking will happen later during system startup.&lt;br/&gt;To encrypt the boot partition, go back and recreate it, selecting &lt;strong&gt;Encrypt&lt;/strong&gt; in the partition creation window.</source>
+      <translation>Một phân vùng khởi động riêng biệt đã được thiết lập cùng với một phân vùng gốc được mã hóa, nhưng phân vùng khởi động không được mã hóa. &lt;br/&gt; &lt;br/&gt; Có những lo ngại về bảo mật với loại thiết lập này, vì các tệp hệ thống quan trọng được lưu giữ trên một phân vùng không được mã hóa . &lt;br/&gt; Bạn có thể tiếp tục nếu muốn, nhưng việc mở khóa hệ thống tệp sẽ diễn ra sau trong quá trình khởi động hệ thống. &lt;br/&gt; Để mã hóa phân vùng khởi động, hãy quay lại và tạo lại nó, chọn &lt;strong&gt; Mã hóa &lt;/strong&gt; trong phân vùng cửa sổ tạo.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="626"/>
+      <source>has at least one disk device available.</source>
+      <translation>có sẵn ít nhất một thiết bị đĩa.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="627"/>
+      <source>There are no partitions to install on.</source>
+      <translation>Không có phân vùng để cài đặt.</translation>
+    </message>
+  </context>
+  <context>
+    <name>PlasmaLnfJob</name>
+    <message>
+      <location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="30"/>
+      <source>Plasma Look-and-Feel Job</source>
+      <translation>Công việc Plasma Look-and-Feel</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="62"/>
+      <location filename="../src/modules/plasmalnf/PlasmaLnfJob.cpp" line="63"/>
+      <source>Could not select KDE Plasma Look-and-Feel package</source>
+      <translation>Không thể chọn gói KDE Plasma Look-and-Feel</translation>
+    </message>
+  </context>
+  <context>
+    <name>PlasmaLnfPage</name>
+    <message>
+      <location filename="../src/modules/plasmalnf/page_plasmalnf.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="61"/>
+      <source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source>
+      <translation>Vui lòng chọn giao diện cho Máy tính để bàn KDE Plasma. Bạn cũng có thể bỏ qua bước này và định cấu hình giao diện sau khi hệ thống được thiết lập. Nhấp vào lựa chọn giao diện sẽ cung cấp cho bạn bản xem trước trực tiếp của giao diện đó.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="66"/>
+      <source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source>
+      <translation>Vui lòng chọn giao diện cho Máy tính để bàn KDE Plasma. Bạn cũng có thể bỏ qua bước này và định cấu hình giao diện sau khi hệ thống được thiết lập. Nhấp vào lựa chọn giao diện sẽ cung cấp cho bạn bản xem trước trực tiếp của giao diện đó.</translation>
+    </message>
+  </context>
+  <context>
+    <name>PlasmaLnfViewStep</name>
+    <message>
+      <location filename="../src/modules/plasmalnf/PlasmaLnfViewStep.cpp" line="61"/>
+      <source>Look-and-Feel</source>
+      <translation>Look-and-Feel</translation>
+    </message>
+  </context>
+  <context>
+    <name>PreserveFiles</name>
+    <message>
+      <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="79"/>
+      <source>Saving files for later ...</source>
+      <translation>Đang lưu tập tin để dùng sau ...</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="118"/>
+      <source>No files configured to save for later.</source>
+      <translation>Không có tệp nào được định cấu hình để lưu sau này.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="172"/>
+      <source>Not all of the configured files could be preserved.</source>
+      <translation>Không phải tất cả các tệp đã định cấu hình đều có thể được giữ nguyên.</translation>
+    </message>
+  </context>
+  <context>
+    <name>ProcessResult</name>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="412"/>
+      <source>
+There was no output from the command.</source>
+      <translation>
+Không có đầu ra từ lệnh.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="413"/>
+      <source>
+Output:
+</source>
+      <translation>
+Đầu ra:
+</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="417"/>
+      <source>External command crashed.</source>
+      <translation>Lệnh bên ngoài bị lỗi.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="418"/>
+      <source>Command &lt;i&gt;%1&lt;/i&gt; crashed.</source>
+      <translation>Lệnh &lt;i&gt;%1&lt;/i&gt; bị lỗi.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="423"/>
+      <source>External command failed to start.</source>
+      <translation>Lệnh ngoài không thể bắt đầu.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="424"/>
+      <source>Command &lt;i&gt;%1&lt;/i&gt; failed to start.</source>
+      <translation>Lệnh &lt;i&gt;%1&lt;/i&gt; không thể bắt đầu.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="428"/>
+      <source>Internal error when starting command.</source>
+      <translation>Lỗi nội bộ khi bắt đầu lệnh.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="429"/>
+      <source>Bad parameters for process job call.</source>
+      <translation>Tham số không hợp lệ cho lệnh gọi công việc của quy trình.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="433"/>
+      <source>External command failed to finish.</source>
+      <translation>Không thể hoàn tất lệnh bên ngoài.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="434"/>
+      <source>Command &lt;i&gt;%1&lt;/i&gt; failed to finish in %2 seconds.</source>
+      <translation>Lệnh &lt;i&gt;%1&lt;/i&gt; không thể hoàn thành trong %2 giây.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="441"/>
+      <source>External command finished with errors.</source>
+      <translation>Lệnh bên ngoài kết thúc với lỗi.</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="442"/>
+      <source>Command &lt;i&gt;%1&lt;/i&gt; finished with exit code %2.</source>
+      <translation>Lệnh &lt;i&gt;%1&lt;/i&gt; hoàn thành với lỗi %2.</translation>
+    </message>
+  </context>
+  <context>
+    <name>QObject</name>
+    <message>
+      <location filename="../src/libcalamares/locale/Label.cpp" line="29"/>
+      <source>%1 (%2)</source>
+      <translation>%1 (%2)</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/partition/FileSystem.cpp" line="28"/>
+      <source>unknown</source>
+      <translation>không xác định</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/partition/FileSystem.cpp" line="30"/>
+      <source>extended</source>
+      <translation>gia tăng</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/partition/FileSystem.cpp" line="32"/>
+      <source>unformatted</source>
+      <translation>không định dạng</translation>
+    </message>
+    <message>
+      <location filename="../src/libcalamares/partition/FileSystem.cpp" line="34"/>
+      <source>swap</source>
+      <translation>hoán đổi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="90"/>
+      <source>Default Keyboard Model</source>
+      <translation>Mẫu bàn phím mặc định</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="136"/>
+      <location filename="../src/modules/keyboard/keyboardwidget/keyboardglobal.cpp" line="173"/>
+      <source>Default</source>
+      <translation>Mặc định</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/machineid/Workers.cpp" line="64"/>
+      <location filename="../src/modules/machineid/Workers.cpp" line="72"/>
+      <location filename="../src/modules/machineid/Workers.cpp" line="76"/>
+      <location filename="../src/modules/machineid/Workers.cpp" line="93"/>
+      <source>File not found</source>
+      <translation>Không tìm thấy tập tin</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/machineid/Workers.cpp" line="65"/>
+      <source>Path &lt;pre&gt;%1&lt;/pre&gt; must be an absolute path.</source>
+      <translation>Đường dẫn &lt;pre&gt;%1&lt;/pre&gt; phải là đường dẫn tuyệt đối.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/machineid/MachineIdJob.cpp" line="83"/>
+      <source>Directory not found</source>
+      <translation>Thư mục không tìm thấy</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/machineid/MachineIdJob.cpp" line="84"/>
+      <location filename="../src/modules/machineid/Workers.cpp" line="94"/>
+      <source>Could not create new random file &lt;pre&gt;%1&lt;/pre&gt;.</source>
+      <translation>Không thể tạo tập tin ngẫu nhiên &lt;pre&gt;%1&lt;/pre&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/PackageModel.cpp" line="70"/>
+      <source>No product</source>
+      <translation>Không có sản phẩm</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/packagechooser/PackageModel.cpp" line="78"/>
+      <source>No description provided.</source>
+      <translation>Không có mô tả được cung cấp.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="40"/>
+      <source>(no mount point)</source>
+      <translation>(không có điểm gắn kết)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="41"/>
+      <source>Unpartitioned space or unknown partition table</source>
+      <translation>Không gian chưa được phân vùng hoặc bảng phân vùng không xác định</translation>
+    </message>
+  </context>
+  <context>
+    <name>Recommended</name>
+    <message>
+      <location filename="../src/modules/welcomeq/Recommended.qml" line="40"/>
+      <source>&lt;p&gt;This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;
+        Setup can continue, but some features might be disabled.&lt;/p&gt;</source>
+      <translation>&lt;p&gt; Máy tính này không đáp ứng một số yêu cầu được đề xuất để thiết lập %1. &lt;br/&gt;
+        Có thể tiếp tục thiết lập nhưng một số tính năng có thể bị tắt. &lt;/p&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>RemoveUserJob</name>
+    <message>
+      <location filename="../src/modules/removeuser/RemoveUserJob.cpp" line="34"/>
+      <source>Remove live user from target system</source>
+      <translation>Xóa người dùng trực tiếp khỏi hệ thống đích</translation>
+    </message>
+  </context>
+  <context>
+    <name>RemoveVolumeGroupJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="24"/>
+      <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="36"/>
+      <source>Remove Volume Group named %1.</source>
+      <translation>Xóa nhóm ổ đĩa có tên %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="30"/>
+      <source>Remove Volume Group named &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Xóa nhóm ổ đĩa có tên &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="48"/>
+      <source>The installer failed to remove a volume group named '%1'.</source>
+      <translation>Trình cài đặt không xóa được nhóm ổ đĩa có tên '%1'.</translation>
+    </message>
+  </context>
+  <context>
+    <name>ReplaceWidget</name>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="127"/>
+      <source>Select where to install %1.&lt;br/&gt;&lt;font color="red"&gt;Warning: &lt;/font&gt;this will delete all files on the selected partition.</source>
+      <translation>Chọn nơi cài đặt %1. &lt;br/&gt; &lt;font color = "red"&gt; Cảnh báo: &lt;/font&gt; điều này sẽ xóa tất cả các tệp trên phân vùng đã chọn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="149"/>
+      <source>The selected item does not appear to be a valid partition.</source>
+      <translation>Mục đã chọn dường như không phải là một phân vùng hợp lệ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="157"/>
+      <source>%1 cannot be installed on empty space. Please select an existing partition.</source>
+      <translation>%1 không thể được cài đặt trên không gian trống. Vui lòng chọn một phân vùng hiện có.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="167"/>
+      <source>%1 cannot be installed on an extended partition. Please select an existing primary or logical partition.</source>
+      <translation>%1 không thể được cài đặt trên một phân vùng mở rộng. Vui lòng chọn phân vùng chính hoặc phân vùng logic hiện có.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="177"/>
+      <source>%1 cannot be installed on this partition.</source>
+      <translation>%1 không thể cài đặt trên phân vùng này.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="183"/>
+      <source>Data partition (%1)</source>
+      <translation>Phân vùng dữ liệu (%1)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="203"/>
+      <source>Unknown system partition (%1)</source>
+      <translation>Phân vùng hệ thống không xác định (%1)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="207"/>
+      <source>%1 system partition (%2)</source>
+      <translation>%1 phân vùng hệ thống (%2)</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="218"/>
+      <source>&lt;strong&gt;%4&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</source>
+      <translation>&lt;strong&gt; %4 &lt;/strong&gt; &lt;br/&gt; &lt;br/&gt; Phân vùng %1 quá nhỏ đối với %2. Vui lòng chọn một phân vùng có dung lượng ít nhất là %3 GiB.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="240"/>
+      <source>&lt;strong&gt;%2&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source>
+      <translation>&lt;strong&gt; %2 &lt;/strong&gt; &lt;br/&gt; &lt;br/&gt; Không thể tìm thấy phân vùng hệ thống EFI ở bất kỳ đâu trên hệ thống này. Vui lòng quay lại và sử dụng phân vùng thủ công để thiết lập %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="251"/>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="267"/>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="292"/>
+      <source>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 will be installed on %2.&lt;br/&gt;&lt;font color="red"&gt;Warning: &lt;/font&gt;all data on partition %2 will be lost.</source>
+      <translation>&lt;strong&gt; %3 &lt;/strong&gt; &lt;br/&gt; &lt;br/&gt; %1 sẽ được cài đặt trên %2. &lt;br/&gt; &lt;font color = "red"&gt; Cảnh báo: &lt;/font&gt; tất cả dữ liệu trên phân vùng %2 sẽ bị mất.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="259"/>
+      <source>The EFI system partition at %1 will be used for starting %2.</source>
+      <translation>Phân vùng hệ thống EFI tại %1 sẽ được sử dụng để bắt đầu %2.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="275"/>
+      <source>EFI system partition:</source>
+      <translation>Phân vùng hệ thống EFI:</translation>
+    </message>
+  </context>
+  <context>
+    <name>Requirements</name>
+    <message>
+      <location filename="../src/modules/welcomeq/Requirements.qml" line="38"/>
+      <source>&lt;p&gt;This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;
+        Installation cannot continue.&lt;/p&gt;</source>
+      <translation>&lt;p&gt; Máy tính này không đáp ứng các yêu cầu tối thiểu để cài đặt %1. &lt;br/&gt;
+        Không thể tiếp tục cài đặt. &lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/Requirements.qml" line="40"/>
+      <source>&lt;p&gt;This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;
+        Setup can continue, but some features might be disabled.&lt;/p&gt;</source>
+      <translation>&lt;p&gt; Máy tính này không đáp ứng một số yêu cầu được đề xuất để thiết lập %1. &lt;br/&gt;
+        Có thể tiếp tục thiết lập nhưng một số tính năng có thể bị tắt. &lt;/p&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>ResizeFSJob</name>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="46"/>
+      <source>Resize Filesystem Job</source>
+      <translation>Thay đổi kích thước tệp công việc hệ thống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/>
+      <source>Invalid configuration</source>
+      <translation>Cấu hình không hợp lệ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/>
+      <source>The file-system resize job has an invalid configuration and will not run.</source>
+      <translation>Công việc thay đổi kích thước hệ thống tệp có cấu hình không hợp lệ và sẽ không chạy.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/>
+      <source>KPMCore not Available</source>
+      <translation>KPMCore không khả dụng</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="176"/>
+      <source>Calamares cannot start KPMCore for the file-system resize job.</source>
+      <translation>Calamares không thể khởi động KPMCore cho công việc thay đổi kích thước hệ thống tệp.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="184"/>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="193"/>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="204"/>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="213"/>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="231"/>
+      <source>Resize Failed</source>
+      <translation>Thay đổi kích thước không thành công</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/>
+      <source>The filesystem %1 could not be found in this system, and cannot be resized.</source>
+      <translation>Không thể tìm thấy tệp hệ thống %1 trong hệ thống này và không thể thay đổi kích thước.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/>
+      <source>The device %1 could not be found in this system, and cannot be resized.</source>
+      <translation>Không thể tìm thấy thiết bị %1 trong hệ thống này và không thể thay đổi kích thước.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/>
+      <source>The filesystem %1 cannot be resized.</source>
+      <translation>Không thể thay đổi kích thước tệp hệ thống %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="196"/>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="207"/>
+      <source>The device %1 cannot be resized.</source>
+      <translation>Không thể thay đổi kích thước thiết bị %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="214"/>
+      <source>The filesystem %1 must be resized, but cannot.</source>
+      <translation>Hệ thống tệp %1 phải được thay đổi kích thước, nhưng không thể.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="215"/>
+      <source>The device %1 must be resized, but cannot</source>
+      <translation>Thiết bị %1 phải được thay đổi kích thước, nhưng không thể</translation>
+    </message>
+  </context>
+  <context>
+    <name>ResizePartitionJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="40"/>
+      <source>Resize partition %1.</source>
+      <translation>Đổi kích thước phân vùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="47"/>
+      <source>Resize &lt;strong&gt;%2MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; to &lt;strong&gt;%3MiB&lt;/strong&gt;.</source>
+      <translation>Thay đổi kích thước &lt;strong&gt;%2MiB&lt;/strong&gt; phân vùng &lt;strong&gt;%1&lt;/strong&gt; toùng &lt;strong&gt;%3đếnMiB&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="58"/>
+      <source>Resizing %2MiB partition %1 to %3MiB.</source>
+      <translation>Thay đổi %2MiB phân vùng %1 thành %3MiB.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="77"/>
+      <source>The installer failed to resize partition %1 on disk '%2'.</source>
+      <translation>Thất bại trong việc thay đổi kích thước phân vùng %1 trên đĩa '%2'.</translation>
+    </message>
+  </context>
+  <context>
+    <name>ResizeVolumeGroupDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/ResizeVolumeGroupDialog.cpp" line="30"/>
+      <source>Resize Volume Group</source>
+      <translation>Thay đổi kích thước nhóm ổ đĩa</translation>
+    </message>
+  </context>
+  <context>
+    <name>ResizeVolumeGroupJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="27"/>
+      <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="45"/>
+      <source>Resize volume group named %1 from %2 to %3.</source>
+      <translation>Thay đổi kích thước nhóm ổ đĩa có tên %1 từ %2 thành %3.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="36"/>
+      <source>Resize volume group named &lt;strong&gt;%1&lt;/strong&gt; from &lt;strong&gt;%2&lt;/strong&gt; to &lt;strong&gt;%3&lt;/strong&gt;.</source>
+      <translation>Thay đổi kích thước nhóm ổ đĩa có tên &lt;strong&gt; %1 &lt;/strong&gt; từ &lt;strong&gt; %2 &lt;/strong&gt; thành &lt;strong&gt; %3 &lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="60"/>
+      <source>The installer failed to resize a volume group named '%1'.</source>
+      <translation>Trình cài đặt không thể thay đổi kích thước một nhóm ổ đĩa có tên ' %1'.</translation>
+    </message>
+  </context>
+  <context>
+    <name>ResultsListDialog</name>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="133"/>
+      <source>For best results, please ensure that this computer:</source>
+      <translation>Để có kết quả tốt nhất, hãy đảm bảo rằng máy tính này:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="134"/>
+      <source>System requirements</source>
+      <translation>Yêu cầu hệ thống</translation>
+    </message>
+  </context>
+  <context>
+    <name>ResultsListWidget</name>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="256"/>
+      <source>This computer does not satisfy the minimum requirements for setting up %1.&lt;br/&gt;Setup cannot continue. &lt;a href="#details"&gt;Details...&lt;/a&gt;</source>
+      <translation>Máy tính này không đáp ứng các yêu cầu tối thiểu để thiết lập %1. &lt;br/&gt; Không thể tiếp tục thiết lập. &lt;a href="#details"&gt; Chi tiết ... &lt;/a&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="260"/>
+      <source>This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;Installation cannot continue. &lt;a href="#details"&gt;Details...&lt;/a&gt;</source>
+      <translation>Máy tính này không đáp ứng các yêu cầu tối thiểu để cài đặt %1. &lt;br/&gt; Không thể tiếp tục cài đặt. &lt;a href="#details"&gt; Chi tiết ... &lt;/a&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="267"/>
+      <source>This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;Setup can continue, but some features might be disabled.</source>
+      <translation>Máy tính này không đáp ứng một số yêu cầu được khuyến nghị để thiết lập %1. &lt;br/&gt; Quá trình thiết lập có thể tiếp tục nhưng một số tính năng có thể bị tắt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="271"/>
+      <source>This computer does not satisfy some of the recommended requirements for installing %1.&lt;br/&gt;Installation can continue, but some features might be disabled.</source>
+      <translation>Máy tính này không đáp ứng một số yêu cầu được khuyến nghị để cài đặt %1. &lt;br/&gt; Quá trình cài đặt có thể tiếp tục, nhưng một số tính năng có thể bị tắt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="280"/>
+      <source>This program will ask you some questions and set up %2 on your computer.</source>
+      <translation>Chương trình này sẽ hỏi bạn một số câu hỏi và thiết lập %2 trên máy tính của bạn.</translation>
+    </message>
+  </context>
+  <context>
+    <name>ScanningDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/>
+      <source>Scanning storage devices...</source>
+      <translation>Quét thiết bị lưu trữ...</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/>
+      <source>Partitioning</source>
+      <translation>Đang phân vùng</translation>
+    </message>
+  </context>
+  <context>
+    <name>SetHostNameJob</name>
+    <message>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="37"/>
+      <source>Set hostname %1</source>
+      <translation>Đặt tên máy %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="44"/>
+      <source>Set hostname &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Đặt tên máy &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="51"/>
+      <source>Setting hostname %1.</source>
+      <translation>Đặt tên máy %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="122"/>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="129"/>
+      <source>Internal Error</source>
+      <translation>Lỗi bên trong</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="137"/>
+      <location filename="../src/modules/users/SetHostNameJob.cpp" line="146"/>
+      <source>Cannot write hostname to target system</source>
+      <translation>Không thể ghi tên máy chủ vào hệ thống đích</translation>
+    </message>
+  </context>
+  <context>
+    <name>SetKeyboardLayoutJob</name>
+    <message>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="53"/>
+      <source>Set keyboard model to %1, layout to %2-%3</source>
+      <translation>Cài đặt bàn phím kiểu %1, bố cục %2-%3</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="356"/>
+      <source>Failed to write keyboard configuration for the virtual console.</source>
+      <translation>Lỗi khi ghi cấu hình bàn phím cho virtual console.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="357"/>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="361"/>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="368"/>
+      <source>Failed to write to %1</source>
+      <translation>Lỗi khi ghi vào %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="360"/>
+      <source>Failed to write keyboard configuration for X11.</source>
+      <translation>Lỗi khi ghi cấu hình bàn phím cho X11.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboard/SetKeyboardLayoutJob.cpp" line="367"/>
+      <source>Failed to write keyboard configuration to existing /etc/default directory.</source>
+      <translation>Lỗi khi ghi cấu hình bàn phím vào thư mục /etc/default.</translation>
+    </message>
+  </context>
+  <context>
+    <name>SetPartFlagsJob</name>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="43"/>
+      <source>Set flags on partition %1.</source>
+      <translation>Chọn cờ trong phân vùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="49"/>
+      <source>Set flags on %1MiB %2 partition.</source>
+      <translation>Chọn cờ %1MiB %2 phân vùng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="53"/>
+      <source>Set flags on new partition.</source>
+      <translation>Chọn cờ trong phân vùng mới.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="65"/>
+      <source>Clear flags on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Xóa cờ trong phân vùng&lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="71"/>
+      <source>Clear flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
+      <translation>Xóa cờ trong %1MiB &lt;strong&gt;%2&lt;/strong&gt; phân vùng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/>
+      <source>Clear flags on new partition.</source>
+      <translation>Xóa cờ trong phân vùng mới.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="80"/>
+      <source>Flag partition &lt;strong&gt;%1&lt;/strong&gt; as &lt;strong&gt;%2&lt;/strong&gt;.</source>
+      <translation>Cờ phân vùng &lt;strong&gt;%1&lt;/strong&gt; như &lt;strong&gt;%2&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="89"/>
+      <source>Flag %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition as &lt;strong&gt;%3&lt;/strong&gt;.</source>
+      <translation>Cờ %1MiB &lt;strong&gt;%2&lt;/strong&gt; phân vùng như &lt;strong&gt;%3&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="96"/>
+      <source>Flag new partition as &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Cờ phân vùng mới như &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="108"/>
+      <source>Clearing flags on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Đang xóa cờ trên phân vùng &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="114"/>
+      <source>Clearing flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
+      <translation>Đang xóa cờ trên %1MiB &lt;strong&gt;%2&lt;/strong&gt; phân vùng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="119"/>
+      <source>Clearing flags on new partition.</source>
+      <translation>Đang xóa cờ trên phân vùng mới.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="124"/>
+      <source>Setting flags &lt;strong&gt;%2&lt;/strong&gt; on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>Chọn cờ &lt;strong&gt;%2&lt;/strong&gt; trong phân vùng &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="133"/>
+      <source>Setting flags &lt;strong&gt;%3&lt;/strong&gt; on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
+      <translation>Chọn cờ &lt;strong&gt;%3&lt;/strong&gt; trong %1MiB &lt;strong&gt;%2&lt;/strong&gt; phân vùng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="140"/>
+      <source>Setting flags &lt;strong&gt;%1&lt;/strong&gt; on new partition.</source>
+      <translation>Chọn cờ &lt;strong&gt;%1&lt;/strong&gt; trong phân vùng mới.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="156"/>
+      <source>The installer failed to set flags on partition %1.</source>
+      <translation>Không thể tạo cờ cho phân vùng %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>SetPasswordJob</name>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="40"/>
+      <source>Set password for user %1</source>
+      <translation>Tạo mật khẩu người dùng %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="47"/>
+      <source>Setting password for user %1.</source>
+      <translation>Đang tạo mật khẩu người dùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="81"/>
+      <source>Bad destination system path.</source>
+      <translation>Đường dẫn hệ thống đích không hợp lệ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="82"/>
+      <source>rootMountPoint is %1</source>
+      <translation>Điểm gắn kết gốc là %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="88"/>
+      <source>Cannot disable root account.</source>
+      <translation>Không thể vô hiệu hoá tài khoản quản trị.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="89"/>
+      <source>passwd terminated with error code %1.</source>
+      <translation>passwd bị kết thúc với mã lỗi %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="97"/>
+      <source>Cannot set password for user %1.</source>
+      <translation>Không thể đặt mật khẩu cho người dùng %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/SetPasswordJob.cpp" line="98"/>
+      <source>usermod terminated with error code %1.</source>
+      <translation>usermod bị chấm dứt với mã lỗi %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>SetTimezoneJob</name>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="34"/>
+      <source>Set timezone to %1/%2</source>
+      <translation>Đặt múi giờ thành %1/%2</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="62"/>
+      <source>Cannot access selected timezone path.</source>
+      <translation>Không thể truy cập đường dẫn múi giờ đã chọn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="63"/>
+      <source>Bad path: %1</source>
+      <translation>Đường dẫn sai: %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="71"/>
+      <source>Cannot set timezone.</source>
+      <translation>Không thể cài đặt múi giờ.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="72"/>
+      <source>Link creation failed, target: %1; link name: %2</source>
+      <translation>Không tạo được liên kết, target: %1; tên liên kết: %2</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="77"/>
+      <source>Cannot set timezone,</source>
+      <translation>Không thể cài đặt múi giờ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/locale/SetTimezoneJob.cpp" line="78"/>
+      <source>Cannot open /etc/timezone for writing</source>
+      <translation>Không thể mở để viết vào /etc/timezone</translation>
+    </message>
+  </context>
+  <context>
+    <name>ShellProcessJob</name>
+    <message>
+      <location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="41"/>
+      <source>Shell Processes Job</source>
+      <translation>Shell Xử lý Công việc</translation>
+    </message>
+  </context>
+  <context>
+    <name>SlideCounter</name>
+    <message>
+      <location filename="../src/qml/calamares/slideshow/SlideCounter.qml" line="27"/>
+      <source>%L1 / %L2</source>
+      <extracomment>slide counter, %1 of %2 (numeric)</extracomment>
+      <translation>%L1 / %L2</translation>
+    </message>
+  </context>
+  <context>
+    <name>SummaryPage</name>
+    <message>
+      <location filename="../src/modules/summary/SummaryPage.cpp" line="47"/>
+      <source>This is an overview of what will happen once you start the setup procedure.</source>
+      <translation>Đây là tổng quan về những gì sẽ xảy ra khi bạn bắt đầu quy trình thiết lập.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/summary/SummaryPage.cpp" line="49"/>
+      <source>This is an overview of what will happen once you start the install procedure.</source>
+      <translation>Đây là tổng quan về những gì sẽ xảy ra khi bạn bắt đầu quy trình cài đặt.</translation>
+    </message>
+  </context>
+  <context>
+    <name>SummaryViewStep</name>
+    <message>
+      <location filename="../src/modules/summary/SummaryViewStep.cpp" line="36"/>
+      <source>Summary</source>
+      <translation>Tổng quan</translation>
+    </message>
+  </context>
+  <context>
+    <name>TrackingInstallJob</name>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="37"/>
+      <source>Installation feedback</source>
+      <translation>Phản hồi cài đặt</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="43"/>
+      <source>Sending installation feedback.</source>
+      <translation>Gửi phản hồi cài đặt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="60"/>
+      <source>Internal error in install-tracking.</source>
+      <translation>Lỗi nội bộ trong theo dõi cài đặt.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="61"/>
+      <source>HTTP request timed out.</source>
+      <translation>Yêu cầu HTTP đã hết thời gian chờ.</translation>
+    </message>
+  </context>
+  <context>
+    <name>TrackingKUserFeedbackJob</name>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="122"/>
+      <source>KDE user feedback</source>
+      <translation>Người dùng KDE phản hồi</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="128"/>
+      <source>Configuring KDE user feedback.</source>
+      <translation>Định cấu hình phản hồi của người dùng KDE.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="150"/>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="156"/>
+      <source>Error in KDE user feedback configuration.</source>
+      <translation>Lỗi trong cấu hình phản hồi của người dùng KDE.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="151"/>
+      <source>Could not configure KDE user feedback correctly, script error %1.</source>
+      <translation>Không thể định cấu hình phản hồi của người dùng KDE một cách chính xác, lỗi tập lệnh %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="157"/>
+      <source>Could not configure KDE user feedback correctly, Calamares error %1.</source>
+      <translation>Không thể định cấu hình phản hồi của người dùng KDE một cách chính xác, lỗi Calamares %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>TrackingMachineUpdateManagerJob</name>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="71"/>
+      <source>Machine feedback</source>
+      <translation>Phản hồi máy</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="77"/>
+      <source>Configuring machine feedback.</source>
+      <translation>Cấu hình phản hồi máy.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="100"/>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="106"/>
+      <source>Error in machine feedback configuration.</source>
+      <translation>Lỗi cấu hình phản hồi máy.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="101"/>
+      <source>Could not configure machine feedback correctly, script error %1.</source>
+      <translation>Không thể cấu hình phản hồi máy chính xác, kịch bản lỗi %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingJobs.cpp" line="107"/>
+      <source>Could not configure machine feedback correctly, Calamares error %1.</source>
+      <translation>Không thể cấu hình phản hồi máy chính xác, lỗi %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>TrackingPage</name>
+    <message>
+      <location filename="../src/modules/tracking/page_trackingstep.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/page_trackingstep.ui" line="28"/>
+      <source>Placeholder</source>
+      <translation>Trình giữ chỗ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/page_trackingstep.ui" line="76"/>
+      <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click here to send &lt;span style=" font-weight:600;"&gt;no information at all&lt;/span&gt; about your installation.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Nhấp vào đây để gửi &lt;span style=" font-weight:600;"&gt;không có thông tin nào&lt;/span&gt; về cài đặt của bạn.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/page_trackingstep.ui" line="275"/>
+      <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href="placeholder"&gt;&lt;span style=" text-decoration: underline; color:#2980b9;"&gt;Click here for more information about user feedback&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+      <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href="placeholder"&gt;&lt;span style=" text-decoration: underline; color:#2980b9;"&gt;Bấm vào đây để biết thêm thông tin về phản hồi của người dùng&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingPage.cpp" line="86"/>
+      <source>Tracking helps %1 to see how often it is installed, what hardware it is installed on and which applications are used. To see what will be sent, please click the help icon next to each area.</source>
+      <translation>Theo dõi giúp %1 biết tần suất cài đặt, phần cứng được cài đặt trên phần cứng nào và ứng dụng nào được sử dụng. Để xem những gì sẽ được gửi, vui lòng nhấp vào biểu tượng trợ giúp bên cạnh mỗi khu vực.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingPage.cpp" line="91"/>
+      <source>By selecting this you will send information about your installation and hardware. This information will only be sent &lt;b&gt;once&lt;/b&gt; after the installation finishes.</source>
+      <translation>Bằng cách chọn này, bạn sẽ gửi thông tin về cài đặt và phần cứng của mình. Thông tin này sẽ chỉ được gửi &lt;b&gt; một lần &lt;/b&gt; sau khi quá trình cài đặt kết thúc.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingPage.cpp" line="94"/>
+      <source>By selecting this you will periodically send information about your &lt;b&gt;machine&lt;/b&gt; installation, hardware and applications, to %1.</source>
+      <translation>Bằng cách chọn này, bạn sẽ định kỳ gửi thông tin về cài đặt &lt;b&gt; máy &lt;/b&gt;, phần cứng và ứng dụng của mình cho %1.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/tracking/TrackingPage.cpp" line="98"/>
+      <source>By selecting this you will regularly send information about your &lt;b&gt;user&lt;/b&gt; installation, hardware, applications and application usage patterns, to %1.</source>
+      <translation>Bằng cách chọn này, bạn sẽ thường xuyên gửi thông tin về cài đặt &lt;b&gt; người dùng &lt;/b&gt;, phần cứng, ứng dụng và các kiểu sử dụng ứng dụng cho %1.</translation>
+    </message>
+  </context>
+  <context>
+    <name>TrackingViewStep</name>
+    <message>
+      <location filename="../src/modules/tracking/TrackingViewStep.cpp" line="49"/>
+      <source>Feedback</source>
+      <translation>Phản hồi</translation>
+    </message>
+  </context>
+  <context>
+    <name>UsersPage</name>
+    <message>
+      <location filename="../src/modules/users/UsersPage.cpp" line="156"/>
+      <source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after setup.&lt;/small&gt;</source>
+      <translation>&lt;small&gt; Nếu nhiều người cùng sử dụng máy tính này, bạn có thể tạo nhiều tài khoản sau khi thiết lập. &lt;/small&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/users/UsersPage.cpp" line="162"/>
+      <source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after installation.&lt;/small&gt;</source>
+      <translation>&lt;small&gt; Nếu nhiều người cùng sử dụng máy tính này, bạn có thể tạo nhiều tài khoản sau khi cài đặt. &lt;/small&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>UsersQmlViewStep</name>
+    <message>
+      <location filename="../src/modules/usersq/UsersQmlViewStep.cpp" line="39"/>
+      <source>Users</source>
+      <translation>Người dùng</translation>
+    </message>
+  </context>
+  <context>
+    <name>UsersViewStep</name>
+    <message>
+      <location filename="../src/modules/users/UsersViewStep.cpp" line="48"/>
+      <source>Users</source>
+      <translation>Người dùng</translation>
+    </message>
+  </context>
+  <context>
+    <name>VariantModel</name>
+    <message>
+      <location filename="../src/calamares/VariantModel.cpp" line="232"/>
+      <source>Key</source>
+      <comment>Column header for key/value</comment>
+      <translation>Khóa</translation>
+    </message>
+    <message>
+      <location filename="../src/calamares/VariantModel.cpp" line="236"/>
+      <source>Value</source>
+      <comment>Column header for key/value</comment>
+      <translation>Giá trị</translation>
+    </message>
+  </context>
+  <context>
+    <name>VolumeGroupBaseDialog</name>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="18"/>
+      <source>Create Volume Group</source>
+      <translation>Tạo nhóm ổ đĩa</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="24"/>
+      <source>List of Physical Volumes</source>
+      <translation>Danh sách các đĩa vật lý</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="34"/>
+      <source>Volume Group Name:</source>
+      <translation>Tên nhóm ổ đĩa:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="47"/>
+      <source>Volume Group Type:</source>
+      <translation>Loại nhóm ổ đĩa:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="60"/>
+      <source>Physical Extent Size:</source>
+      <translation>Kích thước phạm vi vật lý:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="70"/>
+      <source> MiB</source>
+      <translation> MiB</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="86"/>
+      <source>Total Size:</source>
+      <translation>Tổng kích thước:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="106"/>
+      <source>Used Size:</source>
+      <translation>Đã dùng:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="126"/>
+      <source>Total Sectors:</source>
+      <translation>Tổng số Sec-tơ:</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/partition/gui/VolumeGroupBaseDialog.ui" line="146"/>
+      <source>Quantity of LVs:</source>
+      <translation>Số lượng của LVs:</translation>
+    </message>
+  </context>
+  <context>
+    <name>WelcomePage</name>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="18"/>
+      <source>Form</source>
+      <translation>Biểu mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="79"/>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="98"/>
+      <source>Select application and system language</source>
+      <translation>Chọn ngôn ngữ ứng dụng và hệ thống</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
+      <source>&amp;About</source>
+      <translation>&amp;Giới thiệu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="150"/>
+      <source>Open donations website</source>
+      <translation>Mở trang web ủng hộ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="153"/>
+      <source>&amp;Donate</source>
+      <translation>Ủng &amp;hộ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="163"/>
+      <source>Open help and support website</source>
+      <translation>Mở trang web trợ giúp</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="166"/>
+      <source>&amp;Support</source>
+      <translation>&amp;Hỗ trợ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="176"/>
+      <source>Open issues and bug-tracking website</source>
+      <translation>Mở trang web theo dõi lỗi và vấn đề</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="179"/>
+      <source>&amp;Known issues</source>
+      <translation>&amp;Vấn đề đã biết</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="189"/>
+      <source>Open release notes website</source>
+      <translation>Mở trang web ghi chú phát hành</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.ui" line="192"/>
+      <source>&amp;Release notes</source>
+      <translation>&amp;Ghi chú phát hành</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="216"/>
+      <source>&lt;h1&gt;Welcome to the Calamares setup program for %1.&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với chương trình Calamares để thiết lập cho %1.&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="217"/>
+      <source>&lt;h1&gt;Welcome to %1 setup.&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với thiết lập %1.&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="222"/>
+      <source>&lt;h1&gt;Welcome to the Calamares installer for %1.&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với chương trình Calamares để cài đặt cho %1.&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="223"/>
+      <source>&lt;h1&gt;Welcome to the %1 installer.&lt;/h1&gt;</source>
+      <translation>&lt;h1&gt;Chào mừng đến với bộ cài đặt %1.&lt;/h1&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="228"/>
+      <source>%1 support</source>
+      <translation>Hỗ trợ %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/>
+      <source>About %1 setup</source>
+      <translation>Về thiết lập %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="235"/>
+      <source>About %1 installer</source>
+      <translation>Về bộ cài đặt %1</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcome/WelcomePage.cpp" line="238"/>
+      <source>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Thanks to &lt;a href="https://calamares.io/team/"&gt;the Calamares team&lt;/a&gt; and the &lt;a href="https://www.transifex.com/calamares/calamares/"&gt;Calamares translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
+      <translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;cho %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Bản quyền 2014-2017 bởi Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Bản quyền 2017-2020 bởi Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Cám ơn &lt;a href="https://calamares.io/team/"&gt;đội ngũ Calamares&lt;/a&gt; và &lt;a href="https://www.transifex.com/calamares/calamares/"&gt;các dịch giả của Calamares&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href="https://calamares.io/"&gt;Calamares&lt;/a&gt; được tài trợ bởi &lt;br/&gt;&lt;a href="http://www.blue-systems.com/"&gt;Blue Systems&lt;/a&gt; - Liberating Software.</translation>
+    </message>
+  </context>
+  <context>
+    <name>WelcomeQmlViewStep</name>
+    <message>
+      <location filename="../src/modules/welcomeq/WelcomeQmlViewStep.cpp" line="41"/>
+      <source>Welcome</source>
+      <translation>Chào mừng</translation>
+    </message>
+  </context>
+  <context>
+    <name>WelcomeViewStep</name>
+    <message>
+      <location filename="../src/modules/welcome/WelcomeViewStep.cpp" line="48"/>
+      <source>Welcome</source>
+      <translation>Chào mừng</translation>
+    </message>
+  </context>
+  <context>
+    <name>about</name>
+    <message>
+      <location filename="../src/modules/welcomeq/about.qml" line="47"/>
+      <source>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;
+                        &lt;strong&gt;%2&lt;br/&gt;
+                        for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
+                        Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;
+                        Copyright 2017-2020 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;
+                        Thanks to &lt;a href='https://calamares.io/team/'&gt;the Calamares team&lt;/a&gt;
+                        and the &lt;a href='https://www.transifex.com/calamares/calamares/'&gt;Calamares
+                        translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;
+                        &lt;a href='https://calamares.io/'&gt;Calamares&lt;/a&gt;
+                        development is sponsored by &lt;br/&gt;
+                        &lt;a href='http://www.blue-systems.com/'&gt;Blue Systems&lt;/a&gt; -
+                        Liberating Software.</source>
+      <translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;
+                        &lt;strong&gt;%2&lt;br/&gt;
+                        cho %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
+                        Bản quyền 2014-2017 bởi Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;
+                        Bản quyền 2017-2020 bởi Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;
+                        Cám ơn &lt;a href='https://calamares.io/team/'&gt;đội ngũ Calamares&lt;/a&gt;
+                        và &lt;a href='https://www.transifex.com/calamares/calamares/'&gt;các dịch giả Calamares&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;
+                        &lt;a href='https://calamares.io/'&gt;Calamares&lt;/a&gt;
+                        được tài trợ bởi &lt;br/&gt;
+                        &lt;a href='http://www.blue-systems.com/'&gt;Blue Systems&lt;/a&gt; -
+                        Liberating Software.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/about.qml" line="96"/>
+      <source>Back</source>
+      <translation>Quay lại</translation>
+    </message>
+  </context>
+  <context>
+    <name>i18n</name>
+    <message>
+      <location filename="../src/modules/localeq/i18n.qml" line="46"/>
+      <source>&lt;h1&gt;Languages&lt;/h1&gt; &lt;/br&gt;
+                    The system locale setting affects the language and character set for some command line user interface elements. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>&lt;h1&gt;Ngôn ngữ&lt;/h1&gt; &lt;/br&gt;
+                    Cài đặt ngôn ngữ hệ thống ảnh hưởng đến ngôn ngữ và bộ ký tự cho một số thành phần giao diện người dùng dòng lệnh. Cài đặt hiện tại là &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/i18n.qml" line="106"/>
+      <source>&lt;h1&gt;Locales&lt;/h1&gt; &lt;/br&gt;
+                    The system locale setting affects the numbers and dates format. The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
+      <translation>&lt;h1&gt;Địa phương&lt;/h1&gt; &lt;/br&gt;
+                    Cài đặt ngôn ngữ hệ thống ảnh hưởng đến số và định dạng ngày tháng. Cài đặt hiện tại là &lt;strong&gt;%1&lt;/strong&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/localeq/i18n.qml" line="158"/>
+      <source>Back</source>
+      <translation>Trở lại</translation>
+    </message>
+  </context>
+  <context>
+    <name>keyboardq</name>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="45"/>
+      <source>Keyboard Model</source>
+      <translation>Mẫu bàn phím</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="377"/>
+      <source>Layouts</source>
+      <translation>Bố cục</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="148"/>
+      <source>Keyboard Layout</source>
+      <translation>Bố cục bàn phím</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="60"/>
+      <source>Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.</source>
+      <translation>Nhấp vào kiểu bàn phím ưa thích của bạn để chọn bố cục và biến thể hoặc sử dụng kiểu mặc định dựa trên phần cứng được phát hiện.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="253"/>
+      <source>Models</source>
+      <translation>Mẫu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="260"/>
+      <source>Variants</source>
+      <translation>Các biến thể</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="276"/>
+      <source>Keyboard Variant</source>
+      <translation>Các biến thể bàn phím</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/keyboardq/keyboardq.qml" line="386"/>
+      <source>Test your keyboard</source>
+      <translation>Thử bàn phím</translation>
+    </message>
+  </context>
+  <context>
+    <name>localeq</name>
+    <message>
+      <location filename="../src/modules/localeq/localeq.qml" line="81"/>
+      <source>Change</source>
+      <translation>Đổi</translation>
+    </message>
+  </context>
+  <context>
+    <name>notesqml</name>
+    <message>
+      <location filename="../src/modules/notesqml/notesqml.qml" line="50"/>
+      <source>&lt;h3&gt;%1&lt;/h3&gt;
+            &lt;p&gt;These are example release notes.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;%1&lt;/h3&gt;
+            &lt;p&gt;Đây là ghi chú phát hành mẫu.&lt;/p&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>release_notes</name>
+    <message>
+      <location filename="../src/modules/welcomeq/release_notes.qml" line="45"/>
+      <source>&lt;h3&gt;%1&lt;/h3&gt;
+            &lt;p&gt;This an example QML file, showing options in RichText with Flickable content.&lt;/p&gt;
+
+            &lt;p&gt;QML with RichText can use HTML tags, Flickable content is useful for touchscreens.&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;This is bold text&lt;/b&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;i&gt;This is italic text&lt;/i&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;u&gt;This is underlined text&lt;/u&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;center&gt;This text will be center-aligned.&lt;/center&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;s&gt;This is strikethrough&lt;/s&gt;&lt;/p&gt;
+
+            &lt;p&gt;Code example:
+            &lt;code&gt;ls -l /home&lt;/code&gt;&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;Lists:&lt;/b&gt;&lt;/p&gt;
+            &lt;ul&gt;
+                &lt;li&gt;Intel CPU systems&lt;/li&gt;
+                &lt;li&gt;AMD CPU systems&lt;/li&gt;
+            &lt;/ul&gt;
+
+            &lt;p&gt;The vertical scrollbar is adjustable, current width set to 10.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;%1&lt;/h3&gt;
+            &lt;p&gt;Đây là một tệp QML mẫu, hiển thị các tùy chọn trong RichText với nội dung Flickable..&lt;/p&gt;
+
+            &lt;p&gt;QML với RichText có thể sử dụng thẻ HTML, nội dung Flickable hữu ích cho màn hình cảm ứng.&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;Đây là văn bản in đậm&lt;/b&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;i&gt;Đây là văn bản in nghiêng&lt;/i&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;u&gt;Đây là văn bản được gạch chân&lt;/u&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;center&gt;Văn bản này sẽ được căn giữa.&lt;/center&gt;&lt;/p&gt;
+            &lt;p&gt;&lt;s&gt;Đây là đường gạch ngang&lt;/s&gt;&lt;/p&gt;
+
+            &lt;p&gt;Ví dụ về mã:
+            &lt;code&gt;ls -l /home&lt;/code&gt;&lt;/p&gt;
+
+            &lt;p&gt;&lt;b&gt;Danh sách:&lt;/b&gt;&lt;/p&gt;
+            &lt;ul&gt;
+                &lt;li&gt;Hệ thống Intel CPU&lt;/li&gt;
+                &lt;li&gt;Hệ thống AMD CPU&lt;/li&gt;
+            &lt;/ul&gt;
+
+            &lt;p&gt;Thanh cuộn dọc có thể điều chỉnh được, chiều rộng hiện tại được đặt thành 10.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/release_notes.qml" line="76"/>
+      <source>Back</source>
+      <translation>Quay lại</translation>
+    </message>
+  </context>
+  <context>
+    <name>usersq</name>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="36"/>
+      <source>Pick your user name and credentials to login and perform admin tasks</source>
+      <translation>Chọn tên bạn và chứng chỉ để đăng nhập và thực hiện các tác vụ quản trị</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="52"/>
+      <source>What is your name?</source>
+      <translation>Hãy cho Vigo biết tên đầy đủ của bạn?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="59"/>
+      <source>Your Full Name</source>
+      <translation>Tên đầy đủ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="80"/>
+      <source>What name do you want to use to log in?</source>
+      <translation>Bạn muốn dùng tên nào để đăng nhập máy tính?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="87"/>
+      <source>Login Name</source>
+      <translation>Tên đăng nhập</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="103"/>
+      <source>If more than one person will use this computer, you can create multiple accounts after installation.</source>
+      <translation>Tạo nhiều tài khoản sau khi cài đặt nếu có nhiều người dùng chung.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="118"/>
+      <source>What is the name of this computer?</source>
+      <translation>Tên của máy tính này là?</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="125"/>
+      <source>Computer Name</source>
+      <translation>Tên máy tính</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="140"/>
+      <source>This name will be used if you make the computer visible to others on a network.</source>
+      <translation>Tên này sẽ hiển thị khi bạn kết nối vào một mạng.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="155"/>
+      <source>Choose a password to keep your account safe.</source>
+      <translation>Chọn mật khẩu để giữ máy tính an toàn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="166"/>
+      <source>Password</source>
+      <translation>Mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="185"/>
+      <source>Repeat Password</source>
+      <translation>Lặp lại mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="204"/>
+      <source>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.</source>
+      <translation>Nhập lại mật khẩu hai lần để kiểm tra. Một mật khẩu tốt phải có ít nhất 8 ký tự và bao gồm chữ, số, ký hiệu đặc biệt. Nên được thay đổi thường xuyên.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="216"/>
+      <source>Validate passwords quality</source>
+      <translation>Xác thực chất lượng mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="226"/>
+      <source>When this box is checked, password-strength checking is done and you will not be able to use a weak password.</source>
+      <translation>Khi tích chọn, bạn có thể chọn mật khẩu yếu.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="234"/>
+      <source>Log in automatically without asking for the password</source>
+      <translation>Tự động đăng nhập không hỏi mật khẩu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="243"/>
+      <source>Reuse user password as root password</source>
+      <translation>Dùng lại mật khẩu người dùng như mật khẩu quản trị</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="253"/>
+      <source>Use the same password for the administrator account.</source>
+      <translation>Dùng cùng một mật khẩu cho tài khoản quản trị.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="268"/>
+      <source>Choose a root password to keep your account safe.</source>
+      <translation>Chọn mật khẩu quản trị để giữ máy tính an toàn.</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="279"/>
+      <source>Root Password</source>
+      <translation>Mật khẩu quản trị</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="298"/>
+      <source>Repeat Root Password</source>
+      <translation>Lặp lại mật khẩu quản trị</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/usersq/usersq.qml" line="318"/>
+      <source>Enter the same password twice, so that it can be checked for typing errors.</source>
+      <translation>Nhập lại mật khẩu hai lần để kiểm tra.</translation>
+    </message>
+  </context>
+  <context>
+    <name>welcomeq</name>
+    <message>
+      <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
+      <source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
+            &lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Chào mừng đến với bộ cài đặt %1 &lt;quote&gt;%2&lt;/quote&gt;&lt;/h3&gt;
+            &lt;p&gt;Chương trình sẽ hỏi bản vài câu hỏi và thiết lập %1 trên máy tính của bạn.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
+      <source>About</source>
+      <translation>Giới thiệu</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/>
+      <source>Support</source>
+      <translation>Hỗ trợ</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/>
+      <source>Known issues</source>
+      <translation>Các vấn đề đã biết</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/>
+      <source>Release notes</source>
+      <translation>Ghi chú phát hành</translation>
+    </message>
+    <message>
+      <location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/>
+      <source>Donate</source>
+      <translation>Ủng hộ</translation>
+    </message>
+  </context>
+</TS>
diff --git a/lang/calamares_zh_TW.ts b/lang/calamares_zh_TW.ts
index fe591894381994c8f58b9174b55618b13aa6e598..85a49ee982225e88f9b7b61311b2e385d0bd3b9c 100644
--- a/lang/calamares_zh_TW.ts
+++ b/lang/calamares_zh_TW.ts
@@ -617,17 +617,17 @@ The installer will quit and all changes will be lost.</source>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1448"/>
       <source>This storage device already has an operating system on it, but the partition table &lt;strong&gt;%1&lt;/strong&gt; is different from the needed &lt;strong&gt;%2&lt;/strong&gt;.&lt;br/&gt;</source>
-      <translation type="unfinished"/>
+      <translation>此儲存裝置上已有作業系統,但分割表 &lt;strong&gt;%1&lt;/strong&gt; 與需要的 &lt;strong&gt;%2&lt;/strong&gt; 不同。&lt;br/&gt;</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1471"/>
       <source>This storage device has one of its partitions &lt;strong&gt;mounted&lt;/strong&gt;.</source>
-      <translation type="unfinished"/>
+      <translation>此裝置&lt;strong&gt;已掛載&lt;/strong&gt;其中一個分割區。</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1476"/>
       <source>This storage device is a part of an &lt;strong&gt;inactive RAID&lt;/strong&gt; device.</source>
-      <translation type="unfinished"/>
+      <translation>此儲存裝置是&lt;strong&gt;非作用中 RAID&lt;/strong&gt; 裝置的一部份。</translation>
     </message>
     <message>
       <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1603"/>
diff --git a/lang/python/be/LC_MESSAGES/python.po b/lang/python/be/LC_MESSAGES/python.po
index c31beab74d467b8839d5458f57adb8eff0e1d3ca..b9154868bee1c53308820031f09fdd77b242530a 100644
--- a/lang/python/be/LC_MESSAGES/python.po
+++ b/lang/python/be/LC_MESSAGES/python.po
@@ -201,6 +201,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"Спіс дысплейных кіраўнікоў пусты альбо не вызначаны ў both globalstorage і "
+"displaymanager.conf."
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
@@ -314,11 +316,11 @@ msgstr "Наладка апаратнага гадзінніка."
 
 #: src/modules/mkinitfs/main.py:27
 msgid "Creating initramfs with mkinitfs."
-msgstr ""
+msgstr "Стварэнне initramfs праз mkinitfs."
 
 #: src/modules/mkinitfs/main.py:49
 msgid "Failed to run mkinitfs on the target"
-msgstr ""
+msgstr "Не атрымалася запусціць mkinitfs у пункце прызначэння"
 
 #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
 msgid "The exit code was {}"
diff --git a/lang/python/bg/LC_MESSAGES/python.po b/lang/python/bg/LC_MESSAGES/python.po
index 372847af8a37bb45af82e8d58ed8492c5e5c4b47..ca58592adc259e03e13e105ced33c0b4ab5bcd22 100644
--- a/lang/python/bg/LC_MESSAGES/python.po
+++ b/lang/python/bg/LC_MESSAGES/python.po
@@ -4,7 +4,7 @@
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 # 
 # Translators:
-# Georgi Georgiev, 2020
+# Жоро, 2020
 # 
 #, fuzzy
 msgid ""
@@ -13,7 +13,7 @@ msgstr ""
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-10-16 22:35+0200\n"
 "PO-Revision-Date: 2017-08-09 10:34+0000\n"
-"Last-Translator: Georgi Georgiev, 2020\n"
+"Last-Translator: Жоро, 2020\n"
 "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff --git a/lang/python/ca/LC_MESSAGES/python.po b/lang/python/ca/LC_MESSAGES/python.po
index 3d057cae149e25fc3e756274dedc8f25bc2b5674..1dc1d6d142c63e495924ced77ff4a110a85df63e 100644
--- a/lang/python/ca/LC_MESSAGES/python.po
+++ b/lang/python/ca/LC_MESSAGES/python.po
@@ -204,6 +204,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"La llista de gestors de pantalla és buida o no definida ni a globalstorage "
+"ni a displaymanager.conf."
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/lang/python/da/LC_MESSAGES/python.po b/lang/python/da/LC_MESSAGES/python.po
index e2603ca821a5bf1e50c304fce199dc14f4057593..6a103acbe834cd4f218829e1519c3fa9692d5081 100644
--- a/lang/python/da/LC_MESSAGES/python.po
+++ b/lang/python/da/LC_MESSAGES/python.po
@@ -204,6 +204,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"Displayhåndteringerlisten er tom eller udefineret i både globalstorage og "
+"displaymanager.conf."
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/lang/python/fi_FI/LC_MESSAGES/python.po b/lang/python/fi_FI/LC_MESSAGES/python.po
index cb15f9ae9ed3e028d4702ffd4902490e4388cfba..e4e63e57dc5e9ca0d72d6163da51f350d502f6dd 100644
--- a/lang/python/fi_FI/LC_MESSAGES/python.po
+++ b/lang/python/fi_FI/LC_MESSAGES/python.po
@@ -201,6 +201,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"Luettelo on tyhjä tai määrittelemätön, sekä globalstorage, että "
+"displaymanager.conf tiedostossa."
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/lang/python/fur/LC_MESSAGES/python.po b/lang/python/fur/LC_MESSAGES/python.po
index 3168c2f357fc96914f86933fa4cc94766590f58b..90800f4a2983b1f9bfbb1726e0b2f79b767ec321 100644
--- a/lang/python/fur/LC_MESSAGES/python.po
+++ b/lang/python/fur/LC_MESSAGES/python.po
@@ -23,11 +23,11 @@ msgstr ""
 
 #: src/modules/grubcfg/main.py:28
 msgid "Configure GRUB."
-msgstr ""
+msgstr "Configure GRUB."
 
 #: src/modules/mount/main.py:29
 msgid "Mounting partitions."
-msgstr ""
+msgstr "Montaç des partizions."
 
 #: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196
 #: src/modules/initcpiocfg/main.py:200
diff --git a/lang/python/hi/LC_MESSAGES/python.po b/lang/python/hi/LC_MESSAGES/python.po
index 2b0ab266a89de698fa2a98017e5be774e9afdd0d..d577d9fd8299cf9dc3ee2050e57f0ee10b58eb27 100644
--- a/lang/python/hi/LC_MESSAGES/python.po
+++ b/lang/python/hi/LC_MESSAGES/python.po
@@ -200,6 +200,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"globalstorage व displaymanager.conf में डिस्प्ले प्रबंधक सूची रिक्त या "
+"अपरिभाषित है।"
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/lang/python/sv/LC_MESSAGES/python.po b/lang/python/sv/LC_MESSAGES/python.po
index 0b8665e7a1a7b7634ba845c2b6dc30359204d786..d1c87de4cf936cb1df0619bd3c13f1422fe9a940 100644
--- a/lang/python/sv/LC_MESSAGES/python.po
+++ b/lang/python/sv/LC_MESSAGES/python.po
@@ -205,6 +205,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"Skärmhanterar listan är tom eller odefinierad i både globalstorage och "
+"displaymanager.conf."
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/lang/python/tg/LC_MESSAGES/python.po b/lang/python/tg/LC_MESSAGES/python.po
index d99c9e711a8d94ec8c0d261bcbc5ae08101f9601..d9886a107cf1e7e68920985c81af629923d46ec4 100644
--- a/lang/python/tg/LC_MESSAGES/python.po
+++ b/lang/python/tg/LC_MESSAGES/python.po
@@ -205,6 +205,8 @@ msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
 msgstr ""
+"Рӯйхати displaymanagers ҳам дар globalstorage ва ҳам дар displaymanager.conf"
+" холӣ ё номаълум аст."
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/lang/python/vi/LC_MESSAGES/python.po b/lang/python/vi/LC_MESSAGES/python.po
new file mode 100644
index 0000000000000000000000000000000000000000..bb9b67a96343fb0a795e195ea286699382f8bbc2
--- /dev/null
+++ b/lang/python/vi/LC_MESSAGES/python.po
@@ -0,0 +1,363 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# 
+# Translators:
+# T. Tran <transifex@emiu.net>, 2020
+# 
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-10-16 22:35+0200\n"
+"PO-Revision-Date: 2017-08-09 10:34+0000\n"
+"Last-Translator: T. Tran <transifex@emiu.net>, 2020\n"
+"Language-Team: Vietnamese (https://www.transifex.com/calamares/teams/20061/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/modules/grubcfg/main.py:28
+msgid "Configure GRUB."
+msgstr "Cấu hình GRUB"
+
+#: src/modules/mount/main.py:29
+msgid "Mounting partitions."
+msgstr "Đang gắn kết các phân vùng."
+
+#: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196
+#: src/modules/initcpiocfg/main.py:200
+#: src/modules/luksopenswaphookcfg/main.py:86
+#: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164
+#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89
+#: src/modules/openrcdmcryptcfg/main.py:69
+#: src/modules/openrcdmcryptcfg/main.py:73 src/modules/fstab/main.py:361
+#: src/modules/fstab/main.py:367 src/modules/localecfg/main.py:135
+#: src/modules/networkcfg/main.py:39
+msgid "Configuration Error"
+msgstr "Lỗi cấu hình"
+
+#: src/modules/mount/main.py:142 src/modules/initcpiocfg/main.py:197
+#: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165
+#: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:70
+#: src/modules/fstab/main.py:362
+msgid "No partitions are defined for <pre>{!s}</pre> to use."
+msgstr "Không có phân vùng nào được định nghĩa cho <pre>{!s}</pre> để dùng."
+
+#: src/modules/services-systemd/main.py:26
+msgid "Configure systemd services"
+msgstr "Cấu hình các dịch vụ systemd"
+
+#: src/modules/services-systemd/main.py:59
+#: src/modules/services-openrc/main.py:93
+msgid "Cannot modify service"
+msgstr "Không thể sửa đổi dịch vụ"
+
+#: src/modules/services-systemd/main.py:60
+msgid ""
+"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
+msgstr ""
+"<code>systemctl {arg!s}</code> trong môi trường chroot trả về lỗi {num!s}."
+
+#: src/modules/services-systemd/main.py:63
+#: src/modules/services-systemd/main.py:67
+msgid "Cannot enable systemd service <code>{name!s}</code>."
+msgstr "Không thể bật dịch vụ systemd <code>{name!s}</code>."
+
+#: src/modules/services-systemd/main.py:65
+msgid "Cannot enable systemd target <code>{name!s}</code>."
+msgstr "Không thể bật nhóm dịch vụ systemd <code>{name!s}</code>."
+
+#: src/modules/services-systemd/main.py:69
+msgid "Cannot disable systemd target <code>{name!s}</code>."
+msgstr "Không thể tắt nhóm dịch vụ systemd <code>{name!s}</code>."
+
+#: src/modules/services-systemd/main.py:71
+msgid "Cannot mask systemd unit <code>{name!s}</code>."
+msgstr "Không thể đánh dấu đơn vị systemd <code>{name!s}</code>."
+
+#: src/modules/services-systemd/main.py:73
+msgid ""
+"Unknown systemd commands <code>{command!s}</code> and "
+"<code>{suffix!s}</code> for unit {name!s}."
+msgstr ""
+"Không nhận ra lệnh systemd <code>{command!s}</code> và "
+"<code>{suffix!s}</code> cho đơn vị {name!s}."
+
+#: src/modules/umount/main.py:31
+msgid "Unmount file systems."
+msgstr "Gỡ kết nối các hệ thống tập tin."
+
+#: src/modules/unpackfs/main.py:35
+msgid "Filling up filesystems."
+msgstr "Đang làm đầy các hệ thống tập tin."
+
+#: src/modules/unpackfs/main.py:254
+msgid "rsync failed with error code {}."
+msgstr "rsync thất bại với lỗi {}."
+
+#: src/modules/unpackfs/main.py:299
+msgid "Unpacking image {}/{}, file {}/{}"
+msgstr "Đang bung hình ảnh {}/{}, tập tin {}/{}"
+
+#: src/modules/unpackfs/main.py:314
+msgid "Starting to unpack {}"
+msgstr "Bắt đầu bung nội dung {}"
+
+#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:463
+msgid "Failed to unpack image \"{}\""
+msgstr "Bung hình ảnh thất bại \"{}\""
+
+#: src/modules/unpackfs/main.py:430
+msgid "No mount point for root partition"
+msgstr "Không có điểm kết nối cho phân vùng gốc"
+
+#: src/modules/unpackfs/main.py:431
+msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
+msgstr "globalstorage không có khoá \"rootMountPoint\", sẽ không làm gì cả"
+
+#: src/modules/unpackfs/main.py:436
+msgid "Bad mount point for root partition"
+msgstr "Sai điểm kết nối cho phân vùng gốc"
+
+#: src/modules/unpackfs/main.py:437
+msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
+msgstr "rootMountPoint không tồn tại, có giá trị là \"{}\", sẽ không làm gì cả"
+
+#: src/modules/unpackfs/main.py:453 src/modules/unpackfs/main.py:457
+#: src/modules/unpackfs/main.py:477
+msgid "Bad unsquash configuration"
+msgstr "Sai cấu hình bung nén"
+
+#: src/modules/unpackfs/main.py:454
+msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
+msgstr "Hệ thống tập tin cho \"{}\" ({}) không được hỗ trợ bởi nhân hiện tại"
+
+#: src/modules/unpackfs/main.py:458
+msgid "The source filesystem \"{}\" does not exist"
+msgstr "Hệ thống tập tin nguồn \"{}\" không tồn tại"
+
+#: src/modules/unpackfs/main.py:464
+msgid ""
+"Failed to find unsquashfs, make sure you have the squashfs-tools package "
+"installed"
+msgstr "Không tìm thấy lệnh unsquashfs, vui lòng cài đặt gói squashfs-tools"
+
+#: src/modules/unpackfs/main.py:478
+msgid "The destination \"{}\" in the target system is not a directory"
+msgstr "Hệ thống đích \"{}\" không phải là một thư mục"
+
+#: src/modules/displaymanager/main.py:514
+msgid "Cannot write KDM configuration file"
+msgstr "Không thể ghi vào tập tin cấu hình KDM"
+
+#: src/modules/displaymanager/main.py:515
+msgid "KDM config file {!s} does not exist"
+msgstr "Tập tin cấu hình KDM {!s} không tồn tại"
+
+#: src/modules/displaymanager/main.py:576
+msgid "Cannot write LXDM configuration file"
+msgstr "Không thể ghi vào tập tin cấu hình LXDM"
+
+#: src/modules/displaymanager/main.py:577
+msgid "LXDM config file {!s} does not exist"
+msgstr "Tập tin cấu hình LXDM {!s} không tồn tại"
+
+#: src/modules/displaymanager/main.py:660
+msgid "Cannot write LightDM configuration file"
+msgstr "Không thể ghi vào tập tin cấu hình LightDM"
+
+#: src/modules/displaymanager/main.py:661
+msgid "LightDM config file {!s} does not exist"
+msgstr "Tập tin cấu hình LightDM {!s} không tồn tại"
+
+#: src/modules/displaymanager/main.py:735
+msgid "Cannot configure LightDM"
+msgstr "Không thể cấu hình LXDM"
+
+#: src/modules/displaymanager/main.py:736
+msgid "No LightDM greeter installed."
+msgstr "Màn hình chào mừng LightDM không được cài đặt."
+
+#: src/modules/displaymanager/main.py:767
+msgid "Cannot write SLIM configuration file"
+msgstr "Không thể ghi vào tập tin cấu hình SLIM"
+
+#: src/modules/displaymanager/main.py:768
+msgid "SLIM config file {!s} does not exist"
+msgstr "Tập tin cấu hình SLIM {!s} không tồn tại"
+
+#: src/modules/displaymanager/main.py:894
+msgid "No display managers selected for the displaymanager module."
+msgstr ""
+"Không có trình quản lý hiển thị nào được chọn cho mô-đun quản lý hiển thị"
+
+#: src/modules/displaymanager/main.py:895
+msgid ""
+"The displaymanagers list is empty or undefined in both globalstorage and "
+"displaymanager.conf."
+msgstr ""
+"Danh sách quản lý hiện thị trống hoặc không được định nghĩa cả trong "
+"globalstorage và displaymanager.conf."
+
+#: src/modules/displaymanager/main.py:977
+msgid "Display manager configuration was incomplete"
+msgstr "Cầu hình quản lý hiện thị không hoàn tất"
+
+#: src/modules/initcpiocfg/main.py:28
+msgid "Configuring mkinitcpio."
+msgstr "Đang cấu hình mkinitcpio."
+
+#: src/modules/initcpiocfg/main.py:201
+#: src/modules/luksopenswaphookcfg/main.py:91
+#: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:74
+#: src/modules/fstab/main.py:368 src/modules/localecfg/main.py:136
+#: src/modules/networkcfg/main.py:40
+msgid "No root mount point is given for <pre>{!s}</pre> to use."
+msgstr "Không có điểm kết nối gốc cho <pre>{!s}</pre> để dùng."
+
+#: src/modules/luksopenswaphookcfg/main.py:26
+msgid "Configuring encrypted swap."
+msgstr "Đang cấu hình hoán đổi mã hoá"
+
+#: src/modules/rawfs/main.py:26
+msgid "Installing data."
+msgstr "Đang cài đặt dữ liệu."
+
+#: src/modules/services-openrc/main.py:29
+msgid "Configure OpenRC services"
+msgstr "Cấu hình dịch vụ OpenRC"
+
+#: src/modules/services-openrc/main.py:57
+msgid "Cannot add service {name!s} to run-level {level!s}."
+msgstr "Không thể thêm dịch vụ {name!s} vào run-level {level!s}."
+
+#: src/modules/services-openrc/main.py:59
+msgid "Cannot remove service {name!s} from run-level {level!s}."
+msgstr "Không thể loại bỏ dịch vụ {name!s} từ run-level {level!s}."
+
+#: src/modules/services-openrc/main.py:61
+msgid ""
+"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
+"level {level!s}."
+msgstr ""
+"Không nhận ra thao tác <code>{arg!s}</code> cho dịch vụ {name!s} ở run-level"
+" {level!s}."
+
+#: src/modules/services-openrc/main.py:94
+msgid ""
+"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
+msgstr ""
+"Lệnh <code>rc-update {arg!s}</code> trong môi trường chroot trả về lỗi "
+"{num!s}."
+
+#: src/modules/services-openrc/main.py:101
+msgid "Target runlevel does not exist"
+msgstr "Nhóm dịch vụ khởi động không tồn tại"
+
+#: src/modules/services-openrc/main.py:102
+msgid ""
+"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
+"exist."
+msgstr ""
+"Đường dẫn cho runlevel {level!s} là <code>{path!s}</code>, nhưng không tồn "
+"tại."
+
+#: src/modules/services-openrc/main.py:110
+msgid "Target service does not exist"
+msgstr "Nhóm dịch vụ không tồn tại"
+
+#: src/modules/services-openrc/main.py:111
+msgid ""
+"The path for service {name!s} is <code>{path!s}</code>, which does not "
+"exist."
+msgstr ""
+"Đường dẫn cho dịch vụ {name!s} là <code>{path!s}</code>, nhưng không tồn "
+"tại."
+
+#: src/modules/plymouthcfg/main.py:27
+msgid "Configure Plymouth theme"
+msgstr "Cấu hình giao diện Plymouth"
+
+#: src/modules/packages/main.py:50 src/modules/packages/main.py:59
+#: src/modules/packages/main.py:69
+msgid "Install packages."
+msgstr "Đang cài đặt các gói ứng dụng."
+
+#: src/modules/packages/main.py:57
+#, python-format
+msgid "Processing packages (%(count)d / %(total)d)"
+msgstr "Đang xử lý gói (%(count)d / %(total)d)"
+
+#: src/modules/packages/main.py:62
+#, python-format
+msgid "Installing one package."
+msgid_plural "Installing %(num)d packages."
+msgstr[0] "Đang cài đặt %(num)d gói ứng dụng."
+
+#: src/modules/packages/main.py:65
+#, python-format
+msgid "Removing one package."
+msgid_plural "Removing %(num)d packages."
+msgstr[0] "Đang gỡ bỏ %(num)d gói ứng dụng."
+
+#: src/modules/bootloader/main.py:42
+msgid "Install bootloader."
+msgstr "Đang cài đặt bộ khởi động."
+
+#: src/modules/hwclock/main.py:26
+msgid "Setting hardware clock."
+msgstr "Đang thiết lập đồng hồ máy tính."
+
+#: src/modules/mkinitfs/main.py:27
+msgid "Creating initramfs with mkinitfs."
+msgstr "Đang tạo initramfs bằng mkinitfs."
+
+#: src/modules/mkinitfs/main.py:49
+msgid "Failed to run mkinitfs on the target"
+msgstr "Chạy mkinitfs thất bại ở hệ thống đích"
+
+#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
+msgid "The exit code was {}"
+msgstr "Mã lỗi trả về là {}"
+
+#: src/modules/dracut/main.py:27
+msgid "Creating initramfs with dracut."
+msgstr "Đang tạo initramfs bằng dracut."
+
+#: src/modules/dracut/main.py:49
+msgid "Failed to run dracut on the target"
+msgstr "Chạy dracut thất bại ở hệ thống đích"
+
+#: src/modules/initramfscfg/main.py:32
+msgid "Configuring initramfs."
+msgstr "Đang cấu hình initramfs."
+
+#: src/modules/openrcdmcryptcfg/main.py:25
+msgid "Configuring OpenRC dmcrypt service."
+msgstr "Đang cấu hình dịch vụ OpenRC dmcrypt."
+
+#: src/modules/fstab/main.py:29
+msgid "Writing fstab."
+msgstr "Đang viết vào fstab."
+
+#: src/modules/dummypython/main.py:35
+msgid "Dummy python job."
+msgstr "Ví dụ công việc python."
+
+#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
+#: src/modules/dummypython/main.py:94
+msgid "Dummy python step {}"
+msgstr "Ví dụ python bước {}"
+
+#: src/modules/localecfg/main.py:30
+msgid "Configuring locales."
+msgstr "Đang cấu hình ngôn ngữ."
+
+#: src/modules/networkcfg/main.py:28
+msgid "Saving network configuration."
+msgstr "Đang lưu cấu hình mạng."
diff --git a/lang/python/zh_TW/LC_MESSAGES/python.po b/lang/python/zh_TW/LC_MESSAGES/python.po
index 92457638ce4081e40cc9a26216865e52bb1d4a19..4196c3d0b2d47e37495f8a0a227c740f25095a1f 100644
--- a/lang/python/zh_TW/LC_MESSAGES/python.po
+++ b/lang/python/zh_TW/LC_MESSAGES/python.po
@@ -199,7 +199,7 @@ msgstr "未在顯示管理器模組中選取顯示管理器。"
 msgid ""
 "The displaymanagers list is empty or undefined in both globalstorage and "
 "displaymanager.conf."
-msgstr ""
+msgstr "顯示管理器清單為空或在 globalstorage 與 displaymanager.conf 中皆未定義。"
 
 #: src/modules/displaymanager/main.py:977
 msgid "Display manager configuration was incomplete"
diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp
index 0960da10ac412e27d0396e781811e379c3387826..a141317e011209a25fb2454baf89ae5c93a6e077 100644
--- a/src/calamares/CalamaresWindow.cpp
+++ b/src/calamares/CalamaresWindow.cpp
@@ -271,7 +271,7 @@ flavoredWidget( Calamares::Branding::PanelFlavor flavor,
     case Calamares::Branding::PanelFlavor::None:
         return nullptr;
     }
-    NOTREACHED return nullptr;  // All enum values handled above
+    __builtin_unreachable();
 }
 
 /** @brief Adds widgets to @p layout if they belong on this @p side
diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt
index b1e40c3ae96bd003fdffc354b9af95345338b024..3964eb3e6084df4b2796fef20cc82c2731796772 100644
--- a/src/libcalamares/CMakeLists.txt
+++ b/src/libcalamares/CMakeLists.txt
@@ -86,9 +86,6 @@ if( WITH_PYTHON )
         PythonJob.cpp
         PythonJobApi.cpp
     )
-    set_source_files_properties( PythonJob.cpp
-        PROPERTIES COMPILE_FLAGS "${SUPPRESS_BOOST_WARNINGS}"
-    )
 
     include_directories(${PYTHON_INCLUDE_DIRS})
     link_directories(${PYTHON_LIBRARIES})
@@ -148,8 +145,8 @@ calamares_automoc( calamares )
 target_link_libraries( calamares
     LINK_PRIVATE
         ${OPTIONAL_PRIVATE_LIBRARIES}
-        yamlcpp
     LINK_PUBLIC
+        yamlcpp
         Qt5::Core
         KF5::CoreAddons
         ${OPTIONAL_PUBLIC_LIBRARIES}
diff --git a/src/libcalamares/PythonJob.cpp b/src/libcalamares/PythonJob.cpp
index cd066b8bd3dd2d4f1a1adee06c2e09220f12e851..6944f38e59de4ac12b8889fc067064efa18919d2 100644
--- a/src/libcalamares/PythonJob.cpp
+++ b/src/libcalamares/PythonJob.cpp
@@ -284,7 +284,7 @@ PythonJob::exec()
             return JobResult::error( message, description );
         }
     }
-    catch ( bp::error_already_set )
+    catch ( bp::error_already_set& )
     {
         QString msg;
         if ( PyErr_Occurred() )
diff --git a/src/libcalamares/geoip/Handler.cpp b/src/libcalamares/geoip/Handler.cpp
index 648ea69f49377901e0ad2ec1d2f5f48244540b6f..8ef72d99b45d8b7992ab18b14f13274df18516f4 100644
--- a/src/libcalamares/geoip/Handler.cpp
+++ b/src/libcalamares/geoip/Handler.cpp
@@ -101,7 +101,7 @@ create_interface( Handler::Type t, const QString& selector )
     case Handler::Type::Fixed:
         return std::make_unique< GeoIPFixed >( selector );
     }
-    NOTREACHED return nullptr;
+    __builtin_unreachable();
 }
 
 static RegionZonePair
diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp
index 9dfab0c8f49f2157049361f78e80d4d05eb6d59f..6a7e0a5b49aadc8ef79357031c2987e241e84243 100644
--- a/src/libcalamares/modulesystem/RequirementsModel.cpp
+++ b/src/libcalamares/modulesystem/RequirementsModel.cpp
@@ -85,16 +85,11 @@ void
 RequirementsModel::describe() const
 {
     cDebug() << "Requirements model has" << m_requirements.count() << "items";
-    bool acceptable = true;
     int count = 0;
     for ( const auto& r : m_requirements )
     {
         cDebug() << Logger::SubEntry << "requirement" << count << r.name << "satisfied?" << r.satisfied << "mandatory?"
                  << r.mandatory;
-        if ( r.mandatory && !r.satisfied )
-        {
-            acceptable = false;
-        }
         ++count;
     }
 }
diff --git a/src/libcalamares/partition/PartitionSize.cpp b/src/libcalamares/partition/PartitionSize.cpp
index d09cc6064c2f88fdc2cfaaa36de615c5973e69ce..ddd3be2ef5f40a7844736e820ec6be7b2454b5dc 100644
--- a/src/libcalamares/partition/PartitionSize.cpp
+++ b/src/libcalamares/partition/PartitionSize.cpp
@@ -139,9 +139,7 @@ PartitionSize::toBytes( qint64 totalSectors, qint64 sectorSize ) const
     case SizeUnit::GiB:
         return toBytes();
     }
-
-    // notreached
-    return -1;
+    __builtin_unreachable();
 }
 
 qint64
@@ -178,9 +176,7 @@ PartitionSize::toBytes( qint64 totalBytes ) const
     case SizeUnit::GiB:
         return toBytes();
     }
-
-    // notreached
-    return -1;
+    __builtin_unreachable();
 }
 
 qint64
@@ -211,7 +207,7 @@ PartitionSize::toBytes() const
     case SizeUnit::GiB:
         return CalamaresUtils::GiBtoBytes( static_cast< unsigned long long >( value() ) );
     }
-    NOTREACHED return -1;
+    __builtin_unreachable();
 }
 
 bool
@@ -237,7 +233,7 @@ PartitionSize::operator<( const PartitionSize& other ) const
     case SizeUnit::GiB:
         return ( toBytes() < other.toBytes() );
     }
-    NOTREACHED return false;
+    __builtin_unreachable();
 }
 
 bool
@@ -263,7 +259,7 @@ PartitionSize::operator>( const PartitionSize& other ) const
     case SizeUnit::GiB:
         return ( toBytes() > other.toBytes() );
     }
-    NOTREACHED return false;
+    __builtin_unreachable();
 }
 
 bool
@@ -289,7 +285,7 @@ PartitionSize::operator==( const PartitionSize& other ) const
     case SizeUnit::GiB:
         return ( toBytes() == other.toBytes() );
     }
-    NOTREACHED return false;
+    __builtin_unreachable();
 }
 
 }  // namespace Partition
diff --git a/src/libcalamares/utils/Yaml.cpp b/src/libcalamares/utils/Yaml.cpp
index b787589c6e9d71977fc04cb8dcaed387103200ef..dd7523ae4cac310f024a3750caa99d518efc4188 100644
--- a/src/libcalamares/utils/Yaml.cpp
+++ b/src/libcalamares/utils/Yaml.cpp
@@ -52,9 +52,7 @@ yamlToVariant( const YAML::Node& node )
     case YAML::NodeType::Undefined:
         return QVariant();
     }
-
-    // NOTREACHED
-    return QVariant();
+    __builtin_unreachable();
 }
 
 
diff --git a/src/libcalamaresui/utils/QtCompat.h b/src/libcalamaresui/utils/QtCompat.h
new file mode 100644
index 0000000000000000000000000000000000000000..d53c01e0b6dd4fa322fae0f915bfe66041a025cd
--- /dev/null
+++ b/src/libcalamaresui/utils/QtCompat.h
@@ -0,0 +1,42 @@
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+/**@file Handle compatibility and deprecations across Qt versions
+ *
+ * Since Calamares is supposed to work with Qt 5.9 or later, it covers a
+ * lot of changes in the Qt API. Especially the later Qt 5.15 (last LTS)
+ * versions deprecate a number of enum values and parts of the QWidgets
+ * API. This file adjusts for that by introducing suitable aliases
+ * and workaround-functions.
+ *
+ * For a similar approach for QtCore, see libcalamares/utils/String.h
+ */
+
+#ifndef UTILS_QTCOMPAT_H
+#define UTILS_QTCOMPAT_H
+
+#include <QPalette>
+
+/* Avoid warnings about QPalette changes */
+constexpr static const auto WindowBackground =
+#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 )
+    QPalette::Background
+#else
+    QPalette::Window
+#endif
+    ;
+
+constexpr static const auto WindowText =
+#if QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 )
+    QPalette::Foreground
+#else
+    QPalette::WindowText
+#endif
+    ;
+
+#endif
diff --git a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp
index e3498c62ded2b1ba3c8f99e9d377f0cceb262891..bb629b217db5b0702a0257f12e28a2a3714d6577 100644
--- a/src/libcalamaresui/viewpages/ExecutionViewStep.cpp
+++ b/src/libcalamaresui/viewpages/ExecutionViewStep.cpp
@@ -42,7 +42,7 @@ makeSlideshow( QWidget* parent )
         return new Calamares::SlideshowPictures( parent );
 #ifdef WITH_QML
     case 1:
-        FALLTHRU;
+        [[fallthrough]];
     case 2:
         return new Calamares::SlideshowQML( parent );
 #endif
diff --git a/src/modules/keyboard/AdditionalLayoutInfo.h b/src/modules/keyboard/AdditionalLayoutInfo.h
new file mode 100644
index 0000000000000000000000000000000000000000..61e854d3b9ad2ea35430d9918827d6a9232b591c
--- /dev/null
+++ b/src/modules/keyboard/AdditionalLayoutInfo.h
@@ -0,0 +1,25 @@
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2020 Artem Grinev <agrinev@manjaro.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#ifndef KEYBOARD_ADDITIONAL_LAYOUT_INFO_H
+#define KEYBOARD_ADDITIONAL_LAYOUT_INFO_H
+
+#include <QString>
+
+struct AdditionalLayoutInfo
+{
+    QString additionalLayout;
+    QString additionalVariant;
+
+    QString groupSwitcher;
+
+    QString vconsoleKeymap;
+};
+
+#endif
diff --git a/src/modules/keyboard/CMakeLists.txt b/src/modules/keyboard/CMakeLists.txt
index e9037bc0318277e660345078ff45cb962a1910d6..32e9a0592e6a6e2f727e32f22156bbfa3dc01d53 100644
--- a/src/modules/keyboard/CMakeLists.txt
+++ b/src/modules/keyboard/CMakeLists.txt
@@ -7,6 +7,7 @@ calamares_add_plugin( keyboard
     TYPE viewmodule
     EXPORT_MACRO PLUGINDLLEXPORT_PRO
     SOURCES
+        Config.cpp
         KeyboardViewStep.cpp
         KeyboardPage.cpp
         KeyboardLayoutModel.cpp
diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp
index 11a20bbb74cba74376e5cfed36089a8b6d23913b..6475d9bc854cb2ad020ac544c91b30e8340cf9ea 100644
--- a/src/modules/keyboard/Config.cpp
+++ b/src/modules/keyboard/Config.cpp
@@ -18,176 +18,131 @@
 #include "utils/Logger.h"
 #include "utils/Retranslator.h"
 #include "utils/String.h"
+#include "utils/Variant.h"
 
 #include <QApplication>
 #include <QProcess>
 #include <QTimer>
 
-KeyboardModelsModel::KeyboardModelsModel( QObject* parent )
-    : QAbstractListModel( parent )
+/* Returns stringlist with suitable setxkbmap command-line arguments
+ * to set the given @p model.
+ */
+static inline QStringList
+xkbmap_model_args( const QString& model )
 {
-    detectModels();
+    QStringList r { "-model", model };
+    return r;
 }
 
-void
-KeyboardModelsModel::detectModels()
+
+/* Returns stringlist with suitable setxkbmap command-line arguments
+ * to set the given @p layout and @p variant.
+ */
+static inline QStringList
+xkbmap_layout_args( const QString& layout, const QString& variant )
 {
-    beginResetModel();
-    const auto models = KeyboardGlobal::getKeyboardModels();
-    auto index = -1;
-    for ( const auto& key : models.keys() )
+    QStringList r { "-layout", layout };
+    if ( !variant.isEmpty() )
     {
-        index++;
-        m_list << QMap< QString, QString > { { "label", key }, { "key", models[ key ] } };
-        if ( models[ key ] == "pc105" )
-        {
-            this->setCurrentIndex( index );
-        }
+        r << "-variant" << variant;
     }
-    endResetModel();
-}
-
-void
-KeyboardModelsModel::refresh()
-{
-    m_list.clear();
-    setCurrentIndex( -1 );
-    detectModels();
+    return r;
 }
 
-QVariant
-KeyboardModelsModel::data( const QModelIndex& index, int role ) const
+static inline QStringList
+xkbmap_layout_args( const QStringList& layouts,
+                    const QStringList& variants,
+                    const QString& switchOption = "grp:alt_shift_toggle" )
 {
-    if ( !index.isValid() )
+    if ( layouts.size() != variants.size() )
     {
-        return QVariant();
+        cError() << "Number of layouts and variants must be equal (empty string should be used if there is no "
+                    "corresponding variant)";
+        return QStringList();
     }
-    const auto item = m_list.at( index.row() );
-    return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ];
-}
 
-int
-KeyboardModelsModel::rowCount( const QModelIndex& ) const
-{
-    return m_list.count();
-}
-
-QHash< int, QByteArray >
-KeyboardModelsModel::roleNames() const
-{
-    return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } };
-}
+    QStringList r { "-layout", layouts.join( "," ) };
 
-int
-KeyboardModelsModel::currentIndex() const
-{
-    return m_currentIndex;
-}
+    if ( !variants.isEmpty() )
+    {
+        r << "-variant" << variants.join( "," );
+    }
 
-const QMap< QString, QString >
-KeyboardModelsModel::item( const int& index ) const
-{
-    if ( index >= m_list.count() || index < 0 )
+    if ( !switchOption.isEmpty() )
     {
-        return QMap< QString, QString >();
+        r << "-option" << switchOption;
     }
 
-    return m_list.at( index );
+    return r;
 }
 
-const QMap< QString, QString >
-KeyboardVariantsModel::item( const int& index ) const
+/* Returns group-switch setxkbd option if set
+ * or an empty string otherwise
+ */
+static inline QString
+xkbmap_query_grp_option()
 {
-    if ( index >= m_list.count() || index < 0 )
+    QProcess setxkbmapQuery;
+    setxkbmapQuery.start( "setxkbmap", { "-query" } );
+    setxkbmapQuery.waitForFinished();
+
+    QString outputLine;
+
+    do
     {
-        return QMap< QString, QString >();
+        outputLine = setxkbmapQuery.readLine();
+    } while ( setxkbmapQuery.canReadLine() && !outputLine.startsWith( "options:" ) );
+
+    if ( !outputLine.startsWith( "options:" ) )
+    {
+        return QString();
     }
 
-    return m_list.at( index );
-}
+    int index = outputLine.indexOf( "grp:" );
 
-void
-KeyboardModelsModel::setCurrentIndex( const int& index )
-{
-    if ( index >= m_list.count() || index < 0 )
+    if ( index == -1 )
     {
-        return;
+        return QString();
     }
 
-    m_currentIndex = index;
-    emit currentIndexChanged( m_currentIndex );
-}
+    //it's either in the end of line or before the other option so \s or ,
+    int lastIndex = outputLine.indexOf( QRegExp( "[\\s,]" ), index );
 
-KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent )
-    : QAbstractListModel( parent )
-{
+    return outputLine.mid( index, lastIndex - 1 );
 }
 
-int
-KeyboardVariantsModel::currentIndex() const
+AdditionalLayoutInfo
+Config::getAdditionalLayoutInfo( const QString& layout )
 {
-    return m_currentIndex;
-}
+    QFile layoutTable( ":/non-ascii-layouts" );
 
-void
-KeyboardVariantsModel::setCurrentIndex( const int& index )
-{
-    if ( index >= m_list.count() || index < 0 )
+    if ( !layoutTable.open( QIODevice::ReadOnly | QIODevice::Text ) )
     {
-        return;
+        cError() << "Non-ASCII layout table could not be opened";
+        return AdditionalLayoutInfo();
     }
 
-    m_currentIndex = index;
-    emit currentIndexChanged( m_currentIndex );
-}
+    QString tableLine;
 
-QVariant
-KeyboardVariantsModel::data( const QModelIndex& index, int role ) const
-{
-    if ( !index.isValid() )
+    do
+    {
+        tableLine = layoutTable.readLine();
+    } while ( layoutTable.canReadLine() && !tableLine.startsWith( layout ) );
+
+    if ( !tableLine.startsWith( layout ) )
     {
-        return QVariant();
+        return AdditionalLayoutInfo();
     }
-    const auto item = m_list.at( index.row() );
-    return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ];
-}
 
-int
-KeyboardVariantsModel::rowCount( const QModelIndex& ) const
-{
-    return m_list.count();
-}
+    QStringList tableEntries = tableLine.split( " ", SplitSkipEmptyParts );
 
-QHash< int, QByteArray >
-KeyboardVariantsModel::roleNames() const
-{
-    return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } };
-}
+    AdditionalLayoutInfo r;
 
-void
-KeyboardVariantsModel::setVariants( QMap< QString, QString > variants )
-{
-    m_list.clear();
-    beginResetModel();
-    for ( const auto& key : variants.keys() )
-    {
-        const auto item = QMap< QString, QString > { { "label", key }, { "key", variants[ key ] } };
-        m_list << item;
-    }
-    endResetModel();
-}
+    r.additionalLayout = tableEntries[ 1 ];
+    r.additionalVariant = tableEntries[ 2 ] == "-" ? "" : tableEntries[ 2 ];
+
+    r.vconsoleKeymap = tableEntries[ 3 ];
 
-/* Returns stringlist with suitable setxkbmap command-line arguments
- * to set the given @p layout and @p variant.
- */
-static inline QStringList
-xkbmap_args( const QString& layout, const QString& variant )
-{
-    QStringList r { "-layout", layout };
-    if ( !variant.isEmpty() )
-    {
-        r << "-variant" << variant;
-    }
     return r;
 }
 
@@ -201,9 +156,9 @@ Config::Config( QObject* parent )
 
     // Connect signals and slots
     connect( m_keyboardModelsModel, &KeyboardModelsModel::currentIndexChanged, [&]( int index ) {
-        m_selectedModel = m_keyboardModelsModel->item( index ).value( "key", "pc105" );
-        //                      Set Xorg keyboard model
-        QProcess::execute( "setxkbmap", QStringList { "-model", m_selectedModel } );
+        // Set Xorg keyboard model
+        m_selectedModel = m_keyboardModelsModel->key( index );
+        QProcess::execute( "setxkbmap", xkbmap_model_args( m_selectedModel ) );
         emit prettyStatusChanged();
     } );
 
@@ -214,9 +169,9 @@ Config::Config( QObject* parent )
     } );
 
     connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, [&]( int index ) {
-        m_selectedVariant = m_keyboardVariantsModel->item( index )[ "key" ];
+        // Set Xorg keyboard layout + variant
+        m_selectedVariant = m_keyboardVariantsModel->key( index );
 
-        // Set Xorg keyboard layout
         if ( m_setxkbmapTimer.isActive() )
         {
             m_setxkbmapTimer.stop();
@@ -224,8 +179,32 @@ Config::Config( QObject* parent )
         }
 
         connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] {
-            QProcess::execute( "setxkbmap", xkbmap_args( m_selectedLayout, m_selectedVariant ) );
-            cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant;
+            m_additionalLayoutInfo = getAdditionalLayoutInfo( m_selectedLayout );
+
+            if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() )
+            {
+                m_additionalLayoutInfo.groupSwitcher = xkbmap_query_grp_option();
+
+                if ( m_additionalLayoutInfo.groupSwitcher.isEmpty() )
+                {
+                    m_additionalLayoutInfo.groupSwitcher = "grp:alt_shift_toggle";
+                }
+
+                QProcess::execute( "setxkbmap",
+                                   xkbmap_layout_args( { m_additionalLayoutInfo.additionalLayout, m_selectedLayout },
+                                                       { m_additionalLayoutInfo.additionalVariant, m_selectedVariant },
+                                                       m_additionalLayoutInfo.groupSwitcher ) );
+
+
+                cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant << "(added "
+                         << m_additionalLayoutInfo.additionalLayout << "-" << m_additionalLayoutInfo.additionalVariant
+                         << " since current layout is not ASCII-capable)";
+            }
+            else
+            {
+                QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) );
+                cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant;
+            }
             m_setxkbmapTimer.disconnect( this );
         } );
         m_setxkbmapTimer.start( QApplication::keyboardInputInterval() );
@@ -269,7 +248,7 @@ findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout )
 }
 
 void
-Config::init()
+Config::detectCurrentKeyboardLayout()
 {
     //### Detect current keyboard layout and variant
     QString currentLayout;
@@ -281,18 +260,25 @@ Config::init()
     {
         const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts );
 
-        for ( QString line : list )
+        // A typical line looks like
+        //      xkb_symbols   { include "pc+latin+ru:2+inet(evdev)+group(alt_shift_toggle)+ctrl(swapcaps)"       };
+        for ( const auto& line : list )
         {
-            line = line.trimmed();
-            if ( !line.startsWith( "xkb_symbols" ) )
+            if ( !line.trimmed().startsWith( "xkb_symbols" ) )
             {
                 continue;
             }
 
-            line = line.remove( "}" ).remove( "{" ).remove( ";" );
-            line = line.mid( line.indexOf( "\"" ) + 1 );
+            int firstQuote = line.indexOf( '"' );
+            int lastQuote = line.lastIndexOf( '"' );
 
-            QStringList split = line.split( "+", SplitSkipEmptyParts );
+            if ( firstQuote < 0 || lastQuote < 0 || lastQuote <= firstQuote )
+            {
+                continue;
+            }
+
+            QStringList split = line.mid( firstQuote + 1, lastQuote - firstQuote ).split( "+", SplitSkipEmptyParts );
+            cDebug() << split;
             if ( split.size() >= 2 )
             {
                 currentLayout = split.at( 1 );
@@ -338,11 +324,11 @@ Config::prettyStatus() const
 {
     QString status;
     status += tr( "Set keyboard model to %1.<br/>" )
-                  .arg( m_keyboardModelsModel->item( m_keyboardModelsModel->currentIndex() )[ "label" ] );
+                  .arg( m_keyboardModelsModel->label( m_keyboardModelsModel->currentIndex() ) );
 
     QString layout = m_keyboardLayoutsModel->item( m_keyboardLayoutsModel->currentIndex() ).second.description;
     QString variant = m_keyboardVariantsModel->currentIndex() >= 0
-        ? m_keyboardVariantsModel->item( m_keyboardVariantsModel->currentIndex() )[ "label" ]
+        ? m_keyboardVariantsModel->label( m_keyboardVariantsModel->currentIndex() )
         : QString( "<default>" );
     status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant );
 
@@ -350,16 +336,17 @@ Config::prettyStatus() const
 }
 
 Calamares::JobList
-Config::createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard )
+Config::createJobs()
 {
     QList< Calamares::job_ptr > list;
 
     Calamares::Job* j = new SetKeyboardLayoutJob( m_selectedModel,
                                                   m_selectedLayout,
                                                   m_selectedVariant,
-                                                  xOrgConfFileName,
-                                                  convertedKeymapPath,
-                                                  writeEtcDefaultKeyboard );
+                                                  m_additionalLayoutInfo,
+                                                  m_xOrgConfFileName,
+                                                  m_convertedKeymapPath,
+                                                  m_writeEtcDefaultKeyboard );
     list.append( Calamares::job_ptr( j ) );
 
     return list;
@@ -393,13 +380,12 @@ Config::guessLayout( const QStringList& langParts )
                 cDebug() << "Next level:" << *countryPart;
                 for ( int variantnumber = 0; variantnumber < m_keyboardVariantsModel->rowCount(); ++variantnumber )
                 {
-                    if ( m_keyboardVariantsModel->item( variantnumber )[ "key" ].compare( *countryPart,
-                                                                                          Qt::CaseInsensitive ) )
+                    if ( m_keyboardVariantsModel->key( variantnumber ).compare( *countryPart, Qt::CaseInsensitive )
+                         == 0 )
                     {
                         m_keyboardVariantsModel->setCurrentIndex( variantnumber );
-                        cDebug() << Logger::SubEntry << "matched variant"
-                                 << m_keyboardVariantsModel->item( variantnumber )[ "key" ] << ' '
-                                 << m_keyboardVariantsModel->item( variantnumber )[ "key" ];
+                        cDebug() << Logger::SubEntry << "matched variant" << *countryPart << ' '
+                                 << m_keyboardVariantsModel->key( variantnumber );
                     }
                 }
             }
@@ -507,6 +493,13 @@ Config::finalize()
     {
         gs->insert( "keyboardLayout", m_selectedLayout );
         gs->insert( "keyboardVariant", m_selectedVariant );  //empty means default variant
+
+        if ( !m_additionalLayoutInfo.additionalLayout.isEmpty() )
+        {
+            gs->insert( "keyboardAdditionalLayout", m_additionalLayoutInfo.additionalLayout );
+            gs->insert( "keyboardAdditionalLayout", m_additionalLayoutInfo.additionalVariant );
+            gs->insert( "keyboardVConsoleKeymap", m_additionalLayoutInfo.vconsoleKeymap );
+        }
     }
 
     //FIXME: also store keyboard model for something?
@@ -529,3 +522,41 @@ Config::updateVariants( const QPersistentModelIndex& currentItem, QString curren
         }
     }
 }
+
+void
+Config::setConfigurationMap( const QVariantMap& configurationMap )
+{
+    using namespace CalamaresUtils;
+
+    if ( configurationMap.contains( "xOrgConfFileName" )
+         && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String
+         && !getString( configurationMap, "xOrgConfFileName" ).isEmpty() )
+    {
+        m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" );
+    }
+    else
+    {
+        m_xOrgConfFileName = "00-keyboard.conf";
+    }
+
+    if ( configurationMap.contains( "convertedKeymapPath" )
+         && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String
+         && !getString( configurationMap, "convertedKeymapPath" ).isEmpty() )
+    {
+        m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" );
+    }
+    else
+    {
+        m_convertedKeymapPath = QString();
+    }
+
+    if ( configurationMap.contains( "writeEtcDefaultKeyboard" )
+         && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool )
+    {
+        m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true );
+    }
+    else
+    {
+        m_writeEtcDefaultKeyboard = true;
+    }
+}
diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h
index 44a893faa2bf5a28965789fe17eb5a49524bdde6..e35193484aaf63367eb6dbd7e7f46f5424b9f184 100644
--- a/src/modules/keyboard/Config.h
+++ b/src/modules/keyboard/Config.h
@@ -11,6 +11,7 @@
 #ifndef KEYBOARD_CONFIG_H
 #define KEYBOARD_CONFIG_H
 
+#include "AdditionalLayoutInfo.h"
 #include "Job.h"
 #include "KeyboardLayoutModel.h"
 
@@ -20,63 +21,6 @@
 #include <QTimer>
 #include <QUrl>
 
-class KeyboardModelsModel : public QAbstractListModel
-{
-    Q_OBJECT
-    Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged )
-
-public:
-    explicit KeyboardModelsModel( QObject* parent = nullptr );
-    int rowCount( const QModelIndex& = QModelIndex() ) const override;
-    QVariant data( const QModelIndex& index, int role ) const override;
-
-    void setCurrentIndex( const int& index );
-    int currentIndex() const;
-    const QMap< QString, QString > item( const int& index ) const;
-
-public slots:
-    void refresh();
-
-protected:
-    QHash< int, QByteArray > roleNames() const override;
-
-private:
-    int m_currentIndex = -1;
-    QVector< QMap< QString, QString > > m_list;
-    void detectModels();
-
-signals:
-    void currentIndexChanged( int index );
-};
-
-class KeyboardVariantsModel : public QAbstractListModel
-{
-    Q_OBJECT
-    Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged )
-
-public:
-    explicit KeyboardVariantsModel( QObject* parent = nullptr );
-    void setVariants( QMap< QString, QString > variants );
-
-    int rowCount( const QModelIndex& = QModelIndex() ) const override;
-    QVariant data( const QModelIndex& index, int role ) const override;
-
-    void setCurrentIndex( const int& index );
-    int currentIndex() const;
-
-    const QMap< QString, QString > item( const int& index ) const;
-
-protected:
-    QHash< int, QByteArray > roleNames() const override;
-
-private:
-    int m_currentIndex = -1;
-    QVector< QMap< QString, QString > > m_list;
-
-signals:
-    void currentIndexChanged( int index );
-};
-
 class Config : public QObject
 {
     Q_OBJECT
@@ -88,15 +32,35 @@ class Config : public QObject
 public:
     Config( QObject* parent = nullptr );
 
-    void init();
+    void detectCurrentKeyboardLayout();
 
-    Calamares::JobList
-    createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard );
+    Calamares::JobList createJobs();
     QString prettyStatus() const;
 
     void onActivate();
     void finalize();
 
+    void setConfigurationMap( const QVariantMap& configurationMap );
+
+    static AdditionalLayoutInfo getAdditionalLayoutInfo( const QString& layout );
+
+    /* A model is a physical configuration of a keyboard, e.g. 105-key PC
+     * or TKL 88-key physical size.
+     */
+    KeyboardModelsModel* keyboardModels() const;
+    /* A layout describes the basic keycaps / language assigned to the
+     * keys of the physical keyboard, e.g. English (US) or Russian.
+     */
+    KeyboardLayoutModel* keyboardLayouts() const;
+    /* A variant describes a variant of the basic keycaps; this can
+     * concern options (dead keys), or different placements of the keycaps
+     * (dvorak).
+     */
+    KeyboardVariantsModel* keyboardVariants() const;
+
+signals:
+    void prettyStatusChanged();
+
 private:
     void guessLayout( const QStringList& langParts );
     void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() );
@@ -108,16 +72,16 @@ private:
     QString m_selectedLayout;
     QString m_selectedModel;
     QString m_selectedVariant;
-    QTimer m_setxkbmapTimer;
 
-protected:
-    KeyboardModelsModel* keyboardModels() const;
-    KeyboardLayoutModel* keyboardLayouts() const;
-    KeyboardVariantsModel* keyboardVariants() const;
+    // Layout (and corresponding info) added if current one doesn't support ASCII (e.g. Russian or Japanese)
+    AdditionalLayoutInfo m_additionalLayoutInfo;
 
+    QTimer m_setxkbmapTimer;
 
-signals:
-    void prettyStatusChanged();
+    // From configuration
+    QString m_xOrgConfFileName;
+    QString m_convertedKeymapPath;
+    bool m_writeEtcDefaultKeyboard = true;
 };
 
 
diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp
index 5b92678f60dde8df725a9fd49eb15cc5e755e62d..b8cb892f4d76f3db02a206a37261680d3cc91846 100644
--- a/src/modules/keyboard/KeyboardLayoutModel.cpp
+++ b/src/modules/keyboard/KeyboardLayoutModel.cpp
@@ -10,8 +10,108 @@
 
 #include "KeyboardLayoutModel.h"
 
+#include "utils/Logger.h"
+
 #include <algorithm>
 
+XKBListModel::XKBListModel( QObject* parent )
+    : QAbstractListModel( parent )
+{
+}
+
+int
+XKBListModel::rowCount( const QModelIndex& ) const
+{
+    return m_list.count();
+}
+
+QVariant
+XKBListModel::data( const QModelIndex& index, int role ) const
+{
+    if ( !index.isValid() )
+    {
+        return QVariant();
+    }
+    if ( index.row() < 0 || index.row() >= m_list.count() )
+    {
+        return QVariant();
+    }
+
+    const auto item = m_list.at( index.row() );
+    switch ( role )
+    {
+    case LabelRole:
+        return item.label;
+    case KeyRole:
+        return item.key;
+    default:
+        return QVariant();
+    }
+    __builtin_unreachable();
+}
+
+QString
+XKBListModel::key( int index ) const
+{
+    if ( index < 0 || index >= m_list.count() )
+    {
+        return QString();
+    }
+    return m_list[ index ].key;
+}
+
+QString
+XKBListModel::label( int index ) const
+{
+    if ( index < 0 || index >= m_list.count() )
+    {
+        return QString();
+    }
+    return m_list[ index ].label;
+}
+
+QHash< int, QByteArray >
+XKBListModel::roleNames() const
+{
+    return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } };
+}
+
+void
+XKBListModel::setCurrentIndex( int index )
+{
+    if ( index >= m_list.count() || index < 0 )
+    {
+        return;
+    }
+    if ( m_currentIndex != index )
+    {
+        m_currentIndex = index;
+        emit currentIndexChanged( m_currentIndex );
+    }
+}
+
+KeyboardModelsModel::KeyboardModelsModel( QObject* parent )
+    : XKBListModel( parent )
+{
+    // The models map is from human-readable names (!) to xkb identifier
+    const auto models = KeyboardGlobal::getKeyboardModels();
+    m_list.reserve( models.count() );
+    int index = 0;
+    for ( const auto& key : models.keys() )
+    {
+        // So here *key* is the key in the map, which is the human-readable thing,
+        //   while the struct fields are xkb-id, and human-readable
+        m_list << ModelInfo { models[ key ], key };
+        if ( models[ key ] == "pc105" )
+        {
+            m_defaultPC105 = index;
+        }
+        index++;
+    }
+
+    cDebug() << "Loaded" << m_list.count() << "keyboard models";
+}
+
 
 KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent )
     : QAbstractListModel( parent )
@@ -83,15 +183,18 @@ KeyboardLayoutModel::roleNames() const
 }
 
 void
-KeyboardLayoutModel::setCurrentIndex( const int& index )
+KeyboardLayoutModel::setCurrentIndex( int index )
 {
     if ( index >= m_layouts.count() || index < 0 )
     {
         return;
     }
 
-    m_currentIndex = index;
-    emit currentIndexChanged( m_currentIndex );
+    if ( m_currentIndex != index )
+    {
+        m_currentIndex = index;
+        emit currentIndexChanged( m_currentIndex );
+    }
 }
 
 int
@@ -99,3 +202,22 @@ KeyboardLayoutModel::currentIndex() const
 {
     return m_currentIndex;
 }
+
+
+KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent )
+    : XKBListModel( parent )
+{
+}
+
+void
+KeyboardVariantsModel::setVariants( QMap< QString, QString > variants )
+{
+    beginResetModel();
+    m_list.clear();
+    m_list.reserve( variants.count() );
+    for ( const auto& key : variants.keys() )
+    {
+        m_list << ModelInfo { variants[ key ], key };
+    }
+    endResetModel();
+}
diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h
index f4699c9f8834a2fdec02f30268c047038e3b355c..60747da55ed7508a4ba57fe8e8f249dfaed1222c 100644
--- a/src/modules/keyboard/KeyboardLayoutModel.h
+++ b/src/modules/keyboard/KeyboardLayoutModel.h
@@ -17,6 +17,85 @@
 #include <QMetaType>
 #include <QObject>
 
+/** @brief A list model with an xkb key and a human-readable string
+ *
+ * This model acts like it has a single selection, as well.
+ */
+
+class XKBListModel : public QAbstractListModel
+{
+    Q_OBJECT
+    Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged )
+
+public:
+    enum
+    {
+        LabelRole = Qt::DisplayRole,  ///< Human-readable
+        KeyRole = Qt::UserRole  ///< xkb identifier
+    };
+
+    explicit XKBListModel( QObject* parent = nullptr );
+
+    int rowCount( const QModelIndex& = QModelIndex() ) const override;
+    QVariant data( const QModelIndex& index, int role ) const override;
+    /** @brief xkb key for a given index (row)
+     *
+     * This is like calling data( QModelIndex( index ), KeyRole ).toString(),
+     * but shorter and faster. Can return an empty string if index is invalid.
+     */
+    QString key( int index ) const;
+
+    /** @brief human-readable label for a given index (row)
+     *
+     * This is like calling data( QModelIndex( index ), LabelRole ).toString(),
+     * but shorter and faster. Can return an empty string if index is invalid.
+     */
+    QString label( int index ) const;
+
+    QHash< int, QByteArray > roleNames() const override;
+
+    void setCurrentIndex( int index );
+    int currentIndex() const { return m_currentIndex; }
+
+signals:
+    void currentIndexChanged( int index );
+
+protected:
+    struct ModelInfo
+    {
+        /// XKB identifier
+        QString key;
+        /// Human-readable
+        QString label;
+    };
+    QVector< ModelInfo > m_list;
+    int m_currentIndex = -1;
+};
+
+
+/** @brief A list model of the physical keyboard formats ("models" in xkb)
+ *
+ * This model acts like it has a single selection, as well.
+ */
+class KeyboardModelsModel : public XKBListModel
+{
+    Q_OBJECT
+
+public:
+    explicit KeyboardModelsModel( QObject* parent = nullptr );
+
+    /// @brief Set the index back to PC105 (the default physical model)
+    void setCurrentIndex() { XKBListModel::setCurrentIndex( m_defaultPC105 ); }
+
+private:
+    int m_defaultPC105 = -1;  ///< The index of pc105, if there is one
+};
+
+/** @brief A list of keyboard layouts (arrangements of keycaps)
+ *
+ * Layouts can have a list of associated Variants, so this
+ * is slightly more complicated than the "regular" XKBListModel.
+ */
 class KeyboardLayoutModel : public QAbstractListModel
 {
     Q_OBJECT
@@ -35,7 +114,7 @@ public:
 
     QVariant data( const QModelIndex& index, int role ) const override;
 
-    void setCurrentIndex( const int& index );
+    void setCurrentIndex( int index );
     int currentIndex() const;
     const QPair< QString, KeyboardGlobal::KeyboardInfo > item( const int& index ) const;
 
@@ -51,4 +130,20 @@ signals:
     void currentIndexChanged( int index );
 };
 
+/** @brief A list of variants (xkb id and human-readable)
+ *
+ * The variants that are available depend on the Layout that is used,
+ * so the `setVariants()` function can be used to update the variants
+ * when the two models are related.
+ */
+class KeyboardVariantsModel : public XKBListModel
+{
+    Q_OBJECT
+
+public:
+    explicit KeyboardVariantsModel( QObject* parent = nullptr );
+
+    void setVariants( QMap< QString, QString > variants );
+};
+
 #endif  // KEYBOARDLAYOUTMODEL_H
diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp
index 07c5cf763a49ef55794146b1f6bafa8ad8f4979d..2be897e58ab6079941f16e26425c33e99fc29dd3 100644
--- a/src/modules/keyboard/KeyboardPage.cpp
+++ b/src/modules/keyboard/KeyboardPage.cpp
@@ -15,6 +15,7 @@
 
 #include "KeyboardPage.h"
 
+#include "Config.h"
 #include "KeyboardLayoutModel.h"
 #include "SetKeyboardLayoutJob.h"
 #include "keyboardwidget/keyboardpreview.h"
@@ -40,451 +41,64 @@ public:
 
 LayoutItem::~LayoutItem() {}
 
-static QPersistentModelIndex
-findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout )
-{
-    QPersistentModelIndex currentLayoutItem;
-
-    for ( int i = 0; i < klm->rowCount(); ++i )
-    {
-        QModelIndex idx = klm->index( i );
-        if ( idx.isValid() && idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() == currentLayout )
-        {
-            currentLayoutItem = idx;
-        }
-    }
-
-    return currentLayoutItem;
-}
-
-KeyboardPage::KeyboardPage( QWidget* parent )
+KeyboardPage::KeyboardPage( Config* config, QWidget* parent )
     : QWidget( parent )
     , ui( new Ui::Page_Keyboard )
     , m_keyboardPreview( new KeyBoardPreview( this ) )
-    , m_defaultIndex( 0 )
+    , m_config( config )
 {
     ui->setupUi( this );
 
     // Keyboard Preview
     ui->KBPreviewLayout->addWidget( m_keyboardPreview );
 
-    m_setxkbmapTimer.setSingleShot( true );
-
-    // Connect signals and slots
-    connect( ui->listVariant, &QListWidget::currentItemChanged, this, &KeyboardPage::onListVariantCurrentItemChanged );
-
-    connect(
-        ui->buttonRestore, &QPushButton::clicked, [this] { ui->comboBoxModel->setCurrentIndex( m_defaultIndex ); } );
-
-    connect( ui->comboBoxModel, &QComboBox::currentTextChanged, [this]( const QString& text ) {
-        QString model = m_models.value( text, "pc105" );
-
-        // Set Xorg keyboard model
-        QProcess::execute( "setxkbmap", QStringList { "-model", model } );
-    } );
-
-    CALAMARES_RETRANSLATE( ui->retranslateUi( this ); )
-}
-
-
-KeyboardPage::~KeyboardPage()
-{
-    delete ui;
-}
-
-
-void
-KeyboardPage::init()
-{
-    //### Detect current keyboard layout and variant
-    QString currentLayout;
-    QString currentVariant;
-    QProcess process;
-    process.start( "setxkbmap", QStringList() << "-print" );
-
-    if ( process.waitForFinished() )
     {
-        const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts );
-
-        for ( QString line : list )
-        {
-            line = line.trimmed();
-            if ( !line.startsWith( "xkb_symbols" ) )
-            {
-                continue;
-            }
-
-            line = line.remove( "}" ).remove( "{" ).remove( ";" );
-            line = line.mid( line.indexOf( "\"" ) + 1 );
-
-            QStringList split = line.split( "+", SplitSkipEmptyParts );
-            if ( split.size() >= 2 )
-            {
-                currentLayout = split.at( 1 );
-
-                if ( currentLayout.contains( "(" ) )
-                {
-                    int parenthesisIndex = currentLayout.indexOf( "(" );
-                    currentVariant = currentLayout.mid( parenthesisIndex + 1 ).trimmed();
-                    currentVariant.chop( 1 );
-                    currentLayout = currentLayout.mid( 0, parenthesisIndex ).trimmed();
-                }
-
-                break;
-            }
-        }
+        auto* model = config->keyboardModels();
+        model->setCurrentIndex();  // To default PC105
+        ui->physicalModelSelector->setModel( model );
+        ui->physicalModelSelector->setCurrentIndex( model->currentIndex() );
     }
-
-    //### Models
-    m_models = KeyboardGlobal::getKeyboardModels();
-    QMapIterator< QString, QString > mi( m_models );
-
-    ui->comboBoxModel->blockSignals( true );
-
-    while ( mi.hasNext() )
     {
-        mi.next();
-
-        if ( mi.value() == "pc105" )
-        {
-            m_defaultIndex = ui->comboBoxModel->count();
-        }
-
-        ui->comboBoxModel->addItem( mi.key() );
-    }
-
-    ui->comboBoxModel->blockSignals( false );
-
-    // Set to default value pc105
-    ui->comboBoxModel->setCurrentIndex( m_defaultIndex );
-
-
-    //### Layouts and Variants
-
-    KeyboardLayoutModel* klm = new KeyboardLayoutModel( this );
-    ui->listLayout->setModel( klm );
-    connect( ui->listLayout->selectionModel(),
-             &QItemSelectionModel::currentChanged,
-             this,
-             &KeyboardPage::onListLayoutCurrentItemChanged );
-
-    // Block signals
-    ui->listLayout->blockSignals( true );
-
-    QPersistentModelIndex currentLayoutItem = findLayout( klm, currentLayout );
-    if ( !currentLayoutItem.isValid() && ( ( currentLayout == "latin" ) || ( currentLayout == "pc" ) ) )
-    {
-        currentLayout = "us";
-        currentLayoutItem = findLayout( klm, currentLayout );
-    }
-
-    // Set current layout and variant
-    if ( currentLayoutItem.isValid() )
-    {
-        ui->listLayout->setCurrentIndex( currentLayoutItem );
-        updateVariants( currentLayoutItem, currentVariant );
-    }
-
-    // Unblock signals
-    ui->listLayout->blockSignals( false );
-
-    // Default to the first available layout if none was set
-    // Do this after unblocking signals so we get the default variant handling.
-    if ( !currentLayoutItem.isValid() && klm->rowCount() > 0 )
-    {
-        ui->listLayout->setCurrentIndex( klm->index( 0 ) );
+        auto* model = config->keyboardLayouts();
+        ui->layoutSelector->setModel( model );
+        ui->layoutSelector->setCurrentIndex( model->index( model->currentIndex() ) );
     }
-}
-
-
-QString
-KeyboardPage::prettyStatus() const
-{
-    QString status;
-    status += tr( "Set keyboard model to %1.<br/>" ).arg( ui->comboBoxModel->currentText() );
-
-    QString layout = ui->listLayout->currentIndex().data().toString();
-    QString variant = ui->listVariant->currentItem() ? ui->listVariant->currentItem()->text() : QString( "<default>" );
-    status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant );
-
-    return status;
-}
-
-
-QList< Calamares::job_ptr >
-KeyboardPage::createJobs( const QString& xOrgConfFileName,
-                          const QString& convertedKeymapPath,
-                          bool writeEtcDefaultKeyboard )
-{
-    QList< Calamares::job_ptr > list;
-    QString selectedModel = m_models.value( ui->comboBoxModel->currentText(), "pc105" );
-
-    Calamares::Job* j = new SetKeyboardLayoutJob( selectedModel,
-                                                  m_selectedLayout,
-                                                  m_selectedVariant,
-                                                  xOrgConfFileName,
-                                                  convertedKeymapPath,
-                                                  writeEtcDefaultKeyboard );
-    list.append( Calamares::job_ptr( j ) );
-
-    return list;
-}
-
-
-void
-KeyboardPage::guessLayout( const QStringList& langParts )
-{
-    const KeyboardLayoutModel* klm = dynamic_cast< KeyboardLayoutModel* >( ui->listLayout->model() );
-    bool foundCountryPart = false;
-    for ( auto countryPart = langParts.rbegin(); !foundCountryPart && countryPart != langParts.rend(); ++countryPart )
     {
-        cDebug() << Logger::SubEntry << "looking for locale part" << *countryPart;
-        for ( int i = 0; i < klm->rowCount(); ++i )
-        {
-            QModelIndex idx = klm->index( i );
-            QString name
-                = idx.isValid() ? idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() : QString();
-            if ( idx.isValid() && ( name.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) )
-            {
-                cDebug() << Logger::SubEntry << "matched" << name;
-                ui->listLayout->setCurrentIndex( idx );
-                foundCountryPart = true;
-                break;
-            }
-        }
-        if ( foundCountryPart )
-        {
-            ++countryPart;
-            if ( countryPart != langParts.rend() )
-            {
-                cDebug() << "Next level:" << *countryPart;
-                for ( int variantnumber = 0; variantnumber < ui->listVariant->count(); ++variantnumber )
-                {
-                    LayoutItem* variantdata = dynamic_cast< LayoutItem* >( ui->listVariant->item( variantnumber ) );
-                    if ( variantdata && ( variantdata->data.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) )
-                    {
-                        ui->listVariant->setCurrentItem( variantdata );
-                        cDebug() << Logger::SubEntry << "matched variant" << variantdata->data << ' '
-                                 << variantdata->text();
-                    }
-                }
-            }
-        }
+        auto* model = config->keyboardVariants();
+        ui->variantSelector->setModel( model );
+        ui->variantSelector->setCurrentIndex( model->index( model->currentIndex() ) );
+        cDebug() << "Variants now" << model->rowCount() << model->currentIndex();
     }
-}
-
 
-void
-KeyboardPage::onActivate()
-{
-    /* Guessing a keyboard layout based on the locale means
-     * mapping between language identifiers in <lang>_<country>
-     * format to keyboard mappings, which are <country>_<layout>
-     * format; in addition, some countries have multiple languages,
-     * so fr_BE and nl_BE want different layouts (both Belgian)
-     * and sometimes the language-country name doesn't match the
-     * keyboard-country name at all (e.g. Ellas vs. Greek).
-     *
-     * This is a table of language-to-keyboard mappings. The
-     * language identifier is the key, while the value is
-     * a string that is used instead of the real language
-     * identifier in guessing -- so it should be something
-     * like <layout>_<country>.
-     */
-    static constexpr char arabic[] = "ara";
-    static const auto specialCaseMap = QMap< std::string, std::string >( {
-        /* Most Arab countries map to Arabic keyboard (Default) */
-        { "ar_AE", arabic },
-        { "ar_BH", arabic },
-        { "ar_DZ", arabic },
-        { "ar_EG", arabic },
-        { "ar_IN", arabic },
-        { "ar_IQ", arabic },
-        { "ar_JO", arabic },
-        { "ar_KW", arabic },
-        { "ar_LB", arabic },
-        { "ar_LY", arabic },
-        /* Not Morocco: use layout ma */
-        { "ar_OM", arabic },
-        { "ar_QA", arabic },
-        { "ar_SA", arabic },
-        { "ar_SD", arabic },
-        { "ar_SS", arabic },
-        /* Not Syria: use layout sy */
-        { "ar_TN", arabic },
-        { "ar_YE", arabic },
-        { "ca_ES", "cat_ES" }, /* Catalan */
-        { "as_ES", "ast_ES" }, /* Asturian */
-        { "en_CA", "us" }, /* Canadian English */
-        { "el_CY", "gr" }, /* Greek in Cyprus */
-        { "el_GR", "gr" }, /* Greek in Greeze */
-        { "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */
-        { "ha_NG", "hausa_NG" } /* Hausa */
+    connect(
+        ui->buttonRestore, &QPushButton::clicked, [config = config] { config->keyboardModels()->setCurrentIndex(); } );
+
+    connect( ui->physicalModelSelector,
+             QOverload< int >::of( &QComboBox::currentIndexChanged ),
+             config->keyboardModels(),
+             QOverload< int >::of( &XKBListModel::setCurrentIndex ) );
+    connect( config->keyboardModels(),
+             &KeyboardModelsModel::currentIndexChanged,
+             ui->physicalModelSelector,
+             &QComboBox::setCurrentIndex );
+
+    connect( ui->layoutSelector->selectionModel(),
+             &QItemSelectionModel::currentChanged,
+             [this]( const QModelIndex& current ) { m_config->keyboardLayouts()->setCurrentIndex( current.row() ); } );
+    connect( config->keyboardLayouts(), &KeyboardLayoutModel::currentIndexChanged, [this]( int index ) {
+        ui->layoutSelector->setCurrentIndex( m_config->keyboardLayouts()->index( index ) );
     } );
 
-    ui->listLayout->setFocus();
-
-    // Try to preselect a layout, depending on language and locale
-    Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
-    QString lang = gs->value( "localeConf" ).toMap().value( "LANG" ).toString();
-
-    cDebug() << "Got locale language" << lang;
-    if ( !lang.isEmpty() )
-    {
-        // Chop off .codeset and @modifier
-        int index = lang.indexOf( '.' );
-        if ( index >= 0 )
-        {
-            lang.truncate( index );
-        }
-        index = lang.indexOf( '@' );
-        if ( index >= 0 )
-        {
-            lang.truncate( index );
-        }
-
-        lang.replace( '-', '_' );  // Normalize separators
-    }
-    if ( !lang.isEmpty() )
-    {
-        std::string lang_s = lang.toStdString();
-        if ( specialCaseMap.contains( lang_s ) )
-        {
-            QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) );
-            cDebug() << Logger::SubEntry << "special case language" << lang << "becomes" << newLang;
-            lang = newLang;
-        }
-    }
-    if ( !lang.isEmpty() )
-    {
-        const auto langParts = lang.split( '_', SplitSkipEmptyParts );
-
-        // Note that this his string is not fit for display purposes!
-        // It doesn't come from QLocale::nativeCountryName.
-        QString country = QLocale::countryToString( QLocale( lang ).country() );
-        cDebug() << Logger::SubEntry << "extracted country" << country << "::" << langParts;
-
-        guessLayout( langParts );
-    }
-}
-
-
-void
-KeyboardPage::finalize()
-{
-    Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
-    if ( !m_selectedLayout.isEmpty() )
-    {
-        gs->insert( "keyboardLayout", m_selectedLayout );
-        gs->insert( "keyboardVariant", m_selectedVariant );  //empty means default variant
-    }
-
-    //FIXME: also store keyboard model for something?
-}
-
-
-void
-KeyboardPage::updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant )
-{
-    // Block signals
-    ui->listVariant->blockSignals( true );
-
-    QMap< QString, QString > variants
-        = currentItem.data( KeyboardLayoutModel::KeyboardVariantsRole ).value< QMap< QString, QString > >();
-    QMapIterator< QString, QString > li( variants );
-    LayoutItem* defaultItem = nullptr;
-
-    ui->listVariant->clear();
-
-    while ( li.hasNext() )
-    {
-        li.next();
-
-        LayoutItem* item = new LayoutItem();
-        item->setText( li.key() );
-        item->data = li.value();
-        ui->listVariant->addItem( item );
-
-        // currentVariant defaults to QString(). It is only non-empty during the
-        // initial setup.
-        if ( li.value() == currentVariant )
-        {
-            defaultItem = item;
-        }
-    }
-
-    // Unblock signals
-    ui->listVariant->blockSignals( false );
-
-    // Set to default value
-    if ( defaultItem )
-    {
-        ui->listVariant->setCurrentItem( defaultItem );
-    }
-}
-
-
-void
-KeyboardPage::onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous )
-{
-    Q_UNUSED( previous )
-    if ( !current.isValid() )
-    {
-        return;
-    }
-
-    updateVariants( QPersistentModelIndex( current ) );
-}
-
-/* Returns stringlist with suitable setxkbmap command-line arguments
- * to set the given @p layout and @p variant.
- */
-static inline QStringList
-xkbmap_args( const QString& layout, const QString& variant )
-{
-    QStringList r { "-layout", layout };
-    if ( !variant.isEmpty() )
-    {
-        r << "-variant" << variant;
-    }
-    return r;
+    connect( ui->variantSelector->selectionModel(),
+             &QItemSelectionModel::currentChanged,
+             [this]( const QModelIndex& current ) { m_config->keyboardVariants()->setCurrentIndex( current.row() ); } );
+    connect( config->keyboardVariants(), &KeyboardVariantsModel::currentIndexChanged, [this]( int index ) {
+        ui->variantSelector->setCurrentIndex( m_config->keyboardVariants()->index( index ) );
+    } );
+    CALAMARES_RETRANSLATE( ui->retranslateUi( this ); )
 }
 
-void
-KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous )
+KeyboardPage::~KeyboardPage()
 {
-    Q_UNUSED( previous )
-
-    QPersistentModelIndex layoutIndex = ui->listLayout->currentIndex();
-    LayoutItem* variantItem = dynamic_cast< LayoutItem* >( current );
-
-    if ( !layoutIndex.isValid() || !variantItem )
-    {
-        return;
-    }
-
-    QString layout = layoutIndex.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString();
-    QString variant = variantItem->data;
-
-    m_keyboardPreview->setLayout( layout );
-    m_keyboardPreview->setVariant( variant );
-
-    //emit checkReady();
-
-    // Set Xorg keyboard layout
-    if ( m_setxkbmapTimer.isActive() )
-    {
-        m_setxkbmapTimer.stop();
-        m_setxkbmapTimer.disconnect( this );
-    }
-
-    connect( &m_setxkbmapTimer, &QTimer::timeout, this, [=] {
-        QProcess::execute( "setxkbmap", xkbmap_args( layout, variant ) );
-        cDebug() << "xkbmap selection changed to: " << layout << '-' << variant;
-        m_setxkbmapTimer.disconnect( this );
-    } );
-    m_setxkbmapTimer.start( QApplication::keyboardInputInterval() );
-
-    m_selectedLayout = layout;
-    m_selectedVariant = variant;
+    delete ui;
 }
diff --git a/src/modules/keyboard/KeyboardPage.h b/src/modules/keyboard/KeyboardPage.h
index 4faeebd57be55636a6aeb951872541cd8fd33daf..98925fcad0c3d440b34042b303df179cd8362222 100644
--- a/src/modules/keyboard/KeyboardPage.h
+++ b/src/modules/keyboard/KeyboardPage.h
@@ -27,42 +27,20 @@ namespace Ui
 class Page_Keyboard;
 }
 
+class Config;
 class KeyBoardPreview;
 
 class KeyboardPage : public QWidget
 {
     Q_OBJECT
 public:
-    explicit KeyboardPage( QWidget* parent = nullptr );
+    explicit KeyboardPage( Config* config, QWidget* parent = nullptr );
     ~KeyboardPage() override;
 
-    void init();
-
-    QString prettyStatus() const;
-
-    Calamares::JobList
-    createJobs( const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard );
-
-    void onActivate();
-    void finalize();
-
-protected slots:
-    void onListLayoutCurrentItemChanged( const QModelIndex& current, const QModelIndex& previous );
-    void onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous );
-
 private:
-    /// Guess a layout based on the split-apart locale
-    void guessLayout( const QStringList& langParts );
-    void updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant = QString() );
-
     Ui::Page_Keyboard* ui;
     KeyBoardPreview* m_keyboardPreview;
-    int m_defaultIndex;
-    QMap< QString, QString > m_models;
-
-    QString m_selectedLayout;
-    QString m_selectedVariant;
-    QTimer m_setxkbmapTimer;
+    Config* m_config;
 };
 
 #endif  // KEYBOARDPAGE_H
diff --git a/src/modules/keyboard/KeyboardPage.ui b/src/modules/keyboard/KeyboardPage.ui
index f7e430a044deefe97a59f8b7578619c28118e9ad..f7592fc6a83fb17d313a4e709981f9713d547b4a 100644
--- a/src/modules/keyboard/KeyboardPage.ui
+++ b/src/modules/keyboard/KeyboardPage.ui
@@ -76,7 +76,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
       </widget>
      </item>
      <item>
-      <widget class="QComboBox" name="comboBoxModel">
+      <widget class="QComboBox" name="physicalModelSelector">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
@@ -110,10 +110,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
       <number>9</number>
      </property>
      <item>
-      <widget class="QListView" name="listLayout"/>
+      <widget class="QListView" name="layoutSelector"/>
      </item>
      <item>
-      <widget class="QListWidget" name="listVariant"/>
+      <widget class="QListView" name="variantSelector"/>
      </item>
     </layout>
    </item>
@@ -139,9 +139,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
   </layout>
  </widget>
  <tabstops>
-  <tabstop>comboBoxModel</tabstop>
-  <tabstop>listLayout</tabstop>
-  <tabstop>listVariant</tabstop>
+  <tabstop>physicalModelSelector</tabstop>
+  <tabstop>layoutSelector</tabstop>
+  <tabstop>variantSelector</tabstop>
   <tabstop>LE_TestKeyboard</tabstop>
   <tabstop>buttonRestore</tabstop>
  </tabstops>
diff --git a/src/modules/keyboard/KeyboardViewStep.cpp b/src/modules/keyboard/KeyboardViewStep.cpp
index 55402fd14c764047e7d3b7bfd839c500eb79b361..d1eb3eb68b4e0235ee4b801e937480c707db2882 100644
--- a/src/modules/keyboard/KeyboardViewStep.cpp
+++ b/src/modules/keyboard/KeyboardViewStep.cpp
@@ -9,24 +9,21 @@
 
 #include "KeyboardViewStep.h"
 
+#include "Config.h"
 #include "KeyboardPage.h"
 
 #include "GlobalStorage.h"
 #include "JobQueue.h"
 
-#include "utils/Variant.h"
-
 CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardViewStepFactory, registerPlugin< KeyboardViewStep >(); )
 
 KeyboardViewStep::KeyboardViewStep( QObject* parent )
     : Calamares::ViewStep( parent )
-    , m_widget( new KeyboardPage() )
-    , m_nextEnabled( false )
-    , m_writeEtcDefaultKeyboard( true )
+    , m_config( new Config( this ) )
+    , m_widget( new KeyboardPage( m_config ) )
 {
-    m_widget->init();
-    m_nextEnabled = true;
-    emit nextStatusChanged( m_nextEnabled );
+    m_config->detectCurrentKeyboardLayout();
+    emit nextStatusChanged( true );
 }
 
 
@@ -49,7 +46,7 @@ KeyboardViewStep::prettyName() const
 QString
 KeyboardViewStep::prettyStatus() const
 {
-    return m_prettyStatus;
+    return m_config->prettyStatus();
 }
 
 
@@ -63,7 +60,7 @@ KeyboardViewStep::widget()
 bool
 KeyboardViewStep::isNextEnabled() const
 {
-    return m_nextEnabled;
+    return true;
 }
 
 
@@ -91,60 +88,26 @@ KeyboardViewStep::isAtEnd() const
 QList< Calamares::job_ptr >
 KeyboardViewStep::jobs() const
 {
-    return m_jobs;
+    return m_config->createJobs();
 }
 
 
 void
 KeyboardViewStep::onActivate()
 {
-    m_widget->onActivate();
+    m_config->onActivate();
 }
 
 
 void
 KeyboardViewStep::onLeave()
 {
-    m_widget->finalize();
-    m_jobs = m_widget->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard );
-    m_prettyStatus = m_widget->prettyStatus();
+    m_config->finalize();
 }
 
 
 void
 KeyboardViewStep::setConfigurationMap( const QVariantMap& configurationMap )
 {
-    using namespace CalamaresUtils;
-
-    if ( configurationMap.contains( "xOrgConfFileName" )
-         && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String
-         && !getString( configurationMap, "xOrgConfFileName" ).isEmpty() )
-    {
-        m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" );
-    }
-    else
-    {
-        m_xOrgConfFileName = "00-keyboard.conf";
-    }
-
-    if ( configurationMap.contains( "convertedKeymapPath" )
-         && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String
-         && !getString( configurationMap, "convertedKeymapPath" ).isEmpty() )
-    {
-        m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" );
-    }
-    else
-    {
-        m_convertedKeymapPath = QString();
-    }
-
-    if ( configurationMap.contains( "writeEtcDefaultKeyboard" )
-         && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool )
-    {
-        m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true );
-    }
-    else
-    {
-        m_writeEtcDefaultKeyboard = true;
-    }
+    m_config->setConfigurationMap( configurationMap );
 }
diff --git a/src/modules/keyboard/KeyboardViewStep.h b/src/modules/keyboard/KeyboardViewStep.h
index aa9a1d3350d39f98a13bed06ec240ae52085b003..902b888fd3785e12ea9cc35046c4b4b9cb24b2c5 100644
--- a/src/modules/keyboard/KeyboardViewStep.h
+++ b/src/modules/keyboard/KeyboardViewStep.h
@@ -17,6 +17,7 @@
 
 #include <QObject>
 
+class Config;
 class KeyboardPage;
 
 class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep
@@ -46,15 +47,8 @@ public:
     void setConfigurationMap( const QVariantMap& configurationMap ) override;
 
 private:
+    Config* m_config;
     KeyboardPage* m_widget;
-    bool m_nextEnabled;
-    QString m_prettyStatus;
-
-    QString m_xOrgConfFileName;
-    QString m_convertedKeymapPath;
-    bool m_writeEtcDefaultKeyboard;
-
-    Calamares::JobList m_jobs;
 };
 
 CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardViewStepFactory )
diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.cpp b/src/modules/keyboard/SetKeyboardLayoutJob.cpp
index cabe0b5c0aa0b8a99e4077b10b13f544ab8c40b2..419d6f3fcd3d7aea8f697d779b80047d9f8810a3 100644
--- a/src/modules/keyboard/SetKeyboardLayoutJob.cpp
+++ b/src/modules/keyboard/SetKeyboardLayoutJob.cpp
@@ -33,6 +33,7 @@
 SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model,
                                             const QString& layout,
                                             const QString& variant,
+                                            const AdditionalLayoutInfo& additionalLayoutInfo,
                                             const QString& xOrgConfFileName,
                                             const QString& convertedKeymapPath,
                                             bool writeEtcDefaultKeyboard )
@@ -40,6 +41,7 @@ SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model,
     , m_model( model )
     , m_layout( layout )
     , m_variant( variant )
+    , m_additionalLayoutInfo( additionalLayoutInfo )
     , m_xOrgConfFileName( xOrgConfFileName )
     , m_convertedKeymapPath( convertedKeymapPath )
     , m_writeEtcDefaultKeyboard( writeEtcDefaultKeyboard )
@@ -250,19 +252,34 @@ SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const
               "        Identifier \"system-keyboard\"\n"
               "        MatchIsKeyboard \"on\"\n";
 
-    if ( !m_layout.isEmpty() )
-    {
-        stream << "        Option \"XkbLayout\" \"" << m_layout << "\"\n";
-    }
 
-    if ( !m_model.isEmpty() )
+    if ( m_additionalLayoutInfo.additionalLayout.isEmpty() )
     {
-        stream << "        Option \"XkbModel\" \"" << m_model << "\"\n";
-    }
+        if ( !m_layout.isEmpty() )
+        {
+            stream << "        Option \"XkbLayout\" \"" << m_layout << "\"\n";
+        }
 
-    if ( !m_variant.isEmpty() )
+        if ( !m_variant.isEmpty() )
+        {
+            stream << "        Option \"XkbVariant\" \"" << m_variant << "\"\n";
+        }
+    }
+    else
     {
-        stream << "        Option \"XkbVariant\" \"" << m_variant << "\"\n";
+        if ( !m_layout.isEmpty() )
+        {
+            stream << "        Option \"XkbLayout\" \"" << m_additionalLayoutInfo.additionalLayout << "," << m_layout
+                   << "\"\n";
+        }
+
+        if ( !m_variant.isEmpty() )
+        {
+            stream << "        Option \"XkbVariant\" \"" << m_additionalLayoutInfo.additionalVariant << "," << m_variant
+                   << "\"\n";
+        }
+
+        stream << "        Option \"XkbOptions\" \"" << m_additionalLayoutInfo.groupSwitcher << "\"\n";
     }
 
     stream << "EndSection\n";
diff --git a/src/modules/keyboard/SetKeyboardLayoutJob.h b/src/modules/keyboard/SetKeyboardLayoutJob.h
index f1eabe1952153a76c1b67949f36720cdf8680430..15fadfb525caae3b1fdf9721718881a8d4fa6d22 100644
--- a/src/modules/keyboard/SetKeyboardLayoutJob.h
+++ b/src/modules/keyboard/SetKeyboardLayoutJob.h
@@ -11,6 +11,7 @@
 #ifndef SETKEYBOARDLAYOUTJOB_H
 #define SETKEYBOARDLAYOUTJOB_H
 
+#include "AdditionalLayoutInfo.h"
 #include "Job.h"
 
 
@@ -21,6 +22,7 @@ public:
     SetKeyboardLayoutJob( const QString& model,
                           const QString& layout,
                           const QString& variant,
+                          const AdditionalLayoutInfo& additionaLayoutInfo,
                           const QString& xOrgConfFileName,
                           const QString& convertedKeymapPath,
                           bool writeEtcDefaultKeyboard );
@@ -38,6 +40,7 @@ private:
     QString m_model;
     QString m_layout;
     QString m_variant;
+    AdditionalLayoutInfo m_additionalLayoutInfo;
     QString m_xOrgConfFileName;
     QString m_convertedKeymapPath;
     const bool m_writeEtcDefaultKeyboard;
diff --git a/src/modules/keyboard/keyboard.qrc b/src/modules/keyboard/keyboard.qrc
index dd211e63016f912fab182b94cf5b3b974d82db26..4283d81907788485a11dd7a57391b44e7032c1e1 100644
--- a/src/modules/keyboard/keyboard.qrc
+++ b/src/modules/keyboard/keyboard.qrc
@@ -2,5 +2,6 @@
     <qresource prefix="/">
         <file>kbd-model-map</file>
         <file>images/restore.png</file>
+        <file>non-ascii-layouts</file>
     </qresource>
 </RCC>
diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp
index 329913d79832bbeec30df4ad6f9eff84b0ee9c1d..8099cb231d12e29820772e6da2e202abe149983f 100644
--- a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp
+++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp
@@ -75,7 +75,7 @@ parseKeyboardModels( const char* filepath )
             break;
         }
 
-        // here we are in the model section, otherwhise we would continue or break
+        // here we are in the model section, otherwise we would continue or break
         QRegExp rx;
         rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" );
 
diff --git a/src/modules/keyboard/non-ascii-layouts b/src/modules/keyboard/non-ascii-layouts
new file mode 100644
index 0000000000000000000000000000000000000000..83935c190bb64630604ea98a67fd468c4d57c379
--- /dev/null
+++ b/src/modules/keyboard/non-ascii-layouts
@@ -0,0 +1,4 @@
+# Layouts stored here need additional layout (usually us) to provide ASCII support for user
+
+#layout   additional-layout   additional-variant   vconsole-keymap
+ru        us                  -                    ruwin_alt_sh-UTF-8
diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.cpp b/src/modules/keyboardq/KeyboardQmlViewStep.cpp
index d42ab52690bcf7523d52c15e2ac0881bf79d0bcf..e8ae630e7c5f92e5e07532f54b3816383616cee5 100644
--- a/src/modules/keyboardq/KeyboardQmlViewStep.cpp
+++ b/src/modules/keyboardq/KeyboardQmlViewStep.cpp
@@ -2,6 +2,7 @@
  *
  *   SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org>
  *   SPDX-FileCopyrightText: 2020 Camilo Higuita <milo.h@aol.com>
+ *   SPDX-FileCopyrightText: 2020 Anke Boersma <demm@kaosx.us>
  *   SPDX-License-Identifier: GPL-3.0-or-later
  *
  *   Calamares is Free Software: see the License-Identifier above.
@@ -10,21 +11,19 @@
 
 #include "KeyboardQmlViewStep.h"
 
+#include "Config.h"
+
 #include "GlobalStorage.h"
 #include "JobQueue.h"
-#include "utils/Variant.h"
 
 CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardQmlViewStepFactory, registerPlugin< KeyboardQmlViewStep >(); )
 
 KeyboardQmlViewStep::KeyboardQmlViewStep( QObject* parent )
     : Calamares::QmlViewStep( parent )
     , m_config( new Config( this ) )
-    , m_nextEnabled( false )
-    , m_writeEtcDefaultKeyboard( true )
 {
-    m_config->init();
-    m_nextEnabled = true;
-    emit nextStatusChanged( m_nextEnabled );
+    m_config->detectCurrentKeyboardLayout();
+    emit nextStatusChanged( true );
 }
 
 QString
@@ -36,13 +35,13 @@ KeyboardQmlViewStep::prettyName() const
 QString
 KeyboardQmlViewStep::prettyStatus() const
 {
-    return m_prettyStatus;
+    return m_config->prettyStatus();
 }
 
 bool
 KeyboardQmlViewStep::isNextEnabled() const
 {
-    return m_nextEnabled;
+    return true;
 }
 
 bool
@@ -66,7 +65,7 @@ KeyboardQmlViewStep::isAtEnd() const
 Calamares::JobList
 KeyboardQmlViewStep::jobs() const
 {
-    return m_jobs;
+    return m_config->createJobs();
 }
 
 void
@@ -79,8 +78,6 @@ void
 KeyboardQmlViewStep::onLeave()
 {
     m_config->finalize();
-    m_jobs = m_config->createJobs( m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard );
-    m_prettyStatus = m_config->prettyStatus();
 }
 
 QObject*
@@ -92,39 +89,6 @@ KeyboardQmlViewStep::getConfig()
 void
 KeyboardQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap )
 {
-    using namespace CalamaresUtils;
-
-    if ( configurationMap.contains( "xOrgConfFileName" )
-         && configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String
-         && !getString( configurationMap, "xOrgConfFileName" ).isEmpty() )
-    {
-        m_xOrgConfFileName = getString( configurationMap, "xOrgConfFileName" );
-    }
-    else
-    {
-        m_xOrgConfFileName = "00-keyboard.conf";
-    }
-
-    if ( configurationMap.contains( "convertedKeymapPath" )
-         && configurationMap.value( "convertedKeymapPath" ).type() == QVariant::String
-         && !getString( configurationMap, "convertedKeymapPath" ).isEmpty() )
-    {
-        m_convertedKeymapPath = getString( configurationMap, "convertedKeymapPath" );
-    }
-    else
-    {
-        m_convertedKeymapPath = QString();
-    }
-
-    if ( configurationMap.contains( "writeEtcDefaultKeyboard" )
-         && configurationMap.value( "writeEtcDefaultKeyboard" ).type() == QVariant::Bool )
-    {
-        m_writeEtcDefaultKeyboard = getBool( configurationMap, "writeEtcDefaultKeyboard", true );
-    }
-    else
-    {
-        m_writeEtcDefaultKeyboard = true;
-    }
-
+    m_config->setConfigurationMap( configurationMap );
     Calamares::QmlViewStep::setConfigurationMap( configurationMap );
 }
diff --git a/src/modules/keyboardq/KeyboardQmlViewStep.h b/src/modules/keyboardq/KeyboardQmlViewStep.h
index 4571a9a60bcd0bff12ad090512ec51a2ab2e0c24..eb31c3d595c09204304f7d6da872a488ce33838c 100644
--- a/src/modules/keyboardq/KeyboardQmlViewStep.h
+++ b/src/modules/keyboardq/KeyboardQmlViewStep.h
@@ -13,14 +13,12 @@
 
 #include "Config.h"
 
-#include <DllMacro.h>
-#include <utils/PluginFactory.h>
-#include <viewpages/QmlViewStep.h>
+#include "DllMacro.h"
+#include "utils/PluginFactory.h"
+#include "viewpages/QmlViewStep.h"
 
 #include <QObject>
 
-class KeyboardPage;
-
 class PLUGINDLLEXPORT KeyboardQmlViewStep : public Calamares::QmlViewStep
 {
     Q_OBJECT
@@ -47,14 +45,6 @@ public:
 
 private:
     Config* m_config;
-    bool m_nextEnabled;
-    QString m_prettyStatus;
-
-    QString m_xOrgConfFileName;
-    QString m_convertedKeymapPath;
-    bool m_writeEtcDefaultKeyboard;
-
-    Calamares::JobList m_jobs;
 };
 
 CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardQmlViewStepFactory )
diff --git a/src/modules/keyboardq/keyboardq.qrc b/src/modules/keyboardq/keyboardq.qrc
index 492f6e213004cdb9c27dd329db1a9849cb38aec1..d2473a8eccdbea251e46c8bac745289cca8a766a 100644
--- a/src/modules/keyboardq/keyboardq.qrc
+++ b/src/modules/keyboardq/keyboardq.qrc
@@ -3,5 +3,6 @@
         <file alias="kbd-model-map">../keyboard/kbd-model-map</file>
         <file alias="images/restore.png">../keyboard/images/restore.png</file>
         <file>keyboardq.qml</file>
+        <file alias="non-ascii-layouts">../keyboard/non-ascii-layouts</file>
     </qresource>
 </RCC>
diff --git a/src/modules/license/LicenseWidget.cpp b/src/modules/license/LicenseWidget.cpp
index b2e66515dfd84b983344950ce39c13dccb574f51..a8d581ab5e58d84626b84467a3d1d24f32b71263 100644
--- a/src/modules/license/LicenseWidget.cpp
+++ b/src/modules/license/LicenseWidget.cpp
@@ -13,6 +13,7 @@
 #include "LicenseWidget.h"
 
 #include "utils/Logger.h"
+#include "utils/QtCompat.h"
 
 #include <QDesktopServices>
 #include <QFile>
@@ -48,7 +49,7 @@ LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent )
     , m_isExpanded( m_entry.expandByDefault() )
 {
     QPalette pal( palette() );
-    pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) );
+    pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) );
 
     setObjectName( "licenseItem" );
 
diff --git a/src/modules/machineid/MachineIdJob.cpp b/src/modules/machineid/MachineIdJob.cpp
index 8a33288b94782b8c41047c05e8af7d3e22343eff..fef63828aa53c2a2dace0d3bd95f7c9fe85f4834 100644
--- a/src/modules/machineid/MachineIdJob.cpp
+++ b/src/modules/machineid/MachineIdJob.cpp
@@ -153,18 +153,13 @@ MachineIdJob::setConfigurationMap( const QVariantMap& map )
     m_dbus_symlink = m_dbus && m_dbus_symlink;
 
     m_entropy_copy = CalamaresUtils::getBool( map, "entropy-copy", false );
-
     m_entropy_files = CalamaresUtils::getStringList( map, "entropy-files" );
     if ( CalamaresUtils::getBool( map, "entropy", false ) )
     {
-        cWarning() << "MachineId:: configuration setting *entropy* is deprecated, use *entropy-files*.";
-
-        QString target_entropy_file = QStringLiteral( "/var/lib/urandom/random-seed" );
-        if ( !m_entropy_files.contains( target_entropy_file ) )
-        {
-            m_entropy_files.append( target_entropy_file );
-        }
+        cWarning() << "MachineId:: configuration setting *entropy* is deprecated, use *entropy-files* instead.";
+        m_entropy_files.append( QStringLiteral( "/var/lib/urandom/random-seed" ) );
     }
+    m_entropy_files.removeDuplicates();
 }
 
 CALAMARES_PLUGIN_FACTORY_DEFINITION( MachineIdJobFactory, registerPlugin< MachineIdJob >(); )
diff --git a/src/modules/machineid/machineid.conf b/src/modules/machineid/machineid.conf
index c6189e59803e7b1be61403ecdf4a0b2e6c742403..15e190299c5c595ec1cafc10a21d54d309a6a91a 100644
--- a/src/modules/machineid/machineid.conf
+++ b/src/modules/machineid/machineid.conf
@@ -11,21 +11,39 @@
 #
 ---
 # Whether to create /etc/machine-id for systemd.
+# The default is *false*.
 systemd: true
 
 # Whether to create /var/lib/dbus/machine-id for D-Bus.
+# The default is *false*.
 dbus: true
 # Whether /var/lib/dbus/machine-id should be a symlink to /etc/machine-id
 # (ignored if dbus is false, or if there is no /etc/machine-id to point to).
+# The default is *false*.
 dbus-symlink: true
 
-# Whether to create an entropy file /var/lib/urandom/random-seed
-#
-# DEPRECATED: list the file in entropy-files instead
-entropy: false
-# Whether to copy entropy from the host
+# Copy entropy from the host? If this is set to *true*, then
+# any entropy file listed below will be copied from the host
+# if it exists. Non-existent files will be generated from
+# /dev/urandom . The default is *false*.
 entropy-copy: false
-# Which files to write (paths in the target)
+# Which files to write (paths in the target). Each of these files is
+# either generated from /dev/urandom or copied from the host, depending
+# on the setting for *entropy-copy*, above.
 entropy-files:
     - /var/lib/urandom/random-seed
     - /var/lib/systemd/random-seed
+
+# Whether to create an entropy file /var/lib/urandom/random-seed
+#
+# DEPRECATED: list the file in entropy-files instead. If this key
+# exists and is set to *true*, a warning is printed and Calamares
+# behaves as if `/var/lib/urandom/random-seed` is listed in *entropy-files*.
+#
+# entropy: false
+
+# Whether to create a symlink for D-Bus
+#
+# DEPRECATED: set *dbus-symlink* with the same meaning instead.
+#
+# symlink: false
diff --git a/src/modules/machineid/machineid.schema.yaml b/src/modules/machineid/machineid.schema.yaml
index 1ae67e132f4300fa79361f7b0f4257d5345f7d40..59bb5f81b7e65094a68c85f8f9e30ac5e6daaafc 100644
--- a/src/modules/machineid/machineid.schema.yaml
+++ b/src/modules/machineid/machineid.schema.yaml
@@ -6,11 +6,11 @@ $id: https://calamares.io/schemas/machineid
 additionalProperties: false
 type: object
 properties:
-    systemd: { type: boolean, default: true }
-    dbus: { type: boolean, default: true }
-    "dbus-symlink": { type: boolean, default: true }
+    systemd: { type: boolean, default: false }
+    dbus: { type: boolean, default: false }
+    "dbus-symlink": { type: boolean, default: false }
     "entropy-copy": { type: boolean, default: false }
     "entropy-files": { type: array, items: { type: string } }
     # Deprecated properties
-    symlink: { type: boolean, default: true }
+    symlink: { type: boolean, default: false }
     entropy: { type: boolean, default: false }
diff --git a/src/modules/netinstall/Config.cpp b/src/modules/netinstall/Config.cpp
index ddbb36fcc63b4b7c432e13c48a85b892866dfbac..e69b3c2a4a3985fdbb456f102fb394a02f0875d3 100644
--- a/src/modules/netinstall/Config.cpp
+++ b/src/modules/netinstall/Config.cpp
@@ -43,7 +43,7 @@ Config::status() const
     case Status::FailedNetworkError:
         return tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" );
     }
-    NOTREACHED return QString();
+    __builtin_unreachable();
 }
 
 
diff --git a/src/modules/netinstall/NetInstallViewStep.cpp b/src/modules/netinstall/NetInstallViewStep.cpp
index beb295c32a31562950a8a916912c05d57e65b51f..e96d1724fc73b662cfade2623cbb743bb7e1bab8 100644
--- a/src/modules/netinstall/NetInstallViewStep.cpp
+++ b/src/modules/netinstall/NetInstallViewStep.cpp
@@ -47,7 +47,7 @@ NetInstallViewStep::prettyName() const
     return m_sidebarLabel ? m_sidebarLabel->get() : tr( "Package selection" );
 
 #if defined( TABLE_OF_TRANSLATIONS )
-    NOTREACHED
+    __builtin_unreachable();
     // This is a table of "standard" labels for this module. If you use them
     // in the label: sidebar: section of the config file, the existing
     // translations can be used.
diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp
index 0d5df81777d0db3e2f31174cb71462f780d3bbe7..e46809fdda475f11bfdec7222a5751c3283455b4 100644
--- a/src/modules/packagechooser/PackageChooserPage.cpp
+++ b/src/modules/packagechooser/PackageChooserPage.cpp
@@ -33,12 +33,12 @@ PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent
     switch ( mode )
     {
     case PackageChooserMode::Optional:
-        FALLTHRU;
+        [[fallthrough]];
     case PackageChooserMode::Required:
         ui->products->setSelectionMode( QAbstractItemView::SingleSelection );
         break;
     case PackageChooserMode::OptionalMultiple:
-        FALLTHRU;
+        [[fallthrough]];
     case PackageChooserMode::RequiredMultiple:
         ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection );
     }
diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp
index f162c074b7114794c1f1b3421f420af7fbc32b7c..d576f275379063250cc223fa255bf483f39196d8 100644
--- a/src/modules/packagechooser/PackageChooserViewStep.cpp
+++ b/src/modules/packagechooser/PackageChooserViewStep.cpp
@@ -110,8 +110,7 @@ PackageChooserViewStep::isNextEnabled() const
         // exactly one OR one or more
         return m_widget->hasSelection();
     }
-
-    NOTREACHED return true;
+    __builtin_unreachable();
 }
 
 
diff --git a/src/modules/partition/core/Config.h b/src/modules/partition/core/Config.h
index 1629ccc2208caf40b4d3c8b319baea4175ff021a..57230b6e851f32d4713e9f3f6f9b55407ad515e6 100644
--- a/src/modules/partition/core/Config.h
+++ b/src/modules/partition/core/Config.h
@@ -28,7 +28,7 @@ class Config : public QObject
 
 public:
     Config( QObject* parent );
-    virtual ~Config() = default;
+    ~Config() override = default;
 
     enum InstallChoice
     {
diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp
index e6c1a520ddb28fe0b65722485c3c8868749af18d..a514b9c341ccad7cf0ffcab83a5c07d2d02e36bc 100644
--- a/src/modules/partition/core/PartUtils.cpp
+++ b/src/modules/partition/core/PartUtils.cpp
@@ -59,7 +59,7 @@ convenienceName( const Partition* const candidate )
 
     QString p;
     QTextStream s( &p );
-    s << (void*)candidate;
+    s << static_cast<const void*>(candidate);  // No good name available, use pointer address
 
     return p;
 }
diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp
index 3d726aef1f57fabc4e03020940a1889187c56a79..3327eb50b82e23df2b93f0ce0d107852d25f3053 100644
--- a/src/modules/partition/core/PartitionCoreModule.cpp
+++ b/src/modules/partition/core/PartitionCoreModule.cpp
@@ -110,7 +110,7 @@ updatePreview( Job* job, const std::true_type& )
 
 template < typename Job >
 void
-updatePreview( Job* job, const std::false_type& )
+updatePreview( Job*, const std::false_type& )
 {
 }
 
@@ -483,7 +483,6 @@ PartitionCoreModule::deletePartition( Device* device, Partition* partition )
         }
     }
 
-    const Calamares::JobList& jobs = deviceInfo->jobs();
     if ( partition->state() == KPM_PARTITION_STATE( New ) )
     {
         // Take all the SetPartFlagsJob from the list and delete them
diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h
index 1dc61db6feed556fe1afbdc680d3180f86ac205a..1e4179b979df4bcc9f536c148d37f43b3a7a791d 100644
--- a/src/modules/partition/core/PartitionCoreModule.h
+++ b/src/modules/partition/core/PartitionCoreModule.h
@@ -85,7 +85,7 @@ public:
     };
 
     PartitionCoreModule( QObject* parent = nullptr );
-    ~PartitionCoreModule();
+    ~PartitionCoreModule() override;
 
     /**
      * @brief init performs a devices scan and initializes all KPMcore data
diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp
index 182e7606bb452085ccaa850747740ededc8f821c..d42e7b568ba0fd4967a85574055ac40a9c21dab0 100644
--- a/src/modules/partition/core/PartitionLayout.cpp
+++ b/src/modules/partition/core/PartitionLayout.cpp
@@ -44,13 +44,13 @@ getDefaultFileSystemType()
 }
 
 PartitionLayout::PartitionLayout()
+    : m_defaultFsType( getDefaultFileSystemType() )
 {
-    m_defaultFsType = getDefaultFileSystemType();
 }
 
 PartitionLayout::PartitionLayout( PartitionLayout::PartitionEntry entry )
+    : PartitionLayout()
 {
-    m_defaultFsType = getDefaultFileSystemType();
     m_partLayout.append( entry );
 }
 
@@ -82,10 +82,10 @@ PartitionLayout::PartitionEntry::PartitionEntry()
 }
 
 PartitionLayout::PartitionEntry::PartitionEntry( const QString& size, const QString& min, const QString& max )
-    : partSize( size )
+    : partAttributes( 0 )
+    , partSize( size )
     , partMinSize( min )
     , partMaxSize( max )
-    , partAttributes( 0 )
 {
 }
 
@@ -172,33 +172,31 @@ PartitionLayout::execute( Device* dev,
     // Let's check if we have enough space for each partSize
     for ( const auto& part : qAsConst( m_partLayout ) )
     {
-        qint64 size;
-        // Calculate partition size
+        if ( !part.partSize.isValid() )
+        {
+            cWarning() << "Partition" << part.partMountPoint << "size is invalid, skipping...";
+            continue;
+        }
 
-        if ( part.partSize.isValid() )
+        // Calculate partition size: Rely on "possibly uninitialized use"
+        // warnings to ensure that all the cases are covered below.
+        qint64 size;
+        // We need to ignore the percent-defined until later
+        if ( part.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent )
         {
-            // We need to ignore the percent-defined
-            if ( part.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent )
+            size = part.partSize.toSectors( totalSize, dev->logicalSize() );
+        }
+        else
+        {
+            if ( part.partMinSize.isValid() )
             {
-                size = part.partSize.toSectors( totalSize, dev->logicalSize() );
+                size = part.partMinSize.toSectors( totalSize, dev->logicalSize() );
             }
             else
             {
-                if ( part.partMinSize.isValid() )
-                {
-                    size = part.partMinSize.toSectors( totalSize, dev->logicalSize() );
-                }
-                else
-                {
-                    size = 0;
-                }
+                size = 0;
             }
         }
-        else
-        {
-            cWarning() << "Partition" << part.partMountPoint << "size (" << size << "sectors) is invalid, skipping...";
-            continue;
-        }
 
         partSizeMap.insert( &part, size );
         availableSize -= size;
diff --git a/src/modules/partition/gui/BootInfoWidget.cpp b/src/modules/partition/gui/BootInfoWidget.cpp
index 5d9dcf8b58a3bcf1e0ee488da7113396a7618aa4..0b9d08c4708dc14c4aafbfaf2b9b99d4dfebe1ca 100644
--- a/src/modules/partition/gui/BootInfoWidget.cpp
+++ b/src/modules/partition/gui/BootInfoWidget.cpp
@@ -12,6 +12,7 @@
 #include "core/PartUtils.h"
 
 #include "utils/CalamaresUtilsGui.h"
+#include "utils/QtCompat.h"
 #include "utils/Retranslator.h"
 
 #include <QDir>
@@ -45,7 +46,7 @@ BootInfoWidget::BootInfoWidget( QWidget* parent )
     m_bootLabel->setAlignment( Qt::AlignCenter );
 
     QPalette palette;
-    palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) );  //dark grey
+    palette.setBrush( WindowText, QColor( "#4D4D4D" ) );  //dark grey
 
     m_bootIcon->setAutoFillBackground( true );
     m_bootLabel->setAutoFillBackground( true );
diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp
index ac8d6fd92c22516acc3599a1f6d1b45c3bc456da..a91c9a8e1b117f6be3bff47fa46414f456b734e1 100644
--- a/src/modules/partition/gui/ChoicePage.cpp
+++ b/src/modules/partition/gui/ChoicePage.cpp
@@ -845,10 +845,11 @@ ChoicePage::doReplaceSelectedPartition( const QModelIndex& current )
 
 
 /**
- * @brief ChoicePage::updateDeviceStatePreview clears and rebuilds the contents of the
- *      preview widget for the current on-disk state. This also triggers a rescan in the
- *      PCM to get a Device* copy that's unaffected by subsequent PCM changes.
- * @param currentDevice a pointer to the selected Device.
+ * @brief clear and then rebuild the contents of the preview widget
+ *
+ * The preview widget for the current disk is completely re-constructed
+ * based on the on-disk state. This also triggers a rescan in the
+ * PCM to get a Device* copy that's unaffected by subsequent PCM changes.
  */
 void
 ChoicePage::updateDeviceStatePreview()
@@ -916,10 +917,10 @@ ChoicePage::updateDeviceStatePreview()
 
 
 /**
- * @brief ChoicePage::updateActionChoicePreview clears and rebuilds the contents of the
- *      preview widget for the current PCM-proposed state. No rescans here, this should
- *      be immediate.
- * @param currentDevice a pointer to the selected Device.
+ * @brief rebuild the contents of the preview for the PCM-proposed state.
+ *
+ * No rescans here, this should be immediate.
+ *
  * @param choice the chosen partitioning action.
  */
 void
@@ -1464,7 +1465,7 @@ ChoicePage::setupActions()
     }
 
     if ( m_somethingElseButton->isHidden() && m_alongsideButton->isHidden() && m_replaceButton->isHidden()
-         && m_somethingElseButton->isHidden() )
+         && m_eraseButton->isHidden() )
     {
         if ( atLeastOneIsMounted )
         {
diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h
index 118f23a465876ea7f36b4fb34be91088b4b9a4d7..1bdee10eac080657d2464765e201c9e0437eb886 100644
--- a/src/modules/partition/gui/ChoicePage.h
+++ b/src/modules/partition/gui/ChoicePage.h
@@ -54,7 +54,7 @@ class ChoicePage : public QWidget, private Ui::ChoicePage
     Q_OBJECT
 public:
     explicit ChoicePage( Config* config, QWidget* parent = nullptr );
-    virtual ~ChoicePage();
+    ~ChoicePage() override;
 
     /**
      * @brief init runs when the PartitionViewStep and the PartitionCoreModule are
diff --git a/src/modules/partition/gui/CreatePartitionDialog.h b/src/modules/partition/gui/CreatePartitionDialog.h
index dc756d352d310fb2f8308072f0d470f05fc1a09f..bee70f61b52f61d0341c8799298366fa463746b6 100644
--- a/src/modules/partition/gui/CreatePartitionDialog.h
+++ b/src/modules/partition/gui/CreatePartitionDialog.h
@@ -45,7 +45,7 @@ public:
                            Partition* partition,
                            const QStringList& usedMountPoints,
                            QWidget* parentWidget = nullptr );
-    ~CreatePartitionDialog();
+    ~CreatePartitionDialog() override;
 
     /**
      * Must be called when user wants to create a partition in
diff --git a/src/modules/partition/gui/DeviceInfoWidget.cpp b/src/modules/partition/gui/DeviceInfoWidget.cpp
index 80eacd05bf0a255cba10513dc50e9798477a629e..708982101f5bfbe4a77accd32313b2e23aa12769 100644
--- a/src/modules/partition/gui/DeviceInfoWidget.cpp
+++ b/src/modules/partition/gui/DeviceInfoWidget.cpp
@@ -7,13 +7,13 @@
  *
  */
 
-
 #include "DeviceInfoWidget.h"
 
 #include "GlobalStorage.h"
 #include "JobQueue.h"
 #include "utils/CalamaresUtilsGui.h"
 #include "utils/Logger.h"
+#include "utils/QtCompat.h"
 #include "utils/Retranslator.h"
 
 #include <QDir>
@@ -47,7 +47,7 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent )
     m_ptLabel->setAlignment( Qt::AlignCenter );
 
     QPalette palette;
-    palette.setBrush( QPalette::Foreground, QColor( "#4D4D4D" ) );  //dark grey
+    palette.setBrush( WindowText, QColor( "#4D4D4D" ) );  //dark grey
 
     m_ptIcon->setAutoFillBackground( true );
     m_ptLabel->setAutoFillBackground( true );
diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h
index 96cc2c4c4aaa63c1a87040ddce4c14555223af9a..89b5b55e4bccdc50bb4d6acf052ad8902a913214 100644
--- a/src/modules/partition/gui/EditExistingPartitionDialog.h
+++ b/src/modules/partition/gui/EditExistingPartitionDialog.h
@@ -36,7 +36,7 @@ public:
                                  Partition* partition,
                                  const QStringList& usedMountPoints,
                                  QWidget* parentWidget = nullptr );
-    ~EditExistingPartitionDialog();
+    ~EditExistingPartitionDialog() override;
 
     void applyChanges( PartitionCoreModule* module );
 
diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h
index 26c7dbccf4b2d84ee0058c4694cd17e6873c4457..81c2cd983505955ef4a01ce97c35e9f617368e58 100644
--- a/src/modules/partition/gui/PartitionPage.h
+++ b/src/modules/partition/gui/PartitionPage.h
@@ -34,7 +34,7 @@ class PartitionPage : public QWidget
     Q_OBJECT
 public:
     explicit PartitionPage( PartitionCoreModule* core, QWidget* parent = nullptr );
-    ~PartitionPage();
+    ~PartitionPage() override;
 
     void onRevertClicked();
 
diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp
index 20c7d0f082c0813b8f35e98c7fff1b147c8a2fe4..63227e3b7f0935d22b4c34a620bffb5e06fea6b3 100644
--- a/src/modules/partition/gui/PartitionViewStep.cpp
+++ b/src/modules/partition/gui/PartitionViewStep.cpp
@@ -34,6 +34,7 @@
 #include "utils/CalamaresUtilsGui.h"
 #include "utils/Logger.h"
 #include "utils/NamedEnum.h"
+#include "utils/QtCompat.h"
 #include "utils/Retranslator.h"
 #include "utils/Variant.h"
 #include "widgets/WaitingWidget.h"
@@ -273,7 +274,7 @@ PartitionViewStep::createSummaryWidget() const
         jobsLabel->setText( jobsLines.join( "<br/>" ) );
         jobsLabel->setMargin( CalamaresUtils::defaultFontHeight() / 2 );
         QPalette pal;
-        pal.setColor( QPalette::Background, pal.window().color().lighter( 108 ) );
+        pal.setColor( WindowBackground, pal.window().color().lighter( 108 ) );
         jobsLabel->setAutoFillBackground( true );
         jobsLabel->setPalette( pal );
     }
diff --git a/src/modules/partition/gui/ReplaceWidget.h b/src/modules/partition/gui/ReplaceWidget.h
index 5277e56266f9f6b1fcfbba07ccf76db21ab30bd8..fbd19b429094b782eeb9774cada94770a5983b7f 100644
--- a/src/modules/partition/gui/ReplaceWidget.h
+++ b/src/modules/partition/gui/ReplaceWidget.h
@@ -27,7 +27,7 @@ class ReplaceWidget : public QWidget
     Q_OBJECT
 public:
     explicit ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent = nullptr );
-    virtual ~ReplaceWidget();
+    virtual ~ReplaceWidget() override;
 
     bool isNextEnabled() const;
 
diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.h b/src/modules/partition/gui/VolumeGroupBaseDialog.h
index 253160d97b370d99c67ff0868e3637ef77650fba..94ed0b98bc65419f760b51def2c01264fc98f1cb 100644
--- a/src/modules/partition/gui/VolumeGroupBaseDialog.h
+++ b/src/modules/partition/gui/VolumeGroupBaseDialog.h
@@ -30,7 +30,7 @@ class VolumeGroupBaseDialog : public QDialog
 
 public:
     explicit VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent = nullptr );
-    ~VolumeGroupBaseDialog();
+    ~VolumeGroupBaseDialog() override;
 
 protected:
     virtual void updateOkButton();
diff --git a/src/modules/partition/tests/CreateLayoutsTests.cpp b/src/modules/partition/tests/CreateLayoutsTests.cpp
index 7589b5b65860d98174204e886f2a320416a12f56..12c19db5fe3bc1d0a65952b81e4f5a8c53ca5c2e 100644
--- a/src/modules/partition/tests/CreateLayoutsTests.cpp
+++ b/src/modules/partition/tests/CreateLayoutsTests.cpp
@@ -28,7 +28,7 @@ class SmartStatus;
 
 QTEST_GUILESS_MAIN( CreateLayoutsTests )
 
-CalamaresUtils::Partition::KPMManager* kpmcore = nullptr;
+static CalamaresUtils::Partition::KPMManager* kpmcore = nullptr;
 
 using CalamaresUtils::operator""_MiB;
 using CalamaresUtils::operator""_GiB;
@@ -156,3 +156,7 @@ TestDevice::TestDevice( const QString& name, const qint64 logicalSectorSize, con
 {
 }
 #endif
+
+TestDevice::~TestDevice()
+{
+}
diff --git a/src/modules/partition/tests/CreateLayoutsTests.h b/src/modules/partition/tests/CreateLayoutsTests.h
index 98d2d8cb9a4314c3938e381e9957211125699aa8..2ecc7b634fe6f6e6abb826b543b5e90879cfc4d1 100644
--- a/src/modules/partition/tests/CreateLayoutsTests.h
+++ b/src/modules/partition/tests/CreateLayoutsTests.h
@@ -18,6 +18,7 @@ class CreateLayoutsTests : public QObject
     Q_OBJECT
 public:
     CreateLayoutsTests();
+    ~CreateLayoutsTests() override = default;
 
 private Q_SLOTS:
     void testFixedSizePartition();
@@ -31,6 +32,7 @@ class TestDevice : public Device
 {
 public:
     TestDevice( const QString& name, const qint64 logicalSectorSize, const qint64 totalLogicalSectors );
+    ~TestDevice() override;
 };
 
 #endif
diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp
index 94eec8496e2bebf7b857893d84cc803e0973c341..326fd53bb96e422eaa24c631441c637fdab91433 100644
--- a/src/modules/partition/tests/PartitionJobTests.cpp
+++ b/src/modules/partition/tests/PartitionJobTests.cpp
@@ -157,7 +157,7 @@ QueueRunner::onFailed( const QString& message, const QString& details )
     QFAIL( qPrintable( msg ) );
 }
 
-CalamaresUtils::Partition::KPMManager* kpmcore = nullptr;
+static CalamaresUtils::Partition::KPMManager* kpmcore = nullptr;
 
 //- PartitionJobTests ------------------------------------------------------------------
 PartitionJobTests::PartitionJobTests()
diff --git a/src/modules/summary/SummaryPage.cpp b/src/modules/summary/SummaryPage.cpp
index d6917d962edf4e610cd77b9d66c9b1df356bf7eb..96781c25ef52668cf3cfab9f2dc28f72ab3b44ae 100644
--- a/src/modules/summary/SummaryPage.cpp
+++ b/src/modules/summary/SummaryPage.cpp
@@ -19,6 +19,7 @@
 
 #include "utils/CalamaresUtilsGui.h"
 #include "utils/Logger.h"
+#include "utils/QtCompat.h"
 #include "utils/Retranslator.h"
 #include "viewpages/ExecutionViewStep.h"
 
@@ -183,7 +184,7 @@ SummaryPage::createBodyLabel( const QString& text ) const
     QLabel* label = new QLabel;
     label->setMargin( CalamaresUtils::defaultFontHeight() / 2 );
     QPalette pal( palette() );
-    pal.setColor( QPalette::Background, palette().window().color().lighter( 108 ) );
+    pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) );
     label->setAutoFillBackground( true );
     label->setPalette( pal );
     label->setText( text );
diff --git a/src/modules/tracking/Config.cpp b/src/modules/tracking/Config.cpp
index f1f61edfdcc42494c3d76a90cbd2780f98c6caaf..0d9778c6a9f79d64d9833697650fe838e1d0b1ad 100644
--- a/src/modules/tracking/Config.cpp
+++ b/src/modules/tracking/Config.cpp
@@ -182,10 +182,10 @@ enableLevelsBelow( Config* config, TrackingType level )
     {
     case TrackingType::UserTracking:
         config->userTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser );
-        FALLTHRU;
+        [[fallthrough]];
     case TrackingType::MachineTracking:
         config->machineTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser );
-        FALLTHRU;
+        [[fallthrough]];
     case TrackingType::InstallTracking:
         config->installTracking()->setTracking( TrackingStyleConfig::TrackingState::EnabledByUser );
         break;
diff --git a/src/modules/unpackfs/unpackfs.schema.yaml b/src/modules/unpackfs/unpackfs.schema.yaml
index 66c7c0da81d2ace3144c73f755d286a2b71fec7b..0d96fe9cb65427f00fd7c64a478b74ed1beb9b5d 100644
--- a/src/modules/unpackfs/unpackfs.schema.yaml
+++ b/src/modules/unpackfs/unpackfs.schema.yaml
@@ -17,4 +17,5 @@ properties:
                 destination: { type: string }
                 excludeFile: { type: string }
                 exclude: { type: array, items: { type: string } }
+                weight: { type: integer, exclusiveMinimum: 0 }
             required: [ source , sourcefs, destination ]
diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt
index 5752ae67aecbbe9622596ab6f05ba78151e43c0f..fdae38440026bad1c57f98f935dd596ff829b68f 100644
--- a/src/modules/users/CMakeLists.txt
+++ b/src/modules/users/CMakeLists.txt
@@ -85,7 +85,7 @@ calamares_add_test(
         ${JOB_SRC}
         ${CONFIG_SRC}
     LIBRARIES
-        ${USER_EXTRA_LIB}
         Qt5::DBus  # HostName job can use DBus to systemd
         ${CRYPT_LIBRARIES}  # SetPassword job uses crypt()
+        ${USER_EXTRA_LIB}
 )