From 9dd33a244e37407d18a5a8e3903ec9d4fd59cde9 Mon Sep 17 00:00:00 2001
From: lizixin <2271170409@qq.com>
Date: Fri, 27 Dec 2024 19:27:11 +0800
Subject: [PATCH] 1230

---
 CMakeLists.txt                                |    1 +
 calamares.desktop                             |   10 +-
 lang/calamares_zh_CN.ts                       |    2 +-
 lang/tz_zh_CN.ts                              | 2626 +++++++++++++++++
 lang/tz_zh_TW.ts                              | 2626 +++++++++++++++++
 src/branding/default/show.qml                 |    6 +-
 src/calamares/CMakeLists.txt                  |  134 +-
 src/calamares/CalamaresApplication.cpp        |    4 +-
 src/calamares/DebugWindow.cpp                 |  530 ++--
 src/calamares/DebugWindow.h                   |  192 +-
 src/calamares/VariantModel.cpp                |  570 ++--
 src/calamares/VariantModel.h                  |  208 +-
 src/calamares/calamares-navigation.qml        |  166 +-
 src/calamares/calamares-sidebar.qml           |  250 +-
 src/calamares/calamares.qrc                   |   20 +-
 src/calamares/main.cpp                        |  308 +-
 .../progresstree/ProgressTreeDelegate.cpp     |  422 +--
 .../progresstree/ProgressTreeDelegate.h       |   62 +-
 .../progresstree/ProgressTreeView.cpp         |  154 +-
 src/calamares/progresstree/ProgressTreeView.h |   82 +-
 src/calamares/test_conf.cpp                   |  218 +-
 src/calamares/testmain.cpp                    | 1144 +++----
 src/libcalamares/CalamaresAbout.cpp           |    1 +
 .../modulesystem/CppJobModule.cpp             |    4 +
 src/modules/displaymanager/main.py            |   10 +
 src/modules/keyboard/KeyboardPage.cpp         |   19 +
 src/modules/keyboard/KeyboardPage.ui          |    3 +
 src/modules/locale/Config.cpp                 |   43 +
 src/modules/locale/LocalePage.cpp             |   20 +-
 .../packagechooser/packagechooser.conf        |   20 +-
 src/modules/packagechooser/packagechooser.qrc |    5 -
 src/modules/packages/main.py                  |   14 +-
 src/modules/packages/packages.conf            |    4 +-
 src/modules/partition/core/DeviceList.cpp     |   23 +-
 src/modules/partition/jobs/ClearMountsJob.cpp |   51 +-
 src/modules/unpackfs/main.py                  |    6 +-
 src/modules/users/CreateUserJob.cpp           |   18 +
 src/modules/users/UsersPage.cpp               |  102 +
 src/modules/users/UsersPage.h                 |   15 +
 src/modules/welcome/WelcomePage.cpp           |   74 +-
 src/modules/welcome/welcome.qrc               |    1 -
 41 files changed, 7895 insertions(+), 2273 deletions(-)
 create mode 100644 lang/tz_zh_CN.ts
 create mode 100644 lang/tz_zh_TW.ts

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 19395d4..40ae7e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -744,3 +744,4 @@ set(CPACK_PACKAGE_DESCRIPTION
 set(CPACK_PACKAGE_ICON "data/images/squid.png")
 
 include(CPack)
+
diff --git a/calamares.desktop b/calamares.desktop
index 00c2368..b0d6c27 100644
--- a/calamares.desktop
+++ b/calamares.desktop
@@ -7,7 +7,7 @@ Keywords=calamares;system;installer;
 TryExec=calamares
 Exec=sh -c "pkexec calamares -style Adwaita"
 Comment=Calamares — System Installer
-Icon=/usr/share/calamares/branding/default/openEuler-icon.png
+Icon=/usr/share/applications/openEuler.png
 Terminal=false
 StartupNotify=true
 Categories=Qt;System;
@@ -66,7 +66,7 @@ Icon[el]=calamares
 GenericName[el]=Εγκατάσταση συστήματος
 Comment[el]=Calamares — Εγκατάσταση συστήματος
 Name[en_GB]=Install System
-Icon[en_GB]=calamares
+Icon[en_GB]=/usr/share/applications/openEuler.png
 GenericName[en_GB]=System Installer
 Comment[en_GB]=Calamares — System Installer
 Name[eo]=Instali Sistemo
@@ -226,7 +226,7 @@ Icon[tr_TR]=calamares
 GenericName[tr_TR]=Sistem Yükleyici
 Comment[tr_TR]=Calamares — Sistem Yükleyici
 Name[uk]=Встановити Систему
-Icon[uk]=calamares
+Icon[uk]=/usr/share/applications/openEuler.png
 GenericName[uk]=Встановлювач системи
 Comment[uk]=Calamares - Встановлювач системи
 Name[vi]=Cài đặt hệ thống
@@ -234,10 +234,10 @@ 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
+Icon[zh_CN]=/usr/share/applications/openEuler.png
 GenericName[zh_CN]=系统安装程序
 Comment[zh_CN]=Calamares — 系统安装程序
 Name[zh_TW]=安裝系統
-Icon[zh_TW]=calamares
+Icon[zh_TW]=/usr/share/applications/openEuler.png
 GenericName[zh_TW]=系統安裝程式
 Comment[zh_TW]=Calamares ── 系統安裝程式
diff --git a/lang/calamares_zh_CN.ts b/lang/calamares_zh_CN.ts
index 75ffe95..3479fd1 100644
--- a/lang/calamares_zh_CN.ts
+++ b/lang/calamares_zh_CN.ts
@@ -1032,7 +1032,7 @@ The installer will quit and all changes will be lost.</source>
         <location filename="../src/modules/locale/Config.cpp" line="432"/>
         <source>The timezone will be set to %1.</source>
         <comment>@info</comment>
-        <translation type="unfinished">设置时区为 %1.</translation>
+        <translation type="unfinished">设置时区为 %1。</translation>
     </message>
     <message>
         <source>The timezone whill be set to %1.</source>
diff --git a/lang/tz_zh_CN.ts b/lang/tz_zh_CN.ts
new file mode 100644
index 0000000..b154b93
--- /dev/null
+++ b/lang/tz_zh_CN.ts
@@ -0,0 +1,2626 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- SPDX-FileCopyrightText: no
+     SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_CN">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="30"/>
+        <source>Africa</source>
+        <comment>tz_regions</comment>
+        <translation>非洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="31"/>
+        <source>America</source>
+        <comment>tz_regions</comment>
+        <translation>美洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="32"/>
+        <source>Antarctica</source>
+        <comment>tz_regions</comment>
+        <translation>南极洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="33"/>
+        <source>Arctic</source>
+        <comment>tz_regions</comment>
+        <translation>北极</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="34"/>
+        <source>Asia</source>
+        <comment>tz_regions</comment>
+        <translation>亚洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="35"/>
+        <source>Atlantic</source>
+        <comment>tz_regions</comment>
+        <translation>大西洋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="36"/>
+        <source>Australia</source>
+        <comment>tz_regions</comment>
+        <translation>澳大利亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="37"/>
+        <source>Europe</source>
+        <comment>tz_regions</comment>
+        <translation>欧洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="38"/>
+        <source>Indian</source>
+        <comment>tz_regions</comment>
+        <translation>印度</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="39"/>
+        <source>Pacific</source>
+        <comment>tz_regions</comment>
+        <translation>太平洋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="50"/>
+        <source>Abidjan</source>
+        <comment>tz_names</comment>
+        <translation>阿比让</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="51"/>
+        <source>Accra</source>
+        <comment>tz_names</comment>
+        <translation>阿克拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="52"/>
+        <source>Adak</source>
+        <comment>tz_names</comment>
+        <translation>阿达克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="53"/>
+        <source>Addis Ababa</source>
+        <comment>tz_names</comment>
+        <translation>亚的斯亚贝巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="54"/>
+        <source>Adelaide</source>
+        <comment>tz_names</comment>
+        <translation>阿德莱德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="55"/>
+        <source>Aden</source>
+        <comment>tz_names</comment>
+        <translation>亚丁</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="56"/>
+        <source>Algiers</source>
+        <comment>tz_names</comment>
+        <translation>阿尔及尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="57"/>
+        <source>Almaty</source>
+        <comment>tz_names</comment>
+        <translation>阿拉木图</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="58"/>
+        <source>Amman</source>
+        <comment>tz_names</comment>
+        <translation>安曼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="59"/>
+        <source>Amsterdam</source>
+        <comment>tz_names</comment>
+        <translation>阿姆斯特丹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="60"/>
+        <source>Anadyr</source>
+        <comment>tz_names</comment>
+        <translation>阿纳迪尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="61"/>
+        <source>Anchorage</source>
+        <comment>tz_names</comment>
+        <translation>安克雷奇</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="62"/>
+        <source>Andorra</source>
+        <comment>tz_names</comment>
+        <translation>安道尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="63"/>
+        <source>Anguilla</source>
+        <comment>tz_names</comment>
+        <translation>安圭拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="64"/>
+        <source>Antananarivo</source>
+        <comment>tz_names</comment>
+        <translation>塔那那利佛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="65"/>
+        <source>Antigua</source>
+        <comment>tz_names</comment>
+        <translation>安提瓜</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="66"/>
+        <source>Apia</source>
+        <comment>tz_names</comment>
+        <translation>阿皮亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="67"/>
+        <source>Aqtau</source>
+        <comment>tz_names</comment>
+        <translation>阿克托</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="68"/>
+        <source>Aqtobe</source>
+        <comment>tz_names</comment>
+        <translation>阿克托贝</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="69"/>
+        <source>Araguaina</source>
+        <comment>tz_names</comment>
+        <translation>阿拉瓜伊纳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="70"/>
+        <source>Argentina/Buenos Aires</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/布宜诺斯艾利斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="71"/>
+        <source>Argentina/Catamarca</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/卡塔马卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="72"/>
+        <source>Argentina/Cordoba</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/科尔多瓦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="73"/>
+        <source>Argentina/Jujuy</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/胡胡伊</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="74"/>
+        <source>Argentina/La Rioja</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/拉里奥哈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="75"/>
+        <source>Argentina/Mendoza</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/门多萨</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="76"/>
+        <source>Argentina/Rio Gallegos</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/里奥加列戈斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="77"/>
+        <source>Argentina/Salta</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/萨尔塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="78"/>
+        <source>Argentina/San Juan</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/圣胡安</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="79"/>
+        <source>Argentina/San Luis</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/圣路易斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="80"/>
+        <source>Argentina/Tucuman</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/图库曼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="81"/>
+        <source>Argentina/Ushuaia</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/乌斯怀亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="82"/>
+        <source>Aruba</source>
+        <comment>tz_names</comment>
+        <translation>阿鲁巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="83"/>
+        <source>Ashgabat</source>
+        <comment>tz_names</comment>
+        <translation>阿什哈巴德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="84"/>
+        <source>Asmara</source>
+        <comment>tz_names</comment>
+        <translation>阿斯马拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="85"/>
+        <source>Astrakhan</source>
+        <comment>tz_names</comment>
+        <translation>阿斯特拉罕</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="86"/>
+        <source>Asuncion</source>
+        <comment>tz_names</comment>
+        <translation>亚松森</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="87"/>
+        <source>Athens</source>
+        <comment>tz_names</comment>
+        <translation>雅典</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="88"/>
+        <source>Atikokan</source>
+        <comment>tz_names</comment>
+        <translation>阿提科坎</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="89"/>
+        <source>Atyrau</source>
+        <comment>tz_names</comment>
+        <translation>阿特劳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="90"/>
+        <source>Auckland</source>
+        <comment>tz_names</comment>
+        <translation>奥克兰</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="91"/>
+        <source>Azores</source>
+        <comment>tz_names</comment>
+        <translation>亚速尔群岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="92"/>
+        <source>Baghdad</source>
+        <comment>tz_names</comment>
+        <translation>巴格达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="93"/>
+        <source>Bahia</source>
+        <comment>tz_names</comment>
+        <translation>巴伊亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="94"/>
+        <source>Bahia Banderas</source>
+        <comment>tz_names</comment>
+        <translation>巴伊亚·班德拉斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="95"/>
+        <source>Bahrain</source>
+        <comment>tz_names</comment>
+        <translation>巴林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="96"/>
+        <source>Baku</source>
+        <comment>tz_names</comment>
+        <translation>巴库</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="97"/>
+        <source>Bamako</source>
+        <comment>tz_names</comment>
+        <translation>巴马科</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="98"/>
+        <source>Bangkok</source>
+        <comment>tz_names</comment>
+        <translation>曼谷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="99"/>
+        <source>Bangui</source>
+        <comment>tz_names</comment>
+        <translation>班吉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="100"/>
+        <source>Banjul</source>
+        <comment>tz_names</comment>
+        <translation>班珠尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="101"/>
+        <source>Barbados</source>
+        <comment>tz_names</comment>
+        <translation>巴巴多斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="102"/>
+        <source>Barnaul</source>
+        <comment>tz_names</comment>
+        <translation>巴尔瑙尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="103"/>
+        <source>Beirut</source>
+        <comment>tz_names</comment>
+        <translation>贝鲁特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="104"/>
+        <source>Belem</source>
+        <comment>tz_names</comment>
+        <translation>贝伦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="105"/>
+        <source>Belgrade</source>
+        <comment>tz_names</comment>
+        <translation>贝尔格莱德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="106"/>
+        <source>Belize</source>
+        <comment>tz_names</comment>
+        <translation>伯利兹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="107"/>
+        <source>Berlin</source>
+        <comment>tz_names</comment>
+        <translation>柏林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="108"/>
+        <source>Bermuda</source>
+        <comment>tz_names</comment>
+        <translation>百慕大</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="109"/>
+        <source>Bishkek</source>
+        <comment>tz_names</comment>
+        <translation>比什凯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="110"/>
+        <source>Bissau</source>
+        <comment>tz_names</comment>
+        <translation>比绍</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="111"/>
+        <source>Blanc-Sablon</source>
+        <comment>tz_names</comment>
+        <translation>布兰克·萨布隆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="112"/>
+        <source>Blantyre</source>
+        <comment>tz_names</comment>
+        <translation>布兰太尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="113"/>
+        <source>Boa Vista</source>
+        <comment>tz_names</comment>
+        <translation>博阿维斯塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="114"/>
+        <source>Bogota</source>
+        <comment>tz_names</comment>
+        <translation>波哥大</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="115"/>
+        <source>Boise</source>
+        <comment>tz_names</comment>
+        <translation>博伊西</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="116"/>
+        <source>Bougainville</source>
+        <comment>tz_names</comment>
+        <translation>布干维尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="117"/>
+        <source>Bratislava</source>
+        <comment>tz_names</comment>
+        <translation>布拉迪斯拉发</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="118"/>
+        <source>Brazzaville</source>
+        <comment>tz_names</comment>
+        <translation>布拉柴维尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="119"/>
+        <source>Brisbane</source>
+        <comment>tz_names</comment>
+        <translation>布里斯班</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="120"/>
+        <source>Broken Hill</source>
+        <comment>tz_names</comment>
+        <translation>布罗肯希尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="121"/>
+        <source>Brunei</source>
+        <comment>tz_names</comment>
+        <translation>文莱</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="122"/>
+        <source>Brussels</source>
+        <comment>tz_names</comment>
+        <translation>布鲁塞尔</translation>
+    </message>
+    <message>
+    <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="122"/>
+    <source>Beijing</source>
+    <comment>tz_names</comment>
+    <translation>北京</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="123"/>
+        <source>Bucharest</source>
+        <comment>tz_names</comment>
+        <translation>布加勒斯特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="124"/>
+        <source>Budapest</source>
+        <comment>tz_names</comment>
+        <translation>布达佩斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="125"/>
+        <source>Bujumbura</source>
+        <comment>tz_names</comment>
+        <translation>布琼布拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="126"/>
+        <source>Busingen</source>
+        <comment>tz_names</comment>
+        <translation>比辛根</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="127"/>
+        <source>Cairo</source>
+        <comment>tz_names</comment>
+        <translation>开罗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="128"/>
+        <source>Cambridge Bay</source>
+        <comment>tz_names</comment>
+        <translation>剑桥湾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="129"/>
+        <source>Campo Grande</source>
+        <comment>tz_names</comment>
+        <translation>坎波格兰德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="130"/>
+        <source>Canary</source>
+        <comment>tz_names</comment>
+        <translation>加那利群岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="131"/>
+        <source>Cancun</source>
+        <comment>tz_names</comment>
+        <translation>坎昆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="132"/>
+        <source>Cape Verde</source>
+        <comment>tz_names</comment>
+        <translation>佛得角</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="133"/>
+        <source>Caracas</source>
+        <comment>tz_names</comment>
+        <translation>加拉加斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="134"/>
+        <source>Casablanca</source>
+        <comment>tz_names</comment>
+        <translation>卡萨布兰卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="135"/>
+        <source>Casey</source>
+        <comment>tz_names</comment>
+        <translation>凯西</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="136"/>
+        <source>Cayenne</source>
+        <comment>tz_names</comment>
+        <translation>卡宴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="137"/>
+        <source>Cayman</source>
+        <comment>tz_names</comment>
+        <translation>开曼群岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="138"/>
+        <source>Ceuta</source>
+        <comment>tz_names</comment>
+        <translation>休达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="139"/>
+        <source>Chagos</source>
+        <comment>tz_names</comment>
+        <translation>查戈斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="140"/>
+        <source>Chatham</source>
+        <comment>tz_names</comment>
+        <translation>查塔姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="141"/>
+        <source>Chicago</source>
+        <comment>tz_names</comment>
+        <translation>芝加哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="142"/>
+        <source>Chihuahua</source>
+        <comment>tz_names</comment>
+        <translation>吉娃娃</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="143"/>
+        <source>Chisinau</source>
+        <comment>tz_names</comment>
+        <translation>基希讷乌</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="144"/>
+        <source>Chita</source>
+        <comment>tz_names</comment>
+        <translation>赤塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="145"/>
+        <source>Choibalsan</source>
+        <comment>tz_names</comment>
+        <translation>乔巴桑</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="146"/>
+        <source>Christmas</source>
+        <comment>tz_names</comment>
+        <translation>伯利恒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="147"/>
+        <source>Chuuk</source>
+        <comment>tz_names</comment>
+        <translation>楚克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="148"/>
+        <source>Cocos</source>
+        <comment>tz_names</comment>
+        <translation>科科斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="149"/>
+        <source>Colombo</source>
+        <comment>tz_names</comment>
+        <translation>科伦坡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="150"/>
+        <source>Comoro</source>
+        <comment>tz_names</comment>
+        <translation>科摩罗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="151"/>
+        <source>Conakry</source>
+        <comment>tz_names</comment>
+        <translation>科纳克里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="152"/>
+        <source>Copenhagen</source>
+        <comment>tz_names</comment>
+        <translation>哥本哈根</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="153"/>
+        <source>Costa Rica</source>
+        <comment>tz_names</comment>
+        <translation>哥斯达黎加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="154"/>
+        <source>Creston</source>
+        <comment>tz_names</comment>
+        <translation>克雷斯顿</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="155"/>
+        <source>Cuiaba</source>
+        <comment>tz_names</comment>
+        <translation>库亚巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="156"/>
+        <source>Curacao</source>
+        <comment>tz_names</comment>
+        <translation>库拉索</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="157"/>
+        <source>Currie</source>
+        <comment>tz_names</comment>
+        <translation>柯里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="158"/>
+        <source>Dakar</source>
+        <comment>tz_names</comment>
+        <translation>达喀尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="159"/>
+        <source>Damascus</source>
+        <comment>tz_names</comment>
+        <translation>大马士革</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="160"/>
+        <source>Danmarkshavn</source>
+        <comment>tz_names</comment>
+        <translation>丹麦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="161"/>
+        <source>Dar es Salaam</source>
+        <comment>tz_names</comment>
+        <translation>达累斯萨拉姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="162"/>
+        <source>Darwin</source>
+        <comment>tz_names</comment>
+        <translation>达尔文</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="163"/>
+        <source>Davis</source>
+        <comment>tz_names</comment>
+        <translation>戴维斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="164"/>
+        <source>Dawson</source>
+        <comment>tz_names</comment>
+        <translation>道森</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="165"/>
+        <source>Dawson Creek</source>
+        <comment>tz_names</comment>
+        <translation>道森溪</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="166"/>
+        <source>Denver</source>
+        <comment>tz_names</comment>
+        <translation>丹佛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="167"/>
+        <source>Detroit</source>
+        <comment>tz_names</comment>
+        <translation>底特律</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="168"/>
+        <source>Dhaka</source>
+        <comment>tz_names</comment>
+        <translation>达卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="169"/>
+        <source>Dili</source>
+        <comment>tz_names</comment>
+        <translation>帝力</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="170"/>
+        <source>Djibouti</source>
+        <comment>tz_names</comment>
+        <translation>吉布提</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="171"/>
+        <source>Dominica</source>
+        <comment>tz_names</comment>
+        <translation>多米尼克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="172"/>
+        <source>Douala</source>
+        <comment>tz_names</comment>
+        <translation>杜阿拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="173"/>
+        <source>Dubai</source>
+        <comment>tz_names</comment>
+        <translation>迪拜</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="174"/>
+        <source>Dublin</source>
+        <comment>tz_names</comment>
+        <translation>都柏林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="175"/>
+        <source>DumontDUrville</source>
+        <comment>tz_names</comment>
+        <translation>杜蒙·杜维尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="176"/>
+        <source>Dushanbe</source>
+        <comment>tz_names</comment>
+        <translation>杜尚别</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="177"/>
+        <source>Easter</source>
+        <comment>tz_names</comment>
+        <translation>伊斯特迪</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="178"/>
+        <source>Edmonton</source>
+        <comment>tz_names</comment>
+        <translation>埃德蒙顿</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="179"/>
+        <source>Efate</source>
+        <comment>tz_names</comment>
+        <translation>埃法特岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="180"/>
+        <source>Eirunepe</source>
+        <comment>tz_names</comment>
+        <translation>埃鲁内佩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="181"/>
+        <source>El Aaiun</source>
+        <comment>tz_names</comment>
+        <translation>阿尤恩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="182"/>
+        <source>El Salvador</source>
+        <comment>tz_names</comment>
+        <translation>萨尔瓦多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="183"/>
+        <source>Enderbury</source>
+        <comment>tz_names</comment>
+        <translation>恩德伯里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="184"/>
+        <source>Eucla</source>
+        <comment>tz_names</comment>
+        <translation>尤克拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="185"/>
+        <source>Fakaofo</source>
+        <comment>tz_names</comment>
+        <translation>法考福</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="186"/>
+        <source>Famagusta</source>
+        <comment>tz_names</comment>
+        <translation>法马古斯塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="187"/>
+        <source>Faroe</source>
+        <comment>tz_names</comment>
+        <translation>法罗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="188"/>
+        <source>Fiji</source>
+        <comment>tz_names</comment>
+        <translation>斐济</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="189"/>
+        <source>Fort Nelson</source>
+        <comment>tz_names</comment>
+        <translation>纳尔逊堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="190"/>
+        <source>Fortaleza</source>
+        <comment>tz_names</comment>
+        <translation>福塔莱萨</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="191"/>
+        <source>Freetown</source>
+        <comment>tz_names</comment>
+        <translation>弗里敦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="192"/>
+        <source>Funafuti</source>
+        <comment>tz_names</comment>
+        <translation>富纳富提</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="193"/>
+        <source>Gaborone</source>
+        <comment>tz_names</comment>
+        <translation>哈博罗内</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="194"/>
+        <source>Galapagos</source>
+        <comment>tz_names</comment>
+        <translation>加拉帕戈斯群岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="195"/>
+        <source>Gambier</source>
+        <comment>tz_names</comment>
+        <translation>甘比尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="196"/>
+        <source>Gaza</source>
+        <comment>tz_names</comment>
+        <translation>加沙</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="197"/>
+        <source>Gibraltar</source>
+        <comment>tz_names</comment>
+        <translation>直布罗陀</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="198"/>
+        <source>Glace Bay</source>
+        <comment>tz_names</comment>
+        <translation>格莱斯湾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="199"/>
+        <source>Godthab</source>
+        <comment>tz_names</comment>
+        <translation>戈德萨布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="200"/>
+        <source>Goose Bay</source>
+        <comment>tz_names</comment>
+        <translation>鹅湾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="201"/>
+        <source>Grand Turk</source>
+        <comment>tz_names</comment>
+        <translation>大特克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="202"/>
+        <source>Grenada</source>
+        <comment>tz_names</comment>
+        <translation>格林纳达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="203"/>
+        <source>Guadalcanal</source>
+        <comment>tz_names</comment>
+        <translation>瓜达尔卡纳尔岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="204"/>
+        <source>Guadeloupe</source>
+        <comment>tz_names</comment>
+        <translation>瓜德罗普岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="205"/>
+        <source>Guam</source>
+        <comment>tz_names</comment>
+        <translation>关岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="206"/>
+        <source>Guatemala</source>
+        <comment>tz_names</comment>
+        <translation>危地马拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="207"/>
+        <source>Guayaquil</source>
+        <comment>tz_names</comment>
+        <translation>瓜亚基尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="208"/>
+        <source>Guernsey</source>
+        <comment>tz_names</comment>
+        <translation>根西岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="209"/>
+        <source>Guyana</source>
+        <comment>tz_names</comment>
+        <translation>圭亚那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="210"/>
+        <source>Halifax</source>
+        <comment>tz_names</comment>
+        <translation>哈利法克斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="211"/>
+        <source>Harare</source>
+        <comment>tz_names</comment>
+        <translation>哈拉雷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="212"/>
+        <source>Havana</source>
+        <comment>tz_names</comment>
+        <translation>哈瓦那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="213"/>
+        <source>Hebron</source>
+        <comment>tz_names</comment>
+        <translation>希伯伦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="214"/>
+        <source>Helsinki</source>
+        <comment>tz_names</comment>
+        <translation>赫尔辛基</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="215"/>
+        <source>Hermosillo</source>
+        <comment>tz_names</comment>
+        <translation>埃莫西洛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="216"/>
+        <source>Ho Chi Minh</source>
+        <comment>tz_names</comment>
+        <translation>胡志明</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="217"/>
+        <source>Hobart</source>
+        <comment>tz_names</comment>
+        <translation>霍巴特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="218"/>
+        <source>Hong Kong(China)</source>
+        <comment>tz_names</comment>
+        <translation>香港（中国）</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="219"/>
+        <source>Honolulu</source>
+        <comment>tz_names</comment>
+        <translation>檀香山</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="220"/>
+        <source>Hovd</source>
+        <comment>tz_names</comment>
+        <translation>科布多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="221"/>
+        <source>Indiana/Indianapolis</source>
+        <comment>tz_names</comment>
+        <translation>印第安纳州/印第安纳波利斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="222"/>
+        <source>Indiana/Knox</source>
+        <comment>tz_names</comment>
+        <translation>印第安纳州/诺克斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="223"/>
+        <source>Indiana/Marengo</source>
+        <comment>tz_names</comment>
+        <translation>印度/马伦戈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="224"/>
+        <source>Indiana/Petersburg</source>
+        <comment>tz_names</comment>
+        <translation>印第安纳州/彼得堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="225"/>
+        <source>Indiana/Tell City</source>
+        <comment>tz_names</comment>
+        <translation>印第安纳州/泰尔城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="226"/>
+        <source>Indiana/Vevay</source>
+        <comment>tz_names</comment>
+        <translation>印度/沃韦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="227"/>
+        <source>Indiana/Vincennes</source>
+        <comment>tz_names</comment>
+        <translation>印第安纳州/文森斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="228"/>
+        <source>Indiana/Winamac</source>
+        <comment>tz_names</comment>
+        <translation>印第安纳州/威纳马克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="229"/>
+        <source>Inuvik</source>
+        <comment>tz_names</comment>
+        <translation>伊努维克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="230"/>
+        <source>Iqaluit</source>
+        <comment>tz_names</comment>
+        <translation>伊魁特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="231"/>
+        <source>Irkutsk</source>
+        <comment>tz_names</comment>
+        <translation>伊尔库茨克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="232"/>
+        <source>Isle of Man</source>
+        <comment>tz_names</comment>
+        <translation>马恩岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="233"/>
+        <source>Istanbul</source>
+        <comment>tz_names</comment>
+        <translation>伊斯坦布尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="234"/>
+        <source>Jakarta</source>
+        <comment>tz_names</comment>
+        <translation>雅加达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="235"/>
+        <source>Jamaica</source>
+        <comment>tz_names</comment>
+        <translation>牙买加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="236"/>
+        <source>Jayapura</source>
+        <comment>tz_names</comment>
+        <translation>查亚普拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="237"/>
+        <source>Jersey</source>
+        <comment>tz_names</comment>
+        <translation>泽西岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="238"/>
+        <source>Jerusalem</source>
+        <comment>tz_names</comment>
+        <translation>耶路撒冷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="239"/>
+        <source>Johannesburg</source>
+        <comment>tz_names</comment>
+        <translation>约翰内斯堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="240"/>
+        <source>Juba</source>
+        <comment>tz_names</comment>
+        <translation>朱巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="241"/>
+        <source>Juneau</source>
+        <comment>tz_names</comment>
+        <translation>朱诺</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="242"/>
+        <source>Kabul</source>
+        <comment>tz_names</comment>
+        <translation>喀布尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="243"/>
+        <source>Kaliningrad</source>
+        <comment>tz_names</comment>
+        <translation>加里宁格勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="244"/>
+        <source>Kamchatka</source>
+        <comment>tz_names</comment>
+        <translation>堪察加半岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="245"/>
+        <source>Kampala</source>
+        <comment>tz_names</comment>
+        <translation>坎帕拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="246"/>
+        <source>Karachi</source>
+        <comment>tz_names</comment>
+        <translation>卡拉奇</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="247"/>
+        <source>Kathmandu</source>
+        <comment>tz_names</comment>
+        <translation>加德满都</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="248"/>
+        <source>Kentucky/Louisville</source>
+        <comment>tz_names</comment>
+        <translation>肯塔基州/路易斯维尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="249"/>
+        <source>Kentucky/Monticello</source>
+        <comment>tz_names</comment>
+        <translation>肯塔基州/蒙蒂塞洛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="250"/>
+        <source>Kerguelen</source>
+        <comment>tz_names</comment>
+        <translation>凯尔盖朗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="251"/>
+        <source>Khandyga</source>
+        <comment>tz_names</comment>
+        <translation>坎代加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="252"/>
+        <source>Khartoum</source>
+        <comment>tz_names</comment>
+        <translation>喀土穆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="253"/>
+        <source>Kiev</source>
+        <comment>tz_names</comment>
+        <translation>基辅</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="254"/>
+        <source>Kigali</source>
+        <comment>tz_names</comment>
+        <translation>基加利</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="255"/>
+        <source>Kinshasa</source>
+        <comment>tz_names</comment>
+        <translation>金沙萨</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="256"/>
+        <source>Kiritimati</source>
+        <comment>tz_names</comment>
+        <translation>基里蒂马提斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="257"/>
+        <source>Kirov</source>
+        <comment>tz_names</comment>
+        <translation>基洛夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="258"/>
+        <source>Kolkata</source>
+        <comment>tz_names</comment>
+        <translation>加尔格达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="259"/>
+        <source>Kosrae</source>
+        <comment>tz_names</comment>
+        <translation>科斯雷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="260"/>
+        <source>Kralendijk</source>
+        <comment>tz_names</comment>
+        <translation>克罗地亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="261"/>
+        <source>Krasnoyarsk</source>
+        <comment>tz_names</comment>
+        <translation>克拉斯诺亚尔斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="262"/>
+        <source>Kuala Lumpur</source>
+        <comment>tz_names</comment>
+        <translation>吉隆坡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="263"/>
+        <source>Kuching</source>
+        <comment>tz_names</comment>
+        <translation>古晋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="264"/>
+        <source>Kuwait</source>
+        <comment>tz_names</comment>
+        <translation>科威特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="265"/>
+        <source>Kwajalein</source>
+        <comment>tz_names</comment>
+        <translation>夸贾林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="266"/>
+        <source>La Paz</source>
+        <comment>tz_names</comment>
+        <translation>拉巴斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="267"/>
+        <source>Lagos</source>
+        <comment>tz_names</comment>
+        <translation>拉各斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="268"/>
+        <source>Libreville</source>
+        <comment>tz_names</comment>
+        <translation>利伯维尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="269"/>
+        <source>Lima</source>
+        <comment>tz_names</comment>
+        <translation>利马</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="270"/>
+        <source>Lindeman</source>
+        <comment>tz_names</comment>
+        <translation>林德曼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="271"/>
+        <source>Lisbon</source>
+        <comment>tz_names</comment>
+        <translation>里斯本</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="272"/>
+        <source>Ljubljana</source>
+        <comment>tz_names</comment>
+        <translation>卢布尔雅那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="273"/>
+        <source>Lome</source>
+        <comment>tz_names</comment>
+        <translation>多哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="274"/>
+        <source>London</source>
+        <comment>tz_names</comment>
+        <translation>伦敦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="275"/>
+        <source>Longyearbyen</source>
+        <comment>tz_names</comment>
+        <translation>朗伊尔城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="276"/>
+        <source>Lord Howe</source>
+        <comment>tz_names</comment>
+        <translation>豪勋爵</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="277"/>
+        <source>Los Angeles</source>
+        <comment>tz_names</comment>
+        <translation>洛杉矶</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="278"/>
+        <source>Lower Princes</source>
+        <comment>tz_names</comment>
+        <translation>圣马丁</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="279"/>
+        <source>Luanda</source>
+        <comment>tz_names</comment>
+        <translation>罗安达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="280"/>
+        <source>Lubumbashi</source>
+        <comment>tz_names</comment>
+        <translation>卢本巴希</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="281"/>
+        <source>Lusaka</source>
+        <comment>tz_names</comment>
+        <translation>卢萨卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="282"/>
+        <source>Luxembourg</source>
+        <comment>tz_names</comment>
+        <translation>卢森堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="283"/>
+        <source>Macau(China)</source>
+        <comment>tz_names</comment>
+        <translation>澳门（中国）</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="284"/>
+        <source>Maceio</source>
+        <comment>tz_names</comment>
+        <translation>马塞奥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="285"/>
+        <source>Macquarie</source>
+        <comment>tz_names</comment>
+        <translation>麦格理</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="286"/>
+        <source>Madeira</source>
+        <comment>tz_names</comment>
+        <translation>马德拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="287"/>
+        <source>Madrid</source>
+        <comment>tz_names</comment>
+        <translation>马德里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="288"/>
+        <source>Magadan</source>
+        <comment>tz_names</comment>
+        <translation>马加丹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="289"/>
+        <source>Mahe</source>
+        <comment>tz_names</comment>
+        <translation>马埃</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="290"/>
+        <source>Majuro</source>
+        <comment>tz_names</comment>
+        <translation>马朱罗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="291"/>
+        <source>Makassar</source>
+        <comment>tz_names</comment>
+        <translation>望加锡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="292"/>
+        <source>Malabo</source>
+        <comment>tz_names</comment>
+        <translation>马拉博</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="293"/>
+        <source>Maldives</source>
+        <comment>tz_names</comment>
+        <translation>马尔代夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="294"/>
+        <source>Malta</source>
+        <comment>tz_names</comment>
+        <translation>马耳他</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="295"/>
+        <source>Managua</source>
+        <comment>tz_names</comment>
+        <translation>马那瓜</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="296"/>
+        <source>Manaus</source>
+        <comment>tz_names</comment>
+        <translation>马瑙斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="297"/>
+        <source>Manila</source>
+        <comment>tz_names</comment>
+        <translation>马尼拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="298"/>
+        <source>Maputo</source>
+        <comment>tz_names</comment>
+        <translation>马普托</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="299"/>
+        <source>Mariehamn</source>
+        <comment>tz_names</comment>
+        <translation>玛丽港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="300"/>
+        <source>Marigot</source>
+        <comment>tz_names</comment>
+        <translation>马里戈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="301"/>
+        <source>Marquesas</source>
+        <comment>tz_names</comment>
+        <translation>马克萨斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="302"/>
+        <source>Martinique</source>
+        <comment>tz_names</comment>
+        <translation>马提尼克岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="303"/>
+        <source>Maseru</source>
+        <comment>tz_names</comment>
+        <translation>马塞卢</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="304"/>
+        <source>Matamoros</source>
+        <comment>tz_names</comment>
+        <translation>马塔莫罗斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="305"/>
+        <source>Mauritius</source>
+        <comment>tz_names</comment>
+        <translation>毛里求斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="306"/>
+        <source>Mawson</source>
+        <comment>tz_names</comment>
+        <translation>莫森</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="307"/>
+        <source>Mayotte</source>
+        <comment>tz_names</comment>
+        <translation>马约特岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="308"/>
+        <source>Mazatlan</source>
+        <comment>tz_names</comment>
+        <translation>马萨特兰</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="309"/>
+        <source>Mbabane</source>
+        <comment>tz_names</comment>
+        <translation>姆巴巴内</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="310"/>
+        <source>McMurdo</source>
+        <comment>tz_names</comment>
+        <translation>麦克默多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="311"/>
+        <source>Melbourne</source>
+        <comment>tz_names</comment>
+        <translation>墨尔本</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="312"/>
+        <source>Menominee</source>
+        <comment>tz_names</comment>
+        <translation>梅诺米尼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="313"/>
+        <source>Merida</source>
+        <comment>tz_names</comment>
+        <translation>梅里达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="314"/>
+        <source>Metlakatla</source>
+        <comment>tz_names</comment>
+        <translation>梅特拉卡特拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="315"/>
+        <source>Mexico City</source>
+        <comment>tz_names</comment>
+        <translation>墨西哥城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="316"/>
+        <source>Midway</source>
+        <comment>tz_names</comment>
+        <translation>中途岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="317"/>
+        <source>Minsk</source>
+        <comment>tz_names</comment>
+        <translation>明斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="318"/>
+        <source>Miquelon</source>
+        <comment>tz_names</comment>
+        <translation>密克隆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="319"/>
+        <source>Mogadishu</source>
+        <comment>tz_names</comment>
+        <translation>摩加迪沙</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="320"/>
+        <source>Monaco</source>
+        <comment>tz_names</comment>
+        <translation>摩纳哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="321"/>
+        <source>Moncton</source>
+        <comment>tz_names</comment>
+        <translation>蒙克顿</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="322"/>
+        <source>Monrovia</source>
+        <comment>tz_names</comment>
+        <translation>蒙罗维亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="323"/>
+        <source>Monterrey</source>
+        <comment>tz_names</comment>
+        <translation>蒙特雷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="324"/>
+        <source>Montevideo</source>
+        <comment>tz_names</comment>
+        <translation>蒙得维的亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="325"/>
+        <source>Montserrat</source>
+        <comment>tz_names</comment>
+        <translation>蒙特塞拉特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="326"/>
+        <source>Moscow</source>
+        <comment>tz_names</comment>
+        <translation>莫斯科</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="327"/>
+        <source>Muscat</source>
+        <comment>tz_names</comment>
+        <translation>马斯喀特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="328"/>
+        <source>Nairobi</source>
+        <comment>tz_names</comment>
+        <translation>内罗毕</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="329"/>
+        <source>Nassau</source>
+        <comment>tz_names</comment>
+        <translation>拿骚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="330"/>
+        <source>Nauru</source>
+        <comment>tz_names</comment>
+        <translation>瑙鲁</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="331"/>
+        <source>Ndjamena</source>
+        <comment>tz_names</comment>
+        <translation>恩贾梅纳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="332"/>
+        <source>New York</source>
+        <comment>tz_names</comment>
+        <translation>纽约</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="333"/>
+        <source>Niamey</source>
+        <comment>tz_names</comment>
+        <translation>尼亚美</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="334"/>
+        <source>Nicosia</source>
+        <comment>tz_names</comment>
+        <translation>尼科西亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="335"/>
+        <source>Nipigon</source>
+        <comment>tz_names</comment>
+        <translation>尼皮贡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="336"/>
+        <source>Niue</source>
+        <comment>tz_names</comment>
+        <translation>纽埃</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="337"/>
+        <source>Nome</source>
+        <comment>tz_names</comment>
+        <translation>诺姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="338"/>
+        <source>Norfolk</source>
+        <comment>tz_names</comment>
+        <translation>诺福克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="339"/>
+        <source>Noronha</source>
+        <comment>tz_names</comment>
+        <translation>诺罗尼亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="340"/>
+        <source>North Dakota/Beulah</source>
+        <comment>tz_names</comment>
+        <translation>北达科他州/比拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="341"/>
+        <source>North Dakota/Center</source>
+        <comment>tz_names</comment>
+        <translation>北达科他州/中心</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="342"/>
+        <source>North Dakota/New Salem</source>
+        <comment>tz_names</comment>
+        <translation>北达科他州/新塞勒姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="343"/>
+        <source>Nouakchott</source>
+        <comment>tz_names</comment>
+        <translation>努瓦克肖特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="344"/>
+        <source>Noumea</source>
+        <comment>tz_names</comment>
+        <translation>努美阿</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="345"/>
+        <source>Novokuznetsk</source>
+        <comment>tz_names</comment>
+        <translation>新库兹涅茨克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="346"/>
+        <source>Novosibirsk</source>
+        <comment>tz_names</comment>
+        <translation>新西伯利亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="347"/>
+        <source>Ojinaga</source>
+        <comment>tz_names</comment>
+        <translation>魁北克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="348"/>
+        <source>Omsk</source>
+        <comment>tz_names</comment>
+        <translation>鄂木斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="349"/>
+        <source>Oral</source>
+        <comment>tz_names</comment>
+        <translation>多拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="350"/>
+        <source>Oslo</source>
+        <comment>tz_names</comment>
+        <translation>奥斯陆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="351"/>
+        <source>Ouagadougou</source>
+        <comment>tz_names</comment>
+        <translation>瓦加杜古</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="352"/>
+        <source>Pago Pago</source>
+        <comment>tz_names</comment>
+        <translation>帕果帕果</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="353"/>
+        <source>Palau</source>
+        <comment>tz_names</comment>
+        <translation>帕劳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="354"/>
+        <source>Palmer</source>
+        <comment>tz_names</comment>
+        <translation>帕尔默</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="355"/>
+        <source>Panama</source>
+        <comment>tz_names</comment>
+        <translation>巴拿马</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="356"/>
+        <source>Pangnirtung</source>
+        <comment>tz_names</comment>
+        <translation>巴芬岛的旁涅唐</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="357"/>
+        <source>Paramaribo</source>
+        <comment>tz_names</comment>
+        <translation>帕拉马里博</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="358"/>
+        <source>Paris</source>
+        <comment>tz_names</comment>
+        <translation>巴黎</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="359"/>
+        <source>Perth</source>
+        <comment>tz_names</comment>
+        <translation>珀斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="360"/>
+        <source>Phnom Penh</source>
+        <comment>tz_names</comment>
+        <translation>金边</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="361"/>
+        <source>Phoenix</source>
+        <comment>tz_names</comment>
+        <translation>凤凰城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="362"/>
+        <source>Pitcairn</source>
+        <comment>tz_names</comment>
+        <translation>皮特凯恩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="363"/>
+        <source>Podgorica</source>
+        <comment>tz_names</comment>
+        <translation>波德戈里察</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="364"/>
+        <source>Pohnpei</source>
+        <comment>tz_names</comment>
+        <translation>波纳佩岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="365"/>
+        <source>Pontianak</source>
+        <comment>tz_names</comment>
+        <translation>坤甸</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="366"/>
+        <source>Port Moresby</source>
+        <comment>tz_names</comment>
+        <translation>莫尔兹比港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="367"/>
+        <source>Port of Spain</source>
+        <comment>tz_names</comment>
+        <translation>西班牙港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="368"/>
+        <source>Port-au-Prince</source>
+        <comment>tz_names</comment>
+        <translation>太子港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="369"/>
+        <source>Porto Velho</source>
+        <comment>tz_names</comment>
+        <translation>维略港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="370"/>
+        <source>Porto-Novo</source>
+        <comment>tz_names</comment>
+        <translation>波多诺伏</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="371"/>
+        <source>Prague</source>
+        <comment>tz_names</comment>
+        <translation>布拉格</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="372"/>
+        <source>Puerto Rico</source>
+        <comment>tz_names</comment>
+        <translation>波多黎各</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="373"/>
+        <source>Punta Arenas</source>
+        <comment>tz_names</comment>
+        <translation>蓬塔阿雷纳斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="374"/>
+        <source>Pyongyang</source>
+        <comment>tz_names</comment>
+        <translation>平壤</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="375"/>
+        <source>Qatar</source>
+        <comment>tz_names</comment>
+        <translation>卡塔尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="376"/>
+        <source>Qostanay</source>
+        <comment>tz_names</comment>
+        <translation>库斯塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="377"/>
+        <source>Qyzylorda</source>
+        <comment>tz_names</comment>
+        <translation>克孜勒奥尔达</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="378"/>
+        <source>Rainy River</source>
+        <comment>tz_names</comment>
+        <translation>雷尼河</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="379"/>
+        <source>Rankin Inlet</source>
+        <comment>tz_names</comment>
+        <translation>兰京海口</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="380"/>
+        <source>Rarotonga</source>
+        <comment>tz_names</comment>
+        <translation>拉罗汤加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="381"/>
+        <source>Recife</source>
+        <comment>tz_names</comment>
+        <translation>累西腓</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="382"/>
+        <source>Regina</source>
+        <comment>tz_names</comment>
+        <translation>里贾纳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="383"/>
+        <source>Resolute</source>
+        <comment>tz_names</comment>
+        <translation>雷索卢特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="384"/>
+        <source>Reunion</source>
+        <comment>tz_names</comment>
+        <translation>留尼旺岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="385"/>
+        <source>Reykjavik</source>
+        <comment>tz_names</comment>
+        <translation>雷克雅未克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="386"/>
+        <source>Riga</source>
+        <comment>tz_names</comment>
+        <translation>里加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="387"/>
+        <source>Rio Branco</source>
+        <comment>tz_names</comment>
+        <translation>里奥·布兰科</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="388"/>
+        <source>Riyadh</source>
+        <comment>tz_names</comment>
+        <translation>利雅得</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="389"/>
+        <source>Rome</source>
+        <comment>tz_names</comment>
+        <translation>罗马</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="390"/>
+        <source>Rothera</source>
+        <comment>tz_names</comment>
+        <translation>罗瑟拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="391"/>
+        <source>Saipan</source>
+        <comment>tz_names</comment>
+        <translation>塞班岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="392"/>
+        <source>Sakhalin</source>
+        <comment>tz_names</comment>
+        <translation>萨哈林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="393"/>
+        <source>Samara</source>
+        <comment>tz_names</comment>
+        <translation>萨马拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="394"/>
+        <source>Samarkand</source>
+        <comment>tz_names</comment>
+        <translation>撒马尔罕</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="395"/>
+        <source>San Marino</source>
+        <comment>tz_names</comment>
+        <translation>圣马力诺</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="396"/>
+        <source>Santarem</source>
+        <comment>tz_names</comment>
+        <translation>圣塔伦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="397"/>
+        <source>Santiago</source>
+        <comment>tz_names</comment>
+        <translation>圣地亚哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="398"/>
+        <source>Santo Domingo</source>
+        <comment>tz_names</comment>
+        <translation>圣多明各</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="399"/>
+        <source>Sao Paulo</source>
+        <comment>tz_names</comment>
+        <translation>圣保罗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="400"/>
+        <source>Sao Tome</source>
+        <comment>tz_names</comment>
+        <translation>圣多美</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="401"/>
+        <source>Sarajevo</source>
+        <comment>tz_names</comment>
+        <translation>萨拉热窝</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="402"/>
+        <source>Saratov</source>
+        <comment>tz_names</comment>
+        <translation>萨拉托夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="403"/>
+        <source>Scoresbysund</source>
+        <comment>tz_names</comment>
+        <translation>斯科斯比基金</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="404"/>
+        <source>Seoul</source>
+        <comment>tz_names</comment>
+        <translation>首尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="405"/>
+        <source>Shanghai</source>
+        <comment>tz_names</comment>
+        <translation>上海</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="406"/>
+        <source>Simferopol</source>
+        <comment>tz_names</comment>
+        <translation>辛菲罗波尔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="407"/>
+        <source>Singapore</source>
+        <comment>tz_names</comment>
+        <translation>新加坡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="408"/>
+        <source>Sitka</source>
+        <comment>tz_names</comment>
+        <translation>锡特卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="409"/>
+        <source>Skopje</source>
+        <comment>tz_names</comment>
+        <translation>斯科普里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="410"/>
+        <source>Sofia</source>
+        <comment>tz_names</comment>
+        <translation>索菲亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="411"/>
+        <source>South Georgia</source>
+        <comment>tz_names</comment>
+        <translation>南乔治亚州</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="412"/>
+        <source>Srednekolymsk</source>
+        <comment>tz_names</comment>
+        <translation>雅库特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="413"/>
+        <source>St Barthelemy</source>
+        <comment>tz_names</comment>
+        <translation>圣巴泰勒米</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="414"/>
+        <source>St Helena</source>
+        <comment>tz_names</comment>
+        <translation>圣赫勒拿</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="415"/>
+        <source>St Johns</source>
+        <comment>tz_names</comment>
+        <translation>圣约翰</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="416"/>
+        <source>St Kitts</source>
+        <comment>tz_names</comment>
+        <translation>圣基茨</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="417"/>
+        <source>St Lucia</source>
+        <comment>tz_names</comment>
+        <translation>圣卢西亚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="418"/>
+        <source>St Thomas</source>
+        <comment>tz_names</comment>
+        <translation>圣托马斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="419"/>
+        <source>St Vincent</source>
+        <comment>tz_names</comment>
+        <translation>圣文森特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="420"/>
+        <source>Stanley</source>
+        <comment>tz_names</comment>
+        <translation>斯坦利</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="421"/>
+        <source>Stockholm</source>
+        <comment>tz_names</comment>
+        <translation>斯德哥尔摩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="422"/>
+        <source>Swift Current</source>
+        <comment>tz_names</comment>
+        <translation>斯威夫特卡伦特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="423"/>
+        <source>Sydney</source>
+        <comment>tz_names</comment>
+        <translation>悉尼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="424"/>
+        <source>Syowa</source>
+        <comment>tz_names</comment>
+        <translation>圣何塞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="425"/>
+        <source>Tahiti</source>
+        <comment>tz_names</comment>
+        <translation>大溪地</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="426"/>
+        <source>Taipei(China)</source>
+        <comment>tz_names</comment>
+        <translation>台北（中国）</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="427"/>
+        <source>Tallinn</source>
+        <comment>tz_names</comment>
+        <translation>塔林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="428"/>
+        <source>Tarawa</source>
+        <comment>tz_names</comment>
+        <translation>塔拉瓦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="429"/>
+        <source>Tashkent</source>
+        <comment>tz_names</comment>
+        <translation>塔什干</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="430"/>
+        <source>Tbilisi</source>
+        <comment>tz_names</comment>
+        <translation>第比利斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="431"/>
+        <source>Tegucigalpa</source>
+        <comment>tz_names</comment>
+        <translation>特古西加尔巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="432"/>
+        <source>Tehran</source>
+        <comment>tz_names</comment>
+        <translation>德黑兰</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="433"/>
+        <source>Thimphu</source>
+        <comment>tz_names</comment>
+        <translation>廷布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="434"/>
+        <source>Thule</source>
+        <comment>tz_names</comment>
+        <translation>图勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="435"/>
+        <source>Thunder Bay</source>
+        <comment>tz_names</comment>
+        <translation>雷湾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="436"/>
+        <source>Tijuana</source>
+        <comment>tz_names</comment>
+        <translation>蒂华纳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="437"/>
+        <source>Tirane</source>
+        <comment>tz_names</comment>
+        <translation>地拉那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="438"/>
+        <source>Tokyo</source>
+        <comment>tz_names</comment>
+        <translation>东京</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="439"/>
+        <source>Tomsk</source>
+        <comment>tz_names</comment>
+        <translation>托木斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="440"/>
+        <source>Tongatapu</source>
+        <comment>tz_names</comment>
+        <translation>汤加塔布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="441"/>
+        <source>Toronto</source>
+        <comment>tz_names</comment>
+        <translation>多伦多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="442"/>
+        <source>Tortola</source>
+        <comment>tz_names</comment>
+        <translation>托托拉岛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="443"/>
+        <source>Tripoli</source>
+        <comment>tz_names</comment>
+        <translation>的黎波里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="444"/>
+        <source>Troll</source>
+        <comment>tz_names</comment>
+        <translation>特罗尔海坦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="445"/>
+        <source>Tunis</source>
+        <comment>tz_names</comment>
+        <translation>突尼斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="446"/>
+        <source>Ulaanbaatar</source>
+        <comment>tz_names</comment>
+        <translation>乌兰巴托</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="447"/>
+        <source>Ulyanovsk</source>
+        <comment>tz_names</comment>
+        <translation>乌里扬诺夫斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="448"/>
+        <source>Urumqi</source>
+        <comment>tz_names</comment>
+        <translation>乌鲁木齐</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="449"/>
+        <source>Ust-Nera</source>
+        <comment>tz_names</comment>
+        <translation>乌斯季挪拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="450"/>
+        <source>Uzhgorod</source>
+        <comment>tz_names</comment>
+        <translation>乌日哥罗德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="451"/>
+        <source>Vaduz</source>
+        <comment>tz_names</comment>
+        <translation>瓦杜兹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="452"/>
+        <source>Vancouver</source>
+        <comment>tz_names</comment>
+        <translation>温哥华</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="453"/>
+        <source>Vatican</source>
+        <comment>tz_names</comment>
+        <translation>梵蒂冈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="454"/>
+        <source>Vienna</source>
+        <comment>tz_names</comment>
+        <translation>维也纳</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="455"/>
+        <source>Vientiane</source>
+        <comment>tz_names</comment>
+        <translation>万象</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="456"/>
+        <source>Vilnius</source>
+        <comment>tz_names</comment>
+        <translation>维尔纽斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="457"/>
+        <source>Vladivostok</source>
+        <comment>tz_names</comment>
+        <translation>符拉迪沃斯托克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="458"/>
+        <source>Volgograd</source>
+        <comment>tz_names</comment>
+        <translation>伏尔加格勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="459"/>
+        <source>Vostok</source>
+        <comment>tz_names</comment>
+        <translation>沃斯托克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="460"/>
+        <source>Wake</source>
+        <comment>tz_names</comment>
+        <translation>韦克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="461"/>
+        <source>Wallis</source>
+        <comment>tz_names</comment>
+        <translation>沃利斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="462"/>
+        <source>Warsaw</source>
+        <comment>tz_names</comment>
+        <translation>华沙</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="463"/>
+        <source>Whitehorse</source>
+        <comment>tz_names</comment>
+        <translation>怀特霍斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="464"/>
+        <source>Windhoek</source>
+        <comment>tz_names</comment>
+        <translation>温得和克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="465"/>
+        <source>Winnipeg</source>
+        <comment>tz_names</comment>
+        <translation>温尼伯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="466"/>
+        <source>Yakutat</source>
+        <comment>tz_names</comment>
+        <translation>雅库特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="467"/>
+        <source>Yakutsk</source>
+        <comment>tz_names</comment>
+        <translation>雅库茨克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="468"/>
+        <source>Yangon</source>
+        <comment>tz_names</comment>
+        <translation>仰光</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="469"/>
+        <source>Yekaterinburg</source>
+        <comment>tz_names</comment>
+        <translation>叶卡捷琳堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="470"/>
+        <source>Yellowknife</source>
+        <comment>tz_names</comment>
+        <translation>耶洛奈夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="471"/>
+        <source>Yerevan</source>
+        <comment>tz_names</comment>
+        <translation>埃里温</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="472"/>
+        <source>Zagreb</source>
+        <comment>tz_names</comment>
+        <translation>萨格勒布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="473"/>
+        <source>Zaporozhye</source>
+        <comment>tz_names</comment>
+        <translation>扎波罗热</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="474"/>
+        <source>Zurich</source>
+        <comment>tz_names</comment>
+        <translation>苏黎世</translation>
+    </message>
+</context>
+</TS>
diff --git a/lang/tz_zh_TW.ts b/lang/tz_zh_TW.ts
new file mode 100644
index 0000000..2713d37
--- /dev/null
+++ b/lang/tz_zh_TW.ts
@@ -0,0 +1,2626 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- SPDX-FileCopyrightText: no
+     SPDX-License-Identifier: CC0-1.0
+-->
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_TW">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="30"/>
+        <source>Africa</source>
+        <comment>tz_regions</comment>
+        <translation>非洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="31"/>
+        <source>America</source>
+        <comment>tz_regions</comment>
+        <translation>美洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="32"/>
+        <source>Antarctica</source>
+        <comment>tz_regions</comment>
+        <translation>南極洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="33"/>
+        <source>Arctic</source>
+        <comment>tz_regions</comment>
+        <translation>北極</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="34"/>
+        <source>Asia</source>
+        <comment>tz_regions</comment>
+        <translation>亞洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="35"/>
+        <source>Atlantic</source>
+        <comment>tz_regions</comment>
+        <translation>大西洋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="36"/>
+        <source>Australia</source>
+        <comment>tz_regions</comment>
+        <translation>澳大利亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="37"/>
+        <source>Europe</source>
+        <comment>tz_regions</comment>
+        <translation>歐洲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="38"/>
+        <source>Indian</source>
+        <comment>tz_regions</comment>
+        <translation>印度</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="39"/>
+        <source>Pacific</source>
+        <comment>tz_regions</comment>
+        <translation>太平洋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="50"/>
+        <source>Abidjan</source>
+        <comment>tz_names</comment>
+        <translation>阿必尚</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="51"/>
+        <source>Accra</source>
+        <comment>tz_names</comment>
+        <translation>阿克拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="52"/>
+        <source>Adak</source>
+        <comment>tz_names</comment>
+        <translation>阿達克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="53"/>
+        <source>Addis Ababa</source>
+        <comment>tz_names</comment>
+        <translation>阿迪斯阿貝巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="54"/>
+        <source>Adelaide</source>
+        <comment>tz_names</comment>
+        <translation>阿德萊德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="55"/>
+        <source>Aden</source>
+        <comment>tz_names</comment>
+        <translation>亞丁</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="56"/>
+        <source>Algiers</source>
+        <comment>tz_names</comment>
+        <translation>阿爾及爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="57"/>
+        <source>Almaty</source>
+        <comment>tz_names</comment>
+        <translation>阿拉木圖</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="58"/>
+        <source>Amman</source>
+        <comment>tz_names</comment>
+        <translation>安曼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="59"/>
+        <source>Amsterdam</source>
+        <comment>tz_names</comment>
+        <translation>阿姆斯特丹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="60"/>
+        <source>Anadyr</source>
+        <comment>tz_names</comment>
+        <translation>阿納迪爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="61"/>
+        <source>Anchorage</source>
+        <comment>tz_names</comment>
+        <translation>安克雷奇</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="62"/>
+        <source>Andorra</source>
+        <comment>tz_names</comment>
+        <translation>安道爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="63"/>
+        <source>Anguilla</source>
+        <comment>tz_names</comment>
+        <translation>安圭拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="64"/>
+        <source>Antananarivo</source>
+        <comment>tz_names</comment>
+        <translation>安塔那那利佛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="65"/>
+        <source>Antigua</source>
+        <comment>tz_names</comment>
+        <translation>安提瓜</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="66"/>
+        <source>Apia</source>
+        <comment>tz_names</comment>
+        <translation>亞庇</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="67"/>
+        <source>Aqtau</source>
+        <comment>tz_names</comment>
+        <translation>阿克托</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="68"/>
+        <source>Aqtobe</source>
+        <comment>tz_names</comment>
+        <translation>阿克托貝</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="69"/>
+        <source>Araguaina</source>
+        <comment>tz_names</comment>
+        <translation>阿拉瓜伊納</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="70"/>
+        <source>Argentina/Buenos Aires</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/布宜諾賽勒斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="71"/>
+        <source>Argentina/Catamarca</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/卡塔馬卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="72"/>
+        <source>Argentina/Cordoba</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/科爾多瓦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="73"/>
+        <source>Argentina/Jujuy</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/胡胡伊</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="74"/>
+        <source>Argentina/La Rioja</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/拉里奧哈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="75"/>
+        <source>Argentina/Mendoza</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/門多薩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="76"/>
+        <source>Argentina/Rio Gallegos</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/裏奧加列戈斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="77"/>
+        <source>Argentina/Salta</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/薩爾塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="78"/>
+        <source>Argentina/San Juan</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/聖胡安</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="79"/>
+        <source>Argentina/San Luis</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/聖路易斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="80"/>
+        <source>Argentina/Tucuman</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/圖庫曼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="81"/>
+        <source>Argentina/Ushuaia</source>
+        <comment>tz_names</comment>
+        <translation>阿根廷/烏斯懷亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="82"/>
+        <source>Aruba</source>
+        <comment>tz_names</comment>
+        <translation>阿魯巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="83"/>
+        <source>Ashgabat</source>
+        <comment>tz_names</comment>
+        <translation>阿什哈巴德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="84"/>
+        <source>Asmara</source>
+        <comment>tz_names</comment>
+        <translation>阿斯馬拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="85"/>
+        <source>Astrakhan</source>
+        <comment>tz_names</comment>
+        <translation>阿斯特拉罕</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="86"/>
+        <source>Asuncion</source>
+        <comment>tz_names</comment>
+        <translation>亞松森</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="87"/>
+        <source>Athens</source>
+        <comment>tz_names</comment>
+        <translation>雅典</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="88"/>
+        <source>Atikokan</source>
+        <comment>tz_names</comment>
+        <translation>阿提科坎</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="89"/>
+        <source>Atyrau</source>
+        <comment>tz_names</comment>
+        <translation>阿特勞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="90"/>
+        <source>Auckland</source>
+        <comment>tz_names</comment>
+        <translation>奧克蘭</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="91"/>
+        <source>Azores</source>
+        <comment>tz_names</comment>
+        <translation>亞速爾群島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="92"/>
+        <source>Baghdad</source>
+        <comment>tz_names</comment>
+        <translation>巴格達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="93"/>
+        <source>Bahia</source>
+        <comment>tz_names</comment>
+        <translation>巴伊亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="94"/>
+        <source>Bahia Banderas</source>
+        <comment>tz_names</comment>
+        <translation>巴伊亞·班德拉斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="95"/>
+        <source>Bahrain</source>
+        <comment>tz_names</comment>
+        <translation>巴林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="96"/>
+        <source>Baku</source>
+        <comment>tz_names</comment>
+        <translation>巴庫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="97"/>
+        <source>Bamako</source>
+        <comment>tz_names</comment>
+        <translation>巴馬科</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="98"/>
+        <source>Bangkok</source>
+        <comment>tz_names</comment>
+        <translation>曼谷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="99"/>
+        <source>Bangui</source>
+        <comment>tz_names</comment>
+        <translation>班基</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="100"/>
+        <source>Banjul</source>
+        <comment>tz_names</comment>
+        <translation>班竹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="101"/>
+        <source>Barbados</source>
+        <comment>tz_names</comment>
+        <translation>巴巴多斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="102"/>
+        <source>Barnaul</source>
+        <comment>tz_names</comment>
+        <translation>巴爾瑙爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="103"/>
+        <source>Beirut</source>
+        <comment>tz_names</comment>
+        <translation>貝魯特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="104"/>
+        <source>Belem</source>
+        <comment>tz_names</comment>
+        <translation>貝倫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="105"/>
+        <source>Belgrade</source>
+        <comment>tz_names</comment>
+        <translation>貝爾格勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="106"/>
+        <source>Belize</source>
+        <comment>tz_names</comment>
+        <translation>貝裡斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="107"/>
+        <source>Berlin</source>
+        <comment>tz_names</comment>
+        <translation>柏林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="108"/>
+        <source>Bermuda</source>
+        <comment>tz_names</comment>
+        <translation>百慕大</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="109"/>
+        <source>Bishkek</source>
+        <comment>tz_names</comment>
+        <translation>比什凱克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="110"/>
+        <source>Bissau</source>
+        <comment>tz_names</comment>
+        <translation>比索</translation>
+    </message>
+    <message>
+    <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="110"/>
+    <source>Beijing</source>
+    <comment>tz_names</comment>
+    <translation>北京</translation>
+</message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="111"/>
+        <source>Blanc-Sablon</source>
+        <comment>tz_names</comment>
+        <translation>布蘭克·薩布隆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="112"/>
+        <source>Blantyre</source>
+        <comment>tz_names</comment>
+        <translation>布蘭太爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="113"/>
+        <source>Boa Vista</source>
+        <comment>tz_names</comment>
+        <translation>博阿維斯塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="114"/>
+        <source>Bogota</source>
+        <comment>tz_names</comment>
+        <translation>波哥大</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="115"/>
+        <source>Boise</source>
+        <comment>tz_names</comment>
+        <translation>博伊西</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="116"/>
+        <source>Bougainville</source>
+        <comment>tz_names</comment>
+        <translation>布幹維爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="117"/>
+        <source>Bratislava</source>
+        <comment>tz_names</comment>
+        <translation>布拉提斯拉瓦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="118"/>
+        <source>Brazzaville</source>
+        <comment>tz_names</comment>
+        <translation>布拉柴維爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="119"/>
+        <source>Brisbane</source>
+        <comment>tz_names</comment>
+        <translation>布里斯班</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="120"/>
+        <source>Broken Hill</source>
+        <comment>tz_names</comment>
+        <translation>布羅肯希爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="121"/>
+        <source>Brunei</source>
+        <comment>tz_names</comment>
+        <translation>汶萊</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="122"/>
+        <source>Brussels</source>
+        <comment>tz_names</comment>
+        <translation>布魯塞爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="123"/>
+        <source>Bucharest</source>
+        <comment>tz_names</comment>
+        <translation>布加勒斯特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="124"/>
+        <source>Budapest</source>
+        <comment>tz_names</comment>
+        <translation>布達佩斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="125"/>
+        <source>Bujumbura</source>
+        <comment>tz_names</comment>
+        <translation>布松布拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="126"/>
+        <source>Busingen</source>
+        <comment>tz_names</comment>
+        <translation>匯流排</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="127"/>
+        <source>Cairo</source>
+        <comment>tz_names</comment>
+        <translation>開羅</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="128"/>
+        <source>Cambridge Bay</source>
+        <comment>tz_names</comment>
+        <translation>劍橋灣</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="129"/>
+        <source>Campo Grande</source>
+        <comment>tz_names</comment>
+        <translation>坎波格蘭德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="130"/>
+        <source>Canary</source>
+        <comment>tz_names</comment>
+        <translation>加那利群島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="131"/>
+        <source>Cancun</source>
+        <comment>tz_names</comment>
+        <translation>坎昆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="132"/>
+        <source>Cape Verde</source>
+        <comment>tz_names</comment>
+        <translation>佛得角</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="133"/>
+        <source>Caracas</source>
+        <comment>tz_names</comment>
+        <translation>卡拉卡斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="134"/>
+        <source>Casablanca</source>
+        <comment>tz_names</comment>
+        <translation>卡薩布蘭卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="135"/>
+        <source>Casey</source>
+        <comment>tz_names</comment>
+        <translation>凱西</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="136"/>
+        <source>Cayenne</source>
+        <comment>tz_names</comment>
+        <translation>卡宴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="137"/>
+        <source>Cayman</source>
+        <comment>tz_names</comment>
+        <translation>開曼群島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="138"/>
+        <source>Ceuta</source>
+        <comment>tz_names</comment>
+        <translation>休達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="139"/>
+        <source>Chagos</source>
+        <comment>tz_names</comment>
+        <translation>查戈斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="140"/>
+        <source>Chatham</source>
+        <comment>tz_names</comment>
+        <translation>查塔姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="141"/>
+        <source>Chicago</source>
+        <comment>tz_names</comment>
+        <translation>芝加哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="142"/>
+        <source>Chihuahua</source>
+        <comment>tz_names</comment>
+        <translation>吉娃娃</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="143"/>
+        <source>Chisinau</source>
+        <comment>tz_names</comment>
+        <translation>基希訥烏</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="144"/>
+        <source>Chita</source>
+        <comment>tz_names</comment>
+        <translation>赤塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="145"/>
+        <source>Choibalsan</source>
+        <comment>tz_names</comment>
+        <translation>喬巴桑</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="146"/>
+        <source>Christmas</source>
+        <comment>tz_names</comment>
+        <translation>耶誕節</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="147"/>
+        <source>Chuuk</source>
+        <comment>tz_names</comment>
+        <translation>楚克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="148"/>
+        <source>Cocos</source>
+        <comment>tz_names</comment>
+        <translation>科科斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="149"/>
+        <source>Colombo</source>
+        <comment>tz_names</comment>
+        <translation>可倫坡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="150"/>
+        <source>Comoro</source>
+        <comment>tz_names</comment>
+        <translation>科摩羅</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="151"/>
+        <source>Conakry</source>
+        <comment>tz_names</comment>
+        <translation>柯那克里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="152"/>
+        <source>Copenhagen</source>
+        <comment>tz_names</comment>
+        <translation>哥本哈根</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="153"/>
+        <source>Costa Rica</source>
+        <comment>tz_names</comment>
+        <translation>哥斯大黎加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="154"/>
+        <source>Creston</source>
+        <comment>tz_names</comment>
+        <translation>克雷斯頓</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="155"/>
+        <source>Cuiaba</source>
+        <comment>tz_names</comment>
+        <translation>庫亞巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="156"/>
+        <source>Curacao</source>
+        <comment>tz_names</comment>
+        <translation>庫拉索</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="157"/>
+        <source>Currie</source>
+        <comment>tz_names</comment>
+        <translation>柯裡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="158"/>
+        <source>Dakar</source>
+        <comment>tz_names</comment>
+        <translation>達喀爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="159"/>
+        <source>Damascus</source>
+        <comment>tz_names</comment>
+        <translation>大馬士革</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="160"/>
+        <source>Danmarkshavn</source>
+        <comment>tz_names</comment>
+        <translation>丹麥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="161"/>
+        <source>Dar es Salaam</source>
+        <comment>tz_names</comment>
+        <translation>沙蘭港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="162"/>
+        <source>Darwin</source>
+        <comment>tz_names</comment>
+        <translation>達爾文</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="163"/>
+        <source>Davis</source>
+        <comment>tz_names</comment>
+        <translation>大衛斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="164"/>
+        <source>Dawson</source>
+        <comment>tz_names</comment>
+        <translation>道森</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="165"/>
+        <source>Dawson Creek</source>
+        <comment>tz_names</comment>
+        <translation>道森溪</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="166"/>
+        <source>Denver</source>
+        <comment>tz_names</comment>
+        <translation>丹佛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="167"/>
+        <source>Detroit</source>
+        <comment>tz_names</comment>
+        <translation>底特律</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="168"/>
+        <source>Dhaka</source>
+        <comment>tz_names</comment>
+        <translation>達卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="169"/>
+        <source>Dili</source>
+        <comment>tz_names</comment>
+        <translation>帝利</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="170"/>
+        <source>Djibouti</source>
+        <comment>tz_names</comment>
+        <translation>吉佈提</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="171"/>
+        <source>Dominica</source>
+        <comment>tz_names</comment>
+        <translation>多明尼克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="172"/>
+        <source>Douala</source>
+        <comment>tz_names</comment>
+        <translation>杜阿拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="173"/>
+        <source>Dubai</source>
+        <comment>tz_names</comment>
+        <translation>迪拜</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="174"/>
+        <source>Dublin</source>
+        <comment>tz_names</comment>
+        <translation>都柏林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="175"/>
+        <source>DumontDUrville</source>
+        <comment>tz_names</comment>
+        <translation>杜蒙·杜維爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="176"/>
+        <source>Dushanbe</source>
+        <comment>tz_names</comment>
+        <translation>杜桑貝</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="177"/>
+        <source>Easter</source>
+        <comment>tz_names</comment>
+        <translation>復活節</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="178"/>
+        <source>Edmonton</source>
+        <comment>tz_names</comment>
+        <translation>埃德蒙頓</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="179"/>
+        <source>Efate</source>
+        <comment>tz_names</comment>
+        <translation>埃法特島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="180"/>
+        <source>Eirunepe</source>
+        <comment>tz_names</comment>
+        <translation>埃魯內佩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="181"/>
+        <source>El Aaiun</source>
+        <comment>tz_names</comment>
+        <translation>阿尤恩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="182"/>
+        <source>El Salvador</source>
+        <comment>tz_names</comment>
+        <translation>薩爾瓦多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="183"/>
+        <source>Enderbury</source>
+        <comment>tz_names</comment>
+        <translation>恩德伯裡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="184"/>
+        <source>Eucla</source>
+        <comment>tz_names</comment>
+        <translation>尤克拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="185"/>
+        <source>Fakaofo</source>
+        <comment>tz_names</comment>
+        <translation>法攷福</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="186"/>
+        <source>Famagusta</source>
+        <comment>tz_names</comment>
+        <translation>法馬古斯塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="187"/>
+        <source>Faroe</source>
+        <comment>tz_names</comment>
+        <translation>法羅</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="188"/>
+        <source>Fiji</source>
+        <comment>tz_names</comment>
+        <translation>斐濟</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="189"/>
+        <source>Fort Nelson</source>
+        <comment>tz_names</comment>
+        <translation>納爾遜堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="190"/>
+        <source>Fortaleza</source>
+        <comment>tz_names</comment>
+        <translation>福塔雷薩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="191"/>
+        <source>Freetown</source>
+        <comment>tz_names</comment>
+        <translation>弗裏敦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="192"/>
+        <source>Funafuti</source>
+        <comment>tz_names</comment>
+        <translation>福納佛提</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="193"/>
+        <source>Gaborone</source>
+        <comment>tz_names</comment>
+        <translation>嘉柏隆里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="194"/>
+        <source>Galapagos</source>
+        <comment>tz_names</comment>
+        <translation>加拉帕戈斯群島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="195"/>
+        <source>Gambier</source>
+        <comment>tz_names</comment>
+        <translation>甘比爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="196"/>
+        <source>Gaza</source>
+        <comment>tz_names</comment>
+        <translation>加沙</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="197"/>
+        <source>Gibraltar</source>
+        <comment>tz_names</comment>
+        <translation>直布羅陀</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="198"/>
+        <source>Glace Bay</source>
+        <comment>tz_names</comment>
+        <translation>格萊斯灣</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="199"/>
+        <source>Godthab</source>
+        <comment>tz_names</comment>
+        <translation>戈德薩布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="200"/>
+        <source>Goose Bay</source>
+        <comment>tz_names</comment>
+        <translation>鹅灣</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="201"/>
+        <source>Grand Turk</source>
+        <comment>tz_names</comment>
+        <translation>大特克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="202"/>
+        <source>Grenada</source>
+        <comment>tz_names</comment>
+        <translation>格林伍德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="203"/>
+        <source>Guadalcanal</source>
+        <comment>tz_names</comment>
+        <translation>瓜達爾卡納爾島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="204"/>
+        <source>Guadeloupe</source>
+        <comment>tz_names</comment>
+        <translation>瓜德羅普島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="205"/>
+        <source>Guam</source>
+        <comment>tz_names</comment>
+        <translation>關島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="206"/>
+        <source>Guatemala</source>
+        <comment>tz_names</comment>
+        <translation>瓜地馬拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="207"/>
+        <source>Guayaquil</source>
+        <comment>tz_names</comment>
+        <translation>瓜亞基爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="208"/>
+        <source>Guernsey</source>
+        <comment>tz_names</comment>
+        <translation>根西島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="209"/>
+        <source>Guyana</source>
+        <comment>tz_names</comment>
+        <translation>蓋亞那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="210"/>
+        <source>Halifax</source>
+        <comment>tz_names</comment>
+        <translation>哈利法克斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="211"/>
+        <source>Harare</source>
+        <comment>tz_names</comment>
+        <translation>哈拉雷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="212"/>
+        <source>Havana</source>
+        <comment>tz_names</comment>
+        <translation>哈瓦那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="213"/>
+        <source>Hebron</source>
+        <comment>tz_names</comment>
+        <translation>希伯倫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="214"/>
+        <source>Helsinki</source>
+        <comment>tz_names</comment>
+        <translation>赫爾辛基</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="215"/>
+        <source>Hermosillo</source>
+        <comment>tz_names</comment>
+        <translation>埃莫西洛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="216"/>
+        <source>Ho Chi Minh</source>
+        <comment>tz_names</comment>
+        <translation>胡志明</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="217"/>
+        <source>Hobart</source>
+        <comment>tz_names</comment>
+        <translation>霍巴特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="218"/>
+        <source>Hong Kong(China)</source>
+        <comment>tz_names</comment>
+        <translation>香港（中国）</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="219"/>
+        <source>Honolulu</source>
+        <comment>tz_names</comment>
+        <translation>檀香山</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="220"/>
+        <source>Hovd</source>
+        <comment>tz_names</comment>
+        <translation>科布多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="221"/>
+        <source>Indiana/Indianapolis</source>
+        <comment>tz_names</comment>
+        <translation>印第安那州/印弟安納波里斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="222"/>
+        <source>Indiana/Knox</source>
+        <comment>tz_names</comment>
+        <translation>印第安那州/諾克斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="223"/>
+        <source>Indiana/Marengo</source>
+        <comment>tz_names</comment>
+        <translation>印度/馬倫戈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="224"/>
+        <source>Indiana/Petersburg</source>
+        <comment>tz_names</comment>
+        <translation>印第安那州/彼得堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="225"/>
+        <source>Indiana/Tell City</source>
+        <comment>tz_names</comment>
+        <translation>印第安那州/泰爾城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="226"/>
+        <source>Indiana/Vevay</source>
+        <comment>tz_names</comment>
+        <translation>印度/沃韋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="227"/>
+        <source>Indiana/Vincennes</source>
+        <comment>tz_names</comment>
+        <translation>印第安那州/文森斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="228"/>
+        <source>Indiana/Winamac</source>
+        <comment>tz_names</comment>
+        <translation>印第安那州/威納馬克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="229"/>
+        <source>Inuvik</source>
+        <comment>tz_names</comment>
+        <translation>伊努維克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="230"/>
+        <source>Iqaluit</source>
+        <comment>tz_names</comment>
+        <translation>伊魁特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="231"/>
+        <source>Irkutsk</source>
+        <comment>tz_names</comment>
+        <translation>伊爾庫茨克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="232"/>
+        <source>Isle of Man</source>
+        <comment>tz_names</comment>
+        <translation>曼島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="233"/>
+        <source>Istanbul</source>
+        <comment>tz_names</comment>
+        <translation>蓋章</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="234"/>
+        <source>Jakarta</source>
+        <comment>tz_names</comment>
+        <translation>雅加達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="235"/>
+        <source>Jamaica</source>
+        <comment>tz_names</comment>
+        <translation>牙買加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="236"/>
+        <source>Jayapura</source>
+        <comment>tz_names</comment>
+        <translation>查亞普拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="237"/>
+        <source>Jersey</source>
+        <comment>tz_names</comment>
+        <translation>澤西島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="238"/>
+        <source>Jerusalem</source>
+        <comment>tz_names</comment>
+        <translation>耶路撒冷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="239"/>
+        <source>Johannesburg</source>
+        <comment>tz_names</comment>
+        <translation>約翰尼斯堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="240"/>
+        <source>Juba</source>
+        <comment>tz_names</comment>
+        <translation>朱巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="241"/>
+        <source>Juneau</source>
+        <comment>tz_names</comment>
+        <translation>朱諾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="242"/>
+        <source>Kabul</source>
+        <comment>tz_names</comment>
+        <translation>喀布爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="243"/>
+        <source>Kaliningrad</source>
+        <comment>tz_names</comment>
+        <translation>加里寧格勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="244"/>
+        <source>Kamchatka</source>
+        <comment>tz_names</comment>
+        <translation>堪察加半島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="245"/>
+        <source>Kampala</source>
+        <comment>tz_names</comment>
+        <translation>坎帕拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="246"/>
+        <source>Karachi</source>
+        <comment>tz_names</comment>
+        <translation>卡拉奇</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="247"/>
+        <source>Kathmandu</source>
+        <comment>tz_names</comment>
+        <translation>加德滿都</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="248"/>
+        <source>Kentucky/Louisville</source>
+        <comment>tz_names</comment>
+        <translation>肯塔基州/路易斯維爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="249"/>
+        <source>Kentucky/Monticello</source>
+        <comment>tz_names</comment>
+        <translation>肯塔基州/蒙蒂塞洛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="250"/>
+        <source>Kerguelen</source>
+        <comment>tz_names</comment>
+        <translation>凱爾蓋朗</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="251"/>
+        <source>Khandyga</source>
+        <comment>tz_names</comment>
+        <translation>坎代加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="252"/>
+        <source>Khartoum</source>
+        <comment>tz_names</comment>
+        <translation>喀土穆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="253"/>
+        <source>Kiev</source>
+        <comment>tz_names</comment>
+        <translation>基輔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="254"/>
+        <source>Kigali</source>
+        <comment>tz_names</comment>
+        <translation>吉佳利</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="255"/>
+        <source>Kinshasa</source>
+        <comment>tz_names</comment>
+        <translation>金夏沙</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="256"/>
+        <source>Kiritimati</source>
+        <comment>tz_names</comment>
+        <translation>基裏蒂馬提斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="257"/>
+        <source>Kirov</source>
+        <comment>tz_names</comment>
+        <translation>基洛夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="258"/>
+        <source>Kolkata</source>
+        <comment>tz_names</comment>
+        <translation>加爾格達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="259"/>
+        <source>Kosrae</source>
+        <comment>tz_names</comment>
+        <translation>科斯雷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="260"/>
+        <source>Kralendijk</source>
+        <comment>tz_names</comment>
+        <translation>克羅地亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="261"/>
+        <source>Krasnoyarsk</source>
+        <comment>tz_names</comment>
+        <translation>克拉斯諾亞爾斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="262"/>
+        <source>Kuala Lumpur</source>
+        <comment>tz_names</comment>
+        <translation>吉隆玻</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="263"/>
+        <source>Kuching</source>
+        <comment>tz_names</comment>
+        <translation>古晋</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="264"/>
+        <source>Kuwait</source>
+        <comment>tz_names</comment>
+        <translation>科威特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="265"/>
+        <source>Kwajalein</source>
+        <comment>tz_names</comment>
+        <translation>誇賈林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="266"/>
+        <source>La Paz</source>
+        <comment>tz_names</comment>
+        <translation>拉巴斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="267"/>
+        <source>Lagos</source>
+        <comment>tz_names</comment>
+        <translation>拉各斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="268"/>
+        <source>Libreville</source>
+        <comment>tz_names</comment>
+        <translation>利伯維爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="269"/>
+        <source>Lima</source>
+        <comment>tz_names</comment>
+        <translation>利馬</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="270"/>
+        <source>Lindeman</source>
+        <comment>tz_names</comment>
+        <translation>林德曼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="271"/>
+        <source>Lisbon</source>
+        <comment>tz_names</comment>
+        <translation>里斯本</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="272"/>
+        <source>Ljubljana</source>
+        <comment>tz_names</comment>
+        <translation>盧布亞納</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="273"/>
+        <source>Lome</source>
+        <comment>tz_names</comment>
+        <translation>多哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="274"/>
+        <source>London</source>
+        <comment>tz_names</comment>
+        <translation>倫敦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="275"/>
+        <source>Longyearbyen</source>
+        <comment>tz_names</comment>
+        <translation>龍宜爾比恩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="276"/>
+        <source>Lord Howe</source>
+        <comment>tz_names</comment>
+        <translation>豪勳爵</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="277"/>
+        <source>Los Angeles</source>
+        <comment>tz_names</comment>
+        <translation>洛杉磯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="278"/>
+        <source>Lower Princes</source>
+        <comment>tz_names</comment>
+        <translation>聖馬丁</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="279"/>
+        <source>Luanda</source>
+        <comment>tz_names</comment>
+        <translation>魯安達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="280"/>
+        <source>Lubumbashi</source>
+        <comment>tz_names</comment>
+        <translation>盧本巴希</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="281"/>
+        <source>Lusaka</source>
+        <comment>tz_names</comment>
+        <translation>路沙卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="282"/>
+        <source>Luxembourg</source>
+        <comment>tz_names</comment>
+        <translation>盧森堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="283"/>
+        <source>Macau</source>
+        <comment>tz_names</comment>
+        <translation>澳門（中国）</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="284"/>
+        <source>Maceio</source>
+        <comment>tz_names</comment>
+        <translation>馬塞奧</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="285"/>
+        <source>Macquarie</source>
+        <comment>tz_names</comment>
+        <translation>麥格理</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="286"/>
+        <source>Madeira</source>
+        <comment>tz_names</comment>
+        <translation>馬德拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="287"/>
+        <source>Madrid</source>
+        <comment>tz_names</comment>
+        <translation>馬德里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="288"/>
+        <source>Magadan</source>
+        <comment>tz_names</comment>
+        <translation>馬加丹</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="289"/>
+        <source>Mahe</source>
+        <comment>tz_names</comment>
+        <translation>馬埃</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="290"/>
+        <source>Majuro</source>
+        <comment>tz_names</comment>
+        <translation>麥哲魯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="291"/>
+        <source>Makassar</source>
+        <comment>tz_names</comment>
+        <translation>望加錫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="292"/>
+        <source>Malabo</source>
+        <comment>tz_names</comment>
+        <translation>馬拉博</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="293"/>
+        <source>Maldives</source>
+        <comment>tz_names</comment>
+        <translation>瑪律地夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="294"/>
+        <source>Malta</source>
+        <comment>tz_names</comment>
+        <translation>馬爾他</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="295"/>
+        <source>Managua</source>
+        <comment>tz_names</comment>
+        <translation>馬納瓜</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="296"/>
+        <source>Manaus</source>
+        <comment>tz_names</comment>
+        <translation>馬瑙斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="297"/>
+        <source>Manila</source>
+        <comment>tz_names</comment>
+        <translation>馬尼拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="298"/>
+        <source>Maputo</source>
+        <comment>tz_names</comment>
+        <translation>馬布多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="299"/>
+        <source>Mariehamn</source>
+        <comment>tz_names</comment>
+        <translation>瑪麗港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="300"/>
+        <source>Marigot</source>
+        <comment>tz_names</comment>
+        <translation>馬裏戈</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="301"/>
+        <source>Marquesas</source>
+        <comment>tz_names</comment>
+        <translation>馬克薩斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="302"/>
+        <source>Martinique</source>
+        <comment>tz_names</comment>
+        <translation>馬提尼克島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="303"/>
+        <source>Maseru</source>
+        <comment>tz_names</comment>
+        <translation>馬塞魯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="304"/>
+        <source>Matamoros</source>
+        <comment>tz_names</comment>
+        <translation>馬塔莫羅斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="305"/>
+        <source>Mauritius</source>
+        <comment>tz_names</comment>
+        <translation>模裡西斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="306"/>
+        <source>Mawson</source>
+        <comment>tz_names</comment>
+        <translation>莫森</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="307"/>
+        <source>Mayotte</source>
+        <comment>tz_names</comment>
+        <translation>馬約特島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="308"/>
+        <source>Mazatlan</source>
+        <comment>tz_names</comment>
+        <translation>馬薩特蘭</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="309"/>
+        <source>Mbabane</source>
+        <comment>tz_names</comment>
+        <translation>姆巴班</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="310"/>
+        <source>McMurdo</source>
+        <comment>tz_names</comment>
+        <translation>麥克默多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="311"/>
+        <source>Melbourne</source>
+        <comment>tz_names</comment>
+        <translation>墨爾本</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="312"/>
+        <source>Menominee</source>
+        <comment>tz_names</comment>
+        <translation>梅諾米尼</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="313"/>
+        <source>Merida</source>
+        <comment>tz_names</comment>
+        <translation>梅里達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="314"/>
+        <source>Metlakatla</source>
+        <comment>tz_names</comment>
+        <translation>梅特拉卡特拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="315"/>
+        <source>Mexico City</source>
+        <comment>tz_names</comment>
+        <translation>墨西哥城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="316"/>
+        <source>Midway</source>
+        <comment>tz_names</comment>
+        <translation>中途島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="317"/>
+        <source>Minsk</source>
+        <comment>tz_names</comment>
+        <translation>明斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="318"/>
+        <source>Miquelon</source>
+        <comment>tz_names</comment>
+        <translation>密克隆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="319"/>
+        <source>Mogadishu</source>
+        <comment>tz_names</comment>
+        <translation>摩加迪休</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="320"/>
+        <source>Monaco</source>
+        <comment>tz_names</comment>
+        <translation>摩納哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="321"/>
+        <source>Moncton</source>
+        <comment>tz_names</comment>
+        <translation>蒙克頓</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="322"/>
+        <source>Monrovia</source>
+        <comment>tz_names</comment>
+        <translation>蒙羅維亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="323"/>
+        <source>Monterrey</source>
+        <comment>tz_names</comment>
+        <translation>蒙特雷</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="324"/>
+        <source>Montevideo</source>
+        <comment>tz_names</comment>
+        <translation>蒙特維多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="325"/>
+        <source>Montserrat</source>
+        <comment>tz_names</comment>
+        <translation>蒙特塞拉特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="326"/>
+        <source>Moscow</source>
+        <comment>tz_names</comment>
+        <translation>莫斯科</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="327"/>
+        <source>Muscat</source>
+        <comment>tz_names</comment>
+        <translation>馬斯喀特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="328"/>
+        <source>Nairobi</source>
+        <comment>tz_names</comment>
+        <translation>奈洛比</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="329"/>
+        <source>Nassau</source>
+        <comment>tz_names</comment>
+        <translation>拿索</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="330"/>
+        <source>Nauru</source>
+        <comment>tz_names</comment>
+        <translation>瑙魯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="331"/>
+        <source>Ndjamena</source>
+        <comment>tz_names</comment>
+        <translation>恩賈梅納</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="332"/>
+        <source>New York</source>
+        <comment>tz_names</comment>
+        <translation>紐約</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="333"/>
+        <source>Niamey</source>
+        <comment>tz_names</comment>
+        <translation>尼阿美</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="334"/>
+        <source>Nicosia</source>
+        <comment>tz_names</comment>
+        <translation>尼古西亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="335"/>
+        <source>Nipigon</source>
+        <comment>tz_names</comment>
+        <translation>尼皮貢</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="336"/>
+        <source>Niue</source>
+        <comment>tz_names</comment>
+        <translation>紐埃</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="337"/>
+        <source>Nome</source>
+        <comment>tz_names</comment>
+        <translation>諾姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="338"/>
+        <source>Norfolk</source>
+        <comment>tz_names</comment>
+        <translation>諾福克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="339"/>
+        <source>Noronha</source>
+        <comment>tz_names</comment>
+        <translation>諾羅尼亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="340"/>
+        <source>North Dakota/Beulah</source>
+        <comment>tz_names</comment>
+        <translation>北達科他州/比拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="341"/>
+        <source>North Dakota/Center</source>
+        <comment>tz_names</comment>
+        <translation>北達科他州/中心</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="342"/>
+        <source>North Dakota/New Salem</source>
+        <comment>tz_names</comment>
+        <translation>北達科他州/新賽勒姆</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="343"/>
+        <source>Nouakchott</source>
+        <comment>tz_names</comment>
+        <translation>諾克少</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="344"/>
+        <source>Noumea</source>
+        <comment>tz_names</comment>
+        <translation>諾美亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="345"/>
+        <source>Novokuznetsk</source>
+        <comment>tz_names</comment>
+        <translation>新庫茲涅茨克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="346"/>
+        <source>Novosibirsk</source>
+        <comment>tz_names</comment>
+        <translation>新西伯利亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="347"/>
+        <source>Ojinaga</source>
+        <comment>tz_names</comment>
+        <translation>魁北克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="348"/>
+        <source>Omsk</source>
+        <comment>tz_names</comment>
+        <translation>鄂木斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="349"/>
+        <source>Oral</source>
+        <comment>tz_names</comment>
+        <translation>朵拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="350"/>
+        <source>Oslo</source>
+        <comment>tz_names</comment>
+        <translation>奧斯陸</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="351"/>
+        <source>Ouagadougou</source>
+        <comment>tz_names</comment>
+        <translation>瓦加杜古</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="352"/>
+        <source>Pago Pago</source>
+        <comment>tz_names</comment>
+        <translation>帕果帕果</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="353"/>
+        <source>Palau</source>
+        <comment>tz_names</comment>
+        <translation>帕勞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="354"/>
+        <source>Palmer</source>
+        <comment>tz_names</comment>
+        <translation>帕爾默</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="355"/>
+        <source>Panama</source>
+        <comment>tz_names</comment>
+        <translation>巴拿馬</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="356"/>
+        <source>Pangnirtung</source>
+        <comment>tz_names</comment>
+        <translation>巴芬島的旁涅唐</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="357"/>
+        <source>Paramaribo</source>
+        <comment>tz_names</comment>
+        <translation>巴拉馬利波</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="358"/>
+        <source>Paris</source>
+        <comment>tz_names</comment>
+        <translation>巴黎</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="359"/>
+        <source>Perth</source>
+        <comment>tz_names</comment>
+        <translation>珀斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="360"/>
+        <source>Phnom Penh</source>
+        <comment>tz_names</comment>
+        <translation>金邊</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="361"/>
+        <source>Phoenix</source>
+        <comment>tz_names</comment>
+        <translation>鳳凰城</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="362"/>
+        <source>Pitcairn</source>
+        <comment>tz_names</comment>
+        <translation>皮特凱恩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="363"/>
+        <source>Podgorica</source>
+        <comment>tz_names</comment>
+        <translation>波德戈裡察</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="364"/>
+        <source>Pohnpei</source>
+        <comment>tz_names</comment>
+        <translation>波納佩島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="365"/>
+        <source>Pontianak</source>
+        <comment>tz_names</comment>
+        <translation>坤甸</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="366"/>
+        <source>Port Moresby</source>
+        <comment>tz_names</comment>
+        <translation>莫爾斯貝港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="367"/>
+        <source>Port of Spain</source>
+        <comment>tz_names</comment>
+        <translation>西班牙港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="368"/>
+        <source>Port-au-Prince</source>
+        <comment>tz_names</comment>
+        <translation>太子港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="369"/>
+        <source>Porto Velho</source>
+        <comment>tz_names</comment>
+        <translation>維略港</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="370"/>
+        <source>Porto-Novo</source>
+        <comment>tz_names</comment>
+        <translation>波多洛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="371"/>
+        <source>Prague</source>
+        <comment>tz_names</comment>
+        <translation>布拉格</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="372"/>
+        <source>Puerto Rico</source>
+        <comment>tz_names</comment>
+        <translation>波多黎各</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="373"/>
+        <source>Punta Arenas</source>
+        <comment>tz_names</comment>
+        <translation>蓬塔阿雷納斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="374"/>
+        <source>Pyongyang</source>
+        <comment>tz_names</comment>
+        <translation>平壤</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="375"/>
+        <source>Qatar</source>
+        <comment>tz_names</comment>
+        <translation>卡塔爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="376"/>
+        <source>Qostanay</source>
+        <comment>tz_names</comment>
+        <translation>庫斯塔</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="377"/>
+        <source>Qyzylorda</source>
+        <comment>tz_names</comment>
+        <translation>克孜勒奧爾達</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="378"/>
+        <source>Rainy River</source>
+        <comment>tz_names</comment>
+        <translation>雷尼河</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="379"/>
+        <source>Rankin Inlet</source>
+        <comment>tz_names</comment>
+        <translation>蘭京海口</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="380"/>
+        <source>Rarotonga</source>
+        <comment>tz_names</comment>
+        <translation>拉羅湯加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="381"/>
+        <source>Recife</source>
+        <comment>tz_names</comment>
+        <translation>累西腓</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="382"/>
+        <source>Regina</source>
+        <comment>tz_names</comment>
+        <translation>里賈納</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="383"/>
+        <source>Resolute</source>
+        <comment>tz_names</comment>
+        <translation>雷索盧特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="384"/>
+        <source>Reunion</source>
+        <comment>tz_names</comment>
+        <translation>留尼旺島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="385"/>
+        <source>Reykjavik</source>
+        <comment>tz_names</comment>
+        <translation>雷克雅維克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="386"/>
+        <source>Riga</source>
+        <comment>tz_names</comment>
+        <translation>裏加</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="387"/>
+        <source>Rio Branco</source>
+        <comment>tz_names</comment>
+        <translation>裏奧·布蘭科</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="388"/>
+        <source>Riyadh</source>
+        <comment>tz_names</comment>
+        <translation>利雅德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="389"/>
+        <source>Rome</source>
+        <comment>tz_names</comment>
+        <translation>羅馬</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="390"/>
+        <source>Rothera</source>
+        <comment>tz_names</comment>
+        <translation>羅瑟拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="391"/>
+        <source>Saipan</source>
+        <comment>tz_names</comment>
+        <translation>塞班島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="392"/>
+        <source>Sakhalin</source>
+        <comment>tz_names</comment>
+        <translation>薩哈林</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="393"/>
+        <source>Samara</source>
+        <comment>tz_names</comment>
+        <translation>薩馬拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="394"/>
+        <source>Samarkand</source>
+        <comment>tz_names</comment>
+        <translation>撒馬爾罕</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="395"/>
+        <source>San Marino</source>
+        <comment>tz_names</comment>
+        <translation>聖馬利諾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="396"/>
+        <source>Santarem</source>
+        <comment>tz_names</comment>
+        <translation>聖塔倫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="397"/>
+        <source>Santiago</source>
+        <comment>tz_names</comment>
+        <translation>聖地牙哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="398"/>
+        <source>Santo Domingo</source>
+        <comment>tz_names</comment>
+        <translation>聖多明哥</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="399"/>
+        <source>Sao Paulo</source>
+        <comment>tz_names</comment>
+        <translation>聖保羅</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="400"/>
+        <source>Sao Tome</source>
+        <comment>tz_names</comment>
+        <translation>聖多美</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="401"/>
+        <source>Sarajevo</source>
+        <comment>tz_names</comment>
+        <translation>塞拉耶佛</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="402"/>
+        <source>Saratov</source>
+        <comment>tz_names</comment>
+        <translation>薩拉托夫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="403"/>
+        <source>Scoresbysund</source>
+        <comment>tz_names</comment>
+        <translation>斯科斯比基金</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="404"/>
+        <source>Seoul</source>
+        <comment>tz_names</comment>
+        <translation>首爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="405"/>
+        <source>Shanghai</source>
+        <comment>tz_names</comment>
+        <translation>上海</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="406"/>
+        <source>Simferopol</source>
+        <comment>tz_names</comment>
+        <translation>辛菲羅波爾</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="407"/>
+        <source>Singapore</source>
+        <comment>tz_names</comment>
+        <translation>新加坡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="408"/>
+        <source>Sitka</source>
+        <comment>tz_names</comment>
+        <translation>錫特卡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="409"/>
+        <source>Skopje</source>
+        <comment>tz_names</comment>
+        <translation>斯高彼亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="410"/>
+        <source>Sofia</source>
+        <comment>tz_names</comment>
+        <translation>索菲亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="411"/>
+        <source>South Georgia</source>
+        <comment>tz_names</comment>
+        <translation>南喬治亞州</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="412"/>
+        <source>Srednekolymsk</source>
+        <comment>tz_names</comment>
+        <translation>雅庫特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="413"/>
+        <source>St Barthelemy</source>
+        <comment>tz_names</comment>
+        <translation>聖巴泰勒米</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="414"/>
+        <source>St Helena</source>
+        <comment>tz_names</comment>
+        <translation>聖赫倫那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="415"/>
+        <source>St Johns</source>
+        <comment>tz_names</comment>
+        <translation>聖約翰</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="416"/>
+        <source>St Kitts</source>
+        <comment>tz_names</comment>
+        <translation>聖基茨</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="417"/>
+        <source>St Lucia</source>
+        <comment>tz_names</comment>
+        <translation>聖盧西亞</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="418"/>
+        <source>St Thomas</source>
+        <comment>tz_names</comment>
+        <translation>聖托馬斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="419"/>
+        <source>St Vincent</source>
+        <comment>tz_names</comment>
+        <translation>聖文森特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="420"/>
+        <source>Stanley</source>
+        <comment>tz_names</comment>
+        <translation>斯坦利</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="421"/>
+        <source>Stockholm</source>
+        <comment>tz_names</comment>
+        <translation>斯德哥爾摩</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="422"/>
+        <source>Swift Current</source>
+        <comment>tz_names</comment>
+        <translation>斯威夫特卡倫特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="423"/>
+        <source>Sydney</source>
+        <comment>tz_names</comment>
+        <translation>雪梨</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="424"/>
+        <source>Syowa</source>
+        <comment>tz_names</comment>
+        <translation>聖約瑟</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="425"/>
+        <source>Tahiti</source>
+        <comment>tz_names</comment>
+        <translation>大溪地</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="426"/>
+        <source>Taipei(China)</source>
+        <comment>tz_names</comment>
+        <translation>臺北（中国）</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="427"/>
+        <source>Tallinn</source>
+        <comment>tz_names</comment>
+        <translation>數位行</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="428"/>
+        <source>Tarawa</source>
+        <comment>tz_names</comment>
+        <translation>塔拉瓦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="429"/>
+        <source>Tashkent</source>
+        <comment>tz_names</comment>
+        <translation>塔什干</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="430"/>
+        <source>Tbilisi</source>
+        <comment>tz_names</comment>
+        <translation>第比利斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="431"/>
+        <source>Tegucigalpa</source>
+        <comment>tz_names</comment>
+        <translation>德古西加巴</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="432"/>
+        <source>Tehran</source>
+        <comment>tz_names</comment>
+        <translation>德黑蘭</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="433"/>
+        <source>Thimphu</source>
+        <comment>tz_names</comment>
+        <translation>辛布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="434"/>
+        <source>Thule</source>
+        <comment>tz_names</comment>
+        <translation>圖勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="435"/>
+        <source>Thunder Bay</source>
+        <comment>tz_names</comment>
+        <translation>雷灣</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="436"/>
+        <source>Tijuana</source>
+        <comment>tz_names</comment>
+        <translation>蒂華納</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="437"/>
+        <source>Tirane</source>
+        <comment>tz_names</comment>
+        <translation>地拉那</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="438"/>
+        <source>Tokyo</source>
+        <comment>tz_names</comment>
+        <translation>東京</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="439"/>
+        <source>Tomsk</source>
+        <comment>tz_names</comment>
+        <translation>托木斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="440"/>
+        <source>Tongatapu</source>
+        <comment>tz_names</comment>
+        <translation>湯加塔布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="441"/>
+        <source>Toronto</source>
+        <comment>tz_names</comment>
+        <translation>多倫多</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="442"/>
+        <source>Tortola</source>
+        <comment>tz_names</comment>
+        <translation>托托拉島</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="443"/>
+        <source>Tripoli</source>
+        <comment>tz_names</comment>
+        <translation>的黎波里</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="444"/>
+        <source>Troll</source>
+        <comment>tz_names</comment>
+        <translation>特羅爾海坦</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="445"/>
+        <source>Tunis</source>
+        <comment>tz_names</comment>
+        <translation>突尼斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="446"/>
+        <source>Ulaanbaatar</source>
+        <comment>tz_names</comment>
+        <translation>烏蘭巴托</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="447"/>
+        <source>Ulyanovsk</source>
+        <comment>tz_names</comment>
+        <translation>烏裡揚諾夫斯克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="448"/>
+        <source>Urumqi</source>
+        <comment>tz_names</comment>
+        <translation>烏魯木齊</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="449"/>
+        <source>Ust-Nera</source>
+        <comment>tz_names</comment>
+        <translation>烏斯季挪拉</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="450"/>
+        <source>Uzhgorod</source>
+        <comment>tz_names</comment>
+        <translation>烏日哥羅德</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="451"/>
+        <source>Vaduz</source>
+        <comment>tz_names</comment>
+        <translation>瓦都茲</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="452"/>
+        <source>Vancouver</source>
+        <comment>tz_names</comment>
+        <translation>溫哥華</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="453"/>
+        <source>Vatican</source>
+        <comment>tz_names</comment>
+        <translation>梵蒂岡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="454"/>
+        <source>Vienna</source>
+        <comment>tz_names</comment>
+        <translation>維也納</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="455"/>
+        <source>Vientiane</source>
+        <comment>tz_names</comment>
+        <translation>萬象</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="456"/>
+        <source>Vilnius</source>
+        <comment>tz_names</comment>
+        <translation>維爾紐斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="457"/>
+        <source>Vladivostok</source>
+        <comment>tz_names</comment>
+        <translation>符拉迪沃斯托克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="458"/>
+        <source>Volgograd</source>
+        <comment>tz_names</comment>
+        <translation>伏爾加格勒</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="459"/>
+        <source>Vostok</source>
+        <comment>tz_names</comment>
+        <translation>沃斯托克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="460"/>
+        <source>Wake</source>
+        <comment>tz_names</comment>
+        <translation>韋克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="461"/>
+        <source>Wallis</source>
+        <comment>tz_names</comment>
+        <translation>沃利斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="462"/>
+        <source>Warsaw</source>
+        <comment>tz_names</comment>
+        <translation>華沙</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="463"/>
+        <source>Whitehorse</source>
+        <comment>tz_names</comment>
+        <translation>懷特霍斯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="464"/>
+        <source>Windhoek</source>
+        <comment>tz_names</comment>
+        <translation>溫吐克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="465"/>
+        <source>Winnipeg</source>
+        <comment>tz_names</comment>
+        <translation>溫尼伯</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="466"/>
+        <source>Yakutat</source>
+        <comment>tz_names</comment>
+        <translation>雅庫特</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="467"/>
+        <source>Yakutsk</source>
+        <comment>tz_names</comment>
+        <translation>亞庫次克</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="468"/>
+        <source>Yangon</source>
+        <comment>tz_names</comment>
+        <translation>仰光</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="469"/>
+        <source>Yekaterinburg</source>
+        <comment>tz_names</comment>
+        <translation>葉卡捷琳堡</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="470"/>
+        <source>Yellowknife</source>
+        <comment>tz_names</comment>
+        <translation>黃刀</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="471"/>
+        <source>Yerevan</source>
+        <comment>tz_names</comment>
+        <translation>葉里溫</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="472"/>
+        <source>Zagreb</source>
+        <comment>tz_names</comment>
+        <translation>札格雷布</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="473"/>
+        <source>Zaporozhye</source>
+        <comment>tz_names</comment>
+        <translation>紮波羅熱</translation>
+    </message>
+    <message>
+        <location filename="../src/libcalamares/locale/ZoneData_p.cxxtr" line="474"/>
+        <source>Zurich</source>
+        <comment>tz_names</comment>
+        <translation>蘇黎世</translation>
+    </message>
+</context>
+</TS>
diff --git a/src/branding/default/show.qml b/src/branding/default/show.qml
index f6223c0..f91d520 100644
--- a/src/branding/default/show.qml
+++ b/src/branding/default/show.qml
@@ -33,7 +33,7 @@ Presentation
         Image {
             id: background1
             source: "Slide1.png"
-            width: 800; height: 800
+            width: 980; height: 980
             fillMode: Image.PreserveAspectFit
             anchors.horizontalCenter:parent.horizontalCenter
             y:parent.height / 2 - height / 2 -25
@@ -44,7 +44,7 @@ Presentation
         Image {
             id: background2
             source: "Slide2.png"
-            width: 800; height: 800
+            width: 980; height: 980
             fillMode: Image.PreserveAspectFit
             anchors.horizontalCenter:parent.horizontalCenter
             y:parent.height / 2 - height / 2 -25
@@ -55,7 +55,7 @@ Presentation
         Image {
             id: background3
             source: "Slide3.png"
-            width: 800; height: 800
+            width: 980; height: 980
             fillMode: Image.PreserveAspectFit
             anchors.horizontalCenter:parent.horizontalCenter
             y:parent.height / 2 - height / 2 -25
diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt
index 3be6b92..9f806c7 100644
--- a/src/calamares/CMakeLists.txt
+++ b/src/calamares/CMakeLists.txt
@@ -1,67 +1,67 @@
-# === This file is part of Calamares - <https://calamares.io> ===
-#
-#   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
-#   SPDX-License-Identifier: BSD-2-Clause
-#
-
-set(calamaresSources
-    main.cpp
-    CalamaresApplication.cpp
-    CalamaresWindow.cpp
-    DebugWindow.cpp
-    VariantModel.cpp
-    progresstree/ProgressTreeDelegate.cpp
-    progresstree/ProgressTreeView.cpp
-)
-
-include_directories(
-    ${CMAKE_SOURCE_DIR}/src/libcalamares
-    ${CMAKE_SOURCE_DIR}/src/libcalamaresui
-    ${CMAKE_BINARY_DIR}/src/libcalamares
-    ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-### EXECUTABLE
-#
-# "calamares_bin" is the main application, not to be confused with
-# the target "calamares" which is the non-GUI library part.
-#
-# The calamares-i18n.cxx file -- full path in CALAMARES_TRANSLATIONS_SOURCE --
-# is created as a target in the lang/ directory. This is compiled to a
-# library (it's just the result of a QRC compile).
-add_executable(calamares_bin ${calamaresSources} calamares.qrc)
-target_include_directories(calamares_bin PRIVATE ${CMAKE_SOURCE_DIR})
-set_target_properties(calamares_bin PROPERTIES ENABLE_EXPORTS TRUE RUNTIME_OUTPUT_NAME calamares)
-calamares_automoc( calamares_bin )
-calamares_autouic( calamares_bin )
-calamares_autorcc( calamares_bin )
-
-target_link_libraries(
-    calamares_bin
-    PRIVATE calamares calamaresui calamares-i18n kdsingleapplication ${qtname}::Core ${qtname}::Widgets
-)
-target_link_libraries(calamares_bin PRIVATE ${kfname}::CoreAddons)
-if(BUILD_CRASH_REPORTING)
-    target_link_libraries(calamares_bin PRIVATE ${kfname}::Crash)
-    target_compile_definitions(calamares_bin PRIVATE BUILD_CRASH_REPORTING)
-endif()
-
-install(TARGETS calamares_bin BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-
-install(
-    FILES ${CMAKE_SOURCE_DIR}/data/images/squid.svg
-    RENAME calamares.svg
-    DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps
-)
-
-### TESTS
-#
-#
-if(BUILD_TESTING)
-    # Don't install, these are just for enable_testing
-    add_executable(loadmodule testmain.cpp)
-    target_link_libraries(loadmodule PRIVATE ${qtname}::Core ${qtname}::Widgets calamares calamaresui)
-
-    add_executable(test_conf test_conf.cpp)
-    target_link_libraries(test_conf PUBLIC yamlcpp::yamlcpp ${qtname}::Core)
-endif()
+# === This file is part of Calamares - <https://calamares.io> ===
+#
+#   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
+#   SPDX-License-Identifier: BSD-2-Clause
+#
+
+set(calamaresSources
+    main.cpp
+    CalamaresApplication.cpp
+    CalamaresWindow.cpp
+    DebugWindow.cpp
+    VariantModel.cpp
+    progresstree/ProgressTreeDelegate.cpp
+    progresstree/ProgressTreeView.cpp
+)
+
+include_directories(
+    ${CMAKE_SOURCE_DIR}/src/libcalamares
+    ${CMAKE_SOURCE_DIR}/src/libcalamaresui
+    ${CMAKE_BINARY_DIR}/src/libcalamares
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+### EXECUTABLE
+#
+# "calamares_bin" is the main application, not to be confused with
+# the target "calamares" which is the non-GUI library part.
+#
+# The calamares-i18n.cxx file -- full path in CALAMARES_TRANSLATIONS_SOURCE --
+# is created as a target in the lang/ directory. This is compiled to a
+# library (it's just the result of a QRC compile).
+add_executable(calamares_bin ${calamaresSources} calamares.qrc)
+target_include_directories(calamares_bin PRIVATE ${CMAKE_SOURCE_DIR})
+set_target_properties(calamares_bin PROPERTIES ENABLE_EXPORTS TRUE RUNTIME_OUTPUT_NAME calamares)
+calamares_automoc( calamares_bin )
+calamares_autouic( calamares_bin )
+calamares_autorcc( calamares_bin )
+
+target_link_libraries(
+    calamares_bin
+    PRIVATE calamares calamaresui calamares-i18n kdsingleapplication ${qtname}::Core ${qtname}::Widgets
+)
+target_link_libraries(calamares_bin PRIVATE ${kfname}::CoreAddons)
+if(BUILD_CRASH_REPORTING)
+    target_link_libraries(calamares_bin PRIVATE ${kfname}::Crash)
+    target_compile_definitions(calamares_bin PRIVATE BUILD_CRASH_REPORTING)
+endif()
+
+install(TARGETS calamares_bin BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+install(
+    FILES ${CMAKE_SOURCE_DIR}/data/images/squid.svg
+    RENAME calamares.svg
+    DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps
+)
+
+### TESTS
+#
+#
+if(BUILD_TESTING)
+    # Don't install, these are just for enable_testing
+    add_executable(loadmodule testmain.cpp)
+    target_link_libraries(loadmodule PRIVATE ${qtname}::Core ${qtname}::Widgets calamares calamaresui)
+
+    add_executable(test_conf test_conf.cpp)
+    target_link_libraries(test_conf PUBLIC yamlcpp::yamlcpp ${qtname}::Core)
+endif()
diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp
index a07edad..6b62fd6 100644
--- a/src/calamares/CalamaresApplication.cpp
+++ b/src/calamares/CalamaresApplication.cpp
@@ -51,8 +51,8 @@ CalamaresApplication::CalamaresApplication( int& argc, char* argv[] )
     // directory -- where Calamares stores logs, for instance --
     // <org>/<app>/, so we end up with ~/.cache/Calamares/calamares/
     // which is excessively squidly.
-    //
-    // setOrganizationName( QStringLiteral( CALAMARES_ORGANIZATION_NAME ) );
+    
+
     setOrganizationDomain( QStringLiteral( CALAMARES_ORGANIZATION_DOMAIN ) );
     setApplicationName( QStringLiteral( CALAMARES_APPLICATION_NAME ) );
     setApplicationVersion( QStringLiteral( CALAMARES_VERSION ) );
diff --git a/src/calamares/DebugWindow.cpp b/src/calamares/DebugWindow.cpp
index b28661e..69584b8 100644
--- a/src/calamares/DebugWindow.cpp
+++ b/src/calamares/DebugWindow.cpp
@@ -1,265 +1,265 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac <teo@kde.org>
- *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#include "DebugWindow.h"
-#include "ui_DebugWindow.h"
-
-#include "Branding.h"
-#include "CalamaresAbout.h"
-#include "CalamaresVersion.h"
-#include "GlobalStorage.h"
-#include "Job.h"
-#include "JobQueue.h"
-#include "Settings.h"
-#include "VariantModel.h"
-#include "modulesystem/Module.h"
-#include "modulesystem/ModuleManager.h"
-#include "utils/Gui.h"
-#include "utils/Logger.h"
-#include "utils/Paste.h"
-#include "utils/Retranslator.h"
-#include "widgets/TranslationFix.h"
-
-#include <QMessageBox>
-#include <QSplitter>
-#include <QStringListModel>
-#include <QTreeView>
-#include <QWidget>
-
-#include <signal.h>
-#include <unistd.h>
-
-/**
- * @brief crash makes Calamares crash immediately.
- */
-static void
-crash()
-{
-    kill( getpid(), SIGTRAP );
-}
-
-/// @brief Print out the widget tree (names) in indented form.
-static void
-dumpWidgetTree( QDebug& deb, const QWidget* widget, int depth )
-{
-    if ( !widget )
-    {
-        return;
-    }
-
-    deb << Logger::Continuation;
-    for ( int i = 0; i < depth; ++i )
-    {
-        deb << ' ';
-    }
-    deb << widget->metaObject()->className() << widget->objectName();
-
-    for ( const auto* w : widget->findChildren< QWidget* >( QString(), Qt::FindDirectChildrenOnly ) )
-    {
-        dumpWidgetTree( deb, w, depth + 1 );
-    }
-}
-
-namespace Calamares
-{
-
-DebugWindow::DebugWindow()
-    : QWidget( nullptr )
-    , m_ui( new Ui::DebugWindow )
-    , m_globals( JobQueue::instance()->globalStorage()->data() )
-    , m_globals_model( std::make_unique< VariantModel >( &m_globals ) )
-    , m_module_model( std::make_unique< VariantModel >( &m_module ) )
-{
-    GlobalStorage* gs = JobQueue::instance()->globalStorage();
-
-    m_ui->setupUi( this );
-
-    m_ui->globalStorageView->setModel( m_globals_model.get() );
-    m_ui->globalStorageView->expandAll();
-
-    // Do above when the GS changes, too
-    connect( gs,
-             &GlobalStorage::changed,
-             this,
-             [ = ]
-             {
-                 m_globals = JobQueue::instance()->globalStorage()->data();
-                 m_globals_model->reload();
-                 m_ui->globalStorageView->expandAll();
-             } );
-
-    // JobQueue page
-    m_ui->jobQueueText->setReadOnly( true );
-    connect( JobQueue::instance(),
-             &JobQueue::queueChanged,
-             this,
-             [ this ]( const QStringList& jobs ) { m_ui->jobQueueText->setText( jobs.join( '\n' ) ); } );
-
-    // Modules page
-    QStringList modulesKeys;
-    for ( const auto& m : ModuleManager::instance()->loadedInstanceKeys() )
-    {
-        modulesKeys << m.toString();
-    }
-
-    QStringListModel* modulesModel = new QStringListModel( modulesKeys );
-    m_ui->modulesListView->setModel( modulesModel );
-    m_ui->modulesListView->setSelectionMode( QAbstractItemView::SingleSelection );
-
-    m_ui->moduleConfigView->setModel( m_module_model.get() );
-
-    connect( m_ui->modulesListView->selectionModel(),
-             &QItemSelectionModel::selectionChanged,
-             this,
-             [ this ]
-             {
-                 QString moduleName = m_ui->modulesListView->currentIndex().data().toString();
-                 Module* module
-                     = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) );
-                 if ( module )
-                 {
-                     m_module = module->configurationMap();
-                     m_module_model->reload();
-                     m_ui->moduleConfigView->expandAll();
-                     m_ui->moduleTypeLabel->setText( module->typeString() );
-                     m_ui->moduleInterfaceLabel->setText( module->interfaceString() );
-                 }
-             } );
-
-    // Tools page
-    connect( m_ui->crashButton, &QPushButton::clicked, this, [] { ::crash(); } );
-    connect( m_ui->reloadStylesheetButton,
-             &QPushButton::clicked,
-             []()
-             {
-                 for ( auto* w : qApp->topLevelWidgets() )
-                 {
-                     // Needs to match what's set in CalamaresWindow
-                     if ( w->objectName() == QStringLiteral( "mainApp" ) )
-                     {
-                         w->setStyleSheet( Calamares::Branding::instance()->stylesheet() );
-                     }
-                 }
-             } );
-    connect( m_ui->widgetTreeButton,
-             &QPushButton::clicked,
-             []()
-             {
-                 for ( auto* w : qApp->topLevelWidgets() )
-                 {
-                     Logger::CDebug deb;
-                     dumpWidgetTree( deb, w, 0 );
-                 }
-             } );
-
-    // Send Log button only if it would be useful
-    m_ui->sendLogButton->setVisible( Calamares::Paste::isEnabled() );
-    connect( m_ui->sendLogButton, &QPushButton::clicked, [ this ]() { Calamares::Paste::doLogUploadUI( this ); } );
-
-    CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); setWindowTitle( tr( "Debug Information", "@title" ) ); );
-}
-
-void
-DebugWindow::closeEvent( QCloseEvent* e )
-{
-    Q_UNUSED( e )
-    emit closed();
-}
-
-DebugWindowManager::DebugWindowManager( QObject* parent )
-    : QObject( parent )
-{
-}
-
-bool
-DebugWindowManager::enabled() const
-{
-    const auto* s = Settings::instance();
-    return ( Logger::logLevel() >= Logger::LOGVERBOSE ) || ( s ? s->debugMode() : false );
-}
-
-void
-DebugWindowManager::show( bool visible )
-{
-    if ( !enabled() )
-    {
-        visible = false;
-    }
-    if ( m_visible == visible )
-    {
-        return;
-    }
-
-    if ( visible )
-    {
-        m_debugWindow = new Calamares::DebugWindow();
-        m_debugWindow->show();
-        connect( m_debugWindow.data(),
-                 &Calamares::DebugWindow::closed,
-                 this,
-                 [ = ]()
-                 {
-                     m_debugWindow->deleteLater();
-                     m_visible = false;
-                     emit visibleChanged( false );
-                 } );
-        m_visible = true;
-        emit visibleChanged( true );
-    }
-    else
-    {
-        if ( m_debugWindow )
-        {
-            m_debugWindow->deleteLater();
-        }
-        m_visible = false;
-        emit visibleChanged( false );
-    }
-}
-
-void
-DebugWindowManager::toggle()
-{
-    show( !m_visible );
-}
-
-void
-DebugWindowManager::about()
-{
-    QString title = Calamares::Settings::instance()->isSetupMode()
-        ? QCoreApplication::translate( "WelcomePage", "About %1 Setup", "@title" )
-        : QCoreApplication::translate( "WelcomePage", "About %1 Installer", "@title" );
-    QMessageBox mb( QMessageBox::Information,
-                    title.arg( CALAMARES_APPLICATION_NAME ),
-                    Calamares::aboutString().arg( Calamares::Branding::instance()->versionedName() ),
-                    QMessageBox::Ok,
-                    nullptr );
-    Calamares::fixButtonLabels( &mb );
-    mb.setStyleSheet(
-        "QMessageBox {"
-        "border: 1px solid hsl(240,2%,79%);"
-        "border-radius: 5px;"
-        "background-color: #FFFFFF;" // 设置对话框背景颜色
-        "}"
-    );
-    mb.setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
-    mb.setIconPixmap(
-        Calamares::defaultPixmap( Calamares::BigLogo,//Biglogo.svg
-                                    Calamares::Original,
-                                    QSize( 321/1.9, 297/2 ) ) );
-    QGridLayout* layout = reinterpret_cast< QGridLayout* >( mb.layout() );
-    if ( layout )
-    {
-        layout->setColumnMinimumWidth( 2, Calamares::defaultFontHeight() * 24 );
-    }
-    mb.exec();
-}
-
-}  // namespace Calamares
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#include "DebugWindow.h"
+#include "ui_DebugWindow.h"
+
+#include "Branding.h"
+#include "CalamaresAbout.h"
+#include "CalamaresVersion.h"
+#include "GlobalStorage.h"
+#include "Job.h"
+#include "JobQueue.h"
+#include "Settings.h"
+#include "VariantModel.h"
+#include "modulesystem/Module.h"
+#include "modulesystem/ModuleManager.h"
+#include "utils/Gui.h"
+#include "utils/Logger.h"
+#include "utils/Paste.h"
+#include "utils/Retranslator.h"
+#include "widgets/TranslationFix.h"
+
+#include <QMessageBox>
+#include <QSplitter>
+#include <QStringListModel>
+#include <QTreeView>
+#include <QWidget>
+
+#include <signal.h>
+#include <unistd.h>
+
+/**
+ * @brief crash makes Calamares crash immediately.
+ */
+static void
+crash()
+{
+    kill( getpid(), SIGTRAP );
+}
+
+/// @brief Print out the widget tree (names) in indented form.
+static void
+dumpWidgetTree( QDebug& deb, const QWidget* widget, int depth )
+{
+    if ( !widget )
+    {
+        return;
+    }
+
+    deb << Logger::Continuation;
+    for ( int i = 0; i < depth; ++i )
+    {
+        deb << ' ';
+    }
+    deb << widget->metaObject()->className() << widget->objectName();
+
+    for ( const auto* w : widget->findChildren< QWidget* >( QString(), Qt::FindDirectChildrenOnly ) )
+    {
+        dumpWidgetTree( deb, w, depth + 1 );
+    }
+}
+
+namespace Calamares
+{
+
+DebugWindow::DebugWindow()
+    : QWidget( nullptr )
+    , m_ui( new Ui::DebugWindow )
+    , m_globals( JobQueue::instance()->globalStorage()->data() )
+    , m_globals_model( std::make_unique< VariantModel >( &m_globals ) )
+    , m_module_model( std::make_unique< VariantModel >( &m_module ) )
+{
+    GlobalStorage* gs = JobQueue::instance()->globalStorage();
+
+    m_ui->setupUi( this );
+
+    m_ui->globalStorageView->setModel( m_globals_model.get() );
+    m_ui->globalStorageView->expandAll();
+
+    // Do above when the GS changes, too
+    connect( gs,
+             &GlobalStorage::changed,
+             this,
+             [ = ]
+             {
+                 m_globals = JobQueue::instance()->globalStorage()->data();
+                 m_globals_model->reload();
+                 m_ui->globalStorageView->expandAll();
+             } );
+
+    // JobQueue page
+    m_ui->jobQueueText->setReadOnly( true );
+    connect( JobQueue::instance(),
+             &JobQueue::queueChanged,
+             this,
+             [ this ]( const QStringList& jobs ) { m_ui->jobQueueText->setText( jobs.join( '\n' ) ); } );
+
+    // Modules page
+    QStringList modulesKeys;
+    for ( const auto& m : ModuleManager::instance()->loadedInstanceKeys() )
+    {
+        modulesKeys << m.toString();
+    }
+
+    QStringListModel* modulesModel = new QStringListModel( modulesKeys );
+    m_ui->modulesListView->setModel( modulesModel );
+    m_ui->modulesListView->setSelectionMode( QAbstractItemView::SingleSelection );
+
+    m_ui->moduleConfigView->setModel( m_module_model.get() );
+
+    connect( m_ui->modulesListView->selectionModel(),
+             &QItemSelectionModel::selectionChanged,
+             this,
+             [ this ]
+             {
+                 QString moduleName = m_ui->modulesListView->currentIndex().data().toString();
+                 Module* module
+                     = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) );
+                 if ( module )
+                 {
+                     m_module = module->configurationMap();
+                     m_module_model->reload();
+                     m_ui->moduleConfigView->expandAll();
+                     m_ui->moduleTypeLabel->setText( module->typeString() );
+                     m_ui->moduleInterfaceLabel->setText( module->interfaceString() );
+                 }
+             } );
+
+    // Tools page
+    connect( m_ui->crashButton, &QPushButton::clicked, this, [] { ::crash(); } );
+    connect( m_ui->reloadStylesheetButton,
+             &QPushButton::clicked,
+             []()
+             {
+                 for ( auto* w : qApp->topLevelWidgets() )
+                 {
+                     // Needs to match what's set in CalamaresWindow
+                     if ( w->objectName() == QStringLiteral( "mainApp" ) )
+                     {
+                         w->setStyleSheet( Calamares::Branding::instance()->stylesheet() );
+                     }
+                 }
+             } );
+    connect( m_ui->widgetTreeButton,
+             &QPushButton::clicked,
+             []()
+             {
+                 for ( auto* w : qApp->topLevelWidgets() )
+                 {
+                     Logger::CDebug deb;
+                     dumpWidgetTree( deb, w, 0 );
+                 }
+             } );
+
+    // Send Log button only if it would be useful
+    m_ui->sendLogButton->setVisible( Calamares::Paste::isEnabled() );
+    connect( m_ui->sendLogButton, &QPushButton::clicked, [ this ]() { Calamares::Paste::doLogUploadUI( this ); } );
+
+    CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); setWindowTitle( tr( "Debug Information", "@title" ) ); );
+}
+
+void
+DebugWindow::closeEvent( QCloseEvent* e )
+{
+    Q_UNUSED( e )
+    emit closed();
+}
+
+DebugWindowManager::DebugWindowManager( QObject* parent )
+    : QObject( parent )
+{
+}
+
+bool
+DebugWindowManager::enabled() const
+{
+    const auto* s = Settings::instance();
+    return ( Logger::logLevel() >= Logger::LOGVERBOSE ) || ( s ? s->debugMode() : false );
+}
+
+void
+DebugWindowManager::show( bool visible )
+{
+    if ( !enabled() )
+    {
+        visible = false;
+    }
+    if ( m_visible == visible )
+    {
+        return;
+    }
+
+    if ( visible )
+    {
+        m_debugWindow = new Calamares::DebugWindow();
+        m_debugWindow->show();
+        connect( m_debugWindow.data(),
+                 &Calamares::DebugWindow::closed,
+                 this,
+                 [ = ]()
+                 {
+                     m_debugWindow->deleteLater();
+                     m_visible = false;
+                     emit visibleChanged( false );
+                 } );
+        m_visible = true;
+        emit visibleChanged( true );
+    }
+    else
+    {
+        if ( m_debugWindow )
+        {
+            m_debugWindow->deleteLater();
+        }
+        m_visible = false;
+        emit visibleChanged( false );
+    }
+}
+
+void
+DebugWindowManager::toggle()
+{
+    show( !m_visible );
+}
+
+void
+DebugWindowManager::about()
+{
+    QString title = Calamares::Settings::instance()->isSetupMode()
+        ? QCoreApplication::translate( "WelcomePage", "About %1 Setup", "@title" )
+        : QCoreApplication::translate( "WelcomePage", "About %1 Installer", "@title" );
+    QMessageBox mb( QMessageBox::Information,
+                    title.arg( CALAMARES_APPLICATION_NAME ),
+                    Calamares::aboutString().arg( Calamares::Branding::instance()->versionedName() ),
+                    QMessageBox::Ok,
+                    nullptr );
+    Calamares::fixButtonLabels( &mb );
+    mb.setStyleSheet(
+        "QMessageBox {"
+        "border: 1px solid hsl(240,2%,79%);"
+        "border-radius: 5px;"
+        "background-color: #FFFFFF;" // 设置对话框背景颜色
+        "}"
+    );
+    mb.setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
+    mb.setIconPixmap(
+        Calamares::defaultPixmap( Calamares::BigLogo,//Biglogo.svg
+                                    Calamares::Original,
+                                    QSize( 321/1.9, 297/2 ) ) );
+    QGridLayout* layout = reinterpret_cast< QGridLayout* >( mb.layout() );
+    if ( layout )
+    {
+        layout->setColumnMinimumWidth( 2, Calamares::defaultFontHeight() * 24 );
+    }
+    mb.exec();
+}
+
+}  // namespace Calamares
diff --git a/src/calamares/DebugWindow.h b/src/calamares/DebugWindow.h
index 83bfb08..9ed77e5 100644
--- a/src/calamares/DebugWindow.h
+++ b/src/calamares/DebugWindow.h
@@ -1,96 +1,96 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org>
- *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#ifndef CALAMARES_DEBUGWINDOW_H
-#define CALAMARES_DEBUGWINDOW_H
-
-#include "VariantModel.h"
-
-#include <QPointer>
-#include <QVariant>
-#include <QWidget>
-
-#include <memory>
-
-namespace Calamares
-{
-
-// From the .ui file
-namespace Ui
-{
-class DebugWindow;
-}  // namespace Ui
-
-class DebugWindow : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit DebugWindow();
-
-signals:
-    void closed();
-
-protected:
-    void closeEvent( QCloseEvent* e ) override;
-
-private:
-    Ui::DebugWindow* m_ui;
-    QVariant m_globals;
-    QVariant m_module;
-    std::unique_ptr< VariantModel > m_globals_model;
-    std::unique_ptr< VariantModel > m_module_model;
-};
-
-/** @brief Manager for meta-windows (Debug and About windows)
- *
- * Only one DebugWindow is expected to be around. This class manages
- * (exactly one) DebugWindow and can create and destroy it as needed.
- * It is available to the Calamares panels as object `DebugWindow`.
- *
- * The about() method shows a modal pop-up about Calamares.
- */
-class DebugWindowManager : public QObject
-{
-    Q_OBJECT
-
-    /// @brief Proxy to Settings::debugMode() default @c false
-    Q_PROPERTY( bool enabled READ enabled CONSTANT FINAL )
-
-    /** @brief Is the debug window visible?
-     *
-     * Writing @c true to this **may** make the debug window visible to
-     * the user; only if debugMode() is on.
-     */
-    Q_PROPERTY( bool visible READ visible WRITE show NOTIFY visibleChanged )
-
-public:
-    DebugWindowManager( QObject* parent = nullptr );
-    virtual ~DebugWindowManager() override = default;
-
-public Q_SLOTS:
-    bool enabled() const;
-    bool visible() const { return m_visible; }
-    void show( bool visible );
-    void toggle();
-
-    void about();
-
-signals:
-    void visibleChanged( bool visible );
-
-private:
-    QPointer< DebugWindow > m_debugWindow;
-    bool m_visible = false;
-};
-
-
-}  // namespace Calamares
-#endif
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#ifndef CALAMARES_DEBUGWINDOW_H
+#define CALAMARES_DEBUGWINDOW_H
+
+#include "VariantModel.h"
+
+#include <QPointer>
+#include <QVariant>
+#include <QWidget>
+
+#include <memory>
+
+namespace Calamares
+{
+
+// From the .ui file
+namespace Ui
+{
+class DebugWindow;
+}  // namespace Ui
+
+class DebugWindow : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit DebugWindow();
+
+signals:
+    void closed();
+
+protected:
+    void closeEvent( QCloseEvent* e ) override;
+
+private:
+    Ui::DebugWindow* m_ui;
+    QVariant m_globals;
+    QVariant m_module;
+    std::unique_ptr< VariantModel > m_globals_model;
+    std::unique_ptr< VariantModel > m_module_model;
+};
+
+/** @brief Manager for meta-windows (Debug and About windows)
+ *
+ * Only one DebugWindow is expected to be around. This class manages
+ * (exactly one) DebugWindow and can create and destroy it as needed.
+ * It is available to the Calamares panels as object `DebugWindow`.
+ *
+ * The about() method shows a modal pop-up about Calamares.
+ */
+class DebugWindowManager : public QObject
+{
+    Q_OBJECT
+
+    /// @brief Proxy to Settings::debugMode() default @c false
+    Q_PROPERTY( bool enabled READ enabled CONSTANT FINAL )
+
+    /** @brief Is the debug window visible?
+     *
+     * Writing @c true to this **may** make the debug window visible to
+     * the user; only if debugMode() is on.
+     */
+    Q_PROPERTY( bool visible READ visible WRITE show NOTIFY visibleChanged )
+
+public:
+    DebugWindowManager( QObject* parent = nullptr );
+    virtual ~DebugWindowManager() override = default;
+
+public Q_SLOTS:
+    bool enabled() const;
+    bool visible() const { return m_visible; }
+    void show( bool visible );
+    void toggle();
+
+    void about();
+
+signals:
+    void visibleChanged( bool visible );
+
+private:
+    QPointer< DebugWindow > m_debugWindow;
+    bool m_visible = false;
+};
+
+
+}  // namespace Calamares
+#endif
diff --git a/src/calamares/VariantModel.cpp b/src/calamares/VariantModel.cpp
index da4f556..6d175d5 100644
--- a/src/calamares/VariantModel.cpp
+++ b/src/calamares/VariantModel.cpp
@@ -1,285 +1,285 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#include "VariantModel.h"
-
-#include "compat/Variant.h"
-
-static bool
-isMapLike( const QVariant& item )
-{
-    return item.canConvert< QVariantMap >();
-}
-
-static bool
-isListLike( const QVariant& item )
-{
-    return item.canConvert< QVariantList >() && !( Calamares::typeOf( item ) == Calamares::StringVariantType );
-}
-
-static void
-overallLength( const QVariant& item, quintptr& c, quintptr parent, VariantModel::IndexVector* skiplist )
-{
-    if ( skiplist )
-    {
-        skiplist->append( parent );
-    }
-
-    parent = c++;
-    if ( isMapLike( item ) )
-    {
-        for ( const auto& subitem : item.toMap() )
-        {
-            overallLength( subitem, c, parent, skiplist );
-        }
-    }
-    else if ( isListLike( item ) )
-    {
-        for ( const auto& subitem : item.toList() )
-        {
-            overallLength( subitem, c, parent, skiplist );
-        }
-    }
-}
-
-static quintptr
-findNth( const VariantModel::IndexVector& skiplist, quintptr value, int n )
-{
-    constexpr const quintptr invalid_index = static_cast< quintptr >( -1 );
-
-    if ( n < 0 )
-    {
-        return invalid_index;
-    }
-
-    int index = static_cast< int >( value );
-    while ( ( n >= 0 ) && ( index < skiplist.count() ) )
-    {
-        if ( skiplist[ index ] == value )
-        {
-            if ( --n < 0 )
-            {
-                // It's bigger than 0
-                return static_cast< quintptr >( index );
-            }
-        }
-        index++;
-    }
-    return invalid_index;
-}
-
-
-VariantModel::VariantModel( const QVariant* p )
-    : m_p( p )
-{
-    reload();
-}
-
-VariantModel::~VariantModel() {}
-
-void
-VariantModel::reload()
-{
-    constexpr const quintptr invalid_index = static_cast< quintptr >( -1 );
-
-    quintptr x = 0;
-    m_rows.clear();  // Start over
-    if ( m_rows.capacity() < 64 )
-    {
-        m_rows.reserve( 64 );  // Start reasonably-sized
-    }
-    overallLength( *m_p, x, invalid_index, &m_rows );
-}
-
-int
-VariantModel::columnCount( const QModelIndex& ) const
-{
-    return 2;
-}
-
-int
-VariantModel::rowCount( const QModelIndex& index ) const
-{
-    quintptr p = index.isValid() ? index.internalId() : 0;
-    return m_rows.count( p );
-}
-
-QModelIndex
-VariantModel::index( int row, int column, const QModelIndex& parent ) const
-{
-    quintptr p = 0;
-
-    if ( parent.isValid() )
-    {
-        if ( inRange( parent ) )
-        {
-            p = parent.internalId();
-        }
-    }
-
-    return createIndex( row, column, findNth( m_rows, p, row ) );
-}
-
-static inline quintptr
-deref( const VariantModel::IndexVector& v, quintptr i )
-{
-    return v[ static_cast< int >( i ) ];
-}
-
-QModelIndex
-VariantModel::parent( const QModelIndex& index ) const
-{
-    if ( !index.isValid() || !inRange( index ) )
-    {
-        return QModelIndex();
-    }
-
-    quintptr p = deref( m_rows, index.internalId() );
-    if ( p == 0 )
-    {
-        return QModelIndex();
-    }
-
-    if ( !inRange( p ) )
-    {
-        return QModelIndex();
-    }
-    quintptr p_pid = deref( m_rows, p );
-    int row = 0;
-    for ( int i = static_cast< int >( p_pid ); i < static_cast< int >( p ); ++i )
-    {
-        if ( m_rows[ i ] == p_pid )
-        {
-            row++;
-        }
-    }
-
-    return createIndex( row, index.column(), p );
-}
-
-QVariant
-VariantModel::data( const QModelIndex& index, int role ) const
-{
-    if ( role != Qt::DisplayRole )
-    {
-        return QVariant();
-    }
-
-    if ( !index.isValid() )
-    {
-        return QVariant();
-    }
-
-    if ( ( index.column() < 0 ) || ( index.column() > 1 ) )
-    {
-        return QVariant();
-    }
-
-    if ( !inRange( index ) )
-    {
-        return QVariant();
-    }
-
-    const QVariant thing = underlying( parent( index ) );
-
-    if ( !thing.isValid() )
-    {
-        return QVariant();
-    }
-
-    if ( isMapLike( thing ) )
-    {
-        QVariantMap the_map = thing.toMap();
-        const auto key = the_map.keys().at( index.row() );
-        if ( index.column() == 0 )
-        {
-            return key;
-        }
-        else
-        {
-            return the_map[ key ];
-        }
-    }
-    else if ( isListLike( thing ) )
-    {
-        if ( index.column() == 0 )
-        {
-            return index.row();
-        }
-        else
-        {
-            QVariantList the_list = thing.toList();
-            return the_list.at( index.row() );
-        }
-    }
-    else
-    {
-        if ( index.column() == 0 )
-        {
-            return QVariant();
-        }
-        else
-        {
-            return thing;
-        }
-    }
-}
-
-QVariant
-VariantModel::headerData( int section, Qt::Orientation orientation, int role ) const
-{
-    if ( role != Qt::DisplayRole )
-    {
-        return QVariant();
-    }
-
-    if ( orientation == Qt::Horizontal )
-    {
-        if ( section == 0 )
-        {
-            return tr( "Key", "Column header for key/value" );
-        }
-        else if ( section == 1 )
-        {
-            return tr( "Value", "Column header for key/value" );
-        }
-        else
-        {
-            return QVariant();
-        }
-    }
-    else
-    {
-        return QVariant();
-    }
-}
-
-const QVariant
-VariantModel::underlying( const QModelIndex& index ) const
-{
-    if ( !index.isValid() )
-    {
-        return *m_p;
-    }
-
-    const auto& thing = underlying( parent( index ) );
-    if ( isMapLike( thing ) )
-    {
-        const auto& the_map = thing.toMap();
-        return the_map[ the_map.keys()[ index.row() ] ];
-    }
-    else if ( isListLike( thing ) )
-    {
-        return thing.toList()[ index.row() ];
-    }
-    else
-    {
-        return thing;
-    }
-}
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#include "VariantModel.h"
+
+#include "compat/Variant.h"
+
+static bool
+isMapLike( const QVariant& item )
+{
+    return item.canConvert< QVariantMap >();
+}
+
+static bool
+isListLike( const QVariant& item )
+{
+    return item.canConvert< QVariantList >() && !( Calamares::typeOf( item ) == Calamares::StringVariantType );
+}
+
+static void
+overallLength( const QVariant& item, quintptr& c, quintptr parent, VariantModel::IndexVector* skiplist )
+{
+    if ( skiplist )
+    {
+        skiplist->append( parent );
+    }
+
+    parent = c++;
+    if ( isMapLike( item ) )
+    {
+        for ( const auto& subitem : item.toMap() )
+        {
+            overallLength( subitem, c, parent, skiplist );
+        }
+    }
+    else if ( isListLike( item ) )
+    {
+        for ( const auto& subitem : item.toList() )
+        {
+            overallLength( subitem, c, parent, skiplist );
+        }
+    }
+}
+
+static quintptr
+findNth( const VariantModel::IndexVector& skiplist, quintptr value, int n )
+{
+    constexpr const quintptr invalid_index = static_cast< quintptr >( -1 );
+
+    if ( n < 0 )
+    {
+        return invalid_index;
+    }
+
+    int index = static_cast< int >( value );
+    while ( ( n >= 0 ) && ( index < skiplist.count() ) )
+    {
+        if ( skiplist[ index ] == value )
+        {
+            if ( --n < 0 )
+            {
+                // It's bigger than 0
+                return static_cast< quintptr >( index );
+            }
+        }
+        index++;
+    }
+    return invalid_index;
+}
+
+
+VariantModel::VariantModel( const QVariant* p )
+    : m_p( p )
+{
+    reload();
+}
+
+VariantModel::~VariantModel() {}
+
+void
+VariantModel::reload()
+{
+    constexpr const quintptr invalid_index = static_cast< quintptr >( -1 );
+
+    quintptr x = 0;
+    m_rows.clear();  // Start over
+    if ( m_rows.capacity() < 64 )
+    {
+        m_rows.reserve( 64 );  // Start reasonably-sized
+    }
+    overallLength( *m_p, x, invalid_index, &m_rows );
+}
+
+int
+VariantModel::columnCount( const QModelIndex& ) const
+{
+    return 2;
+}
+
+int
+VariantModel::rowCount( const QModelIndex& index ) const
+{
+    quintptr p = index.isValid() ? index.internalId() : 0;
+    return m_rows.count( p );
+}
+
+QModelIndex
+VariantModel::index( int row, int column, const QModelIndex& parent ) const
+{
+    quintptr p = 0;
+
+    if ( parent.isValid() )
+    {
+        if ( inRange( parent ) )
+        {
+            p = parent.internalId();
+        }
+    }
+
+    return createIndex( row, column, findNth( m_rows, p, row ) );
+}
+
+static inline quintptr
+deref( const VariantModel::IndexVector& v, quintptr i )
+{
+    return v[ static_cast< int >( i ) ];
+}
+
+QModelIndex
+VariantModel::parent( const QModelIndex& index ) const
+{
+    if ( !index.isValid() || !inRange( index ) )
+    {
+        return QModelIndex();
+    }
+
+    quintptr p = deref( m_rows, index.internalId() );
+    if ( p == 0 )
+    {
+        return QModelIndex();
+    }
+
+    if ( !inRange( p ) )
+    {
+        return QModelIndex();
+    }
+    quintptr p_pid = deref( m_rows, p );
+    int row = 0;
+    for ( int i = static_cast< int >( p_pid ); i < static_cast< int >( p ); ++i )
+    {
+        if ( m_rows[ i ] == p_pid )
+        {
+            row++;
+        }
+    }
+
+    return createIndex( row, index.column(), p );
+}
+
+QVariant
+VariantModel::data( const QModelIndex& index, int role ) const
+{
+    if ( role != Qt::DisplayRole )
+    {
+        return QVariant();
+    }
+
+    if ( !index.isValid() )
+    {
+        return QVariant();
+    }
+
+    if ( ( index.column() < 0 ) || ( index.column() > 1 ) )
+    {
+        return QVariant();
+    }
+
+    if ( !inRange( index ) )
+    {
+        return QVariant();
+    }
+
+    const QVariant thing = underlying( parent( index ) );
+
+    if ( !thing.isValid() )
+    {
+        return QVariant();
+    }
+
+    if ( isMapLike( thing ) )
+    {
+        QVariantMap the_map = thing.toMap();
+        const auto key = the_map.keys().at( index.row() );
+        if ( index.column() == 0 )
+        {
+            return key;
+        }
+        else
+        {
+            return the_map[ key ];
+        }
+    }
+    else if ( isListLike( thing ) )
+    {
+        if ( index.column() == 0 )
+        {
+            return index.row();
+        }
+        else
+        {
+            QVariantList the_list = thing.toList();
+            return the_list.at( index.row() );
+        }
+    }
+    else
+    {
+        if ( index.column() == 0 )
+        {
+            return QVariant();
+        }
+        else
+        {
+            return thing;
+        }
+    }
+}
+
+QVariant
+VariantModel::headerData( int section, Qt::Orientation orientation, int role ) const
+{
+    if ( role != Qt::DisplayRole )
+    {
+        return QVariant();
+    }
+
+    if ( orientation == Qt::Horizontal )
+    {
+        if ( section == 0 )
+        {
+            return tr( "Key", "Column header for key/value" );
+        }
+        else if ( section == 1 )
+        {
+            return tr( "Value", "Column header for key/value" );
+        }
+        else
+        {
+            return QVariant();
+        }
+    }
+    else
+    {
+        return QVariant();
+    }
+}
+
+const QVariant
+VariantModel::underlying( const QModelIndex& index ) const
+{
+    if ( !index.isValid() )
+    {
+        return *m_p;
+    }
+
+    const auto& thing = underlying( parent( index ) );
+    if ( isMapLike( thing ) )
+    {
+        const auto& the_map = thing.toMap();
+        return the_map[ the_map.keys()[ index.row() ] ];
+    }
+    else if ( isListLike( thing ) )
+    {
+        return thing.toList()[ index.row() ];
+    }
+    else
+    {
+        return thing;
+    }
+}
diff --git a/src/calamares/VariantModel.h b/src/calamares/VariantModel.h
index 9d33231..4e47a93 100644
--- a/src/calamares/VariantModel.h
+++ b/src/calamares/VariantModel.h
@@ -1,104 +1,104 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#ifndef VARIANTMODEL_H
-#define VARIANTMODEL_H
-
-#include <QAbstractItemModel>
-#include <QVariantMap>
-#include <QVector>
-
-/** @brief A model that operates directly on a QVariant
- *
- * A VariantModel operates directly on an underlying
- * QVariant, treating QVariantMap and QVariantList as
- * nodes with multiple children. In general, putting
- * a QVariantMap into a QVariant and passing that into
- * the model will get you a tree-like model of the
- * VariantMap's data structure.
- *
- * Take care of object lifetimes and that the underlying
- * QVariant does not change during use. If the QVariant
- * **does** change, call reload() to re-build the internal
- * representation of the tree.
- */
-class VariantModel : public QAbstractItemModel
-{
-    Q_OBJECT
-public:
-    /** @brief Auxiliary data
-     *
-     * The nodes of the tree are enumerated into a vector
-     * (of length equal to the number of nodes in the tree + 1)
-     * which are used to do index and parent calculations.
-     */
-    using IndexVector = QVector< quintptr >;
-
-    /** @brief Constructor
-     *
-     * The QVariant's lifetime is **not** affected by the model,
-     * so take care that the QVariant lives at least as long as
-     * the model). Also, don't change the QVariant underneath the model.
-     */
-    VariantModel( const QVariant* p );
-
-    ~VariantModel() override;
-
-    /** @brief Re-build the internal tree
-     *
-     * Call this when the underlying variant is changed, which
-     * might impact how the tree is laid out.
-     */
-    void reload();
-
-    int columnCount( const QModelIndex& index ) const override;
-    int rowCount( const QModelIndex& index ) const override;
-
-    QModelIndex index( int row, int column, const QModelIndex& parent ) const override;
-    QModelIndex parent( const QModelIndex& index ) const override;
-    QVariant data( const QModelIndex& index, int role ) const override;
-    QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
-
-private:
-    const QVariant* const m_p;
-
-    /** @brief Tree representation of the variant.
-     *
-     * At index 0 in the vector , we store -1 to indicate the root.
-     *
-     * Then we enumerate all the elements in the tree (by traversing
-     * the variant and using QVariantMap and QVariantList as having
-     * children, and everything else being a leaf node) and at the index
-     * for a child, store the index of its parent. This means that direct
-     * children of the root store a 0 in their indexes, children of the first
-     * child of the root store a 1, and we can "pointer chase" from an index
-     * through parents back to index 0.
-     *
-     * Because of this structure, the value stored at index i must be
-     * less than i (except for index 0, which is special). This makes it
-     * slightly easier to search for a given value *p*, because we can start
-     * at index *p* (or even *p+1*).
-     *
-     * Given an index *i* into the vector corresponding to a child, we know the
-     * parent, but can also count which row this child should have, by counting
-     * *other* indexes before *i* with the same parent (and by the ordering
-     * of values, we can start counting at index *parent-index*).
-     *
-     */
-    IndexVector m_rows;
-
-    /// @brief Implementation of walking an index through the variant-tree
-    const QVariant underlying( const QModelIndex& index ) const;
-
-    /// @brief Helpers for range-checking
-    inline bool inRange( quintptr p ) const { return p < static_cast< quintptr >( m_rows.count() ); }
-    inline bool inRange( const QModelIndex& index ) const { return inRange( index.internalId() ); }
-};
-
-#endif
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#ifndef VARIANTMODEL_H
+#define VARIANTMODEL_H
+
+#include <QAbstractItemModel>
+#include <QVariantMap>
+#include <QVector>
+
+/** @brief A model that operates directly on a QVariant
+ *
+ * A VariantModel operates directly on an underlying
+ * QVariant, treating QVariantMap and QVariantList as
+ * nodes with multiple children. In general, putting
+ * a QVariantMap into a QVariant and passing that into
+ * the model will get you a tree-like model of the
+ * VariantMap's data structure.
+ *
+ * Take care of object lifetimes and that the underlying
+ * QVariant does not change during use. If the QVariant
+ * **does** change, call reload() to re-build the internal
+ * representation of the tree.
+ */
+class VariantModel : public QAbstractItemModel
+{
+    Q_OBJECT
+public:
+    /** @brief Auxiliary data
+     *
+     * The nodes of the tree are enumerated into a vector
+     * (of length equal to the number of nodes in the tree + 1)
+     * which are used to do index and parent calculations.
+     */
+    using IndexVector = QVector< quintptr >;
+
+    /** @brief Constructor
+     *
+     * The QVariant's lifetime is **not** affected by the model,
+     * so take care that the QVariant lives at least as long as
+     * the model). Also, don't change the QVariant underneath the model.
+     */
+    VariantModel( const QVariant* p );
+
+    ~VariantModel() override;
+
+    /** @brief Re-build the internal tree
+     *
+     * Call this when the underlying variant is changed, which
+     * might impact how the tree is laid out.
+     */
+    void reload();
+
+    int columnCount( const QModelIndex& index ) const override;
+    int rowCount( const QModelIndex& index ) const override;
+
+    QModelIndex index( int row, int column, const QModelIndex& parent ) const override;
+    QModelIndex parent( const QModelIndex& index ) const override;
+    QVariant data( const QModelIndex& index, int role ) const override;
+    QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
+
+private:
+    const QVariant* const m_p;
+
+    /** @brief Tree representation of the variant.
+     *
+     * At index 0 in the vector , we store -1 to indicate the root.
+     *
+     * Then we enumerate all the elements in the tree (by traversing
+     * the variant and using QVariantMap and QVariantList as having
+     * children, and everything else being a leaf node) and at the index
+     * for a child, store the index of its parent. This means that direct
+     * children of the root store a 0 in their indexes, children of the first
+     * child of the root store a 1, and we can "pointer chase" from an index
+     * through parents back to index 0.
+     *
+     * Because of this structure, the value stored at index i must be
+     * less than i (except for index 0, which is special). This makes it
+     * slightly easier to search for a given value *p*, because we can start
+     * at index *p* (or even *p+1*).
+     *
+     * Given an index *i* into the vector corresponding to a child, we know the
+     * parent, but can also count which row this child should have, by counting
+     * *other* indexes before *i* with the same parent (and by the ordering
+     * of values, we can start counting at index *parent-index*).
+     *
+     */
+    IndexVector m_rows;
+
+    /// @brief Implementation of walking an index through the variant-tree
+    const QVariant underlying( const QModelIndex& index ) const;
+
+    /// @brief Helpers for range-checking
+    inline bool inRange( quintptr p ) const { return p < static_cast< quintptr >( m_rows.count() ); }
+    inline bool inRange( const QModelIndex& index ) const { return inRange( index.internalId() ); }
+};
+
+#endif
diff --git a/src/calamares/calamares-navigation.qml b/src/calamares/calamares-navigation.qml
index becc1b4..58c233d 100644
--- a/src/calamares/calamares-navigation.qml
+++ b/src/calamares/calamares-navigation.qml
@@ -1,83 +1,83 @@
-/* Sample of QML navigation.
-
-   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
-   SPDX-License-Identifier: GPL-3.0-or-later
-
-
-   The navigation panel is generally "horizontal" in layout, with
-   buttons for next and previous; this particular one copies
-   the layout and size of the widgets panel.
-*/
-import io.calamares.ui 1.0
-import io.calamares.core 1.0
-
-import QtQuick 2.3
-import QtQuick.Controls 2.10
-import QtQuick.Layouts 1.3
-
-Rectangle {
-    id: navigationBar;
-    color: Branding.styleString( Branding.SidebarBackground );
-    height: 48;
-
-    RowLayout {
-        id: buttonBar
-        anchors.fill: parent;
-
-        Item
-        {
-            Layout.fillWidth: true;
-        }
-
-        Button
-        {
-            text: ViewManager.backLabel;
-            icon.name: ViewManager.backIcon;
-
-            enabled: ViewManager.backEnabled;
-            visible: ViewManager.backAndNextVisible;
-            onClicked: { ViewManager.back(); }
-        }
-        Button
-        {
-            text: ViewManager.nextLabel;
-            icon.name: ViewManager.nextIcon;
-
-            enabled: ViewManager.nextEnabled;
-            visible: ViewManager.backAndNextVisible;
-            onClicked: { ViewManager.next(); }
-            // This margin goes in the "next" button, because the "quit"
-            // button can vanish and we want to keep the margin to
-            // the next-thing-in-the-navigation-panel around.
-            Layout.rightMargin: 3 * buttonBar.spacing;
-        }
-        Button
-        {
-            Layout.rightMargin: 2 * buttonBar.spacing
-            text: ViewManager.quitLabel;
-            icon.name: ViewManager.quitIcon;
-
-            ToolTip.visible: hovered
-            ToolTip.timeout: 5000
-            ToolTip.delay: 1000
-            ToolTip.text: ViewManager.quitTooltip;
-
-            /*
-             * The ViewManager has settings -- user-controlled via the
-             * branding component, and party based on program state --
-             * whether the quit button should be enabled and visible.
-             *
-             * QML navigation *should* follow this pattern, but can also
-             * add other qualifications. For instance, you may have a
-             * "finished" module that handles quit in its own way, and
-             * want to hide the quit button then. The ViewManager has a
-             * current step and a total count, so compare them:
-             *
-             * visible: ViewManager.quitVisible && ( ViewManager.currentStepIndex < ViewManager.rowCount()-1);
-             */
-            enabled: ViewManager.quitEnabled;
-            visible: ViewManager.quitVisible;
-            onClicked: { ViewManager.quit(); }
-        }
-    }
-}
+/* Sample of QML navigation.
+
+   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
+   SPDX-License-Identifier: GPL-3.0-or-later
+
+
+   The navigation panel is generally "horizontal" in layout, with
+   buttons for next and previous; this particular one copies
+   the layout and size of the widgets panel.
+*/
+import io.calamares.ui 1.0
+import io.calamares.core 1.0
+
+import QtQuick 2.3
+import QtQuick.Controls 2.10
+import QtQuick.Layouts 1.3
+
+Rectangle {
+    id: navigationBar;
+    color: Branding.styleString( Branding.SidebarBackground );
+    height: 48;
+
+    RowLayout {
+        id: buttonBar
+        anchors.fill: parent;
+
+        Item
+        {
+            Layout.fillWidth: true;
+        }
+
+        Button
+        {
+            text: ViewManager.backLabel;
+            icon.name: ViewManager.backIcon;
+
+            enabled: ViewManager.backEnabled;
+            visible: ViewManager.backAndNextVisible;
+            onClicked: { ViewManager.back(); }
+        }
+        Button
+        {
+            text: ViewManager.nextLabel;
+            icon.name: ViewManager.nextIcon;
+
+            enabled: ViewManager.nextEnabled;
+            visible: ViewManager.backAndNextVisible;
+            onClicked: { ViewManager.next(); }
+            // This margin goes in the "next" button, because the "quit"
+            // button can vanish and we want to keep the margin to
+            // the next-thing-in-the-navigation-panel around.
+            Layout.rightMargin: 3 * buttonBar.spacing;
+        }
+        Button
+        {
+            Layout.rightMargin: 2 * buttonBar.spacing
+            text: ViewManager.quitLabel;
+            icon.name: ViewManager.quitIcon;
+
+            ToolTip.visible: hovered
+            ToolTip.timeout: 5000
+            ToolTip.delay: 1000
+            ToolTip.text: ViewManager.quitTooltip;
+
+            /*
+             * The ViewManager has settings -- user-controlled via the
+             * branding component, and party based on program state --
+             * whether the quit button should be enabled and visible.
+             *
+             * QML navigation *should* follow this pattern, but can also
+             * add other qualifications. For instance, you may have a
+             * "finished" module that handles quit in its own way, and
+             * want to hide the quit button then. The ViewManager has a
+             * current step and a total count, so compare them:
+             *
+             * visible: ViewManager.quitVisible && ( ViewManager.currentStepIndex < ViewManager.rowCount()-1);
+             */
+            enabled: ViewManager.quitEnabled;
+            visible: ViewManager.quitVisible;
+            onClicked: { ViewManager.quit(); }
+        }
+    }
+}
diff --git a/src/calamares/calamares-sidebar.qml b/src/calamares/calamares-sidebar.qml
index 4780823..3a75d95 100644
--- a/src/calamares/calamares-sidebar.qml
+++ b/src/calamares/calamares-sidebar.qml
@@ -1,125 +1,125 @@
-/* Sample of QML progress tree.
-
-   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
-   SPDX-FileCopyrightText: 2021 Anke Boersma <demm@kaosx.us>
-   SPDX-License-Identifier: GPL-3.0-or-later
-
-
-   The progress tree (actually a list) is generally "vertical" in layout,
-   with the steps going "down", but it could also be a more compact
-   horizontal layout with suitable branding settings.
-
-   This example emulates the layout and size of the widgets progress tree.
-*/
-import io.calamares.ui 1.0
-import io.calamares.core 1.0
-
-import QtQuick 2.3
-import QtQuick.Layouts 1.3
-
-Rectangle {
-    id: sideBar;
-    color: Branding.styleString( Branding.SidebarBackground );
-    anchors.fill: parent;
-
-    ColumnLayout {
-        anchors.fill: parent;
-        spacing: 0;
-
-        Image {
-            Layout.topMargin: 12;
-            Layout.bottomMargin: 12;
-            Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
-            id: logo;
-            width: 80;
-            height: width;  // square
-            source: "file:/" + Branding.imagePath(Branding.ProductLogo);
-            sourceSize.width: width;
-            sourceSize.height: height;
-        }
-
-        Repeater {
-            model: ViewManager
-            Rectangle {
-                Layout.leftMargin: 6;
-                Layout.rightMargin: 6;
-                Layout.fillWidth: true;
-                height: 35;
-                radius: 6;
-                color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarBackgroundCurrent : Branding.SidebarBackground );
-
-                Text {
-                    anchors.verticalCenter: parent.verticalCenter;
-                    anchors.horizontalCenter: parent.horizontalCenter;
-                    color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarTextCurrent : Branding.SidebarText );
-                    text: display;
-                }
-            }
-        }
-
-        Item {
-            Layout.fillHeight: true;
-        }
-
-        Rectangle {
-            id: metaArea
-            Layout.fillWidth: true;
-            height: 35
-            Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
-            color: Branding.styleString( Branding.SidebarBackground );
-            visible: true;
-
-            Rectangle {
-                id: aboutArea
-                height: 35
-                width: parent.width / 2;
-                anchors.left: parent.left
-                color: Branding.styleString( Branding.SidebarBackgroundCurrent );
-                visible: true;
-
-                MouseArea {
-                    id: mouseAreaAbout
-                    anchors.fill: parent;
-                    cursorShape: Qt.PointingHandCursor
-                    hoverEnabled: true
-                    Text {
-                        anchors.verticalCenter: parent.verticalCenter;
-                        anchors.horizontalCenter: parent.horizontalCenter;
-                        x: parent.x + 4;
-                        text: qsTr("About")
-                        color: Branding.styleString( Branding.SidebarTextCurrent );
-                        font.pointSize : 9
-                    }
-
-                    onClicked: debug.about()
-                }
-            }
-
-            Rectangle {
-                id: debugArea
-                height: 35
-                width: parent.width / 2;
-                anchors.right: parent.right
-                color: Branding.styleString( Branding.SidebarBackgroundCurrent );
-                visible: debug.enabled
-
-                MouseArea {
-                    id: mouseAreaDebug
-                    anchors.fill: parent;
-                    cursorShape: Qt.PointingHandCursor
-                    hoverEnabled: true
-                    Text {
-                        anchors.verticalCenter: parent.verticalCenter;
-                        anchors.horizontalCenter: parent.horizontalCenter;
-                        x: parent.x + 4;
-                        text: qsTr("Debug")
-                        color: Branding.styleString( Branding.SidebarTextCurrent );
-                        font.pointSize : 9
-                    }
-
-                    onClicked: debug.toggle()
-                }
-            }
-        }
-    }
-}
+/* Sample of QML progress tree.
+
+   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
+   SPDX-FileCopyrightText: 2021 Anke Boersma <demm@kaosx.us>
+   SPDX-License-Identifier: GPL-3.0-or-later
+
+
+   The progress tree (actually a list) is generally "vertical" in layout,
+   with the steps going "down", but it could also be a more compact
+   horizontal layout with suitable branding settings.
+
+   This example emulates the layout and size of the widgets progress tree.
+*/
+import io.calamares.ui 1.0
+import io.calamares.core 1.0
+
+import QtQuick 2.3
+import QtQuick.Layouts 1.3
+
+Rectangle {
+    id: sideBar;
+    color: Branding.styleString( Branding.SidebarBackground );
+    anchors.fill: parent;
+
+    ColumnLayout {
+        anchors.fill: parent;
+        spacing: 0;
+
+        Image {
+            Layout.topMargin: 12;
+            Layout.bottomMargin: 12;
+            Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
+            id: logo;
+            width: 80;
+            height: width;  // square
+            source: "file:/" + Branding.imagePath(Branding.ProductLogo);
+            sourceSize.width: width;
+            sourceSize.height: height;
+        }
+
+        Repeater {
+            model: ViewManager
+            Rectangle {
+                Layout.leftMargin: 6;
+                Layout.rightMargin: 6;
+                Layout.fillWidth: true;
+                height: 35;
+                radius: 6;
+                color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarBackgroundCurrent : Branding.SidebarBackground );
+
+                Text {
+                    anchors.verticalCenter: parent.verticalCenter;
+                    anchors.horizontalCenter: parent.horizontalCenter;
+                    color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarTextCurrent : Branding.SidebarText );
+                    text: display;
+                }
+            }
+        }
+
+        Item {
+            Layout.fillHeight: true;
+        }
+
+        Rectangle {
+            id: metaArea
+            Layout.fillWidth: true;
+            height: 35
+            Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+            color: Branding.styleString( Branding.SidebarBackground );
+            visible: true;
+
+            Rectangle {
+                id: aboutArea
+                height: 35
+                width: parent.width / 2;
+                anchors.left: parent.left
+                color: Branding.styleString( Branding.SidebarBackgroundCurrent );
+                visible: true;
+
+                MouseArea {
+                    id: mouseAreaAbout
+                    anchors.fill: parent;
+                    cursorShape: Qt.PointingHandCursor
+                    hoverEnabled: true
+                    Text {
+                        anchors.verticalCenter: parent.verticalCenter;
+                        anchors.horizontalCenter: parent.horizontalCenter;
+                        x: parent.x + 4;
+                        text: qsTr("About")
+                        color: Branding.styleString( Branding.SidebarTextCurrent );
+                        font.pointSize : 9
+                    }
+
+                    onClicked: debug.about()
+                }
+            }
+
+            Rectangle {
+                id: debugArea
+                height: 35
+                width: parent.width / 2;
+                anchors.right: parent.right
+                color: Branding.styleString( Branding.SidebarBackgroundCurrent );
+                visible: debug.enabled
+
+                MouseArea {
+                    id: mouseAreaDebug
+                    anchors.fill: parent;
+                    cursorShape: Qt.PointingHandCursor
+                    hoverEnabled: true
+                    Text {
+                        anchors.verticalCenter: parent.verticalCenter;
+                        anchors.horizontalCenter: parent.horizontalCenter;
+                        x: parent.x + 4;
+                        text: qsTr("Debug")
+                        color: Branding.styleString( Branding.SidebarTextCurrent );
+                        font.pointSize : 9
+                    }
+
+                    onClicked: debug.toggle()
+                }
+            }
+        }
+    }
+}
diff --git a/src/calamares/calamares.qrc b/src/calamares/calamares.qrc
index 5733ea0..8517bad 100644
--- a/src/calamares/calamares.qrc
+++ b/src/calamares/calamares.qrc
@@ -1,10 +1,10 @@
-<!DOCTYPE RCC>
-<!-- SPDX-FileCopyrightText: no
-     SPDX-License-Identifier: CC0-1.0
-     -->
-<RCC version="1.0">
-    <qresource>
-        <file alias="calamares-sidebar.qml">calamares-sidebar.qml</file>
-        <file alias="calamares-navigation.qml">calamares-navigation.qml</file>
-    </qresource>
-</RCC>
+<!DOCTYPE RCC>
+<!-- SPDX-FileCopyrightText: no
+     SPDX-License-Identifier: CC0-1.0
+     -->
+<RCC version="1.0">
+    <qresource>
+        <file alias="calamares-sidebar.qml">calamares-sidebar.qml</file>
+        <file alias="calamares-navigation.qml">calamares-navigation.qml</file>
+    </qresource>
+</RCC>
diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp
index e0491e5..af1b13a 100644
--- a/src/calamares/main.cpp
+++ b/src/calamares/main.cpp
@@ -1,154 +1,154 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org>
- *   SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#include "CalamaresApplication.h"
-
-#include "Settings.h"
-#include "utils/Dirs.h"
-#include "utils/Logger.h"
-#include "utils/Retranslator.h"
-
-// From 3rdparty/
-#include "kdsingleapplication.h"
-
-#include <KAboutData>
-#ifdef BUILD_CRASH_REPORTING
-#include <KCrash>
-#endif
-
-#include <QCommandLineParser>
-#include <QDebug>
-#include <QDir>
-
-#include <memory>
-
-/** @brief Gets debug-level from -D command-line-option
- *
- * If unset, use LOGERROR (corresponding to -D1), although
- * effectively -D2 is the lowest level you can set for
- * logging-to-the-console, and everything always gets
- * logged to the session file).
- */
-static unsigned int
-debug_level( QCommandLineParser& parser, QCommandLineOption& levelOption )
-{
-    if ( !parser.isSet( levelOption ) )
-    {
-        return Logger::LOGERROR;
-    }
-
-    bool ok = true;
-    int l = parser.value( levelOption ).toInt( &ok );
-    if ( !ok || ( l < 0 ) )
-    {
-        return Logger::LOGVERBOSE;
-    }
-    else
-    {
-        return static_cast< unsigned int >( l );  // l >= 0
-    }
-}
-
-/** @brief Handles the command-line arguments
- *
- * Sets up internals for Calamares based on command-line arguments like `-D`,
- * `-d`, etc. Returns @c true if this is a *debug* run, i.e. if the `-d`
- * command-line flag is given, @c false otherwise.
- */
-static bool
-handle_args( CalamaresApplication& a )
-{
-    QCommandLineOption debugOption( QStringList { "d", "debug" },
-                                    "Also look in current directory for configuration. Implies -D8." );
-    QCommandLineOption debugLevelOption(
-        QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8).", "level" );
-    QCommandLineOption debugTxOption( QStringList { "T", "debug-translation" },
-                                      "Also look in the current directory for translation." );
-
-    QCommandLineOption configOption(
-        QStringList { "c", "config" }, "Configuration directory to use, for testing purposes.", "config" );
-    QCommandLineOption xdgOption( QStringList { "X", "xdg-config" }, "Use XDG_{CONFIG,DATA}_DIRS as well." );
-
-    QCommandLineParser parser;
-    parser.setApplicationDescription( "Distribution-independent installer framework" );
-    parser.addHelpOption();
-    parser.addVersionOption();
-
-    parser.addOption( debugOption );
-    parser.addOption( debugLevelOption );
-    parser.addOption( configOption );
-    parser.addOption( xdgOption );
-    parser.addOption( debugTxOption );
-
-    parser.process( a );
-
-    Logger::setupLogLevel( parser.isSet( debugOption ) ? Logger::LOGVERBOSE : debug_level( parser, debugLevelOption ) );
-    if ( parser.isSet( configOption ) )
-    {
-        Calamares::setAppDataDir( QDir( parser.value( configOption ) ) );
-    }
-    if ( parser.isSet( xdgOption ) )
-    {
-        Calamares::setXdgDirs();
-    }
-    Calamares::setAllowLocalTranslation( parser.isSet( debugOption ) || parser.isSet( debugTxOption ) );
-
-    return parser.isSet( debugOption );
-}
-
-int
-main( int argc, char* argv[] )
-{
-#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
-    // Not needed in Qt6
-    QApplication::setAttribute( Qt::AA_EnableHighDpiScaling );
-#endif
-    CalamaresApplication a( argc, argv );
-
-    KAboutData aboutData( "calamares",
-                          "Calamares",
-                          a.applicationVersion(),
-                          "The universal system installer",
-                          KAboutLicense::GPL_V3,
-                          QString(),
-                          QString(),
-                          "https://calamares.io",
-                          "https://github.com/calamares/calamares/issues" );
-    KAboutData::setApplicationData( aboutData );
-    a.setApplicationDisplayName( QString() );  // To avoid putting an extra "Calamares/" into the log-file
-
-#ifdef BUILD_CRASH_REPORTING
-    KCrash::initialize();
-    // KCrash::setCrashHandler();
-    KCrash::setDrKonqiEnabled( true );
-    KCrash::setFlags( KCrash::SaferDialog | KCrash::AlwaysDirectly );
-#endif
-
-    std::unique_ptr< KDSingleApplication > possiblyUnique;
-    const bool is_debug = handle_args( a );
-    if ( !is_debug )
-    {
-        possiblyUnique = std::make_unique< KDSingleApplication >();
-        if ( !possiblyUnique->isPrimaryInstance() )
-        {
-            qCritical() << "Calamares is already running.";
-            return 87;  // EUSERS on Linux
-        }
-    }
-
-    Calamares::Settings::init( is_debug );
-    if ( !Calamares::Settings::instance() || !Calamares::Settings::instance()->isValid() )
-    {
-        qCritical() << "Calamares has invalid settings, shutting down.";
-        return 78;  // EX_CONFIG on FreeBSD
-    }
-    a.init();
-    return a.exec();
-}
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#include "CalamaresApplication.h"
+
+#include "Settings.h"
+#include "utils/Dirs.h"
+#include "utils/Logger.h"
+#include "utils/Retranslator.h"
+
+// From 3rdparty/
+#include "kdsingleapplication.h"
+
+#include <KAboutData>
+#ifdef BUILD_CRASH_REPORTING
+#include <KCrash>
+#endif
+
+#include <QCommandLineParser>
+#include <QDebug>
+#include <QDir>
+
+#include <memory>
+
+/** @brief Gets debug-level from -D command-line-option
+ *
+ * If unset, use LOGERROR (corresponding to -D1), although
+ * effectively -D2 is the lowest level you can set for
+ * logging-to-the-console, and everything always gets
+ * logged to the session file).
+ */
+static unsigned int
+debug_level( QCommandLineParser& parser, QCommandLineOption& levelOption )
+{
+    if ( !parser.isSet( levelOption ) )
+    {
+        return Logger::LOGERROR;
+    }
+
+    bool ok = true;
+    int l = parser.value( levelOption ).toInt( &ok );
+    if ( !ok || ( l < 0 ) )
+    {
+        return Logger::LOGVERBOSE;
+    }
+    else
+    {
+        return static_cast< unsigned int >( l );  // l >= 0
+    }
+}
+
+/** @brief Handles the command-line arguments
+ *
+ * Sets up internals for Calamares based on command-line arguments like `-D`,
+ * `-d`, etc. Returns @c true if this is a *debug* run, i.e. if the `-d`
+ * command-line flag is given, @c false otherwise.
+ */
+static bool
+handle_args( CalamaresApplication& a )
+{
+    QCommandLineOption debugOption( QStringList { "d", "debug" },
+                                    "Also look in current directory for configuration. Implies -D8." );
+    QCommandLineOption debugLevelOption(
+        QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8).", "level" );
+    QCommandLineOption debugTxOption( QStringList { "T", "debug-translation" },
+                                      "Also look in the current directory for translation." );
+
+    QCommandLineOption configOption(
+        QStringList { "c", "config" }, "Configuration directory to use, for testing purposes.", "config" );
+    QCommandLineOption xdgOption( QStringList { "X", "xdg-config" }, "Use XDG_{CONFIG,DATA}_DIRS as well." );
+
+    QCommandLineParser parser;
+    parser.setApplicationDescription( "Distribution-independent installer framework" );
+    parser.addHelpOption();
+    parser.addVersionOption();
+
+    parser.addOption( debugOption );
+    parser.addOption( debugLevelOption );
+    parser.addOption( configOption );
+    parser.addOption( xdgOption );
+    parser.addOption( debugTxOption );
+
+    parser.process( a );
+
+    Logger::setupLogLevel( parser.isSet( debugOption ) ? Logger::LOGVERBOSE : debug_level( parser, debugLevelOption ) );
+    if ( parser.isSet( configOption ) )
+    {
+        Calamares::setAppDataDir( QDir( parser.value( configOption ) ) );
+    }
+    if ( parser.isSet( xdgOption ) )
+    {
+        Calamares::setXdgDirs();
+    }
+    Calamares::setAllowLocalTranslation( parser.isSet( debugOption ) || parser.isSet( debugTxOption ) );
+
+    return parser.isSet( debugOption );
+}
+
+int
+main( int argc, char* argv[] )
+{
+#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
+    // Not needed in Qt6
+    QApplication::setAttribute( Qt::AA_EnableHighDpiScaling );
+#endif
+    CalamaresApplication a( argc, argv );
+
+    KAboutData aboutData( "calamares",
+                          "Calamares",
+                          a.applicationVersion(),
+                          "The universal system installer",
+                          KAboutLicense::GPL_V3,
+                          QString(),
+                          QString(),
+                          "https://calamares.io",
+                          "https://github.com/calamares/calamares/issues" );
+    KAboutData::setApplicationData( aboutData );
+    a.setApplicationDisplayName( QString() );  // To avoid putting an extra "Calamares/" into the log-file
+
+#ifdef BUILD_CRASH_REPORTING
+    KCrash::initialize();
+    // KCrash::setCrashHandler();
+    KCrash::setDrKonqiEnabled( true );
+    KCrash::setFlags( KCrash::SaferDialog | KCrash::AlwaysDirectly );
+#endif
+
+    std::unique_ptr< KDSingleApplication > possiblyUnique;
+    const bool is_debug = handle_args( a );
+    if ( !is_debug )
+    {
+        possiblyUnique = std::make_unique< KDSingleApplication >();
+        if ( !possiblyUnique->isPrimaryInstance() )
+        {
+            qCritical() << "Calamares is already running.";
+            return 87;  // EUSERS on Linux
+        }
+    }
+
+    Calamares::Settings::init( is_debug );
+    if ( !Calamares::Settings::instance() || !Calamares::Settings::instance()->isValid() )
+    {
+        qCritical() << "Calamares has invalid settings, shutting down.";
+        return 78;  // EX_CONFIG on FreeBSD
+    }
+    a.init();
+    return a.exec();
+}
diff --git a/src/calamares/progresstree/ProgressTreeDelegate.cpp b/src/calamares/progresstree/ProgressTreeDelegate.cpp
index f0a2470..5b988d6 100644
--- a/src/calamares/progresstree/ProgressTreeDelegate.cpp
+++ b/src/calamares/progresstree/ProgressTreeDelegate.cpp
@@ -1,210 +1,212 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org>
- *   SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#include "ProgressTreeDelegate.h"
-
-#include "Branding.h"
-#include "CalamaresApplication.h"
-#include "CalamaresWindow.h"
-#include "ViewManager.h"
-#include "utils/Gui.h"
-#include "utils/Logger.h"
-
-#include <QPainter>
-#include <QLocale>
-static constexpr int const item_margin = 8;
-static inline int
-item_fontsize()
-{
-    return Calamares::defaultFontSize();
-}
-static bool contains(const std::vector<QString>& vec,const QString& value){
-  for(const QString& v : vec){
-    if(v==value){
-      return true;
-    }
-  }
-  return false;
-}
-static QString getTypeOfStep(const QString& stepString){
-  std::vector<QString> baseSetting1 = {"Location","Keyboard"};
-  std::vector<QString> userSetting1 = {"Users","Packages"};
-  std::vector<QString> installSteps1 = {"Partitions","Summary","Install","Finish"};
-  std::vector<QString> baseSetting2 = {"位置","键盘"};
-  std::vector<QString> userSetting2 = {"用户","桌面"};
-  std::vector<QString> installSteps2 = {"分区","摘要","安装","结束"};
-  std::vector<QString> baseSetting3 = {"位置", "鍵盤"};
-  std::vector<QString> userSetting3 = {"使用者", "軟體包"};
-  std::vector<QString> installSteps3 = {"分割區", "總覽", "安裝", "完成"};
-      // 获取当前系统的语言设置
-    QLocale locale;
-    QLocale::Language lang = locale.language();
-
-    // 将语言枚举值转换为字符串
-    QString languageString = QLocale::languageToString(lang);
-    QLocale::Country country = locale.country();
-
-    // 将地区枚举值转换为字符串
-    QString countryString = QLocale::countryToString(country);
-  if(contains(baseSetting1,stepString)){
-    return "BaseSetting";
-  }
-  if(contains(userSetting1,stepString)){
-    return "UserSetting";
-  }
-  if(contains(installSteps1,stepString)){
-    return "InstallSetting";
-  }
-  if(contains(baseSetting2,stepString) && countryString=="China"){
-    return "基础设置";
-  }
-  if(contains(userSetting2,stepString) && countryString=="China"){
-    return "用户设置";
-  }
-  if(contains(installSteps2,stepString) && countryString=="China"){
-    return "安装设置";
-  }
-  if (contains(baseSetting3, stepString) && countryString=="Taiwan") {
-      return "基礎設定";
-  }
-  if (contains(userSetting3, stepString) && countryString=="Taiwan"){
-      return "使用者設定";
-  }
-  if (contains(installSteps3, stepString) && countryString=="Taiwan") {
-      return "安裝設定";
-  }
-  return 0;
-}
-static int getTypeOfStep(int val){
-  if(val<=1){
-    return 1;
-  }
-  else if(val<=3){
-    return 2;
-  }
-  else if(val<=8){
-    return 3;
-  }
-  else{
-    return 0;
-  }
-}
-static bool isVisable(const QString& stepString){
-  std::vector<QString> installSteps = {"鍵盤", "軟體包", "總覽", "安裝", "完成",
-                                      "Keyboard","Packages","Summary","Install","Finish",
-                                      "键盘","桌面","摘要","安装","结束"};
-  return !contains(installSteps, stepString);
-}
-static void
-paintViewStep( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index )
-{
-    QRect textRect = option.rect.adjusted( item_margin, item_margin, -item_margin, -item_margin );
-    QFont font = qApp->font();
-    font.setPointSize( item_fontsize() );
-    font.setBold( false );
-    painter->setFont( font );
-     
-    int CurrentTypeOfStep = getTypeOfStep(index.data( Calamares::ViewManager::ProgressTreeItemCurrentIndex ).toInt());
-    int TypeOfStep =  getTypeOfStep(index.row());
-    if ( CurrentTypeOfStep == TypeOfStep )
-    {
-        painter->setPen( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarTextCurrent ) );
-        QString textHighlight
-            = Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackgroundCurrent );
-        if ( textHighlight.isEmpty() )
-        {
-            painter->setBrush( CalamaresApplication::instance()->mainWindow()->palette().window() );
-        }
-        else
-        {
-            painter->setBrush( QColor( textHighlight ) );
-        }
-    }
-
-    // Draw the text at least once. If it doesn't fit, then shrink the font
-    // being used by 1 pt on each iteration, up to a maximum of maximumShrink
-    // times. On each loop, we'll have to blank out the rectangle again, so this
-    // is an expensive (in terms of drawing operations) thing to do.
-    //
-    // (The loop uses <= because the counter is incremented at the start).
-    static constexpr int const maximumShrink = 4;
-    int shrinkSteps = 0;
-    do
-    {
-     
-        shrinkSteps++;
-
-        QRectF boundingBox;
-        QString text;
-        if(index.data().toString()=="欢迎" || index.data().toString()=="Welcome"||!isVisable(index.data().toString())){
-            text = "";
-        }else{
-            text = getTypeOfStep(index.data().toString());
-            painter->fillRect( option.rect, painter->brush().color() );
-        }
-        painter->drawText(
-            textRect, Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextSingleLine, text, &boundingBox );
-
-        // The extra check here is to avoid the changing-font-size if we're not going to use
-        // it in the next iteration of the loop anyway.
-        if ( ( shrinkSteps <= maximumShrink ) && ( boundingBox.width() > textRect.width() ) )
-        {
-            font.setPointSize( item_fontsize() );
-            painter->setFont( font );
-        }
-        else
-        {
-            break;  // It fits
-        }
-    } while ( shrinkSteps <= maximumShrink );
-}
-
-QSize
-ProgressTreeDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
-{
-    if ( !index.isValid() )
-    {
-        return option.rect.size();
-    }
-
-    QFont font = qApp->font();
-
-    font.setPointSize( item_fontsize() );
-    QFontMetrics fm( font );
-    int height = fm.height();
-    height += 2 * item_margin;
-    if(index.data().toString()=="欢迎" || index.data().toString()=="Welcome"||!isVisable(index.data().toString())){
-        return QSize( 0, 0 );
-    }else{
-        return QSize( (Calamares::windowMinimumWidth*0.9)/3, height*2 );
-    }
-    
-}
-
-void
-ProgressTreeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
-{
-    QStyleOptionViewItem opt = option;
-
-    painter->save();
-
-    initStyleOption( &opt, index );
-    opt.text.clear();
-
-    painter->setBrush(
-        QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) ) );
-    painter->setPen( QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarText ) ) );
-    if(index.data().toString()=="欢迎" || index.data().toString()=="Welcome"){
-    }else{
-            paintViewStep( painter, opt, index );
-    }
-
-    painter->restore();
-}
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#include "ProgressTreeDelegate.h"
+
+#include "Branding.h"
+#include "CalamaresApplication.h"
+#include "CalamaresWindow.h"
+#include "ViewManager.h"
+#include "utils/Gui.h"
+#include "utils/Logger.h"
+
+#include <QPainter>
+#include <QLocale>
+static constexpr int const item_margin = 8;
+static inline int
+item_fontsize()
+{
+    return Calamares::defaultFontSize();
+}
+static bool contains(const std::vector<QString>& vec,const QString& value){
+  for(const QString& v : vec){
+    if(v==value){
+      return true;
+    }
+  }
+  return false;
+}
+static QString getTypeOfStep(const QString& stepString){
+  std::vector<QString> baseSetting1 = {"Location","Keyboard"};
+  std::vector<QString> userSetting1 = {"Users","Packages"};
+  std::vector<QString> installSteps1 = {"Partitions","Summary","Install","Finish"};
+  std::vector<QString> baseSetting2 = {"位置","键盘"};
+  std::vector<QString> userSetting2 = {"用户","桌面"};
+  std::vector<QString> installSteps2 = {"分区","摘要","安装","结束"};
+  std::vector<QString> baseSetting3 = {"位置", "鍵盤"};
+  std::vector<QString> userSetting3 = {"使用者", "軟體包"};
+  std::vector<QString> installSteps3 = {"分割區", "總覽", "安裝", "完成"};
+      // 获取当前系统的语言设置
+    QLocale locale;
+    QLocale::Language lang = locale.language();
+
+    // 将语言枚举值转换为字符串
+    QString languageString = QLocale::languageToString(lang);
+    QLocale::Country country = locale.country();
+
+    // 将地区枚举值转换为字符串
+    QString countryString = QLocale::countryToString(country);
+    // 输出当前语言
+  if(contains(baseSetting1,stepString)){
+    return "BaseSetting";
+  }
+  if(contains(userSetting1,stepString)){
+    return "UserSetting";
+  }
+  if(contains(installSteps1,stepString)){
+    return "InstallSetting";
+  }
+  if(contains(baseSetting2,stepString) && countryString=="China"){
+    return "基础设置";
+  }
+  if(contains(userSetting2,stepString) && countryString=="China"){
+    return "用户设置";
+  }
+  if(contains(installSteps2,stepString) && countryString=="China"){
+    return "安装设置";
+  }
+  if (contains(baseSetting3, stepString) && countryString=="Taiwan") {
+      return "基礎設定";
+  }
+  if (contains(userSetting3, stepString) && countryString=="Taiwan"){
+      return "使用者設定";
+  }
+  if (contains(installSteps3, stepString) && countryString=="Taiwan") {
+      return "安裝設定";
+  }
+  return 0;
+}
+static int getTypeOfStep(int val){
+  if(val<=1){
+    return 1;
+  }
+  else if(val<=3){
+    return 2;
+  }
+  else if(val<=8){
+    return 3;
+  }
+  else{
+    return 0;
+  }
+}
+static bool isVisable(const QString& stepString){
+  std::vector<QString> installSteps = {"鍵盤", "軟體包", "總覽", "安裝", "完成",
+                                      "Keyboard","Packages","Summary","Install","Finish",
+                                      "键盘","桌面","摘要","安装","结束"};
+  return !contains(installSteps, stepString);
+}
+static void
+paintViewStep( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index )
+{
+    QRect textRect = option.rect.adjusted( item_margin, item_margin, -item_margin, -item_margin );
+    QFont font = qApp->font();
+    font.setPointSize( item_fontsize() );
+    font.setBold( false );
+    painter->setFont( font );
+     
+    int CurrentTypeOfStep = getTypeOfStep(index.data( Calamares::ViewManager::ProgressTreeItemCurrentIndex ).toInt());
+    int TypeOfStep =  getTypeOfStep(index.row());
+    if ( CurrentTypeOfStep == TypeOfStep )
+    {
+        painter->setPen( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarTextCurrent ) );
+        QString textHighlight
+            = Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackgroundCurrent );
+        if ( textHighlight.isEmpty() )
+        {
+            painter->setBrush( CalamaresApplication::instance()->mainWindow()->palette().window() );
+        }
+        else
+        {
+            painter->setBrush( QColor( textHighlight ) );
+        }
+    }
+
+    // Draw the text at least once. If it doesn't fit, then shrink the font
+    // being used by 1 pt on each iteration, up to a maximum of maximumShrink
+    // times. On each loop, we'll have to blank out the rectangle again, so this
+    // is an expensive (in terms of drawing operations) thing to do.
+    //
+    // (The loop uses <= because the counter is incremented at the start).
+    static constexpr int const maximumShrink = 4;
+    int shrinkSteps = 0;
+    do
+    {
+     
+        shrinkSteps++;
+
+        QRectF boundingBox;
+        QString text;
+        if(index.data().toString()=="欢迎" || index.data().toString()=="Welcome"||!isVisable(index.data().toString())){
+            text = "";
+        }else{
+            text = getTypeOfStep(index.data().toString());
+            painter->fillRect( option.rect, painter->brush().color() );
+        }
+        painter->drawText(
+            textRect, Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextSingleLine, text, &boundingBox );
+
+        // The extra check here is to avoid the changing-font-size if we're not going to use
+        // it in the next iteration of the loop anyway.
+        if ( ( shrinkSteps <= maximumShrink ) && ( boundingBox.width() > textRect.width() ) )
+        {
+            font.setPointSize( item_fontsize() );
+            painter->setFont( font );
+        }
+        else
+        {
+            break;  // It fits
+        }
+    } while ( shrinkSteps <= maximumShrink );
+}
+
+QSize
+ProgressTreeDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
+{
+    if ( !index.isValid() )
+    {
+        return option.rect.size();
+    }
+
+    QFont font = qApp->font();
+
+    font.setPointSize( item_fontsize() );
+    QFontMetrics fm( font );
+    int height = fm.height();
+    height += 2 * item_margin;
+    if(index.data().toString()=="欢迎" || index.data().toString()=="Welcome"||!isVisable(index.data().toString())){
+        return QSize( 0, 0 );
+    }else{
+        return QSize( (Calamares::windowMinimumWidth*0.9)/3, height*2 );
+    }
+    
+}
+
+void
+ProgressTreeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
+{
+    QStyleOptionViewItem opt = option;
+
+    painter->save();
+
+    initStyleOption( &opt, index );
+    opt.text.clear();
+
+    painter->setBrush(
+        QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) ) );
+    painter->setPen( QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarText ) ) );
+    if(index.data().toString()=="欢迎" || index.data().toString()=="Welcome"){
+
+    }else{
+            paintViewStep( painter, opt, index );
+    }
+
+    painter->restore();
+}
diff --git a/src/calamares/progresstree/ProgressTreeDelegate.h b/src/calamares/progresstree/ProgressTreeDelegate.h
index d5a5abc..af4fef9 100644
--- a/src/calamares/progresstree/ProgressTreeDelegate.h
+++ b/src/calamares/progresstree/ProgressTreeDelegate.h
@@ -1,31 +1,31 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org>
- *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#ifndef PROGRESSTREEDELEGATE_H
-#define PROGRESSTREEDELEGATE_H
-
-#include <QStyledItemDelegate>
-
-/**
- * @brief The ProgressTreeDelegate class customizes the look and feel of the
- * ProgressTreeView elements.
- * @see ProgressTreeView
- */
-class ProgressTreeDelegate : public QStyledItemDelegate
-{
-public:
-    using QStyledItemDelegate::QStyledItemDelegate;
-
-protected:
-    QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const override;
-    void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override;
-};
-
-#endif  // PROGRESSTREEDELEGATE_H
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#ifndef PROGRESSTREEDELEGATE_H
+#define PROGRESSTREEDELEGATE_H
+
+#include <QStyledItemDelegate>
+
+/**
+ * @brief The ProgressTreeDelegate class customizes the look and feel of the
+ * ProgressTreeView elements.
+ * @see ProgressTreeView
+ */
+class ProgressTreeDelegate : public QStyledItemDelegate
+{
+public:
+    using QStyledItemDelegate::QStyledItemDelegate;
+
+protected:
+    QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const override;
+    void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override;
+};
+
+#endif  // PROGRESSTREEDELEGATE_H
diff --git a/src/calamares/progresstree/ProgressTreeView.cpp b/src/calamares/progresstree/ProgressTreeView.cpp
index cdbafeb..5ea761c 100644
--- a/src/calamares/progresstree/ProgressTreeView.cpp
+++ b/src/calamares/progresstree/ProgressTreeView.cpp
@@ -1,79 +1,75 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#include "ProgressTreeView.h"
-
-#include "ProgressTreeDelegate.h"
-
-#include "Branding.h"
-#include "ViewManager.h"
-#include "utils/Logger.h"
-
-ProgressTreeView::ProgressTreeView( QWidget* parent )
-    : QListView( parent )
-{
-    this->setObjectName( "sidebarMenuApp" );
-    setFrameShape( QFrame::NoFrame );
-    setContentsMargins( 0, 0, 0, 0 );
-
-    setFlow(QListView::LeftToRight);//
-    setSelectionMode( QAbstractItemView::NoSelection );
-    setDragDropMode( QAbstractItemView::NoDragDrop );
-    setAcceptDrops( false );
-//    setVisible( false);
-
-    setItemDelegate( new ProgressTreeDelegate( this ) );
-
-    QPalette plt = palette();
-    plt.setColor( QPalette::Base,
-                  Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) );
-    setPalette( plt );
-//    connect(parent, SIGNAL(currentStepChanged(int)), this, SLOT(updateVisibility(int)));
-    connect( Calamares::ViewManager::instance(),
-         &Calamares::ViewManager::currentStepChanged,
-         this,
-         &ProgressTreeView::updateVisibility,
-         Qt::UniqueConnection );
-//    connect(viewManager, &ViewManager::currentStepChanged, this, &ProgressTreeView::updateVisibility);
-}
-
-
-ProgressTreeView::~ProgressTreeView() {}
-
-
-
-void
-ProgressTreeView::setModel( QAbstractItemModel* model )
-{
-    if ( ProgressTreeView::model() )
-    {
-        return;
-    }
-
-    QListView::setModel( model );
-
-    connect( Calamares::ViewManager::instance(),
-             &Calamares::ViewManager::currentStepChanged,
-             this,
-             &ProgressTreeView::update,
-             Qt::UniqueConnection );
-}
-
-void
-ProgressTreeView::update()
-{
-    viewport()->update();
-}
-
-void
-ProgressTreeView::updateVisibility(int currentStep)
-{
-    // 在第一个步骤隐藏，其他步骤显示
-    this->setVisible(currentStep > 0);
-}
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#include "ProgressTreeView.h"
+
+#include "ProgressTreeDelegate.h"
+
+#include "Branding.h"
+#include "ViewManager.h"
+#include "utils/Logger.h"
+
+ProgressTreeView::ProgressTreeView( QWidget* parent )
+    : QListView( parent )
+{
+    this->setObjectName( "sidebarMenuApp" );
+    setFrameShape( QFrame::NoFrame );
+    setContentsMargins( 0, 0, 0, 0 );
+
+    setFlow(QListView::LeftToRight);
+    setSelectionMode( QAbstractItemView::NoSelection );
+    setDragDropMode( QAbstractItemView::NoDragDrop );
+    setAcceptDrops( false );
+
+    setItemDelegate( new ProgressTreeDelegate( this ) );
+
+    QPalette plt = palette();
+    plt.setColor( QPalette::Base,
+                  Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) );
+    setPalette( plt );
+    connect( Calamares::ViewManager::instance(),
+         &Calamares::ViewManager::currentStepChanged,
+         this,
+         &ProgressTreeView::updateVisibility,
+         Qt::UniqueConnection );
+}
+
+
+ProgressTreeView::~ProgressTreeView() {}
+
+
+
+void
+ProgressTreeView::setModel( QAbstractItemModel* model )
+{
+    if ( ProgressTreeView::model() )
+    {
+        return;
+    }
+
+    QListView::setModel( model );
+
+    connect( Calamares::ViewManager::instance(),
+             &Calamares::ViewManager::currentStepChanged,
+             this,
+             &ProgressTreeView::update,
+             Qt::UniqueConnection );
+}
+
+void
+ProgressTreeView::update()
+{
+    viewport()->update();
+}
+
+void
+ProgressTreeView::updateVisibility(int currentStep)
+{
+    this->setVisible(currentStep > 0);
+}
diff --git a/src/calamares/progresstree/ProgressTreeView.h b/src/calamares/progresstree/ProgressTreeView.h
index 11491e4..b02b9ce 100644
--- a/src/calamares/progresstree/ProgressTreeView.h
+++ b/src/calamares/progresstree/ProgressTreeView.h
@@ -1,41 +1,41 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org>
- *   SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-#ifndef PROGRESSTREEVIEW_H
-#define PROGRESSTREEVIEW_H
-
-#include <QListView>
-#include "utils/Logger.h"
-
-/**
- * @brief Displays progress through the list of (visible) steps
- *
- * The ProgressTreeView class is a modified QListView which displays the
- * available view steps and the user's progress through them.
- * Since Calamares doesn't support "sub steps", it isn't really a tree.
- */
-class ProgressTreeView : public QListView
-{
-    Q_OBJECT
-public:
-    explicit ProgressTreeView( QWidget* parent = nullptr );
-    ~ProgressTreeView() override;
-
-    /**
-     * @brief setModel assigns a model to this view.
-     */
-    void setModel( QAbstractItemModel* model ) override;
-
-public Q_SLOTS:
-    void update();
-    void updateVisibility(int currentStep);
-};
-
-#endif  // PROGRESSTREEVIEW_H
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org>
+ *   SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+#ifndef PROGRESSTREEVIEW_H
+#define PROGRESSTREEVIEW_H
+
+#include <QListView>
+#include "utils/Logger.h"
+
+/**
+ * @brief Displays progress through the list of (visible) steps
+ *
+ * The ProgressTreeView class is a modified QListView which displays the
+ * available view steps and the user's progress through them.
+ * Since Calamares doesn't support "sub steps", it isn't really a tree.
+ */
+class ProgressTreeView : public QListView
+{
+    Q_OBJECT
+public:
+    explicit ProgressTreeView( QWidget* parent = nullptr );
+    ~ProgressTreeView() override;
+
+    /**
+     * @brief setModel assigns a model to this view.
+     */
+    void setModel( QAbstractItemModel* model ) override;
+
+public Q_SLOTS:
+    void update();
+    void updateVisibility(int currentStep);
+};
+
+#endif  // PROGRESSTREEVIEW_H
diff --git a/src/calamares/test_conf.cpp b/src/calamares/test_conf.cpp
index 73b19aa..81f4e36 100644
--- a/src/calamares/test_conf.cpp
+++ b/src/calamares/test_conf.cpp
@@ -1,109 +1,109 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-/**
- * This is a test-application that just checks the YAML config-file
- * shipped with each module for correctness -- well, for parseability.
- */
-
-#include "utils/Yaml.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <iostream>
-
-#include <QByteArray>
-#include <QFile>
-
-using std::cerr;
-
-static const char usage[] = "Usage: test_conf [-v] [-b] <file> ...\n";
-
-int
-main( int argc, char** argv )
-{
-    bool verbose = false;
-    bool bytes = false;
-
-    int opt;
-    while ( ( opt = getopt( argc, argv, "vb" ) ) != -1 )
-    {
-        switch ( opt )
-        {
-        case 'v':
-            verbose = true;
-            break;
-        case 'b':
-            bytes = true;
-            break;
-        default: /* '?' */
-            cerr << usage;
-            return 1;
-        }
-    }
-
-    if ( optind >= argc )
-    {
-        cerr << usage;
-        return 1;
-    }
-
-    const char* filename = argv[ optind ];
-    try
-    {
-        YAML::Node doc;
-        if ( bytes )
-        {
-            QFile f( filename );
-            if ( f.open( QFile::ReadOnly | QFile::Text ) )
-            {
-                doc = YAML::Load( f.readAll().constData() );
-            }
-        }
-        else
-        {
-            doc = YAML::LoadFile( filename );
-        }
-
-        if ( doc.IsNull() )
-        {
-            // Special case: empty config files are valid,
-            // but aren't a map. For the example configs,
-            // this is still an error.
-            cerr << "WARNING:" << filename << '\n';
-            cerr << "WARNING: empty YAML\n";
-            return 1;
-        }
-
-        if ( !doc.IsMap() )
-        {
-            cerr << "WARNING:" << filename << '\n';
-            cerr << "WARNING: not-a-YAML-map (type=" << doc.Type() << ")\n";
-            return 1;
-        }
-
-        if ( verbose )
-        {
-            cerr << "Keys:\n";
-            for ( auto i = doc.begin(); i != doc.end(); ++i )
-            {
-                cerr << i->first.as< std::string >() << '\n';
-            }
-        }
-    }
-    catch ( YAML::Exception& e )
-    {
-        cerr << "WARNING:" << filename << '\n';
-        cerr << "WARNING: YAML parser error " << e.what() << '\n';
-        return 1;
-    }
-
-    return 0;
-}
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+/**
+ * This is a test-application that just checks the YAML config-file
+ * shipped with each module for correctness -- well, for parseability.
+ */
+
+#include "utils/Yaml.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <iostream>
+
+#include <QByteArray>
+#include <QFile>
+
+using std::cerr;
+
+static const char usage[] = "Usage: test_conf [-v] [-b] <file> ...\n";
+
+int
+main( int argc, char** argv )
+{
+    bool verbose = false;
+    bool bytes = false;
+
+    int opt;
+    while ( ( opt = getopt( argc, argv, "vb" ) ) != -1 )
+    {
+        switch ( opt )
+        {
+        case 'v':
+            verbose = true;
+            break;
+        case 'b':
+            bytes = true;
+            break;
+        default: /* '?' */
+            cerr << usage;
+            return 1;
+        }
+    }
+
+    if ( optind >= argc )
+    {
+        cerr << usage;
+        return 1;
+    }
+
+    const char* filename = argv[ optind ];
+    try
+    {
+        YAML::Node doc;
+        if ( bytes )
+        {
+            QFile f( filename );
+            if ( f.open( QFile::ReadOnly | QFile::Text ) )
+            {
+                doc = YAML::Load( f.readAll().constData() );
+            }
+        }
+        else
+        {
+            doc = YAML::LoadFile( filename );
+        }
+
+        if ( doc.IsNull() )
+        {
+            // Special case: empty config files are valid,
+            // but aren't a map. For the example configs,
+            // this is still an error.
+            cerr << "WARNING:" << filename << '\n';
+            cerr << "WARNING: empty YAML\n";
+            return 1;
+        }
+
+        if ( !doc.IsMap() )
+        {
+            cerr << "WARNING:" << filename << '\n';
+            cerr << "WARNING: not-a-YAML-map (type=" << doc.Type() << ")\n";
+            return 1;
+        }
+
+        if ( verbose )
+        {
+            cerr << "Keys:\n";
+            for ( auto i = doc.begin(); i != doc.end(); ++i )
+            {
+                cerr << i->first.as< std::string >() << '\n';
+            }
+        }
+    }
+    catch ( YAML::Exception& e )
+    {
+        cerr << "WARNING:" << filename << '\n';
+        cerr << "WARNING: YAML parser error " << e.what() << '\n';
+        return 1;
+    }
+
+    return 0;
+}
diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp
index c25bc51..7ab15c9 100644
--- a/src/calamares/testmain.cpp
+++ b/src/calamares/testmain.cpp
@@ -1,572 +1,572 @@
-/* === This file is part of Calamares - <https://calamares.io> ===
- *
- *   SPDX-FileCopyrightText: 2018 Adriaan de Groot <groot@kde.org>
- *   SPDX-License-Identifier: GPL-3.0-or-later
- *
- *   Calamares is Free Software: see the License-Identifier above.
- *
- */
-
-/*
- * This executable loads and runs a Calamares Python module
- * within a C++ application, in order to test the different
- * bindings.
- */
-
-#include "Branding.h"
-#include "CppJob.h"
-#include "GlobalStorage.h"
-#include "Job.h"
-#include "JobQueue.h"
-#include "Settings.h"
-#include "ViewManager.h"
-#include "modulesystem/Module.h"
-#include "modulesystem/ModuleManager.h"
-#include "modulesystem/ViewModule.h"
-#include "utils/Logger.h"
-#include "utils/Retranslator.h"
-#include "utils/System.h"
-#include "utils/Yaml.h"
-#include "viewpages/ExecutionViewStep.h"
-
-// Optional features of Calamares
-// - Python support with pybind11
-// - Python support with older Boost implementation
-// - QML support
-#ifdef WITH_PYTHON
-#ifdef WITH_PYBIND11
-#include "python/PythonJob.h"
-#else
-#include "PythonJob.h"
-#endif
-#endif
-#ifdef WITH_QML
-#include "utils/Qml.h"
-#endif
-
-#include <QApplication>
-#include <QCommandLineOption>
-#include <QCommandLineParser>
-#include <QCoreApplication>
-#include <QFileInfo>
-#include <QLabel>
-#include <QMainWindow>
-#include <QThread>
-#include <QTimer>
-
-#include <memory>
-
-struct ModuleConfig
-{
-    QString moduleName() const { return m_module; }
-    QString configFile() const { return m_jobConfig; }
-    QString language() const { return m_language; }
-    QString globalConfigFile() const { return m_globalConfig; }
-
-    QString m_module;
-    QString m_jobConfig;
-    QString m_globalConfig;
-    QString m_settingsConfig;
-    QString m_language;
-    QString m_branding;
-    bool m_ui;
-    bool m_pythonInjection;
-};
-
-static ModuleConfig
-handle_args( QCoreApplication& a )
-{
-    QCommandLineOption debugLevelOption(
-        QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8), ignored.", "level" );
-    QCommandLineOption settingsOption( { QStringLiteral( "S" ), QStringLiteral( "settings" ) },
-                                       QStringLiteral( "Settings.conf document" ),
-                                       QString( "settings.conf" ) );
-    QCommandLineOption globalOption( { QStringLiteral( "g" ), QStringLiteral( "global" ) },
-                                     QStringLiteral( "Global storage settings document" ),
-                                     "global.yaml" );
-    QCommandLineOption jobOption(
-        { QStringLiteral( "j" ), QStringLiteral( "job" ) }, QStringLiteral( "Job settings document" ), "job.yaml" );
-    QCommandLineOption langOption( { QStringLiteral( "l" ), QStringLiteral( "language" ) },
-                                   QStringLiteral( "Language (global)" ),
-                                   "languagecode" );
-    QCommandLineOption brandOption( { QStringLiteral( "b" ), QStringLiteral( "branding" ) },
-                                    QStringLiteral( "Branding directory" ),
-                                    "path/to/branding.desc",
-                                    "src/branding/default/branding.desc" );
-    QCommandLineOption uiOption( { QStringLiteral( "U" ), QStringLiteral( "ui" ) }, QStringLiteral( "Enable UI" ) );
-    QCommandLineOption slideshowOption( { QStringLiteral( "s" ), QStringLiteral( "slideshow" ) },
-                                        QStringLiteral( "Run slideshow module" ) );
-    QCommandLineParser parser;
-    parser.setApplicationDescription( "Calamares module tester" );
-    parser.addHelpOption();
-    parser.addVersionOption();
-
-    parser.addOption( debugLevelOption );
-    parser.addOption( settingsOption );
-    parser.addOption( globalOption );
-    parser.addOption( jobOption );
-    parser.addOption( langOption );
-    parser.addOption( brandOption );
-    parser.addOption( uiOption );
-    parser.addOption( slideshowOption );
-#ifdef WITH_PYTHON
-    QCommandLineOption pythonOption( { QStringLiteral( "P" ), QStringLiteral( "no-injected-python" ) },
-                                     QStringLiteral( "Do not disable potentially-harmful Python commands" ) );
-    parser.addOption( pythonOption );
-#endif
-
-    parser.addPositionalArgument( "module", "Path or name of module to run." );
-    parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]" );
-
-    parser.process( a );
-
-    const QStringList args = parser.positionalArguments();
-    if ( args.isEmpty() && !parser.isSet( slideshowOption ) )
-    {
-        cError() << "Missing <module> path.\n";
-        parser.showHelp();
-    }
-    else if ( args.size() > 2 )
-    {
-        cError() << "More than one <module> path.\n";
-        parser.showHelp();
-    }
-    else
-    {
-        QString jobSettings( parser.value( jobOption ) );
-        if ( jobSettings.isEmpty() && ( args.size() == 2 ) )
-        {
-            jobSettings = args.at( 1 );
-        }
-
-        bool pythonInjection = true;
-#ifdef WITH_PYTHON
-        if ( parser.isSet( pythonOption ) )
-        {
-            pythonInjection = false;
-        }
-#endif
-        return ModuleConfig { parser.isSet( slideshowOption ) ? QStringLiteral( "-" ) : args.first(),
-                              jobSettings,
-                              parser.value( globalOption ),
-                              parser.value( settingsOption ),
-                              parser.value( langOption ),
-                              parser.value( brandOption ),
-                              parser.isSet( slideshowOption ) || parser.isSet( uiOption ),
-                              pythonInjection };
-    }
-}
-
-/** @brief Bogus Job for --slideshow option
- *
- * Generally one would use DummyCppJob for this kind of dummy
- * job, but that class lives in a module so isn't available
- * in this test application.
- *
- * This bogus job just sleeps for 3.
- */
-class ExecViewJob : public Calamares::CppJob
-{
-public:
-    explicit ExecViewJob( const QString& name, unsigned long t = 3 )
-        : m_name( name )
-        , m_delay( t )
-    {
-    }
-    ~ExecViewJob() override;
-
-    QString prettyName() const override { return m_name; }
-
-    Calamares::JobResult exec() override
-    {
-        QThread::sleep( m_delay );
-        return Calamares::JobResult::ok();
-    }
-
-    void setConfigurationMap( const QVariantMap& ) override {}
-
-private:
-    QString m_name;
-    unsigned long m_delay;
-};
-
-ExecViewJob::~ExecViewJob() {}
-
-/** @brief Bogus module for --slideshow option
- *
- * Normally the slideshow -- displayed by ExecutionViewStep -- is not
- * associated with any particular module in the Calamares configuration.
- * It is added internally by the module manager. For the module-loader
- * testing application, we need something that pretends to be the
- * module for the ExecutionViewStep.
- */
-class ExecViewModule : public Calamares::Module
-{
-public:
-    ExecViewModule();
-    ~ExecViewModule() override;
-
-    void loadSelf() override;
-
-    virtual Calamares::ModuleSystem::Type type() const override;
-    virtual Calamares::ModuleSystem::Interface interface() const override;
-
-    virtual Calamares::JobList jobs() const override;
-
-protected:
-    void initFrom( const Calamares::ModuleSystem::Descriptor& ) override;
-};
-
-ExecViewModule::ExecViewModule()
-    : Calamares::Module()
-{
-    // Normally the module-loader gives the module an instance key
-    // (out of the settings file, or the descriptor of the module).
-    // We don't have one, so build one -- this gives us "execView@execView".
-    QVariantMap m;
-    const QString execView = QStringLiteral( "execView" );
-    m.insert( "name", execView );
-    Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, execView ), execView );
-}
-
-ExecViewModule::~ExecViewModule() {}
-
-void
-ExecViewModule::initFrom( const Calamares::ModuleSystem::Descriptor& )
-{
-}
-
-void
-ExecViewModule::loadSelf()
-{
-    auto* viewStep = new Calamares::ExecutionViewStep();
-    viewStep->setModuleInstanceKey( instanceKey() );
-    viewStep->setConfigurationMap( m_configurationMap );
-    viewStep->appendJobModuleInstanceKey( instanceKey() );
-    Calamares::ViewManager::instance()->addViewStep( viewStep );
-    m_loaded = true;
-}
-
-Calamares::Module::Type
-ExecViewModule::type() const
-{
-    return Module::Type::View;
-}
-
-Calamares::Module::Interface
-ExecViewModule::interface() const
-{
-    return Module::Interface::QtPlugin;
-}
-
-Calamares::JobList
-ExecViewModule::jobs() const
-{
-    Calamares::JobList l;
-    const auto* gs = Calamares::JobQueue::instance()->globalStorage();
-    if ( gs && gs->contains( "jobs" ) )
-    {
-        QVariantList joblist = gs->value( "jobs" ).toList();
-        for ( const auto& jd : joblist )
-        {
-            QVariantMap jobdescription = jd.toMap();
-            if ( jobdescription.contains( "name" ) && jobdescription.contains( "delay" ) )
-            {
-                l.append( Calamares::job_ptr( new ExecViewJob( jobdescription.value( "name" ).toString(),
-                                                               jobdescription.value( "delay" ).toULongLong() ) ) );
-            }
-        }
-    }
-    if ( l.count() > 0 )
-    {
-        return l;
-    }
-
-    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step 1" ) ) ) );
-    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step two" ) ) ) );
-    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "locking mutexes" ), 20 ) ) );
-    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "unlocking mutexes" ), 1 ) ) );
-    for ( const QString& s : QStringList { "Harder", "Better", "Faster", "Stronger" } )
-    {
-        l.append( Calamares::job_ptr( new ExecViewJob( s, 0 ) ) );
-    }
-    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "cleaning up" ), 20 ) ) );
-    return l;
-}
-
-static Calamares::Module*
-load_module( const ModuleConfig& moduleConfig )
-{
-    QString moduleName = moduleConfig.moduleName();
-    if ( moduleName == "-" )
-    {
-        return new ExecViewModule;
-    }
-
-    QFileInfo fi;  // This is kept around to hold the path of the module descriptor
-
-    bool ok = false;
-    QVariantMap descriptor;
-
-    QStringList moduleDirectories { "./", "src/modules/", "modules/", CMAKE_INSTALL_FULL_LIBDIR "/calamares/modules/" };
-    for ( const QString& prefix : qAsConst( moduleDirectories ) )
-    {
-        // Could be a complete path, eg. src/modules/dummycpp/module.desc
-        fi = QFileInfo( prefix + moduleName );
-        if ( fi.exists() && fi.isFile() )
-        {
-            descriptor = Calamares::YAML::load( fi, &ok );
-        }
-        if ( ok )
-        {
-            break;
-        }
-
-        // Could be a path without module.desc
-        fi = QFileInfo( prefix + moduleName );
-        if ( fi.exists() && fi.isDir() )
-        {
-            fi = QFileInfo( prefix + moduleName + "/module.desc" );
-            if ( fi.exists() && fi.isFile() )
-            {
-                descriptor = Calamares::YAML::load( fi, &ok );
-            }
-            if ( ok )
-            {
-                break;
-            }
-            else
-            {
-                if ( !fi.exists() )
-                {
-                    cDebug() << "Expected a descriptor file" << fi.path();
-                }
-                else
-                {
-                    cDebug() << "Read descriptor" << fi.path() << "and it was empty.";
-                }
-            }
-        }
-    }
-
-    if ( !ok )
-    {
-        cWarning() << "No suitable module descriptor found in" << Logger::DebugList( moduleDirectories );
-        return nullptr;
-    }
-
-    QString name = descriptor.value( "name" ).toString();
-    if ( name.isEmpty() )
-    {
-        cWarning() << "No name found in module descriptor" << fi.absoluteFilePath();
-        return nullptr;
-    }
-
-    QString moduleDirectory = fi.absolutePath();
-    QString configFile( moduleConfig.configFile().isEmpty() ? moduleDirectory + '/' + name + ".conf"
-                                                            : moduleConfig.configFile() );
-
-    cDebug() << Logger::SubEntry << "Module" << moduleName << "job-configuration:" << configFile;
-
-    Calamares::Module* module = Calamares::moduleFromDescriptor(
-        Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor, fi.absoluteFilePath() ),
-        name,
-        configFile,
-        moduleDirectory );
-
-    return module;
-}
-
-static bool
-is_ui_option( const char* s )
-{
-    return !qstrcmp( s, "--ui" ) || !qstrcmp( s, "-U" );
-}
-
-static bool
-is_slideshow_option( const char* s )
-{
-    return !qstrcmp( s, "--slideshow" ) || !qstrcmp( s, "-s" );
-}
-
-/** @brief Create the right kind of QApplication
- *
- * Does primitive parsing of argv[] to find the --ui option and returns
- * a UI-enabled application if it does.
- *
- * @p argc must be a reference (to main's argc) because the QCoreApplication
- * constructors take a reference as well, and that would otherwise be a
- * reference to a temporary.
- */
-QCoreApplication*
-createApplication( int& argc, char* argv[] )
-{
-    for ( int i = 1; i < argc; ++i )
-    {
-        if ( is_slideshow_option( argv[ i ] ) || is_ui_option( argv[ i ] ) )
-        {
-            auto* aw = new QApplication( argc, argv );
-            aw->setQuitOnLastWindowClosed( true );
-            return aw;
-        }
-    }
-    return new QCoreApplication( argc, argv );
-}
-
-#ifdef WITH_PYTHON
-static const char pythonPreScript[] = R"%(
-# This is Python code executed by Python modules *before* the
-# script file (e.g. main.py) is executed.
-#
-# Calls to suprocess methods that execute something are
-# suppressed and logged -- scripts should really be using libcalamares
-# methods instead.
-_calamares_subprocess = __import__("subprocess", globals(), locals(), [], 0)
-import sys
-import libcalamares
-class fake_subprocess(object):
-    PIPE = object()
-    STDOUT = object()
-    STDERR = object()
-    class CompletedProcess(object):
-        returncode = 0
-        stdout = ""
-        stderr = ""
-    @staticmethod
-    def call(*args, **kwargs):
-        libcalamares.utils.debug("subprocess.call(%r,%r) X ignored" % (args, kwargs))
-        return 0
-    @staticmethod
-    def check_call(*args, **kwargs):
-        libcalamares.utils.debug("subprocess.check_call(%r,%r) X ignored" % (args, kwargs))
-        return 0
-    # This is a 3.5-and-later method, is supposed to return a CompletedProcess
-    @staticmethod
-    def run(*args, **kwargs):
-        libcalamares.utils.debug("subprocess.run(%r,%r) X ignored" % (args, kwargs))
-        return fake_subprocess.CompletedProcess()
-for attr in ("CalledProcessError",):
-    setattr(fake_subprocess,attr,getattr(_calamares_subprocess,attr))
-sys.modules["subprocess"] = fake_subprocess
-libcalamares.utils.debug('pre-script for testing purposes injected')
-
-)%";
-#endif
-
-int
-main( int argc, char* argv[] )
-{
-    QCoreApplication* application = createApplication( argc, argv );
-
-    Logger::setupLogLevel( Logger::LOGVERBOSE );
-
-    ModuleConfig module = handle_args( *application );
-    if ( module.moduleName().isEmpty() )
-    {
-        return 1;
-    }
-
-    std::unique_ptr< Calamares::Settings > settings_p( Calamares::Settings::init( module.m_settingsConfig ) );
-    std::unique_ptr< Calamares::JobQueue > jobqueue_p( new Calamares::JobQueue( nullptr ) );
-    std::unique_ptr< Calamares::System > system_p( new Calamares::System( settings_p->doChroot() ) );
-
-    QMainWindow* mainWindow = nullptr;
-
-    auto* gs = jobqueue_p->globalStorage();
-    if ( !module.globalConfigFile().isEmpty() )
-    {
-        gs->loadYaml( module.globalConfigFile() );
-    }
-    if ( !module.language().isEmpty() )
-    {
-        QVariantMap vm;
-        vm.insert( "LANG", module.language() );
-        gs->insert( "localeConf", vm );
-    }
-
-#ifdef WITH_PYTHON
-    if ( module.m_pythonInjection )
-    {
-#ifdef WITH_PYBIND11
-        Calamares::Python::Job::setInjectedPreScript( pythonPreScript );
-#else
-        // Old Boost approach
-        Calamares::PythonJob::setInjectedPreScript( pythonPreScript );
-#endif
-    }
-#endif
-#ifdef WITH_QML
-    Calamares::initQmlModulesDir();  // don't care if failed
-#endif
-
-    cDebug() << "Calamares module-loader testing" << module.moduleName();
-    Calamares::Module* m = load_module( module );
-    if ( !m )
-    {
-        cError() << "Could not load module" << module.moduleName();
-        return 1;
-    }
-
-    cDebug() << Logger::SubEntry << "got" << m->name() << m->typeString() << m->interfaceString();
-    if ( m->type() == Calamares::Module::Type::View )
-    {
-        // If we forgot the --ui, any ViewModule will core dump as it
-        // tries to create the widget **which won't be used anyway**.
-        //
-        // To avoid that crash, re-create the QApplication, now with GUI
-        if ( !qobject_cast< QApplication* >( application ) )
-        {
-            auto* replace_app = new QApplication( argc, argv );
-            replace_app->setQuitOnLastWindowClosed( true );
-            application = replace_app;
-        }
-        mainWindow = module.m_ui ? new QMainWindow() : nullptr;
-        if ( mainWindow )
-        {
-            mainWindow->installEventFilter( Calamares::Retranslator::instance() );
-        }
-
-        (void)new Calamares::Branding( module.m_branding );
-        auto* modulemanager = new Calamares::ModuleManager( QStringList(), nullptr );
-        (void)Calamares::ViewManager::instance( mainWindow );
-        modulemanager->addModule( m );
-    }
-
-    if ( !m->isLoaded() )
-    {
-        m->loadSelf();
-    }
-
-    if ( !m->isLoaded() )
-    {
-        cError() << "Module" << module.moduleName() << "could not be loaded.";
-        return 1;
-    }
-
-    if ( mainWindow )
-    {
-        auto* vm = Calamares::ViewManager::instance();
-        vm->onInitComplete();
-        QWidget* w = vm->currentStep()->widget();
-        w->setParent( mainWindow );
-        mainWindow->setCentralWidget( w );
-        w->show();
-        mainWindow->show();
-        return application->exec();
-    }
-
-    using TR = Logger::DebugRow< const char*, const QString >;
-
-    cDebug() << Logger::SubEntry << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() )
-             << TR( "interface", m->interfaceString() );
-
-    Calamares::JobQueue::instance()->enqueue( 100, m->jobs() );
-
-    QObject::connect( Calamares::JobQueue::instance(),
-                      &Calamares::JobQueue::finished,
-                      [ application ]()
-                      { QTimer::singleShot( std::chrono::seconds( 3 ), application, &QApplication::quit ); } );
-    QTimer::singleShot( 0, []() { Calamares::JobQueue::instance()->start(); } );
-
-    return application->exec();
-}
+/* === This file is part of Calamares - <https://calamares.io> ===
+ *
+ *   SPDX-FileCopyrightText: 2018 Adriaan de Groot <groot@kde.org>
+ *   SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ *   Calamares is Free Software: see the License-Identifier above.
+ *
+ */
+
+/*
+ * This executable loads and runs a Calamares Python module
+ * within a C++ application, in order to test the different
+ * bindings.
+ */
+
+#include "Branding.h"
+#include "CppJob.h"
+#include "GlobalStorage.h"
+#include "Job.h"
+#include "JobQueue.h"
+#include "Settings.h"
+#include "ViewManager.h"
+#include "modulesystem/Module.h"
+#include "modulesystem/ModuleManager.h"
+#include "modulesystem/ViewModule.h"
+#include "utils/Logger.h"
+#include "utils/Retranslator.h"
+#include "utils/System.h"
+#include "utils/Yaml.h"
+#include "viewpages/ExecutionViewStep.h"
+
+// Optional features of Calamares
+// - Python support with pybind11
+// - Python support with older Boost implementation
+// - QML support
+#ifdef WITH_PYTHON
+#ifdef WITH_PYBIND11
+#include "python/PythonJob.h"
+#else
+#include "PythonJob.h"
+#endif
+#endif
+#ifdef WITH_QML
+#include "utils/Qml.h"
+#endif
+
+#include <QApplication>
+#include <QCommandLineOption>
+#include <QCommandLineParser>
+#include <QCoreApplication>
+#include <QFileInfo>
+#include <QLabel>
+#include <QMainWindow>
+#include <QThread>
+#include <QTimer>
+
+#include <memory>
+
+struct ModuleConfig
+{
+    QString moduleName() const { return m_module; }
+    QString configFile() const { return m_jobConfig; }
+    QString language() const { return m_language; }
+    QString globalConfigFile() const { return m_globalConfig; }
+
+    QString m_module;
+    QString m_jobConfig;
+    QString m_globalConfig;
+    QString m_settingsConfig;
+    QString m_language;
+    QString m_branding;
+    bool m_ui;
+    bool m_pythonInjection;
+};
+
+static ModuleConfig
+handle_args( QCoreApplication& a )
+{
+    QCommandLineOption debugLevelOption(
+        QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8), ignored.", "level" );
+    QCommandLineOption settingsOption( { QStringLiteral( "S" ), QStringLiteral( "settings" ) },
+                                       QStringLiteral( "Settings.conf document" ),
+                                       QString( "settings.conf" ) );
+    QCommandLineOption globalOption( { QStringLiteral( "g" ), QStringLiteral( "global" ) },
+                                     QStringLiteral( "Global storage settings document" ),
+                                     "global.yaml" );
+    QCommandLineOption jobOption(
+        { QStringLiteral( "j" ), QStringLiteral( "job" ) }, QStringLiteral( "Job settings document" ), "job.yaml" );
+    QCommandLineOption langOption( { QStringLiteral( "l" ), QStringLiteral( "language" ) },
+                                   QStringLiteral( "Language (global)" ),
+                                   "languagecode" );
+    QCommandLineOption brandOption( { QStringLiteral( "b" ), QStringLiteral( "branding" ) },
+                                    QStringLiteral( "Branding directory" ),
+                                    "path/to/branding.desc",
+                                    "src/branding/default/branding.desc" );
+    QCommandLineOption uiOption( { QStringLiteral( "U" ), QStringLiteral( "ui" ) }, QStringLiteral( "Enable UI" ) );
+    QCommandLineOption slideshowOption( { QStringLiteral( "s" ), QStringLiteral( "slideshow" ) },
+                                        QStringLiteral( "Run slideshow module" ) );
+    QCommandLineParser parser;
+    parser.setApplicationDescription( "Calamares module tester" );
+    parser.addHelpOption();
+    parser.addVersionOption();
+
+    parser.addOption( debugLevelOption );
+    parser.addOption( settingsOption );
+    parser.addOption( globalOption );
+    parser.addOption( jobOption );
+    parser.addOption( langOption );
+    parser.addOption( brandOption );
+    parser.addOption( uiOption );
+    parser.addOption( slideshowOption );
+#ifdef WITH_PYTHON
+    QCommandLineOption pythonOption( { QStringLiteral( "P" ), QStringLiteral( "no-injected-python" ) },
+                                     QStringLiteral( "Do not disable potentially-harmful Python commands" ) );
+    parser.addOption( pythonOption );
+#endif
+
+    parser.addPositionalArgument( "module", "Path or name of module to run." );
+    parser.addPositionalArgument( "job.yaml", "Path of job settings document to use.", "[job.yaml]" );
+
+    parser.process( a );
+
+    const QStringList args = parser.positionalArguments();
+    if ( args.isEmpty() && !parser.isSet( slideshowOption ) )
+    {
+        cError() << "Missing <module> path.\n";
+        parser.showHelp();
+    }
+    else if ( args.size() > 2 )
+    {
+        cError() << "More than one <module> path.\n";
+        parser.showHelp();
+    }
+    else
+    {
+        QString jobSettings( parser.value( jobOption ) );
+        if ( jobSettings.isEmpty() && ( args.size() == 2 ) )
+        {
+            jobSettings = args.at( 1 );
+        }
+
+        bool pythonInjection = true;
+#ifdef WITH_PYTHON
+        if ( parser.isSet( pythonOption ) )
+        {
+            pythonInjection = false;
+        }
+#endif
+        return ModuleConfig { parser.isSet( slideshowOption ) ? QStringLiteral( "-" ) : args.first(),
+                              jobSettings,
+                              parser.value( globalOption ),
+                              parser.value( settingsOption ),
+                              parser.value( langOption ),
+                              parser.value( brandOption ),
+                              parser.isSet( slideshowOption ) || parser.isSet( uiOption ),
+                              pythonInjection };
+    }
+}
+
+/** @brief Bogus Job for --slideshow option
+ *
+ * Generally one would use DummyCppJob for this kind of dummy
+ * job, but that class lives in a module so isn't available
+ * in this test application.
+ *
+ * This bogus job just sleeps for 3.
+ */
+class ExecViewJob : public Calamares::CppJob
+{
+public:
+    explicit ExecViewJob( const QString& name, unsigned long t = 3 )
+        : m_name( name )
+        , m_delay( t )
+    {
+    }
+    ~ExecViewJob() override;
+
+    QString prettyName() const override { return m_name; }
+
+    Calamares::JobResult exec() override
+    {
+        QThread::sleep( m_delay );
+        return Calamares::JobResult::ok();
+    }
+
+    void setConfigurationMap( const QVariantMap& ) override {}
+
+private:
+    QString m_name;
+    unsigned long m_delay;
+};
+
+ExecViewJob::~ExecViewJob() {}
+
+/** @brief Bogus module for --slideshow option
+ *
+ * Normally the slideshow -- displayed by ExecutionViewStep -- is not
+ * associated with any particular module in the Calamares configuration.
+ * It is added internally by the module manager. For the module-loader
+ * testing application, we need something that pretends to be the
+ * module for the ExecutionViewStep.
+ */
+class ExecViewModule : public Calamares::Module
+{
+public:
+    ExecViewModule();
+    ~ExecViewModule() override;
+
+    void loadSelf() override;
+
+    virtual Calamares::ModuleSystem::Type type() const override;
+    virtual Calamares::ModuleSystem::Interface interface() const override;
+
+    virtual Calamares::JobList jobs() const override;
+
+protected:
+    void initFrom( const Calamares::ModuleSystem::Descriptor& ) override;
+};
+
+ExecViewModule::ExecViewModule()
+    : Calamares::Module()
+{
+    // Normally the module-loader gives the module an instance key
+    // (out of the settings file, or the descriptor of the module).
+    // We don't have one, so build one -- this gives us "execView@execView".
+    QVariantMap m;
+    const QString execView = QStringLiteral( "execView" );
+    m.insert( "name", execView );
+    Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData( m, execView ), execView );
+}
+
+ExecViewModule::~ExecViewModule() {}
+
+void
+ExecViewModule::initFrom( const Calamares::ModuleSystem::Descriptor& )
+{
+}
+
+void
+ExecViewModule::loadSelf()
+{
+    auto* viewStep = new Calamares::ExecutionViewStep();
+    viewStep->setModuleInstanceKey( instanceKey() );
+    viewStep->setConfigurationMap( m_configurationMap );
+    viewStep->appendJobModuleInstanceKey( instanceKey() );
+    Calamares::ViewManager::instance()->addViewStep( viewStep );
+    m_loaded = true;
+}
+
+Calamares::Module::Type
+ExecViewModule::type() const
+{
+    return Module::Type::View;
+}
+
+Calamares::Module::Interface
+ExecViewModule::interface() const
+{
+    return Module::Interface::QtPlugin;
+}
+
+Calamares::JobList
+ExecViewModule::jobs() const
+{
+    Calamares::JobList l;
+    const auto* gs = Calamares::JobQueue::instance()->globalStorage();
+    if ( gs && gs->contains( "jobs" ) )
+    {
+        QVariantList joblist = gs->value( "jobs" ).toList();
+        for ( const auto& jd : joblist )
+        {
+            QVariantMap jobdescription = jd.toMap();
+            if ( jobdescription.contains( "name" ) && jobdescription.contains( "delay" ) )
+            {
+                l.append( Calamares::job_ptr( new ExecViewJob( jobdescription.value( "name" ).toString(),
+                                                               jobdescription.value( "delay" ).toULongLong() ) ) );
+            }
+        }
+    }
+    if ( l.count() > 0 )
+    {
+        return l;
+    }
+
+    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step 1" ) ) ) );
+    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "step two" ) ) ) );
+    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "locking mutexes" ), 20 ) ) );
+    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "unlocking mutexes" ), 1 ) ) );
+    for ( const QString& s : QStringList { "Harder", "Better", "Faster", "Stronger" } )
+    {
+        l.append( Calamares::job_ptr( new ExecViewJob( s, 0 ) ) );
+    }
+    l.append( Calamares::job_ptr( new ExecViewJob( QStringLiteral( "cleaning up" ), 20 ) ) );
+    return l;
+}
+
+static Calamares::Module*
+load_module( const ModuleConfig& moduleConfig )
+{
+    QString moduleName = moduleConfig.moduleName();
+    if ( moduleName == "-" )
+    {
+        return new ExecViewModule;
+    }
+
+    QFileInfo fi;  // This is kept around to hold the path of the module descriptor
+
+    bool ok = false;
+    QVariantMap descriptor;
+
+    QStringList moduleDirectories { "./", "src/modules/", "modules/", CMAKE_INSTALL_FULL_LIBDIR "/calamares/modules/" };
+    for ( const QString& prefix : qAsConst( moduleDirectories ) )
+    {
+        // Could be a complete path, eg. src/modules/dummycpp/module.desc
+        fi = QFileInfo( prefix + moduleName );
+        if ( fi.exists() && fi.isFile() )
+        {
+            descriptor = Calamares::YAML::load( fi, &ok );
+        }
+        if ( ok )
+        {
+            break;
+        }
+
+        // Could be a path without module.desc
+        fi = QFileInfo( prefix + moduleName );
+        if ( fi.exists() && fi.isDir() )
+        {
+            fi = QFileInfo( prefix + moduleName + "/module.desc" );
+            if ( fi.exists() && fi.isFile() )
+            {
+                descriptor = Calamares::YAML::load( fi, &ok );
+            }
+            if ( ok )
+            {
+                break;
+            }
+            else
+            {
+                if ( !fi.exists() )
+                {
+                    cDebug() << "Expected a descriptor file" << fi.path();
+                }
+                else
+                {
+                    cDebug() << "Read descriptor" << fi.path() << "and it was empty.";
+                }
+            }
+        }
+    }
+
+    if ( !ok )
+    {
+        cWarning() << "No suitable module descriptor found in" << Logger::DebugList( moduleDirectories );
+        return nullptr;
+    }
+
+    QString name = descriptor.value( "name" ).toString();
+    if ( name.isEmpty() )
+    {
+        cWarning() << "No name found in module descriptor" << fi.absoluteFilePath();
+        return nullptr;
+    }
+
+    QString moduleDirectory = fi.absolutePath();
+    QString configFile( moduleConfig.configFile().isEmpty() ? moduleDirectory + '/' + name + ".conf"
+                                                            : moduleConfig.configFile() );
+
+    cDebug() << Logger::SubEntry << "Module" << moduleName << "job-configuration:" << configFile;
+
+    Calamares::Module* module = Calamares::moduleFromDescriptor(
+        Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor, fi.absoluteFilePath() ),
+        name,
+        configFile,
+        moduleDirectory );
+
+    return module;
+}
+
+static bool
+is_ui_option( const char* s )
+{
+    return !qstrcmp( s, "--ui" ) || !qstrcmp( s, "-U" );
+}
+
+static bool
+is_slideshow_option( const char* s )
+{
+    return !qstrcmp( s, "--slideshow" ) || !qstrcmp( s, "-s" );
+}
+
+/** @brief Create the right kind of QApplication
+ *
+ * Does primitive parsing of argv[] to find the --ui option and returns
+ * a UI-enabled application if it does.
+ *
+ * @p argc must be a reference (to main's argc) because the QCoreApplication
+ * constructors take a reference as well, and that would otherwise be a
+ * reference to a temporary.
+ */
+QCoreApplication*
+createApplication( int& argc, char* argv[] )
+{
+    for ( int i = 1; i < argc; ++i )
+    {
+        if ( is_slideshow_option( argv[ i ] ) || is_ui_option( argv[ i ] ) )
+        {
+            auto* aw = new QApplication( argc, argv );
+            aw->setQuitOnLastWindowClosed( true );
+            return aw;
+        }
+    }
+    return new QCoreApplication( argc, argv );
+}
+
+#ifdef WITH_PYTHON
+static const char pythonPreScript[] = R"%(
+# This is Python code executed by Python modules *before* the
+# script file (e.g. main.py) is executed.
+#
+# Calls to suprocess methods that execute something are
+# suppressed and logged -- scripts should really be using libcalamares
+# methods instead.
+_calamares_subprocess = __import__("subprocess", globals(), locals(), [], 0)
+import sys
+import libcalamares
+class fake_subprocess(object):
+    PIPE = object()
+    STDOUT = object()
+    STDERR = object()
+    class CompletedProcess(object):
+        returncode = 0
+        stdout = ""
+        stderr = ""
+    @staticmethod
+    def call(*args, **kwargs):
+        libcalamares.utils.debug("subprocess.call(%r,%r) X ignored" % (args, kwargs))
+        return 0
+    @staticmethod
+    def check_call(*args, **kwargs):
+        libcalamares.utils.debug("subprocess.check_call(%r,%r) X ignored" % (args, kwargs))
+        return 0
+    # This is a 3.5-and-later method, is supposed to return a CompletedProcess
+    @staticmethod
+    def run(*args, **kwargs):
+        libcalamares.utils.debug("subprocess.run(%r,%r) X ignored" % (args, kwargs))
+        return fake_subprocess.CompletedProcess()
+for attr in ("CalledProcessError",):
+    setattr(fake_subprocess,attr,getattr(_calamares_subprocess,attr))
+sys.modules["subprocess"] = fake_subprocess
+libcalamares.utils.debug('pre-script for testing purposes injected')
+
+)%";
+#endif
+
+int
+main( int argc, char* argv[] )
+{
+    QCoreApplication* application = createApplication( argc, argv );
+
+    Logger::setupLogLevel( Logger::LOGVERBOSE );
+
+    ModuleConfig module = handle_args( *application );
+    if ( module.moduleName().isEmpty() )
+    {
+        return 1;
+    }
+
+    std::unique_ptr< Calamares::Settings > settings_p( Calamares::Settings::init( module.m_settingsConfig ) );
+    std::unique_ptr< Calamares::JobQueue > jobqueue_p( new Calamares::JobQueue( nullptr ) );
+    std::unique_ptr< Calamares::System > system_p( new Calamares::System( settings_p->doChroot() ) );
+
+    QMainWindow* mainWindow = nullptr;
+
+    auto* gs = jobqueue_p->globalStorage();
+    if ( !module.globalConfigFile().isEmpty() )
+    {
+        gs->loadYaml( module.globalConfigFile() );
+    }
+    if ( !module.language().isEmpty() )
+    {
+        QVariantMap vm;
+        vm.insert( "LANG", module.language() );
+        gs->insert( "localeConf", vm );
+    }
+
+#ifdef WITH_PYTHON
+    if ( module.m_pythonInjection )
+    {
+#ifdef WITH_PYBIND11
+        Calamares::Python::Job::setInjectedPreScript( pythonPreScript );
+#else
+        // Old Boost approach
+        Calamares::PythonJob::setInjectedPreScript( pythonPreScript );
+#endif
+    }
+#endif
+#ifdef WITH_QML
+    Calamares::initQmlModulesDir();  // don't care if failed
+#endif
+
+    cDebug() << "Calamares module-loader testing" << module.moduleName();
+    Calamares::Module* m = load_module( module );
+    if ( !m )
+    {
+        cError() << "Could not load module" << module.moduleName();
+        return 1;
+    }
+
+    cDebug() << Logger::SubEntry << "got" << m->name() << m->typeString() << m->interfaceString();
+    if ( m->type() == Calamares::Module::Type::View )
+    {
+        // If we forgot the --ui, any ViewModule will core dump as it
+        // tries to create the widget **which won't be used anyway**.
+        //
+        // To avoid that crash, re-create the QApplication, now with GUI
+        if ( !qobject_cast< QApplication* >( application ) )
+        {
+            auto* replace_app = new QApplication( argc, argv );
+            replace_app->setQuitOnLastWindowClosed( true );
+            application = replace_app;
+        }
+        mainWindow = module.m_ui ? new QMainWindow() : nullptr;
+        if ( mainWindow )
+        {
+            mainWindow->installEventFilter( Calamares::Retranslator::instance() );
+        }
+
+        (void)new Calamares::Branding( module.m_branding );
+        auto* modulemanager = new Calamares::ModuleManager( QStringList(), nullptr );
+        (void)Calamares::ViewManager::instance( mainWindow );
+        modulemanager->addModule( m );
+    }
+
+    if ( !m->isLoaded() )
+    {
+        m->loadSelf();
+    }
+
+    if ( !m->isLoaded() )
+    {
+        cError() << "Module" << module.moduleName() << "could not be loaded.";
+        return 1;
+    }
+
+    if ( mainWindow )
+    {
+        auto* vm = Calamares::ViewManager::instance();
+        vm->onInitComplete();
+        QWidget* w = vm->currentStep()->widget();
+        w->setParent( mainWindow );
+        mainWindow->setCentralWidget( w );
+        w->show();
+        mainWindow->show();
+        return application->exec();
+    }
+
+    using TR = Logger::DebugRow< const char*, const QString >;
+
+    cDebug() << Logger::SubEntry << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() )
+             << TR( "interface", m->interfaceString() );
+
+    Calamares::JobQueue::instance()->enqueue( 100, m->jobs() );
+
+    QObject::connect( Calamares::JobQueue::instance(),
+                      &Calamares::JobQueue::finished,
+                      [ application ]()
+                      { QTimer::singleShot( std::chrono::seconds( 3 ), application, &QApplication::quit ); } );
+    QTimer::singleShot( 0, []() { Calamares::JobQueue::instance()->start(); } );
+
+    return application->exec();
+}
diff --git a/src/libcalamares/CalamaresAbout.cpp b/src/libcalamares/CalamaresAbout.cpp
index 595efc7..65a1b9d 100644
--- a/src/libcalamares/CalamaresAbout.cpp
+++ b/src/libcalamares/CalamaresAbout.cpp
@@ -65,6 +65,7 @@ Calamares::aboutString()
 {
     return substituteVersions( QCoreApplication::translate( "AboutData", s_header ) ) + aboutMaintainers()
         + QCoreApplication::translate( "AboutData", s_footer );
+    // return aboutMaintainers()+ QCoreApplication::translate( "AboutData", s_footer );
 }
 
 const QString
