diff --git a/media/3X-UI.png b/media/3X-UI.png index 8b1af8a7..e5f76b19 100644 Binary files a/media/3X-UI.png and b/media/3X-UI.png differ diff --git a/sub/subJsonService.go b/sub/subJsonService.go index c037eb00..70d58ebe 100644 --- a/sub/subJsonService.go +++ b/sub/subJsonService.go @@ -44,7 +44,6 @@ func NewSubJsonService(fragment string, mux string, rules string, subService *Su defaultRules, _ := routing["rules"].([]interface{}) json.Unmarshal([]byte(rules), &newRules) defaultRules = append(newRules, defaultRules...) - fmt.Printf("routing: %#v\n\nRules: %#v\n\n", routing, defaultRules) routing["rules"] = defaultRules configJson["routing"] = routing } diff --git a/web/assets/css/custom.css b/web/assets/css/custom.css index 3be33763..eb3965f5 100644 --- a/web/assets/css/custom.css +++ b/web/assets/css/custom.css @@ -36,6 +36,7 @@ --dark-color-codemirror-line-selection: rgba(0, 135, 113, 0.3); --dark-color-login-background: var(--dark-color-background); --dark-color-login-wave: var(--dark-color-surface-200); + --dark-color-tooltip: rgba(61, 76, 104, 0.9); } html[data-theme='ultra-dark'] { @@ -69,6 +70,7 @@ html[data-theme='ultra-dark'] { --dark-color-codemirror-line-selection: rgba(85, 85, 85, 0.4); --dark-color-login-background: #0a2227; --dark-color-login-wave: #0f2d32; + --dark-color-tooltip: rgba(88, 93, 100, 0.9); .ant-dropdown-menu-dark { background-color: var(--dark-color-surface-500); } @@ -143,10 +145,13 @@ html { style attribute { text-align: center; } -.ant-table-tbody > tr > td, + .ant-table-thead > tr > th { + padding: 16px 8px; +} + +.ant-table-tbody > tr > td { padding: 12px 8px; - overflow-wrap: break-word; } .ant-table-thead > tr > th { color: rgba(0, 0, 0, 0.85); @@ -155,10 +160,6 @@ style attribute { border-bottom: 1px solid #e8e8e8; transition: background 0.3s ease; } -.ant-table-row-cell-break-word { - word-wrap: break-word; - word-break: break-word; -} .ant-table table { width: 100%; @@ -649,11 +650,17 @@ style attribute { .dark .ant-modal-footer, .dark .ant-collapse-content, .dark .ant-calendar-footer, +.dark .ant-divider-horizontal.ant-divider-with-text-left:before, +.dark .ant-divider-horizontal.ant-divider-with-text-left:after, .dark .ant-divider-horizontal.ant-divider-with-text-center:before, .dark .ant-divider-horizontal.ant-divider-with-text-center:after { border-top-color: var(--dark-color-surface-300); } +.ant-divider-horizontal.ant-divider-with-text-left:before { + width: 10%; +} + .dark .ant-progress-text, .dark .ant-card-head, .dark .ant-form, @@ -712,7 +719,6 @@ style attribute { .dark .ant-select-dropdown, .dark .ant-select-dropdown li, .dark .ant-select-dropdown-menu-item, -.dark .ant-divider:not(.ant-divider-with-text-center), .dark .client-table-header, .dark .ant-select-selection--multiple .ant-select-selection__choice, .dark .ant-calendar-time-picker-inner { @@ -948,10 +954,15 @@ style attribute { background-color: #fff; } +.ant-checkbox-wrapper, +.ant-input-group-addon, +.ant-tabs-tab, +.ant-input::placeholder, +.ant-collapse-header, .ant-menu, .ant-radio-button-wrapper { - user-select: none; -webkit-user-select: none; + user-select: none; } .ant-calendar-date, @@ -1065,6 +1076,7 @@ li.ant-select-dropdown-menu-item:empty:after { color: rgba(255, 255, 255, 0.35); } +.dark .ant-divider:not(.ant-divider-with-text-center, .ant-divider-with-text-left, .ant-divider-with-text-right), .ant-dropdown-menu-dark, .dark .ant-calendar-year-panel-year:hover, .dark .ant-calendar-month-panel-month:hover, @@ -1216,15 +1228,39 @@ li.ant-select-dropdown-menu-item:empty:after { overflow-y: auto; } -.qr-bg { +.qr-cv { width: 100%; height: 100%; - background-color: #fff; + opacity: 0.8; + transition: all 0.3s; +} + +.qr-cv:hover { + opacity: 1; +} + +.qr-cv:active { + transform: scale(0.98); + transition: all 0.1s; +} + +.dark .qr-cv { + filter: invert(1); +} + +.qr-bg { + background-color: #ffffff; display: flex; justify-content: center; align-content: center; - padding: 0.5rem; + padding: 0.8rem; border-radius: 1rem; + border: solid 1px #e8e8e8; +} + +.dark .qr-bg { + background-color: var(--dark-color-surface-700); + border-color: var(--dark-color-surface-300); } .ant-input-group-addon:not(:first-child):not(:last-child) { @@ -1276,3 +1312,104 @@ b, strong { background-color: transparent !important; cursor: default !important; } + +.dark .ant-tooltip-inner, +.dark .ant-tooltip-arrow:before { + background-color: var(--dark-color-tooltip); +} + +.ant-select-sm .ant-select-selection__rendered { + margin-left: 10px; +} + +.ant-collapse { + -moz-animation: collfade 0.3s ease; + -webkit-animation: 0.3s collfade 0.3s ease; + animation: collfade 0.3s ease; +} + +@-webkit-keyframes collfade { + 0% { + transform: scaleY(.8); + transform-origin: 0% 0%; + opacity: 0; + } + + 100% { + transform: scaleY(1); + transform-origin: 0% 0%; + opacity: 1; + } +} + +@keyframes collfade { + 0% { + transform: scaleY(.8); + transform-origin: 0% 0%; + opacity: 0; + } + + 100% { + transform: scaleY(1); + transform-origin: 0% 0%; + opacity: 1; + } +} + +.ant-table-tbody>tr>td { + border-color: #f0f0f0; +} + +.ant-table-row-expand-icon { + vertical-align: middle; + margin-inline-end: 8px; + position: relative; + transform: scale(0.9411764705882353); +} + +.ant-table-row-collapsed::before { + transform: rotate(-180deg); + top: 7px; + inset-inline-end: 3px; + inset-inline-start: 3px; + height: 1px; + position: absolute; + background: currentcolor; + transition: transform 0.3s ease-out; + content: ""; +} + +.ant-table-row-collapsed::after { + transform: rotate(0deg); + top: 3px; + bottom: 3px; + inset-inline-start: 7px; + width: 1px; + position: absolute; + background: currentcolor; + transition: transform 0.3s ease-out; + content: ""; +} + +.ant-table-row-expanded::before { + top: 7px; + inset-inline-end: 3px; + inset-inline-start: 3px; + height: 1px; + position: absolute; + background: currentcolor; + transition: transform 0.3s ease-out; + content: ""; +} + +.ant-table-row-expanded::after { + top: 3px; + bottom: 3px; + inset-inline-start: 7px; + width: 1px; + transform: rotate(90deg); + position: absolute; + background: currentcolor; + transition: transform 0.3s ease-out; + content: ""; +} diff --git a/web/html/common/qrcode_modal.html b/web/html/common/qrcode_modal.html index 0e2b3a63..5cbe7858 100644 --- a/web/html/common/qrcode_modal.html +++ b/web/html/common/qrcode_modal.html @@ -1,32 +1,23 @@ {{define "qrcodeModal"}} - - {{ i18n "pages.inbounds.clickOnQRcode" }} - - - {{ i18n "pages.inbounds.client" }} - + :dialog-style="{ top: '20px' }" + :closable="true" + :class="themeSwitcher.currentTheme" + :footer="null" width="300px"> + + {{ i18n "pages.inbounds.clickOnQRcode" }} + + + {{ i18n "pages.inbounds.client" }} + diff --git a/web/html/xui/index.html b/web/html/xui/index.html index 157563c0..256a960b 100644 --- a/web/html/xui/index.html +++ b/web/html/xui/index.html @@ -19,327 +19,313 @@ - + {{ template "commonSider" . }} - - - - - - - + + + + + + + + + + + + + + +
CPU: [[ cpuCoreFormat(status.cpuCores) ]]
+
Speed: [[ cpuSpeedFormat(status.cpuSpeedMhz) ]]
+
+ + +
+ {{ i18n "pages.index.memory"}}: [[ sizeFormat(status.mem.current) ]] / [[ sizeFormat(status.mem.total) ]] +
+
+
+
+ + + + +
+ Swap: [[ sizeFormat(status.swap.current) ]] / [[ sizeFormat(status.swap.total) ]] +
+
+ + +
+ {{ i18n "pages.index.hard"}}: [[ sizeFormat(status.disk.current) ]] / [[ sizeFormat(status.disk.total) ]] +
+
+
+
+
+
+
+
+ + + + + 3X-UI: + v{{ .cur_ver }} + @Panel3xui + + + + + {{ i18n "pages.index.operationHours" }}: + Xray: [[ formatSecond(status.appStats.uptime) ]] + OS: [[ formatSecond(status.uptime) ]] + + + + + {{ i18n "pages.index.xrayStatus" }}: + [[ status.xray.state ]] + + An error occurred while running Xray + {{ i18n "pages.index.logs" }} + + + + + {{ i18n "pages.index.stopXray" }} + {{ i18n "pages.index.restartXray" }} + v[[ status.xray.version ]] + + + + + {{ i18n "menu.link" }}: + {{ i18n "pages.index.logs" }} + {{ i18n "pages.index.config" }} + {{ i18n "pages.index.backup" }} + + + + + {{ i18n "pages.index.systemLoad" }}: + + + [[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]] + + + + + + + + {{ i18n "usage"}}: + RAM: [[ sizeFormat(status.appStats.mem) ]] + Threads: [[ status.appStats.threads ]] + + + + - - - - - - -
CPU: [[ cpuCoreFormat(status.cpuCores) ]]
-
Speed: [[ cpuSpeedFormat(status.cpuSpeedMhz) ]]
-
- - -
- {{ i18n "pages.index.memory"}}: [[ sizeFormat(status.mem.current) ]] / [[ sizeFormat(status.mem.total) ]] -
-
-
-
- - - - -
- Swap: [[ sizeFormat(status.swap.current) ]] / [[ sizeFormat(status.swap.total) ]] -
-
- - -
- {{ i18n "pages.index.hard"}}: [[ sizeFormat(status.disk.current) ]] / [[ sizeFormat(status.disk.total) ]] -
-
-
-
-
-
+ + + + IPv4 + + + + + + + + IPv6 + + + +
-
- + + + + - - - 3X-UI: - v{{ .cur_ver }} - @Panel3xui - - - - - {{ i18n "pages.index.operationHours" }}: - Xray: [[ formatSecond(status.appStats.uptime) ]] - OS: [[ formatSecond(status.uptime) ]] - - - - - {{ i18n "pages.index.xrayStatus" }}: - [[ status.xray.state ]] - - - An error occurred while running Xray - {{ i18n "pages.index.logs" }} - - - - - {{ i18n "pages.index.stopXray" }} - {{ i18n "pages.index.restartXray" }} - v[[ status.xray.version ]] - - - - - {{ i18n "menu.link" }}: - {{ i18n "pages.index.logs" }} - {{ i18n "pages.index.config" }} - {{ i18n "pages.index.backup" }} - - - - - {{ i18n "pages.index.systemLoad" }}: - - - [[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]] - - - - - - - - {{ i18n "usage"}}: - - RAM: [[ sizeFormat(status.appStats.mem) ]] - - - Threads: [[ status.appStats.threads ]] - - - - - - - - - - IPv4 - - - - - - - - IPv6 - - - - - - - - - - - - - - TCP: [[ status.tcpCount ]] - - - - - - - - UDP: [[ status.udpCount ]] - - - - - - - - - - - - - - - Up: [[ sizeFormat(status.netIO.up) ]]/s - - - - - - - - - Down: [[ sizeFormat(status.netIO.down) ]]/s - - - - - - - - - - - - - - - Out: [[ sizeFormat(status.netTraffic.sent) ]] - - - - - - - - In: [[ sizeFormat(status.netTraffic.recv) ]] - - - - - - + + + + TCP: [[ status.tcpCount ]] + + + + + + + + UDP: [[ status.udpCount ]] + + + + - -
+ + + + + + + + + Up: [[ sizeFormat(status.netIO.up) ]]/s + + + + + + + + Down: [[ sizeFormat(status.netIO.down) ]]/s + + + + + + + + + + + + + + + Out: [[ sizeFormat(status.netTraffic.sent) ]] + + + + + + + + In: [[ sizeFormat(status.netTraffic.recv) ]] + + + + + + + +
+
- - - + + - - - - - - - 10 - 20 - 50 - 100 - - - Debug - Info - Notice - Warning - Error - - - - - SysLog - - - - - - -
+ :closable="true" @cancel="() => logModal.visible = false" + :class="themeSwitcher.currentTheme" + width="800px" footer=""> + + + + + + 10 + 20 + 50 + 100 + + + Debug + Info + Notice + Warning + Error + + + + + SysLog + + + + + + +
- - - - - [[ backupModal.exportText ]] - - - [[ backupModal.importText ]] - - + :closable="true" footer="" + :class="themeSwitcher.currentTheme"> + + + + + [[ backupModal.exportText ]] + + + [[ backupModal.importText ]] + + - -
+
{{template "js" .}} {{template "component/themeSwitcher" .}} {{template "textModal"}} diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index f2f27382..8b58941e 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -2,362 +2,374 @@ {{template "head" .}} - + {{ template "commonSider" . }} - - - - - - - - - - - - - {{ i18n "pages.settings.save" }} - {{ i18n "pages.settings.restartPanel" }} - + + + + + + + + + + + + + {{ i18n "pages.settings.save" }} + {{ i18n "pages.settings.restartPanel" }} + + + + + + + + + + + + + + + + + + + + + [[ value ]] + + + [[ key ]] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ i18n "pages.settings.security.admin"}} + + + + + + + + + + + + + + + {{ i18n "confirm" }} + + + {{ i18n "pages.settings.security.secret"}} + + + + + + + + + + + + + + + + + + + + + + + + {{ i18n "confirm" }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + [[ p ]] + - - - - - - - - - - - - - - - - [[ value ]] - - - [[ key ]] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ i18n "pages.settings.security.admin"}} - - - - - - - - - - - - - - - {{ i18n "confirm" }} - - - {{ i18n "pages.settings.security.secret"}} - - - - - - - - - - - - - - - - - - - - - - {{ i18n "confirm" }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ p ]] - - - - - - - - - - - - - - - - - - - - [[ p ]] - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [[ p ]] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + {{template "js" .}} {{template "component/themeSwitcher" .}} diff --git a/web/html/xui/xray.html b/web/html/xui/xray.html index 98dacd92..f42fb076 100644 --- a/web/html/xui/xray.html +++ b/web/html/xui/xray.html @@ -24,7 +24,6 @@ margin: 24px 16px; } } - @media (max-width: 768px) { .ant-tabs-nav .ant-tabs-tab { margin: 0; @@ -35,15 +34,12 @@ padding: 10px 0px; } } - .ant-tabs-bar { margin: 0; } - .ant-list-item { display: block; } - .collapse-title { color: inherit; font-weight: bold; @@ -51,606 +47,625 @@ padding: 10px 20px; border-bottom: 2px solid; } - .collapse-title > i { color: inherit; font-size: 24px; } + .ant-collapse-content-box > li { + padding: 12px 0 0 0 !important; + } + .ant-list-item > li { + padding: 10px 20px !important; + } - + {{ template "commonSider" . }} - - - - - - - - - - - - {{ i18n "pages.xray.save" }} - {{ i18n "pages.xray.restart" }} - - Error in running xray-core - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ s ]] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WARP - - - - {{ i18n "pages.settings.resetDefaultConfig" }} - - - - - - {{ i18n "pages.xray.rules.add" }} - - - - - - - - - - - - {{ i18n - "pages.xray.outbound.addOutbound" }} - WARP - - - - - - - - - - - - - - - - - - {{ i18n "pages.xray.outbound.addReverse" }} - - - - - - {{ i18n "pages.xray.balancer.addBalancer"}} - - - - - - - Observatory - Burst Observatory - - - - - - - - - - - {{ i18n "pages.xray.completeTemplate"}} - {{ i18n "pages.xray.Inbounds" }} - {{ i18n "pages.xray.Outbounds" }} - {{ i18n "pages.xray.Routings" }} - - - - - - - + + + + + + + + + + + + {{ i18n "pages.xray.save" }} + {{ i18n "pages.xray.restart" }} + + Error in running xray-core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [[ s ]] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WARP + + + + + {{ i18n "pages.settings.resetDefaultConfig" }} + + + + + + {{ i18n "pages.xray.rules.add" }} + + + + + + + + + + + + + {{ i18n "pages.xray.outbound.addOutbound" }} + + WARP + + + + + + + + + + + + + + + + + + + {{ i18n "pages.xray.outbound.addReverse" }} + + + + + + + + {{ i18n "pages.xray.balancer.addBalancer"}} + + + + + + + + Observatory + Burst Observatory + + + + + + + + + + + {{ i18n "pages.xray.completeTemplate"}} + {{ i18n "pages.xray.Inbounds" }} + {{ i18n "pages.xray.Outbounds" }} + {{ i18n "pages.xray.Routings" }} + + + + + + + - + {{template "js" .}} {{template "component/themeSwitcher" .}} {{template "component/sortableTable" .}} diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index c33f0220..2a547bdc 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -310,7 +310,14 @@ "subURI" = "Reverse Proxy URI" "subURIDesc" = "The URI path of the subscription URL for use behind proxies." "fragment" = "Fragmentation" -"fragmentDesc" = "Enable fragmentation for TLS hello packet" +"fragmentDesc" = "Enable fragmentation for TLS hello packet." +"fragmentSett" = "Fragmentation Settings" +"mux" = "Mux" +"muxDesc" = "Transmit multiple independent data streams within an established data stream." +"muxSett" = "Mux Settings" +"direct" = "Direct Connection" +"directDesc" = "Directly establishes connections with domains or IP ranges of a specific country." +"directSett" = "Direct Connection Options" [pages.xray] "title" = "Xray Configs" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index ca862cb1..960b8ba3 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -311,6 +311,13 @@ "subURIDesc" = "Cambiar el URI base de la URL de suscripción para usar detrás de los servidores proxy" "fragment" = "Fragmentación" "fragmentDesc" = "Habilitar la fragmentación para el paquete de saludo de TLS" +"fragmentSett" = "Configuración de fragmentación" +"mux" = "Mux" +"muxDesc" = "Transmita múltiples flujos de datos independientes dentro de un flujo de datos establecido." +"muxSett" = "Mux Configuración" +"direct" = "Conexión directa" +"directDesc" = "Establece conexiones directamente con dominios o rangos de IP de un país específico." +"directSett" = "Opciones de conexión directa" [pages.xray] "title" = "Xray Configuración" @@ -626,4 +633,4 @@ "removedTGUserSuccess" = "✅ {{ .Email }} : Usuario de Telegram eliminado exitosamente." "enableSuccess" = "✅ {{ .Email }} : Habilitado exitosamente." "disableSuccess" = "✅ {{ .Email }} : Deshabilitado exitosamente." -"askToAddUserId" = "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su ID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu ID de usuario: {{ .TgUserID }}" \ No newline at end of file +"askToAddUserId" = "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su ID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu ID de usuario: {{ .TgUserID }}" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 1b8a503a..7ec5a63d 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -309,8 +309,15 @@ "subShowInfoDesc" = "ترافیک و زمان باقی‌مانده را در برنامه‌های کاربری نمایش می‌دهد" "subURI" = "پروکسی معکوس URI مسیر" "subURIDesc" = "سابسکریپشن را برای استفاده در پشت پراکسی‌ها تغییر می‌دهد URI مسیر" -"fragment" = "تکه‌تکه شدن" -"fragmentDesc" = "فعال کردن تکه تکه شدن برای بسته نخست تی‌ال‌اس" +"fragment" = "فرگمنت" +"fragmentDesc" = "فعال کردن فرگمنت برای بسته‌ی نخست تی‌ال‌اس" +"fragmentSett" = "تنظیمات فرگمنت" +"mux" = "ماکس" +"muxDesc" = "چندین جریان داده مستقل را در یک جریان داده ثابت منتقل می کند" +"muxSett" = "تنظیمات ماکس" +"direct" = "اتصال مستقیم" +"directDesc" = "به طور مستقیم با دامنه ها یا محدوده آی‌پی یک کشور خاص ارتباط برقرار می کند" +"directSett" = "گزینه های اتصال مستقیم" [pages.xray] "title" = "پیکربندی ایکس‌ری" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index 1a8ed108..278bd7f3 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -311,6 +311,13 @@ "subURIDesc" = "URI path URL langganan untuk penggunaan di belakang proxy." "fragment" = "Fragmentasi" "fragmentDesc" = "Aktifkan fragmentasi untuk paket hello TLS" +"fragmentSett" = "Pengaturan Fragmentasi" +"mux" = "Mux" +"muxDesc" = "Mengirimkan beberapa aliran data independen dalam aliran data yang sudah ada." +"muxSett" = "Pengaturan Mux" +"direct" = "Koneksi langsung" +"directDesc" = "Secara langsung membuat koneksi dengan domain atau rentang IP negara tertentu." +"directSett" = "Opsi Koneksi Langsung" [pages.xray] "title" = "Konfigurasi Xray" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 5832f775..fb50845a 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -311,6 +311,13 @@ "subURIDesc" = "Изменить базовый URI URL-адреса подписки для использования за прокси-серверами" "fragment" = "Фрагментация" "fragmentDesc" = "Включить фрагментацию для пакета приветствия TLS" +"fragmentSett" = "Настройки фрагментации" +"mux" = "Mux" +"muxDesc" = "Передача нескольких независимых потоков данных в рамках установленного потока данных." +"muxSett" = "Mux Настройки" +"direct" = "Прямая связь" +"directDesc" = "Напрямую устанавливает соединения с доменами или диапазонами IP конкретной страны." +"directSett" = "Варианты прямого подключения" [pages.xray] "title" = "Настройки Xray" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 1614d28a..1ae16a58 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -311,6 +311,13 @@ "subURIDesc" = "URI до URL-адреси підписки для використання за проксі." "fragment" = "Фрагментація" "fragmentDesc" = "Увімкнути фрагментацію для пакету привітання TLS" +"fragmentSett" = "Параметри фрагментації" +"mux" = "Mux" +"muxDesc" = "Передавати кілька незалежних потоків даних у межах встановленого потоку даних." +"muxSett" = "Налаштування Mux" +"direct" = "Пряме підключення" +"directDesc" = "Безпосередньо встановлює з’єднання з доменами або діапазонами IP певної країни." +"directSett" = "Параметри прямого підключення" [pages.xray] "title" = "Xray конфігурації" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index c6542c38..786a8b4f 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -311,6 +311,13 @@ "subURIDesc" = "Thay đổi URI cơ sở của URL gói đăng ký để sử dụng cho proxy trung gian" "fragment" = "Sự phân mảnh" "fragmentDesc" = "Kích hoạt phân mảnh cho gói TLS hello" +"fragmentSett" = "Cài đặt phân mảnh" +"mux" = "Mux" +"muxDesc" = "Truyền nhiều luồng dữ liệu độc lập trong luồng dữ liệu đã thiết lập." +"muxSett" = "Mux Cài đặt" +"direct" = "Kết nối trực tiếp" +"directDesc" = "Trực tiếp thiết lập kết nối với tên miền hoặc dải IP của một quốc gia cụ thể." +"directSett" = "Tùy chọn kết nối trực tiếp" [pages.xray] "title" = "Cài đặt Xray" diff --git a/web/translation/translate.zh_Hans.toml b/web/translation/translate.zh_Hans.toml index 2e33025d..0693bb57 100644 --- a/web/translation/translate.zh_Hans.toml +++ b/web/translation/translate.zh_Hans.toml @@ -311,6 +311,13 @@ "subURIDesc" = "用于代理后面的订阅 URL 的 URI 路径" "fragment" = "分片" "fragmentDesc" = "启用 TLS hello 数据包分片" +"fragmentSett" = "设置" +"mux" = "多路复用器" +"muxDesc" = "在已建立的数据流内传输多个独立的数据流" +"muxSett" = "复用器设置" +"direct" = "直接连接" +"directDesc" = "直接与特定国家的域或IP范围建立连接" +"directSett" = "直接连接选项" [pages.xray] "title" = "Xray 配置"