diff --git a/.air.toml b/.air.toml
index a9855a67f..0d1e7033f 100644
--- a/.air.toml
+++ b/.air.toml
@@ -13,7 +13,7 @@ bin = "tmp/main"
# Customize binary.
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# Watch these filename extensions.
-include_ext = ["go", "tpl", "tmpl", "html"]
+include_ext = ["go", "tpl", "tmpl", "html", "conf"]
# Ignore these filename extensions or directories.
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules", "upload"]
# Watch these directories if you specified.
diff --git a/README-zh_CN.md b/README-zh_CN.md
index 5fbb2c7ef..850b9a3f6 100644
--- a/README-zh_CN.md
+++ b/README-zh_CN.md
@@ -91,12 +91,16 @@ Nginx 网络管理界面,由 [0xJacky](https://jackyu.cn/) 与 [Hintay](https
我们欢迎您将项目翻译成任何语言。
### 构建基于
-
-- [The Go Programming Language](https://go.dev/)
+- [The Go Programming Language](https://go.dev)
- [Gin Web Framework](https://gin-gonic.com)
-- [GORM](http://gorm.io/index.html)
-- [Vue 2](https://vuejs.org)
-- [vue-gettext](https://github.com/Polyconseil/vue-gettext)
+- [GORM](http://gorm.io)
+- [Vue 3](https://v3.vuejs.org)
+- [Vite](https://vitejs.dev)
+- [TypeScript](https://www.typescriptlang.org/)
+- [Ant Design Vue](https://antdv.com)
+- [vue3-gettext](https://github.com/jshmrtn/vue3-gettext)
+- [vue3-ace-editor](https://github.com/CarterLi/vue3-ace-editor)
+- [Gonginx](https://github.com/tufanbarisyildirim/gonginx)
## 入门指南
diff --git a/README-zh_TW.md b/README-zh_TW.md
index 79cfc1a91..b9f7c54a6 100644
--- a/README-zh_TW.md
+++ b/README-zh_TW.md
@@ -93,12 +93,16 @@ Nginx 網路管理介面,由 [0xJacky](https://jackyu.cn/) 與 [Hintay](https
我們歡迎您將專案翻譯成任何語言。
### 構建基於
-
-- [The Go Programming Language](https://go.dev/)
+- [The Go Programming Language](https://go.dev)
- [Gin Web Framework](https://gin-gonic.com)
-- [GORM](http://gorm.io/index.html)
-- [Vue 2](https://vuejs.org)
-- [vue-gettext](https://github.com/Polyconseil/vue-gettext)
+- [GORM](http://gorm.io)
+- [Vue 3](https://v3.vuejs.org)
+- [Vite](https://vitejs.dev)
+- [TypeScript](https://www.typescriptlang.org/)
+- [Ant Design Vue](https://antdv.com)
+- [vue3-gettext](https://github.com/jshmrtn/vue3-gettext)
+- [vue3-ace-editor](https://github.com/CarterLi/vue3-ace-editor)
+- [Gonginx](https://github.com/tufanbarisyildirim/gonginx)
## 入門指南
diff --git a/README.md b/README.md
index 02040d441..ca6e08f77 100644
--- a/README.md
+++ b/README.md
@@ -99,6 +99,7 @@ We welcome translations into any language.
- [Ant Design Vue](https://antdv.com)
- [vue3-gettext](https://github.com/jshmrtn/vue3-gettext)
- [vue3-ace-editor](https://github.com/CarterLi/vue3-ace-editor)
+- [Gonginx](https://github.com/tufanbarisyildirim/gonginx)
## Getting Started
diff --git a/frontend/components.d.ts b/frontend/components.d.ts
index da24afcaa..87cc8d6dc 100644
--- a/frontend/components.d.ts
+++ b/frontend/components.d.ts
@@ -27,6 +27,8 @@ declare module '@vue/runtime-core' {
ALayoutFooter: typeof import('ant-design-vue/es')['LayoutFooter']
ALayoutHeader: typeof import('ant-design-vue/es')['LayoutHeader']
ALayoutSider: typeof import('ant-design-vue/es')['LayoutSider']
+ AList: typeof import('ant-design-vue/es')['List']
+ AListItem: typeof import('ant-design-vue/es')['ListItem']
AMenu: typeof import('ant-design-vue/es')['Menu']
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
AModal: typeof import('ant-design-vue/es')['Modal']
@@ -65,8 +67,5 @@ declare module '@vue/runtime-core' {
StdDataEntryComponentsStdPassword: typeof import('./src/components/StdDataEntry/components/StdPassword.vue')['default']
StdDataEntryComponentsStdSelect: typeof import('./src/components/StdDataEntry/components/StdSelect.vue')['default']
StdDataEntryComponentsStdSelector: typeof import('./src/components/StdDataEntry/components/StdSelector.vue')['default']
- StdDataEntryCompontentsStdPassword: typeof import('./src/components/StdDataEntry/compontents/StdPassword.vue')['default']
- StdDataEntryCompontentsStdSelect: typeof import('./src/components/StdDataEntry/compontents/StdSelect.vue')['default']
- StdDataEntryCompontentsStdSelector: typeof import('./src/components/StdDataEntry/compontents/StdSelector.vue')['default']
}
}
diff --git a/frontend/package.json b/frontend/package.json
index 12b212053..e6f5f6978 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,7 +1,7 @@
{
"name": "nginx-ui-frontend-next",
"private": true,
- "version": "1.6.8",
+ "version": "1.7.0",
"type": "commonjs",
"scripts": {
"dev": "vite",
@@ -39,7 +39,7 @@
"less": "^4.1.3",
"typescript": "^4.6.4",
"unplugin-vue-components": "^0.22.9",
- "vite": "^3.2.3",
+ "vite": "^4.0.3",
"vite-plugin-html": "^3.2.0",
"vue-tsc": "^1.0.9"
}
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 77d2df86b..dcdbb1b3c 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -5,17 +5,22 @@ import {useSettingsStore} from '@/pinia'
import {dark_mode} from '@/lib/theme'
let media = window.matchMedia('(prefers-color-scheme: dark)')
+
const callback = (media: { matches: any; }) => {
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)
+
if (typeof media.addEventListener === 'function') {
media.addEventListener('change', callback)
} else if (typeof media.addListener === 'function') {
diff --git a/frontend/src/api/cert.ts b/frontend/src/api/cert.ts
new file mode 100644
index 000000000..6edf2470f
--- /dev/null
+++ b/frontend/src/api/cert.ts
@@ -0,0 +1,5 @@
+import Curd from '@/api/curd'
+
+const cert = new Curd('/cert')
+
+export default cert
diff --git a/frontend/src/api/domain.ts b/frontend/src/api/domain.ts
index 0e6b55ab7..ce927e075 100644
--- a/frontend/src/api/domain.ts
+++ b/frontend/src/api/domain.ts
@@ -13,13 +13,13 @@ class Domain extends Curd {
get_template() {
return http.get('template')
}
-
+
add_auto_cert(domain: string) {
- return http.post('cert/' + domain)
+ return http.post('auto_cert/' + domain)
}
remove_auto_cert(domain: string) {
- return http.delete('cert/' + domain)
+ return http.delete('auto_cert/' + domain)
}
}
diff --git a/frontend/src/api/ngx.ts b/frontend/src/api/ngx.ts
index 8ed205975..62fb41e75 100644
--- a/frontend/src/api/ngx.ts
+++ b/frontend/src/api/ngx.ts
@@ -7,6 +7,10 @@ const ngx = {
tokenize_config(content: string) {
return http.post('/ngx/tokenize_config', {content})
+ },
+
+ format_code(content: string) {
+ return http.post('/ngx/format_code', {content})
}
}
diff --git a/frontend/src/api/settings.ts b/frontend/src/api/settings.ts
new file mode 100644
index 000000000..30e03c31d
--- /dev/null
+++ b/frontend/src/api/settings.ts
@@ -0,0 +1,12 @@
+import http from '@/lib/http'
+
+const settings = {
+ get() {
+ return http.get('/settings')
+ },
+ save(data: any) {
+ return http.post('/settings', data)
+ }
+}
+
+export default settings
diff --git a/frontend/src/api/template.ts b/frontend/src/api/template.ts
new file mode 100644
index 000000000..d15057a60
--- /dev/null
+++ b/frontend/src/api/template.ts
@@ -0,0 +1,25 @@
+import Curd from '@/api/curd'
+import http from '@/lib/http'
+
+class Template extends Curd {
+ get_config_list() {
+ return http.get('template/configs')
+ }
+
+ get_block_list() {
+ return http.get('template/blocks')
+ }
+
+ get_config(name: string) {
+ return http.get('template/config/' + name)
+ }
+
+ get_block(name: string) {
+ return http.get('template/block/' + name)
+ }
+
+}
+
+const template = new Template('/template')
+
+export default template
diff --git a/frontend/src/components/CodeEditor/CodeEditor.vue b/frontend/src/components/CodeEditor/CodeEditor.vue
index 16d44e2d8..e208bbaea 100644
--- a/frontend/src/components/CodeEditor/CodeEditor.vue
+++ b/frontend/src/components/CodeEditor/CodeEditor.vue
@@ -4,16 +4,13 @@ import 'ace-builds/src-noconflict/mode-nginx'
import 'ace-builds/src-noconflict/theme-monokai'
import {computed} from 'vue'
-const props = defineProps<{
- content: string
- defaultHeight?: string
-}>()
+const props = defineProps(['content', 'defaultHeight'])
const emit = defineEmits(['update:content'])
const value = computed({
get() {
- return props.content
+ return props.content ?? ''
},
set(value) {
emit('update:content', value)
@@ -27,7 +24,7 @@ const value = computed({
lang="nginx"
theme="monokai"
:style="{
- minHeight: props.defaultHeight || '100vh'
+ minHeight: defaultHeight || '100vh'
}"/>
diff --git a/frontend/src/components/FooterToolbar/FooterToolBar.vue b/frontend/src/components/FooterToolbar/FooterToolBar.vue
index 3a3fd6243..b952b64f4 100644
--- a/frontend/src/components/FooterToolbar/FooterToolBar.vue
+++ b/frontend/src/components/FooterToolbar/FooterToolBar.vue
@@ -26,6 +26,13 @@ export default {
\ No newline at end of file
+
diff --git a/frontend/src/components/StdDataEntry/compontents/StdPassword.vue b/frontend/src/components/StdDataEntry/compontents/StdPassword.vue
deleted file mode 100644
index d7cede50a..000000000
--- a/frontend/src/components/StdDataEntry/compontents/StdPassword.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
- Generate
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/StdDataEntry/compontents/StdSelect.vue b/frontend/src/components/StdDataEntry/compontents/StdSelect.vue
deleted file mode 100644
index 75b8a3581..000000000
--- a/frontend/src/components/StdDataEntry/compontents/StdSelect.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/components/StdDataEntry/compontents/StdSelector.vue b/frontend/src/components/StdDataEntry/compontents/StdSelector.vue
deleted file mode 100644
index 8625995b9..000000000
--- a/frontend/src/components/StdDataEntry/compontents/StdSelector.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
-
-
-
- {{ M_value }}
-
-
- {{ description }}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/language/en/app.po b/frontend/src/language/en/app.po
index 00f363a7c..7ff0cd3ef 100644
--- a/frontend/src/language/en/app.po
+++ b/frontend/src/language/en/app.po
@@ -9,21 +9,22 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/routes/index.ts:116
+#: src/routes/index.ts:134
msgid "About"
msgstr "About"
-#: src/routes/index.ts:99 src/views/domain/ngx_conf/LogEntry.vue:64
+#: src/routes/index.ts:109 src/views/domain/ngx_conf/LogEntry.vue:64
msgid "Access Logs"
msgstr ""
-#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:42
-#: src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
msgid "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
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
msgid "Add"
msgstr ""
@@ -33,47 +34,75 @@ msgstr ""
msgid "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"
msgstr "Add Location"
-#: src/routes/index.ts:55 src/views/domain/DomainAdd.vue:2
+#: src/routes/index.ts:57 src/views/domain/DomainAdd.vue:2
msgid "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"
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
-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?"
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:20
msgid "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
msgid "Are you sure you want to remove this location?"
msgstr "Are you sure you want to remove this directive?"
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:11
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:15
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:19
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:29
+msgid "Author"
+msgstr ""
+
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
+msgid "Auto"
+msgstr ""
+
+#: src/views/cert/Cert.vue:41
+msgid "Auto Cert"
+msgstr ""
+
+#: src/views/cert/Cert.vue:8
+msgid "Auto cert is enabled, please do not modify this certification."
+msgstr ""
+
#: src/views/nginx_log/NginxLog.vue:4
msgid "Auto Refresh"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr "Auto-renewal disabled for %{name}"
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:65
msgid "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/config/Config.vue:16 src/views/config/Config.vue:17
+#: src/views/config/Config.vue:27 src/views/config/Config.vue:5
+#: src/views/config/ConfigEdit.vue:64 src/views/domain/DomainEdit.vue:187
+#: src/views/nginx_log/NginxLog.vue:173
msgid "Back"
msgstr "Back"
@@ -86,40 +115,65 @@ msgstr "Back"
msgid "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"
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
msgid "Build with"
msgstr "Build with"
-#: src/components/StdDataDisplay/StdCurd.vue:28
-#: src/components/StdDataEntry/compontents/StdSelector.vue:11
-#: src/views/config/ConfigEdit.vue:49
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
msgid "Cancel"
msgstr "Cancel"
-#: src/views/domain/cert/CertInfo.vue:24
+#: src/views/domain/cert/CertInfo.vue:19
msgid "Certificate has expired"
msgstr "Certificate has expired"
-#: src/views/domain/cert/CertInfo.vue:28
+#: src/views/domain/cert/CertInfo.vue:23
msgid "Certificate is valid"
msgstr "Certificate is valid"
-#: src/views/domain/cert/CertInfo.vue:14
+#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
msgid "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/NgxConfigEditor.vue:175
+#: src/routes/index.ts:87 src/views/cert/Cert.vue:2
+#, fuzzy
+msgid "Certification"
+msgstr "Certificate is valid"
+
+#: src/views/domain/cert/ChangeCert.vue:2
+#: src/views/domain/cert/ChangeCert.vue:3
+#: src/views/domain/cert/ChangeCert.vue:5
+#, fuzzy
+msgid "Change Certificate"
+msgstr "Certificate is valid"
+
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
msgid "Comments"
msgstr "Comments"
-#: src/views/domain/DomainAdd.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
+#, fuzzy
+msgid "Config Templates"
+msgstr "Configurations"
+
+#: src/views/domain/DomainAdd.vue:11
msgid "Configuration Name"
msgstr "Configuration Name"
@@ -131,8 +185,9 @@ msgstr "Configurations"
msgid "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/directive/DirectiveEditorItem.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
msgid "Content"
msgstr "Content"
@@ -144,7 +199,7 @@ msgstr "CPU Status"
msgid "CPU:"
msgstr "CPU:"
-#: src/views/domain/DomainAdd.vue:150
+#: src/views/domain/DomainAdd.vue:149
msgid "Create Another"
msgstr "Create Another"
@@ -156,7 +211,21 @@ msgstr "Created at"
msgid "Creating client facilitates communication with the CA server"
msgstr ""
-#: src/routes/index.ts:27
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:22
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:32
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:6
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:7
+msgid "Custom"
+msgstr ""
+
+#: src/views/preference/Preference.vue:28
+#: src/views/preference/Preference.vue:29
+msgid "Dark"
+msgstr ""
+
+#: src/routes/index.ts:29
msgid "Dashboard"
msgstr "Dashboard"
@@ -164,41 +233,58 @@ msgstr "Dashboard"
msgid "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"
msgstr ""
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
msgid "Delete ID: %{id}"
msgstr ""
-#: src/views/domain/DomainList.vue:76
+#: src/views/domain/DomainList.vue:81
msgid "Delete site: %{site_name}"
msgstr ""
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:16
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:21
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:30
+msgid "Description"
+msgstr ""
+
#: src/views/other/About.vue:7 src/views/other/About.vue:8
msgid "Development Mode"
msgstr "Development Mode"
+#: src/views/config/config.ts:20
+msgid "Dir"
+msgstr ""
+
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:20
msgid "Directive"
msgstr "Directive"
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
msgid "Directives"
msgstr "Directives"
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:73
msgid "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/cert/Cert.vue:51 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"
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"
msgstr "Disabled successfully"
@@ -206,19 +292,23 @@ msgstr "Disabled successfully"
msgid "Disk IO"
msgstr "Disk IO"
-#: src/views/domain/DomainAdd.vue:60
+#: src/views/cert/Cert.vue:32
+msgid "Domain"
+msgstr ""
+
+#: src/views/domain/DomainAdd.vue:58
msgid "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}"
msgstr "Edit %{n}"
-#: src/routes/index.ts:77 src/views/config/ConfigEdit.vue:2
+#: src/routes/index.ts:79 src/views/config/ConfigEdit.vue:2
msgid "Edit Configuration"
msgstr "Edit Configuration"
-#: src/routes/index.ts:59
+#: src/routes/index.ts:61
msgid "Edit Site"
msgstr "Edit Site"
@@ -226,11 +316,11 @@ msgstr "Edit Site"
msgid "Email (*)"
msgstr "Email (*)"
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:67
msgid "Enable auto-renewal failed for %{name}"
msgstr "Enable auto-renewal failed for %{name}"
-#: src/views/domain/DomainAdd.vue:50
+#: src/views/domain/DomainAdd.vue:51
msgid "Enable failed"
msgstr "Enable failed"
@@ -238,39 +328,43 @@ msgstr "Enable failed"
msgid "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/cert/Cert.vue:48 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"
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:47 src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
msgid "Enabled successfully"
msgstr "Enabled successfully"
-#: src/views/domain/cert/IssueCert.vue:17
+#: src/views/domain/cert/IssueCert.vue:18
msgid "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:113 src/views/domain/ngx_conf/LogEntry.vue:68
msgid "Error Logs"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:17
+#: src/views/domain/cert/CertInfo.vue:12
msgid "Expiration Date: %{date}"
msgstr "Expiration Date: %{date}"
#: 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"
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}"
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}"
msgstr "Failed to enable %{msg}"
@@ -278,6 +372,10 @@ msgstr "Failed to enable %{msg}"
msgid "Failed to get certificate information"
msgstr ""
+#: src/views/config/config.ts:22
+msgid "File"
+msgstr ""
+
#: src/views/other/Error.vue:3 src/views/other/Error.vue:4
msgid "File Not Found"
msgstr "File Not Found"
@@ -290,7 +388,21 @@ msgstr ""
msgid "Finished"
msgstr "Finished"
-#: src/components/StdDataEntry/compontents/StdPassword.vue:42
+#: src/views/config/ConfigEdit.vue:67
+msgid "Format Code"
+msgstr ""
+
+#: src/views/config/ConfigEdit.vue:52
+#, fuzzy
+msgid "Format error %{msg}"
+msgstr "Save error %{msg}"
+
+#: src/views/config/ConfigEdit.vue:50
+#, fuzzy
+msgid "Format successfully"
+msgstr "Saved successfully"
+
+#: src/components/StdDataEntry/components/StdPassword.vue:42
msgid "Generate"
msgstr ""
@@ -298,15 +410,23 @@ msgstr ""
msgid "Generating private key for registering account"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:96
msgid "Getting the certificate, please wait..."
msgstr "Getting the certificate, please wait..."
-#: src/routes/index.ts:20
+#: src/routes/index.ts:22
msgid "Home"
msgstr "Home"
-#: src/routes/index.ts:126 src/views/other/Install.vue:128
+#: src/views/preference/Preference.vue:17
+msgid "HTTP Challenge Port"
+msgstr ""
+
+#: src/views/preference/Preference.vue:5
+msgid "HTTP Port"
+msgstr ""
+
+#: src/routes/index.ts:144 src/views/other/Install.vue:128
msgid "Install"
msgstr "Install"
@@ -315,7 +435,7 @@ msgstr "Install"
msgid "Install successfully"
msgstr "Enabled successfully"
-#: src/views/domain/cert/CertInfo.vue:15
+#: src/views/domain/cert/CertInfo.vue:10
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "Intermediate Certification Authorities: %{issuer}"
@@ -324,23 +444,34 @@ msgstr "Intermediate Certification Authorities: %{issuer}"
msgid "Issued certificate successfully"
msgstr "Enabled successfully"
+#: src/views/preference/Preference.vue:11
+msgid "Jwt Secret"
+msgstr ""
+
#: src/views/user/User.vue:26
msgid "Leave blank for no change"
msgstr "Leave blank for no change"
+#: src/views/preference/Preference.vue:25
+#: src/views/preference/Preference.vue:26
+msgid "Light"
+msgstr ""
+
#: src/views/dashboard/DashBoard.vue:141
msgid "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"
msgstr "Location"
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
msgid "Locations"
msgstr "Locations"
-#: src/routes/index.ts:132 src/views/other/Login.vue:103
+#: src/routes/index.ts:150 src/views/other/Login.vue:103
msgid "Login"
msgstr "Login"
@@ -352,7 +483,7 @@ msgstr "Login successful"
msgid "Logout successful"
msgstr "Logout successful"
-#: src/views/domain/cert/IssueCert.vue:226
+#: src/views/domain/cert/IssueCert.vue:211
msgid ""
"Make sure you have configured a reverse proxy for .well-known directory to "
"HTTPChallengePort (default: 9180) before getting the certificate."
@@ -360,15 +491,15 @@ msgstr ""
"Make sure you have configured a reverse proxy for .well-known directory to "
"HTTPChallengePort (default: 9180) before getting the certificate."
-#: src/routes/index.ts:68
+#: src/routes/index.ts:70
msgid "Manage Configs"
msgstr "Manage Configs"
-#: src/routes/index.ts:43 src/views/domain/DomainList.vue:2
+#: src/routes/index.ts:45 src/views/domain/DomainList.vue:2
msgid "Manage Sites"
msgstr "Manage Sites"
-#: src/routes/index.ts:35 src/views/user/User.vue:2
+#: src/routes/index.ts:37 src/views/user/User.vue:2
msgid "Manage Users"
msgstr "Manage Users"
@@ -380,21 +511,28 @@ msgstr "Memory"
msgid "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
msgid "Modify"
msgstr "Modify Config"
-#: src/views/domain/DomainAdd.vue:147
+#: src/views/domain/DomainAdd.vue:146
msgid "Modify Config"
msgstr "Modify Config"
-#: src/views/config/Config.vue:12 src/views/domain/DomainList.vue:14
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:9
+#, fuzzy
+msgid "Multi-line Directive"
+msgstr "Single Directive"
+
+#: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
+#: src/views/domain/DomainEdit.vue:36 src/views/domain/DomainList.vue:15
msgid "Name"
msgstr "Name"
@@ -414,45 +552,50 @@ msgstr "Network Total Receive"
msgid "Network Total Send"
msgstr "Network Total Send"
-#: src/views/domain/DomainAdd.vue:137
+#: src/views/domain/DomainAdd.vue:136
msgid "Next"
msgstr "Next"
-#: src/routes/index.ts:93 src/views/nginx_log/NginxLog.vue:2
+#: src/views/preference/Preference.vue:33
+msgid "Nginx Access Log Path"
+msgstr ""
+
+#: src/views/preference/Preference.vue:36
+msgid "Nginx Error Log Path"
+msgstr ""
+
+#: src/routes/index.ts:103 src/views/nginx_log/NginxLog.vue:2
msgid "Nginx Log"
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/DirectiveEditorItem.vue:22
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
msgid "No"
msgstr "No"
-#: src/routes/index.ts:138 src/routes/index.ts:140
+#: src/routes/index.ts:156 src/routes/index.ts:158
msgid "Not Found"
msgstr "Not Found"
-#: src/views/domain/cert/CertInfo.vue:19
+#: src/views/domain/cert/CertInfo.vue:14
msgid "Not Valid Before: %{date}"
msgstr "Not Valid Before: %{date}"
-#: src/views/domain/cert/IssueCert.vue:218
-msgid ""
-"Note: The server_name in the current configuration must be the domain name "
-"you need to get the certificate."
+#: src/views/domain/cert/IssueCert.vue:38
+msgid "Note"
msgstr ""
-"Note: The server_name in the current configuration must be the domain name "
-"you need to get the certificate."
#: src/language/constants.ts:16 src/views/domain/cert/IssueCert.vue:3
msgid "Obtaining certificate"
msgstr ""
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
-#: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: 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/views/domain/DomainList.vue:25
msgid "OK"
msgstr ""
@@ -472,8 +615,8 @@ msgstr "Password"
msgid "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"
msgstr "Path"
@@ -489,6 +632,10 @@ msgstr "Please input your password!"
msgid "Please input your username!"
msgstr "Please input your username!"
+#: src/routes/index.ts:126 src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr ""
+
#: src/language/constants.ts:12
#, fuzzy
msgid "Preparing lego configurations"
@@ -522,35 +669,56 @@ msgstr ""
msgid "Reloading nginx"
msgstr ""
+#: src/components/StdDataDisplay/StdTable.vue:10
#: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
msgid "Reset"
msgstr ""
-#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
+#: src/views/preference/Preference.vue:8
+#, fuzzy
+msgid "Run Mode"
+msgstr "Advance Mode"
+
+#: src/views/config/ConfigEdit.vue:70 src/views/domain/DomainEdit.vue:190
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:40
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
+#: src/views/preference/Preference.vue:43
+#: src/views/preference/Preference.vue:44
msgid "Save"
msgstr "Save"
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:34
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:36
msgid "Save Directive"
msgstr "Save Directive"
-#: src/views/config/ConfigEdit.vue:36 src/views/domain/DomainAdd.vue:54
+#: src/views/config/ConfigEdit.vue:43 src/views/domain/DomainAdd.vue:55
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
msgid "Save error %{msg}"
msgstr "Save error %{msg}"
-#: src/components/StdDataDisplay/StdCurd.vue:102
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+#: src/views/preference/Preference.vue:39
+#, fuzzy
+msgid "Save successfully"
+msgstr "Saved successfully"
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
#, fuzzy
msgid "Save Successfully"
msgstr "Saved successfully"
-#: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/config/ConfigEdit.vue:41 src/views/domain/DomainAdd.vue:44
+#: src/views/domain/DomainEdit.vue:97
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:35
msgid "Saved successfully"
msgstr "Saved successfully"
-#: src/components/StdDataEntry/compontents/StdSelector.vue:13
+#: src/components/StdDataEntry/components/StdSelector.vue:13
msgid "Selector"
msgstr ""
@@ -558,12 +726,14 @@ msgstr ""
msgid "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/views/other/Install.vue:71
+#: 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:29 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/preference/Preference.vue:41
msgid "Server error"
msgstr "Server error"
@@ -571,33 +741,49 @@ msgstr "Server error"
msgid "Server Info"
msgstr "Server Info"
-#: src/views/domain/cert/IssueCert.vue:29
+#: src/views/domain/cert/IssueCert.vue:30
msgid "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:111
msgid "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
msgid "Single Directive"
msgstr "Single Directive"
-#: src/routes/index.ts:107
+#: src/routes/index.ts:117
#, fuzzy
msgid "Site Logs"
msgstr "Sites List"
-#: src/routes/index.ts:51
+#: src/routes/index.ts:53
msgid "Sites List"
msgstr "Sites List"
-#: src/views/domain/DomainList.vue:19
+#: src/views/cert/Cert.vue:65
+#, fuzzy
+msgid "SSL Certificate Key Path"
+msgstr "Certificate Status"
+
+#: src/views/cert/Cert.vue:58
+#, fuzzy
+msgid "SSL Certificate Path"
+msgstr "Certificate Status"
+
+#: src/views/cert/Cert.vue:19
+#, fuzzy
+msgid "SSL Certification Content"
+msgstr "Certificate Status"
+
+#: src/views/cert/Cert.vue:22
+#, fuzzy
+msgid "SSL Certification Key Content"
+msgstr "Certificate Status"
+
+#: src/views/domain/DomainList.vue:24
msgid "Status"
msgstr "Status"
@@ -605,7 +791,7 @@ msgstr "Status"
msgid "Storage"
msgstr "Storage"
-#: src/views/domain/cert/CertInfo.vue:16
+#: src/views/domain/cert/CertInfo.vue:11
msgid "Subject Name: %{name}"
msgstr "Subject Name: %{name}"
@@ -618,11 +804,15 @@ msgstr "Swap"
msgid "Table"
msgstr "Enabled"
-#: src/routes/index.ts:85 src/views/pty/Terminal.vue:2
+#: src/routes/index.ts:95 src/views/pty/Terminal.vue:2
msgid "Terminal"
msgstr "Terminal"
-#: src/views/domain/cert/IssueCert.vue:222
+#: src/views/preference/Preference.vue:14
+msgid "Terminal Start Command"
+msgstr ""
+
+#: src/views/domain/cert/IssueCert.vue:207
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."
@@ -634,15 +824,37 @@ msgstr ""
msgid "The filename cannot contain the following characters: %{c}"
msgstr "The filename cannot contain the following characters: %{c}"
+#: src/views/domain/cert/IssueCert.vue:203
+#, fuzzy
+msgid ""
+"The server_name in the current configuration must be the domain name you "
+"need to get the certificate."
+msgstr ""
+"Note: The server_name in the current configuration must be the domain name "
+"you need to get the certificate."
+
#: src/language/constants.ts:6
msgid "The username or password is incorrect"
msgstr ""
-#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:36
-#: src/views/user/User.vue:37
+#: src/views/preference/Preference.vue:20
+msgid "Theme"
+msgstr ""
+
+#: src/views/config/config.ts:14
+msgid "Type"
+msgstr ""
+
+#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
msgid "Updated at"
msgstr "Updated at"
+#: src/components/StdDataDisplay/StdTable.vue:461
+#, fuzzy
+msgid "Updated successfully"
+msgstr "Saved successfully"
+
#: src/views/dashboard/DashBoard.vue:137
msgid "Uptime:"
msgstr "Uptime:"
@@ -659,7 +871,13 @@ msgstr "Username (*)"
msgid "Using HTTP01 challenge provider"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:26 src/views/domain/DomainAdd.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:10
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:9
+msgid "View"
+msgstr ""
+
+#: src/views/domain/cert/IssueCert.vue:27 src/views/domain/DomainAdd.vue:22
msgid "Warning"
msgstr "Warning"
@@ -676,8 +894,8 @@ msgstr ""
msgid "Writing certificate to disk"
msgstr ""
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:21
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
msgid "Yes"
msgstr "Yes"
@@ -686,6 +904,13 @@ msgctxt "Project"
msgid "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"
#~ msgstr "404 Not Found"
diff --git a/frontend/src/language/messages.pot b/frontend/src/language/messages.pot
index 98eacab38..0dbed548a 100644
--- a/frontend/src/language/messages.pot
+++ b/frontend/src/language/messages.pot
@@ -2,23 +2,25 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
-#: src/routes/index.ts:116
+#: src/routes/index.ts:134
msgid "About"
msgstr ""
-#: src/routes/index.ts:99
+#: src/routes/index.ts:109
#: src/views/domain/ngx_conf/LogEntry.vue:64
msgid "Access Logs"
msgstr ""
-#: src/views/config/Config.vue:24
-#: src/views/domain/DomainList.vue:42
+#: src/views/cert/Cert.vue:78
+#: src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:47
#: src/views/user/User.vue:43
msgid "Action"
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
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
msgid "Add"
msgstr ""
@@ -28,47 +30,78 @@ msgstr ""
msgid "Add Directive Below"
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"
msgstr ""
-#: src/routes/index.ts:55
+#: src/routes/index.ts:57
#: src/views/domain/DomainAdd.vue:2
msgid "Add Site"
msgstr ""
+#: src/views/domain/DomainEdit.vue:18
#: src/views/domain/DomainEdit.vue:19
msgid "Advance Mode"
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 ""
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:20
msgid "Are you sure you want to remove this directive?"
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?"
msgstr ""
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:11
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:15
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:19
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:29
+msgid "Author"
+msgstr ""
+
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
+msgid "Auto"
+msgstr ""
+
+#: src/views/cert/Cert.vue:41
+msgid "Auto Cert"
+msgstr ""
+
+#: src/views/cert/Cert.vue:8
+msgid "Auto cert is enabled, please do not modify this certification."
+msgstr ""
+
#: src/views/nginx_log/NginxLog.vue:4
msgid "Auto Refresh"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:65
msgid "Auto-renewal enabled for %{name}"
msgstr ""
-#: src/views/domain/DomainEdit.vue:178
-#: src/views/nginx_log/NginxLog.vue:172
+#: src/views/config/Config.vue:16
+#: src/views/config/Config.vue:17
+#: src/views/config/Config.vue:27
+#: src/views/config/Config.vue:5
+#: src/views/config/ConfigEdit.vue:64
+#: src/views/domain/DomainEdit.vue:187
+#: src/views/nginx_log/NginxLog.vue:173
msgid "Back"
msgstr ""
@@ -80,40 +113,64 @@ msgstr ""
msgid "Base information"
msgstr ""
+#: src/views/domain/DomainEdit.vue:21
#: src/views/domain/DomainEdit.vue:22
msgid "Basic Mode"
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
msgid "Build with"
msgstr ""
-#: src/components/StdDataDisplay/StdCurd.vue:28
-#: src/components/StdDataEntry/compontents/StdSelector.vue:11
-#: src/views/config/ConfigEdit.vue:49
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
msgid "Cancel"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:24
+#: src/views/domain/cert/CertInfo.vue:19
msgid "Certificate has expired"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:28
+#: src/views/domain/cert/CertInfo.vue:23
msgid "Certificate is valid"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:14
+#: src/views/cert/Cert.vue:12
+#: src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
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/NgxConfigEditor.vue:175
+#: src/routes/index.ts:87
+#: src/views/cert/Cert.vue:2
+msgid "Certification"
+msgstr ""
+
+#: src/views/domain/cert/ChangeCert.vue:2
+#: src/views/domain/cert/ChangeCert.vue:3
+#: src/views/domain/cert/ChangeCert.vue:5
+msgid "Change Certificate"
+msgstr ""
+
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
msgid "Comments"
msgstr ""
-#: src/views/domain/DomainAdd.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
+msgid "Config Templates"
+msgstr ""
+
+#: src/views/domain/DomainAdd.vue:11
msgid "Configuration Name"
msgstr ""
@@ -125,8 +182,9 @@ msgstr ""
msgid "Configure SSL"
msgstr ""
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
msgid "Content"
msgstr ""
@@ -138,7 +196,7 @@ msgstr ""
msgid "CPU:"
msgstr ""
-#: src/views/domain/DomainAdd.vue:150
+#: src/views/domain/DomainAdd.vue:149
msgid "Create Another"
msgstr ""
@@ -150,7 +208,21 @@ msgstr ""
msgid "Creating client facilitates communication with the CA server"
msgstr ""
-#: src/routes/index.ts:27
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:22
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:32
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:6
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:7
+msgid "Custom"
+msgstr ""
+
+#: src/views/preference/Preference.vue:28
+#: src/views/preference/Preference.vue:29
+msgid "Dark"
+msgstr ""
+
+#: src/routes/index.ts:29
msgid "Dashboard"
msgstr ""
@@ -158,44 +230,64 @@ msgstr ""
msgid "Database (Optional, default: database)"
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"
msgstr ""
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
msgid "Delete ID: %{id}"
msgstr ""
-#: src/views/domain/DomainList.vue:76
+#: src/views/domain/DomainList.vue:81
msgid "Delete site: %{site_name}"
msgstr ""
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:16
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:21
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:30
+msgid "Description"
+msgstr ""
+
#: src/views/other/About.vue:7
#: src/views/other/About.vue:8
msgid "Development Mode"
msgstr ""
+#: src/views/config/config.ts:20
+msgid "Dir"
+msgstr ""
+
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:20
msgid "Directive"
msgstr ""
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
msgid "Directives"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:73
msgid "Disable auto-renewal failed for %{name}"
msgstr ""
+#: src/views/cert/Cert.vue:51
#: 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"
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"
msgstr ""
@@ -203,20 +295,25 @@ msgstr ""
msgid "Disk IO"
msgstr ""
-#: src/views/domain/DomainAdd.vue:60
+#: src/views/cert/Cert.vue:32
+msgid "Domain"
+msgstr ""
+
+#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr ""
+#: src/views/domain/DomainEdit.vue:4
#: src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
msgstr ""
-#: src/routes/index.ts:77
+#: src/routes/index.ts:79
#: src/views/config/ConfigEdit.vue:2
msgid "Edit Configuration"
msgstr ""
-#: src/routes/index.ts:59
+#: src/routes/index.ts:61
msgid "Edit Site"
msgstr ""
@@ -224,11 +321,11 @@ msgstr ""
msgid "Email (*)"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:67
msgid "Enable auto-renewal failed for %{name}"
msgstr ""
-#: src/views/domain/DomainAdd.vue:50
+#: src/views/domain/DomainAdd.vue:51
msgid "Enable failed"
msgstr ""
@@ -236,45 +333,51 @@ msgstr ""
msgid "Enable TLS"
msgstr ""
+#: src/views/cert/Cert.vue:48
#: 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:20
-#: src/views/domain/DomainList.vue:26
+#: src/views/domain/DomainList.vue:19
+#: src/views/domain/DomainList.vue:31
msgid "Enabled"
msgstr ""
-#: src/views/domain/DomainAdd.vue:46
-#: src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainAdd.vue:47
+#: src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
msgid "Enabled successfully"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:17
+#: src/views/domain/cert/IssueCert.vue:18
msgid "Encrypt website with Let's Encrypt"
msgstr ""
-#: src/routes/index.ts:103
+#: src/routes/index.ts:113
#: src/views/domain/ngx_conf/LogEntry.vue:68
msgid "Error Logs"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:17
+#: src/views/domain/cert/CertInfo.vue:12
msgid "Expiration Date: %{date}"
msgstr ""
#: 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"
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}"
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}"
msgstr ""
@@ -282,6 +385,10 @@ msgstr ""
msgid "Failed to get certificate information"
msgstr ""
+#: src/views/config/config.ts:22
+msgid "File"
+msgstr ""
+
#: src/views/other/Error.vue:3
#: src/views/other/Error.vue:4
msgid "File Not Found"
@@ -296,7 +403,19 @@ msgstr ""
msgid "Finished"
msgstr ""
-#: src/components/StdDataEntry/compontents/StdPassword.vue:42
+#: src/views/config/ConfigEdit.vue:67
+msgid "Format Code"
+msgstr ""
+
+#: src/views/config/ConfigEdit.vue:52
+msgid "Format error %{msg}"
+msgstr ""
+
+#: src/views/config/ConfigEdit.vue:50
+msgid "Format successfully"
+msgstr ""
+
+#: src/components/StdDataEntry/components/StdPassword.vue:42
msgid "Generate"
msgstr ""
@@ -304,15 +423,23 @@ msgstr ""
msgid "Generating private key for registering account"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:96
msgid "Getting the certificate, please wait..."
msgstr ""
-#: src/routes/index.ts:20
+#: src/routes/index.ts:22
msgid "Home"
msgstr ""
-#: src/routes/index.ts:126
+#: src/views/preference/Preference.vue:17
+msgid "HTTP Challenge Port"
+msgstr ""
+
+#: src/views/preference/Preference.vue:5
+msgid "HTTP Port"
+msgstr ""
+
+#: src/routes/index.ts:144
#: src/views/other/Install.vue:128
msgid "Install"
msgstr ""
@@ -321,7 +448,7 @@ msgstr ""
msgid "Install successfully"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:15
+#: src/views/domain/cert/CertInfo.vue:10
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr ""
@@ -329,23 +456,34 @@ msgstr ""
msgid "Issued certificate successfully"
msgstr ""
+#: src/views/preference/Preference.vue:11
+msgid "Jwt Secret"
+msgstr ""
+
#: src/views/user/User.vue:26
msgid "Leave blank for no change"
msgstr ""
+#: src/views/preference/Preference.vue:25
+#: src/views/preference/Preference.vue:26
+msgid "Light"
+msgstr ""
+
#: src/views/dashboard/DashBoard.vue:141
msgid "Load Averages:"
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"
msgstr ""
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
msgid "Locations"
msgstr ""
-#: src/routes/index.ts:132
+#: src/routes/index.ts:150
#: src/views/other/Login.vue:103
msgid "Login"
msgstr ""
@@ -358,20 +496,20 @@ msgstr ""
msgid "Logout successful"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:226
+#: src/views/domain/cert/IssueCert.vue:211
msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate."
msgstr ""
-#: src/routes/index.ts:68
+#: src/routes/index.ts:70
msgid "Manage Configs"
msgstr ""
-#: src/routes/index.ts:43
+#: src/routes/index.ts:45
#: src/views/domain/DomainList.vue:2
msgid "Manage Sites"
msgstr ""
-#: src/routes/index.ts:35
+#: src/routes/index.ts:37
#: src/views/user/User.vue:2
msgid "Manage Users"
msgstr ""
@@ -384,21 +522,28 @@ msgstr ""
msgid "Memory and Storage"
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"
msgstr ""
-#: src/views/domain/DomainAdd.vue:147
+#: src/views/domain/DomainAdd.vue:146
msgid "Modify Config"
msgstr ""
-#: src/views/config/Config.vue:12
-#: src/views/domain/DomainList.vue:14
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:9
+msgid "Multi-line Directive"
+msgstr ""
+
+#: src/views/cert/Cert.vue:16
+#: src/views/config/config.ts:9
+#: src/views/domain/DomainEdit.vue:36
+#: src/views/domain/DomainList.vue:15
msgid "Name"
msgstr ""
@@ -418,33 +563,41 @@ msgstr ""
msgid "Network Total Send"
msgstr ""
-#: src/views/domain/DomainAdd.vue:137
+#: src/views/domain/DomainAdd.vue:136
msgid "Next"
msgstr ""
-#: src/routes/index.ts:93
+#: src/views/preference/Preference.vue:33
+msgid "Nginx Access Log Path"
+msgstr ""
+
+#: src/views/preference/Preference.vue:36
+msgid "Nginx Error Log Path"
+msgstr ""
+
+#: src/routes/index.ts:103
#: src/views/nginx_log/NginxLog.vue:2
msgid "Nginx Log"
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/DirectiveEditorItem.vue:22
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
msgid "No"
msgstr ""
-#: src/routes/index.ts:138
-#: src/routes/index.ts:140
+#: src/routes/index.ts:156
+#: src/routes/index.ts:158
msgid "Not Found"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:19
+#: src/views/domain/cert/CertInfo.vue:14
msgid "Not Valid Before: %{date}"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:218
-msgid "Note: The server_name in the current configuration must be the domain name you need to get the certificate."
+#: src/views/domain/cert/IssueCert.vue:38
+msgid "Note"
msgstr ""
#: src/language/constants.ts:16
@@ -452,10 +605,11 @@ msgstr ""
msgid "Obtaining certificate"
msgstr ""
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
-#: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: 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/views/domain/DomainList.vue:25
msgid "OK"
msgstr ""
@@ -476,8 +630,8 @@ msgstr ""
msgid "Password (*)"
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"
msgstr ""
@@ -495,6 +649,11 @@ msgstr ""
msgid "Please input your username!"
msgstr ""
+#: src/routes/index.ts:126
+#: src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr ""
+
#: src/language/constants.ts:12
msgid "Preparing lego configurations"
msgstr ""
@@ -528,37 +687,56 @@ msgstr ""
msgid "Reloading nginx"
msgstr ""
+#: src/components/StdDataDisplay/StdTable.vue:10
#: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
msgid "Reset"
msgstr ""
-#: src/views/config/ConfigEdit.vue:52
-#: src/views/domain/DomainEdit.vue:181
+#: src/views/preference/Preference.vue:8
+msgid "Run Mode"
+msgstr ""
+
+#: src/views/config/ConfigEdit.vue:70
+#: src/views/domain/DomainEdit.vue:190
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:40
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
+#: src/views/preference/Preference.vue:43
+#: src/views/preference/Preference.vue:44
msgid "Save"
msgstr ""
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:34
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:36
msgid "Save Directive"
msgstr ""
-#: src/views/config/ConfigEdit.vue:36
-#: src/views/domain/DomainAdd.vue:54
+#: src/views/config/ConfigEdit.vue:43
+#: src/views/domain/DomainAdd.vue:55
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
msgid "Save error %{msg}"
msgstr ""
-#: src/components/StdDataDisplay/StdCurd.vue:102
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+#: src/views/preference/Preference.vue:39
+msgid "Save successfully"
+msgstr ""
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
msgid "Save Successfully"
msgstr ""
-#: src/views/config/ConfigEdit.vue:34
-#: src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/config/ConfigEdit.vue:41
+#: src/views/domain/DomainAdd.vue:44
+#: src/views/domain/DomainEdit.vue:97
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:35
msgid "Saved successfully"
msgstr ""
-#: src/components/StdDataEntry/compontents/StdSelector.vue:13
+#: src/components/StdDataEntry/components/StdSelector.vue:13
msgid "Selector"
msgstr ""
@@ -567,15 +745,18 @@ msgstr ""
msgid "Send"
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:29
+#: 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/preference/Preference.vue:41
msgid "Server error"
msgstr ""
@@ -583,33 +764,45 @@ msgstr ""
msgid "Server Info"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:29
+#: src/views/domain/cert/IssueCert.vue:30
msgid "server_name not found in directives"
msgstr ""
-#: 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:111
msgid "server_name parameter is required"
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
msgid "Single Directive"
msgstr ""
-#: src/routes/index.ts:107
+#: src/routes/index.ts:117
msgid "Site Logs"
msgstr ""
-#: src/routes/index.ts:51
+#: src/routes/index.ts:53
msgid "Sites List"
msgstr ""
-#: src/views/domain/DomainList.vue:19
+#: src/views/cert/Cert.vue:65
+msgid "SSL Certificate Key Path"
+msgstr ""
+
+#: src/views/cert/Cert.vue:58
+msgid "SSL Certificate Path"
+msgstr ""
+
+#: src/views/cert/Cert.vue:19
+msgid "SSL Certification Content"
+msgstr ""
+
+#: src/views/cert/Cert.vue:22
+msgid "SSL Certification Key Content"
+msgstr ""
+
+#: src/views/domain/DomainList.vue:24
msgid "Status"
msgstr ""
@@ -617,7 +810,7 @@ msgstr ""
msgid "Storage"
msgstr ""
-#: src/views/domain/cert/CertInfo.vue:16
+#: src/views/domain/cert/CertInfo.vue:11
msgid "Subject Name: %{name}"
msgstr ""
@@ -629,12 +822,16 @@ msgstr ""
msgid "Table"
msgstr ""
-#: src/routes/index.ts:85
+#: src/routes/index.ts:95
#: src/views/pty/Terminal.vue:2
msgid "Terminal"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:222
+#: src/views/preference/Preference.vue:14
+msgid "Terminal Start Command"
+msgstr ""
+
+#: src/views/domain/cert/IssueCert.vue:207
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 ""
@@ -642,16 +839,33 @@ msgstr ""
msgid "The filename cannot contain the following characters: %{c}"
msgstr ""
+#: src/views/domain/cert/IssueCert.vue:203
+msgid "The server_name in the current configuration must be the domain name you need to get the certificate."
+msgstr ""
+
#: src/language/constants.ts:6
msgid "The username or password is incorrect"
msgstr ""
-#: src/views/config/Config.vue:17
-#: src/views/domain/DomainList.vue:36
+#: src/views/preference/Preference.vue:20
+msgid "Theme"
+msgstr ""
+
+#: src/views/config/config.ts:14
+msgid "Type"
+msgstr ""
+
+#: src/views/cert/Cert.vue:72
+#: src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:41
#: src/views/user/User.vue:37
msgid "Updated at"
msgstr ""
+#: src/components/StdDataDisplay/StdTable.vue:461
+msgid "Updated successfully"
+msgstr ""
+
#: src/views/dashboard/DashBoard.vue:137
msgid "Uptime:"
msgstr ""
@@ -669,8 +883,14 @@ msgstr ""
msgid "Using HTTP01 challenge provider"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:26
-#: src/views/domain/DomainAdd.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:10
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:9
+msgid "View"
+msgstr ""
+
+#: src/views/domain/cert/IssueCert.vue:27
+#: src/views/domain/DomainAdd.vue:22
msgid "Warning"
msgstr ""
@@ -688,8 +908,8 @@ msgstr ""
msgid "Writing certificate to disk"
msgstr ""
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:21
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
msgid "Yes"
msgstr ""
diff --git a/frontend/src/language/translations.json b/frontend/src/language/translations.json
index ad4315e73..956c18db5 100644
--- a/frontend/src/language/translations.json
+++ b/frontend/src/language/translations.json
@@ -1 +1 @@
-{"zh_CN":{"About":"关于","Access Logs":"访问日志","Action":"操作","Add":"添加","Add Directive Below":"在下面添加指令","Add Location":"添加 Location","Add Site":"添加站点","Advance Mode":"高级模式","Are you sure you want to delete ?":"您确定要删除吗?","Are you sure you want to remove this directive?":"您确定要删除这条指令?","Are you sure you want to remove this location?":"您确定要删除这个 Location?","Auto Refresh":"自动刷新","Auto-renewal disabled for %{name}":"成功关闭 %{name} 自动续签","Auto-renewal enabled for %{name}":"成功启用 %{name} 自动续签","Back":"返回","Back Home":"返回首页","Base information":"基本信息","Basic Mode":"基本模式","Build with":"构建基于","Cancel":"取消","Certificate has expired":"此证书已过期","Certificate is valid":"此证书有效","Certificate Status":"证书状态","Comments":"注释","Configuration Name":"配置名称","Configurations":"配置","Configure SSL":"配置 SSL","Content":"内容","CPU Status":"CPU 状态","Create Another":"再创建一个","Created at":"创建时间","Creating client facilitates communication with the CA server":"正在创建客户端用于与 CA 服务器通信","Dashboard":"仪表盘","Database (Optional, default: database)":"数据库 (可选,默认: database)","Delete":"删除","Delete ID: %{id}":"删除 ID: %{id}","Delete site: %{site_name}":"删除站点: %{site_name}","Development Mode":"开发模式","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"关闭 %{name} 自动续签失败","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁盘 IO","Domain Config Created Successfully":"域名配置文件创建成功","Edit %{n}":"编辑 %{n}","Edit Configuration":"编辑配置","Edit Site":"编辑站点","Email (*)":"邮箱 (*)","Enable auto-renewal failed for %{name}":"启用 %{name} 自动续签失败","Enable failed":"启用失败","Enable TLS":"启用 TLS","Enabled":"启用","Enabled successfully":"启用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 对网站进行加密","Error Logs":"错误日志","Expiration Date: %{date}":"过期时间: %{date}","Export":"导出","Failed to disable %{msg}":"禁用失败 %{msg}","Failed to enable %{msg}":"启用失败 %{msg}","Failed to get certificate information":"获取证书信息失败","File Not Found":"未找到文件","Filter":"过滤","Finished":"完成","Generate":"生成","Generating private key for registering account":"正在生成私钥用于注册账户","Getting the certificate, please wait...":"正在获取证书,请稍等...","Home":"首页","Install":"安装","Install successfully":"安装成功","Intermediate Certification Authorities: %{issuer}":"中级证书颁发机构: %{issuer}","Issued certificate successfully":"证书申请成功","Leave blank for no change":"留空表示不修改","Load Averages:":"系统负载:","Location":"Location","Locations":"Locations","Login":"登录","Login successful":"登录成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 HTTPChallengePort (默认: 9180)","Manage Configs":"配置管理","Manage Sites":"网站管理","Manage Users":"用户管理","Memory":"内存","Memory and Storage":"内存与存储","Modify":"修改","Modify Config":"修改配置文件","Name":"名称","Network":"网络","Network Statistics":"流量统计","Network Total Receive":"下载流量","Network Total Send":"上传流量","Next":"下一步","Nginx Log":"Nginx 日志","No":"取消","Not Found":"找不到页面","Not Valid Before: %{date}":"此前无效: %{date}","Note: The server_name in the current configuration must be the domain name you need to get the certificate.":"注意:当前配置中的 server_name 必须为需要申请证书的域名。","Obtaining certificate":"正在获取证书","OK":"确定","Params":"参数","Password":"密码","Password (*)":"密码 (*)","Path":"路径","Please input your E-mail!":"请输入您的邮箱!","Please input your password!":"请输入您的密码!","Please input your username!":"请输入您的用户名!","Preparing lego configurations":"正在准备 Lego 的配置","Prohibit changing root password in demo":"禁止在演示模式下修改 root 账户的密码","Prohibit deleting the default user":"禁止删除默认用户","Project Team":"项目团队","Reads":"读","Receive":"下载","Registering user":"正在注册用户","Reloading nginx":"正在重载 Nginx","Reset":"重置","Save":"保存","Save Directive":"保存指令","Save error %{msg}":"保存错误 %{msg}","Save Successfully":"保存成功","Saved successfully":"保存成功","Selector":"选择器","Send":"上传","Server error":"服务器错误","Server Info":"服务器信息","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必须为 server_name 指令指明参数","server_name parameters more than one":"server_name 指令包含多个参数","Single Directive":"单行指令","Site Logs":"站点列表","Sites List":"站点列表","Status":"状态","Storage":"存储","Subject Name: %{name}":"主体名称: %{name}","Table":"列表","Terminal":"终端","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.":"系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续签。","The filename cannot contain the following characters: %{c}":"文件名不能包含以下字符: %{c}","The username or password is incorrect":"用户名或密码错误","Updated at":"修改时间","Uptime:":"运行时间:","Username":"用户名","Username (*)":"用户名 (*)","Using HTTP01 challenge provider":"使用 HTTP01 challenge provider","Warning":"警告","Writes":"写","Writing certificate private key to disk":"正在将证书私钥写入磁盘","Writing certificate to disk":"正在将证书写入磁盘","Yes":"是的","License":{"Project":"开源许可"}},"zh_TW":{"About":"關於","Action":"操作","Add Directive Below":"在下面新增指令","Add Location":"新增 Location","Add Site":"新增站點","Advance Mode":"高階模式","Are you sure you want to remove this directive?":"您確定要刪除這條指令?","Auto-renewal disabled for %{name}":"已關閉 %{name} 自動續簽","Auto-renewal enabled for %{name}":"已啟用 %{name} 自動續簽","Back":"返回","Base information":"基本訊息","Basic Mode":"基本模式","Build with":"構建基於","Cancel":"取消","Certificate has expired":"此憑證已過期","Certificate is valid":"此憑證有效","Certificate Status":"憑證狀態","Comments":"註釋","Configuration Name":"配置名稱","Configurations":"配置","Configure SSL":"配置 SSL","Content":"內容","CPU Status":"中央處理器狀態","CPU:":"中央處理器:","Create Another":"再創建一個","Created at":"建立時間","Dashboard":"儀表盤","Database (Optional, default: database)":"資料庫 (可選,預設: database)","Delete ID: %{id}":"刪除 ID: %{id}","Development Mode":"開發模式","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"關閉 %{name} 自動續簽失敗","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁碟 IO","Domain Config Created Successfully":"域名配置文件創建成功","Edit %{n}":"編輯 %{n}","Edit Configuration":"編輯配置","Edit Site":"編輯站點","Email (*)":"郵箱 (*)","Enable auto-renewal failed for %{name}":"啟用 %{name} 自動續簽失敗","Enable failed":"啟用失敗","Enable TLS":"啟用 TLS","Enabled":"啟用","Enabled successfully":"啟用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 對網站進行加密","Expiration Date: %{date}":"過期時間: %{date}","Failed to disable %{msg}":"禁用失敗 %{msg}","Failed to enable %{msg}":"啟用失敗 %{msg}","File Not Found":"未找到檔案","Finished":"完成","Getting the certificate, please wait...":"正在獲取憑證,請稍等...","Home":"首頁","Install":"安裝","Intermediate Certification Authorities: %{issuer}":"中級憑證頒發機構: %{issuer}","Leave blank for no change":"留空表示不修改","Load Averages:":"系統負載:","Location":"Location","Locations":"Locations","Login":"登入","Login successful":"登入成功","Logout successful":"登出成功","Manage Configs":"配置管理","Manage Sites":"網站管理","Manage Users":"使用者管理","Memory":"記憶體","Memory and Storage":"記憶體和存儲","Modify Config":"修改配置","Name":"名稱","Network":"網路","Network Statistics":"網路統計","Network Total Receive":"下載流量","Network Total Send":"上傳流量","Next":"下一步","No":"取消","Not Found":"找不到頁面","Not Valid Before: %{date}":"此前無效: %{date}","OK":"確定","OS:":"作業系統:","Params":"參數","Password":"密碼","Password (*)":"密碼 (*)","Path":"路徑","Please input your E-mail!":"請輸入您的郵箱!","Please input your password!":"請輸入您的密碼!","Please input your username!":"請輸入您的使用者名稱!","Project Team":"專案團隊","Reads":"讀","Receive":"下載","Save":"儲存","Save Directive":"儲存指令","Save error %{msg}":"儲存錯誤 %{msg}","Saved successfully":"儲存成功","Send":"上傳","Server error":"伺服器錯誤","Server Info":"伺服器資訊","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必須為 server_name 指令指明參數","server_name parameters more than one":"server_name 指令包含多個參數","Single Directive":"單行指令","Sites List":"站點列表","Status":"狀態","Storage":"儲存","Subject Name: %{name}":"主體名稱: %{name}","Swap":"交換空間","Terminal":"終端","The filename cannot contain the following characters: %{c}":"檔名不能包含以下字元: %{c}","Updated at":"修改時間","Uptime:":"執行時間:","Username":"使用者名稱","Username (*)":"使用者名稱 (*)","Warning":"警告","Writes":"寫","Yes":"是的","License":{"Project":"開源軟體授權條款"}},"en":{"About":"About","Action":"Action","Add Directive Below":"Add Directive Below","Add Location":"Add Location","Add Site":"Add Site","Advance Mode":"Advance Mode","Are you sure you want to remove this directive?":"Are you sure you want to remove this directive?","Auto-renewal disabled for %{name}":"Auto-renewal disabled for %{name}","Auto-renewal enabled for %{name}":"Auto-renewal enabled for %{name}","Back":"Back","Base information":"Base information","Basic Mode":"Basic Mode","Build with":"Build with","Cancel":"Cancel","Certificate has expired":"Certificate has expired","Certificate is valid":"Certificate is valid","Certificate Status":"Certificate Status","Comments":"Comments","Configuration Name":"Configuration Name","Configurations":"Configurations","Configure SSL":"Configure SSL","Content":"Content","CPU Status":"CPU Status","CPU:":"CPU:","Create Another":"Create Another","Created at":"Created at","Dashboard":"Dashboard","Database (Optional, default: database)":"Database (Optional, default: database)","Development Mode":"Development Mode","Directive":"Directive","Directives":"Directives","Disable auto-renewal failed for %{name}":"Disable auto-renewal failed for %{name}","Disabled":"Disabled","Disabled successfully":"Disabled successfully","Disk IO":"Disk IO","Domain Config Created Successfully":"Domain Config Created Successfully","Edit %{n}":"Edit %{n}","Edit Configuration":"Edit Configuration","Edit Site":"Edit Site","Email (*)":"Email (*)","Enable auto-renewal failed for %{name}":"Enable auto-renewal failed for %{name}","Enable failed":"Enable failed","Enable TLS":"Enable TLS","Enabled":"Enabled","Enabled successfully":"Enabled successfully","Encrypt website with Let's Encrypt":"Encrypt website with Let's Encrypt","Expiration Date: %{date}":"Expiration Date: %{date}","Failed to disable %{msg}":"Failed to disable %{msg}","Failed to enable %{msg}":"Failed to enable %{msg}","File Not Found":"File Not Found","Finished":"Finished","Getting the certificate, please wait...":"Getting the certificate, please wait...","Home":"Home","Install":"Install","Intermediate Certification Authorities: %{issuer}":"Intermediate Certification Authorities: %{issuer}","Leave blank for no change":"Leave blank for no change","Load Averages:":"Load Averages:","Location":"Location","Locations":"Locations","Login":"Login","Login successful":"Login successful","Logout successful":"Logout successful","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.","Manage Configs":"Manage Configs","Manage Sites":"Manage Sites","Manage Users":"Manage Users","Memory":"Memory","Memory and Storage":"Memory and Storage","Modify Config":"Modify Config","Name":"Name","Network":"Network","Network Statistics":"Network Statistics","Network Total Receive":"Network Total Receive","Network Total Send":"Network Total Send","Next":"Next","No":"No","Not Found":"Not Found","Not Valid Before: %{date}":"Not Valid Before: %{date}","Note: The server_name in the current configuration must be the domain name you need to get the certificate.":"Note: The server_name in the current configuration must be the domain name you need to get the certificate.","OS:":"OS:","Params":"Params","Password":"Password","Password (*)":"Password (*)","Path":"Path","Please input your E-mail!":"Please input your E-mail!","Please input your password!":"Please input your password!","Please input your username!":"Please input your username!","Project Team":"Project Team","Reads":"Reads","Receive":"Receive","Save":"Save","Save Directive":"Save Directive","Save error %{msg}":"Save error %{msg}","Saved successfully":"Saved successfully","Send":"Send","Server error":"Server error","Server Info":"Server Info","server_name not found in directives":"server_name not found in directives","server_name parameter is required":"server_name parameter is required","server_name parameters more than one":"server_name parameters more than one","Single Directive":"Single Directive","Sites List":"Sites List","Status":"Status","Storage":"Storage","Subject Name: %{name}":"Subject Name: %{name}","Swap":"Swap","Terminal":"Terminal","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.":"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.","The filename cannot contain the following characters: %{c}":"The filename cannot contain the following characters: %{c}","Updated at":"Updated at","Uptime:":"Uptime:","Username":"Username","Username (*)":"Username (*)","Warning":"Warning","Writes":"Writes","Yes":"Yes","License":{"Project":"License"}}}
\ No newline at end of file
+{"zh_CN":{"About":"关于","Access Logs":"访问日志","Action":"操作","Add":"添加","Add Directive Below":"在下面添加指令","Add Location":"添加 Location","Add Site":"添加站点","Advance Mode":"高级模式","Are you sure you want to delete?":"您确定要删除吗?","Are you sure you want to remove this directive?":"您确定要删除这条指令?","Are you sure you want to remove this location?":"您确定要删除这个 Location?","Author":"作者","Auto":"自动","Auto Cert":"自动更新","Auto cert is enabled, please do not modify this certification.":"自动更新已启用,请勿修改此证书配置。","Auto Refresh":"自动刷新","Auto-renewal disabled for %{name}":"成功关闭 %{name} 自动续签","Auto-renewal enabled for %{name}":"成功启用 %{name} 自动续签","Back":"返回","Back Home":"返回首页","Base information":"基本信息","Basic Mode":"基本模式","Batch Modify":"批量修改","Build with":"构建基于","Cancel":"取消","Certificate has expired":"此证书已过期","Certificate is valid":"此证书有效","Certificate Status":"证书状态","Certification":"证书","Change Certificate":"更改证书","Comments":"注释","Config Templates":"配置","Configuration Name":"配置名称","Configurations":"配置","Configure SSL":"配置 SSL","Content":"内容","CPU Status":"CPU 状态","CPU:":"CPU:","Create Another":"再创建一个","Created at":"创建时间","Creating client facilitates communication with the CA server":"正在创建客户端用于与 CA 服务器通信","Custom":"自定义","Dark":"深色","Dashboard":"仪表盘","Database (Optional, default: database)":"数据库 (可选,默认: database)","Delete":"删除","Delete ID: %{id}":"删除 ID: %{id}","Delete site: %{site_name}":"删除站点: %{site_name}","Description":"描述","Development Mode":"开发模式","Dir":"目录","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"关闭 %{name} 自动续签失败","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁盘 IO","Domain":"域名","Domain Config Created Successfully":"域名配置文件创建成功","Edit %{n}":"编辑 %{n}","Edit Configuration":"编辑配置","Edit Site":"编辑站点","Email (*)":"邮箱 (*)","Enable auto-renewal failed for %{name}":"启用 %{name} 自动续签失败","Enable failed":"启用失败","Enable TLS":"启用 TLS","Enabled":"启用","Enabled successfully":"启用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 对网站进行加密","Error Logs":"错误日志","Expiration Date: %{date}":"过期时间: %{date}","Export":"导出","Failed to disable %{msg}":"禁用失败 %{msg}","Failed to enable %{msg}":"启用失败 %{msg}","Failed to get certificate information":"获取证书信息失败","File":"文件","File Not Found":"未找到文件","Filter":"过滤","Finished":"完成","Format Code":"代码格式化","Format error %{msg}":"保存错误 %{msg}","Format successfully":"保存成功","Generate":"生成","Generating private key for registering account":"正在生成私钥用于注册账户","Getting the certificate, please wait...":"正在获取证书,请稍等...","Home":"首页","HTTP Challenge Port":"HTTP Challenge 监听端口","HTTP Port":"HTTP 监听端口","Install":"安装","Install successfully":"安装成功","Intermediate Certification Authorities: %{issuer}":"中级证书颁发机构: %{issuer}","Issued certificate successfully":"证书申请成功","Jwt Secret":"Jwt 密钥","Leave blank for no change":"留空表示不修改","Light":"浅色","Load Averages:":"系统负载:","Location":"Location","Locations":"Locations","Login":"登录","Login successful":"登录成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 HTTPChallengePort (默认: 9180)","Manage Configs":"配置管理","Manage Sites":"网站管理","Manage Users":"用户管理","Memory":"内存","Memory and Storage":"内存与存储","Modify":"修改","Modify Config":"修改配置文件","Multi-line Directive":"单行指令","Name":"名称","Network":"网络","Network Statistics":"流量统计","Network Total Receive":"下载流量","Network Total Send":"上传流量","Next":"下一步","Nginx Access Log Path":"Nginx 访问日志路径","Nginx Error Log Path":"Nginx 错误日志路径","Nginx Log":"Nginx 日志","No":"取消","Not Found":"找不到页面","Not Valid Before: %{date}":"此前无效: %{date}","Note":"注意","Obtaining certificate":"正在获取证书","OK":"确定","OS:":"OS:","Params":"参数","Password":"密码","Password (*)":"密码 (*)","Path":"路径","Please input your E-mail!":"请输入您的邮箱!","Please input your password!":"请输入您的密码!","Please input your username!":"请输入您的用户名!","Preference":"偏好设置","Preparing lego configurations":"正在准备 Lego 的配置","Prohibit changing root password in demo":"禁止在演示模式下修改 root 账户的密码","Prohibit deleting the default user":"禁止删除默认用户","Project Team":"项目团队","Reads":"读","Receive":"下载","Registering user":"正在注册用户","Reloading nginx":"正在重载 Nginx","Reset":"重置","Run Mode":"运行模式","Save":"保存","Save Directive":"保存指令","Save error %{msg}":"保存错误 %{msg}","Save successfully":"保存成功","Save Successfully":"保存成功","Saved successfully":"保存成功","Selector":"选择器","Send":"上传","Server error":"服务器错误","Server Info":"服务器信息","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必须为 server_name 指令指明参数","Single Directive":"单行指令","Site Logs":"站点列表","Sites List":"站点列表","SSL Certificate Key Path":"SSL证书密钥路径","SSL Certificate Path":"SSL证书路径","SSL Certification Content":"SSL证书内容","SSL Certification Key Content":"SSL证书密钥内容","Status":"状态","Storage":"存储","Subject Name: %{name}":"主体名称: %{name}","Swap":"Swap","Table":"列表","Terminal":"终端","Terminal Start Command":"终端启动命令","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.":"系统将会每小时检测一次该域名证书,若距离上次签发已超过1个月,则将自动续签。","The filename cannot contain the following characters: %{c}":"文件名不能包含以下字符: %{c}","The server_name in the current configuration must be the domain name you need to get the certificate.":"当前配置中的 server_name 必须为需要申请证书的域名。","The username or password is incorrect":"用户名或密码错误","Theme":"主题","Type":"类型","Updated at":"修改时间","Updated successfully":"更新成功","Uptime:":"运行时间:","Username":"用户名","Username (*)":"用户名 (*)","Using HTTP01 challenge provider":"使用 HTTP01 challenge provider","View":"查看","Warning":"警告","Writes":"写","Writing certificate private key to disk":"正在将证书私钥写入磁盘","Writing certificate to disk":"正在将证书写入磁盘","Yes":"是的","License":{"Project":"开源许可"}},"en":{"About":"About","Action":"Action","Add Directive Below":"Add Directive Below","Add Location":"Add Location","Add Site":"Add Site","Advance Mode":"Advance Mode","Are you sure you want to remove this directive?":"Are you sure you want to remove this directive?","Auto-renewal disabled for %{name}":"Auto-renewal disabled for %{name}","Auto-renewal enabled for %{name}":"Auto-renewal enabled for %{name}","Back":"Back","Base information":"Base information","Basic Mode":"Basic Mode","Build with":"Build with","Cancel":"Cancel","Certificate has expired":"Certificate has expired","Certificate is valid":"Certificate is valid","Certificate Status":"Certificate Status","Comments":"Comments","Configuration Name":"Configuration Name","Configurations":"Configurations","Configure SSL":"Configure SSL","Content":"Content","CPU Status":"CPU Status","CPU:":"CPU:","Create Another":"Create Another","Created at":"Created at","Dashboard":"Dashboard","Database (Optional, default: database)":"Database (Optional, default: database)","Development Mode":"Development Mode","Directive":"Directive","Directives":"Directives","Disable auto-renewal failed for %{name}":"Disable auto-renewal failed for %{name}","Disabled":"Disabled","Disabled successfully":"Disabled successfully","Disk IO":"Disk IO","Domain Config Created Successfully":"Domain Config Created Successfully","Edit %{n}":"Edit %{n}","Edit Configuration":"Edit Configuration","Edit Site":"Edit Site","Email (*)":"Email (*)","Enable auto-renewal failed for %{name}":"Enable auto-renewal failed for %{name}","Enable failed":"Enable failed","Enable TLS":"Enable TLS","Enabled":"Enabled","Enabled successfully":"Enabled successfully","Encrypt website with Let's Encrypt":"Encrypt website with Let's Encrypt","Expiration Date: %{date}":"Expiration Date: %{date}","Failed to disable %{msg}":"Failed to disable %{msg}","Failed to enable %{msg}":"Failed to enable %{msg}","File Not Found":"File Not Found","Finished":"Finished","Getting the certificate, please wait...":"Getting the certificate, please wait...","Home":"Home","Install":"Install","Intermediate Certification Authorities: %{issuer}":"Intermediate Certification Authorities: %{issuer}","Leave blank for no change":"Leave blank for no change","Load Averages:":"Load Averages:","Location":"Location","Locations":"Locations","Login":"Login","Login successful":"Login successful","Logout successful":"Logout successful","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.","Manage Configs":"Manage Configs","Manage Sites":"Manage Sites","Manage Users":"Manage Users","Memory":"Memory","Memory and Storage":"Memory and Storage","Modify Config":"Modify Config","Name":"Name","Network":"Network","Network Statistics":"Network Statistics","Network Total Receive":"Network Total Receive","Network Total Send":"Network Total Send","Next":"Next","No":"No","Not Found":"Not Found","Not Valid Before: %{date}":"Not Valid Before: %{date}","OS:":"OS:","Params":"Params","Password":"Password","Password (*)":"Password (*)","Path":"Path","Please input your E-mail!":"Please input your E-mail!","Please input your password!":"Please input your password!","Please input your username!":"Please input your username!","Project Team":"Project Team","Reads":"Reads","Receive":"Receive","Save":"Save","Save Directive":"Save Directive","Save error %{msg}":"Save error %{msg}","Saved successfully":"Saved successfully","Send":"Send","Server error":"Server error","Server Info":"Server Info","server_name not found in directives":"server_name not found in directives","server_name parameter is required":"server_name parameter is required","Single Directive":"Single Directive","Sites List":"Sites List","Status":"Status","Storage":"Storage","Subject Name: %{name}":"Subject Name: %{name}","Swap":"Swap","Terminal":"Terminal","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.":"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.","The filename cannot contain the following characters: %{c}":"The filename cannot contain the following characters: %{c}","Updated at":"Updated at","Uptime:":"Uptime:","Username":"Username","Username (*)":"Username (*)","Warning":"Warning","Writes":"Writes","Yes":"Yes","License":{"Project":"License"}},"zh_TW":{"About":"關於","Access Logs":"訪問日誌","Action":"操作","Add":"新增","Add Directive Below":"在下面新增指令","Add Location":"新增 Location","Add Site":"新增站點","Advance Mode":"高階模式","Are you sure you want to delete?":"你確定你要刪除?","Are you sure you want to remove this directive?":"您確定要刪除這條指令?","Are you sure you want to remove this location?":"您確定要刪除此 Location 嗎?","Auto":"自動","Auto Refresh":"自動刷新","Auto-renewal disabled for %{name}":"已關閉 %{name} 自動續簽","Auto-renewal enabled for %{name}":"已啟用 %{name} 自動續簽","Back":"返回","Back Home":"回到首頁","Base information":"基本訊息","Basic Mode":"基本模式","Batch Modify":"批量修改","Build with":"構建基於","Cancel":"取消","Certificate has expired":"此憑證已過期","Certificate is valid":"此憑證有效","Certificate Status":"憑證狀態","Comments":"註釋","Configuration Name":"配置名稱","Configurations":"配置","Configure SSL":"配置 SSL","Content":"內容","CPU Status":"中央處理器狀態","CPU:":"中央處理器:","Create Another":"再創建一個","Created at":"建立時間","Creating client facilitates communication with the CA server":"創建客戶端方便與CA服務器通信","Dark":"深色","Dashboard":"儀表盤","Database (Optional, default: database)":"資料庫 (可選,預設: database)","Delete":"刪除","Delete ID: %{id}":"刪除 ID: %{id}","Delete site: %{site_name}":"刪除站點:%{site_name}","Development Mode":"開發模式","Directive":"指令","Directives":"指令","Disable auto-renewal failed for %{name}":"關閉 %{name} 自動續簽失敗","Disabled":"禁用","Disabled successfully":"禁用成功","Disk IO":"磁碟 IO","Domain Config Created Successfully":"域名配置文件創建成功","Edit %{n}":"編輯 %{n}","Edit Configuration":"編輯配置","Edit Site":"編輯站點","Email (*)":"郵箱 (*)","Enable auto-renewal failed for %{name}":"啟用 %{name} 自動續簽失敗","Enable failed":"啟用失敗","Enable TLS":"啟用 TLS","Enabled":"啟用","Enabled successfully":"啟用成功","Encrypt website with Let's Encrypt":"用 Let's Encrypt 對網站進行加密","Error Logs":"錯誤日志","Expiration Date: %{date}":"過期時間: %{date}","Export":"導出","Failed to disable %{msg}":"禁用失敗 %{msg}","Failed to enable %{msg}":"啟用失敗 %{msg}","Failed to get certificate information":"獲取證書信息失敗","File Not Found":"未找到檔案","Filter":"篩選","Finished":"完成","Generate":"生成","Generating private key for registering account":"生成註冊賬號私鑰","Getting the certificate, please wait...":"正在獲取憑證,請稍等...","Home":"首頁","Install":"安裝","Install successfully":"安裝成功","Intermediate Certification Authorities: %{issuer}":"中級憑證頒發機構: %{issuer}","Issued certificate successfully":"頒發證書成功","Leave blank for no change":"留空表示不修改","Light":"淺色","Load Averages:":"系統負載:","Location":"Location","Locations":"Locations","Login":"登入","Login successful":"登入成功","Logout successful":"登出成功","Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort (default: 9180) before getting the certificate.":"在獲取證書前,請確保配置檔案中已將 .well-known 目錄反向代理到 HTTPChallengePort (預設: 9180)","Manage Configs":"配置管理","Manage Sites":"網站管理","Manage Users":"使用者管理","Memory":"記憶體","Memory and Storage":"記憶體和存儲","Modify":"修改","Modify Config":"修改配置","Name":"名稱","Network":"網路","Network Statistics":"網路統計","Network Total Receive":"下載流量","Network Total Send":"上傳流量","Next":"下一步","Nginx Log":"Nginx 日誌","No":"取消","Not Found":"找不到頁面","Not Valid Before: %{date}":"此前無效: %{date}","Obtaining certificate":"正在獲取證書,請稍等...","OK":"確定","OS:":"作業系統:","Params":"參數","Password":"密碼","Password (*)":"密碼 (*)","Path":"路徑","Please input your E-mail!":"請輸入您的郵箱!","Please input your password!":"請輸入您的密碼!","Please input your username!":"請輸入您的使用者名稱!","Preference":"設定","Preparing lego configurations":"準備 Lego 配置","Prohibit changing root password in demo":"禁止在demo中修改root密碼","Prohibit deleting the default user":"禁止刪除默認用戶","Project Team":"專案團隊","Reads":"讀","Receive":"下載","Registering user":"註冊用戶","Reloading nginx":"重载 Nginx","Reset":"重設","Save":"儲存","Save Directive":"儲存指令","Save error %{msg}":"儲存錯誤 %{msg}","Save successfully":"保存成功","Save Successfully":"保存成功","Saved successfully":"儲存成功","Selector":"選擇器","Send":"上傳","Server error":"伺服器錯誤","Server Info":"伺服器資訊","server_name not found in directives":"未在指令集合中找到 server_name","server_name parameter is required":"必須為 server_name 指令指明參數","Single Directive":"單行指令","Site Logs":"網站日誌","Sites List":"站點列表","Status":"狀態","Storage":"儲存","Subject Name: %{name}":"主體名稱: %{name}","Swap":"交換空間","Table":"表格","Terminal":"終端","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.":"系統將會每小時檢測一次該域名證書,若距離上次簽發已超過1個月,則將自動續簽。
如果您之前沒有證書,請先點選「從 Let's Encrypt 獲取證書」。","The filename cannot contain the following characters: %{c}":"檔名不能包含以下字元: %{c}","The username or password is incorrect":"用戶名或密碼不正確","Theme":"外觀樣式","Updated at":"修改時間","Updated successfully":"已成功更新","Uptime:":"執行時間:","Username":"使用者名稱","Username (*)":"使用者名稱 (*)","Using HTTP01 challenge provider":"使用 HTTP01 挑戰提供者","Warning":"警告","Writes":"寫","Writing certificate private key to disk":"將證書私鑰寫入磁盤","Writing certificate to disk":"將證書寫入磁盤","Yes":"是的","License":{"Project":"開源軟體授權條款"}}}
\ No newline at end of file
diff --git a/frontend/src/language/zh_CN/app.mo b/frontend/src/language/zh_CN/app.mo
index 096d9f840..b158d7bc2 100644
Binary files a/frontend/src/language/zh_CN/app.mo and b/frontend/src/language/zh_CN/app.mo differ
diff --git a/frontend/src/language/zh_CN/app.po b/frontend/src/language/zh_CN/app.po
index 827ed7065..0a1c3c7c7 100644
--- a/frontend/src/language/zh_CN/app.po
+++ b/frontend/src/language/zh_CN/app.po
@@ -10,23 +10,24 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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:134
msgid "About"
msgstr "关于"
-#: src/routes/index.ts:99 src/views/domain/ngx_conf/LogEntry.vue:64
+#: src/routes/index.ts:109 src/views/domain/ngx_conf/LogEntry.vue:64
msgid "Access Logs"
msgstr "访问日志"
-#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:42
-#: src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
msgid "Action"
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
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
msgid "Add"
msgstr "添加"
@@ -36,45 +37,73 @@ msgstr "添加"
msgid "Add Directive Below"
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"
msgstr "添加 Location"
-#: src/routes/index.ts:55 src/views/domain/DomainAdd.vue:2
+#: src/routes/index.ts:57 src/views/domain/DomainAdd.vue:2
msgid "Add Site"
msgstr "添加站点"
-#: src/views/domain/DomainEdit.vue:19
+#: src/views/domain/DomainEdit.vue:18 src/views/domain/DomainEdit.vue:19
msgid "Advance Mode"
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 "您确定要删除吗?"
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:15
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:20
msgid "Are you sure you want to remove this directive?"
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?"
msgstr "您确定要删除这个 Location?"
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:11
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:15
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:19
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:29
+msgid "Author"
+msgstr "作者"
+
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
+msgid "Auto"
+msgstr "自动"
+
+#: src/views/cert/Cert.vue:41
+msgid "Auto Cert"
+msgstr "自动更新"
+
+#: src/views/cert/Cert.vue:8
+msgid "Auto cert is enabled, please do not modify this certification."
+msgstr "自动更新已启用,请勿修改此证书配置。"
+
#: src/views/nginx_log/NginxLog.vue:4
msgid "Auto Refresh"
msgstr "自动刷新"
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr "成功关闭 %{name} 自动续签"
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:65
msgid "Auto-renewal enabled for %{name}"
msgstr "成功启用 %{name} 自动续签"
-#: src/views/domain/DomainEdit.vue:178 src/views/nginx_log/NginxLog.vue:172
+#: src/views/config/Config.vue:16 src/views/config/Config.vue:17
+#: src/views/config/Config.vue:27 src/views/config/Config.vue:5
+#: src/views/config/ConfigEdit.vue:64 src/views/domain/DomainEdit.vue:187
+#: src/views/nginx_log/NginxLog.vue:173
msgid "Back"
msgstr "返回"
@@ -86,40 +115,61 @@ msgstr "返回首页"
msgid "Base information"
msgstr "基本信息"
-#: src/views/domain/DomainEdit.vue:22
+#: src/views/domain/DomainEdit.vue:21 src/views/domain/DomainEdit.vue:22
msgid "Basic Mode"
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
msgid "Build with"
msgstr "构建基于"
-#: src/components/StdDataDisplay/StdCurd.vue:28
-#: src/components/StdDataEntry/compontents/StdSelector.vue:11
-#: src/views/config/ConfigEdit.vue:49
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
msgid "Cancel"
msgstr "取消"
-#: src/views/domain/cert/CertInfo.vue:24
+#: src/views/domain/cert/CertInfo.vue:19
msgid "Certificate has expired"
msgstr "此证书已过期"
-#: src/views/domain/cert/CertInfo.vue:28
+#: src/views/domain/cert/CertInfo.vue:23
msgid "Certificate is valid"
msgstr "此证书有效"
-#: src/views/domain/cert/CertInfo.vue:14
+#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
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/NgxConfigEditor.vue:175
+#: src/routes/index.ts:87 src/views/cert/Cert.vue:2
+msgid "Certification"
+msgstr "证书"
+
+#: src/views/domain/cert/ChangeCert.vue:2
+#: src/views/domain/cert/ChangeCert.vue:3
+#: src/views/domain/cert/ChangeCert.vue:5
+msgid "Change Certificate"
+msgstr "更改证书"
+
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
msgid "Comments"
msgstr "注释"
-#: src/views/domain/DomainAdd.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
+msgid "Config Templates"
+msgstr "配置"
+
+#: src/views/domain/DomainAdd.vue:11
msgid "Configuration Name"
msgstr "配置名称"
@@ -131,8 +181,9 @@ msgstr "配置"
msgid "Configure SSL"
msgstr "配置 SSL"
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
msgid "Content"
msgstr "内容"
@@ -142,9 +193,9 @@ msgstr "CPU 状态"
#: src/views/dashboard/DashBoard.vue:153
msgid "CPU:"
-msgstr ""
+msgstr "CPU:"
-#: src/views/domain/DomainAdd.vue:150
+#: src/views/domain/DomainAdd.vue:149
msgid "Create Another"
msgstr "再创建一个"
@@ -156,7 +207,21 @@ msgstr "创建时间"
msgid "Creating client facilitates communication with the CA server"
msgstr "正在创建客户端用于与 CA 服务器通信"
-#: src/routes/index.ts:27
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:22
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:32
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:6
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:7
+msgid "Custom"
+msgstr "自定义"
+
+#: src/views/preference/Preference.vue:28
+#: src/views/preference/Preference.vue:29
+msgid "Dark"
+msgstr "深色"
+
+#: src/routes/index.ts:29
msgid "Dashboard"
msgstr "仪表盘"
@@ -164,41 +229,58 @@ msgstr "仪表盘"
msgid "Database (Optional, default: 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"
msgstr "删除"
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
msgid "Delete ID: %{id}"
msgstr "删除 ID: %{id}"
-#: src/views/domain/DomainList.vue:76
+#: src/views/domain/DomainList.vue:81
msgid "Delete site: %{site_name}"
msgstr "删除站点: %{site_name}"
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:16
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:21
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:30
+msgid "Description"
+msgstr "描述"
+
#: src/views/other/About.vue:7 src/views/other/About.vue:8
msgid "Development Mode"
msgstr "开发模式"
+#: src/views/config/config.ts:20
+msgid "Dir"
+msgstr "目录"
+
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:20
msgid "Directive"
msgstr "指令"
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
msgid "Directives"
msgstr "指令"
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:73
msgid "Disable auto-renewal failed for %{name}"
msgstr "关闭 %{name} 自动续签失败"
-#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainList.vue:17
-#: src/views/domain/DomainList.vue:29
+#: src/views/cert/Cert.vue:51 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"
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"
msgstr "禁用成功"
@@ -206,19 +288,23 @@ msgstr "禁用成功"
msgid "Disk IO"
msgstr "磁盘 IO"
-#: src/views/domain/DomainAdd.vue:60
+#: src/views/cert/Cert.vue:32
+msgid "Domain"
+msgstr "域名"
+
+#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr "域名配置文件创建成功"
-#: src/views/domain/DomainEdit.vue:5
+#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
msgstr "编辑 %{n}"
-#: src/routes/index.ts:77 src/views/config/ConfigEdit.vue:2
+#: src/routes/index.ts:79 src/views/config/ConfigEdit.vue:2
msgid "Edit Configuration"
msgstr "编辑配置"
-#: src/routes/index.ts:59
+#: src/routes/index.ts:61
msgid "Edit Site"
msgstr "编辑站点"
@@ -226,11 +312,11 @@ msgstr "编辑站点"
msgid "Email (*)"
msgstr "邮箱 (*)"
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:67
msgid "Enable auto-renewal failed for %{name}"
msgstr "启用 %{name} 自动续签失败"
-#: src/views/domain/DomainAdd.vue:50
+#: src/views/domain/DomainAdd.vue:51
msgid "Enable failed"
msgstr "启用失败"
@@ -238,39 +324,43 @@ msgstr "启用失败"
msgid "Enable 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/cert/Cert.vue:48 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"
msgstr "启用"
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
msgid "Enabled successfully"
msgstr "启用成功"
-#: src/views/domain/cert/IssueCert.vue:17
+#: src/views/domain/cert/IssueCert.vue:18
msgid "Encrypt website with Let's Encrypt"
msgstr "用 Let's Encrypt 对网站进行加密"
-#: src/routes/index.ts:103 src/views/domain/ngx_conf/LogEntry.vue:68
+#: src/routes/index.ts:113 src/views/domain/ngx_conf/LogEntry.vue:68
msgid "Error Logs"
msgstr "错误日志"
-#: src/views/domain/cert/CertInfo.vue:17
+#: src/views/domain/cert/CertInfo.vue:12
msgid "Expiration Date: %{date}"
msgstr "过期时间: %{date}"
#: 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"
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}"
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}"
msgstr "启用失败 %{msg}"
@@ -278,6 +368,10 @@ msgstr "启用失败 %{msg}"
msgid "Failed to get certificate information"
msgstr "获取证书信息失败"
+#: src/views/config/config.ts:22
+msgid "File"
+msgstr "文件"
+
#: src/views/other/Error.vue:3 src/views/other/Error.vue:4
msgid "File Not Found"
msgstr "未找到文件"
@@ -290,7 +384,19 @@ msgstr "过滤"
msgid "Finished"
msgstr "完成"
-#: src/components/StdDataEntry/compontents/StdPassword.vue:42
+#: src/views/config/ConfigEdit.vue:67
+msgid "Format Code"
+msgstr "代码格式化"
+
+#: src/views/config/ConfigEdit.vue:52
+msgid "Format error %{msg}"
+msgstr "保存错误 %{msg}"
+
+#: src/views/config/ConfigEdit.vue:50
+msgid "Format successfully"
+msgstr "保存成功"
+
+#: src/components/StdDataEntry/components/StdPassword.vue:42
msgid "Generate"
msgstr "生成"
@@ -298,15 +404,23 @@ msgstr "生成"
msgid "Generating private key for registering account"
msgstr "正在生成私钥用于注册账户"
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:96
msgid "Getting the certificate, please wait..."
msgstr "正在获取证书,请稍等..."
-#: src/routes/index.ts:20
+#: src/routes/index.ts:22
msgid "Home"
msgstr "首页"
-#: src/routes/index.ts:126 src/views/other/Install.vue:128
+#: src/views/preference/Preference.vue:17
+msgid "HTTP Challenge Port"
+msgstr "HTTP Challenge 监听端口"
+
+#: src/views/preference/Preference.vue:5
+msgid "HTTP Port"
+msgstr "HTTP 监听端口"
+
+#: src/routes/index.ts:144 src/views/other/Install.vue:128
msgid "Install"
msgstr "安装"
@@ -314,7 +428,7 @@ msgstr "安装"
msgid "Install successfully"
msgstr "安装成功"
-#: src/views/domain/cert/CertInfo.vue:15
+#: src/views/domain/cert/CertInfo.vue:10
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "中级证书颁发机构: %{issuer}"
@@ -322,23 +436,34 @@ msgstr "中级证书颁发机构: %{issuer}"
msgid "Issued certificate successfully"
msgstr "证书申请成功"
+#: src/views/preference/Preference.vue:11
+msgid "Jwt Secret"
+msgstr "Jwt 密钥"
+
#: src/views/user/User.vue:26
msgid "Leave blank for no change"
msgstr "留空表示不修改"
+#: src/views/preference/Preference.vue:25
+#: src/views/preference/Preference.vue:26
+msgid "Light"
+msgstr "浅色"
+
#: src/views/dashboard/DashBoard.vue:141
msgid "Load Averages:"
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"
msgstr "Location"
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
msgid "Locations"
msgstr "Locations"
-#: src/routes/index.ts:132 src/views/other/Login.vue:103
+#: src/routes/index.ts:150 src/views/other/Login.vue:103
msgid "Login"
msgstr "登录"
@@ -350,7 +475,7 @@ msgstr "登录成功"
msgid "Logout successful"
msgstr "登出成功"
-#: src/views/domain/cert/IssueCert.vue:226
+#: src/views/domain/cert/IssueCert.vue:211
msgid ""
"Make sure you have configured a reverse proxy for .well-known directory to "
"HTTPChallengePort (default: 9180) before getting the certificate."
@@ -358,15 +483,15 @@ msgstr ""
"在获取签发证书前,请确保配置文件中已将 .well-known 目录反向代理到 "
"HTTPChallengePort (默认: 9180)"
-#: src/routes/index.ts:68
+#: src/routes/index.ts:70
msgid "Manage Configs"
msgstr "配置管理"
-#: src/routes/index.ts:43 src/views/domain/DomainList.vue:2
+#: src/routes/index.ts:45 src/views/domain/DomainList.vue:2
msgid "Manage Sites"
msgstr "网站管理"
-#: src/routes/index.ts:35 src/views/user/User.vue:2
+#: src/routes/index.ts:37 src/views/user/User.vue:2
msgid "Manage Users"
msgstr "用户管理"
@@ -378,20 +503,26 @@ msgstr "内存"
msgid "Memory and Storage"
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"
msgstr "修改"
-#: src/views/domain/DomainAdd.vue:147
+#: src/views/domain/DomainAdd.vue:146
msgid "Modify Config"
msgstr "修改配置文件"
-#: src/views/config/Config.vue:12 src/views/domain/DomainList.vue:14
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:9
+msgid "Multi-line Directive"
+msgstr "单行指令"
+
+#: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
+#: src/views/domain/DomainEdit.vue:36 src/views/domain/DomainList.vue:15
msgid "Name"
msgstr "名称"
@@ -411,49 +542,56 @@ msgstr "下载流量"
msgid "Network Total Send"
msgstr "上传流量"
-#: src/views/domain/DomainAdd.vue:137
+#: src/views/domain/DomainAdd.vue:136
msgid "Next"
msgstr "下一步"
-#: src/routes/index.ts:93 src/views/nginx_log/NginxLog.vue:2
+#: src/views/preference/Preference.vue:33
+msgid "Nginx Access Log Path"
+msgstr "Nginx 访问日志路径"
+
+#: src/views/preference/Preference.vue:36
+msgid "Nginx Error Log Path"
+msgstr "Nginx 错误日志路径"
+
+#: src/routes/index.ts:103 src/views/nginx_log/NginxLog.vue:2
msgid "Nginx Log"
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/DirectiveEditorItem.vue:22
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
msgid "No"
msgstr "取消"
-#: src/routes/index.ts:138 src/routes/index.ts:140
+#: src/routes/index.ts:156 src/routes/index.ts:158
msgid "Not Found"
msgstr "找不到页面"
-#: src/views/domain/cert/CertInfo.vue:19
+#: src/views/domain/cert/CertInfo.vue:14
msgid "Not Valid Before: %{date}"
msgstr "此前无效: %{date}"
-#: src/views/domain/cert/IssueCert.vue:218
-msgid ""
-"Note: The server_name in the current configuration must be the domain name "
-"you need to get the certificate."
-msgstr "注意:当前配置中的 server_name 必须为需要申请证书的域名。"
+#: src/views/domain/cert/IssueCert.vue:38
+msgid "Note"
+msgstr "注意"
#: src/language/constants.ts:16 src/views/domain/cert/IssueCert.vue:3
msgid "Obtaining certificate"
msgstr "正在获取证书"
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
-#: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: 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/views/domain/DomainList.vue:25
msgid "OK"
msgstr "确定"
#: src/views/dashboard/DashBoard.vue:147
msgid "OS:"
-msgstr ""
+msgstr "OS:"
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:22
msgid "Params"
@@ -467,8 +605,8 @@ msgstr "密码"
msgid "Password (*)"
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"
msgstr "路径"
@@ -484,6 +622,10 @@ msgstr "请输入您的密码!"
msgid "Please input your username!"
msgstr "请输入您的用户名!"
+#: src/routes/index.ts:126 src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr "偏好设置"
+
#: src/language/constants.ts:12
msgid "Preparing lego configurations"
msgstr "正在准备 Lego 的配置"
@@ -516,34 +658,53 @@ msgstr "正在注册用户"
msgid "Reloading nginx"
msgstr "正在重载 Nginx"
+#: src/components/StdDataDisplay/StdTable.vue:10
#: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
msgid "Reset"
msgstr "重置"
-#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
+#: src/views/preference/Preference.vue:8
+msgid "Run Mode"
+msgstr "运行模式"
+
+#: src/views/config/ConfigEdit.vue:70 src/views/domain/DomainEdit.vue:190
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:40
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
+#: src/views/preference/Preference.vue:43
+#: src/views/preference/Preference.vue:44
msgid "Save"
msgstr "保存"
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:34
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:36
msgid "Save Directive"
msgstr "保存指令"
-#: src/views/config/ConfigEdit.vue:36 src/views/domain/DomainAdd.vue:54
+#: src/views/config/ConfigEdit.vue:43 src/views/domain/DomainAdd.vue:55
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
msgid "Save error %{msg}"
msgstr "保存错误 %{msg}"
-#: src/components/StdDataDisplay/StdCurd.vue:102
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+#: src/views/preference/Preference.vue:39
+msgid "Save successfully"
+msgstr "保存成功"
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
msgid "Save Successfully"
msgstr "保存成功"
-#: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/config/ConfigEdit.vue:41 src/views/domain/DomainAdd.vue:44
+#: src/views/domain/DomainEdit.vue:97
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:35
msgid "Saved successfully"
msgstr "保存成功"
-#: src/components/StdDataEntry/compontents/StdSelector.vue:13
+#: src/components/StdDataEntry/components/StdSelector.vue:13
msgid "Selector"
msgstr "选择器"
@@ -551,12 +712,14 @@ msgstr "选择器"
msgid "Send"
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/views/other/Install.vue:71
+#: 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:29 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/preference/Preference.vue:41
msgid "Server error"
msgstr "服务器错误"
@@ -564,32 +727,44 @@ msgstr "服务器错误"
msgid "Server Info"
msgstr "服务器信息"
-#: src/views/domain/cert/IssueCert.vue:29
+#: src/views/domain/cert/IssueCert.vue:30
msgid "server_name not found in directives"
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:111
msgid "server_name parameter is required"
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
msgid "Single Directive"
msgstr "单行指令"
-#: src/routes/index.ts:107
+#: src/routes/index.ts:117
msgid "Site Logs"
msgstr "站点列表"
-#: src/routes/index.ts:51
+#: src/routes/index.ts:53
msgid "Sites List"
msgstr "站点列表"
-#: src/views/domain/DomainList.vue:19
+#: src/views/cert/Cert.vue:65
+msgid "SSL Certificate Key Path"
+msgstr "SSL证书密钥路径"
+
+#: src/views/cert/Cert.vue:58
+msgid "SSL Certificate Path"
+msgstr "SSL证书路径"
+
+#: src/views/cert/Cert.vue:19
+msgid "SSL Certification Content"
+msgstr "SSL证书内容"
+
+#: src/views/cert/Cert.vue:22
+msgid "SSL Certification Key Content"
+msgstr "SSL证书密钥内容"
+
+#: src/views/domain/DomainList.vue:24
msgid "Status"
msgstr "状态"
@@ -597,23 +772,27 @@ msgstr "状态"
msgid "Storage"
msgstr "存储"
-#: src/views/domain/cert/CertInfo.vue:16
+#: src/views/domain/cert/CertInfo.vue:11
msgid "Subject Name: %{name}"
msgstr "主体名称: %{name}"
#: src/views/dashboard/DashBoard.vue:36
msgid "Swap"
-msgstr ""
+msgstr "Swap"
#: src/components/StdDataDisplay/StdCurd.vue:3
msgid "Table"
msgstr "列表"
-#: src/routes/index.ts:85 src/views/pty/Terminal.vue:2
+#: src/routes/index.ts:95 src/views/pty/Terminal.vue:2
msgid "Terminal"
msgstr "终端"
-#: src/views/domain/cert/IssueCert.vue:222
+#: src/views/preference/Preference.vue:14
+msgid "Terminal Start Command"
+msgstr "终端启动命令"
+
+#: src/views/domain/cert/IssueCert.vue:207
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."
@@ -624,15 +803,33 @@ msgstr ""
msgid "The filename cannot contain the following characters: %{c}"
msgstr "文件名不能包含以下字符: %{c}"
+#: src/views/domain/cert/IssueCert.vue:203
+msgid ""
+"The server_name in the current configuration must be the domain name you "
+"need to get the certificate."
+msgstr "当前配置中的 server_name 必须为需要申请证书的域名。"
+
#: src/language/constants.ts:6
msgid "The username or password is incorrect"
msgstr "用户名或密码错误"
-#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:36
-#: src/views/user/User.vue:37
+#: src/views/preference/Preference.vue:20
+msgid "Theme"
+msgstr "主题"
+
+#: src/views/config/config.ts:14
+msgid "Type"
+msgstr "类型"
+
+#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
msgid "Updated at"
msgstr "修改时间"
+#: src/components/StdDataDisplay/StdTable.vue:461
+msgid "Updated successfully"
+msgstr "更新成功"
+
#: src/views/dashboard/DashBoard.vue:137
msgid "Uptime:"
msgstr "运行时间:"
@@ -649,7 +846,13 @@ msgstr "用户名 (*)"
msgid "Using HTTP01 challenge provider"
msgstr "使用 HTTP01 challenge provider"
-#: src/views/domain/cert/IssueCert.vue:26 src/views/domain/DomainAdd.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:10
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:9
+msgid "View"
+msgstr "查看"
+
+#: src/views/domain/cert/IssueCert.vue:27 src/views/domain/DomainAdd.vue:22
msgid "Warning"
msgstr "警告"
@@ -666,8 +869,8 @@ msgstr "正在将证书私钥写入磁盘"
msgid "Writing certificate to disk"
msgstr "正在将证书写入磁盘"
-#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
-#: src/views/domain/ngx_conf/LocationEditor.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:21
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
msgid "Yes"
msgstr "是的"
@@ -676,6 +879,12 @@ msgctxt "Project"
msgid "License"
msgstr "开源许可"
+#~ msgid "Are you sure you want to delete ?"
+#~ msgstr "您确定要删除吗?"
+
+#~ msgid "server_name parameters more than one"
+#~ msgstr "server_name 指令包含多个参数"
+
#~ msgid "All logs"
#~ msgstr "所有日志"
@@ -721,9 +930,6 @@ msgstr "开源许可"
#~ msgid "Certificate Path (ssl_certificate)"
#~ msgstr "TLS 证书路径 (ssl_certificate)"
-#~ msgid "HTTP Listen Port"
-#~ msgstr "HTTP 监听端口"
-
#~ msgid "HTTPS Listen Port"
#~ msgstr "HTTPS 监听端口"
diff --git a/frontend/src/language/zh_TW/app.mo b/frontend/src/language/zh_TW/app.mo
new file mode 100644
index 000000000..3c29365c3
Binary files /dev/null and b/frontend/src/language/zh_TW/app.mo differ
diff --git a/frontend/src/language/zh_TW/app.po b/frontend/src/language/zh_TW/app.po
index 247037de6..1b3d1119d 100644
--- a/frontend/src/language/zh_TW/app.po
+++ b/frontend/src/language/zh_TW/app.po
@@ -11,25 +11,26 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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:134
msgid "About"
msgstr "關於"
-#: src/routes/index.ts:99 src/views/domain/ngx_conf/LogEntry.vue:64
+#: src/routes/index.ts:109 src/views/domain/ngx_conf/LogEntry.vue:64
msgid "Access Logs"
-msgstr ""
+msgstr "訪問日誌"
-#: src/views/config/Config.vue:24 src/views/domain/DomainList.vue:42
-#: src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
msgid "Action"
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
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
msgid "Add"
-msgstr ""
+msgstr "新增"
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:31
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
@@ -37,93 +38,143 @@ msgstr ""
msgid "Add Directive Below"
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"
msgstr "新增 Location"
-#: src/routes/index.ts:55 src/views/domain/DomainAdd.vue:2
+#: src/routes/index.ts:57 src/views/domain/DomainAdd.vue:2
msgid "Add Site"
msgstr "新增站點"
-#: src/views/domain/DomainEdit.vue:19
+#: src/views/domain/DomainEdit.vue:18 src/views/domain/DomainEdit.vue:19
msgid "Advance Mode"
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/DirectiveEditorItem.vue:20
msgid "Are you sure you want to remove this directive?"
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?"
-msgstr "您確定要刪除這條指令?"
+msgstr "您確定要刪除此 Location 嗎?"
+
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:11
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:15
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:19
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:29
+msgid "Author"
+msgstr ""
+
+#: src/views/preference/Preference.vue:22
+#: src/views/preference/Preference.vue:23
+msgid "Auto"
+msgstr "自動"
+
+#: src/views/cert/Cert.vue:41
+#, fuzzy
+msgid "Auto Cert"
+msgstr "自動刷新"
+
+#: src/views/cert/Cert.vue:8
+msgid "Auto cert is enabled, please do not modify this certification."
+msgstr ""
#: src/views/nginx_log/NginxLog.vue:4
msgid "Auto Refresh"
-msgstr ""
+msgstr "自動刷新"
-#: src/views/domain/cert/IssueCert.vue:78
+#: src/views/domain/cert/IssueCert.vue:71
msgid "Auto-renewal disabled for %{name}"
msgstr "已關閉 %{name} 自動續簽"
-#: src/views/domain/cert/IssueCert.vue:72
+#: src/views/domain/cert/IssueCert.vue:65
msgid "Auto-renewal enabled for %{name}"
msgstr "已啟用 %{name} 自動續簽"
-#: src/views/domain/DomainEdit.vue:178 src/views/nginx_log/NginxLog.vue:172
+#: src/views/config/Config.vue:16 src/views/config/Config.vue:17
+#: src/views/config/Config.vue:27 src/views/config/Config.vue:5
+#: src/views/config/ConfigEdit.vue:64 src/views/domain/DomainEdit.vue:187
+#: src/views/nginx_log/NginxLog.vue:173
msgid "Back"
msgstr "返回"
#: src/views/other/Error.vue:12
-#, fuzzy
msgid "Back Home"
-msgstr "返回"
+msgstr "回到首頁"
#: src/views/domain/DomainAdd.vue:5
msgid "Base information"
msgstr "基本訊息"
-#: src/views/domain/DomainEdit.vue:22
+#: src/views/domain/DomainEdit.vue:21 src/views/domain/DomainEdit.vue:22
msgid "Basic Mode"
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
msgid "Build with"
msgstr "構建基於"
-#: src/components/StdDataDisplay/StdCurd.vue:28
-#: src/components/StdDataEntry/compontents/StdSelector.vue:11
-#: src/views/config/ConfigEdit.vue:49
+#: src/components/StdDataDisplay/StdBatchEdit.vue:7
+#: src/components/StdDataDisplay/StdCurd.vue:27
+#: src/components/StdDataEntry/components/StdSelector.vue:11
msgid "Cancel"
msgstr "取消"
-#: src/views/domain/cert/CertInfo.vue:24
+#: src/views/domain/cert/CertInfo.vue:19
msgid "Certificate has expired"
msgstr "此憑證已過期"
-#: src/views/domain/cert/CertInfo.vue:28
+#: src/views/domain/cert/CertInfo.vue:23
msgid "Certificate is valid"
msgstr "此憑證有效"
-#: src/views/domain/cert/CertInfo.vue:14
+#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
msgid "Certificate Status"
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/NgxConfigEditor.vue:175
+#: src/routes/index.ts:87 src/views/cert/Cert.vue:2
+#, fuzzy
+msgid "Certification"
+msgstr "此憑證有效"
+
+#: src/views/domain/cert/ChangeCert.vue:2
+#: src/views/domain/cert/ChangeCert.vue:3
+#: src/views/domain/cert/ChangeCert.vue:5
+#, fuzzy
+msgid "Change Certificate"
+msgstr "正在獲取證書,請稍等..."
+
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/LocationEditor.vue:31
+#: src/views/domain/ngx_conf/LocationEditor.vue:47
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
msgid "Comments"
msgstr "註釋"
-#: src/views/domain/DomainAdd.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:61
+#, fuzzy
+msgid "Config Templates"
+msgstr "配置"
+
+#: src/views/domain/DomainAdd.vue:11
msgid "Configuration Name"
msgstr "配置名稱"
@@ -135,8 +186,9 @@ msgstr "配置"
msgid "Configure SSL"
msgstr "配置 SSL"
-#: src/views/domain/ngx_conf/LocationEditor.vue:27
-#: src/views/domain/ngx_conf/LocationEditor.vue:41
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:37
+#: src/views/domain/ngx_conf/LocationEditor.vue:53
msgid "Content"
msgstr "內容"
@@ -148,7 +200,7 @@ msgstr "中央處理器狀態"
msgid "CPU:"
msgstr "中央處理器:"
-#: src/views/domain/DomainAdd.vue:150
+#: src/views/domain/DomainAdd.vue:149
msgid "Create Another"
msgstr "再創建一個"
@@ -158,9 +210,23 @@ msgstr "建立時間"
#: src/language/constants.ts:13
msgid "Creating client facilitates communication with the CA server"
+msgstr "創建客戶端方便與CA服務器通信"
+
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:22
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:23
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:26
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:32
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:6
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:7
+msgid "Custom"
msgstr ""
-#: src/routes/index.ts:27
+#: src/views/preference/Preference.vue:28
+#: src/views/preference/Preference.vue:29
+msgid "Dark"
+msgstr "深色"
+
+#: src/routes/index.ts:29
msgid "Dashboard"
msgstr "儀表盤"
@@ -168,42 +234,58 @@ msgstr "儀表盤"
msgid "Database (Optional, default: 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"
-msgstr ""
+msgstr "刪除"
-#: src/components/StdDataDisplay/StdTable.vue:120
+#: src/components/StdDataDisplay/StdTable.vue:132
msgid "Delete ID: %{id}"
msgstr "刪除 ID: %{id}"
-#: src/views/domain/DomainList.vue:76
-#, fuzzy
+#: src/views/domain/DomainList.vue:81
msgid "Delete site: %{site_name}"
-msgstr "刪除 ID: %{id}"
+msgstr "刪除站點:%{site_name}"
+
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:12
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:16
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:20
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:21
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:24
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:30
+msgid "Description"
+msgstr ""
#: src/views/other/About.vue:7 src/views/other/About.vue:8
msgid "Development Mode"
msgstr "開發模式"
+#: src/views/config/config.ts:20
+msgid "Dir"
+msgstr ""
+
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:20
msgid "Directive"
msgstr "指令"
+#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:1
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:2
msgid "Directives"
msgstr "指令"
-#: src/views/domain/cert/IssueCert.vue:80
+#: src/views/domain/cert/IssueCert.vue:73
msgid "Disable auto-renewal failed for %{name}"
msgstr "關閉 %{name} 自動續簽失敗"
-#: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainList.vue:17
-#: src/views/domain/DomainList.vue:29
+#: src/views/cert/Cert.vue:51 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"
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"
msgstr "禁用成功"
@@ -211,19 +293,23 @@ msgstr "禁用成功"
msgid "Disk IO"
msgstr "磁碟 IO"
-#: src/views/domain/DomainAdd.vue:60
+#: src/views/cert/Cert.vue:32
+msgid "Domain"
+msgstr ""
+
+#: src/views/domain/DomainAdd.vue:58
msgid "Domain Config Created Successfully"
msgstr "域名配置文件創建成功"
-#: src/views/domain/DomainEdit.vue:5
+#: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
msgid "Edit %{n}"
msgstr "編輯 %{n}"
-#: src/routes/index.ts:77 src/views/config/ConfigEdit.vue:2
+#: src/routes/index.ts:79 src/views/config/ConfigEdit.vue:2
msgid "Edit Configuration"
msgstr "編輯配置"
-#: src/routes/index.ts:59
+#: src/routes/index.ts:61
msgid "Edit Site"
msgstr "編輯站點"
@@ -231,11 +317,11 @@ msgstr "編輯站點"
msgid "Email (*)"
msgstr "郵箱 (*)"
-#: src/views/domain/cert/IssueCert.vue:74
+#: src/views/domain/cert/IssueCert.vue:67
msgid "Enable auto-renewal failed for %{name}"
msgstr "啟用 %{name} 自動續簽失敗"
-#: src/views/domain/DomainAdd.vue:50
+#: src/views/domain/DomainAdd.vue:51
msgid "Enable failed"
msgstr "啟用失敗"
@@ -243,44 +329,52 @@ msgstr "啟用失敗"
msgid "Enable 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/cert/Cert.vue:48 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"
msgstr "啟用"
-#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
-#: src/views/domain/DomainList.vue:54
+#: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:109
+#: src/views/domain/DomainList.vue:59
msgid "Enabled successfully"
msgstr "啟用成功"
-#: src/views/domain/cert/IssueCert.vue:17
+#: src/views/domain/cert/IssueCert.vue:18
msgid "Encrypt website with Let's Encrypt"
msgstr "用 Let's Encrypt 對網站進行加密"
-#: src/routes/index.ts:103 src/views/domain/ngx_conf/LogEntry.vue:68
+#: src/routes/index.ts:113 src/views/domain/ngx_conf/LogEntry.vue:68
msgid "Error Logs"
-msgstr ""
+msgstr "錯誤日志"
-#: src/views/domain/cert/CertInfo.vue:17
+#: src/views/domain/cert/CertInfo.vue:12
msgid "Expiration Date: %{date}"
msgstr "過期時間: %{date}"
#: 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"
-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}"
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}"
msgstr "啟用失敗 %{msg}"
#: src/language/constants.ts:9
msgid "Failed to get certificate information"
+msgstr "獲取證書信息失敗"
+
+#: src/views/config/config.ts:22
+msgid "File"
msgstr ""
#: src/views/other/Error.vue:3 src/views/other/Error.vue:4
@@ -289,63 +383,96 @@ msgstr "未找到檔案"
#: src/views/nginx_log/NginxLog.vue:7
msgid "Filter"
-msgstr ""
+msgstr "篩選"
#: src/language/constants.ts:20 src/views/domain/DomainAdd.vue:7
msgid "Finished"
msgstr "完成"
-#: src/components/StdDataEntry/compontents/StdPassword.vue:42
-msgid "Generate"
+#: src/views/config/ConfigEdit.vue:67
+msgid "Format Code"
msgstr ""
+#: src/views/config/ConfigEdit.vue:52
+#, fuzzy
+msgid "Format error %{msg}"
+msgstr "儲存錯誤 %{msg}"
+
+#: src/views/config/ConfigEdit.vue:50
+#, fuzzy
+msgid "Format successfully"
+msgstr "保存成功"
+
+#: src/components/StdDataEntry/components/StdPassword.vue:42
+msgid "Generate"
+msgstr "生成"
+
#: src/language/constants.ts:11
msgid "Generating private key for registering account"
-msgstr ""
+msgstr "生成註冊賬號私鑰"
-#: src/views/domain/cert/IssueCert.vue:103
+#: src/views/domain/cert/IssueCert.vue:96
msgid "Getting the certificate, please wait..."
msgstr "正在獲取憑證,請稍等..."
-#: src/routes/index.ts:20
+#: src/routes/index.ts:22
msgid "Home"
msgstr "首頁"
-#: src/routes/index.ts:126 src/views/other/Install.vue:128
+#: src/views/preference/Preference.vue:17
+#, fuzzy
+msgid "HTTP Challenge Port"
+msgstr "HTTP 監聽埠"
+
+#: src/views/preference/Preference.vue:5
+#, fuzzy
+msgid "HTTP Port"
+msgstr "HTTP 監聽埠"
+
+#: src/routes/index.ts:144 src/views/other/Install.vue:128
msgid "Install"
msgstr "安裝"
#: src/views/other/Install.vue:68
-#, fuzzy
msgid "Install successfully"
-msgstr "啟用成功"
+msgstr "安裝成功"
-#: src/views/domain/cert/CertInfo.vue:15
+#: src/views/domain/cert/CertInfo.vue:10
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "中級憑證頒發機構: %{issuer}"
#: src/language/constants.ts:21
-#, fuzzy
msgid "Issued certificate successfully"
-msgstr "啟用成功"
+msgstr "頒發證書成功"
+
+#: src/views/preference/Preference.vue:11
+msgid "Jwt Secret"
+msgstr ""
#: src/views/user/User.vue:26
msgid "Leave blank for no change"
msgstr "留空表示不修改"
+#: src/views/preference/Preference.vue:25
+#: src/views/preference/Preference.vue:26
+msgid "Light"
+msgstr "淺色"
+
#: src/views/dashboard/DashBoard.vue:141
msgid "Load Averages:"
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"
msgstr "Location"
-#: src/views/domain/ngx_conf/LocationEditor.vue:39
+#: src/views/domain/ngx_conf/LocationEditor.vue:40
msgid "Locations"
msgstr "Locations"
-#: src/routes/index.ts:132 src/views/other/Login.vue:103
+#: src/routes/index.ts:150 src/views/other/Login.vue:103
msgid "Login"
msgstr "登入"
@@ -357,24 +484,23 @@ msgstr "登入成功"
msgid "Logout successful"
msgstr "登出成功"
-#: src/views/domain/cert/IssueCert.vue:226
-#, fuzzy
+#: src/views/domain/cert/IssueCert.vue:211
msgid ""
"Make sure you have configured a reverse proxy for .well-known directory to "
"HTTPChallengePort (default: 9180) before getting the certificate."
msgstr ""
-"在獲取憑證前,請確保配置檔案中已將 .well-known 目錄反向代理到 "
+"在獲取證書前,請確保配置檔案中已將 .well-known 目錄反向代理到 "
"HTTPChallengePort (預設: 9180)"
-#: src/routes/index.ts:68
+#: src/routes/index.ts:70
msgid "Manage Configs"
msgstr "配置管理"
-#: src/routes/index.ts:43 src/views/domain/DomainList.vue:2
+#: src/routes/index.ts:45 src/views/domain/DomainList.vue:2
msgid "Manage Sites"
msgstr "網站管理"
-#: src/routes/index.ts:35 src/views/user/User.vue:2
+#: src/routes/index.ts:37 src/views/user/User.vue:2
msgid "Manage Users"
msgstr "使用者管理"
@@ -386,21 +512,27 @@ msgstr "記憶體"
msgid "Memory and Storage"
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"
-msgstr "修改配置"
+msgstr "修改"
-#: src/views/domain/DomainAdd.vue:147
+#: src/views/domain/DomainAdd.vue:146
msgid "Modify Config"
msgstr "修改配置"
-#: src/views/config/Config.vue:12 src/views/domain/DomainList.vue:14
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:10
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:9
+#, fuzzy
+msgid "Multi-line Directive"
+msgstr "單行指令"
+
+#: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
+#: src/views/domain/DomainEdit.vue:36 src/views/domain/DomainList.vue:15
msgid "Name"
msgstr "名稱"
@@ -420,44 +552,52 @@ msgstr "下載流量"
msgid "Network Total Send"
msgstr "上傳流量"
-#: src/views/domain/DomainAdd.vue:137
+#: src/views/domain/DomainAdd.vue:136
msgid "Next"
msgstr "下一步"
-#: src/routes/index.ts:93 src/views/nginx_log/NginxLog.vue:2
+#: src/views/preference/Preference.vue:33
+#, fuzzy
+msgid "Nginx Access Log Path"
+msgstr "訪問日誌"
+
+#: src/views/preference/Preference.vue:36
+#, fuzzy
+msgid "Nginx Error Log Path"
+msgstr "Nginx 日誌"
+
+#: src/routes/index.ts:103 src/views/nginx_log/NginxLog.vue:2
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/DirectiveEditorItem.vue:22
+#: src/views/domain/ngx_conf/LocationEditor.vue:21
msgid "No"
msgstr "取消"
-#: src/routes/index.ts:138 src/routes/index.ts:140
+#: src/routes/index.ts:156 src/routes/index.ts:158
msgid "Not Found"
msgstr "找不到頁面"
-#: src/views/domain/cert/CertInfo.vue:19
+#: src/views/domain/cert/CertInfo.vue:14
msgid "Not Valid Before: %{date}"
msgstr "此前無效: %{date}"
-#: src/views/domain/cert/IssueCert.vue:218
-#, fuzzy
-msgid ""
-"Note: The server_name in the current configuration must be the domain name "
-"you need to get the certificate."
-msgstr "注意:當前配置中的 server_name 必須為需要申請憑證的域名。"
+#: src/views/domain/cert/IssueCert.vue:38
+msgid "Note"
+msgstr ""
#: src/language/constants.ts:16 src/views/domain/cert/IssueCert.vue:3
msgid "Obtaining certificate"
-msgstr ""
+msgstr "正在獲取證書,請稍等..."
-#: src/components/StdDataDisplay/StdCurd.vue:29
-#: src/components/StdDataDisplay/StdTable.vue:43
-#: src/components/StdDataEntry/compontents/StdSelector.vue:12
-#: src/views/domain/DomainList.vue:26
+#: 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/views/domain/DomainList.vue:25
msgid "OK"
msgstr "確定"
@@ -477,8 +617,8 @@ msgstr "密碼"
msgid "Password (*)"
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"
msgstr "路徑"
@@ -494,18 +634,21 @@ msgstr "請輸入您的密碼!"
msgid "Please input your username!"
msgstr "請輸入您的使用者名稱!"
+#: src/routes/index.ts:126 src/views/preference/Preference.vue:2
+msgid "Preference"
+msgstr "設定"
+
#: src/language/constants.ts:12
-#, fuzzy
msgid "Preparing lego configurations"
-msgstr "配置"
+msgstr "準備 Lego 配置"
#: src/language/constants.ts:7
msgid "Prohibit changing root password in demo"
-msgstr ""
+msgstr "禁止在demo中修改root密碼"
#: src/language/constants.ts:8
msgid "Prohibit deleting the default user"
-msgstr ""
+msgstr "禁止刪除默認用戶"
#: src/views/other/About.vue:19
msgid "Project Team"
@@ -521,54 +664,75 @@ msgstr "下載"
#: src/language/constants.ts:15
msgid "Registering user"
-msgstr ""
+msgstr "註冊用戶"
#: src/language/constants.ts:19
msgid "Reloading nginx"
-msgstr ""
+msgstr "重载 Nginx"
+#: src/components/StdDataDisplay/StdTable.vue:10
#: src/components/StdDataDisplay/StdTable.vue:15
+#: src/components/StdDataDisplay/StdTable.vue:9
msgid "Reset"
-msgstr ""
+msgstr "重設"
+
+#: src/views/preference/Preference.vue:8
+#, fuzzy
+msgid "Run Mode"
+msgstr "高階模式"
-#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
+#: src/views/config/ConfigEdit.vue:70 src/views/domain/DomainEdit.vue:190
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:40
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:41
+#: src/views/preference/Preference.vue:43
+#: src/views/preference/Preference.vue:44
msgid "Save"
msgstr "儲存"
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:32
-#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:33
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:34
#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:35
+#: src/views/domain/ngx_conf/directive/DirectiveAdd.vue:36
msgid "Save Directive"
msgstr "儲存指令"
-#: src/views/config/ConfigEdit.vue:36 src/views/domain/DomainAdd.vue:54
+#: src/views/config/ConfigEdit.vue:43 src/views/domain/DomainAdd.vue:55
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:37
msgid "Save error %{msg}"
msgstr "儲存錯誤 %{msg}"
-#: src/components/StdDataDisplay/StdCurd.vue:102
-#, fuzzy
+#: src/components/StdDataDisplay/StdBatchEdit.vue:40
+#: src/views/preference/Preference.vue:39
+msgid "Save successfully"
+msgstr "保存成功"
+
+#: src/components/StdDataDisplay/StdCurd.vue:108
msgid "Save Successfully"
-msgstr "儲存成功"
+msgstr "保存成功"
-#: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
-#: src/views/domain/DomainEdit.vue:91
+#: src/views/config/ConfigEdit.vue:41 src/views/domain/DomainAdd.vue:44
+#: src/views/domain/DomainEdit.vue:97
+#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:35
msgid "Saved successfully"
msgstr "儲存成功"
-#: src/components/StdDataEntry/compontents/StdSelector.vue:13
+#: src/components/StdDataEntry/components/StdSelector.vue:13
msgid "Selector"
-msgstr ""
+msgstr "選擇器"
#: src/views/dashboard/DashBoard.vue:21 src/views/dashboard/DashBoard.vue:85
msgid "Send"
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/views/other/Install.vue:71
+#: 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:29 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/preference/Preference.vue:41
msgid "Server error"
msgstr "伺服器錯誤"
@@ -576,33 +740,48 @@ msgstr "伺服器錯誤"
msgid "Server Info"
msgstr "伺服器資訊"
-#: src/views/domain/cert/IssueCert.vue:29
+#: src/views/domain/cert/IssueCert.vue:30
msgid "server_name not found in directives"
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:111
msgid "server_name parameter is required"
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
msgid "Single Directive"
msgstr "單行指令"
-#: src/routes/index.ts:107
-#, fuzzy
+#: src/routes/index.ts:117
msgid "Site Logs"
-msgstr "站點列表"
+msgstr "網站日誌"
-#: src/routes/index.ts:51
+#: src/routes/index.ts:53
msgid "Sites List"
msgstr "站點列表"
-#: src/views/domain/DomainList.vue:19
+#: src/views/cert/Cert.vue:65
+#, fuzzy
+msgid "SSL Certificate Key Path"
+msgstr "憑證狀態"
+
+#: src/views/cert/Cert.vue:58
+#, fuzzy
+msgid "SSL Certificate Path"
+msgstr "憑證狀態"
+
+#: src/views/cert/Cert.vue:19
+#, fuzzy
+msgid "SSL Certification Content"
+msgstr "憑證狀態"
+
+#: src/views/cert/Cert.vue:22
+#, fuzzy
+msgid "SSL Certification Key Content"
+msgstr "憑證狀態"
+
+#: src/views/domain/DomainList.vue:24
msgid "Status"
msgstr "狀態"
@@ -610,7 +789,7 @@ msgstr "狀態"
msgid "Storage"
msgstr "儲存"
-#: src/views/domain/cert/CertInfo.vue:16
+#: src/views/domain/cert/CertInfo.vue:11
msgid "Subject Name: %{name}"
msgstr "主體名稱: %{name}"
@@ -619,36 +798,57 @@ msgid "Swap"
msgstr "交換空間"
#: src/components/StdDataDisplay/StdCurd.vue:3
-#, fuzzy
msgid "Table"
-msgstr "啟用"
+msgstr "表格"
-#: src/routes/index.ts:85 src/views/pty/Terminal.vue:2
+#: src/routes/index.ts:95 src/views/pty/Terminal.vue:2
msgid "Terminal"
msgstr "終端"
-#: src/views/domain/cert/IssueCert.vue:222
-#, fuzzy
+#: src/views/preference/Preference.vue:14
+msgid "Terminal Start Command"
+msgstr ""
+
+#: src/views/domain/cert/IssueCert.vue:207
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 ""
-"系統將會每小時檢測一次該域名憑證,若距離上次簽發已超過1個月,則將自動續簽。"
-"
如果您之前沒有憑證,請先點選「從 Let's Encrypt 獲取憑證」。"
+"系統將會每小時檢測一次該域名證書,若距離上次簽發已超過1個月,則將自動續簽。"
+"
如果您之前沒有證書,請先點選「從 Let's Encrypt 獲取證書」。"
#: src/views/other/Install.vue:54
msgid "The filename cannot contain the following characters: %{c}"
msgstr "檔名不能包含以下字元: %{c}"
+#: src/views/domain/cert/IssueCert.vue:203
+#, fuzzy
+msgid ""
+"The server_name in the current configuration must be the domain name you "
+"need to get the certificate."
+msgstr "注意:當前配置中的 server_name 必須為需要申請證書的域名。"
+
#: src/language/constants.ts:6
msgid "The username or password is incorrect"
+msgstr "用戶名或密碼不正確"
+
+#: src/views/preference/Preference.vue:20
+msgid "Theme"
+msgstr "外觀樣式"
+
+#: src/views/config/config.ts:14
+msgid "Type"
msgstr ""
-#: src/views/config/Config.vue:17 src/views/domain/DomainList.vue:36
-#: src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
msgid "Updated at"
msgstr "修改時間"
+#: src/components/StdDataDisplay/StdTable.vue:461
+msgid "Updated successfully"
+msgstr "已成功更新"
+
#: src/views/dashboard/DashBoard.vue:137
msgid "Uptime:"
msgstr "執行時間:"
@@ -663,9 +863,15 @@ msgstr "使用者名稱 (*)"
#: src/language/constants.ts:14
msgid "Using HTTP01 challenge provider"
+msgstr "使用 HTTP01 挑戰提供者"
+
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:10
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:13
+#: src/views/domain/ngx_conf/ConfigTemplate.vue:9
+msgid "View"
msgstr ""
-#: src/views/domain/cert/IssueCert.vue:26 src/views/domain/DomainAdd.vue:24
+#: src/views/domain/cert/IssueCert.vue:27 src/views/domain/DomainAdd.vue:22
msgid "Warning"
msgstr "警告"
@@ -676,14 +882,14 @@ msgstr "寫"
#: src/language/constants.ts:18
msgid "Writing certificate private key to disk"
-msgstr ""
+msgstr "將證書私鑰寫入磁盤"
#: src/language/constants.ts:17
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/DirectiveEditorItem.vue:21
+#: src/views/domain/ngx_conf/LocationEditor.vue:20
msgid "Yes"
msgstr "是的"
@@ -692,6 +898,13 @@ msgctxt "Project"
msgid "License"
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"
#~ msgstr "404 未找到頁面"
@@ -728,9 +941,6 @@ msgstr "開源軟體授權條款"
#~ msgid "Certificate Path (ssl_certificate)"
#~ msgstr "TLS 證書路徑 (ssl_certificate)"
-#~ msgid "HTTP Listen Port"
-#~ msgstr "HTTP 監聽埠"
-
#~ msgid "HTTPS Listen Port"
#~ msgstr "HTTPS 監聽埠"
diff --git a/frontend/src/layouts/BaseLayout.vue b/frontend/src/layouts/BaseLayout.vue
index 729f1b51a..c26a39270 100644
--- a/frontend/src/layouts/BaseLayout.vue
+++ b/frontend/src/layouts/BaseLayout.vue
@@ -39,7 +39,7 @@ const lang = computed(() => {
-
+