diff --git a/src/libcalamaresui/modulesystem/CppJobModule.cpp b/src/libcalamaresui/modulesystem/CppJobModule.cpp
index b35a457..c211006 100644
--- a/src/libcalamaresui/modulesystem/CppJobModule.cpp
+++ b/src/libcalamaresui/modulesystem/CppJobModule.cpp
@@ -53,6 +53,10 @@ CppJobModule::loadSelf()
             cDebug() << "Could not load module:" << m_loader->errorString();
             return;
         }
+        //        cDebug() << "CppJobModule loading self for instance" << instanceKey()
+        //                 << "\nCppJobModule at address" << this
+        //                 << "\nCalamares::PluginFactory at address" << pf
+        //                 << "\nCppJob at address" << cppJob;
 
         cppJob->setModuleInstanceKey( instanceKey() );
         cppJob->setConfigurationMap( m_configurationMap );
diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py
index 6ca279e..02fec0f 100644
--- a/src/modules/displaymanager/main.py
+++ b/src/modules/displaymanager/main.py
@@ -410,6 +410,11 @@ class DMgdm(DisplayManager):
         if self.config is None:
             raise ValueError( "No config file for GDM has been set." )
 
+     
+        libcalamares.utils.target_env_call(
+            ['hostnamectl', 'set-hostname', username]
+        )
+
         # Systems with GDM as Desktop Manager
         gdm_conf_path = os.path.join(self.root_mount_point, self.config)
 
