diff --git a/web/assets/js/langs.js b/web/assets/js/langs.js index 9038fc54..fcaf19a4 100644 --- a/web/assets/js/langs.js +++ b/web/assets/js/langs.js @@ -9,11 +9,6 @@ const supportLangs = [ value: 'fa-IR', icon: '🇮🇷', }, - { - name: '汉语', - value: 'zh-Hans', - icon: '🇨🇳', - }, { name: 'Русский', value: 'ru-RU', diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index f7e13be2..2b337c9f 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -421,6 +421,7 @@ class HttpStreamSettings extends XrayCommonClass { } } + class QuicStreamSettings extends XrayCommonClass { constructor(security=VmessMethods.NONE, key=RandomUtil.randomSeq(10), type='none') { @@ -482,7 +483,7 @@ class TlsStreamSettings extends XrayCommonClass { cipherSuites = '', rejectUnknownSni = false, certificates=[new TlsStreamSettings.Cert()], - alpn=[ALPN_OPTION.HTTP1,ALPN_OPTION.H2], + alpn=[ALPN_OPTION.H2,ALPN_OPTION.HTTP1], settings=new TlsStreamSettings.Settings()) { super(); this.server = serverName; @@ -815,7 +816,6 @@ class SockoptStreamSettings extends XrayCommonClass { this.tproxy = tproxy; } static fromJson(json = {}) { - if (Object.keys(json).length === 0) return undefined; return new SockoptStreamSettings( json.acceptProxyProtocol, json.tcpFastOpen, @@ -823,7 +823,6 @@ class SockoptStreamSettings extends XrayCommonClass { json.tproxy, ); } - toJson() { return { acceptProxyProtocol: this.acceptProxyProtocol, diff --git a/web/html/xui/form/sniffing.html b/web/html/xui/form/sniffing.html index 65b3312d..31858ef3 100644 --- a/web/html/xui/form/sniffing.html +++ b/web/html/xui/form/sniffing.html @@ -5,7 +5,7 @@ Sniffing diff --git a/web/html/xui/inbounds.html b/web/html/xui/inbounds.html index 4e1873f8..7e438f91 100644 --- a/web/html/xui/inbounds.html +++ b/web/html/xui/inbounds.html @@ -711,7 +711,7 @@ openEditClient(dbInboundId, client) { dbInbound = this.dbInbounds.find(row => row.id === dbInboundId); clients = this.getInboundClients(dbInbound); - index = this.findIndexOfClient(dbInbound.protocol, clients, client); + index = this.findIndexOfClient(clients, client); clientModal.show({ title: '{{ i18n "pages.client.edit"}}', okText: '{{ i18n "pages.client.submitEdit"}}', @@ -725,13 +725,8 @@ isEdit: true }); }, - findIndexOfClient(protocol, clients, client) { - switch (protocol) { - case Protocols.TROJAN: - case Protocols.SHADOWSOCKS: - return clients.findIndex(item => item.password === client.password && item.email === client.email); - default: return clients.findIndex(item => item.id === client.id && item.email === client.email); - } + findIndexOfClient(clients, client) { + return clients.findIndex(item => JSON.stringify(item) === JSON.stringify(client)); }, async addClient(clients, dbInboundId) { const data = { @@ -837,7 +832,8 @@ dbInbound = this.dbInbounds.find(row => row.id === dbInboundId); inbound = dbInbound.toInbound(); clients = this.getClients(dbInbound.protocol, inbound.settings); - index = this.findIndexOfClient(dbInbound.protocol, clients, client); + client.enable = !client.enable; // For finding correct index in findIndexOfClient() function + index = this.findIndexOfClient(clients, client); clients[index].enable = !clients[index].enable; clientId = this.getClientId(dbInbound.protocol, clients[index]); await this.updateClient(clients[index], dbInboundId, clientId); diff --git a/web/html/xui/index.html b/web/html/xui/index.html index 62e60297..2a0745f4 100644 --- a/web/html/xui/index.html +++ b/web/html/xui/index.html @@ -78,9 +78,8 @@ - 3X: v{{ .cur_ver }} - Xray: v[[ status.xray.version ]] - @panel3xui + X-UI: v{{ .cur_ver }} + Xray version: v[[ status.xray.version ]] @@ -111,7 +110,7 @@ {{ i18n "pages.index.operationHours" }}: Xray: [[ formatSecond(status.appStats.uptime) ]] - OS: + System: [[ formatSecond(status.uptime) ]] @@ -609,4 +608,4 @@ - \ No newline at end of file + diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 09a2f7d7..364e1963 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -36,8 +36,8 @@ "status" = "Trạng thái" "enabled" = "Đã kích hoạt" "disabled" = "Đã tắt" -"depleted" = "Đã cạn kiệt" -"depletingSoon" = "Sắp cạn kiệt" +"depleted" = "Depleted" +"depletingSoon" = "Deplete Soon" "domainName" = "Tên miền" "monitor" = "Listening IP" "certificate" = "Chứng chỉ" @@ -127,6 +127,7 @@ "network" = "Mạng" "destinationPort" = "Cổng đích" "targetAddress" = "Địa chỉ mục tiêu" +"disableInsecureEncryption" = "Vô hiệu hóa mã hóa không an toàn" "monitorDesc" = "Mặc định để trống" "meansNoLimit" = "Nghĩa là không giới hạn" "totalFlow" = "Tổng lưu lượng" @@ -154,9 +155,9 @@ "resetAllClientTraffics" = "Đặt lại lưu lượng cho tất cả client" "resetAllClientTrafficTitle" = "Đặt lại lưu lượng cho tất cả client" "resetAllClientTrafficContent" = "Bạn có chắc chắn muốn đặt lại tất cả lưu lượng cho tất cả client không?" -"delDepletedClients" = "Xóa các client đã cạn kiệt" -"delDepletedClientsTitle" = "Xóa các client đã cạn kiệt" -"delDepletedClientsContent" = "Bạn có chắc chắn muốn xóa tất cả các client đã cạn kiệt không?" +"delDepletedClients" = "Xóa các client đã Depleted" +"delDepletedClientsTitle" = "Xóa các client đã Depleted" +"delDepletedClientsContent" = "Bạn có chắc chắn muốn xóa tất cả các client đã Depleted không?" "email" = "Email" "emailDesc" = "Vui lòng cung cấp một địa chỉ email duy nhất." "IPLimit" = "Giới hạn IP" @@ -251,7 +252,7 @@ "expireTimeDiff" = "Ngưỡng hết hạn cho thông báo" "expireTimeDiffDesc" = "Nhận thông báo về việc hết hạn tài khoản trước ngưỡng này (đơn vị: ngày)" "trafficDiff" = "Ngưỡng lưu lượng cho thông báo" -"trafficDiffDesc" = "Nhận thông báo về việc cạn kiệt lưu lượng trước khi đạt đến ngưỡng này (đơn vị: GB)" +"trafficDiffDesc" = "Nhận thông báo về việc hết lưu lượng trước khi đạt đến ngưỡng này (đơn vị: GB)" "tgNotifyCpu" = "Ngưỡng cảnh báo tỷ lệ CPU" "tgNotifyCpuDesc" = "Nhận thông báo nếu tỷ lệ sử dụng CPU vượt quá ngưỡng này (đơn vị: %)" "timeZone" = "Múi giờ" @@ -273,10 +274,6 @@ "subDomainDesc" = "Mặc định để trống để nghe tất cả các tên miền và IP" "subUpdates" = "Khoảng thời gian cập nhật đăng ký" "subUpdatesDesc" = "Số giờ giữa các cập nhật trong ứng dụng khách" -"subEncrypt" = "Mã hóa cấu hình" -"subEncryptDesc" = "Mã hóa các cấu hình được trả về trong đăng ký" -"subShowInfo" = "Hiển thị thông tin sử dụng" -"subShowInfoDesc" = "Hiển thị lưu lượng truy cập còn lại và ngày sau tên cấu hình" [pages.settings.templates] "title" = "Mẫu" @@ -445,7 +442,7 @@ "exhaustedMsg" = "🚨 Sự cạn kiệt {{ .Type }}:\r\n" "exhaustedCount" = "🚨 Số lần cạn kiệt {{ .Type }}:\r\n" "disabled" = "🛑 Vô hiệu hóa: {{ .Disabled }}\r\n" -"depleteSoon" = "🔜 Sắp cạn kiệt: {{ .Deplete }}\r\n \r\n" +"depleteSoon" = "🔜 Deplete: {{ .Deplete }}\r\n \r\n" "backupTime" = "🗄 Thời gian sao lưu: {{ .Time }}\r\n" "refreshedOn" = "\r\n📋🔄 Đã cập nhật lần cuối vào: {{ .Time }}\r\n \r\n" @@ -460,7 +457,7 @@ "dbBackup" = "Tải Backup DB" "serverUsage" = "Sử Dụng Máy Chủ" "getInbounds" = "Lấy Inbounds" -"depleteSoon" = "Sắp Cạn Kiệt" +"depleteSoon" = "Deplete Soon" "clientUsage" = "Lấy Sử Dụng" "commands" = "Lệnh" "refresh" = "🔄 Cập Nhật"