mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-09-12 13:10:05 +00:00
Merge branch 'main' into issue-2953
This commit is contained in:
commit
8635bfa88e
24 changed files with 266 additions and 219 deletions
15
.github/workflows/release.yml
vendored
15
.github/workflows/release.yml
vendored
|
@ -1,12 +1,21 @@
|
||||||
name: Build and Release 3X-UI
|
name: Release 3X-UI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
push:
|
push:
|
||||||
pull_request:
|
branches:
|
||||||
types: [opened, synchronize, reopened]
|
- main
|
||||||
|
paths:
|
||||||
|
- '**.js'
|
||||||
|
- '**.css'
|
||||||
|
- '**.html'
|
||||||
|
- '**.sh'
|
||||||
|
- '**.go'
|
||||||
|
- 'go.mod'
|
||||||
|
- 'go.sum'
|
||||||
|
- 'x-ui.service'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
36
go.mod
36
go.mod
|
@ -1,6 +1,6 @@
|
||||||
module x-ui
|
module x-ui
|
||||||
|
|
||||||
go 1.24.2
|
go 1.24.3
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gin-contrib/gzip v1.2.3
|
github.com/gin-contrib/gzip v1.2.3
|
||||||
|
@ -13,13 +13,13 @@ require (
|
||||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
|
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
|
||||||
github.com/pelletier/go-toml/v2 v2.2.4
|
github.com/pelletier/go-toml/v2 v2.2.4
|
||||||
github.com/robfig/cron/v3 v3.0.1
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
github.com/shirou/gopsutil/v4 v4.25.3
|
github.com/shirou/gopsutil/v4 v4.25.4
|
||||||
github.com/valyala/fasthttp v1.61.0
|
github.com/valyala/fasthttp v1.62.0
|
||||||
github.com/xlzd/gotp v0.1.0
|
github.com/xlzd/gotp v0.1.0
|
||||||
github.com/xtls/xray-core v1.250306.1-0.20250430044058-87ab8e512882
|
github.com/xtls/xray-core v1.250306.1-0.20250509143200-e9b3c53a0d23
|
||||||
go.uber.org/atomic v1.11.0
|
go.uber.org/atomic v1.11.0
|
||||||
golang.org/x/crypto v0.37.0
|
golang.org/x/crypto v0.38.0
|
||||||
golang.org/x/text v0.24.0
|
golang.org/x/text v0.25.0
|
||||||
google.golang.org/grpc v1.72.0
|
google.golang.org/grpc v1.72.0
|
||||||
gorm.io/driver/sqlite v1.5.7
|
gorm.io/driver/sqlite v1.5.7
|
||||||
gorm.io/gorm v1.25.12
|
gorm.io/gorm v1.25.12
|
||||||
|
@ -32,7 +32,7 @@ require (
|
||||||
github.com/cloudflare/circl v1.6.1 // indirect
|
github.com/cloudflare/circl v1.6.1 // indirect
|
||||||
github.com/cloudwego/base64x v0.1.5 // indirect
|
github.com/cloudwego/base64x v0.1.5 // indirect
|
||||||
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33 // indirect
|
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33 // indirect
|
||||||
github.com/ebitengine/purego v0.8.2 // indirect
|
github.com/ebitengine/purego v0.8.3 // indirect
|
||||||
github.com/fasthttp/router v1.5.4 // indirect
|
github.com/fasthttp/router v1.5.4 // indirect
|
||||||
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
|
||||||
github.com/gin-contrib/sse v1.1.0 // indirect
|
github.com/gin-contrib/sse v1.1.0 // indirect
|
||||||
|
@ -42,7 +42,7 @@ require (
|
||||||
github.com/go-playground/validator/v10 v10.26.0 // indirect
|
github.com/go-playground/validator/v10 v10.26.0 // indirect
|
||||||
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
|
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
|
||||||
github.com/google/btree v1.1.3 // indirect
|
github.com/google/btree v1.1.3 // indirect
|
||||||
github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 // indirect
|
github.com/google/pprof v0.0.0-20250501235452-c0086092b71a // indirect
|
||||||
github.com/gorilla/context v1.1.2 // indirect
|
github.com/gorilla/context v1.1.2 // indirect
|
||||||
github.com/gorilla/securecookie v1.1.2 // indirect
|
github.com/gorilla/securecookie v1.1.2 // indirect
|
||||||
github.com/gorilla/sessions v1.4.0 // indirect
|
github.com/gorilla/sessions v1.4.0 // indirect
|
||||||
|
@ -56,15 +56,15 @@ require (
|
||||||
github.com/leodido/go-urn v1.4.0 // indirect
|
github.com/leodido/go-urn v1.4.0 // indirect
|
||||||
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
|
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.14.27 // indirect
|
github.com/mattn/go-sqlite3 v1.14.28 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/onsi/ginkgo/v2 v2.23.4 // indirect
|
github.com/onsi/ginkgo/v2 v2.23.4 // indirect
|
||||||
github.com/pires/go-proxyproto v0.8.0 // indirect
|
github.com/pires/go-proxyproto v0.8.1 // indirect
|
||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
||||||
github.com/quic-go/qpack v0.5.1 // indirect
|
github.com/quic-go/qpack v0.5.1 // indirect
|
||||||
github.com/quic-go/quic-go v0.51.0 // indirect
|
github.com/quic-go/quic-go v0.51.0 // indirect
|
||||||
github.com/refraction-networking/utls v1.7.1 // indirect
|
github.com/refraction-networking/utls v1.7.2 // indirect
|
||||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
|
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||||
github.com/sagernet/sing v0.6.6 // indirect
|
github.com/sagernet/sing v0.6.6 // indirect
|
||||||
|
@ -78,25 +78,25 @@ require (
|
||||||
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e // indirect
|
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e // indirect
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
github.com/valyala/fastjson v1.6.4 // indirect
|
github.com/valyala/fastjson v1.6.4 // indirect
|
||||||
github.com/vishvananda/netlink v1.3.0 // indirect
|
github.com/vishvananda/netlink v1.3.1 // indirect
|
||||||
github.com/vishvananda/netns v0.0.5 // indirect
|
github.com/vishvananda/netns v0.0.5 // indirect
|
||||||
github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 // indirect
|
github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||||
go.uber.org/automaxprocs v1.6.0 // indirect
|
go.uber.org/automaxprocs v1.6.0 // indirect
|
||||||
go.uber.org/mock v0.5.2 // indirect
|
go.uber.org/mock v0.5.2 // indirect
|
||||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
|
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
|
||||||
golang.org/x/arch v0.16.0 // indirect
|
golang.org/x/arch v0.17.0 // indirect
|
||||||
golang.org/x/mod v0.24.0 // indirect
|
golang.org/x/mod v0.24.0 // indirect
|
||||||
golang.org/x/net v0.39.0 // indirect
|
golang.org/x/net v0.40.0 // indirect
|
||||||
golang.org/x/sync v0.13.0 // indirect
|
golang.org/x/sync v0.14.0 // indirect
|
||||||
golang.org/x/sys v0.32.0 // indirect
|
golang.org/x/sys v0.33.0 // indirect
|
||||||
golang.org/x/time v0.11.0 // indirect
|
golang.org/x/time v0.11.0 // indirect
|
||||||
golang.org/x/tools v0.32.0 // indirect
|
golang.org/x/tools v0.33.0 // indirect
|
||||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
|
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 // indirect
|
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a // indirect
|
||||||
google.golang.org/protobuf v1.36.6 // indirect
|
google.golang.org/protobuf v1.36.6 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5 // indirect
|
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5 // indirect
|
||||||
lukechampine.com/blake3 v1.4.0 // indirect
|
lukechampine.com/blake3 v1.4.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
73
go.sum
73
go.sum
|
@ -20,8 +20,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
||||||
github.com/dgryski/go-metro v0.0.0-20200812162917-85c65e2d0165/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
|
github.com/dgryski/go-metro v0.0.0-20200812162917-85c65e2d0165/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
|
||||||
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33 h1:ucRHb6/lvW/+mTEIGbvhcYU3S8+uSNkuMjx/qZFfhtM=
|
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33 h1:ucRHb6/lvW/+mTEIGbvhcYU3S8+uSNkuMjx/qZFfhtM=
|
||||||
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
|
github.com/dgryski/go-metro v0.0.0-20250106013310-edb8663e5e33/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
|
||||||
github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
|
github.com/ebitengine/purego v0.8.3 h1:K+0AjQp63JEZTEMZiwsI9g0+hAMNohwUOtY0RPGexmc=
|
||||||
github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
github.com/ebitengine/purego v0.8.3/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
||||||
github.com/fasthttp/router v1.5.4 h1:oxdThbBwQgsDIYZ3wR1IavsNl6ZS9WdjKukeMikOnC8=
|
github.com/fasthttp/router v1.5.4 h1:oxdThbBwQgsDIYZ3wR1IavsNl6ZS9WdjKukeMikOnC8=
|
||||||
github.com/fasthttp/router v1.5.4/go.mod h1:3/hysWq6cky7dTfzaaEPZGdptwjwx0qzTgFCKEWRjgc=
|
github.com/fasthttp/router v1.5.4/go.mod h1:3/hysWq6cky7dTfzaaEPZGdptwjwx0qzTgFCKEWRjgc=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
|
github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
|
||||||
|
@ -66,8 +66,8 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||||
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 h1:gD0vax+4I+mAj+jEChEf25Ia07Jq7kYOFO5PPhAxFl4=
|
github.com/google/pprof v0.0.0-20250501235452-c0086092b71a h1:rDA3FfmxwXR+BVKKdz55WwMJ1pD2hJQNW31d+l3mPk4=
|
||||||
github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
|
github.com/google/pprof v0.0.0-20250501235452-c0086092b71a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o=
|
github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o=
|
||||||
|
@ -102,10 +102,10 @@ github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr32
|
||||||
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
|
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
|
github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A=
|
||||||
github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||||
github.com/miekg/dns v1.1.65 h1:0+tIPHzUW0GCge7IiK3guGP57VAw7hoPDfApjkMD1Fc=
|
github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
|
||||||
github.com/miekg/dns v1.1.65/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck=
|
github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
@ -125,8 +125,8 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v
|
||||||
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||||
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
|
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
|
||||||
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
|
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
|
||||||
github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0=
|
github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0=
|
||||||
github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY=
|
github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
||||||
|
@ -137,8 +137,8 @@ github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
|
||||||
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
|
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
|
||||||
github.com/quic-go/quic-go v0.51.0 h1:K8exxe9zXxeRKxaXxi/GpUqYiTrtdiWP8bo1KFya6Wc=
|
github.com/quic-go/quic-go v0.51.0 h1:K8exxe9zXxeRKxaXxi/GpUqYiTrtdiWP8bo1KFya6Wc=
|
||||||
github.com/quic-go/quic-go v0.51.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ=
|
github.com/quic-go/quic-go v0.51.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ=
|
||||||
github.com/refraction-networking/utls v1.7.1 h1:dxg+jla3uocgN8HtX+ccwDr68uCBBO3qLrkZUbqkcw0=
|
github.com/refraction-networking/utls v1.7.2 h1:XOgYzit7lAKaa7kzAO5BJR9l4X/H200eVUD4s8SF8/s=
|
||||||
github.com/refraction-networking/utls v1.7.1/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ=
|
github.com/refraction-networking/utls v1.7.2/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ=
|
||||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=
|
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=
|
||||||
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=
|
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=
|
||||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
|
@ -153,8 +153,8 @@ github.com/savsgio/gotils v0.0.0-20250408102913-196191ec6287 h1:qIQ0tWF9vxGtkJa2
|
||||||
github.com/savsgio/gotils v0.0.0-20250408102913-196191ec6287/go.mod h1:sM7Mt7uEoCeFSCBM+qBrqvEo+/9vdmj19wzp3yzUhmg=
|
github.com/savsgio/gotils v0.0.0-20250408102913-196191ec6287/go.mod h1:sM7Mt7uEoCeFSCBM+qBrqvEo+/9vdmj19wzp3yzUhmg=
|
||||||
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 h1:emzAzMZ1L9iaKCTxdy3Em8Wv4ChIAGnfiz18Cda70g4=
|
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 h1:emzAzMZ1L9iaKCTxdy3Em8Wv4ChIAGnfiz18Cda70g4=
|
||||||
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771/go.mod h1:bR6DqgcAl1zTcOX8/pE2Qkj9XO00eCNqmKb7lXP8EAg=
|
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771/go.mod h1:bR6DqgcAl1zTcOX8/pE2Qkj9XO00eCNqmKb7lXP8EAg=
|
||||||
github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE=
|
github.com/shirou/gopsutil/v4 v4.25.4 h1:cdtFO363VEOOFrUCjZRh4XVJkb548lyF0q0uTeMqYPw=
|
||||||
github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA=
|
github.com/shirou/gopsutil/v4 v4.25.4/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
|
@ -178,21 +178,20 @@ github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e h1:5QefA066A1tF
|
||||||
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e/go.mod h1:5t19P9LBIrNamL6AcMQOncg/r10y3Pc01AbHeMhwlpU=
|
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e/go.mod h1:5t19P9LBIrNamL6AcMQOncg/r10y3Pc01AbHeMhwlpU=
|
||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/valyala/fasthttp v1.61.0 h1:VV08V0AfoRaFurP1EWKvQQdPTZHiUzaVoulX1aBDgzU=
|
github.com/valyala/fasthttp v1.62.0 h1:8dKRBX/y2rCzyc6903Zu1+3qN0H/d2MsxPPmVNamiH0=
|
||||||
github.com/valyala/fasthttp v1.61.0/go.mod h1:wRIV/4cMwUPWnRcDno9hGnYZGh78QzODFfo1LTUhBog=
|
github.com/valyala/fasthttp v1.62.0/go.mod h1:FCINgr4GKdKqV8Q0xv8b+UxPV+H/O5nNFo3D+r54Htg=
|
||||||
github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
|
github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
|
||||||
github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
|
github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
|
||||||
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=
|
github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW6bV0=
|
||||||
github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs=
|
github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4=
|
||||||
github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
|
|
||||||
github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=
|
github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=
|
||||||
github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
|
github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
|
||||||
github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
|
github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
|
||||||
github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg=
|
github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg=
|
||||||
github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 h1:g1Cj7d+my6k/HHxLAyxPwyX8i7FGRr6ulBDMkBzg2BM=
|
github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 h1:g1Cj7d+my6k/HHxLAyxPwyX8i7FGRr6ulBDMkBzg2BM=
|
||||||
github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463/go.mod h1:BjIOLmkEEtAgloAiVUcYj0Mt+YU00JARZw8AEU0IwAg=
|
github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463/go.mod h1:BjIOLmkEEtAgloAiVUcYj0Mt+YU00JARZw8AEU0IwAg=
|
||||||
github.com/xtls/xray-core v1.250306.1-0.20250430044058-87ab8e512882 h1:O/aN4TCrJ+fmaDOBoQhtTRev2hVHIENy2EJ70jQcyEY=
|
github.com/xtls/xray-core v1.250306.1-0.20250509143200-e9b3c53a0d23 h1:hy8J1y2OYcpcwye79JNRHzPKTOSoMZOZhPUWsXry5/w=
|
||||||
github.com/xtls/xray-core v1.250306.1-0.20250430044058-87ab8e512882/go.mod h1:v7SYLVSg2wkuP8jo9/0qaJ5zrCQhmUig7bSnUOdMqu0=
|
github.com/xtls/xray-core v1.250306.1-0.20250509143200-e9b3c53a0d23/go.mod h1:SG95dEEkAi9lkSnz3X+QGPL0nHRwLvedAMndTGRKpjk=
|
||||||
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
|
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
|
||||||
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
|
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||||
|
@ -217,30 +216,30 @@ go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
|
||||||
go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
|
go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
|
||||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
|
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
|
||||||
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
|
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
|
||||||
golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U=
|
golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU=
|
||||||
golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
|
golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
|
||||||
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
|
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
|
||||||
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
|
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
|
||||||
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
|
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
|
||||||
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
|
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
|
||||||
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
|
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
|
||||||
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
|
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
|
||||||
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
|
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
|
||||||
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||||
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
|
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
|
||||||
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
|
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
|
||||||
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
|
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
|
||||||
golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
||||||
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
|
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
|
||||||
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
|
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
|
||||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg=
|
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg=
|
||||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI=
|
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI=
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uIfPMv78iAJGcPKDeqAFnaLBropIC4=
|
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uIfPMv78iAJGcPKDeqAFnaLBropIC4=
|
||||||
|
@ -266,6 +265,6 @@ gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
|
||||||
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
||||||
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5 h1:sfK5nHuG7lRFZ2FdTT3RimOqWBg8IrVm+/Vko1FVOsk=
|
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5 h1:sfK5nHuG7lRFZ2FdTT3RimOqWBg8IrVm+/Vko1FVOsk=
|
||||||
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5/go.mod h1:3r5CMtNQMKIvBlrmM9xWUNamjKBYPOWyXOjmg5Kts3g=
|
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5/go.mod h1:3r5CMtNQMKIvBlrmM9xWUNamjKBYPOWyXOjmg5Kts3g=
|
||||||
lukechampine.com/blake3 v1.4.0 h1:xDbKOZCVbnZsfzM6mHSYcGRHZ3YrLDzqz8XnV4uaD5w=
|
lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg=
|
||||||
lukechampine.com/blake3 v1.4.0/go.mod h1:MQJNQCTnR+kwOP/JEZSxj3MaQjp80FOFSNMMHXcSeX0=
|
lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo=
|
||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
|
|
|
@ -64,6 +64,11 @@
|
||||||
drop: (e) => this.dropHandler(e),
|
drop: (e) => this.dropHandler(e),
|
||||||
},
|
},
|
||||||
scopedSlots: this.$scopedSlots,
|
scopedSlots: this.$scopedSlots,
|
||||||
|
locale: {
|
||||||
|
filterConfirm: `{{ i18n "confirm" }}`,
|
||||||
|
filterReset: `{{ i18n "reset" }}`,
|
||||||
|
emptyText: `{{ i18n "noData" }}`
|
||||||
|
}
|
||||||
}, this.$slots.default,)
|
}, this.$slots.default,)
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
|
|
@ -301,7 +301,8 @@
|
||||||
:expand-icon-column-index="0"
|
:expand-icon-column-index="0"
|
||||||
:indent-size="0"
|
:indent-size="0"
|
||||||
:row-class-name="dbInbound => (dbInbound.isMultiUser() ? '' : 'hideExpandIcon')"
|
:row-class-name="dbInbound => (dbInbound.isMultiUser() ? '' : 'hideExpandIcon')"
|
||||||
:style="{ marginTop: '10px' }">
|
:style="{ marginTop: '10px' }"
|
||||||
|
:locale='{ filterConfirm: `{{ i18n "confirm" }}`, filterReset: `{{ i18n "reset" }}`, emptyText: `{{ i18n "noData" }}` }'>
|
||||||
<template slot="action" slot-scope="text, dbInbound">
|
<template slot="action" slot-scope="text, dbInbound">
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
<a-icon @click="e => e.preventDefault()" type="more" :style="{ fontSize: '20px', textDecoration: 'solid' }"></a-icon>
|
<a-icon @click="e => e.preventDefault()" type="more" :style="{ fontSize: '20px', textDecoration: 'solid' }"></a-icon>
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
<transition name="list" appear>
|
<transition name="list" appear>
|
||||||
<template>
|
<template>
|
||||||
<a-row v-if="!status.isLoaded">
|
<a-row v-if="!status.isLoaded">
|
||||||
<a-card hoverable :style="{ textAlign: 'center', padding: '30px 0', marginTop: '10px', background: 'transparent' }">
|
<a-card :style="{ textAlign: 'center', padding: '30px 0', marginTop: '10px', background: 'transparent', border: 'none' }">
|
||||||
<a-spin tip='{{ i18n "loading" }}'></a-spin>
|
<a-spin tip='{{ i18n "loading" }}'></a-spin>
|
||||||
</a-card>
|
</a-card>
|
||||||
</a-row>
|
</a-row>
|
||||||
|
|
|
@ -6,11 +6,8 @@
|
||||||
<a-divider></a-divider>
|
<a-divider></a-divider>
|
||||||
<p>{{ i18n "pages.settings.security.twoFactorModalFirstStep" }}</p>
|
<p>{{ i18n "pages.settings.security.twoFactorModalFirstStep" }}</p>
|
||||||
<div :style="{ display: 'flex', alignItems: 'center', flexDirection: 'column', gap: '12px' }">
|
<div :style="{ display: 'flex', alignItems: 'center', flexDirection: 'column', gap: '12px' }">
|
||||||
<div
|
<div class="qr-bg" :style="{ width: '180px', height: '180px' }">
|
||||||
:style="{ border: '1px solid', borderRadius: '1rem', borderColor: themeSwitcher.isDarkTheme ? 'var(--dark-color-surface-300)' : '#d9d9d9', padding: 0 }">
|
<canvas @click="copy(twoFactorModal.token)" id="twofactor-qrcode" class="qr-cv"></canvas>
|
||||||
<img :src="twoFactorModal.qrImage"
|
|
||||||
:style="{ filter: themeSwitcher.isDarkTheme ? 'invert(1)' : 'none'}"
|
|
||||||
:alt="twoFactorModal.token">
|
|
||||||
</div>
|
</div>
|
||||||
<span :style="{ fontSize: '12px', fontFamily: 'monospace' }">[[ twoFactorModal.token ]]</span>
|
<span :style="{ fontSize: '12px', fontFamily: 'monospace' }">[[ twoFactorModal.token ]]</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -88,18 +85,6 @@
|
||||||
period: 30,
|
period: 30,
|
||||||
secret: twoFactorModal.token,
|
secret: twoFactorModal.token,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (type === 'set') {
|
|
||||||
this.qrImage = new QRious({
|
|
||||||
size: 150,
|
|
||||||
value: twoFactorModal.totpObject.toString(),
|
|
||||||
background: 'white',
|
|
||||||
backgroundAlpha: 0,
|
|
||||||
foreground: 'black',
|
|
||||||
padding: 12,
|
|
||||||
level: 'L'
|
|
||||||
}).toDataURL()
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
close: function () {
|
close: function () {
|
||||||
twoFactorModal.enteredCode = "";
|
twoFactorModal.enteredCode = "";
|
||||||
|
@ -113,6 +98,36 @@
|
||||||
data: {
|
data: {
|
||||||
twoFactorModal: twoFactorModal,
|
twoFactorModal: twoFactorModal,
|
||||||
},
|
},
|
||||||
|
updated() {
|
||||||
|
if (
|
||||||
|
this.twoFactorModal.visible &&
|
||||||
|
this.twoFactorModal.type === 'set' &&
|
||||||
|
document.getElementById('twofactor-qrcode')
|
||||||
|
) {
|
||||||
|
this.setQrCode('twofactor-qrcode', this.twoFactorModal.totpObject.toString());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setQrCode(elementId, content) {
|
||||||
|
new QRious({
|
||||||
|
element: document.getElementById(elementId),
|
||||||
|
size: 200,
|
||||||
|
value: content,
|
||||||
|
background: 'white',
|
||||||
|
backgroundAlpha: 0,
|
||||||
|
foreground: 'black',
|
||||||
|
padding: 2,
|
||||||
|
level: 'L'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
copy(content) {
|
||||||
|
ClipboardManager
|
||||||
|
.copyText(content)
|
||||||
|
.then(() => {
|
||||||
|
app.$message.success('{{ i18n "copied" }}')
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{{end}}
|
{{end}}
|
|
@ -5,7 +5,7 @@
|
||||||
<span>{{ i18n "pages.xray.balancer.addBalancer"}}</span>
|
<span>{{ i18n "pages.xray.balancer.addBalancer"}}</span>
|
||||||
</a-button>
|
</a-button>
|
||||||
<a-table :columns="balancerColumns" bordered :row-key="r => r.key" :data-source="balancersData"
|
<a-table :columns="balancerColumns" bordered :row-key="r => r.key" :data-source="balancersData"
|
||||||
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0">
|
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0" :locale='{ filterConfirm: `{{ i18n "confirm" }}`, filterReset: `{{ i18n "reset" }}` }'>
|
||||||
<template slot="action" slot-scope="text, balancer, index">
|
<template slot="action" slot-scope="text, balancer, index">
|
||||||
<span>[[ index+1 ]]</span>
|
<span>[[ index+1 ]]</span>
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
|
|
@ -66,7 +66,8 @@
|
||||||
<span>{{ i18n "pages.xray.dns.add" }}</span>
|
<span>{{ i18n "pages.xray.dns.add" }}</span>
|
||||||
</a-button>
|
</a-button>
|
||||||
<a-table :columns="dnsColumns" bordered :row-key="r => r.key" :data-source="dnsServers"
|
<a-table :columns="dnsColumns" bordered :row-key="r => r.key" :data-source="dnsServers"
|
||||||
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0">
|
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0"
|
||||||
|
:locale='{ filterConfirm: `{{ i18n "confirm" }}`, filterReset: `{{ i18n "reset" }}` }'>
|
||||||
<template slot="action" slot-scope="text,dns,index">
|
<template slot="action" slot-scope="text,dns,index">
|
||||||
<span>[[ index+1 ]]</span>
|
<span>[[ index+1 ]]</span>
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
@ -113,7 +114,8 @@
|
||||||
<a-button type="primary" icon="plus" @click="addFakedns()">{{ i18n "pages.xray.fakedns.add"
|
<a-button type="primary" icon="plus" @click="addFakedns()">{{ i18n "pages.xray.fakedns.add"
|
||||||
}}</a-button>
|
}}</a-button>
|
||||||
<a-table :columns="fakednsColumns" bordered :row-key="r => r.key" :data-source="fakeDns"
|
<a-table :columns="fakednsColumns" bordered :row-key="r => r.key" :data-source="fakeDns"
|
||||||
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0">
|
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0"
|
||||||
|
:locale='{ filterConfirm: `{{ i18n "confirm" }}`, filterReset: `{{ i18n "reset" }}` }'>
|
||||||
<template slot="action" slot-scope="text,fakedns,index">
|
<template slot="action" slot-scope="text,fakedns,index">
|
||||||
<span>[[ index+1 ]]</span>
|
<span>[[ index+1 ]]</span>
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
|
|
@ -13,8 +13,9 @@
|
||||||
<a-button-group>
|
<a-button-group>
|
||||||
<a-button icon="sync" @click="refreshOutboundTraffic()" :loading="refreshing"></a-button>
|
<a-button icon="sync" @click="refreshOutboundTraffic()" :loading="refreshing"></a-button>
|
||||||
<a-popconfirm placement="topRight" @confirm="resetOutboundTraffic(-1)"
|
<a-popconfirm placement="topRight" @confirm="resetOutboundTraffic(-1)"
|
||||||
title='{{ i18n "pages.inbounds.resetTrafficContent"}}' :overlay-class-name="themeSwitcher.currentTheme"
|
title='{{ i18n "pages.inbounds.resetTrafficContent"}}'
|
||||||
ok-text='{{ i18n "reset"}}' cancel-text='{{ i18n "cancel"}}'>
|
:overlay-class-name="themeSwitcher.currentTheme" ok-text='{{ i18n "reset"}}'
|
||||||
|
cancel-text='{{ i18n "cancel"}}'>
|
||||||
<a-icon slot="icon" type="question-circle-o"
|
<a-icon slot="icon" type="question-circle-o"
|
||||||
:style="{ color: themeSwitcher.isDarkTheme ? '#008771' : '#008771' }"></a-icon>
|
:style="{ color: themeSwitcher.isDarkTheme ? '#008771' : '#008771' }"></a-icon>
|
||||||
<a-button icon="retweet"></a-button>
|
<a-button icon="retweet"></a-button>
|
||||||
|
@ -23,7 +24,8 @@
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
<a-table :columns="outboundColumns" bordered :row-key="r => r.key" :data-source="outboundData"
|
<a-table :columns="outboundColumns" bordered :row-key="r => r.key" :data-source="outboundData"
|
||||||
:scroll="isMobile ? {} : { x: 800 }" :pagination="false" :indent-size="0">
|
:scroll="isMobile ? {} : { x: 800 }" :pagination="false" :indent-size="0"
|
||||||
|
:locale='{ filterConfirm: `{{ i18n "confirm" }}`, filterReset: `{{ i18n "reset" }}` }'>
|
||||||
<template slot="action" slot-scope="text, outbound, index">
|
<template slot="action" slot-scope="text, outbound, index">
|
||||||
<span>[[ index+1 ]]</span>
|
<span>[[ index+1 ]]</span>
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
@ -46,7 +48,7 @@
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<a-menu-item @click="deleteOutbound(index)">
|
<a-menu-item @click="deleteOutbound(index)">
|
||||||
<span :style="{ color: '#FF4D4F' }">
|
<span :style="{ color: '#FF4D4F' }">
|
||||||
<a-icon type="delete"></a-icon>
|
<a-icon type="delete"></a-icon>
|
||||||
<span>{{ i18n "delete"}}</span>
|
<span>{{ i18n "delete"}}</span>
|
||||||
</span>
|
</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
<span>{{ i18n "pages.xray.outbound.addReverse" }}</span>
|
<span>{{ i18n "pages.xray.outbound.addReverse" }}</span>
|
||||||
</a-button>
|
</a-button>
|
||||||
<a-table :columns="reverseColumns" bordered :row-key="r => r.key" :data-source="reverseData"
|
<a-table :columns="reverseColumns" bordered :row-key="r => r.key" :data-source="reverseData"
|
||||||
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0">
|
:scroll="isMobile ? {} : { x: 200 }" :pagination="false" :indent-size="0"
|
||||||
|
:locale='{ filterConfirm: `{{ i18n "confirm" }}`, filterReset: `{{ i18n "reset" }}` }'>
|
||||||
<template slot="action" slot-scope="text, reverse, index">
|
<template slot="action" slot-scope="text, reverse, index">
|
||||||
<span>[[ index+1 ]]</span>
|
<span>[[ index+1 ]]</span>
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
@ -18,7 +19,7 @@
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<a-menu-item @click="deleteReverse(index)">
|
<a-menu-item @click="deleteReverse(index)">
|
||||||
<span :style="{ color: '#FF4D4F' }">
|
<span :style="{ color: '#FF4D4F' }">
|
||||||
<a-icon type="delete"></a-icon>
|
<a-icon type="delete"></a-icon>
|
||||||
<span>{{ i18n "delete"}}</span>
|
<span>{{ i18n "delete"}}</span>
|
||||||
</span>
|
</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "تعديل"
|
"edit" = "تعديل"
|
||||||
"delete" = "مسح"
|
"delete" = "مسح"
|
||||||
"reset" = "إعادة ضبط"
|
"reset" = "إعادة ضبط"
|
||||||
|
"noData" = "لا توجد بيانات."
|
||||||
"copySuccess" = "اتنسخ بنجاح"
|
"copySuccess" = "اتنسخ بنجاح"
|
||||||
"sure" = "متأكد؟"
|
"sure" = "متأكد؟"
|
||||||
"encryption" = "تشفير"
|
"encryption" = "تشفير"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Edit"
|
"edit" = "Edit"
|
||||||
"delete" = "Delete"
|
"delete" = "Delete"
|
||||||
"reset" = "Reset"
|
"reset" = "Reset"
|
||||||
|
"noData" = "No data."
|
||||||
"copySuccess" = "Copied Successful"
|
"copySuccess" = "Copied Successful"
|
||||||
"sure" = "Sure"
|
"sure" = "Sure"
|
||||||
"encryption" = "Encryption"
|
"encryption" = "Encryption"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Editar"
|
"edit" = "Editar"
|
||||||
"delete" = "Eliminar"
|
"delete" = "Eliminar"
|
||||||
"reset" = "Restablecer"
|
"reset" = "Restablecer"
|
||||||
|
"noData" = "Sin datos."
|
||||||
"copySuccess" = "Copiado exitosamente"
|
"copySuccess" = "Copiado exitosamente"
|
||||||
"sure" = "Seguro"
|
"sure" = "Seguro"
|
||||||
"encryption" = "Encriptación"
|
"encryption" = "Encriptación"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "ویرایش"
|
"edit" = "ویرایش"
|
||||||
"delete" = "حذف"
|
"delete" = "حذف"
|
||||||
"reset" = "ریست"
|
"reset" = "ریست"
|
||||||
|
"noData" = "دادهای وجود ندارد."
|
||||||
"copySuccess" = "باموفقیت کپیشد"
|
"copySuccess" = "باموفقیت کپیشد"
|
||||||
"sure" = "مطمئن"
|
"sure" = "مطمئن"
|
||||||
"encryption" = "رمزگذاری"
|
"encryption" = "رمزگذاری"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Edit"
|
"edit" = "Edit"
|
||||||
"delete" = "Hapus"
|
"delete" = "Hapus"
|
||||||
"reset" = "Reset"
|
"reset" = "Reset"
|
||||||
|
"noData" = "Tidak ada data."
|
||||||
"copySuccess" = "Berhasil Disalin"
|
"copySuccess" = "Berhasil Disalin"
|
||||||
"sure" = "Yakin"
|
"sure" = "Yakin"
|
||||||
"encryption" = "Enkripsi"
|
"encryption" = "Enkripsi"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "編集"
|
"edit" = "編集"
|
||||||
"delete" = "削除"
|
"delete" = "削除"
|
||||||
"reset" = "リセット"
|
"reset" = "リセット"
|
||||||
|
"noData" = "データなし。"
|
||||||
"copySuccess" = "コピー成功"
|
"copySuccess" = "コピー成功"
|
||||||
"sure" = "確定"
|
"sure" = "確定"
|
||||||
"encryption" = "暗号化"
|
"encryption" = "暗号化"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Editar"
|
"edit" = "Editar"
|
||||||
"delete" = "Excluir"
|
"delete" = "Excluir"
|
||||||
"reset" = "Redefinir"
|
"reset" = "Redefinir"
|
||||||
|
"noData" = "Sem dados."
|
||||||
"copySuccess" = "Copiado com Sucesso"
|
"copySuccess" = "Copiado com Sucesso"
|
||||||
"sure" = "Certo"
|
"sure" = "Certo"
|
||||||
"encryption" = "Criptografia"
|
"encryption" = "Criptografia"
|
||||||
|
|
|
@ -20,14 +20,15 @@
|
||||||
"hour" = "Час"
|
"hour" = "Час"
|
||||||
"day" = "День"
|
"day" = "День"
|
||||||
"check" = "Проверить"
|
"check" = "Проверить"
|
||||||
"indefinite" = "Бессрочно"
|
"indefinite" = "Бесконечно"
|
||||||
"unlimited" = "Безлимитно"
|
"unlimited" = "Безлимит"
|
||||||
"none" = "Пусто"
|
"none" = "Пусто"
|
||||||
"qrCode" = "QR-код"
|
"qrCode" = "QR-код"
|
||||||
"info" = "Информация"
|
"info" = "Информация"
|
||||||
"edit" = "Изменить"
|
"edit" = "Изменить"
|
||||||
"delete" = "Удалить"
|
"delete" = "Удалить"
|
||||||
"reset" = "Сбросить"
|
"reset" = "Сбросить"
|
||||||
|
"noData" = "Нет данных."
|
||||||
"copySuccess" = "Скопировано"
|
"copySuccess" = "Скопировано"
|
||||||
"sure" = "Да"
|
"sure" = "Да"
|
||||||
"encryption" = "Шифрование"
|
"encryption" = "Шифрование"
|
||||||
|
@ -45,7 +46,7 @@
|
||||||
"online" = "Онлайн"
|
"online" = "Онлайн"
|
||||||
"domainName" = "Домен"
|
"domainName" = "Домен"
|
||||||
"monitor" = "Мониторинг IP"
|
"monitor" = "Мониторинг IP"
|
||||||
"certificate" = "Цифровой сертификат"
|
"certificate" = "SSL сертификат"
|
||||||
"fail" = "Ошибка"
|
"fail" = "Ошибка"
|
||||||
"comment" = "Комментарий"
|
"comment" = "Комментарий"
|
||||||
"success" = "Успешно"
|
"success" = "Успешно"
|
||||||
|
@ -57,13 +58,13 @@
|
||||||
"remained" = "Остаток"
|
"remained" = "Остаток"
|
||||||
"security" = "Безопасность"
|
"security" = "Безопасность"
|
||||||
"secAlertTitle" = "Предупреждение системы безопасности"
|
"secAlertTitle" = "Предупреждение системы безопасности"
|
||||||
"secAlertSsl" = "Это соединение не защищено. Пожалуйста, воздержитесь от ввода конфиденциальной информации до тех пор, пока не будет активирован TLS для защиты данных"
|
"secAlertSsl" = "Это соединение не защищено. Пожалуйста, не вводите конфиденциальную информацию, пока не установите SSL сертификат для защиты соединения"
|
||||||
"secAlertConf" = "Некоторые настройки уязвимы для атак. Рекомендуется усилить протоколы безопасности, чтобы предотвратить потенциальные нарушения."
|
"secAlertConf" = "Некоторые настройки уязвимы для атак. Рекомендуем усилить протоколы безопасности, чтобы предотвратить проблемы в будущем."
|
||||||
"secAlertSSL" = "В панели отсутствует безопасное соединение. Пожалуйста, установите сертификат TLS для защиты данных."
|
"secAlertSSL" = "Ваше подключение к панели небезопасно. Пожалуйста, установите SSL сертификат для защиты данных."
|
||||||
"secAlertPanelPort" = "Порт по умолчанию панели небезопасен. Пожалуйста, настройте случайный или определенный порт."
|
"secAlertPanelPort" = "Порт, на котором работает панель небезопасен. Пожалуйста, установите случайный или просто другой порт."
|
||||||
"secAlertPanelURI" = "URI-путь по умолчанию панели небезопасен. Пожалуйста, настройте сложный URI-путь."
|
"secAlertPanelURI" = "URI-адрес панели по умолчанию небезопасен. Пожалуйста, настройте сложный URI-адрес."
|
||||||
"secAlertSubURI" = "URI-путь по умолчанию подписки небезопасен. Пожалуйста, настройте сложный URI-путь."
|
"secAlertSubURI" = "URI-адрес подписки по умолчанию небезопасен. Пожалуйста, настройте сложный URI-адрес."
|
||||||
"secAlertSubJsonURI" = "URI-путь по умолчанию для JSON подписки небезопасен. Пожалуйста, настройте сложный URI-путь."
|
"secAlertSubJsonURI" = "URI-адрес по умолчанию для JSON подписки небезопасен. Пожалуйста, настройте сложный URI-адрес."
|
||||||
"emptyDnsDesc" = "Нет добавленных DNS-серверов."
|
"emptyDnsDesc" = "Нет добавленных DNS-серверов."
|
||||||
"emptyFakeDnsDesc" = "Нет добавленных Fake DNS-серверов."
|
"emptyFakeDnsDesc" = "Нет добавленных Fake DNS-серверов."
|
||||||
"emptyBalancersDesc" = "Нет добавленных балансировщиков."
|
"emptyBalancersDesc" = "Нет добавленных балансировщиков."
|
||||||
|
@ -71,35 +72,35 @@
|
||||||
"somethingWentWrong" = "Что-то пошло не так"
|
"somethingWentWrong" = "Что-то пошло не так"
|
||||||
|
|
||||||
[menu]
|
[menu]
|
||||||
"theme" = "Тема оформления"
|
"theme" = "Тема"
|
||||||
"dark" = "Темная"
|
"dark" = "Темная"
|
||||||
"ultraDark" = "Ультра темная"
|
"ultraDark" = "Очень темная"
|
||||||
"dashboard" = "Статус системы"
|
"dashboard" = "Статус системы"
|
||||||
"inbounds" = "Входящие подключения"
|
"inbounds" = "Входящие подключения"
|
||||||
"settings" = "Настройки панели"
|
"settings" = "Настройки"
|
||||||
"xray" = "Настройки Xray"
|
"xray" = "Настройки Xray"
|
||||||
"logout" = "Выход"
|
"logout" = "Выход"
|
||||||
"link" = "Управление"
|
"link" = "Управление"
|
||||||
|
|
||||||
[pages.login]
|
[pages.login]
|
||||||
"hello" = "Привет"
|
"hello" = "Привет!"
|
||||||
"title" = "Добро пожаловать"
|
"title" = "Добро пожаловать!"
|
||||||
"loginAgain" = "Ваша сессия истекла. Пожалуйста, войдите в систему снова"
|
"loginAgain" = "Сессия истекла. Войдите в систему снова"
|
||||||
|
|
||||||
[pages.login.toasts]
|
[pages.login.toasts]
|
||||||
"invalidFormData" = "Недопустимый формат данных"
|
"invalidFormData" = "Недопустимый формат данных"
|
||||||
"emptyUsername" = "Введите имя пользователя"
|
"emptyUsername" = "Введите имя пользователя"
|
||||||
"emptyPassword" = "Введите пароль"
|
"emptyPassword" = "Введите пароль"
|
||||||
"wrongUsernameOrPassword" = "Неверное имя пользователя, пароль или код двухфакторной аутентификации."
|
"wrongUsernameOrPassword" = "Неверное имя пользователя, пароль или код двухфакторной аутентификации."
|
||||||
"successLogin" = "Вы успешно вошли в свой аккаунт."
|
"successLogin" = "Успешный вход"
|
||||||
|
|
||||||
[pages.index]
|
[pages.index]
|
||||||
"title" = "Статус системы"
|
"title" = "Статус системы"
|
||||||
"cpu" = "ЦП"
|
"cpu" = "ЦП"
|
||||||
"logicalProcessors" = "Логические процессоры"
|
"logicalProcessors" = "Логические процессоры"
|
||||||
"frequency" = "Частота"
|
"frequency" = "Частота"
|
||||||
"swap" = "Файл подкачки"
|
"swap" = "Swap"
|
||||||
"storage" = "Хранилище"
|
"storage" = "Диск"
|
||||||
"memory" = "ОЗУ"
|
"memory" = "ОЗУ"
|
||||||
"threads" = "Потоки"
|
"threads" = "Потоки"
|
||||||
"xrayStatus" = "Xray"
|
"xrayStatus" = "Xray"
|
||||||
|
@ -107,37 +108,37 @@
|
||||||
"restartXray" = "Перезапустить"
|
"restartXray" = "Перезапустить"
|
||||||
"xraySwitch" = "Выбор версии"
|
"xraySwitch" = "Выбор версии"
|
||||||
"xraySwitchClick" = "Выберите желаемую версию"
|
"xraySwitchClick" = "Выберите желаемую версию"
|
||||||
"xraySwitchClickDesk" = "Обратите внимание: старые версии могут не поддерживать текущие настройки"
|
"xraySwitchClickDesk" = "Важно: старые версии могут не поддерживать текущие настройки"
|
||||||
"xrayStatusUnknown" = "Неизвестно"
|
"xrayStatusUnknown" = "Неизвестно"
|
||||||
"xrayStatusRunning" = "Запущен"
|
"xrayStatusRunning" = "Запущен"
|
||||||
"xrayStatusStop" = "Остановлен"
|
"xrayStatusStop" = "Остановлен"
|
||||||
"xrayStatusError" = "Ошибка"
|
"xrayStatusError" = "Ошибка"
|
||||||
"xrayErrorPopoverTitle" = "Произошла ошибка при запуске Xray"
|
"xrayErrorPopoverTitle" = "Ошибка при запуске Xray"
|
||||||
"operationHours" = "Время работы системы"
|
"operationHours" = "Время работы системы"
|
||||||
"systemLoad" = "Нагрузка на систему"
|
"systemLoad" = "Нагрузка на систему"
|
||||||
"systemLoadDesc" = "Средняя загрузка системы за последние 1, 5 и 15 минут"
|
"systemLoadDesc" = "Средняя загрузка системы за последние 1, 5 и 15 минут"
|
||||||
"connectionTcpCountDesc" = "Общее количество подключений TCP по всем сетевым картам."
|
"connectionTcpCountDesc" = "Общее количество подключений TCP по всем сетевым картам."
|
||||||
"connectionUdpCountDesc" = "Общее количество подключений UDP по всем сетевым картам."
|
"connectionUdpCountDesc" = "Общее количество подключений UDP по всем сетевым картам."
|
||||||
"connectionCount" = "Количество соединений"
|
"connectionCount" = "Количество соединений"
|
||||||
"ipAddresses" = "IP-адреса"
|
"ipAddresses" = "IP-адреса сервера"
|
||||||
"toggleIpVisibility" = "Переключить видимость IP"
|
"toggleIpVisibility" = "Переключить видимость IP-адресов сервера"
|
||||||
"overallSpeed" = "Общая скорость"
|
"overallSpeed" = "Общая скорость передачи трафика"
|
||||||
"upload" = "Отправка"
|
"upload" = "Отправка"
|
||||||
"download" = "Загрузка"
|
"download" = "Загрузка"
|
||||||
"totalData" = "Общий объем данных"
|
"totalData" = "Общий объем трафика"
|
||||||
"sent" = "Отправлено"
|
"sent" = "Отправлено"
|
||||||
"received" = "Получено"
|
"received" = "Получено"
|
||||||
"xraySwitchVersionDialog" = "Вы действительно хотите изменить версию Xray?"
|
"xraySwitchVersionDialog" = "Переключить версию Xray"
|
||||||
"xraySwitchVersionDialogDesc" = "Это изменит версию Xray на #version#."
|
"xraySwitchVersionDialogDesc" = "Вы точно хотите сменить версию Xray?"
|
||||||
"xraySwitchVersionPopover" = "Xray успешно обновлён"
|
"xraySwitchVersionPopover" = "Xray успешно обновлён"
|
||||||
"geofileUpdateDialog" = "Вы действительно хотите обновить геофайл?"
|
"geofileUpdateDialog" = "Вы действительно хотите обновить геофайл?"
|
||||||
"geofileUpdateDialogDesc" = "Это обновит файл #filename#."
|
"geofileUpdateDialogDesc" = "Это обновит файл #filename#."
|
||||||
"geofileUpdatePopover" = "Геофайл успешно обновлён"
|
"geofileUpdatePopover" = "Геофайл успешно обновлён"
|
||||||
"dontRefresh" = "Установка в процессе. Не обновляйте страницу"
|
"dontRefresh" = "Установка в процессе. Не обновляйте страницу"
|
||||||
"logs" = "Журнал"
|
"logs" = "Логи"
|
||||||
"config" = "Конфигурация"
|
"config" = "Конфигурация"
|
||||||
"backup" = "Резервная копия"
|
"backup" = "Резервная копия"
|
||||||
"backupTitle" = "Резервная копия"
|
"backupTitle" = "Резервная копия базы данных"
|
||||||
"exportDatabase" = "Экспорт базы данных"
|
"exportDatabase" = "Экспорт базы данных"
|
||||||
"exportDatabaseDesc" = "Нажмите, чтобы скачать файл .db, содержащий резервную копию вашей текущей базы данных на ваше устройство."
|
"exportDatabaseDesc" = "Нажмите, чтобы скачать файл .db, содержащий резервную копию вашей текущей базы данных на ваше устройство."
|
||||||
"importDatabase" = "Импорт базы данных"
|
"importDatabase" = "Импорт базы данных"
|
||||||
|
@ -151,8 +152,8 @@
|
||||||
[pages.inbounds]
|
[pages.inbounds]
|
||||||
"title" = "Входящие подключения"
|
"title" = "Входящие подключения"
|
||||||
"totalDownUp" = "Объем отправленного/полученного трафика"
|
"totalDownUp" = "Объем отправленного/полученного трафика"
|
||||||
"totalUsage" = "Всего использовано"
|
"totalUsage" = "Всего трафика"
|
||||||
"inboundCount" = "Всего входящих подключений"
|
"inboundCount" = "Всего подключений"
|
||||||
"operate" = "Меню"
|
"operate" = "Меню"
|
||||||
"enable" = "Включить"
|
"enable" = "Включить"
|
||||||
"remark" = "Примечание"
|
"remark" = "Примечание"
|
||||||
|
@ -162,8 +163,8 @@
|
||||||
"details" = "Подробнее"
|
"details" = "Подробнее"
|
||||||
"transportConfig" = "Транспорт"
|
"transportConfig" = "Транспорт"
|
||||||
"expireDate" = "Дата окончания"
|
"expireDate" = "Дата окончания"
|
||||||
"resetTraffic" = "Сброс статистики трафика"
|
"resetTraffic" = "Сброс трафика"
|
||||||
"addInbound" = "Создать входящее подключение"
|
"addInbound" = "Создать новое подключение"
|
||||||
"generalActions" = "Общие действия"
|
"generalActions" = "Общие действия"
|
||||||
"autoRefresh" = "Автообновление"
|
"autoRefresh" = "Автообновление"
|
||||||
"autoRefreshInterval" = "Интервал"
|
"autoRefreshInterval" = "Интервал"
|
||||||
|
@ -183,26 +184,26 @@
|
||||||
"monitorDesc" = "Оставьте пустым для прослушивания всех IP-адресов"
|
"monitorDesc" = "Оставьте пустым для прослушивания всех IP-адресов"
|
||||||
"meansNoLimit" = "= Без ограничений (значение: ГБ)"
|
"meansNoLimit" = "= Без ограничений (значение: ГБ)"
|
||||||
"totalFlow" = "Общий расход"
|
"totalFlow" = "Общий расход"
|
||||||
"leaveBlankToNeverExpire" = "Оставьте пустым, чтобы не истекало"
|
"leaveBlankToNeverExpire" = "Оставьте пустым, чтобы было бесконечным"
|
||||||
"noRecommendKeepDefault" = "Рекомендуется оставить настройки по умолчанию"
|
"noRecommendKeepDefault" = "Рекомендуется оставить настройки по умолчанию"
|
||||||
"certificatePath" = "Путь к сертификату"
|
"certificatePath" = "Путь к сертификату"
|
||||||
"certificateContent" = "Содержимое сертификата"
|
"certificateContent" = "Содержимое сертификата"
|
||||||
"publicKey" = "Публичный ключ"
|
"publicKey" = "Публичный ключ"
|
||||||
"privatekey" = "Закрытый ключ"
|
"privatekey" = "Приватный ключ"
|
||||||
"clickOnQRcode" = "Нажмите на QR-код, чтобы скопировать"
|
"clickOnQRcode" = "Нажмите на QR-код, чтобы скопировать"
|
||||||
"client" = "Клиент"
|
"client" = "Клиент"
|
||||||
"export" = "Экспорт ссылок"
|
"export" = "Экспорт ссылок"
|
||||||
"clone" = "Клонировать"
|
"clone" = "Клонировать"
|
||||||
"cloneInbound" = "Клонировать"
|
"cloneInbound" = "Клонировать"
|
||||||
"cloneInboundContent" = "Будут клонированы все настройки входящих подключений, за исключением списка клиентов, порта и IP-адреса прослушивания"
|
"cloneInboundContent" = "Будут клонированы все настройки входящих подключений, кроме списка клиентов, порта и IP-адреса прослушивания"
|
||||||
"cloneInboundOk" = "Клонировано"
|
"cloneInboundOk" = "Клонировано"
|
||||||
"resetAllTraffic" = "Сброс статистики всего трафика"
|
"resetAllTraffic" = "Сброс трафика всех подключений"
|
||||||
"resetAllTrafficTitle" = "Сброс трафика всех подключений"
|
"resetAllTrafficTitle" = "Сброс трафика всех подключений"
|
||||||
"resetAllTrafficContent" = "Вы уверены, что хотите сбросить трафик всех входящих подключений?"
|
"resetAllTrafficContent" = "Вы уверены, что хотите сбросить трафик всех подключений?"
|
||||||
"resetInboundClientTraffics" = "Сброс входящего трафика клиента"
|
"resetInboundClientTraffics" = "Сброс трафика клиента"
|
||||||
"resetInboundClientTrafficTitle" = "Сброс трафика клиентов"
|
"resetInboundClientTrafficTitle" = "Сброс трафика клиентов"
|
||||||
"resetInboundClientTrafficContent" = "Вы уверены, что хотите сбросить весь трафик для этих клиентов?"
|
"resetInboundClientTrafficContent" = "Вы уверены, что хотите сбросить трафик для этих клиентов?"
|
||||||
"resetAllClientTraffics" = "Сброс трафик всех клиентов"
|
"resetAllClientTraffics" = "Сброс трафика всех клиентов"
|
||||||
"resetAllClientTrafficTitle" = "Сброс трафика всех клиентов"
|
"resetAllClientTrafficTitle" = "Сброс трафика всех клиентов"
|
||||||
"resetAllClientTrafficContent" = "Вы уверены, что хотите сбросить трафик всех клиентов?"
|
"resetAllClientTrafficContent" = "Вы уверены, что хотите сбросить трафик всех клиентов?"
|
||||||
"delDepletedClients" = "Удалить отключенных клиентов"
|
"delDepletedClients" = "Удалить отключенных клиентов"
|
||||||
|
@ -210,20 +211,20 @@
|
||||||
"delDepletedClientsContent" = "Вы уверены, что хотите удалить всех отключенных клиентов?"
|
"delDepletedClientsContent" = "Вы уверены, что хотите удалить всех отключенных клиентов?"
|
||||||
"email" = "Email"
|
"email" = "Email"
|
||||||
"emailDesc" = "Пожалуйста, укажите уникальный Email"
|
"emailDesc" = "Пожалуйста, укажите уникальный Email"
|
||||||
"IPLimit" = "Лимит по IP"
|
"IPLimit" = "Лимит по количеству IP"
|
||||||
"IPLimitDesc" = "Ограничение количества подключений с одного IP (0 – отключить)"
|
"IPLimitDesc" = "Ограничение количества одновременных подключений с разных IP(0 – отключить)"
|
||||||
"IPLimitlog" = "Лог IP-адресов"
|
"IPLimitlog" = "Лог IP-адресов"
|
||||||
"IPLimitlogDesc" = "Лог IP-адресов (перед включением лога IP-адресов, вы должны очистить список)"
|
"IPLimitlogDesc" = "Лог IP-адресов (перед включением лога IP-адресов, вы должны очистить лог)"
|
||||||
"IPLimitlogclear" = "Очистить журнал"
|
"IPLimitlogclear" = "Очистить лог"
|
||||||
"setDefaultCert" = "Установить сертификат с панели"
|
"setDefaultCert" = "Установить сертификат панели"
|
||||||
"telegramDesc" = "Пожалуйста, укажите ID чата Telegram. (используйте команду '/id' в боте) или (@userinfobot)"
|
"telegramDesc" = "Пожалуйста, укажите Chat ID Telegram. (используйте команду '/id' в боте) или (@userinfobot)"
|
||||||
"subscriptionDesc" = "Вы можете найти свою ссылку подписки в разделе 'Подробнее', также вы можете использовать одно и то же имя для нескольких конфигураций"
|
"subscriptionDesc" = "Вы можете найти свою ссылку подписки в разделе 'Подробнее'"
|
||||||
"info" = "Информация"
|
"info" = "Информация"
|
||||||
"same" = "Тот же"
|
"same" = "Тот же"
|
||||||
"inboundData" = "Входящие данные"
|
"inboundData" = "Данные подключений"
|
||||||
"exportInbound" = "Экспорт входящих"
|
"exportInbound" = "Экспорт входящих подключений"
|
||||||
"import" = "Импортировать"
|
"import" = "Импортировать"
|
||||||
"importInbound" = "Импорт входящего подключения"
|
"importInbound" = "Импорт входящих подключений"
|
||||||
|
|
||||||
[pages.client]
|
[pages.client]
|
||||||
"add" = "Создать клиента"
|
"add" = "Создать клиента"
|
||||||
|
@ -281,17 +282,17 @@
|
||||||
"save" = "Сохранить"
|
"save" = "Сохранить"
|
||||||
"infoDesc" = "Каждое выполненное изменение необходимо сохранить. Пожалуйста, перезапустите панель, чтобы изменения вступили в силу"
|
"infoDesc" = "Каждое выполненное изменение необходимо сохранить. Пожалуйста, перезапустите панель, чтобы изменения вступили в силу"
|
||||||
"restartPanel" = "Перезапуск панели"
|
"restartPanel" = "Перезапуск панели"
|
||||||
"restartPanelDesc" = "Вы уверены, что хотите перезапустить панель? Подтвердите, и перезапуск произойдёт через 3 секунды. Если панель станет недоступной, проверьте лог сервера"
|
"restartPanelDesc" = "Вы уверены, что хотите перезапустить панель? Подтвердите, и перезапуск произойдёт через 3 секунды. Если панель будет недоступна, проверьте лог сервера"
|
||||||
"restartPanelSuccess" = "Панель успешно перезапущена"
|
"restartPanelSuccess" = "Панель успешно перезапущена"
|
||||||
"actions" = "Действия"
|
"actions" = "Действия"
|
||||||
"resetDefaultConfig" = "Восстановить настройки по умолчанию"
|
"resetDefaultConfig" = "Восстановить настройки по умолчанию"
|
||||||
"panelSettings" = "Настройки панели"
|
"panelSettings" = "Настройки панели"
|
||||||
"securitySettings" = "Настройки безопасности"
|
"securitySettings" = "Настройки безопасности"
|
||||||
"TGBotSettings" = "Настройки Telegram бота"
|
"TGBotSettings" = "Настройки Telegram бота"
|
||||||
"panelListeningIP" = "IP-адрес панели"
|
"panelListeningIP" = "IP-адрес для управления панелью"
|
||||||
"panelListeningIPDesc" = "Оставьте пустым для подключения с любого IP"
|
"panelListeningIPDesc" = "Оставьте пустым для подключения с любого IP"
|
||||||
"panelListeningDomain" = "Домен панели"
|
"panelListeningDomain" = "Домен панели"
|
||||||
"panelListeningDomainDesc" = "По умолчанию оставьте пустым, чтобы отслеживать все домены и IP-адреса"
|
"panelListeningDomainDesc" = "По умолчанию оставьте пустым, чтобы подключаться с любых доменов и IP-адресов"
|
||||||
"panelPort" = "Порт панели"
|
"panelPort" = "Порт панели"
|
||||||
"panelPortDesc" = "Порт, на котором работает панель"
|
"panelPortDesc" = "Порт, на котором работает панель"
|
||||||
"publicKeyPath" = "Путь к файлу публичного ключа сертификата панели"
|
"publicKeyPath" = "Путь к файлу публичного ключа сертификата панели"
|
||||||
|
@ -301,27 +302,27 @@
|
||||||
"panelUrlPath" = "Корневой путь URL адреса панели"
|
"panelUrlPath" = "Корневой путь URL адреса панели"
|
||||||
"panelUrlPathDesc" = "Должен начинаться с '/' и заканчиваться '/'"
|
"panelUrlPathDesc" = "Должен начинаться с '/' и заканчиваться '/'"
|
||||||
"pageSize" = "Размер нумерации страниц"
|
"pageSize" = "Размер нумерации страниц"
|
||||||
"pageSizeDesc" = "Определить размер страницы для входящей таблицы. Установите 0, чтобы отключить"
|
"pageSizeDesc" = "Определить размер страницы для таблицы входящих подключений. Установите 0, чтобы отключить"
|
||||||
"remarkModel" = "Модель примечания и символ разделения"
|
"remarkModel" = "Модель примечания и символ разделения"
|
||||||
"datepicker" = "Выбор даты"
|
"datepicker" = "Выбор даты"
|
||||||
"datepickerPlaceholder" = "Выберите дату"
|
"datepickerPlaceholder" = "Выберите дату"
|
||||||
"datepickerDescription" = "Запланированные задачи будут выполняться в выбранное время"
|
"datepickerDescription" = "Запланированные задачи будут выполняться в выбранное время"
|
||||||
"sampleRemark" = "Пример замечания"
|
"sampleRemark" = "Пример примечания"
|
||||||
"oldUsername" = "Текущий логин"
|
"oldUsername" = "Текущий логин"
|
||||||
"currentPassword" = "Текущий пароль"
|
"currentPassword" = "Текущий пароль"
|
||||||
"newUsername" = "Новый логин"
|
"newUsername" = "Новый логин"
|
||||||
"newPassword" = "Новый пароль"
|
"newPassword" = "Новый пароль"
|
||||||
"telegramBotEnable" = "Включить Telegram бота"
|
"telegramBotEnable" = "Включить Telegram бота"
|
||||||
"telegramBotEnableDesc" = "Получайте доступ к функциям панели через Telegram-бота"
|
"telegramBotEnableDesc" = "Доступ к функциям панели через Telegram-бота"
|
||||||
"telegramToken" = "Токен Telegram бота"
|
"telegramToken" = "Токен Telegram бота"
|
||||||
"telegramTokenDesc" = "Необходимо получить токен у менеджера ботов Telegram @botfather"
|
"telegramTokenDesc" = "Необходимо получить токен у менеджера ботов Telegram @botfather"
|
||||||
"telegramProxy" = "Прокси Socks5"
|
"telegramProxy" = "Прокси Socks5"
|
||||||
"telegramProxyDesc" = "Если для подключения к Telegram вам нужен прокси Socks5. Настройте его параметры согласно руководству."
|
"telegramProxyDesc" = "Если для подключения к Telegram вам нужен прокси Socks5, настройте его параметры согласно руководству."
|
||||||
"telegramAPIServer" = "API-сервер Telegram"
|
"telegramAPIServer" = "API-сервер Telegram"
|
||||||
"telegramAPIServerDesc" = "Используемый API-сервер Telegram. Оставьте пустым, чтобы использовать сервер по умолчанию."
|
"telegramAPIServerDesc" = "Используемый API-сервер Telegram. Оставьте пустым, чтобы использовать сервер по умолчанию."
|
||||||
"telegramChatId" = "Идентификатор Telegram администратора бота"
|
"telegramChatId" = "User ID администратора бота"
|
||||||
"telegramChatIdDesc" = "Один или несколько идентификаторов администратора бота. Для получения идентификатора используйте @userinfobot или команду '/id' в боте."
|
"telegramChatIdDesc" = "Один или несколько User ID администратора(-ов) Telegram-бота. Для получения User ID используйте @userinfobot или команду '/id' в боте."
|
||||||
"telegramNotifyTime" = "Частота уведомлений бота Telegram"
|
"telegramNotifyTime" = "Частота уведомлений для администраторов от бота"
|
||||||
"telegramNotifyTimeDesc" = "Укажите интервал уведомлений в формате Crontab"
|
"telegramNotifyTimeDesc" = "Укажите интервал уведомлений в формате Crontab"
|
||||||
"tgNotifyBackup" = "Резервное копирование базы данных"
|
"tgNotifyBackup" = "Резервное копирование базы данных"
|
||||||
"tgNotifyBackupDesc" = "Отправлять уведомление с файлом резервной копии базы данных"
|
"tgNotifyBackupDesc" = "Отправлять уведомление с файлом резервной копии базы данных"
|
||||||
|
@ -334,7 +335,7 @@
|
||||||
"trafficDiff" = "Порог трафика для уведомления"
|
"trafficDiff" = "Порог трафика для уведомления"
|
||||||
"trafficDiffDesc" = "Получение уведомления об исчерпании трафика до достижения порога (значение: ГБ)"
|
"trafficDiffDesc" = "Получение уведомления об исчерпании трафика до достижения порога (значение: ГБ)"
|
||||||
"tgNotifyCpu" = "Порог нагрузки на ЦП для уведомления"
|
"tgNotifyCpu" = "Порог нагрузки на ЦП для уведомления"
|
||||||
"tgNotifyCpuDesc" = "Получение уведомления, если нагрузка на ЦП превышает этот порог (значение: %)"
|
"tgNotifyCpuDesc" = "Уведомление администраторов в Telegram, если нагрузка на ЦП превышает этот порог (значение: %)"
|
||||||
"timeZone" = "Часовой пояс"
|
"timeZone" = "Часовой пояс"
|
||||||
"timeZoneDesc" = "Запланированные задачи выполняются в соответствии со временем в этом часовом поясе"
|
"timeZoneDesc" = "Запланированные задачи выполняются в соответствии со временем в этом часовом поясе"
|
||||||
"subSettings" = "Подписка"
|
"subSettings" = "Подписка"
|
||||||
|
@ -346,14 +347,14 @@
|
||||||
"subListenDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса"
|
"subListenDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса"
|
||||||
"subPort" = "Порт подписки"
|
"subPort" = "Порт подписки"
|
||||||
"subPortDesc" = "Номер порта для обслуживания службы подписки не должен использоваться на сервере"
|
"subPortDesc" = "Номер порта для обслуживания службы подписки не должен использоваться на сервере"
|
||||||
"subCertPath" = "Путь к файлу открытого ключа сертификата подписки"
|
"subCertPath" = "Путь к файлу публичного ключа сертификата подписки"
|
||||||
"subCertPathDesc" = "Введите полный путь, начинающийся с '/'"
|
"subCertPathDesc" = "Введите полный путь, начинающийся с '/'"
|
||||||
"subKeyPath" = "Путь к файлу закрытого ключа сертификата подписки"
|
"subKeyPath" = "Путь к файлу приватного ключа сертификата подписки"
|
||||||
"subKeyPathDesc" = "Введите полный путь, начинающийся с '/'"
|
"subKeyPathDesc" = "Введите полный путь, начинающийся с '/'"
|
||||||
"subPath" = "Корневой путь URL-адреса подписки"
|
"subPath" = "Корневой путь URL-адреса подписки"
|
||||||
"subPathDesc" = "Должен начинаться с '/' и заканчиваться на '/'"
|
"subPathDesc" = "Должен начинаться с '/' и заканчиваться на '/'"
|
||||||
"subDomain" = "Домен прослушивания"
|
"subDomain" = "Домен прослушивания"
|
||||||
"subDomainDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все домены и IP-адреса"
|
"subDomainDesc" = "Оставьте пустым по умолчанию, чтобы слушать все домены и IP-адреса"
|
||||||
"subUpdates" = "Интервалы обновления подписки"
|
"subUpdates" = "Интервалы обновления подписки"
|
||||||
"subUpdatesDesc" = "Интервал между обновлениями в клиентском приложении (в часах)"
|
"subUpdatesDesc" = "Интервал между обновлениями в клиентском приложении (в часах)"
|
||||||
"subEncrypt" = "Шифровать конфиги"
|
"subEncrypt" = "Шифровать конфиги"
|
||||||
|
@ -367,14 +368,14 @@
|
||||||
"externalTrafficInformURI" = "URI информации о внешнем трафике"
|
"externalTrafficInformURI" = "URI информации о внешнем трафике"
|
||||||
"externalTrafficInformURIDesc" = "Обновления трафика отправляются на этот URI"
|
"externalTrafficInformURIDesc" = "Обновления трафика отправляются на этот URI"
|
||||||
"fragment" = "Фрагментация"
|
"fragment" = "Фрагментация"
|
||||||
"fragmentDesc" = "Включить фрагментацию TLS-приветствия"
|
"fragmentDesc" = "Включить фрагментацию TLS-хэндшейка"
|
||||||
"fragmentSett" = "Настройки фрагментации"
|
"fragmentSett" = "Настройки фрагментации"
|
||||||
"noisesDesc" = "Включить Noises."
|
"noisesDesc" = "Включить Noises."
|
||||||
"noisesSett" = "Настройки Noises"
|
"noisesSett" = "Настройки Noises"
|
||||||
"mux" = "Mux"
|
"mux" = "Mux"
|
||||||
"muxDesc" = "Передача нескольких независимых потоков данных в одном соединении."
|
"muxDesc" = "Передача нескольких независимых потоков данных в одном соединении."
|
||||||
"muxSett" = "Mux Настройки"
|
"muxSett" = "Настройки Mux"
|
||||||
"direct" = "Прямая связь"
|
"direct" = "Прямое подключение"
|
||||||
"directDesc" = "Устанавливает прямые соединения с доменами или IP-адресами определённой страны."
|
"directDesc" = "Устанавливает прямые соединения с доменами или IP-адресами определённой страны."
|
||||||
"notifications" = "Уведомления"
|
"notifications" = "Уведомления"
|
||||||
"certs" = "Сертификаты"
|
"certs" = "Сертификаты"
|
||||||
|
@ -398,13 +399,13 @@
|
||||||
"advancedTemplate" = "Расширенный шаблон"
|
"advancedTemplate" = "Расширенный шаблон"
|
||||||
"generalConfigs" = "Основные настройки"
|
"generalConfigs" = "Основные настройки"
|
||||||
"generalConfigsDesc" = "Эти параметры описывают общие настройки"
|
"generalConfigsDesc" = "Эти параметры описывают общие настройки"
|
||||||
"logConfigs" = "Журнал"
|
"logConfigs" = "Логи"
|
||||||
"logConfigsDesc" = "Логи могут замедлять работу сервера. Включайте только нужные вам виды логов при необходимости!"
|
"logConfigsDesc" = "Логи могут замедлять работу сервера. Включайте только нужные вам виды логов при необходимости!"
|
||||||
"blockConfigs" = "Блокировка конфигураций"
|
"blockConfigs" = "Блокировка подключений"
|
||||||
"blockConfigsDesc" = "Эти параметры не позволят клиентам подключаться к определенным протоколам и веб-сайтам"
|
"blockConfigsDesc" = "Настройте, чтобы клиенты не имели доступа к определенным протоколам и веб-сайтами"
|
||||||
"basicRouting" = "Базовые соединения"
|
"basicRouting" = "Базовые соединения"
|
||||||
"blockConnectionsConfigsDesc" = "Эти параметры будут блокировать трафик в зависимости от запрашиваемой страны."
|
"blockConnectionsConfigsDesc" = "Эти параметры будут блокировать трафик в зависимости от страны назначения."
|
||||||
"directConnectionsConfigsDesc" = "Прямое соединение гарантирует, что определенный трафик не будет перенаправлен через другой сервер."
|
"directConnectionsConfigsDesc" = "Прямое соединение означает, что определенный трафик не будет перенаправлен через другой сервер."
|
||||||
"blockips" = "Заблокированные IP-адреса"
|
"blockips" = "Заблокированные IP-адреса"
|
||||||
"blockdomains" = "Заблокированные домены"
|
"blockdomains" = "Заблокированные домены"
|
||||||
"directips" = "Прямые IP-адреса"
|
"directips" = "Прямые IP-адреса"
|
||||||
|
@ -417,7 +418,7 @@
|
||||||
"TemplateDesc" = "Создание файла конфигурации Xray на основе этого шаблона"
|
"TemplateDesc" = "Создание файла конфигурации Xray на основе этого шаблона"
|
||||||
"FreedomStrategy" = "Настройка стратегии протокола Freedom"
|
"FreedomStrategy" = "Настройка стратегии протокола Freedom"
|
||||||
"FreedomStrategyDesc" = "Установка стратегии вывода сети в протоколе Freedom"
|
"FreedomStrategyDesc" = "Установка стратегии вывода сети в протоколе Freedom"
|
||||||
"RoutingStrategy" = "Настройка стратегии маршрутизации доменов"
|
"RoutingStrategy" = "Настройка маршрутизации доменов"
|
||||||
"RoutingStrategyDesc" = "Установка общей стратегии маршрутизации разрешения DNS"
|
"RoutingStrategyDesc" = "Установка общей стратегии маршрутизации разрешения DNS"
|
||||||
"Torrent" = "Заблокировать BitTorrent"
|
"Torrent" = "Заблокировать BitTorrent"
|
||||||
"TorrentDesc" = "Запретить входящий/исходящий трафик, в котором фигурирует протокол BitTorrent"
|
"TorrentDesc" = "Запретить входящий/исходящий трафик, в котором фигурирует протокол BitTorrent"
|
||||||
|
@ -427,17 +428,17 @@
|
||||||
"InboundsDesc" = "Изменение шаблона конфигурации для подключения определенных клиентов"
|
"InboundsDesc" = "Изменение шаблона конфигурации для подключения определенных клиентов"
|
||||||
"Outbounds" = "Исходящее соединение"
|
"Outbounds" = "Исходящее соединение"
|
||||||
"Balancers" = "Балансировщик"
|
"Balancers" = "Балансировщик"
|
||||||
"OutboundsDesc" = "Изменение шаблона конфигурации, чтобы определить исходящие пути для этого сервера"
|
"OutboundsDesc" = "Изменение шаблона конфигурации, чтобы определить исходящие соединения для этого сервера"
|
||||||
"Routings" = "Маршрутизация"
|
"Routings" = "Маршрутизация"
|
||||||
"RoutingsDesc" = "Важен приоритет каждого правила!"
|
"RoutingsDesc" = "Важен приоритет каждого правила!"
|
||||||
"completeTemplate" = "Все"
|
"completeTemplate" = "Все"
|
||||||
"logLevel" = "Уровень журнала"
|
"logLevel" = "Уровень логов"
|
||||||
"logLevelDesc" = "Уровень журнала для журналов ошибок, указывающий информацию, которую необходимо записать."
|
"logLevelDesc" = "Уровень журнала для журналов ошибок, указывающий информацию, которую необходимо записать."
|
||||||
"accessLog" = "Журнал доступа"
|
"accessLog" = "Логи доступа"
|
||||||
"accessLogDesc" = "Путь к файлу журнала доступа. Специальное значение «none» отключает журналы доступа."
|
"accessLogDesc" = "Путь к файлу журнала доступа. Специальное значение «none» отключает логи доступа."
|
||||||
"errorLog" = "Журнал ошибок"
|
"errorLog" = "Логи ошибок"
|
||||||
"errorLogDesc" = "Путь к файлу журнала ошибок. Специальное значение «none» отключает журналы ошибок."
|
"errorLogDesc" = "Путь к файлу логов ошибок. Специальное значение «none» отключает логи ошибок."
|
||||||
"dnsLog" = "Журнал DNS"
|
"dnsLog" = "Логи DNS"
|
||||||
"dnsLogDesc" = "Включить логи запросов DNS"
|
"dnsLogDesc" = "Включить логи запросов DNS"
|
||||||
"maskAddress" = "Маскировка адреса"
|
"maskAddress" = "Маскировка адреса"
|
||||||
"maskAddressDesc" = "При активации реальный IP-адрес заменяется на маскировочный в логах."
|
"maskAddressDesc" = "При активации реальный IP-адрес заменяется на маскировочный в логах."
|
||||||
|
@ -496,7 +497,7 @@
|
||||||
"balancerDesc" = "Невозможно одновременно использовать balancerTag и outboundTag. При одновременном использовании будет работать только outboundTag."
|
"balancerDesc" = "Невозможно одновременно использовать balancerTag и outboundTag. При одновременном использовании будет работать только outboundTag."
|
||||||
|
|
||||||
[pages.xray.wireguard]
|
[pages.xray.wireguard]
|
||||||
"secretKey" = "Закрытый ключ"
|
"secretKey" = "Приватный ключ"
|
||||||
"publicKey" = "Публичный ключ"
|
"publicKey" = "Публичный ключ"
|
||||||
"allowedIPs" = "Разрешенные IP-адреса"
|
"allowedIPs" = "Разрешенные IP-адреса"
|
||||||
"endpoint" = "Конечная точка"
|
"endpoint" = "Конечная точка"
|
||||||
|
@ -545,7 +546,7 @@
|
||||||
"twoFactorModalError" = "Неверный код"
|
"twoFactorModalError" = "Неверный код"
|
||||||
|
|
||||||
[pages.settings.toasts]
|
[pages.settings.toasts]
|
||||||
"modifySettings" = "Параметры были изменены."
|
"modifySettings" = "Настройки изменены"
|
||||||
"getSettings" = "Произошла ошибка при получении параметров."
|
"getSettings" = "Произошла ошибка при получении параметров."
|
||||||
"modifyUserError" = "Произошла ошибка при изменении учетных данных администратора."
|
"modifyUserError" = "Произошла ошибка при изменении учетных данных администратора."
|
||||||
"modifyUser" = "Вы успешно изменили учетные данные администратора."
|
"modifyUser" = "Вы успешно изменили учетные данные администратора."
|
||||||
|
@ -555,13 +556,13 @@
|
||||||
"resetOutboundTrafficError" = "Ошибка сброса исходящего трафика"
|
"resetOutboundTrafficError" = "Ошибка сброса исходящего трафика"
|
||||||
|
|
||||||
[tgbot]
|
[tgbot]
|
||||||
"keyboardClosed" = "❌ Закрыта настраиваемая клавиатура!"
|
"keyboardClosed" = "❌ Клавиатура закрыта."
|
||||||
"noResult" = "❗ Нет результатов!"
|
"noResult" = "❗ Нет результатов."
|
||||||
"noQuery" = "❌ Запрос не найден! Пожалуйста, повторите команду!"
|
"noQuery" = "❌ Запрос не найден. Пожалуйста, повторите команду."
|
||||||
"wentWrong" = "❌ Что-то пошло не так!"
|
"wentWrong" = "❌ Что-то пошло не так..."
|
||||||
"noIpRecord" = "❗ Нет записей об IP-адресе!"
|
"noIpRecord" = "❗ Нет записей об IP-адресе."
|
||||||
"noInbounds" = "❗ Входящих соединений не найдено!"
|
"noInbounds" = "❗ У вас не настроено ни одного подключения."
|
||||||
"unlimited" = "♾ Неограниченно"
|
"unlimited" = "♾ Безлимит"
|
||||||
"add" = "Добавить"
|
"add" = "Добавить"
|
||||||
"month" = "Месяц"
|
"month" = "Месяц"
|
||||||
"months" = "Месяцев"
|
"months" = "Месяцев"
|
||||||
|
@ -569,7 +570,7 @@
|
||||||
"days" = "Дней"
|
"days" = "Дней"
|
||||||
"hours" = "Часов"
|
"hours" = "Часов"
|
||||||
"unknown" = "Неизвестно"
|
"unknown" = "Неизвестно"
|
||||||
"inbounds" = "Входящие"
|
"inbounds" = "Подключения"
|
||||||
"clients" = "Клиенты"
|
"clients" = "Клиенты"
|
||||||
"offline" = "🔴 Офлайн"
|
"offline" = "🔴 Офлайн"
|
||||||
"online" = "🟢 Онлайн"
|
"online" = "🟢 Онлайн"
|
||||||
|
@ -577,22 +578,22 @@
|
||||||
[tgbot.commands]
|
[tgbot.commands]
|
||||||
"unknown" = "❗ Неизвестная команда"
|
"unknown" = "❗ Неизвестная команда"
|
||||||
"pleaseChoose" = "👇 Пожалуйста, выберите:\r\n"
|
"pleaseChoose" = "👇 Пожалуйста, выберите:\r\n"
|
||||||
"help" = "🤖 Добро пожаловать в этого бота! Он предназначен для предоставления вам конкретных данных с сервера и позволяет вносить необходимые изменения.\r\n\r\n"
|
"help" = "🤖 Добро пожаловать! Этот бот предназначен для предоставления вам данных с сервера и позволяет вносить изменения на него.\r\n\r\n"
|
||||||
"start" = "👋 Привет, <i>{{ .Firstname }}</i>.\r\n"
|
"start" = "👋 Привет, <i>{{ .Firstname }}</i>.\r\n"
|
||||||
"welcome" = "🤖 Добро пожаловать в бота управления <b>{{ .Hostname }}</b>.\r\n"
|
"welcome" = "🤖 Добро пожаловать в бота управления <b>{{ .Hostname }}</b>!\r\n"
|
||||||
"status" = "✅ Бот работает нормально!"
|
"status" = "✅ Бот функционирует нормально."
|
||||||
"usage" = "❗ Пожалуйста, укажите текст для поиска!"
|
"usage" = "❗ Пожалуйста, укажите email для поиска."
|
||||||
"getID" = "🆔 Ваш ID: <code>{{ .ID }}</code>"
|
"getID" = "🆔 Ваш User ID: <code>{{ .ID }}</code>"
|
||||||
"helpAdminCommands" = "Для перезапуска Xray Core:\r\n<code>/restart</code>\r\n\r\nДля поиска электронной почты клиента:\r\n<code>/usage [Email]</code>\r\n\r\nДля поиска входящих (со статистикой клиента):\r\n<code>/inbound [Примечание]</code>\r\n\r\nID чата Telegram:\r\n<code>/id</code>"
|
"helpAdminCommands" = "🔃 Для перезапуска Xray Core:\r\n<code>/restart</code>\r\n\r\n🔎 Для поиска клиента по email:\r\n<code>/usage [Email]</code>\r\n\r\n📊 Для поиска подключений (со статистикой клиентов):\r\n<code>/inbound [имя подключения]</code>\r\n\r\n🆔 Ваш Telegram User ID:\r\n<code>/id</code>"
|
||||||
"helpClientCommands" = "Для поиска статистики используйте команду:\r\n<code>/usage [Email]</code>\r\n\r\nID чата Telegram:\r\n<code>/id</code>"
|
"helpClientCommands" = "💲 Для просмотра информации о вашей подписке используйте команду:\r\n<code>/usage [Email]</code>\r\n\r\n🆔 Ваш Telegram User ID:\r\n<code>/id</code>"
|
||||||
"restartUsage" = "\r\n\r\n<code>/restart</code>"
|
"restartUsage" = "\r\n\r\n<code>/restart</code>"
|
||||||
"restartSuccess" = "✅ Операция успешно завершена!"
|
"restartSuccess" = "✅ Ядро Xray успешно перезапущено."
|
||||||
"restartFailed" = "❗ Ошибка в операции.\r\n\r\n<code>Ошибка: {{ .Error }}</code>."
|
"restartFailed" = "❗ Ошибка при перезапуске Xray-core.\r\n\r\n<code>Ошибка: {{ .Error }}</code>."
|
||||||
"xrayNotRunning" = "❗ Xray Core не запущен."
|
"xrayNotRunning" = "❗ Xray Core не запущен."
|
||||||
|
|
||||||
[tgbot.messages]
|
[tgbot.messages]
|
||||||
"cpuThreshold" = "🔴 Загрузка процессора составляет {{ .Percent }}%, что превышает пороговое значение {{ .Threshold }}%"
|
"cpuThreshold" = "🔴 Загрузка процессора составляет {{ .Percent }}%, что превышает пороговое значение {{ .Threshold }}%"
|
||||||
"selectUserFailed" = "❌ Ошибка при выборе пользователя!"
|
"selectUserFailed" = "❌ Ошибка при выборе пользователя."
|
||||||
"userSaved" = "✅ Пользователь Telegram сохранен."
|
"userSaved" = "✅ Пользователь Telegram сохранен."
|
||||||
"loginSuccess" = "✅ Успешный вход в панель.\r\n"
|
"loginSuccess" = "✅ Успешный вход в панель.\r\n"
|
||||||
"loginFailed" = "❗️ Ошибка входа в панель.\r\n"
|
"loginFailed" = "❗️ Ошибка входа в панель.\r\n"
|
||||||
|
@ -606,8 +607,8 @@
|
||||||
"ip" = "🌐 IP: {{ .IP }}\r\n"
|
"ip" = "🌐 IP: {{ .IP }}\r\n"
|
||||||
"ips" = "🔢 IP-адреса:\r\n{{ .IPs }}\r\n"
|
"ips" = "🔢 IP-адреса:\r\n{{ .IPs }}\r\n"
|
||||||
"serverUpTime" = "⏳ Время работы сервера: {{ .UpTime }} {{ .Unit }}\r\n"
|
"serverUpTime" = "⏳ Время работы сервера: {{ .UpTime }} {{ .Unit }}\r\n"
|
||||||
"serverLoad" = "📈 Загрузка сервера: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n"
|
"serverLoad" = "📈 Нагрузка сервера: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n"
|
||||||
"serverMemory" = "📋 Память сервера: {{ .Current }}/{{ .Total }}\r\n"
|
"serverMemory" = "📋 Диск сервера: {{ .Current }}/{{ .Total }}\r\n"
|
||||||
"tcpCount" = "🔹 Количество TCP-соединений: {{ .Count }}\r\n"
|
"tcpCount" = "🔹 Количество TCP-соединений: {{ .Count }}\r\n"
|
||||||
"udpCount" = "🔸 Количество UDP-соединений: {{ .Count }}\r\n"
|
"udpCount" = "🔸 Количество UDP-соединений: {{ .Count }}\r\n"
|
||||||
"traffic" = "🚦 Трафик: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
|
"traffic" = "🚦 Трафик: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
|
||||||
|
@ -620,18 +621,18 @@
|
||||||
"expire" = "📅 Дата окончания: {{ .Time }}\r\n"
|
"expire" = "📅 Дата окончания: {{ .Time }}\r\n"
|
||||||
"expireIn" = "📅 Окончание через: {{ .Time }}\r\n"
|
"expireIn" = "📅 Окончание через: {{ .Time }}\r\n"
|
||||||
"active" = "💡 Активен: {{ .Enable }}\r\n"
|
"active" = "💡 Активен: {{ .Enable }}\r\n"
|
||||||
"enabled" = "🚨 Включен: {{ .Enable }}\r\n"
|
"enabled" = "🚨 Активен: {{ .Enable }}\r\n"
|
||||||
"online" = "🌐 Статус соединения: {{ .Status }}\r\n"
|
"online" = "🌐 Статус соединения: {{ .Status }}\r\n"
|
||||||
"email" = "📧 Email: {{ .Email }}\r\n"
|
"email" = "📧 Email: {{ .Email }}\r\n"
|
||||||
"upload" = "🔼 Исходящий трафик: ↑{{ .Upload }}\r\n"
|
"upload" = "🔼 Исходящий трафик: ↑{{ .Upload }}\r\n"
|
||||||
"download" = "🔽 Входящий трафик: ↓{{ .Download }}\r\n"
|
"download" = "🔽 Входящий трафик: ↓{{ .Download }}\r\n"
|
||||||
"total" = "📊 Всего: ↑↓{{ .UpDown }} из {{ .Total }}\r\n"
|
"total" = "📊 Всего: ↑↓{{ .UpDown }} из {{ .Total }}\r\n"
|
||||||
"TGUser" = "👤 Пользователь Telegram: {{ .TelegramID }}\r\n"
|
"TGUser" = "👤 Telegram User ID: {{ .TelegramID }}\r\n"
|
||||||
"exhaustedMsg" = "🚨 Исчерпаны {{ .Type }}:\r\n"
|
"exhaustedMsg" = "🚨 Исчерпаны {{ .Type }}:\r\n"
|
||||||
"exhaustedCount" = "🚨 Количество исчерпанных {{ .Type }}:\r\n"
|
"exhaustedCount" = "🚨 Количество исчерпанных {{ .Type }}:\r\n"
|
||||||
"onlinesCount" = "🌐 Клиентов онлайн: {{ .Count }}\r\n"
|
"onlinesCount" = "🌐 Клиентов онлайн: {{ .Count }}\r\n"
|
||||||
"disabled" = "🛑 Отключено: {{ .Disabled }}\r\n"
|
"disabled" = "🛑 Отключено: {{ .Disabled }}\r\n"
|
||||||
"depleteSoon" = "🔜 Скоро исчерпание: {{ .Deplete }}\r\n\r\n"
|
"depleteSoon" = "🔜 Клиенты, у которых скоро исчерпание: {{ .Deplete }}\r\n\r\n"
|
||||||
"backupTime" = "🗄 Время резервного копирования: {{ .Time }}\r\n"
|
"backupTime" = "🗄 Время резервного копирования: {{ .Time }}\r\n"
|
||||||
"refreshedOn" = "\r\n📋🔄 Обновлено: {{ .Time }}\r\n\r\n"
|
"refreshedOn" = "\r\n📋🔄 Обновлено: {{ .Time }}\r\n\r\n"
|
||||||
"yes" = "✅ Да"
|
"yes" = "✅ Да"
|
||||||
|
@ -639,17 +640,17 @@
|
||||||
|
|
||||||
"received_id" = "🔑📥 ID обновлён."
|
"received_id" = "🔑📥 ID обновлён."
|
||||||
"received_password" = "🔑📥 Пароль обновлён."
|
"received_password" = "🔑📥 Пароль обновлён."
|
||||||
"received_email" = "📧📥 Электронная почта обновлена."
|
"received_email" = "📧📥 Email обновлен."
|
||||||
"received_comment" = "💬📥 Комментарий обновлён."
|
"received_comment" = "💬📥 Комментарий обновлён."
|
||||||
"id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID."
|
"id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID."
|
||||||
"pass_prompt" = "🔑 Стандартный пароль: {{ .ClientPassword }}\n\nВведите ваш пароль."
|
"pass_prompt" = "🔑 Стандартный пароль: {{ .ClientPassword }}\n\nВведите ваш пароль."
|
||||||
"email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email."
|
"email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email."
|
||||||
"comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий."
|
"comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий."
|
||||||
"inbound_client_data_id" = "🔄 Вход: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Почта: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Дата окончания: {{ .ClientExp }}\n🌐 Лимит IP: {{ .IpLimit }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящий поток!"
|
"inbound_client_data_id" = "🔄 Подключения: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Дата исчерпания: {{ .ClientExp }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в подключение!"
|
||||||
"inbound_client_data_pass" = "🔄 Вход: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Почта: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Дата окончания: {{ .ClientExp }}\n🌐 Лимит IP: {{ .IpLimit }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящий поток!"
|
"inbound_client_data_pass" = "🔄 Подключения: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Дата исчерпания: {{ .ClientExp }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в подключение!"
|
||||||
"cancel" = "❌ Процесс отменён! \n\nВы можете снова начать с /start в любое время. 🔄"
|
"cancel" = "❌ Процесс отменён! \n\nВы можете снова начать с /start в любое время. 🔄"
|
||||||
"error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}"
|
"error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}"
|
||||||
"using_default_value" = "Хорошо, оставлю значение по умолчанию. 😊"
|
"using_default_value" = "Используется значение по умолчанию👌"
|
||||||
"incorrect_input" ="Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫"
|
"incorrect_input" ="Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫"
|
||||||
"AreYouSure" = "Вы уверены? 🤔"
|
"AreYouSure" = "Вы уверены? 🤔"
|
||||||
"SuccessResetTraffic" = "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успешно"
|
"SuccessResetTraffic" = "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успешно"
|
||||||
|
@ -666,13 +667,13 @@
|
||||||
"confirmClearIps" = "✅ Подтвердить очистку IP?"
|
"confirmClearIps" = "✅ Подтвердить очистку IP?"
|
||||||
"confirmRemoveTGUser" = "✅ Подтвердить удаление пользователя Telegram?"
|
"confirmRemoveTGUser" = "✅ Подтвердить удаление пользователя Telegram?"
|
||||||
"confirmToggle" = "✅ Подтвердить вкл/выкл пользователя?"
|
"confirmToggle" = "✅ Подтвердить вкл/выкл пользователя?"
|
||||||
"dbBackup" = "Получить резервную копию DB"
|
"dbBackup" = "📂 Бэкап БД"
|
||||||
"serverUsage" = "Использование сервера"
|
"serverUsage" = "💻 Состояние сервера"
|
||||||
"getInbounds" = "Получить входящие потоки"
|
"getInbounds" = "🔌 Подключения"
|
||||||
"depleteSoon" = "Скоро исчерпание"
|
"depleteSoon" = "⚠️ Скоро конец"
|
||||||
"clientUsage" = "Получить использование"
|
"clientUsage" = "Статистика клиента"
|
||||||
"onlines" = "Онлайн-клиенты"
|
"onlines" = "🟢 Онлайн"
|
||||||
"commands" = "Команды"
|
"commands" = "🖱️ Команды"
|
||||||
"refresh" = "🔄 Обновить"
|
"refresh" = "🔄 Обновить"
|
||||||
"clearIPs" = "❌ Очистить IP"
|
"clearIPs" = "❌ Очистить IP"
|
||||||
"removeTGUser" = "❌ Удалить пользователя Telegram"
|
"removeTGUser" = "❌ Удалить пользователя Telegram"
|
||||||
|
@ -688,16 +689,16 @@
|
||||||
"confirmNumber" = "✅ Подтвердить: {{ .Num }}"
|
"confirmNumber" = "✅ Подтвердить: {{ .Num }}"
|
||||||
"confirmNumberAdd" = "✅ Подтвердить добавление: {{ .Num }}"
|
"confirmNumberAdd" = "✅ Подтвердить добавление: {{ .Num }}"
|
||||||
"limitTraffic" = "🚧 Лимит трафика"
|
"limitTraffic" = "🚧 Лимит трафика"
|
||||||
"getBanLogs" = "Журнал блокировок"
|
"getBanLogs" = "📄 Лог банов"
|
||||||
"allClients" = "Все клиенты"
|
"allClients" = "👥 Все клиенты"
|
||||||
|
|
||||||
"addClient" = "Добавить клиента"
|
"addClient" = "➕ Новый клиент"
|
||||||
"submitDisable" = "Отправить как отключённый ☑️"
|
"submitDisable" = "Добавить отключенным ☑️"
|
||||||
"submitEnable" = "Отправить как включённый ✅"
|
"submitEnable" = "Добавить включенныи ✅"
|
||||||
"use_default" = "🏷️ Использовать по умолчанию"
|
"use_default" = "🏷️ Использовать по умолчанию"
|
||||||
"change_id" = "⚙️🔑 ID"
|
"change_id" = "⚙️🔑 ID"
|
||||||
"change_password" = "⚙️🔑 Пароль"
|
"change_password" = "⚙️🔑 Пароль"
|
||||||
"change_email" = "⚙️📧 Электронная почта"
|
"change_email" = "⚙️📧 Email"
|
||||||
"change_comment" = "⚙️💬 Комментарий"
|
"change_comment" = "⚙️💬 Комментарий"
|
||||||
"ResetAllTraffics" = "Сбросить весь трафик"
|
"ResetAllTraffics" = "Сбросить весь трафик"
|
||||||
"SortedTrafficUsageReport" = "Отсортированный отчет об использовании трафика"
|
"SortedTrafficUsageReport" = "Отсортированный отчет об использовании трафика"
|
||||||
|
@ -706,7 +707,7 @@
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Успешно!"
|
"successfulOperation" = "✅ Успешно!"
|
||||||
"errorOperation" = "❗ Ошибка в операции."
|
"errorOperation" = "❗ Ошибка в операции."
|
||||||
"getInboundsFailed" = "❌ Не удалось получить входящие потоки."
|
"getInboundsFailed" = "❌ Не удалось получить подключения."
|
||||||
"getClientsFailed" = "❌ Не удалось получить клиентов."
|
"getClientsFailed" = "❌ Не удалось получить клиентов."
|
||||||
"canceled" = "❌ {{ .Email }}: Операция отменена."
|
"canceled" = "❌ {{ .Email }}: Операция отменена."
|
||||||
"clientRefreshSuccess" = "✅ {{ .Email }}: Клиент успешно обновлен."
|
"clientRefreshSuccess" = "✅ {{ .Email }}: Клиент успешно обновлен."
|
||||||
|
@ -722,6 +723,6 @@
|
||||||
"removedTGUserSuccess" = "✅ {{ .Email }}: Пользователь Telegram успешно удален."
|
"removedTGUserSuccess" = "✅ {{ .Email }}: Пользователь Telegram успешно удален."
|
||||||
"enableSuccess" = "✅ {{ .Email }}: Включено успешно."
|
"enableSuccess" = "✅ {{ .Email }}: Включено успешно."
|
||||||
"disableSuccess" = "✅ {{ .Email }}: Отключено успешно."
|
"disableSuccess" = "✅ {{ .Email }}: Отключено успешно."
|
||||||
"askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <code>{{ .TgUserID }}</code>"
|
"askToAddUserId" = "❌ Ваша конфигурация не найдена!\r\n💭 Пожалуйста, попросите администратора использовать ваш Telegram User ID в конфигурации.\r\n\r\n🆔 Ваш User ID: <code>{{ .TgUserID }}</code>"
|
||||||
"chooseClient" = "Выберите клиента для подключения {{ .Inbound }}"
|
"chooseClient" = "Выберите клиента для подключения {{ .Inbound }}"
|
||||||
"chooseInbound" = "Выберите подключение"
|
"chooseInbound" = "Выберите подключение"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Düzenle"
|
"edit" = "Düzenle"
|
||||||
"delete" = "Sil"
|
"delete" = "Sil"
|
||||||
"reset" = "Sıfırla"
|
"reset" = "Sıfırla"
|
||||||
|
"noData" = "Veri yok."
|
||||||
"copySuccess" = "Başarıyla Kopyalandı"
|
"copySuccess" = "Başarıyla Kopyalandı"
|
||||||
"sure" = "Emin misiniz"
|
"sure" = "Emin misiniz"
|
||||||
"encryption" = "Şifreleme"
|
"encryption" = "Şifreleme"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Редагувати"
|
"edit" = "Редагувати"
|
||||||
"delete" = "Видалити"
|
"delete" = "Видалити"
|
||||||
"reset" = "Скидання"
|
"reset" = "Скидання"
|
||||||
|
"noData" = "Немає даних."
|
||||||
"copySuccess" = "Скопійовано успішно"
|
"copySuccess" = "Скопійовано успішно"
|
||||||
"sure" = "Звичайно"
|
"sure" = "Звичайно"
|
||||||
"encryption" = "Шифрування"
|
"encryption" = "Шифрування"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "Chỉnh sửa"
|
"edit" = "Chỉnh sửa"
|
||||||
"delete" = "Xóa"
|
"delete" = "Xóa"
|
||||||
"reset" = "Đặt lại"
|
"reset" = "Đặt lại"
|
||||||
|
"noData" = "Không có dữ liệu."
|
||||||
"copySuccess" = "Đã sao chép thành công"
|
"copySuccess" = "Đã sao chép thành công"
|
||||||
"sure" = "Chắc chắn"
|
"sure" = "Chắc chắn"
|
||||||
"encryption" = "Mã hóa"
|
"encryption" = "Mã hóa"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "编辑"
|
"edit" = "编辑"
|
||||||
"delete" = "删除"
|
"delete" = "删除"
|
||||||
"reset" = "重置"
|
"reset" = "重置"
|
||||||
|
"noData" = "无数据。"
|
||||||
"copySuccess" = "复制成功"
|
"copySuccess" = "复制成功"
|
||||||
"sure" = "确定"
|
"sure" = "确定"
|
||||||
"encryption" = "加密"
|
"encryption" = "加密"
|
||||||
|
@ -534,15 +535,15 @@
|
||||||
"twoFactor" = "双重验证"
|
"twoFactor" = "双重验证"
|
||||||
"twoFactorEnable" = "启用2FA"
|
"twoFactorEnable" = "启用2FA"
|
||||||
"twoFactorEnableDesc" = "增加额外的验证层以提高安全性。"
|
"twoFactorEnableDesc" = "增加额外的验证层以提高安全性。"
|
||||||
"twoFactorModalSetTitle" = "啟用雙重認證"
|
"twoFactorModalSetTitle" = "启用双重认证"
|
||||||
"twoFactorModalDeleteTitle" = "停用雙重認證"
|
"twoFactorModalDeleteTitle" = "停用双重认证"
|
||||||
"twoFactorModalSteps" = "要設定雙重認證,請執行以下步驟:"
|
"twoFactorModalSteps" = "要设定双重认证,请执行以下步骤:"
|
||||||
"twoFactorModalFirstStep" = "1. 在認證應用程式中掃描此QR碼,或複製QR碼附近的令牌並貼到應用程式中"
|
"twoFactorModalFirstStep" = "1. 在认证应用程序中扫描此QR码,或复制QR码附近的令牌并粘贴到应用程序中"
|
||||||
"twoFactorModalSecondStep" = "2. 輸入應用程式中的驗證碼"
|
"twoFactorModalSecondStep" = "2. 输入应用程序中的验证码"
|
||||||
"twoFactorModalRemoveStep" = "輸入應用程式中的驗證碼以移除雙重認證。"
|
"twoFactorModalRemoveStep" = "输入应用程序中的验证码以移除双重认证。"
|
||||||
"twoFactorModalSetSuccess" = "双因素认证已成功建立"
|
"twoFactorModalSetSuccess" = "双因素认证已成功建立"
|
||||||
"twoFactorModalDeleteSuccess" = "双因素认证已成功删除"
|
"twoFactorModalDeleteSuccess" = "双因素认证已成功删除"
|
||||||
"twoFactorModalError" = "驗證碼錯誤"
|
"twoFactorModalError" = "验证码错误"
|
||||||
|
|
||||||
[pages.settings.toasts]
|
[pages.settings.toasts]
|
||||||
"modifySettings" = "参数已更改。"
|
"modifySettings" = "参数已更改。"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
"edit" = "編輯"
|
"edit" = "編輯"
|
||||||
"delete" = "刪除"
|
"delete" = "刪除"
|
||||||
"reset" = "重置"
|
"reset" = "重置"
|
||||||
|
"noData" = "無數據。"
|
||||||
"copySuccess" = "複製成功"
|
"copySuccess" = "複製成功"
|
||||||
"sure" = "確定"
|
"sure" = "確定"
|
||||||
"encryption" = "加密"
|
"encryption" = "加密"
|
||||||
|
|
Loading…
Reference in a new issue