@@ -571,6 +576,11 @@ class DMlightdm(DisplayManager):
         # Ideally, we should use configparser for the ini conf file,
         # but we just do a simple text replacement for now, as it
         # worksforme(tm)
+
+        libcalamares.utils.target_env_call(
+            ['hostnamectl', 'set-hostname', username]
+        )
+
         lightdm_conf_path = os.path.join(
             self.root_mount_point, "etc/lightdm/lightdm.conf"
             )
diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp
index be60521..3f06158 100644
--- a/src/modules/keyboard/KeyboardPage.cpp
+++ b/src/modules/keyboard/KeyboardPage.cpp
@@ -48,6 +48,9 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent )
 {
     ui->setupUi( this );
     this->setContentsMargins(50,0,50,0);
+    // Keyboard Preview
+    // ui->KBPreviewLayout->addWidget( m_keyboardPreview );
+    
 
     {
         auto* model = config->keyboardModels();
@@ -90,11 +93,27 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent )
              &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 ) );
+    //              m_keyboardPreview->setLayout( m_config->keyboardLayouts()->key( index ) );
+    //              m_keyboardPreview->setVariant(
+    //                  m_config->keyboardVariants()->key( m_config->keyboardVariants()->currentIndex() ) );
+    //          } );
 
     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 ) );
