Browse Source

wip: force theme #40

0xJacky 2 years ago
parent
commit
bc247ffd23

+ 1 - 1
frontend/package.json

@@ -1,7 +1,7 @@
 {
 {
     "name": "nginx-ui-frontend-next",
     "name": "nginx-ui-frontend-next",
     "private": true,
     "private": true,
-    "version": "1.6.8",
+    "version": "1.7.0",
     "type": "commonjs",
     "type": "commonjs",
     "scripts": {
     "scripts": {
         "dev": "vite",
         "dev": "vite",

+ 11 - 6
frontend/src/App.vue

@@ -5,17 +5,22 @@ import {useSettingsStore} from '@/pinia'
 import {dark_mode} from '@/lib/theme'
 import {dark_mode} from '@/lib/theme'
 
 
 let media = window.matchMedia('(prefers-color-scheme: dark)')
 let media = window.matchMedia('(prefers-color-scheme: dark)')
+
 const callback = (media: { matches: any; }) => {
 const callback = (media: { matches: any; }) => {
     const settings = useSettingsStore()
     const settings = useSettingsStore()
-    if (media.matches) {
-        dark_mode(true)
-        settings.set_theme('dark')
-    } else {
-        dark_mode(false)
-        settings.set_theme('default')
+    if (settings.preference_theme === 'auto') {
+        if (media.matches) {
+            dark_mode(true)
+            settings.set_theme('dark')
+        } else {
+            dark_mode(false)
+            settings.set_theme('auto')
+        }
     }
     }
 }
 }
+
 callback(media)
 callback(media)
+
 if (typeof media.addEventListener === 'function') {
 if (typeof media.addEventListener === 'function') {
     media.addEventListener('change', callback)
     media.addEventListener('change', callback)
 } else if (typeof media.addListener === 'function') {
 } else if (typeof media.addListener === 'function') {

+ 7 - 4
frontend/src/components/FooterToolbar/FooterToolBar.vue

@@ -26,6 +26,13 @@ export default {
 </script>
 </script>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>
+.dark {
+    .ant-pro-footer-toolbar {
+        background: rgba(24, 24, 24, 0.62);
+        border-top: unset;
+    }
+}
+
 .ant-pro-footer-toolbar {
 .ant-pro-footer-toolbar {
     position: fixed;
     position: fixed;
     width: 100%;
     width: 100%;
@@ -36,10 +43,6 @@ export default {
     box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
     box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
     background: #ffffff8c;
     background: #ffffff8c;
     border-top: 1px solid #e8e8e8;
     border-top: 1px solid #e8e8e8;
-    @media (prefers-color-scheme: dark) {
-        background: rgba(24, 24, 24, 0.62);
-        border-top: unset;
-    }
     padding: 0 24px;
     padding: 0 24px;
     z-index: 9;
     z-index: 9;
 
 

+ 8 - 5
frontend/src/components/Logo/Logo.vue

@@ -10,6 +10,14 @@ import logo from '@/assets/img/logo.png'</script>
 </template>
 </template>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>
+.dark {
+    .logo {
+        background-color: transparent;
+        -webkit-box-shadow: 1px 1px 0 0 #404040;
+        box-shadow: 1px 1px 0 0 #404040;
+    }
+}
+
 .logo {
 .logo {
     padding: 8px 25px;
     padding: 8px 25px;
     -webkit-box-shadow: 1px 1px 0 0 #e8e8e8;
     -webkit-box-shadow: 1px 1px 0 0 #e8e8e8;
@@ -20,11 +28,6 @@ import logo from '@/assets/img/logo.png'</script>
     overflow: hidden;
     overflow: hidden;
     display: inline-block;
     display: inline-block;
     background-color: #ffffff;
     background-color: #ffffff;
-    @media (prefers-color-scheme: dark) {
-        background-color: transparent;
-        -webkit-box-shadow: 1px 1px 0 0 #404040;
-        box-shadow: 1px 1px 0 0 #404040;
-    }
 
 
     img {
     img {
         height: 46px;
         height: 46px;

+ 8 - 5
frontend/src/components/PageHeader/PageHeader.vue

@@ -40,18 +40,21 @@ watch(() => route.name, () => {
 </template>
 </template>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>
-.page-header {
-    background: #fff;
-    padding: 16px 32px 0;
-    border-bottom: 1px solid #e8e8e8;
-    @media (prefers-color-scheme: dark) {
+.dark {
+    .page-header {
         background: #28292c !important;
         background: #28292c !important;
         border-bottom: unset;
         border-bottom: unset;
+
         h1 {
         h1 {
             color: #fafafa;
             color: #fafafa;
         }
         }
     }
     }
+}
 
 
+.page-header {
+    background: #fff;
+    padding: 16px 32px 0;
+    border-bottom: 1px solid #e8e8e8;
 
 
     .breadcrumb {
     .breadcrumb {
         margin-bottom: 16px;
         margin-bottom: 16px;

+ 21 - 26
frontend/src/components/StdDataEntry/components/StdSelector.vue

@@ -79,28 +79,28 @@ const _selectedKey = computed({
                 {{ M_value }}
                 {{ M_value }}
             </div>
             </div>
             <a-modal
             <a-modal
-                    :mask="false"
-                    :visible="visible"
-                    :cancel-text="$gettext('Cancel')"
-                    :ok-text="$gettext('OK')"
-                    :title="$gettext('Selector')"
-                    @cancel="visible=false"
-                    @ok="ok()"
-                    :width="800"
-                    destroyOnClose
+                :mask="false"
+                :visible="visible"
+                :cancel-text="$gettext('Cancel')"
+                :ok-text="$gettext('OK')"
+                :title="$gettext('Selector')"
+                @cancel="visible=false"
+                @ok="ok()"
+                :width="800"
+                destroyOnClose
             >
             >
                 {{ description }}
                 {{ description }}
                 <std-table
                 <std-table
-                        :api="api"
-                        :columns="columns"
-                        :data_key="data_key"
-                        :disable_search="disable_search"
-                        :pithy="true"
-                        :get_params="get_params"
-                        :selectionType="selectionType"
-                        :disable_query_params="true"
-                        @onSelected="onSelect"
-                        @onSelectedRecord="onSelectedRecord"
+                    :api="api"
+                    :columns="columns"
+                    :data_key="data_key"
+                    :disable_search="disable_search"
+                    :pithy="true"
+                    :get_params="get_params"
+                    :selectionType="selectionType"
+                    :disable_query_params="true"
+                    @onSelected="onSelect"
+                    @onSelectedRecord="onSelectedRecord"
                 />
                 />
             </a-modal>
             </a-modal>
         </div>
         </div>
@@ -108,6 +108,7 @@ const _selectedKey = computed({
 </template>
 </template>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>
+.dark .std-selector-container
 .std-selector-container {
 .std-selector-container {
     height: 39.9px;
     height: 39.9px;
     display: flex;
     display: flex;
@@ -132,15 +133,9 @@ const _selectedKey = computed({
         cursor: pointer;
         cursor: pointer;
         min-width: 180px;
         min-width: 180px;
 
 
-        @media (prefers-color-scheme: dark) {
-            background-color: #1e1f20;
-            border: 1px solid #666666;
-            color: rgba(255, 255, 255, 0.99);
-        }
-
         .value {
         .value {
 
 
         }
         }
     }
     }
 }
 }
-</style>
+</style>

+ 26 - 26
frontend/src/components/StdDataEntry/compontents/StdSelector.vue

@@ -70,28 +70,28 @@ watch(props, () => {
                 {{ M_value }}
                 {{ M_value }}
             </div>
             </div>
             <a-modal
             <a-modal
-                    :mask="false"
-                    :visible="visible"
-                    :cancel-text="$gettext('Cancel')"
-                    :ok-text="$gettext('OK')"
-                    :title="$gettext('Selector')"
-                    @cancel="visible=false"
-                    @ok="ok()"
-                    :width="800"
-                    destroyOnClose
+                :mask="false"
+                :visible="visible"
+                :cancel-text="$gettext('Cancel')"
+                :ok-text="$gettext('OK')"
+                :title="$gettext('Selector')"
+                @cancel="visible=false"
+                @ok="ok()"
+                :width="800"
+                destroyOnClose
             >
             >
                 {{ description }}
                 {{ description }}
                 <std-table
                 <std-table
-                        :api="api"
-                        :columns="columns"
-                        :data_key="data_key"
-                        :disable_search="disable_search"
-                        :pithy="true"
-                        :get_params="get_params"
-                        :selectionType="selectionType"
-                        :disable_query_params="true"
-                        @onSelected="onSelect"
-                        @onSelectedRecord="onSelectedRecord"
+                    :api="api"
+                    :columns="columns"
+                    :data_key="data_key"
+                    :disable_search="disable_search"
+                    :pithy="true"
+                    :get_params="get_params"
+                    :selectionType="selectionType"
+                    :disable_query_params="true"
+                    @onSelected="onSelect"
+                    @onSelectedRecord="onSelectedRecord"
                 />
                 />
             </a-modal>
             </a-modal>
         </div>
         </div>
@@ -99,6 +99,12 @@ watch(props, () => {
 </template>
 </template>
 
 
 <style lang="less" scoped>
 <style lang="less" scoped>
+.dark .std-selector-container {
+    background-color: #1e1f20;
+    border: 1px solid #666666;
+    color: rgba(255, 255, 255, 0.99);
+}
+
 .std-selector-container {
 .std-selector-container {
     height: 39.9px;
     height: 39.9px;
     display: flex;
     display: flex;
@@ -123,15 +129,9 @@ watch(props, () => {
         cursor: pointer;
         cursor: pointer;
         min-width: 180px;
         min-width: 180px;
 
 
-        @media (prefers-color-scheme: dark) {
-            background-color: #1e1f20;
-            border: 1px solid #666666;
-            color: rgba(255, 255, 255, 0.99);
-        }
-
         .value {
         .value {
 
 
         }
         }
     }
     }
 }
 }
-</style>
+</style>

+ 163 - 97
frontend/src/language/en/app.po

@@ -9,21 +9,21 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 
-#: src/routes/index.ts:116
+#: src/routes/index.ts:125
 msgid "About"
 msgid "About"
 msgstr "About"
 msgstr "About"
 
 
-#: src/routes/index.ts:99 src/views/domain/ngx_conf/LogEntry.vue:64
+#: src/routes/index.ts:100 src/views/domain/ngx_conf/LogEntry.vue:64
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
-#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:42
+#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:47
 #: src/views/user/User.vue:43
 #: src/views/user/User.vue:43
 msgid "Action"
 msgid "Action"
 msgstr "Action"
 msgstr "Action"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:134
-#: src/components/StdDataDisplay/StdCurd.vue:26
+#: src/components/StdDataDisplay/StdCurd.vue:145
+#: src/components/StdDataDisplay/StdCurd.vue:25
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
 
 
@@ -33,47 +33,53 @@ msgstr ""
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "Add Directive Below"
 msgstr "Add Directive Below"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:33
-#: src/views/domain/ngx_conf/LocationEditor.vue:48
+#: src/views/domain/ngx_conf/LocationEditor.vue:45
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
+#: src/views/domain/ngx_conf/LocationEditor.vue:51
+#: src/views/domain/ngx_conf/LocationEditor.vue:60
 msgid "Add Location"
 msgid "Add Location"
 msgstr "Add Location"
 msgstr "Add Location"
 
 
-#: src/routes/index.ts:55 src/views/domain/DomainAdd.vue:2
+#: src/routes/index.ts:56 src/views/domain/DomainAdd.vue:2
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Add Site"
 msgstr "Add Site"
 
 
-#: src/views/domain/DomainEdit.vue:19
+#: src/views/domain/DomainEdit.vue:18 src/views/domain/DomainEdit.vue:19
 msgid "Advance Mode"
 msgid "Advance Mode"
 msgstr "Advance Mode"
 msgstr "Advance Mode"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:44
-#: src/views/domain/DomainList.vue:27
+#: src/components/StdDataDisplay/StdTable.vue:54
+#: src/views/domain/DomainList.vue:26
 #, fuzzy
 #, fuzzy
-msgid "Are you sure you want to delete ?"
+msgid "Are you sure you want to delete?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:27
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:9
+#: src/views/domain/ngx_conf/LocationEditor.vue:19
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
+#: src/views/preference/Preference.vue:7 src/views/preference/Preference.vue:8
+msgid "Auto"
+msgstr ""
+
 #: src/views/nginx_log/NginxLog.vue:4
 #: src/views/nginx_log/NginxLog.vue:4
 msgid "Auto Refresh"
 msgid "Auto Refresh"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:72
 msgid "Auto-renewal disabled for %{name}"
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Auto-renewal disabled for %{name}"
 msgstr "Auto-renewal disabled for %{name}"
 
 
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:66
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "Auto-renewal enabled for %{name}"
 msgstr "Auto-renewal enabled for %{name}"
 
 
-#: src/views/domain/DomainEdit.vue:178 src/views/nginx_log/NginxLog.vue:172
+#: src/views/domain/DomainEdit.vue:187 src/views/nginx_log/NginxLog.vue:173
 msgid "Back"
 msgid "Back"
 msgstr "Back"
 msgstr "Back"
 
 
@@ -86,15 +92,25 @@ msgstr "Back"
 msgid "Base information"
 msgid "Base information"
 msgstr "Base information"
 msgstr "Base information"
 
 
-#: src/views/domain/DomainEdit.vue:22
+#: src/views/domain/DomainEdit.vue:21 src/views/domain/DomainEdit.vue:22
 msgid "Basic Mode"
 msgid "Basic Mode"
 msgstr "Basic Mode"
 msgstr "Basic Mode"
 
 
+#: src/components/StdDataDisplay/StdBatchEdit.vue:5
+#: src/components/StdDataDisplay/StdTable.vue:12
+#: src/components/StdDataDisplay/StdTable.vue:13
+#: src/components/StdDataDisplay/StdTable.vue:18
+#, fuzzy
+msgid "Batch Modify"
+msgstr "Modify Config"
+
 #: src/views/other/About.vue:21
 #: src/views/other/About.vue:21
 msgid "Build with"
 msgid "Build with"
 msgstr "Build with"
 msgstr "Build with"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/views/config/ConfigEdit.vue:49
 #: src/views/config/ConfigEdit.vue:49
 msgid "Cancel"
 msgid "Cancel"
@@ -112,9 +128,9 @@ msgstr "Certificate is valid"
 msgid "Certificate Status"
 msgid "Certificate Status"
 msgstr "Certificate Status"
 msgstr "Certificate Status"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
-#: src/views/domain/ngx_conf/LocationEditor.vue:21
-#: src/views/domain/ngx_conf/LocationEditor.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 msgid "Comments"
 msgid "Comments"
 msgstr "Comments"
 msgstr "Comments"
@@ -131,8 +147,8 @@ msgstr "Configurations"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "Configure SSL"
 msgstr "Configure SSL"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
 msgid "Content"
 msgid "Content"
 msgstr "Content"
 msgstr "Content"
 
 
@@ -156,7 +172,12 @@ msgstr "Created at"
 msgid "Creating client facilitates communication with the CA server"
 msgid "Creating client facilitates communication with the CA server"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:27
+#: src/views/preference/Preference.vue:13
+#: src/views/preference/Preference.vue:14
+msgid "Dark"
+msgstr ""
+
+#: src/routes/index.ts:28
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "Dashboard"
 msgstr "Dashboard"
 
 
@@ -164,16 +185,16 @@ msgstr "Dashboard"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:366
-#: src/views/domain/DomainList.vue:111
+#: src/components/StdDataDisplay/StdTable.vue:527
+#: src/views/domain/DomainList.vue:115
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
 msgid "Delete ID: %{id}"
 msgid "Delete ID: %{id}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainList.vue:76
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr ""
 msgstr ""
 
 
@@ -185,20 +206,23 @@ msgstr "Development Mode"
 msgid "Directive"
 msgid "Directive"
 msgstr "Directive"
 msgstr "Directive"
 
 
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 msgid "Directives"
 msgid "Directives"
 msgstr "Directives"
 msgstr "Directives"
 
 
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:74
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Disable auto-renewal failed for %{name}"
 msgstr "Disable auto-renewal failed for %{name}"
 
 
-#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainList.vue:17
-#: src/views/domain/DomainList.vue:29
+#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
+#: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Disabled"
 msgstr "Disabled"
 
 
-#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:64
+#: src/views/domain/DomainEdit.vue:118 src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Disabled successfully"
 msgstr "Disabled successfully"
 
 
@@ -210,15 +234,15 @@ msgstr "Disk IO"
 msgid "Domain Config Created Successfully"
 msgid "Domain Config Created Successfully"
 msgstr "Domain Config Created Successfully"
 msgstr "Domain Config Created Successfully"
 
 
-#: src/views/domain/DomainEdit.vue:5
+#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgid "Edit %{n}"
 msgstr "Edit %{n}"
 msgstr "Edit %{n}"
 
 
-#: src/routes/index.ts:77 src/views/config/ConfigEdit.vue:2
+#: src/routes/index.ts:78 src/views/config/ConfigEdit.vue:2
 msgid "Edit Configuration"
 msgid "Edit Configuration"
 msgstr "Edit Configuration"
 msgstr "Edit Configuration"
 
 
-#: src/routes/index.ts:59
+#: src/routes/index.ts:60
 msgid "Edit Site"
 msgid "Edit Site"
 msgstr "Edit Site"
 msgstr "Edit Site"
 
 
@@ -226,7 +250,7 @@ msgstr "Edit Site"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:68
 msgid "Enable auto-renewal failed for %{name}"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "Enable auto-renewal failed for %{name}"
 msgstr "Enable auto-renewal failed for %{name}"
 
 
@@ -238,14 +262,15 @@ msgstr "Enable failed"
 msgid "Enable TLS"
 msgid "Enable TLS"
 msgstr "Enable TLS"
 msgstr "Enable TLS"
 
 
-#: src/views/domain/DomainEdit.vue:33 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:20
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainEdit.vue:33 src/views/domain/DomainEdit.vue:6
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
+#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Enabled"
 msgstr "Enabled"
 
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
 
 
@@ -253,7 +278,7 @@ msgstr "Enabled successfully"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Encrypt website with Let's Encrypt"
 msgstr "Encrypt website with Let's Encrypt"
 
 
-#: src/routes/index.ts:103 src/views/domain/ngx_conf/LogEntry.vue:68
+#: src/routes/index.ts:104 src/views/domain/ngx_conf/LogEntry.vue:68
 msgid "Error Logs"
 msgid "Error Logs"
 msgstr ""
 msgstr ""
 
 
@@ -262,15 +287,17 @@ msgid "Expiration Date: %{date}"
 msgstr "Expiration Date: %{date}"
 msgstr "Expiration Date: %{date}"
 
 
 #: src/components/StdDataDisplay/StdTable.vue:12
 #: src/components/StdDataDisplay/StdTable.vue:12
-#: src/components/StdDataDisplay/StdTable.vue:317
+#: src/components/StdDataDisplay/StdTable.vue:362
+#: src/components/StdDataDisplay/StdTable.vue:6
+#: src/components/StdDataDisplay/StdTable.vue:7
 msgid "Export"
 msgid "Export"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainEdit.vue:115 src/views/domain/DomainList.vue:68
+#: src/views/domain/DomainEdit.vue:121 src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
 
-#: src/views/domain/DomainEdit.vue:106 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
@@ -290,6 +317,7 @@ msgstr ""
 msgid "Finished"
 msgid "Finished"
 msgstr "Finished"
 msgstr "Finished"
 
 
+#: src/components/StdDataEntry/components/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 msgid "Generate"
 msgid "Generate"
 msgstr ""
 msgstr ""
@@ -298,15 +326,15 @@ msgstr ""
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:97
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "Getting the certificate, please wait..."
 msgstr "Getting the certificate, please wait..."
 
 
-#: src/routes/index.ts:20
+#: src/routes/index.ts:21
 msgid "Home"
 msgid "Home"
 msgstr "Home"
 msgstr "Home"
 
 
-#: src/routes/index.ts:126 src/views/other/Install.vue:128
+#: src/routes/index.ts:135 src/views/other/Install.vue:128
 msgid "Install"
 msgid "Install"
 msgstr "Install"
 msgstr "Install"
 
 
@@ -328,19 +356,26 @@ msgstr "Enabled successfully"
 msgid "Leave blank for no change"
 msgid "Leave blank for no change"
 msgstr "Leave blank for no change"
 msgstr "Leave blank for no change"
 
 
+#: src/views/preference/Preference.vue:10
+#: src/views/preference/Preference.vue:11
+msgid "Light"
+msgstr ""
+
 #: src/views/dashboard/DashBoard.vue:141
 #: src/views/dashboard/DashBoard.vue:141
 msgid "Load Averages:"
 msgid "Load Averages:"
 msgstr "Load Averages:"
 msgstr "Load Averages:"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:5
+#: src/views/domain/ngx_conf/LocationEditor.vue:15
+#: src/views/domain/ngx_conf/LocationEditor.vue:8
+#: src/views/domain/ngx_conf/LocationEditor.vue:9
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/routes/index.ts:132 src/views/other/Login.vue:103
+#: src/routes/index.ts:141 src/views/other/Login.vue:103
 msgid "Login"
 msgid "Login"
 msgstr "Login"
 msgstr "Login"
 
 
@@ -352,7 +387,7 @@ msgstr "Login successful"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "Logout successful"
 msgstr "Logout successful"
 
 
-#: src/views/domain/cert/IssueCert.vue:226
+#: src/views/domain/cert/IssueCert.vue:209
 msgid ""
 msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort (default: 9180) before getting the certificate."
 "HTTPChallengePort (default: 9180) before getting the certificate."
@@ -360,15 +395,15 @@ msgstr ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort (default: 9180) before getting the certificate."
 "HTTPChallengePort (default: 9180) before getting the certificate."
 
 
-#: src/routes/index.ts:68
+#: src/routes/index.ts:69
 msgid "Manage Configs"
 msgid "Manage Configs"
 msgstr "Manage Configs"
 msgstr "Manage Configs"
 
 
-#: src/routes/index.ts:43 src/views/domain/DomainList.vue:2
+#: src/routes/index.ts:44 src/views/domain/DomainList.vue:2
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Manage Sites"
 msgstr "Manage Sites"
 
 
-#: src/routes/index.ts:35 src/views/user/User.vue:2
+#: src/routes/index.ts:36 src/views/user/User.vue:2
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Manage Users"
 msgstr "Manage Users"
 
 
@@ -380,12 +415,12 @@ msgstr "Memory"
 msgid "Memory and Storage"
 msgid "Memory and Storage"
 msgstr "Memory and Storage"
 msgstr "Memory and Storage"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:26
-#: src/components/StdDataDisplay/StdTable.vue:18
-#: src/components/StdDataDisplay/StdTable.vue:19
-#: src/components/StdDataDisplay/StdTable.vue:24
-#: src/components/StdDataDisplay/StdTable.vue:34
-#: src/components/StdDataDisplay/StdTable.vue:36
+#: src/components/StdDataDisplay/StdCurd.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:26
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:44
+#: src/components/StdDataDisplay/StdTable.vue:46
 #, fuzzy
 #, fuzzy
 msgid "Modify"
 msgid "Modify"
 msgstr "Modify Config"
 msgstr "Modify Config"
@@ -394,7 +429,8 @@ msgstr "Modify Config"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "Modify Config"
 msgstr "Modify Config"
 
 
-#: src/views/config/Config.vue:12 src/views/domain/DomainList.vue:14
+#: src/views/config/Config.vue:12 src/views/domain/DomainEdit.vue:36
+#: src/views/domain/DomainList.vue:15
 msgid "Name"
 msgid "Name"
 msgstr "Name"
 msgstr "Name"
 
 
@@ -418,18 +454,18 @@ msgstr "Network Total Send"
 msgid "Next"
 msgid "Next"
 msgstr "Next"
 msgstr "Next"
 
 
-#: src/routes/index.ts:93 src/views/nginx_log/NginxLog.vue:2
+#: src/routes/index.ts:94 src/views/nginx_log/NginxLog.vue:2
 msgid "Nginx Log"
 msgid "Nginx Log"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:42
-#: src/views/domain/DomainList.vue:25
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:17
-#: src/views/domain/ngx_conf/LocationEditor.vue:11
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/views/domain/DomainList.vue:24
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
 msgid "No"
 msgid "No"
 msgstr "No"
 msgstr "No"
 
 
-#: src/routes/index.ts:138 src/routes/index.ts:140
+#: src/routes/index.ts:147 src/routes/index.ts:149
 msgid "Not Found"
 msgid "Not Found"
 msgstr "Not Found"
 msgstr "Not Found"
 
 
@@ -437,7 +473,7 @@ msgstr "Not Found"
 msgid "Not Valid Before: %{date}"
 msgid "Not Valid Before: %{date}"
 msgstr "Not Valid Before: %{date}"
 msgstr "Not Valid Before: %{date}"
 
 
-#: src/views/domain/cert/IssueCert.vue:218
+#: src/views/domain/cert/IssueCert.vue:201
 msgid ""
 msgid ""
 "Note: The server_name in the current configuration must be the domain name "
 "Note: The server_name in the current configuration must be the domain name "
 "you need to get the certificate."
 "you need to get the certificate."
@@ -449,10 +485,12 @@ msgstr ""
 msgid "Obtaining certificate"
 msgid "Obtaining certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
+#: src/components/StdDataDisplay/StdBatchEdit.vue:8
+#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainList.vue:25
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
 
 
@@ -472,8 +510,8 @@ msgstr "Password"
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "Password (*)"
 msgstr "Password (*)"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:24
-#: src/views/domain/ngx_conf/LocationEditor.vue:38
+#: src/views/domain/ngx_conf/LocationEditor.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Path"
 msgid "Path"
 msgstr "Path"
 msgstr "Path"
 
 
@@ -489,6 +527,10 @@ msgstr "Please input your password!"
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "Please input your username!"
 msgstr "Please input your username!"
 
 
+#: src/routes/index.ts:117 src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr ""
+
 #: src/language/constants.ts:12
 #: src/language/constants.ts:12
 #, fuzzy
 #, fuzzy
 msgid "Preparing lego configurations"
 msgid "Preparing lego configurations"
@@ -522,11 +564,15 @@ msgstr ""
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr ""
 msgstr ""
 
 
+#: src/components/StdDataDisplay/StdTable.vue:10
 #: src/components/StdDataDisplay/StdTable.vue:15
 #: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
 msgid "Reset"
 msgid "Reset"
 msgstr ""
 msgstr ""
 
 
-#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
+#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:190
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
 msgid "Save"
 msgid "Save"
 msgstr "Save"
 msgstr "Save"
 
 
@@ -540,16 +586,22 @@ msgstr "Save Directive"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "Save error %{msg}"
 msgstr "Save error %{msg}"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:102
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+#, fuzzy
+msgid "Save successfully"
+msgstr "Saved successfully"
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
 #, fuzzy
 #, fuzzy
 msgid "Save Successfully"
 msgid "Save Successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
 #: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
 #: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/domain/DomainEdit.vue:97
 msgid "Saved successfully"
 msgid "Saved successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
+#: src/components/StdDataEntry/components/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 msgid "Selector"
 msgid "Selector"
 msgstr ""
 msgstr ""
@@ -558,11 +610,13 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Send"
 msgstr "Send"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:140
-#: src/components/StdDataDisplay/StdTable.vue:298
-#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:56
-#: src/views/domain/DomainEdit.vue:68 src/views/domain/DomainEdit.vue:77
-#: src/views/domain/DomainEdit.vue:94 src/views/domain/DomainList.vue:78
+#: src/components/StdDataDisplay/StdBatchEdit.vue:43
+#: src/components/StdDataDisplay/StdTable.vue:168
+#: src/components/StdDataDisplay/StdTable.vue:343
+#: src/components/StdDataDisplay/StdTable.vue:463
+#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:100
+#: src/views/domain/DomainEdit.vue:62 src/views/domain/DomainEdit.vue:74
+#: src/views/domain/DomainEdit.vue:83 src/views/domain/DomainList.vue:83
 #: src/views/other/Install.vue:71
 #: src/views/other/Install.vue:71
 msgid "Server error"
 msgid "Server error"
 msgstr "Server error"
 msgstr "Server error"
@@ -575,29 +629,25 @@ msgstr "Server Info"
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "server_name not found in directives"
 msgstr "server_name not found in directives"
 
 
-#: src/views/domain/cert/IssueCert.vue:209 src/views/domain/DomainAdd.vue:112
+#: src/views/domain/cert/IssueCert.vue:195 src/views/domain/DomainAdd.vue:112
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "server_name parameter is required"
 msgstr "server_name parameter is required"
 
 
-#: src/views/domain/cert/IssueCert.vue:212
-#: src/views/domain/cert/IssueCert.vue:35
-msgid "server_name parameters more than one"
-msgstr "server_name parameters more than one"
-
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:6
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 msgid "Single Directive"
 msgid "Single Directive"
 msgstr "Single Directive"
 msgstr "Single Directive"
 
 
-#: src/routes/index.ts:107
+#: src/routes/index.ts:108
 #, fuzzy
 #, fuzzy
 msgid "Site Logs"
 msgid "Site Logs"
 msgstr "Sites List"
 msgstr "Sites List"
 
 
-#: src/routes/index.ts:51
+#: src/routes/index.ts:52
 msgid "Sites List"
 msgid "Sites List"
 msgstr "Sites List"
 msgstr "Sites List"
 
 
-#: src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:24
 msgid "Status"
 msgid "Status"
 msgstr "Status"
 msgstr "Status"
 
 
@@ -618,11 +668,11 @@ msgstr "Swap"
 msgid "Table"
 msgid "Table"
 msgstr "Enabled"
 msgstr "Enabled"
 
 
-#: src/routes/index.ts:85 src/views/pty/Terminal.vue:2
+#: src/routes/index.ts:86 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgid "Terminal"
 msgstr "Terminal"
 msgstr "Terminal"
 
 
-#: src/views/domain/cert/IssueCert.vue:222
+#: src/views/domain/cert/IssueCert.vue:205
 msgid ""
 msgid ""
 "The certificate for the domain will be checked every hour, and will be "
 "The certificate for the domain will be checked every hour, and will be "
 "renewed if it has been more than 1 month since it was last issued."
 "renewed if it has been more than 1 month since it was last issued."
@@ -638,11 +688,20 @@ msgstr "The filename cannot contain the following characters: %{c}"
 msgid "The username or password is incorrect"
 msgid "The username or password is incorrect"
 msgstr ""
 msgstr ""
 
 
-#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:36
+#: src/views/preference/Preference.vue:5
+msgid "Theme"
+msgstr ""
+
+#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:41
 #: src/views/user/User.vue:37
 #: src/views/user/User.vue:37
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Updated at"
 msgstr "Updated at"
 
 
+#: src/components/StdDataDisplay/StdTable.vue:461
+#, fuzzy
+msgid "Updated successfully"
+msgstr "Saved successfully"
+
 #: src/views/dashboard/DashBoard.vue:137
 #: src/views/dashboard/DashBoard.vue:137
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Uptime:"
 msgstr "Uptime:"
@@ -676,8 +735,8 @@ msgstr ""
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:28
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
 msgid "Yes"
 msgid "Yes"
 msgstr "Yes"
 msgstr "Yes"
 
 
@@ -686,6 +745,13 @@ msgctxt "Project"
 msgid "License"
 msgid "License"
 msgstr "License"
 msgstr "License"
 
 
+#, fuzzy
+#~ msgid "Are you sure you want to delete ?"
+#~ msgstr "Are you sure you want to remove this directive?"
+
+#~ msgid "server_name parameters more than one"
+#~ msgstr "server_name parameters more than one"
+
 #~ msgid "404 Not Found"
 #~ msgid "404 Not Found"
 #~ msgstr "404 Not Found"
 #~ msgstr "404 Not Found"
 
 

+ 165 - 100
frontend/src/language/messages.pot

@@ -2,23 +2,23 @@ msgid ""
 msgstr ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 
 
-#: src/routes/index.ts:116
+#: src/routes/index.ts:125
 msgid "About"
 msgid "About"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:99
+#: src/routes/index.ts:100
 #: src/views/domain/ngx_conf/LogEntry.vue:64
 #: src/views/domain/ngx_conf/LogEntry.vue:64
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
 #: src/views/config/Config.vue:24
 #: src/views/config/Config.vue:24
-#: src/views/domain/DomainList.vue:42
+#: src/views/domain/DomainList.vue:47
 #: src/views/user/User.vue:43
 #: src/views/user/User.vue:43
 msgid "Action"
 msgid "Action"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:134
-#: src/components/StdDataDisplay/StdCurd.vue:26
+#: src/components/StdDataDisplay/StdCurd.vue:145
+#: src/components/StdDataDisplay/StdCurd.vue:25
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
 
 
@@ -28,47 +28,55 @@ msgstr ""
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:33
-#: src/views/domain/ngx_conf/LocationEditor.vue:48
+#: src/views/domain/ngx_conf/LocationEditor.vue:45
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
+#: src/views/domain/ngx_conf/LocationEditor.vue:51
+#: src/views/domain/ngx_conf/LocationEditor.vue:60
 msgid "Add Location"
 msgid "Add Location"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:55
+#: src/routes/index.ts:56
 #: src/views/domain/DomainAdd.vue:2
 #: src/views/domain/DomainAdd.vue:2
 msgid "Add Site"
 msgid "Add Site"
 msgstr ""
 msgstr ""
 
 
+#: src/views/domain/DomainEdit.vue:18
 #: src/views/domain/DomainEdit.vue:19
 #: src/views/domain/DomainEdit.vue:19
 msgid "Advance Mode"
 msgid "Advance Mode"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:44
-#: src/views/domain/DomainList.vue:27
-msgid "Are you sure you want to delete ?"
+#: src/components/StdDataDisplay/StdTable.vue:54
+#: src/views/domain/DomainList.vue:26
+msgid "Are you sure you want to delete?"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:27
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:9
+#: src/views/domain/ngx_conf/LocationEditor.vue:19
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/Preference.vue:7
+#: src/views/preference/Preference.vue:8
+msgid "Auto"
+msgstr ""
+
 #: src/views/nginx_log/NginxLog.vue:4
 #: src/views/nginx_log/NginxLog.vue:4
 msgid "Auto Refresh"
 msgid "Auto Refresh"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:72
 msgid "Auto-renewal disabled for %{name}"
 msgid "Auto-renewal disabled for %{name}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:66
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainEdit.vue:178
-#: src/views/nginx_log/NginxLog.vue:172
+#: src/views/domain/DomainEdit.vue:187
+#: src/views/nginx_log/NginxLog.vue:173
 msgid "Back"
 msgid "Back"
 msgstr ""
 msgstr ""
 
 
@@ -80,15 +88,25 @@ msgstr ""
 msgid "Base information"
 msgid "Base information"
 msgstr ""
 msgstr ""
 
 
+#: src/views/domain/DomainEdit.vue:21
 #: src/views/domain/DomainEdit.vue:22
 #: src/views/domain/DomainEdit.vue:22
 msgid "Basic Mode"
 msgid "Basic Mode"
 msgstr ""
 msgstr ""
 
 
+#: src/components/StdDataDisplay/StdBatchEdit.vue:5
+#: src/components/StdDataDisplay/StdTable.vue:12
+#: src/components/StdDataDisplay/StdTable.vue:13
+#: src/components/StdDataDisplay/StdTable.vue:18
+msgid "Batch Modify"
+msgstr ""
+
 #: src/views/other/About.vue:21
 #: src/views/other/About.vue:21
 msgid "Build with"
 msgid "Build with"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/views/config/ConfigEdit.vue:49
 #: src/views/config/ConfigEdit.vue:49
 msgid "Cancel"
 msgid "Cancel"
@@ -106,9 +124,9 @@ msgstr ""
 msgid "Certificate Status"
 msgid "Certificate Status"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
-#: src/views/domain/ngx_conf/LocationEditor.vue:21
-#: src/views/domain/ngx_conf/LocationEditor.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 msgid "Comments"
 msgid "Comments"
 msgstr ""
 msgstr ""
@@ -125,8 +143,8 @@ msgstr ""
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
 msgid "Content"
 msgid "Content"
 msgstr ""
 msgstr ""
 
 
@@ -150,7 +168,12 @@ msgstr ""
 msgid "Creating client facilitates communication with the CA server"
 msgid "Creating client facilitates communication with the CA server"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:27
+#: src/views/preference/Preference.vue:13
+#: src/views/preference/Preference.vue:14
+msgid "Dark"
+msgstr ""
+
+#: src/routes/index.ts:28
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr ""
 msgstr ""
 
 
@@ -158,16 +181,16 @@ msgstr ""
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:366
-#: src/views/domain/DomainList.vue:111
+#: src/components/StdDataDisplay/StdTable.vue:527
+#: src/views/domain/DomainList.vue:115
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
 msgid "Delete ID: %{id}"
 msgid "Delete ID: %{id}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainList.vue:76
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr ""
 msgstr ""
 
 
@@ -180,22 +203,27 @@ msgstr ""
 msgid "Directive"
 msgid "Directive"
 msgstr ""
 msgstr ""
 
 
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 msgid "Directives"
 msgid "Directives"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:74
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/DomainEdit.vue:10
 #: src/views/domain/DomainEdit.vue:10
-#: src/views/domain/DomainList.vue:17
-#: src/views/domain/DomainList.vue:29
+#: src/views/domain/DomainEdit.vue:9
+#: src/views/domain/DomainList.vue:16
+#: src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:7
+#: src/views/domain/DomainList.vue:8
+#: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgid "Disabled"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainEdit.vue:112
-#: src/views/domain/DomainList.vue:64
+#: src/views/domain/DomainEdit.vue:118
+#: src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr ""
 msgstr ""
 
 
@@ -207,16 +235,17 @@ msgstr ""
 msgid "Domain Config Created Successfully"
 msgid "Domain Config Created Successfully"
 msgstr ""
 msgstr ""
 
 
+#: src/views/domain/DomainEdit.vue:4
 #: src/views/domain/DomainEdit.vue:5
 #: src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgid "Edit %{n}"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:77
+#: src/routes/index.ts:78
 #: src/views/config/ConfigEdit.vue:2
 #: src/views/config/ConfigEdit.vue:2
 msgid "Edit Configuration"
 msgid "Edit Configuration"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:59
+#: src/routes/index.ts:60
 msgid "Edit Site"
 msgid "Edit Site"
 msgstr ""
 msgstr ""
 
 
@@ -224,7 +253,7 @@ msgstr ""
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:68
 msgid "Enable auto-renewal failed for %{name}"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr ""
 msgstr ""
 
 
@@ -237,16 +266,19 @@ msgid "Enable TLS"
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/DomainEdit.vue:33
 #: src/views/domain/DomainEdit.vue:33
+#: src/views/domain/DomainEdit.vue:6
 #: src/views/domain/DomainEdit.vue:7
 #: src/views/domain/DomainEdit.vue:7
+#: src/views/domain/DomainList.vue:10
+#: src/views/domain/DomainList.vue:11
 #: src/views/domain/DomainList.vue:12
 #: src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:20
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgid "Enabled"
 msgstr ""
 msgstr ""
 
 
 #: src/views/domain/DomainAdd.vue:46
 #: src/views/domain/DomainAdd.vue:46
-#: src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr ""
 msgstr ""
 
 
@@ -254,7 +286,7 @@ msgstr ""
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:103
+#: src/routes/index.ts:104
 #: src/views/domain/ngx_conf/LogEntry.vue:68
 #: src/views/domain/ngx_conf/LogEntry.vue:68
 msgid "Error Logs"
 msgid "Error Logs"
 msgstr ""
 msgstr ""
@@ -264,17 +296,19 @@ msgid "Expiration Date: %{date}"
 msgstr ""
 msgstr ""
 
 
 #: src/components/StdDataDisplay/StdTable.vue:12
 #: src/components/StdDataDisplay/StdTable.vue:12
-#: src/components/StdDataDisplay/StdTable.vue:317
+#: src/components/StdDataDisplay/StdTable.vue:362
+#: src/components/StdDataDisplay/StdTable.vue:6
+#: src/components/StdDataDisplay/StdTable.vue:7
 msgid "Export"
 msgid "Export"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainEdit.vue:115
-#: src/views/domain/DomainList.vue:68
+#: src/views/domain/DomainEdit.vue:121
+#: src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainEdit.vue:106
-#: src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainEdit.vue:112
+#: src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr ""
 msgstr ""
 
 
@@ -296,6 +330,7 @@ msgstr ""
 msgid "Finished"
 msgid "Finished"
 msgstr ""
 msgstr ""
 
 
+#: src/components/StdDataEntry/components/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 msgid "Generate"
 msgid "Generate"
 msgstr ""
 msgstr ""
@@ -304,15 +339,15 @@ msgstr ""
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:97
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:20
+#: src/routes/index.ts:21
 msgid "Home"
 msgid "Home"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:126
+#: src/routes/index.ts:135
 #: src/views/other/Install.vue:128
 #: src/views/other/Install.vue:128
 msgid "Install"
 msgid "Install"
 msgstr ""
 msgstr ""
@@ -333,19 +368,26 @@ msgstr ""
 msgid "Leave blank for no change"
 msgid "Leave blank for no change"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/Preference.vue:10
+#: src/views/preference/Preference.vue:11
+msgid "Light"
+msgstr ""
+
 #: src/views/dashboard/DashBoard.vue:141
 #: src/views/dashboard/DashBoard.vue:141
 msgid "Load Averages:"
 msgid "Load Averages:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:5
+#: src/views/domain/ngx_conf/LocationEditor.vue:15
+#: src/views/domain/ngx_conf/LocationEditor.vue:8
+#: src/views/domain/ngx_conf/LocationEditor.vue:9
 msgid "Location"
 msgid "Location"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
 msgid "Locations"
 msgid "Locations"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:132
+#: src/routes/index.ts:141
 #: src/views/other/Login.vue:103
 #: src/views/other/Login.vue:103
 msgid "Login"
 msgid "Login"
 msgstr ""
 msgstr ""
@@ -358,20 +400,20 @@ msgstr ""
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:226
+#: src/views/domain/cert/IssueCert.vue:209
 msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate."
 msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate."
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:68
+#: src/routes/index.ts:69
 msgid "Manage Configs"
 msgid "Manage Configs"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:43
+#: src/routes/index.ts:44
 #: src/views/domain/DomainList.vue:2
 #: src/views/domain/DomainList.vue:2
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:35
+#: src/routes/index.ts:36
 #: src/views/user/User.vue:2
 #: src/views/user/User.vue:2
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr ""
 msgstr ""
@@ -384,12 +426,12 @@ msgstr ""
 msgid "Memory and Storage"
 msgid "Memory and Storage"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:26
-#: src/components/StdDataDisplay/StdTable.vue:18
-#: src/components/StdDataDisplay/StdTable.vue:19
-#: src/components/StdDataDisplay/StdTable.vue:24
-#: src/components/StdDataDisplay/StdTable.vue:34
-#: src/components/StdDataDisplay/StdTable.vue:36
+#: src/components/StdDataDisplay/StdCurd.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:26
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:44
+#: src/components/StdDataDisplay/StdTable.vue:46
 msgid "Modify"
 msgid "Modify"
 msgstr ""
 msgstr ""
 
 
@@ -398,7 +440,8 @@ msgid "Modify Config"
 msgstr ""
 msgstr ""
 
 
 #: src/views/config/Config.vue:12
 #: src/views/config/Config.vue:12
-#: src/views/domain/DomainList.vue:14
+#: src/views/domain/DomainEdit.vue:36
+#: src/views/domain/DomainList.vue:15
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
@@ -422,20 +465,20 @@ msgstr ""
 msgid "Next"
 msgid "Next"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:93
+#: src/routes/index.ts:94
 #: src/views/nginx_log/NginxLog.vue:2
 #: src/views/nginx_log/NginxLog.vue:2
 msgid "Nginx Log"
 msgid "Nginx Log"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:42
-#: src/views/domain/DomainList.vue:25
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:17
-#: src/views/domain/ngx_conf/LocationEditor.vue:11
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/views/domain/DomainList.vue:24
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
 msgid "No"
 msgid "No"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:138
-#: src/routes/index.ts:140
+#: src/routes/index.ts:147
+#: src/routes/index.ts:149
 msgid "Not Found"
 msgid "Not Found"
 msgstr ""
 msgstr ""
 
 
@@ -443,7 +486,7 @@ msgstr ""
 msgid "Not Valid Before: %{date}"
 msgid "Not Valid Before: %{date}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:218
+#: src/views/domain/cert/IssueCert.vue:201
 msgid "Note: The server_name in the current configuration must be the domain name you need to get the certificate."
 msgid "Note: The server_name in the current configuration must be the domain name you need to get the certificate."
 msgstr ""
 msgstr ""
 
 
@@ -452,10 +495,12 @@ msgstr ""
 msgid "Obtaining certificate"
 msgid "Obtaining certificate"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
+#: src/components/StdDataDisplay/StdBatchEdit.vue:8
+#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainList.vue:25
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
 
 
@@ -476,8 +521,8 @@ msgstr ""
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:24
-#: src/views/domain/ngx_conf/LocationEditor.vue:38
+#: src/views/domain/ngx_conf/LocationEditor.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Path"
 msgid "Path"
 msgstr ""
 msgstr ""
 
 
@@ -495,6 +540,11 @@ msgstr ""
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr ""
 msgstr ""
 
 
+#: src/routes/index.ts:117
+#: src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr ""
+
 #: src/language/constants.ts:12
 #: src/language/constants.ts:12
 msgid "Preparing lego configurations"
 msgid "Preparing lego configurations"
 msgstr ""
 msgstr ""
@@ -528,12 +578,16 @@ msgstr ""
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr ""
 msgstr ""
 
 
+#: src/components/StdDataDisplay/StdTable.vue:10
 #: src/components/StdDataDisplay/StdTable.vue:15
 #: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
 msgid "Reset"
 msgid "Reset"
 msgstr ""
 msgstr ""
 
 
 #: src/views/config/ConfigEdit.vue:52
 #: src/views/config/ConfigEdit.vue:52
-#: src/views/domain/DomainEdit.vue:181
+#: src/views/domain/DomainEdit.vue:190
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
 msgid "Save"
 msgid "Save"
 msgstr ""
 msgstr ""
 
 
@@ -548,16 +602,21 @@ msgstr ""
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:102
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+msgid "Save successfully"
+msgstr ""
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
 msgid "Save Successfully"
 msgid "Save Successfully"
 msgstr ""
 msgstr ""
 
 
 #: src/views/config/ConfigEdit.vue:34
 #: src/views/config/ConfigEdit.vue:34
 #: src/views/domain/DomainAdd.vue:43
 #: src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/domain/DomainEdit.vue:97
 msgid "Saved successfully"
 msgid "Saved successfully"
 msgstr ""
 msgstr ""
 
 
+#: src/components/StdDataEntry/components/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 msgid "Selector"
 msgid "Selector"
 msgstr ""
 msgstr ""
@@ -567,14 +626,16 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDataDisplay/StdTable.vue:140
-#: src/components/StdDataDisplay/StdTable.vue:298
+#: src/components/StdDataDisplay/StdBatchEdit.vue:43
+#: src/components/StdDataDisplay/StdTable.vue:168
+#: src/components/StdDataDisplay/StdTable.vue:343
+#: src/components/StdDataDisplay/StdTable.vue:463
 #: src/views/config/ConfigEdit.vue:22
 #: src/views/config/ConfigEdit.vue:22
-#: src/views/domain/DomainEdit.vue:56
-#: src/views/domain/DomainEdit.vue:68
-#: src/views/domain/DomainEdit.vue:77
-#: src/views/domain/DomainEdit.vue:94
-#: src/views/domain/DomainList.vue:78
+#: src/views/domain/DomainEdit.vue:100
+#: src/views/domain/DomainEdit.vue:62
+#: src/views/domain/DomainEdit.vue:74
+#: src/views/domain/DomainEdit.vue:83
+#: src/views/domain/DomainList.vue:83
 #: src/views/other/Install.vue:71
 #: src/views/other/Install.vue:71
 msgid "Server error"
 msgid "Server error"
 msgstr ""
 msgstr ""
@@ -587,29 +648,25 @@ msgstr ""
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:209
+#: src/views/domain/cert/IssueCert.vue:195
 #: src/views/domain/DomainAdd.vue:112
 #: src/views/domain/DomainAdd.vue:112
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:212
-#: src/views/domain/cert/IssueCert.vue:35
-msgid "server_name parameters more than one"
-msgstr ""
-
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:6
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 msgid "Single Directive"
 msgid "Single Directive"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:107
+#: src/routes/index.ts:108
 msgid "Site Logs"
 msgid "Site Logs"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:51
+#: src/routes/index.ts:52
 msgid "Sites List"
 msgid "Sites List"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:24
 msgid "Status"
 msgid "Status"
 msgstr ""
 msgstr ""
 
 
@@ -629,12 +686,12 @@ msgstr ""
 msgid "Table"
 msgid "Table"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:85
+#: src/routes/index.ts:86
 #: src/views/pty/Terminal.vue:2
 #: src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgid "Terminal"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/cert/IssueCert.vue:222
+#: src/views/domain/cert/IssueCert.vue:205
 msgid "The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued."
 msgid "The certificate for the domain will be checked every hour, and will be renewed if it has been more than 1 month since it was last issued."
 msgstr ""
 msgstr ""
 
 
@@ -646,12 +703,20 @@ msgstr ""
 msgid "The username or password is incorrect"
 msgid "The username or password is incorrect"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/Preference.vue:5
+msgid "Theme"
+msgstr ""
+
 #: src/views/config/Config.vue:17
 #: src/views/config/Config.vue:17
-#: src/views/domain/DomainList.vue:36
+#: src/views/domain/DomainList.vue:41
 #: src/views/user/User.vue:37
 #: src/views/user/User.vue:37
 msgid "Updated at"
 msgid "Updated at"
 msgstr ""
 msgstr ""
 
 
+#: src/components/StdDataDisplay/StdTable.vue:461
+msgid "Updated successfully"
+msgstr ""
+
 #: src/views/dashboard/DashBoard.vue:137
 #: src/views/dashboard/DashBoard.vue:137
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr ""
 msgstr ""
@@ -688,8 +753,8 @@ msgstr ""
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr ""
 msgstr ""
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:28
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
 msgid "Yes"
 msgid "Yes"
 msgstr ""
 msgstr ""
 
 

File diff suppressed because it is too large
+ 0 - 0
frontend/src/language/translations.json


BIN
frontend/src/language/zh_CN/app.mo


+ 163 - 101
frontend/src/language/zh_CN/app.po

@@ -10,23 +10,23 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: easygettext\n"
 "Generated-By: easygettext\n"
-"X-Generator: Poedit 3.1.1\n"
+"X-Generator: Poedit 3.2.2\n"
 
 
-#: src/routes/index.ts:116
+#: src/routes/index.ts:125
 msgid "About"
 msgid "About"
 msgstr "关于"
 msgstr "关于"
 
 
-#: src/routes/index.ts:99 src/views/domain/ngx_conf/LogEntry.vue:64
+#: src/routes/index.ts:100 src/views/domain/ngx_conf/LogEntry.vue:64
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "访问日志"
 msgstr "访问日志"
 
 
-#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:42
+#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:47
 #: src/views/user/User.vue:43
 #: src/views/user/User.vue:43
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:134
-#: src/components/StdDataDisplay/StdCurd.vue:26
+#: src/components/StdDataDisplay/StdCurd.vue:145
+#: src/components/StdDataDisplay/StdCurd.vue:25
 msgid "Add"
 msgid "Add"
 msgstr "添加"
 msgstr "添加"
 
 
@@ -36,45 +36,51 @@ msgstr "添加"
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "在下面添加指令"
 msgstr "在下面添加指令"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:33
-#: src/views/domain/ngx_conf/LocationEditor.vue:48
+#: src/views/domain/ngx_conf/LocationEditor.vue:45
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
+#: src/views/domain/ngx_conf/LocationEditor.vue:51
+#: src/views/domain/ngx_conf/LocationEditor.vue:60
 msgid "Add Location"
 msgid "Add Location"
 msgstr "添加 Location"
 msgstr "添加 Location"
 
 
-#: src/routes/index.ts:55 src/views/domain/DomainAdd.vue:2
+#: src/routes/index.ts:56 src/views/domain/DomainAdd.vue:2
 msgid "Add Site"
 msgid "Add Site"
 msgstr "添加站点"
 msgstr "添加站点"
 
 
-#: src/views/domain/DomainEdit.vue:19
+#: src/views/domain/DomainEdit.vue:18 src/views/domain/DomainEdit.vue:19
 msgid "Advance Mode"
 msgid "Advance Mode"
 msgstr "高级模式"
 msgstr "高级模式"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:44
-#: src/views/domain/DomainList.vue:27
-msgid "Are you sure you want to delete ?"
+#: src/components/StdDataDisplay/StdTable.vue:54
+#: src/views/domain/DomainList.vue:26
+msgid "Are you sure you want to delete?"
 msgstr "您确定要删除吗?"
 msgstr "您确定要删除吗?"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:27
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "您确定要删除这条指令?"
 msgstr "您确定要删除这条指令?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:9
+#: src/views/domain/ngx_conf/LocationEditor.vue:19
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 msgstr "您确定要删除这个 Location?"
 
 
+#: src/views/preference/Preference.vue:7 src/views/preference/Preference.vue:8
+msgid "Auto"
+msgstr "自动"
+
 #: src/views/nginx_log/NginxLog.vue:4
 #: src/views/nginx_log/NginxLog.vue:4
 msgid "Auto Refresh"
 msgid "Auto Refresh"
 msgstr "自动刷新"
 msgstr "自动刷新"
 
 
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:72
 msgid "Auto-renewal disabled for %{name}"
 msgid "Auto-renewal disabled for %{name}"
 msgstr "成功关闭 %{name} 自动续签"
 msgstr "成功关闭 %{name} 自动续签"
 
 
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:66
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "成功启用 %{name} 自动续签"
 msgstr "成功启用 %{name} 自动续签"
 
 
-#: src/views/domain/DomainEdit.vue:178 src/views/nginx_log/NginxLog.vue:172
+#: src/views/domain/DomainEdit.vue:187 src/views/nginx_log/NginxLog.vue:173
 msgid "Back"
 msgid "Back"
 msgstr "返回"
 msgstr "返回"
 
 
@@ -86,15 +92,24 @@ msgstr "返回首页"
 msgid "Base information"
 msgid "Base information"
 msgstr "基本信息"
 msgstr "基本信息"
 
 
-#: src/views/domain/DomainEdit.vue:22
+#: src/views/domain/DomainEdit.vue:21 src/views/domain/DomainEdit.vue:22
 msgid "Basic Mode"
 msgid "Basic Mode"
 msgstr "基本模式"
 msgstr "基本模式"
 
 
+#: src/components/StdDataDisplay/StdBatchEdit.vue:5
+#: src/components/StdDataDisplay/StdTable.vue:12
+#: src/components/StdDataDisplay/StdTable.vue:13
+#: src/components/StdDataDisplay/StdTable.vue:18
+msgid "Batch Modify"
+msgstr "批量修改"
+
 #: src/views/other/About.vue:21
 #: src/views/other/About.vue:21
 msgid "Build with"
 msgid "Build with"
 msgstr "构建基于"
 msgstr "构建基于"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/views/config/ConfigEdit.vue:49
 #: src/views/config/ConfigEdit.vue:49
 msgid "Cancel"
 msgid "Cancel"
@@ -112,9 +127,9 @@ msgstr "此证书有效"
 msgid "Certificate Status"
 msgid "Certificate Status"
 msgstr "证书状态"
 msgstr "证书状态"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
-#: src/views/domain/ngx_conf/LocationEditor.vue:21
-#: src/views/domain/ngx_conf/LocationEditor.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 msgid "Comments"
 msgid "Comments"
 msgstr "注释"
 msgstr "注释"
@@ -131,8 +146,8 @@ msgstr "配置"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "配置 SSL"
 msgstr "配置 SSL"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
 msgid "Content"
 msgid "Content"
 msgstr "内容"
 msgstr "内容"
 
 
@@ -142,7 +157,7 @@ msgstr "CPU 状态"
 
 
 #: src/views/dashboard/DashBoard.vue:153
 #: src/views/dashboard/DashBoard.vue:153
 msgid "CPU:"
 msgid "CPU:"
-msgstr ""
+msgstr "CPU:"
 
 
 #: src/views/domain/DomainAdd.vue:150
 #: src/views/domain/DomainAdd.vue:150
 msgid "Create Another"
 msgid "Create Another"
@@ -156,7 +171,12 @@ msgstr "创建时间"
 msgid "Creating client facilitates communication with the CA server"
 msgid "Creating client facilitates communication with the CA server"
 msgstr "正在创建客户端用于与 CA 服务器通信"
 msgstr "正在创建客户端用于与 CA 服务器通信"
 
 
-#: src/routes/index.ts:27
+#: src/views/preference/Preference.vue:13
+#: src/views/preference/Preference.vue:14
+msgid "Dark"
+msgstr "深色"
+
+#: src/routes/index.ts:28
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "仪表盘"
 msgstr "仪表盘"
 
 
@@ -164,16 +184,16 @@ msgstr "仪表盘"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "数据库 (可选,默认: database)"
 msgstr "数据库 (可选,默认: database)"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:366
-#: src/views/domain/DomainList.vue:111
+#: src/components/StdDataDisplay/StdTable.vue:527
+#: src/views/domain/DomainList.vue:115
 msgid "Delete"
 msgid "Delete"
 msgstr "删除"
 msgstr "删除"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
 msgid "Delete ID: %{id}"
 msgid "Delete ID: %{id}"
 msgstr "删除 ID: %{id}"
 msgstr "删除 ID: %{id}"
 
 
-#: src/views/domain/DomainList.vue:76
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
 
@@ -185,20 +205,23 @@ msgstr "开发模式"
 msgid "Directive"
 msgid "Directive"
 msgstr "指令"
 msgstr "指令"
 
 
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 msgid "Directives"
 msgid "Directives"
 msgstr "指令"
 msgstr "指令"
 
 
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:74
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "关闭 %{name} 自动续签失败"
 msgstr "关闭 %{name} 自动续签失败"
 
 
-#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainList.vue:17
-#: src/views/domain/DomainList.vue:29
+#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
+#: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgid "Disabled"
 msgstr "禁用"
 msgstr "禁用"
 
 
-#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:64
+#: src/views/domain/DomainEdit.vue:118 src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "禁用成功"
 msgstr "禁用成功"
 
 
@@ -210,15 +233,15 @@ msgstr "磁盘 IO"
 msgid "Domain Config Created Successfully"
 msgid "Domain Config Created Successfully"
 msgstr "域名配置文件创建成功"
 msgstr "域名配置文件创建成功"
 
 
-#: src/views/domain/DomainEdit.vue:5
+#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgid "Edit %{n}"
 msgstr "编辑 %{n}"
 msgstr "编辑 %{n}"
 
 
-#: src/routes/index.ts:77 src/views/config/ConfigEdit.vue:2
+#: src/routes/index.ts:78 src/views/config/ConfigEdit.vue:2
 msgid "Edit Configuration"
 msgid "Edit Configuration"
 msgstr "编辑配置"
 msgstr "编辑配置"
 
 
-#: src/routes/index.ts:59
+#: src/routes/index.ts:60
 msgid "Edit Site"
 msgid "Edit Site"
 msgstr "编辑站点"
 msgstr "编辑站点"
 
 
@@ -226,7 +249,7 @@ msgstr "编辑站点"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 msgstr "邮箱 (*)"
 
 
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:68
 msgid "Enable auto-renewal failed for %{name}"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "启用 %{name} 自动续签失败"
 msgstr "启用 %{name} 自动续签失败"
 
 
@@ -238,14 +261,15 @@ msgstr "启用失败"
 msgid "Enable TLS"
 msgid "Enable TLS"
 msgstr "启用 TLS"
 msgstr "启用 TLS"
 
 
-#: src/views/domain/DomainEdit.vue:33 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:20
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainEdit.vue:33 src/views/domain/DomainEdit.vue:6
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
+#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgid "Enabled"
 msgstr "启用"
 msgstr "启用"
 
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "启用成功"
 msgstr "启用成功"
 
 
@@ -253,7 +277,7 @@ msgstr "启用成功"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "用 Let's Encrypt 对网站进行加密"
 msgstr "用 Let's Encrypt 对网站进行加密"
 
 
-#: src/routes/index.ts:103 src/views/domain/ngx_conf/LogEntry.vue:68
+#: src/routes/index.ts:104 src/views/domain/ngx_conf/LogEntry.vue:68
 msgid "Error Logs"
 msgid "Error Logs"
 msgstr "错误日志"
 msgstr "错误日志"
 
 
@@ -262,15 +286,17 @@ msgid "Expiration Date: %{date}"
 msgstr "过期时间: %{date}"
 msgstr "过期时间: %{date}"
 
 
 #: src/components/StdDataDisplay/StdTable.vue:12
 #: src/components/StdDataDisplay/StdTable.vue:12
-#: src/components/StdDataDisplay/StdTable.vue:317
+#: src/components/StdDataDisplay/StdTable.vue:362
+#: src/components/StdDataDisplay/StdTable.vue:6
+#: src/components/StdDataDisplay/StdTable.vue:7
 msgid "Export"
 msgid "Export"
 msgstr "导出"
 msgstr "导出"
 
 
-#: src/views/domain/DomainEdit.vue:115 src/views/domain/DomainList.vue:68
+#: src/views/domain/DomainEdit.vue:121 src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "禁用失败 %{msg}"
 msgstr "禁用失败 %{msg}"
 
 
-#: src/views/domain/DomainEdit.vue:106 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 msgstr "启用失败 %{msg}"
 
 
@@ -290,6 +316,7 @@ msgstr "过滤"
 msgid "Finished"
 msgid "Finished"
 msgstr "完成"
 msgstr "完成"
 
 
+#: src/components/StdDataEntry/components/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 msgid "Generate"
 msgid "Generate"
 msgstr "生成"
 msgstr "生成"
@@ -298,15 +325,15 @@ msgstr "生成"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "正在生成私钥用于注册账户"
 msgstr "正在生成私钥用于注册账户"
 
 
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:97
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "正在获取证书,请稍等..."
 msgstr "正在获取证书,请稍等..."
 
 
-#: src/routes/index.ts:20
+#: src/routes/index.ts:21
 msgid "Home"
 msgid "Home"
 msgstr "首页"
 msgstr "首页"
 
 
-#: src/routes/index.ts:126 src/views/other/Install.vue:128
+#: src/routes/index.ts:135 src/views/other/Install.vue:128
 msgid "Install"
 msgid "Install"
 msgstr "安装"
 msgstr "安装"
 
 
@@ -326,19 +353,26 @@ msgstr "证书申请成功"
 msgid "Leave blank for no change"
 msgid "Leave blank for no change"
 msgstr "留空表示不修改"
 msgstr "留空表示不修改"
 
 
+#: src/views/preference/Preference.vue:10
+#: src/views/preference/Preference.vue:11
+msgid "Light"
+msgstr "浅色"
+
 #: src/views/dashboard/DashBoard.vue:141
 #: src/views/dashboard/DashBoard.vue:141
 msgid "Load Averages:"
 msgid "Load Averages:"
 msgstr "系统负载:"
 msgstr "系统负载:"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:5
+#: src/views/domain/ngx_conf/LocationEditor.vue:15
+#: src/views/domain/ngx_conf/LocationEditor.vue:8
+#: src/views/domain/ngx_conf/LocationEditor.vue:9
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/routes/index.ts:132 src/views/other/Login.vue:103
+#: src/routes/index.ts:141 src/views/other/Login.vue:103
 msgid "Login"
 msgid "Login"
 msgstr "登录"
 msgstr "登录"
 
 
@@ -350,7 +384,7 @@ msgstr "登录成功"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "登出成功"
 msgstr "登出成功"
 
 
-#: src/views/domain/cert/IssueCert.vue:226
+#: src/views/domain/cert/IssueCert.vue:209
 msgid ""
 msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort (default: 9180) before getting the certificate."
 "HTTPChallengePort (default: 9180) before getting the certificate."
@@ -358,15 +392,15 @@ msgstr ""
 "在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 "
 "在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 "
 "HTTPChallengePort (默认: 9180)"
 "HTTPChallengePort (默认: 9180)"
 
 
-#: src/routes/index.ts:68
+#: src/routes/index.ts:69
 msgid "Manage Configs"
 msgid "Manage Configs"
 msgstr "配置管理"
 msgstr "配置管理"
 
 
-#: src/routes/index.ts:43 src/views/domain/DomainList.vue:2
+#: src/routes/index.ts:44 src/views/domain/DomainList.vue:2
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "网站管理"
 msgstr "网站管理"
 
 
-#: src/routes/index.ts:35 src/views/user/User.vue:2
+#: src/routes/index.ts:36 src/views/user/User.vue:2
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "用户管理"
 msgstr "用户管理"
 
 
@@ -378,12 +412,12 @@ msgstr "内存"
 msgid "Memory and Storage"
 msgid "Memory and Storage"
 msgstr "内存与存储"
 msgstr "内存与存储"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:26
-#: src/components/StdDataDisplay/StdTable.vue:18
-#: src/components/StdDataDisplay/StdTable.vue:19
-#: src/components/StdDataDisplay/StdTable.vue:24
-#: src/components/StdDataDisplay/StdTable.vue:34
-#: src/components/StdDataDisplay/StdTable.vue:36
+#: src/components/StdDataDisplay/StdCurd.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:26
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:44
+#: src/components/StdDataDisplay/StdTable.vue:46
 msgid "Modify"
 msgid "Modify"
 msgstr "修改"
 msgstr "修改"
 
 
@@ -391,7 +425,8 @@ msgstr "修改"
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "修改配置文件"
 msgstr "修改配置文件"
 
 
-#: src/views/config/Config.vue:12 src/views/domain/DomainList.vue:14
+#: src/views/config/Config.vue:12 src/views/domain/DomainEdit.vue:36
+#: src/views/domain/DomainList.vue:15
 msgid "Name"
 msgid "Name"
 msgstr "名称"
 msgstr "名称"
 
 
@@ -415,18 +450,18 @@ msgstr "上传流量"
 msgid "Next"
 msgid "Next"
 msgstr "下一步"
 msgstr "下一步"
 
 
-#: src/routes/index.ts:93 src/views/nginx_log/NginxLog.vue:2
+#: src/routes/index.ts:94 src/views/nginx_log/NginxLog.vue:2
 msgid "Nginx Log"
 msgid "Nginx Log"
 msgstr "Nginx 日志"
 msgstr "Nginx 日志"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:42
-#: src/views/domain/DomainList.vue:25
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:17
-#: src/views/domain/ngx_conf/LocationEditor.vue:11
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/views/domain/DomainList.vue:24
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
-#: src/routes/index.ts:138 src/routes/index.ts:140
+#: src/routes/index.ts:147 src/routes/index.ts:149
 msgid "Not Found"
 msgid "Not Found"
 msgstr "找不到页面"
 msgstr "找不到页面"
 
 
@@ -434,7 +469,7 @@ msgstr "找不到页面"
 msgid "Not Valid Before: %{date}"
 msgid "Not Valid Before: %{date}"
 msgstr "此前无效: %{date}"
 msgstr "此前无效: %{date}"
 
 
-#: src/views/domain/cert/IssueCert.vue:218
+#: src/views/domain/cert/IssueCert.vue:201
 msgid ""
 msgid ""
 "Note: The server_name in the current configuration must be the domain name "
 "Note: The server_name in the current configuration must be the domain name "
 "you need to get the certificate."
 "you need to get the certificate."
@@ -444,16 +479,18 @@ msgstr "注意:当前配置中的 server_name 必须为需要申请证书的
 msgid "Obtaining certificate"
 msgid "Obtaining certificate"
 msgstr "正在获取证书"
 msgstr "正在获取证书"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
+#: src/components/StdDataDisplay/StdBatchEdit.vue:8
+#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainList.vue:25
 msgid "OK"
 msgid "OK"
 msgstr "确定"
 msgstr "确定"
 
 
 #: src/views/dashboard/DashBoard.vue:147
 #: src/views/dashboard/DashBoard.vue:147
 msgid "OS:"
 msgid "OS:"
-msgstr ""
+msgstr "OS:"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
 msgid "Params"
 msgid "Params"
@@ -467,8 +504,8 @@ msgstr "密码"
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "密码 (*)"
 msgstr "密码 (*)"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:24
-#: src/views/domain/ngx_conf/LocationEditor.vue:38
+#: src/views/domain/ngx_conf/LocationEditor.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Path"
 msgid "Path"
 msgstr "路径"
 msgstr "路径"
 
 
@@ -484,6 +521,10 @@ msgstr "请输入您的密码!"
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "请输入您的用户名!"
 msgstr "请输入您的用户名!"
 
 
+#: src/routes/index.ts:117 src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr "偏好设置"
+
 #: src/language/constants.ts:12
 #: src/language/constants.ts:12
 msgid "Preparing lego configurations"
 msgid "Preparing lego configurations"
 msgstr "正在准备 Lego 的配置"
 msgstr "正在准备 Lego 的配置"
@@ -516,11 +557,15 @@ msgstr "正在注册用户"
 msgid "Reloading nginx"
 msgid "Reloading nginx"
 msgstr "正在重载 Nginx"
 msgstr "正在重载 Nginx"
 
 
+#: src/components/StdDataDisplay/StdTable.vue:10
 #: src/components/StdDataDisplay/StdTable.vue:15
 #: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
 msgid "Reset"
 msgid "Reset"
 msgstr "重置"
 msgstr "重置"
 
 
-#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
+#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:190
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
 msgid "Save"
 msgid "Save"
 msgstr "保存"
 msgstr "保存"
 
 
@@ -534,15 +579,20 @@ msgstr "保存指令"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "保存错误 %{msg}"
 msgstr "保存错误 %{msg}"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:102
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+msgid "Save successfully"
+msgstr "保存成功"
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
 msgid "Save Successfully"
 msgid "Save Successfully"
 msgstr "保存成功"
 msgstr "保存成功"
 
 
 #: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
 #: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/domain/DomainEdit.vue:97
 msgid "Saved successfully"
 msgid "Saved successfully"
 msgstr "保存成功"
 msgstr "保存成功"
 
 
+#: src/components/StdDataEntry/components/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 msgid "Selector"
 msgid "Selector"
 msgstr "选择器"
 msgstr "选择器"
@@ -551,11 +601,13 @@ msgstr "选择器"
 msgid "Send"
 msgid "Send"
 msgstr "上传"
 msgstr "上传"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:140
-#: src/components/StdDataDisplay/StdTable.vue:298
-#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:56
-#: src/views/domain/DomainEdit.vue:68 src/views/domain/DomainEdit.vue:77
-#: src/views/domain/DomainEdit.vue:94 src/views/domain/DomainList.vue:78
+#: src/components/StdDataDisplay/StdBatchEdit.vue:43
+#: src/components/StdDataDisplay/StdTable.vue:168
+#: src/components/StdDataDisplay/StdTable.vue:343
+#: src/components/StdDataDisplay/StdTable.vue:463
+#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:100
+#: src/views/domain/DomainEdit.vue:62 src/views/domain/DomainEdit.vue:74
+#: src/views/domain/DomainEdit.vue:83 src/views/domain/DomainList.vue:83
 #: src/views/other/Install.vue:71
 #: src/views/other/Install.vue:71
 msgid "Server error"
 msgid "Server error"
 msgstr "服务器错误"
 msgstr "服务器错误"
@@ -568,28 +620,24 @@ msgstr "服务器信息"
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "未在指令集合中找到 server_name"
 msgstr "未在指令集合中找到 server_name"
 
 
-#: src/views/domain/cert/IssueCert.vue:209 src/views/domain/DomainAdd.vue:112
+#: src/views/domain/cert/IssueCert.vue:195 src/views/domain/DomainAdd.vue:112
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "必须为 server_name 指令指明参数"
 msgstr "必须为 server_name 指令指明参数"
 
 
-#: src/views/domain/cert/IssueCert.vue:212
-#: src/views/domain/cert/IssueCert.vue:35
-msgid "server_name parameters more than one"
-msgstr "server_name 指令包含多个参数"
-
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:6
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 msgid "Single Directive"
 msgid "Single Directive"
 msgstr "单行指令"
 msgstr "单行指令"
 
 
-#: src/routes/index.ts:107
+#: src/routes/index.ts:108
 msgid "Site Logs"
 msgid "Site Logs"
 msgstr "站点列表"
 msgstr "站点列表"
 
 
-#: src/routes/index.ts:51
+#: src/routes/index.ts:52
 msgid "Sites List"
 msgid "Sites List"
 msgstr "站点列表"
 msgstr "站点列表"
 
 
-#: src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:24
 msgid "Status"
 msgid "Status"
 msgstr "状态"
 msgstr "状态"
 
 
@@ -603,17 +651,17 @@ msgstr "主体名称: %{name}"
 
 
 #: src/views/dashboard/DashBoard.vue:36
 #: src/views/dashboard/DashBoard.vue:36
 msgid "Swap"
 msgid "Swap"
-msgstr ""
+msgstr "Swap"
 
 
 #: src/components/StdDataDisplay/StdCurd.vue:3
 #: src/components/StdDataDisplay/StdCurd.vue:3
 msgid "Table"
 msgid "Table"
 msgstr "列表"
 msgstr "列表"
 
 
-#: src/routes/index.ts:85 src/views/pty/Terminal.vue:2
+#: src/routes/index.ts:86 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgid "Terminal"
 msgstr "终端"
 msgstr "终端"
 
 
-#: src/views/domain/cert/IssueCert.vue:222
+#: src/views/domain/cert/IssueCert.vue:205
 msgid ""
 msgid ""
 "The certificate for the domain will be checked every hour, and will be "
 "The certificate for the domain will be checked every hour, and will be "
 "renewed if it has been more than 1 month since it was last issued."
 "renewed if it has been more than 1 month since it was last issued."
@@ -628,11 +676,19 @@ msgstr "文件名不能包含以下字符: %{c}"
 msgid "The username or password is incorrect"
 msgid "The username or password is incorrect"
 msgstr "用户名或密码错误"
 msgstr "用户名或密码错误"
 
 
-#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:36
+#: src/views/preference/Preference.vue:5
+msgid "Theme"
+msgstr "主题"
+
+#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:41
 #: src/views/user/User.vue:37
 #: src/views/user/User.vue:37
 msgid "Updated at"
 msgid "Updated at"
 msgstr "修改时间"
 msgstr "修改时间"
 
 
+#: src/components/StdDataDisplay/StdTable.vue:461
+msgid "Updated successfully"
+msgstr "更新成功"
+
 #: src/views/dashboard/DashBoard.vue:137
 #: src/views/dashboard/DashBoard.vue:137
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "运行时间:"
 msgstr "运行时间:"
@@ -666,8 +722,8 @@ msgstr "正在将证书私钥写入磁盘"
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
 msgstr "正在将证书写入磁盘"
 msgstr "正在将证书写入磁盘"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:28
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
 msgid "Yes"
 msgid "Yes"
 msgstr "是的"
 msgstr "是的"
 
 
@@ -676,6 +732,12 @@ msgctxt "Project"
 msgid "License"
 msgid "License"
 msgstr "开源许可"
 msgstr "开源许可"
 
 
+#~ msgid "Are you sure you want to delete ?"
+#~ msgstr "您确定要删除吗?"
+
+#~ msgid "server_name parameters more than one"
+#~ msgstr "server_name 指令包含多个参数"
+
 #~ msgid "All logs"
 #~ msgid "All logs"
 #~ msgstr "所有日志"
 #~ msgstr "所有日志"
 
 

BIN
frontend/src/language/zh_TW/app.mo


+ 199 - 150
frontend/src/language/zh_TW/app.po

@@ -11,25 +11,25 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: easygettext\n"
 "Generated-By: easygettext\n"
-"X-Generator: Poedit 2.2\n"
+"X-Generator: Poedit 3.2.2\n"
 
 
-#: src/routes/index.ts:116
+#: src/routes/index.ts:125
 msgid "About"
 msgid "About"
 msgstr "關於"
 msgstr "關於"
 
 
-#: src/routes/index.ts:99 src/views/domain/ngx_conf/LogEntry.vue:64
+#: src/routes/index.ts:100 src/views/domain/ngx_conf/LogEntry.vue:64
 msgid "Access Logs"
 msgid "Access Logs"
-msgstr ""
+msgstr "訪問日誌"
 
 
-#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:42
+#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:47
 #: src/views/user/User.vue:43
 #: src/views/user/User.vue:43
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:134
-#: src/components/StdDataDisplay/StdCurd.vue:26
+#: src/components/StdDataDisplay/StdCurd.vue:145
+#: src/components/StdDataDisplay/StdCurd.vue:25
 msgid "Add"
 msgid "Add"
-msgstr ""
+msgstr "新增"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:31
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:31
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
@@ -37,68 +37,80 @@ msgstr ""
 msgid "Add Directive Below"
 msgid "Add Directive Below"
 msgstr "在下面新增指令"
 msgstr "在下面新增指令"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:33
-#: src/views/domain/ngx_conf/LocationEditor.vue:48
+#: src/views/domain/ngx_conf/LocationEditor.vue:45
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
+#: src/views/domain/ngx_conf/LocationEditor.vue:51
+#: src/views/domain/ngx_conf/LocationEditor.vue:60
 msgid "Add Location"
 msgid "Add Location"
 msgstr "新增 Location"
 msgstr "新增 Location"
 
 
-#: src/routes/index.ts:55 src/views/domain/DomainAdd.vue:2
+#: src/routes/index.ts:56 src/views/domain/DomainAdd.vue:2
 msgid "Add Site"
 msgid "Add Site"
 msgstr "新增站點"
 msgstr "新增站點"
 
 
-#: src/views/domain/DomainEdit.vue:19
+#: src/views/domain/DomainEdit.vue:18 src/views/domain/DomainEdit.vue:19
 msgid "Advance Mode"
 msgid "Advance Mode"
 msgstr "高階模式"
 msgstr "高階模式"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:44
-#: src/views/domain/DomainList.vue:27
-#, fuzzy
-msgid "Are you sure you want to delete ?"
-msgstr "您确定要删除?"
+#: src/components/StdDataDisplay/StdTable.vue:54
+#: src/views/domain/DomainList.vue:26
+msgid "Are you sure you want to delete?"
+msgstr "你確定你要刪除?"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:27
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "您確定要刪除這條指令?"
 msgstr "您確定要刪除這條指令?"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:9
-#, fuzzy
+#: src/views/domain/ngx_conf/LocationEditor.vue:19
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
-msgstr "您確定要刪除這條指令?"
+msgstr "您確定要刪除此 Location 嗎?"
+
+#: src/views/preference/Preference.vue:7 src/views/preference/Preference.vue:8
+msgid "Auto"
+msgstr "自動"
 
 
 #: src/views/nginx_log/NginxLog.vue:4
 #: src/views/nginx_log/NginxLog.vue:4
 msgid "Auto Refresh"
 msgid "Auto Refresh"
-msgstr ""
+msgstr "自動刷新"
 
 
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:72
 msgid "Auto-renewal disabled for %{name}"
 msgid "Auto-renewal disabled for %{name}"
 msgstr "已關閉 %{name} 自動續簽"
 msgstr "已關閉 %{name} 自動續簽"
 
 
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:66
 msgid "Auto-renewal enabled for %{name}"
 msgid "Auto-renewal enabled for %{name}"
 msgstr "已啟用 %{name} 自動續簽"
 msgstr "已啟用 %{name} 自動續簽"
 
 
-#: src/views/domain/DomainEdit.vue:178 src/views/nginx_log/NginxLog.vue:172
+#: src/views/domain/DomainEdit.vue:187 src/views/nginx_log/NginxLog.vue:173
 msgid "Back"
 msgid "Back"
 msgstr "返回"
 msgstr "返回"
 
 
 #: src/views/other/Error.vue:12
 #: src/views/other/Error.vue:12
-#, fuzzy
 msgid "Back Home"
 msgid "Back Home"
-msgstr "回"
+msgstr "回到首頁"
 
 
 #: src/views/domain/DomainAdd.vue:5
 #: src/views/domain/DomainAdd.vue:5
 msgid "Base information"
 msgid "Base information"
 msgstr "基本訊息"
 msgstr "基本訊息"
 
 
-#: src/views/domain/DomainEdit.vue:22
+#: src/views/domain/DomainEdit.vue:21 src/views/domain/DomainEdit.vue:22
 msgid "Basic Mode"
 msgid "Basic Mode"
 msgstr "基本模式"
 msgstr "基本模式"
 
 
+#: src/components/StdDataDisplay/StdBatchEdit.vue:5
+#: src/components/StdDataDisplay/StdTable.vue:12
+#: src/components/StdDataDisplay/StdTable.vue:13
+#: src/components/StdDataDisplay/StdTable.vue:18
+msgid "Batch Modify"
+msgstr "批量修改"
+
 #: src/views/other/About.vue:21
 #: src/views/other/About.vue:21
 msgid "Build with"
 msgid "Build with"
 msgstr "構建基於"
 msgstr "構建基於"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/components/StdDataEntry/compontents/StdSelector.vue:11
 #: src/views/config/ConfigEdit.vue:49
 #: src/views/config/ConfigEdit.vue:49
 msgid "Cancel"
 msgid "Cancel"
@@ -116,9 +128,9 @@ msgstr "此憑證有效"
 msgid "Certificate Status"
 msgid "Certificate Status"
 msgstr "憑證狀態"
 msgstr "憑證狀態"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
-#: src/views/domain/ngx_conf/LocationEditor.vue:21
-#: src/views/domain/ngx_conf/LocationEditor.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 #: src/views/domain/ngx_conf/NgxConfigEditor.vue:175
 msgid "Comments"
 msgid "Comments"
 msgstr "註釋"
 msgstr "註釋"
@@ -135,8 +147,8 @@ msgstr "配置"
 msgid "Configure SSL"
 msgid "Configure SSL"
 msgstr "配置 SSL"
 msgstr "配置 SSL"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
 msgid "Content"
 msgid "Content"
 msgstr "內容"
 msgstr "內容"
 
 
@@ -158,9 +170,14 @@ msgstr "建立時間"
 
 
 #: src/language/constants.ts:13
 #: src/language/constants.ts:13
 msgid "Creating client facilitates communication with the CA server"
 msgid "Creating client facilitates communication with the CA server"
-msgstr ""
+msgstr "創建客戶端方便與CA服務器通信"
 
 
-#: src/routes/index.ts:27
+#: src/views/preference/Preference.vue:13
+#: src/views/preference/Preference.vue:14
+msgid "Dark"
+msgstr "深色"
+
+#: src/routes/index.ts:28
 msgid "Dashboard"
 msgid "Dashboard"
 msgstr "儀表盤"
 msgstr "儀表盤"
 
 
@@ -168,19 +185,18 @@ msgstr "儀表盤"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "資料庫 (可選,預設: database)"
 msgstr "資料庫 (可選,預設: database)"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:366
-#: src/views/domain/DomainList.vue:111
+#: src/components/StdDataDisplay/StdTable.vue:527
+#: src/views/domain/DomainList.vue:115
 msgid "Delete"
 msgid "Delete"
-msgstr ""
+msgstr "刪除"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
 msgid "Delete ID: %{id}"
 msgid "Delete ID: %{id}"
 msgstr "刪除 ID: %{id}"
 msgstr "刪除 ID: %{id}"
 
 
-#: src/views/domain/DomainList.vue:76
-#, fuzzy
+#: src/views/domain/DomainList.vue:81
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
-msgstr "刪除 ID: %{id}"
+msgstr "刪除站點:%{site_name}"
 
 
 #: src/views/other/About.vue:7 src/views/other/About.vue:8
 #: src/views/other/About.vue:7 src/views/other/About.vue:8
 msgid "Development Mode"
 msgid "Development Mode"
@@ -190,20 +206,23 @@ msgstr "開發模式"
 msgid "Directive"
 msgid "Directive"
 msgstr "指令"
 msgstr "指令"
 
 
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 #: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
 msgid "Directives"
 msgid "Directives"
 msgstr "指令"
 msgstr "指令"
 
 
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:74
 msgid "Disable auto-renewal failed for %{name}"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "關閉 %{name} 自動續簽失敗"
 msgstr "關閉 %{name} 自動續簽失敗"
 
 
-#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainList.vue:17
-#: src/views/domain/DomainList.vue:29
+#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
+#: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgid "Disabled"
 msgstr "禁用"
 msgstr "禁用"
 
 
-#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:64
+#: src/views/domain/DomainEdit.vue:118 src/views/domain/DomainList.vue:69
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "禁用成功"
 msgstr "禁用成功"
 
 
@@ -215,15 +234,15 @@ msgstr "磁碟 IO"
 msgid "Domain Config Created Successfully"
 msgid "Domain Config Created Successfully"
 msgstr "域名配置文件創建成功"
 msgstr "域名配置文件創建成功"
 
 
-#: src/views/domain/DomainEdit.vue:5
+#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgid "Edit %{n}"
 msgstr "編輯 %{n}"
 msgstr "編輯 %{n}"
 
 
-#: src/routes/index.ts:77 src/views/config/ConfigEdit.vue:2
+#: src/routes/index.ts:78 src/views/config/ConfigEdit.vue:2
 msgid "Edit Configuration"
 msgid "Edit Configuration"
 msgstr "編輯配置"
 msgstr "編輯配置"
 
 
-#: src/routes/index.ts:59
+#: src/routes/index.ts:60
 msgid "Edit Site"
 msgid "Edit Site"
 msgstr "編輯站點"
 msgstr "編輯站點"
 
 
@@ -231,7 +250,7 @@ msgstr "編輯站點"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "郵箱 (*)"
 msgstr "郵箱 (*)"
 
 
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:68
 msgid "Enable auto-renewal failed for %{name}"
 msgid "Enable auto-renewal failed for %{name}"
 msgstr "啟用 %{name} 自動續簽失敗"
 msgstr "啟用 %{name} 自動續簽失敗"
 
 
@@ -243,14 +262,15 @@ msgstr "啟用失敗"
 msgid "Enable TLS"
 msgid "Enable TLS"
 msgstr "啟用 TLS"
 msgstr "啟用 TLS"
 
 
-#: src/views/domain/DomainEdit.vue:33 src/views/domain/DomainEdit.vue:7
-#: src/views/domain/DomainList.vue:12 src/views/domain/DomainList.vue:20
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainEdit.vue:33 src/views/domain/DomainEdit.vue:6
+#: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
+#: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
 msgid "Enabled"
 msgid "Enabled"
 msgstr "啟用"
 msgstr "啟用"
 
 
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "啟用成功"
 msgstr "啟用成功"
 
 
@@ -258,30 +278,32 @@ msgstr "啟用成功"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "用 Let's Encrypt 對網站進行加密"
 msgstr "用 Let's Encrypt 對網站進行加密"
 
 
-#: src/routes/index.ts:103 src/views/domain/ngx_conf/LogEntry.vue:68
+#: src/routes/index.ts:104 src/views/domain/ngx_conf/LogEntry.vue:68
 msgid "Error Logs"
 msgid "Error Logs"
-msgstr ""
+msgstr "錯誤日志"
 
 
 #: src/views/domain/cert/CertInfo.vue:17
 #: src/views/domain/cert/CertInfo.vue:17
 msgid "Expiration Date: %{date}"
 msgid "Expiration Date: %{date}"
 msgstr "過期時間: %{date}"
 msgstr "過期時間: %{date}"
 
 
 #: src/components/StdDataDisplay/StdTable.vue:12
 #: src/components/StdDataDisplay/StdTable.vue:12
-#: src/components/StdDataDisplay/StdTable.vue:317
+#: src/components/StdDataDisplay/StdTable.vue:362
+#: src/components/StdDataDisplay/StdTable.vue:6
+#: src/components/StdDataDisplay/StdTable.vue:7
 msgid "Export"
 msgid "Export"
-msgstr ""
+msgstr "導出"
 
 
-#: src/views/domain/DomainEdit.vue:115 src/views/domain/DomainList.vue:68
+#: src/views/domain/DomainEdit.vue:121 src/views/domain/DomainList.vue:73
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "禁用失敗 %{msg}"
 msgstr "禁用失敗 %{msg}"
 
 
-#: src/views/domain/DomainEdit.vue:106 src/views/domain/DomainList.vue:58
+#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:63
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "啟用失敗 %{msg}"
 msgstr "啟用失敗 %{msg}"
 
 
 #: src/language/constants.ts:9
 #: src/language/constants.ts:9
 msgid "Failed to get certificate information"
 msgid "Failed to get certificate information"
-msgstr ""
+msgstr "獲取證書信息失敗"
 
 
 #: src/views/other/Error.vue:3 src/views/other/Error.vue:4
 #: src/views/other/Error.vue:3 src/views/other/Error.vue:4
 msgid "File Not Found"
 msgid "File Not Found"
@@ -289,63 +311,69 @@ msgstr "未找到檔案"
 
 
 #: src/views/nginx_log/NginxLog.vue:7
 #: src/views/nginx_log/NginxLog.vue:7
 msgid "Filter"
 msgid "Filter"
-msgstr ""
+msgstr "篩選"
 
 
 #: src/language/constants.ts:20 src/views/domain/DomainAdd.vue:7
 #: src/language/constants.ts:20 src/views/domain/DomainAdd.vue:7
 msgid "Finished"
 msgid "Finished"
 msgstr "完成"
 msgstr "完成"
 
 
+#: src/components/StdDataEntry/components/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 #: src/components/StdDataEntry/compontents/StdPassword.vue:42
 msgid "Generate"
 msgid "Generate"
-msgstr ""
+msgstr "生成"
 
 
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
-msgstr ""
+msgstr "生成註冊賬號私鑰"
 
 
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:97
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "正在獲取憑證,請稍等..."
 msgstr "正在獲取憑證,請稍等..."
 
 
-#: src/routes/index.ts:20
+#: src/routes/index.ts:21
 msgid "Home"
 msgid "Home"
 msgstr "首頁"
 msgstr "首頁"
 
 
-#: src/routes/index.ts:126 src/views/other/Install.vue:128
+#: src/routes/index.ts:135 src/views/other/Install.vue:128
 msgid "Install"
 msgid "Install"
 msgstr "安裝"
 msgstr "安裝"
 
 
 #: src/views/other/Install.vue:68
 #: src/views/other/Install.vue:68
-#, fuzzy
 msgid "Install successfully"
 msgid "Install successfully"
-msgstr "啟用成功"
+msgstr "安裝成功"
 
 
 #: src/views/domain/cert/CertInfo.vue:15
 #: src/views/domain/cert/CertInfo.vue:15
 msgid "Intermediate Certification Authorities: %{issuer}"
 msgid "Intermediate Certification Authorities: %{issuer}"
 msgstr "中級憑證頒發機構: %{issuer}"
 msgstr "中級憑證頒發機構: %{issuer}"
 
 
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
-#, fuzzy
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
-msgstr "啟用成功"
+msgstr "頒發證書成功"
 
 
 #: src/views/user/User.vue:26
 #: src/views/user/User.vue:26
 msgid "Leave blank for no change"
 msgid "Leave blank for no change"
 msgstr "留空表示不修改"
 msgstr "留空表示不修改"
 
 
+#: src/views/preference/Preference.vue:10
+#: src/views/preference/Preference.vue:11
+msgid "Light"
+msgstr "淺色"
+
 #: src/views/dashboard/DashBoard.vue:141
 #: src/views/dashboard/DashBoard.vue:141
 msgid "Load Averages:"
 msgid "Load Averages:"
 msgstr "系統負載:"
 msgstr "系統負載:"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:5
+#: src/views/domain/ngx_conf/LocationEditor.vue:15
+#: src/views/domain/ngx_conf/LocationEditor.vue:8
+#: src/views/domain/ngx_conf/LocationEditor.vue:9
 msgid "Location"
 msgid "Location"
 msgstr "Location"
 msgstr "Location"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
 msgid "Locations"
 msgid "Locations"
 msgstr "Locations"
 msgstr "Locations"
 
 
-#: src/routes/index.ts:132 src/views/other/Login.vue:103
+#: src/routes/index.ts:141 src/views/other/Login.vue:103
 msgid "Login"
 msgid "Login"
 msgstr "登入"
 msgstr "登入"
 
 
@@ -357,24 +385,23 @@ msgstr "登入成功"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "登出成功"
 msgstr "登出成功"
 
 
-#: src/views/domain/cert/IssueCert.vue:226
-#, fuzzy
+#: src/views/domain/cert/IssueCert.vue:209
 msgid ""
 msgid ""
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "Make sure you have configured a reverse proxy for .well-known directory to "
 "HTTPChallengePort (default: 9180) before getting the certificate."
 "HTTPChallengePort (default: 9180) before getting the certificate."
 msgstr ""
 msgstr ""
-"在獲取證前,請確保配置檔案中已將 .well-known 目錄反向代理到 "
+"在獲取證前,請確保配置檔案中已將 .well-known 目錄反向代理到 "
 "HTTPChallengePort (預設: 9180)"
 "HTTPChallengePort (預設: 9180)"
 
 
-#: src/routes/index.ts:68
+#: src/routes/index.ts:69
 msgid "Manage Configs"
 msgid "Manage Configs"
 msgstr "配置管理"
 msgstr "配置管理"
 
 
-#: src/routes/index.ts:43 src/views/domain/DomainList.vue:2
+#: src/routes/index.ts:44 src/views/domain/DomainList.vue:2
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "網站管理"
 msgstr "網站管理"
 
 
-#: src/routes/index.ts:35 src/views/user/User.vue:2
+#: src/routes/index.ts:36 src/views/user/User.vue:2
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "使用者管理"
 msgstr "使用者管理"
 
 
@@ -386,21 +413,21 @@ msgstr "記憶體"
 msgid "Memory and Storage"
 msgid "Memory and Storage"
 msgstr "記憶體和存儲"
 msgstr "記憶體和存儲"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:26
-#: src/components/StdDataDisplay/StdTable.vue:18
-#: src/components/StdDataDisplay/StdTable.vue:19
-#: src/components/StdDataDisplay/StdTable.vue:24
-#: src/components/StdDataDisplay/StdTable.vue:34
-#: src/components/StdDataDisplay/StdTable.vue:36
-#, fuzzy
+#: src/components/StdDataDisplay/StdCurd.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:25
+#: src/components/StdDataDisplay/StdTable.vue:26
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:44
+#: src/components/StdDataDisplay/StdTable.vue:46
 msgid "Modify"
 msgid "Modify"
-msgstr "修改配置"
+msgstr "修改"
 
 
 #: src/views/domain/DomainAdd.vue:147
 #: src/views/domain/DomainAdd.vue:147
 msgid "Modify Config"
 msgid "Modify Config"
 msgstr "修改配置"
 msgstr "修改配置"
 
 
-#: src/views/config/Config.vue:12 src/views/domain/DomainList.vue:14
+#: src/views/config/Config.vue:12 src/views/domain/DomainEdit.vue:36
+#: src/views/domain/DomainList.vue:15
 msgid "Name"
 msgid "Name"
 msgstr "名稱"
 msgstr "名稱"
 
 
@@ -424,18 +451,18 @@ msgstr "上傳流量"
 msgid "Next"
 msgid "Next"
 msgstr "下一步"
 msgstr "下一步"
 
 
-#: src/routes/index.ts:93 src/views/nginx_log/NginxLog.vue:2
+#: src/routes/index.ts:94 src/views/nginx_log/NginxLog.vue:2
 msgid "Nginx Log"
 msgid "Nginx Log"
-msgstr ""
+msgstr "Nginx 日誌"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:42
-#: src/views/domain/DomainList.vue:25
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:17
-#: src/views/domain/ngx_conf/LocationEditor.vue:11
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/views/domain/DomainList.vue:24
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
-#: src/routes/index.ts:138 src/routes/index.ts:140
+#: src/routes/index.ts:147 src/routes/index.ts:149
 msgid "Not Found"
 msgid "Not Found"
 msgstr "找不到頁面"
 msgstr "找不到頁面"
 
 
@@ -443,21 +470,22 @@ msgstr "找不到頁面"
 msgid "Not Valid Before: %{date}"
 msgid "Not Valid Before: %{date}"
 msgstr "此前無效: %{date}"
 msgstr "此前無效: %{date}"
 
 
-#: src/views/domain/cert/IssueCert.vue:218
-#, fuzzy
+#: src/views/domain/cert/IssueCert.vue:201
 msgid ""
 msgid ""
 "Note: The server_name in the current configuration must be the domain name "
 "Note: The server_name in the current configuration must be the domain name "
 "you need to get the certificate."
 "you need to get the certificate."
-msgstr "注意:當前配置中的 server_name 必須為需要申請證的域名。"
+msgstr "注意:當前配置中的 server_name 必須為需要申請證的域名。"
 
 
 #: src/language/constants.ts:16 src/views/domain/cert/IssueCert.vue:3
 #: src/language/constants.ts:16 src/views/domain/cert/IssueCert.vue:3
 msgid "Obtaining certificate"
 msgid "Obtaining certificate"
-msgstr ""
+msgstr "正在獲取證書,請稍等..."
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
+#: src/components/StdDataDisplay/StdBatchEdit.vue:8
+#: src/components/StdDataDisplay/StdCurd.vue:28
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataEntry/components/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
 #: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainList.vue:25
 msgid "OK"
 msgid "OK"
 msgstr "確定"
 msgstr "確定"
 
 
@@ -477,8 +505,8 @@ msgstr "密碼"
 msgid "Password (*)"
 msgid "Password (*)"
 msgstr "密碼 (*)"
 msgstr "密碼 (*)"
 
 
-#: src/views/domain/ngx_conf/LocationEditor.vue:24
-#: src/views/domain/ngx_conf/LocationEditor.vue:38
+#: src/views/domain/ngx_conf/LocationEditor.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:50
 msgid "Path"
 msgid "Path"
 msgstr "路徑"
 msgstr "路徑"
 
 
@@ -494,18 +522,21 @@ msgstr "請輸入您的密碼!"
 msgid "Please input your username!"
 msgid "Please input your username!"
 msgstr "請輸入您的使用者名稱!"
 msgstr "請輸入您的使用者名稱!"
 
 
+#: src/routes/index.ts:117 src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr "設定"
+
 #: src/language/constants.ts:12
 #: src/language/constants.ts:12
-#, fuzzy
 msgid "Preparing lego configurations"
 msgid "Preparing lego configurations"
-msgstr "配置"
+msgstr "準備 Lego 配置"
 
 
 #: src/language/constants.ts:7
 #: src/language/constants.ts:7
 msgid "Prohibit changing root password in demo"
 msgid "Prohibit changing root password in demo"
-msgstr ""
+msgstr "禁止在demo中修改root密碼"
 
 
 #: src/language/constants.ts:8
 #: src/language/constants.ts:8
 msgid "Prohibit deleting the default user"
 msgid "Prohibit deleting the default user"
-msgstr ""
+msgstr "禁止刪除默認用戶"
 
 
 #: src/views/other/About.vue:19
 #: src/views/other/About.vue:19
 msgid "Project Team"
 msgid "Project Team"
@@ -521,17 +552,21 @@ msgstr "下載"
 
 
 #: src/language/constants.ts:15
 #: src/language/constants.ts:15
 msgid "Registering user"
 msgid "Registering user"
-msgstr ""
+msgstr "註冊用戶"
 
 
 #: src/language/constants.ts:19
 #: src/language/constants.ts:19
 msgid "Reloading nginx"
 msgid "Reloading nginx"
-msgstr ""
+msgstr "重载 Nginx"
 
 
+#: src/components/StdDataDisplay/StdTable.vue:10
 #: src/components/StdDataDisplay/StdTable.vue:15
 #: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
 msgid "Reset"
 msgid "Reset"
-msgstr ""
+msgstr "重設"
 
 
-#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
+#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:190
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
 msgid "Save"
 msgid "Save"
 msgstr "儲存"
 msgstr "儲存"
 
 
@@ -545,29 +580,35 @@ msgstr "儲存指令"
 msgid "Save error %{msg}"
 msgid "Save error %{msg}"
 msgstr "儲存錯誤 %{msg}"
 msgstr "儲存錯誤 %{msg}"
 
 
-#: src/components/StdDataDisplay/StdCurd.vue:102
-#, fuzzy
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+msgid "Save successfully"
+msgstr "保存成功"
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
 msgid "Save Successfully"
 msgid "Save Successfully"
-msgstr "儲存成功"
+msgstr "存成功"
 
 
 #: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
 #: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/domain/DomainEdit.vue:97
 msgid "Saved successfully"
 msgid "Saved successfully"
 msgstr "儲存成功"
 msgstr "儲存成功"
 
 
+#: src/components/StdDataEntry/components/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 #: src/components/StdDataEntry/compontents/StdSelector.vue:13
 msgid "Selector"
 msgid "Selector"
-msgstr ""
+msgstr "選擇器"
 
 
 #: src/views/dashboard/DashBoard.vue:21 src/views/dashboard/DashBoard.vue:85
 #: src/views/dashboard/DashBoard.vue:21 src/views/dashboard/DashBoard.vue:85
 msgid "Send"
 msgid "Send"
 msgstr "上傳"
 msgstr "上傳"
 
 
-#: src/components/StdDataDisplay/StdTable.vue:140
-#: src/components/StdDataDisplay/StdTable.vue:298
-#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:56
-#: src/views/domain/DomainEdit.vue:68 src/views/domain/DomainEdit.vue:77
-#: src/views/domain/DomainEdit.vue:94 src/views/domain/DomainList.vue:78
+#: src/components/StdDataDisplay/StdBatchEdit.vue:43
+#: src/components/StdDataDisplay/StdTable.vue:168
+#: src/components/StdDataDisplay/StdTable.vue:343
+#: src/components/StdDataDisplay/StdTable.vue:463
+#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:100
+#: src/views/domain/DomainEdit.vue:62 src/views/domain/DomainEdit.vue:74
+#: src/views/domain/DomainEdit.vue:83 src/views/domain/DomainList.vue:83
 #: src/views/other/Install.vue:71
 #: src/views/other/Install.vue:71
 msgid "Server error"
 msgid "Server error"
 msgstr "伺服器錯誤"
 msgstr "伺服器錯誤"
@@ -580,29 +621,24 @@ msgstr "伺服器資訊"
 msgid "server_name not found in directives"
 msgid "server_name not found in directives"
 msgstr "未在指令集合中找到 server_name"
 msgstr "未在指令集合中找到 server_name"
 
 
-#: src/views/domain/cert/IssueCert.vue:209 src/views/domain/DomainAdd.vue:112
+#: src/views/domain/cert/IssueCert.vue:195 src/views/domain/DomainAdd.vue:112
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "必須為 server_name 指令指明參數"
 msgstr "必須為 server_name 指令指明參數"
 
 
-#: src/views/domain/cert/IssueCert.vue:212
-#: src/views/domain/cert/IssueCert.vue:35
-msgid "server_name parameters more than one"
-msgstr "server_name 指令包含多個參數"
-
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:6
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 #: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:7
 msgid "Single Directive"
 msgid "Single Directive"
 msgstr "單行指令"
 msgstr "單行指令"
 
 
-#: src/routes/index.ts:107
-#, fuzzy
+#: src/routes/index.ts:108
 msgid "Site Logs"
 msgid "Site Logs"
-msgstr "站點列表"
+msgstr "網站日誌"
 
 
-#: src/routes/index.ts:51
+#: src/routes/index.ts:52
 msgid "Sites List"
 msgid "Sites List"
 msgstr "站點列表"
 msgstr "站點列表"
 
 
-#: src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:24
 msgid "Status"
 msgid "Status"
 msgstr "狀態"
 msgstr "狀態"
 
 
@@ -619,22 +655,20 @@ msgid "Swap"
 msgstr "交換空間"
 msgstr "交換空間"
 
 
 #: src/components/StdDataDisplay/StdCurd.vue:3
 #: src/components/StdDataDisplay/StdCurd.vue:3
-#, fuzzy
 msgid "Table"
 msgid "Table"
-msgstr "啟用"
+msgstr "表格"
 
 
-#: src/routes/index.ts:85 src/views/pty/Terminal.vue:2
+#: src/routes/index.ts:86 src/views/pty/Terminal.vue:2
 msgid "Terminal"
 msgid "Terminal"
 msgstr "終端"
 msgstr "終端"
 
 
-#: src/views/domain/cert/IssueCert.vue:222
-#, fuzzy
+#: src/views/domain/cert/IssueCert.vue:205
 msgid ""
 msgid ""
 "The certificate for the domain will be checked every hour, and will be "
 "The certificate for the domain will be checked every hour, and will be "
 "renewed if it has been more than 1 month since it was last issued."
 "renewed if it has been more than 1 month since it was last issued."
 msgstr ""
 msgstr ""
-"系統將會每小時檢測一次該域名證,若距離上次簽發已超過1個月,則將自動續簽。"
-"<br/>如果您之前沒有證,請先點選「從 Let's Encrypt 獲取證」。"
+"系統將會每小時檢測一次該域名證,若距離上次簽發已超過1個月,則將自動續簽。"
+"<br/>如果您之前沒有證,請先點選「從 Let's Encrypt 獲取證」。"
 
 
 #: src/views/other/Install.vue:54
 #: src/views/other/Install.vue:54
 msgid "The filename cannot contain the following characters: %{c}"
 msgid "The filename cannot contain the following characters: %{c}"
@@ -642,13 +676,21 @@ msgstr "檔名不能包含以下字元: %{c}"
 
 
 #: src/language/constants.ts:6
 #: src/language/constants.ts:6
 msgid "The username or password is incorrect"
 msgid "The username or password is incorrect"
-msgstr ""
+msgstr "用戶名或密碼不正確"
+
+#: src/views/preference/Preference.vue:5
+msgid "Theme"
+msgstr "外觀樣式"
 
 
-#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:36
+#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:41
 #: src/views/user/User.vue:37
 #: src/views/user/User.vue:37
 msgid "Updated at"
 msgid "Updated at"
 msgstr "修改時間"
 msgstr "修改時間"
 
 
+#: src/components/StdDataDisplay/StdTable.vue:461
+msgid "Updated successfully"
+msgstr "已成功更新"
+
 #: src/views/dashboard/DashBoard.vue:137
 #: src/views/dashboard/DashBoard.vue:137
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "執行時間:"
 msgstr "執行時間:"
@@ -663,7 +705,7 @@ msgstr "使用者名稱 (*)"
 
 
 #: src/language/constants.ts:14
 #: src/language/constants.ts:14
 msgid "Using HTTP01 challenge provider"
 msgid "Using HTTP01 challenge provider"
-msgstr ""
+msgstr "使用 HTTP01 挑戰提供者"
 
 
 #: src/views/domain/cert/IssueCert.vue:26 src/views/domain/DomainAdd.vue:24
 #: src/views/domain/cert/IssueCert.vue:26 src/views/domain/DomainAdd.vue:24
 msgid "Warning"
 msgid "Warning"
@@ -676,14 +718,14 @@ msgstr "寫"
 
 
 #: src/language/constants.ts:18
 #: src/language/constants.ts:18
 msgid "Writing certificate private key to disk"
 msgid "Writing certificate private key to disk"
-msgstr ""
+msgstr "將證書私鑰寫入磁盤"
 
 
 #: src/language/constants.ts:17
 #: src/language/constants.ts:17
 msgid "Writing certificate to disk"
 msgid "Writing certificate to disk"
-msgstr ""
+msgstr "將證書寫入磁盤"
 
 
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:28
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
 msgid "Yes"
 msgid "Yes"
 msgstr "是的"
 msgstr "是的"
 
 
@@ -692,6 +734,13 @@ msgctxt "Project"
 msgid "License"
 msgid "License"
 msgstr "開源軟體授權條款"
 msgstr "開源軟體授權條款"
 
 
+#, fuzzy
+#~ msgid "Are you sure you want to delete ?"
+#~ msgstr "您确定要删除?"
+
+#~ msgid "server_name parameters more than one"
+#~ msgstr "server_name 指令包含多個參數"
+
 #~ msgid "404 Not Found"
 #~ msgid "404 Not Found"
 #~ msgstr "404 未找到頁面"
 #~ msgstr "404 未找到頁面"
 
 

+ 31 - 27
frontend/src/layouts/BaseLayout.vue

@@ -122,37 +122,36 @@ const lang = computed(() => {
 </style>
 </style>
 
 
 <style lang="less">
 <style lang="less">
-@dark: ~"(prefers-color-scheme: dark)";
-
 body {
 body {
     overflow: unset !important;
     overflow: unset !important;
 }
 }
 
 
-@media @dark {
+.dark {
     h1, h2, h3, h4, h5, h6, p {
     h1, h2, h3, h4, h5, h6, p {
         color: #fafafa !important;
         color: #fafafa !important;
     }
     }
 
 
-}
+    .ant-checkbox-indeterminate {
+        .ant-checkbox-inner {
+            background-color: transparent !important;
+        }
+    }
 
 
-.ant-layout-header {
-    padding: 0 !important;
-    background-color: #fff !important;
-    @media @dark {
+    .ant-menu {
+        background: unset !important;
+    }
+
+    .ant-layout-header {
         background-color: #1f1f1f !important;
         background-color: #1f1f1f !important;
     }
     }
-}
 
 
-.ant-card {
-    @media @dark {
+    .ant-card {
         background-color: #1f1f1f !important;
         background-color: #1f1f1f !important;
     }
     }
-}
 
 
-.ant-layout-sider {
-    background-color: #ffffff;
-    @media @dark {
+    .ant-layout-sider {
         background-color: rgb(20, 20, 20) !important;
         background-color: rgb(20, 20, 20) !important;
+
         .ant-layout-sider-trigger {
         .ant-layout-sider-trigger {
             background-color: rgb(20, 20, 20) !important;
             background-color: rgb(20, 20, 20) !important;
         }
         }
@@ -160,8 +159,25 @@ body {
         .ant-menu {
         .ant-menu {
             border-right: 0 !important;
             border-right: 0 !important;
         }
         }
+
+        &.ant-layout-sider-has-trigger {
+            padding-bottom: 0;
+        }
+
+        box-shadow: 2px 0 8px rgba(29, 35, 41, 0.05);
     }
     }
 
 
+}
+
+.ant-layout-header {
+    padding: 0 !important;
+    background-color: #fff !important;
+}
+
+
+.ant-layout-sider {
+    background-color: #ffffff;
+
     &.ant-layout-sider-has-trigger {
     &.ant-layout-sider-has-trigger {
         padding-bottom: 0;
         padding-bottom: 0;
     }
     }
@@ -179,18 +195,6 @@ body {
     }
     }
 }
 }
 
 
-@media @dark {
-    .ant-checkbox-indeterminate {
-        .ant-checkbox-inner {
-            background-color: transparent !important;
-        }
-    }
-
-    .ant-menu {
-        background: unset !important;
-    }
-
-}
 
 
 .ant-table-small {
 .ant-table-small {
     font-size: 13px;
     font-size: 13px;

+ 1 - 1
frontend/src/layouts/HeaderLayout.vue

@@ -55,7 +55,7 @@ function logout() {
     }
     }
 }
 }
 
 
-@media (prefers-color-scheme: dark) {
+.dark {
     .header {
     .header {
         box-shadow: 1px 1px 0 0 #404040;
         box-shadow: 1px 1px 0 0 #404040;
 
 

+ 1 - 0
frontend/src/lib/theme/index.ts

@@ -13,6 +13,7 @@ function changeTheme(theme: string) {
 }
 }
 
 
 export const dark_mode = async (enabled: Boolean) => {
 export const dark_mode = async (enabled: Boolean) => {
+    document.body.setAttribute('class', enabled ? 'dark' : 'light')
     if (enabled) {
     if (enabled) {
         changeTheme((await import('@/dark.less?inline')).default)
         changeTheme((await import('@/dark.less?inline')).default)
         changeCss('--page-bg-color', '#141414')
         changeCss('--page-bg-color', '#141414')

+ 4 - 0
frontend/src/pinia/moudule/settings.ts

@@ -4,6 +4,7 @@ export const useSettingsStore = defineStore('settings', {
     state: () => ({
     state: () => ({
         language: '',
         language: '',
         theme: 'light',
         theme: 'light',
+        preference_theme: 'auto'
     }),
     }),
     getters: {},
     getters: {},
     actions: {
     actions: {
@@ -12,6 +13,9 @@ export const useSettingsStore = defineStore('settings', {
         },
         },
         set_theme(t: string) {
         set_theme(t: string) {
             this.theme = t
             this.theme = t
+        },
+        set_preference_theme(t: string) {
+            this.preference_theme = t
         }
         }
     },
     },
     persist: true
     persist: true

+ 20 - 11
frontend/src/routes/index.ts

@@ -9,7 +9,8 @@ import {
     HomeOutlined,
     HomeOutlined,
     InfoCircleOutlined,
     InfoCircleOutlined,
     UserOutlined,
     UserOutlined,
-    FileTextOutlined
+    FileTextOutlined,
+    SettingOutlined
 } from '@ant-design/icons-vue'
 } from '@ant-design/icons-vue'
 
 
 const {$gettext} = gettext
 const {$gettext} = gettext
@@ -36,7 +37,7 @@ export const routes = [
                 component: () => import('@/views/user/User.vue'),
                 component: () => import('@/views/user/User.vue'),
                 meta: {
                 meta: {
                     icon: UserOutlined
                     icon: UserOutlined
-                },
+                }
             },
             },
             {
             {
                 path: 'domain',
                 path: 'domain',
@@ -49,11 +50,11 @@ export const routes = [
                 children: [{
                 children: [{
                     path: 'list',
                     path: 'list',
                     name: () => $gettext('Sites List'),
                     name: () => $gettext('Sites List'),
-                    component: () => import('@/views/domain/DomainList.vue'),
+                    component: () => import('@/views/domain/DomainList.vue')
                 }, {
                 }, {
                     path: 'add',
                     path: 'add',
                     name: () => $gettext('Add Site'),
                     name: () => $gettext('Add Site'),
-                    component: () => import('@/views/domain/DomainAdd.vue'),
+                    component: () => import('@/views/domain/DomainAdd.vue')
                 }, {
                 }, {
                     path: ':name',
                     path: ':name',
                     name: () => $gettext('Edit Site'),
                     name: () => $gettext('Edit Site'),
@@ -61,7 +62,7 @@ export const routes = [
                     meta: {
                     meta: {
                         hiddenInSidebar: true
                         hiddenInSidebar: true
                     }
                     }
-                },]
+                }]
             },
             },
             {
             {
                 path: 'config',
                 path: 'config',
@@ -78,7 +79,7 @@ export const routes = [
                 component: () => import('@/views/config/ConfigEdit.vue'),
                 component: () => import('@/views/config/ConfigEdit.vue'),
                 meta: {
                 meta: {
                     hiddenInSidebar: true
                     hiddenInSidebar: true
-                },
+                }
             },
             },
             {
             {
                 path: 'terminal',
                 path: 'terminal',
@@ -97,20 +98,28 @@ export const routes = [
                 children: [{
                 children: [{
                     path: 'access',
                     path: 'access',
                     name: () => $gettext('Access Logs'),
                     name: () => $gettext('Access Logs'),
-                    component: () => import('@/views/nginx_log/NginxLog.vue'),
+                    component: () => import('@/views/nginx_log/NginxLog.vue')
                 }, {
                 }, {
                     path: 'error',
                     path: 'error',
                     name: () => $gettext('Error Logs'),
                     name: () => $gettext('Error Logs'),
-                    component: () => import('@/views/nginx_log/NginxLog.vue'),
+                    component: () => import('@/views/nginx_log/NginxLog.vue')
                 }, {
                 }, {
                     path: 'site',
                     path: 'site',
                     name: () => $gettext('Site Logs'),
                     name: () => $gettext('Site Logs'),
                     component: () => import('@/views/nginx_log/NginxLog.vue'),
                     component: () => import('@/views/nginx_log/NginxLog.vue'),
                     meta: {
                     meta: {
                         hiddenInSidebar: true
                         hiddenInSidebar: true
-                    },
+                    }
                 }]
                 }]
             },
             },
+            {
+                path: 'preference',
+                name: () => $gettext('Preference'),
+                component: () => import('@/views/preference/Preference.vue'),
+                meta: {
+                    icon: SettingOutlined
+                }
+            },
             {
             {
                 path: 'about',
                 path: 'about',
                 name: () => $gettext('About'),
                 name: () => $gettext('About'),
@@ -118,7 +127,7 @@ export const routes = [
                 meta: {
                 meta: {
                     icon: InfoCircleOutlined
                     icon: InfoCircleOutlined
                 }
                 }
-            },
+            }
         ]
         ]
     },
     },
     {
     {
@@ -144,7 +153,7 @@ export const routes = [
 const router = createRouter({
 const router = createRouter({
     history: createWebHistory(),
     history: createWebHistory(),
     // @ts-ignore
     // @ts-ignore
-    routes: routes,
+    routes: routes
 })
 })
 
 
 router.beforeEach((to, from, next) => {
 router.beforeEach((to, from, next) => {

+ 1 - 1
frontend/src/version.json

@@ -1 +1 @@
-{"version":"1.6.8","build_id":57,"total_build":127}
+{"version":"1.7.0","build_id":61,"total_build":131}

+ 1 - 1
frontend/src/views/domain/DomainList.vue

@@ -110,7 +110,7 @@ function destroy(site_name: any) {
                     <a-popconfirm
                     <a-popconfirm
                         :cancelText="$gettext('No')"
                         :cancelText="$gettext('No')"
                         :okText="$gettext('OK')"
                         :okText="$gettext('OK')"
-                        :title="$gettext('Are you sure you want to delete ?')"
+                        :title="$gettext('Are you sure you want to delete?')"
                         @confirm="destroy(record['name'])">
                         @confirm="destroy(record['name'])">
                         <a v-translate>Delete</a>
                         <a v-translate>Delete</a>
                     </a-popconfirm>
                     </a-popconfirm>

+ 58 - 0
frontend/src/views/preference/Preference.vue

@@ -0,0 +1,58 @@
+<script setup lang="ts">
+import {useGettext} from 'vue3-gettext'
+import {reactive} from 'vue'
+import FooterToolBar from '@/components/FooterToolbar/FooterToolBar.vue'
+import {useSettingsStore} from '@/pinia'
+import {dark_mode} from '@/lib/theme'
+
+const {$gettext} = useGettext()
+
+const settingsStore = useSettingsStore()
+
+const data = reactive({
+    theme: settingsStore.theme
+})
+
+
+function save() {
+    settingsStore.set_theme(data.theme)
+    settingsStore.set_preference_theme(data.theme)
+    dark_mode(data.theme === 'dark')
+}
+</script>
+
+<template>
+    <a-card :title="$gettext('Preference')">
+        <div class="preference-container">
+            <a-form layout="vertical">
+                <a-form-item :label="$gettext('Theme')">
+                    <a-select v-model:value="data.theme">
+                        <a-select-option value="auto">
+                            {{ $gettext('Auto') }}
+                        </a-select-option>
+                        <a-select-option value="light">
+                            {{ $gettext('Light') }}
+                        </a-select-option>
+                        <a-select-option value="dark">
+                            {{ $gettext('Dark') }}
+                        </a-select-option>
+                    </a-select>
+                </a-form-item>
+            </a-form>
+        </div>
+    </a-card>
+    <footer-tool-bar>
+        <a-button type="primary" @click="save">
+            {{ $gettext('Save') }}
+        </a-button>
+    </footer-tool-bar>
+</template>
+
+<style lang="less" scoped>
+.preference-container {
+    width: 100%;
+    max-width: 600px;
+    margin: 0 auto;
+    padding: 0 10px;
+}
+</style>

+ 1 - 1
frontend/version.json

@@ -1 +1 @@
-{"version":"1.6.8","build_id":57,"total_build":127}
+{"version":"1.7.0","build_id":61,"total_build":131}

Some files were not shown because too many files changed in this diff