+    //              m_keyboardPreview->setVariant( m_config->keyboardVariants()->key( index ) );
+    //          } );
 
     connect( ui->groupSelector,
              QOverload< int >::of( &QComboBox::currentIndexChanged ),
diff --git a/src/modules/keyboard/KeyboardPage.ui b/src/modules/keyboard/KeyboardPage.ui
index 70cfca3..1d6afbf 100644
--- a/src/modules/keyboard/KeyboardPage.ui
+++ b/src/modules/keyboard/KeyboardPage.ui
@@ -45,6 +45,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
        </property>
       </spacer>
      </item>
+     <!-- <item>
+      <layout class="QVBoxLayout" name="KBPreviewLayout"/>
+     </item> -->
      <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp
index 0d70ff3..fbcbf48 100644
--- a/src/modules/locale/Config.cpp
+++ b/src/modules/locale/Config.cpp
@@ -426,6 +426,33 @@ Config::currentLCStatus() const
         .arg( localeLabel( m_selectedLocaleConfiguration.lc_numeric ) );
 }
 
+
+static QString
+getTranRes(QString& filePath,QString& keyWord) {
+    QFile file(filePath);
+    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        qDebug() << "无法打开文件";
+        return QString();
+    }
+
+    QTextStream in(&file);
+    QString currentLine;
+    QString resLine;
+
+    while (!in.atEnd()) {
+        currentLine = in.readLine();
+        if (currentLine.contains(keyWord, Qt::CaseInsensitive)) {
+            in.readLine();
+            resLine = in.readLine();
+            file.close();
+            return resLine.trimmed().replace("<translation>","").replace("</translation>","");
+        }
+    }
+
+    return keyWord;
+}
+
+
 QString
 Config::currentTimeZoneStatus() const
 {
@@ -434,6 +461,22 @@ Config::currentTimeZoneStatus() const
     {
         zone = "Hong Kong(China)";
     }
+
+
+    zone.replace("_"," ");
+    QString translationFile = "";
+    if( m_selectedLocaleConfiguration.language() == "zh_CN.utf8"){
+        translationFile = "tz_zh_CN.ts";
+    } else if( m_selectedLocaleConfiguration.language() == "zh_TW.utf8"){
+        translationFile="tz_zh_TW.ts";
+    }
+
+    QString transFilePath = QStringLiteral("/usr/share/calamares/") + translationFile;
+    cDebug() << "transFilePath" << transFilePath;
+    if(translationFile != ""){
+        zone = getTranRes(transFilePath, zone);
+    }    
+
     return tr("The timezone will be set to %1.","@info")
     .arg( zone );
 }
diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp
index ed50574..0568067 100644
--- a/src/modules/locale/LocalePage.cpp
+++ b/src/modules/locale/LocalePage.cpp
@@ -32,6 +32,13 @@ LocalePage::LocalePage( Config* config, QWidget* parent )
 {
     QBoxLayout* mainLayout = new QVBoxLayout;
     mainLayout->setContentsMargins(50,0,50,0);
+    //QBoxLayout* tzwLayout = new QHBoxLayout;
+    //m_tzWidget = new TimeZoneWidget( m_config->zonesModel(), this );
+    //tzwLayout->addStretch();
+    //tzwLayout->addWidget( m_tzWidget );
+    //tzwLayout->addStretch();
+    // Adjust for margins and spacing in this page
+    //m_tzWidget->setMinimumHeight( m_tzWidget->minimumHeight() + 12 );  // 2 * spacing
 
     QBoxLayout* zoneAndRegionLayout = new QVBoxLayout;
     m_regionLabel = new QLabel( this );
@@ -83,7 +90,7 @@ LocalePage::LocalePage( Config* config, QWidget* parent )
     m_formatsChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
     formatsLayout->addWidget( m_formatsChangeButton );
     formatsLayout->addSpacing(20);
-    
+    //mainLayout->addLayout( tzwLayout );
     mainLayout->addStretch();
     mainLayout->addLayout( zoneAndRegionLayout );
     mainLayout->addStretch();
@@ -93,7 +100,7 @@ LocalePage::LocalePage( Config* config, QWidget* parent )
     mainLayout->addSpacing(20);
     mainLayout->addLayout( timezoneLayout );
     mainLayout->addStretch();
-    
+    //setMinimumWidth( m_tzWidget->width() );
     setLayout( mainLayout );
 
     m_localeChangeButton->hide();
@@ -107,15 +114,20 @@ LocalePage::LocalePage( Config* config, QWidget* parent )
         zones->setRegion( location->region() );
         m_regionCombo->setModel( regions );
         m_zoneCombo->setModel( zones );
-        
+        //m_tzWidget->setCurrentLocation( location );
         locationChanged( location );  // doesn't inform TZ widget
     }
 
     connect( config, &Config::currentLCStatusChanged, m_formatsLabel, &QLabel::setText );
     connect( config, &Config::currentLanguageStatusChanged, m_localeLabel, &QLabel::setText );
     connect( config, &Config::currentZoneChanged, m_timezoneLabel , &QLabel::setText);
-    
+    //connect( config, &Config::currentLocationChanged, m_tzWidget, &TimeZoneWidget::setCurrentLocation );
     connect( config, &Config::currentLocationChanged, this, &LocalePage::locationChanged );
+    // connect( m_tzWidget,
+    //          &TimeZoneWidget::locationChanged,
+    //          config,
+    //          QOverload< const Calamares::Locale::TimeZoneData* >::of( &Config::setCurrentLocation ) );
+
     connect( m_regionCombo, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &LocalePage::regionChanged );
     connect( m_zoneCombo, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &LocalePage::zoneChanged );
 
diff --git a/src/modules/packagechooser/packagechooser.conf b/src/modules/packagechooser/packagechooser.conf
index aa048e2..3f35638 100644
--- a/src/modules/packagechooser/packagechooser.conf
+++ b/src/modules/packagechooser/packagechooser.conf
@@ -147,6 +147,8 @@ labels:
 #
 # An item for AppStream may also contain an *id* and a *screenshot*
 # key which will override the data from AppStream.
+#      liberation-fonts, gnu-*-fonts, google-*-fonts, adwaita-icon-theme, atk, atkmm, at-spi2-atk, at-spi2-core, baobab, abattis-cantarell-fonts, cheese, clutter, clutter-gst3, clutter-gtk, cogl, dconf, dconf-editor, devhelp, eog, epiphany, evince, evolution-data-server, file-roller, folks, gcab, gcr, gdk-pixbuf2, gdm, gedit, geocode-glib, gfbgraph, gjs, glib2, glibmm24, glib-networking, gmime30, gnome-autoar, gnome-backgrounds, gnome-bluetooth, gnome-builder, gnome-calculator, gnome-calendar, gnome-characters, gnome-clocks, gnome-color-manager, gnome-contacts, gnome-control-center, gnome-desktop3, gnome-disk-utility, gnome-font-viewer, gnome-getting-started-docs, gnome-initial-setup, gnome-keyring, gnome-logs, gnome-menus, gnome-music, gnome-online-accounts, gnome-online-miners, gnome-photos, gnome-remote-desktop, gnome-screenshot, gnome-session, gnome-settings-daemon, gnome-shell, gnome-shell-extensions, gnome-software, gnome-system-monitor, gnome-terminal, gnome-tour, gnome-user-docs, gnome-user-share, gnome-video-effects, gnome-weather, gobject-introspection, gom, grilo, grilo-plugins, gsettings-desktop-schemas, gsound, gspell, gssdp, gtk3, gtk4, gtk-doc, gtkmm30, gtksourceview4, gtk-vnc2, gupnp, gupnp-av, gupnp-dlna, gvfs, json-glib, libchamplain, libdazzle, libgdata, libgee, libgnomekbd, libgsf, libgtop2, libgweather, libgxps, libhandy, libmediaart, libnma, libnotify, libpeas, librsvg2, libsecret, libsigc++20, libsoup, mm-common, mutter, nautilus, orca, pango, pangomm, libphodav, python3-pyatspi, python3-gobject, rest, rygel, simple-scan, sushi, sysprof, tepl, totem, totem-pl-parser, tracker3, tracker3-miners, vala, vte291, yelp, yelp-tools, yelp-xsl, zenity, devstation-config, ibus-libpinyin ]
+
 items:
     - id: ""
       # packages: [] # This item installs no packages
@@ -157,11 +159,25 @@ items:
       description[nl]: "Kies eventueel een desktop-omgeving uit deze lijst. Als u geen desktop-omgeving wenst te gebruiken, kies er dan geen. In dat geval start het systeem straks op in tekst-modus en kunt u later alsnog een desktop-omgeving installeren."
       description[zh]: "请选择一个桌面环境。如果您不想安装桌面环境也没关系，您可以稍后再为系统安装桌面环境。"
       screenshot: ":/images/Minimal-Install.png"
-
+    # - id: kde
+    #   packages: [ kde-frameworks, kde-plasma, kde-gear ]
+    #   name: Plasma Desktop
+    #   description: "KDE Plasma Desktop, simple by default, a clean work area for real-world usage which intends to stay out of your way. Plasma is powerful when needed, enabling the user to create the workflow that makes them more effective to complete their tasks."
+    #   screenshot: ":/images/Plasma.png"
     - id: gnome
-      packages: [ checkpolicy, code, xorg-*, dejavu-fonts, liberation-fonts, gnu-*-fonts, google-*-fonts, adwaita-icon-theme, atk, atkmm, at-spi2-atk, at-spi2-core, baobab, abattis-cantarell-fonts, cheese, clutter, clutter-gst3, clutter-gtk, cogl, dconf, dconf-editor, devhelp, eog, epiphany, evince, evolution-data-server, file-roller, folks, gcab, gcr, gdk-pixbuf2, gdm, gedit, geocode-glib, gfbgraph, gjs, glib2, glibmm24, glib-networking, gmime30, gnome-autoar, gnome-backgrounds, gnome-bluetooth, gnome-builder, gnome-calculator, gnome-calendar, gnome-characters, gnome-clocks, gnome-color-manager, gnome-contacts, gnome-control-center, gnome-desktop3, gnome-disk-utility, gnome-font-viewer, gnome-getting-started-docs, gnome-initial-setup, gnome-keyring, gnome-logs, gnome-menus, gnome-music, gnome-online-accounts, gnome-online-miners, gnome-photos, gnome-remote-desktop, gnome-screenshot, gnome-session, gnome-settings-daemon, gnome-shell, gnome-shell-extensions, gnome-software, gnome-system-monitor, gnome-terminal, gnome-tour, gnome-user-docs, gnome-user-share, gnome-video-effects, gnome-weather, gobject-introspection, gom, grilo, grilo-plugins, gsettings-desktop-schemas, gsound, gspell, gssdp, gtk3, gtk4, gtk-doc, gtkmm30, gtksourceview4, gtk-vnc2, gupnp, gupnp-av, gupnp-dlna, gvfs, json-glib, libchamplain, libdazzle, libgdata, libgee, libgnomekbd, libgsf, libgtop2, libgweather, libgxps, libhandy, libmediaart, libnma, libnotify, libpeas, librsvg2, libsecret, libsigc++20, libsoup, mm-common, mutter, nautilus, orca, pango, pangomm, libphodav, python3-pyatspi, python3-gobject, rest, rygel, simple-scan, sushi, sysprof, tepl, totem, totem-pl-parser, tracker3, tracker3-miners, vala, vte291, yelp, yelp-tools, yelp-xsl, zenity, devstation-config, ibus-libpinyin ]
+      packages: [ checkpolicy, code, dejavu-fonts, liberation-fonts, gnome-shell, gnome-session, gnome-terminal, gnome-software, gnome-menus, nautilus, xdg-utils, google-droid-sans-fonts, google-noto-fonts-common, google-noto-sans-arabic-vf-fonts, google-noto-sans-armenian-vf-fonts, google-noto-sans-bengali-vf-fonts, google-noto-sans-canadian-aboriginal-vf-fonts, google-noto-sans-cherokee-vf-fonts, google-noto-sans-devanagari-vf-fonts, google-noto-sans-ethiopic-vf-fonts, google-noto-sans-georgian-vf-fonts, google-noto-sans-hebrew-vf-fonts, google-noto-sans-kannada-vf-fonts, google-noto-sans-khmer-vf-fonts, google-noto-sans-lao-vf-fonts, google-noto-sans-math-fonts, google-noto-sans-mono-vf-fonts, google-noto-sans-sinhala-vf-fonts, google-noto-sans-symbols2-fonts, google-noto-sans-symbols-vf-fonts, google-noto-sans-tamil-vf-fonts, google-noto-sans-thaana-vf-fonts, google-noto-sans-thai-vf-fonts, google-noto-sans-vf-fonts, google-noto-serif-armenian-vf-fonts, google-noto-serif-ethiopic-vf-fonts, google-noto-serif-georgian-vf-fonts, google-noto-serif-gujarati-vf-fonts, google-noto-serif-gurmukhi-vf-fonts, google-noto-serif-hebrew-vf-fonts, google-noto-serif-kannada-vf-fonts, google-noto-serif-khmer-vf-fonts, google-noto-serif-lao-vf-fonts, google-noto-serif-sinhala-vf-fonts, google-noto-serif-tamil-vf-fonts, google-noto-serif-thai-vf-fonts, google-noto-serif-vf-fonts, gdm, ibus-libpinyin, webp-pixbuf-loader, firefox, devstation-config, wqy-zenhei-fonts ]
       name: DevStation
       name[zh]: DevStation
       description: GNU Networked Object Modeling Environment Desktop
       description[zh]: Devstation系统桌面
       screenshot: ":/images/gnome.png"
+    #- id: ukui
+    #  packages: [ ukui ]
+    #  name: UKUI
+    #  description: Linux Desktop
+    #  screenshot: ":/images/UKUI.png"
+    # - id: calamares
+    #   appdata: ../io.calamares.calamares.appdata.xml
+    #   screenshot: ":/images/calamares.png"
+    # - id: kate
+    #   appstream: org.kde.kwrite.desktop
diff --git a/src/modules/packagechooser/packagechooser.qrc b/src/modules/packagechooser/packagechooser.qrc
index 2f76726..b5c4a9c 100644
--- a/src/modules/packagechooser/packagechooser.qrc
+++ b/src/modules/packagechooser/packagechooser.qrc
@@ -1,12 +1,7 @@
 <RCC>
     <qresource prefix="/">
         <file>images/no-selection.png</file>
-        <file>images/calamares.png</file>
-        <!-- <file>images/Plasma.png</file> -->
         <file>images/gnome.png</file>
-        <!-- <file>images/UKUI.png</file> -->
-        <!--<file>images/Biglogo.png</file> -->
-        <!--<file>images/Biglogo.svg</file> -->
         <file>images/Minimal-Install.png</file>
     </qresource>
 </RCC>
diff --git a/src/modules/packages/main.py b/src/modules/packages/main.py
index 1fbe276..2c6e6ad 100644
--- a/src/modules/packages/main.py
+++ b/src/modules/packages/main.py
@@ -756,7 +756,7 @@ def subst_locale_orig(plist):
     return ret
 
 
-def handle_packagechooser(entry):
+def handle_packagechooser():
     """
     Handle special logic for entries with source "packagechooser@packagechooser".
     Modifies the entry to include specific pre- and post-scripts.
@@ -764,13 +764,11 @@ def handle_packagechooser(entry):
     :param entry: dict
         The operation entry to process.
     """
-    if "install" in entry:
-        item = {
-            "package": entry["install"],
-            "pre-script": "",
-            "post-script": ["/bin/bash /etc/add_selinux_policy.sh", "systemctl enable gdm", "systemctl set-default graphical.target"]
-        }
-        entry["install"] = [item]
+    item = {
+        "pre-script": "",
+        "post-script": ["/bin/bash /etc/add_selinux_policy.sh", "systemctl enable gdm", "systemctl set-default graphical.target"]
+    }
+    return item
 
 
 def run_operations(pkgman, entry, options):
diff --git a/src/modules/packages/packages.conf b/src/modules/packages/packages.conf
index 490c289..31e51c2 100644
--- a/src/modules/packages/packages.conf
+++ b/src/modules/packages/packages.conf
@@ -215,7 +215,7 @@ operations:
     - coreutils
     - efibootmgr
     - shim
-    - java-11-openjdk-devel
+    - java-21-openjdk-devel
     - vim
     - gdb
     - perf
@@ -229,5 +229,3 @@ operations:
     options:
       - --nogpgcheck
       - --setopt=sslverify=0
-      - --disablerepo=*
-      - --enablerepo=local-repo
diff --git a/src/modules/partition/core/DeviceList.cpp b/src/modules/partition/core/DeviceList.cpp
index 16723c7..1885949 100644
--- a/src/modules/partition/core/DeviceList.cpp
+++ b/src/modules/partition/core/DeviceList.cpp
@@ -43,6 +43,17 @@ hasRootPartition( Device* device )
     return false;
 }
 
+/**
+ * Does the given @p device path should point to a device
+ */
+static bool
+isValidDevice(const QString& devicePath)
+{
+    auto result = Calamares::System::runCommand({ "blkid", devicePath }, std::chrono::seconds(30));
+
+    return result.getExitCode() == 0 && !result.getOutput().isEmpty();
+}
+
 /** @brief Check if @p path holds an iso9660 filesystem
  *
  * The @p path should point to a device; blkid is used to check the FS type.
@@ -187,7 +198,17 @@ getDevices( DeviceType which )
         }
         else
         {
-            ++it;
+            const QString devicePath = (*it)->deviceNode();
+
+            if (!isValidDevice(devicePath))
+            {
+                cDebug() << Logger::SubEntry << "Skipping device due to blkid failure: " << devicePath;
+                it = removeInAllModes(devices, it);
+            }
+            else
+            {
+                ++it;
+            }
         }
     }
     cDebug() << Logger::SubEntry << "there are" << devices.count() << "devices left.";
diff --git a/src/modules/partition/jobs/ClearMountsJob.cpp b/src/modules/partition/jobs/ClearMountsJob.cpp
index ce1355b..d36c4e5 100644
--- a/src/modules/partition/jobs/ClearMountsJob.cpp
+++ b/src/modules/partition/jobs/ClearMountsJob.cpp
@@ -260,7 +260,7 @@ STATICTEST MessageAndPath
 tryUmount( const QString& partPath )
 {
     QProcess process;
-    process.start( "umount", { partPath } );
+    process.start( "umount", { "-l", partPath } );
     process.waitForFinished();
     if ( process.exitCode() == 0 )
     {
@@ -317,6 +317,51 @@ tryCryptoClose( const QString& mapperPath )
     return {};
 }
 
+STATICTEST MessageAndPath
+tryClearLVM(const QString& LVMPath)
+{
+    tryUmount( LVMPath );
+
+    QProcess process;
+    process.start( "dmsetup", {"remove", LVMPath } );
+    process.waitForFinished();
+    if ( process.exitCode() == 0 )
+    {
+        return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully removed LVM %1." ), LVMPath };
+    }
+    return {};
+}
+
+STATICTEST MessageAndPath
+mpathClear(const QString& deviceName)
+{
+    QString devicePath = "/dev/" + deviceName;
+    QProcess process;
+    process.start("multipath", { "-ll", devicePath } );
+    process.waitForFinished();
+    if( process.exitCode() == 0 )
+    {
+        QStringList multiPathLines = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' );
+        QStringList firstLines = multiPathLines.first().split(' ');
+        QString mpath = firstLines.first();
+        return tryClearLVM("/dev/mapper/" + mpath);
+    }
+    return {};
+}
+
+STATICTEST MessageAndPath
+diskClear(const QString& diskPath)
+{
+    QString devicePath = "/dev/" + diskPath;
+    QProcess process;
+    process.start( "wipefs", { "-af", devicePath } );
+    process.waitForFinished();
+    if( process.exitCode() == 0 )
+    {
+        return { QT_TRANSLATE_NOOP( "ClearMountsJob", "Successfully cleared %1." ), diskPath };
+    }
+    return {};
+}
 STATICTEST MessageAndPath
 tryVGDisable( const QString& vgName )
 {
@@ -380,12 +425,14 @@ ClearMountsJob::exec()
     QList< MessageAndPath > goodNews;
 
     apply( getCryptoDevices( m_mapperExceptions ), tryCryptoClose, goodNews );
-    apply( getLVMVolumes(), tryUmount, goodNews );
+    apply( getLVMVolumes(), tryClearLVM, goodNews );
     apply( getPVGroups( deviceName ), tryVGDisable, goodNews );
 
     apply( getCryptoDevices( m_mapperExceptions ), tryCryptoClose, goodNews );
     apply( getPartitionsForDevice( deviceName ), tryUmount, goodNews );
     apply( getSwapsForDevice( m_deviceNode ), tryClearSwap, goodNews );
+    diskClear(deviceName);
+    mpathClear(deviceName);
 
     Calamares::JobResult ok = Calamares::JobResult::ok();
     ok.setMessage( tr( "Cleared all mounts for %1" ).arg( m_deviceNode ) );
diff --git a/src/modules/unpackfs/main.py b/src/modules/unpackfs/main.py
index 4c5518e..7db5f2e 100644
--- a/src/modules/unpackfs/main.py
+++ b/src/modules/unpackfs/main.py
@@ -207,7 +207,7 @@ def file_copy(source, entry, progress_cb):
     # `source` *must* end with '/' otherwise a directory named after the source
     # will be created in `dest`: ie if `source` is "/foo/bar" and `dest` is
     # "/dest", then files will be copied in "/dest/bar".
-    if not source.endswith("/") and not os.path.isfile(source):
+    if source and not source.endswith("/") and not os.path.isfile(source):
         source += "/"
 
     num_files_total_local = 0
@@ -395,8 +395,6 @@ class UnpackOperation:
             for entry in self.entries:
                 status = _("Starting to unpack {}").format(entry.source)
                 libcalamares.job.setprogress( ( 1.0 * complete ) / len(self.entries) )
-                entry.do_mount(source_mount_path)
-                entry.do_count()  # Fill in the entry.total
 
                 self.report_progress()
                 error_msg = self.unpack_image(entry, entry.mountPoint)
@@ -437,7 +435,7 @@ class UnpackOperation:
 
             return file_copy(source, entry, progress_cb)
         finally:
-            if not entry.is_file():
+            if imgmountdir and not entry.is_file() and os.path.isdir(imgmountdir):
                 subprocess.check_call(["umount", "-l", imgmountdir])
 
 
diff --git a/src/modules/users/CreateUserJob.cpp b/src/modules/users/CreateUserJob.cpp
index 4e36c50..9699141 100644
--- a/src/modules/users/CreateUserJob.cpp
+++ b/src/modules/users/CreateUserJob.cpp
@@ -79,6 +79,23 @@ createUser( const QString& loginName, const QString& fullName, const QString& sh
     return Calamares::JobResult::ok();
 }
 
+static Calamares::JobResult
+config_root_bash(const QString& loginName)
+{
+    QStringList copyBashFilesCommand;
+    copyBashFilesCommand << "cp"
+                         << QString("/home/%1/.bashrc").arg(loginName)
+                         << QString("/home/%1/.bash_profile").arg(loginName)
+                         << "/root/";
+    auto commandResult = Calamares::System::instance()->targetEnvCommand( copyBashFilesCommand );
+    if ( commandResult.getExitCode() )
+    {
+        cError() << "copy bash config file failed" << commandResult.getExitCode();
+        return commandResult.explainProcess( copyBashFilesCommand, std::chrono::seconds( 10 ) /* bogus timeout */ );
+    }
+    return Calamares::JobResult::ok();
+}
+
 static Calamares::JobResult
 setUserGroups( const QString& loginName, const QStringList& groups )
 {
@@ -155,6 +172,7 @@ CreateUserJob::exec()
     QString userGroup = QString( "%1:%2" ).arg( m_config->loginName() ).arg( m_config->loginName() );
     QString homeDir = QString( "/home/%1" ).arg( m_config->loginName() );
     auto commandResult = Calamares::System::instance()->targetEnvCommand( { "chown", "-R", userGroup, homeDir } );
+    config_root_bash(m_config->loginName());
     if ( commandResult.getExitCode() )
     {
         cError() << "chown failed" << commandResult.getExitCode();
diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp
index 72fb3e0..a4edddf 100644
--- a/src/modules/users/UsersPage.cpp
+++ b/src/modules/users/UsersPage.cpp
@@ -31,6 +31,9 @@
 #include <QFile>
 #include <QLabel>
 #include <QLineEdit>
+#include <QPushButton>
+#include <QIcon>
+#include <QWidgetAction>
 
 /** @brief Add an error message and pixmap to a label. */
 static inline void
@@ -83,6 +86,105 @@ UsersPage::UsersPage( Config* config, QWidget* parent )
 {
     ui->setupUi( this );
     this->setContentsMargins(50,15,50,0);
+
+ 
+    //初始化参数
+    userPassword=false;
+    userVertifyPassword=false;
+    rootPassword=false;
+    rootVertifyPassword=false;
+
+    userButton=new QPushButton();
+    userVertifyButton=new QPushButton();
+    rootButton=new QPushButton();
+    rootVertifyButton=new QPushButton();
+
+      hIcon = QIcon(imagePath + "password-hide.png");
+      sIcon = QIcon(imagePath + "password-show.png");
+      userButton->setIcon(hIcon);
+      userVertifyButton->setIcon(hIcon);
+      rootButton->setIcon(hIcon);
+      rootVertifyButton->setIcon(hIcon);
+
+    userButton->setCursor(Qt::PointingHandCursor);
+    userButton->setStyleSheet("QPushButton:hover {background-color:transparent;border-style:outset;}");
+    userButton->setWindowFlags(Qt::FramelessWindowHint);
+    userButton->setFlat(true);
+
+    userVertifyButton->setCursor(Qt::PointingHandCursor);
+    userVertifyButton->setStyleSheet("QPushButton:hover {background-color:transparent;border-style:outset;}");
+    userVertifyButton->setWindowFlags(Qt::FramelessWindowHint);
+    userVertifyButton->setFlat(true);
+
+    rootButton->setCursor(Qt::PointingHandCursor);
+    rootButton->setStyleSheet("QPushButton:hover {background-color:transparent;border-style:outset;}");
+    rootButton->setWindowFlags(Qt::FramelessWindowHint);
+    rootButton->setFlat(true);
+
+    rootVertifyButton->setCursor(Qt::PointingHandCursor);
+    rootVertifyButton->setStyleSheet("QPushButton:hover {background-color:transparent;border-style:outset;}");
+    rootVertifyButton->setWindowFlags(Qt::FramelessWindowHint);
+    rootVertifyButton->setFlat(true);
+
+    QWidgetAction* userPasswordAction = new QWidgetAction(ui->textBoxUserPassword);
+    QWidgetAction* userVerifiedPasswordAction = new QWidgetAction(ui->textBoxUserVerifiedPassword);
+    QWidgetAction* rootPasswordAction = new QWidgetAction(ui->textBoxRootPassword);
+    QWidgetAction* rootVerifiedPasswordAction = new QWidgetAction(ui->textBoxVerifiedRootPassword);
+
+     userPasswordAction->setDefaultWidget(userButton);
+    ui->textBoxUserPassword->addAction(userPasswordAction,QLineEdit::TrailingPosition);
+    userVerifiedPasswordAction->setDefaultWidget(userVertifyButton);
+    ui->textBoxUserVerifiedPassword->addAction(userVerifiedPasswordAction,QLineEdit::TrailingPosition);
+    rootPasswordAction->setDefaultWidget(rootButton);
+    ui->textBoxRootPassword->addAction(rootPasswordAction,QLineEdit::TrailingPosition);
+    rootVerifiedPasswordAction->setDefaultWidget(rootVertifyButton);
+    ui->textBoxVerifiedRootPassword->addAction(rootVerifiedPasswordAction,QLineEdit::TrailingPosition);
+
+    connect(
+          userButton,
+          &QPushButton::clicked,
+          [this] ( ) {
+            userPassword =! userPassword;
+            if(userPassword){
+                 userButton->setIcon(sIcon);
+                 ui->textBoxUserPassword->setEchoMode(QLineEdit::Normal);
+            } else {
+                 userButton->setIcon(hIcon);
+                 ui->textBoxUserPassword->setEchoMode(QLineEdit::Password);
+            }
+          });
+     connect(userVertifyButton,&QPushButton::clicked, [this](){
+        userVertifyPassword =! userVertifyPassword;
+        if(userVertifyPassword){
+            userVertifyButton->setIcon(sIcon);
+            ui->textBoxUserVerifiedPassword->setEchoMode(QLineEdit::Normal);
+        } else {
+            userVertifyButton->setIcon(hIcon);
+            ui->textBoxUserVerifiedPassword->setEchoMode(QLineEdit::Password);
+        }
+    });
+    connect(rootButton,&QPushButton::clicked, [this](){
+            rootPassword =! rootPassword;
+            if(rootPassword){
+                rootButton->setIcon(sIcon);
+                ui->textBoxRootPassword->setEchoMode(QLineEdit::Normal);
+            } else {
+                rootButton->setIcon(hIcon);
+                ui->textBoxRootPassword->setEchoMode(QLineEdit::Password);
+            }
+        });
+    connect(rootVertifyButton,&QPushButton::clicked, [this](){
+            rootVertifyPassword =! rootVertifyPassword;
+            if(rootVertifyPassword){
+                rootVertifyButton->setIcon(sIcon);
+                ui->textBoxVerifiedRootPassword->setEchoMode(QLineEdit::Normal);
+            } else {
+                rootVertifyButton->setIcon(hIcon);
+                ui->textBoxVerifiedRootPassword->setEchoMode(QLineEdit::Password);
+            }
+        });
+
+
     // Connect signals and slots
     ui->textBoxUserPassword->setText( config->userPassword() );
     connect( ui->textBoxUserPassword, &QLineEdit::textChanged, config, &Config::setUserPassword );
diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h
index 379176a..fcee0f0 100644
--- a/src/modules/users/UsersPage.h
+++ b/src/modules/users/UsersPage.h
@@ -17,6 +17,10 @@
 #define USERSPAGE_H
 
 #include <QWidget>
+#include <QLineEdit>
+#include <QIcon>
+#include <QPushButton>
+
 
 class Config;
 
@@ -51,6 +55,17 @@ private:
 
     Ui::Page_UserSetup* ui;
     Config* m_config;
+     bool userPassword;
+    bool userVertifyPassword;
+    bool rootPassword;
+    bool rootVertifyPassword;
+    QIcon hIcon;
+    QIcon sIcon;
+    QPushButton* userButton;
+    QPushButton* userVertifyButton;
+    QPushButton* rootButton;
+    QPushButton* rootVertifyButton;
+    QString imagePath="/usr/share/calamares/branding/default/";
 };
 
 #endif  // USERSPAGE_H
diff --git a/src/modules/welcome/WelcomePage.cpp b/src/modules/welcome/WelcomePage.cpp
index 471187b..88f38c2 100644
--- a/src/modules/welcome/WelcomePage.cpp
+++ b/src/modules/welcome/WelcomePage.cpp
@@ -91,7 +91,21 @@ WelcomePage::WelcomePage( Config* config, QWidget* parent )
 }
 
 void
-WelcomePage::init(){}
+WelcomePage::init()
+{
+    //setup the url buttons
+    // setupButton( WelcomePage::Button::Support, m_conf->supportUrl() );
+    // setupButton( WelcomePage::Button::KnownIssues, m_conf->knownIssuesUrl() );
+    // setupButton( WelcomePage::Button::ReleaseNotes, m_conf->releaseNotesUrl() );
+    // setupButton( WelcomePage::Button::Donate, m_conf->donateUrl() );
+
+    //language icon
+    // auto icon = Calamares::Branding::instance()->image( m_conf->languageIcon(), QSize( 48, 48 ) );
+    // if ( !icon.isNull() )
+    // {
+    //     setLanguageIcon( icon );
+    // }
+}
 
 void
 WelcomePage::initLanguages()
@@ -111,6 +125,57 @@ WelcomePage::initLanguages()
              &Config::setLocaleIndex );
 }
 
+// void
+// WelcomePage::setupButton( Button role, const QString& url )
+// {
+//     QPushButton* button = nullptr;
+//     Calamares::ImageType icon = Calamares::Information;
+
+//     switch ( role )
+//     {
+//     case Button::Donate:
+//         button = ui->donateButton;
+//         icon = Calamares::Donate;
+//         break;
+//     case Button::KnownIssues:
+//         button = ui->knownIssuesButton;
+//         icon = Calamares::Bugs;
+//         break;
+//     case Button::ReleaseNotes:
+//         button = ui->releaseNotesButton;
+//         icon = Calamares::Release;
+//         break;
+//     case Button::Support:
+//         button = ui->supportButton;
+//         icon = Calamares::Help;
+//         break;
+//     }
+//     if ( !button )
+//     {
+//         cWarning() << "Unknown button role" << smash( role );
+//         return;
+//     }
+
+//     if ( url.isEmpty() )
+//     {
+//         button->hide();
+//         return;
+//     }
+
+//     QUrl u( url );
+//     if ( u.isValid() )
+//     {
+//         auto size = 2 * QSize( Calamares::defaultFontHeight(), Calamares::defaultFontHeight() );
+//         button->setIcon( Calamares::defaultPixmap( icon, Calamares::Original, size ) );
+//         connect( button, &QPushButton::clicked, [ u ]() { QDesktopServices::openUrl( u ); } );
+//     }
+//     else
+//     {
+//         cWarning() << "Welcome button" << smash( role ) << "URL" << url << "is invalid.";
+//         button->hide();
+//     }
+// }
+
 void
 WelcomePage::focusInEvent( QFocusEvent* e )
 {
@@ -136,6 +201,11 @@ WelcomePage::externallySelectedLanguage( int row )
     }
 }
 
+// void
+// WelcomePage::setLanguageIcon( QPixmap i )
+// {
+//     ui->languageIcon->setPixmap( i );
+// }
 
 void
 WelcomePage::retranslate()
@@ -144,6 +214,8 @@ WelcomePage::retranslate()
 
     ui->mainText->setText( message.arg( Calamares::Branding::instance()->versionedName() ) );
     ui->retranslateUi( this );
+    // ui->supportButton->setText(
+    //     tr( "%1 Support", "@action" ).arg( Calamares::Branding::instance()->shortProductName() ) );
 }
 
 void
diff --git a/src/modules/welcome/welcome.qrc b/src/modules/welcome/welcome.qrc
index d338d73..7182a4d 100644
--- a/src/modules/welcome/welcome.qrc
+++ b/src/modules/welcome/welcome.qrc
@@ -1,6 +1,5 @@
 <RCC>
   <qresource prefix="welcome">
-    <!-- <file>welcomeBG.png</file> -->
     <file>WelcomePage.cpp</file>
     <file>language-icon-128px.png</file>
     <file>language-icon-48px.png</file>
-- 
2.46.0

