mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-04-19 21:42:24 +00:00
Minor UI fixes (#1405)
* Update translate.en_US.toml * Update stream_kcp.html * Update vless.html * Update shadowsocks.html * Update external_proxy.html * Update stream_sockopt.html * Update sniffing.html * Update tls_settings.html * Update dokodemo.html * Update shadowsocks.html * Update socks.html * Update stream_ws.html * Update tls_settings.html * Update index.html * Update translate.en_US.toml * Update translate.fa_IR.toml * Update translate.ru_RU.toml * Update translate.vi_VN.toml * Update translate.zh_Hans.toml * Update outbound.html * Update outbound.html * Update trojan.html * Update vless.html * Update stream_kcp.html * Update xray.html * Update stream_grpc.html * Update custom.css * Update stream_quic.html * Update custom.css * Update custom.css * Update custom.css * Update inbounds.html
This commit is contained in:
parent
78d3680ced
commit
69651ecfb5
23 changed files with 206 additions and 211 deletions
|
@ -18,6 +18,7 @@ body {
|
|||
html {
|
||||
--antd-wave-shadow-color: #008771;
|
||||
line-height: 1.15;
|
||||
text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-ms-overflow-style: scrollbar;
|
||||
|
@ -850,13 +851,17 @@ style attribute {
|
|||
.ant-menu,
|
||||
.ant-radio-button-wrapper {
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
.ant-calendar-date,
|
||||
.ant-calendar-year-panel-year,
|
||||
.ant-calendar-decade-panel-decade,
|
||||
.ant-calendar-month-panel-month {
|
||||
border-radius: 5px;
|
||||
.ant-calendar-month-panel-month,
|
||||
.ant-checkbox-inner,
|
||||
.ant-checkbox-checked:after,
|
||||
.ant-table-row-expand-icon {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.ant-calendar-date:hover {
|
||||
|
@ -1095,15 +1100,15 @@ li.ant-select-dropdown-menu-item:empty:after {
|
|||
background-color: #313f5a;
|
||||
}
|
||||
|
||||
.ant-select-dropdown,
|
||||
.ant-popover-inner {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.ant-popover-inner-content {
|
||||
max-height: 400px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.ant-table-row-expand-icon {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.qr-bg {
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
|
|
|
@ -160,25 +160,25 @@
|
|||
<a-form-item label='{{ i18n "password" }}'>
|
||||
<a-input v-model="outbound.stream.kcp.seed"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label='mtu'>
|
||||
<a-form-item label='MTU'>
|
||||
<a-input-number v-model.number="outbound.stream.kcp.mtu"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='tti (ms)'>
|
||||
<a-form-item label='TTI (ms)'>
|
||||
<a-input-number v-model.number="outbound.stream.kcp.tti"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='uplink capacity (MB/S)'>
|
||||
<a-form-item label='Uplink Capacity (MB/s)'>
|
||||
<a-input-number v-model.number="outbound.stream.kcp.upCap"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='downlink capacity (MB/S)'>
|
||||
<a-form-item label='Downlink Capacity (MB/s)'>
|
||||
<a-input-number v-model.number="outbound.stream.kcp.downCap"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='congestion'>
|
||||
<a-form-item label='Congestion'>
|
||||
<a-switch v-model="outbound.stream.kcp.congestion"></a-switch>
|
||||
</a-form-item>
|
||||
<a-form-item label='read buffer size (MB)'>
|
||||
<a-form-item label='Read Buffer Size (MB)'>
|
||||
<a-input-number v-model.number="outbound.stream.kcp.readBuffer"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='write buffer size (MB)'>
|
||||
<a-form-item label='Write Buffer Size (MB)'>
|
||||
<a-input-number v-model.number="outbound.stream.kcp.writeBuffer"></a-input-number>
|
||||
</a-form-item>
|
||||
</template>
|
||||
|
@ -217,22 +217,22 @@
|
|||
</a-form-item>
|
||||
<a-form-item label='{{ i18n "camouflage" }}'>
|
||||
<a-select v-model="outbound.stream.quic.type" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-select-option value="none">none (not camouflage)</a-select-option>
|
||||
<a-select-option value="srtp">srtp (video call)</a-select-option>
|
||||
<a-select-option value="utp">utp (BT download)</a-select-option>
|
||||
<a-select-option value="wechat-video">wechat-video (WeChat video)</a-select-option>
|
||||
<a-select-option value="dtls">dtls (DTLS 1.2 packages)</a-select-option>
|
||||
<a-select-option value="wireguard">wireguard (wireguard packages)</a-select-option>
|
||||
<a-select-option value="none">none (No Obfuscation)</a-select-option>
|
||||
<a-select-option value="srtp">SRTP (Video Call)</a-select-option>
|
||||
<a-select-option value="utp">uTP (Bittorrent)</a-select-option>
|
||||
<a-select-option value="wechat-video">WeChat Video</a-select-option>
|
||||
<a-select-option value="dtls">DTLS (DTLS 1.2 packages)</a-select-option>
|
||||
<a-select-option value="wireguard">WireGuard (WireGuard Packages)</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</template>
|
||||
|
||||
<!-- grpc -->
|
||||
<template v-if="outbound.stream.network === 'grpc'">
|
||||
<a-form-item label='serviceName'>
|
||||
<a-form-item label='Service Name'>
|
||||
<a-input v-model.trim="outbound.stream.grpc.serviceName"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label='MultiMode'>
|
||||
<a-form-item label='Multi Mode'>
|
||||
<a-switch v-model="outbound.stream.grpc.multiMode"></a-switch>
|
||||
</a-form-item>
|
||||
</template>
|
||||
|
@ -267,7 +267,7 @@
|
|||
<a-select-option v-for="alpn in ALPN_OPTION" :value="alpn">[[ alpn ]]</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="Allow insecure">
|
||||
<a-form-item label="Allow Insecure">
|
||||
<a-switch v-model="outbound.stream.tls.allowInsecure"></a-switch>
|
||||
</a-form-item>
|
||||
</template>
|
||||
|
@ -283,7 +283,7 @@
|
|||
<a-select-option v-for="key in UTLS_FINGERPRINT" :value="key">[[ key ]]</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="Short Id">
|
||||
<a-form-item label="Short IDs">
|
||||
<a-input v-model.trim="outbound.stream.reality.shortId" style="width:250px"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label="SpiderX">
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
</a-form-item>
|
||||
<a-form-item label='{{ i18n "pages.inbounds.network"}}'>
|
||||
<a-select v-model="inbound.settings.network" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-select-option value="tcp,udp">TCP+UDP</a-select-option>
|
||||
<a-select-option value="tcp,udp">TCP,UDP</a-select-option>
|
||||
<a-select-option value="tcp">TCP</a-select-option>
|
||||
<a-select-option value="udp">UDP</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label='FollowRedirect'>
|
||||
<a-form-item label='Follow Redirect'>
|
||||
<a-switch v-model="inbound.settings.followRedirect"></a-switch>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
|
|
@ -20,38 +20,28 @@
|
|||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</template>
|
||||
<table width="100%" class="ant-table-tbody">
|
||||
<tr>
|
||||
<td>{{ i18n "encryption" }}</td>
|
||||
<td>
|
||||
<a-form-item>
|
||||
<a-select v-model="inbound.settings.method" style="width: 250px;" @change="SSMethodChange" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-form :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-form-item label='{{ i18n "encryption" }}'>
|
||||
<a-select v-model="inbound.settings.method" @change="SSMethodChange" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-select-option v-for="method in SSMethods" :value="method">[[ method ]]</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="inbound.isSS2022">
|
||||
<td>{{ i18n "password" }}
|
||||
<a-icon @click="inbound.settings.password = RandomUtil.randomShadowsocksPassword()" type="sync"> </a-icon>
|
||||
</td>
|
||||
<td>
|
||||
<a-form-item>
|
||||
<a-input v-model.trim="inbound.settings.password" style="width: 250px"></a-input>
|
||||
<a-form-item v-if="inbound.isSS2022">
|
||||
<template slot="label">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
<span>{{ i18n "password" }}</span>
|
||||
</template> Password <a-icon @click="inbound.settings.password = RandomUtil.randomShadowsocksPassword()" type="sync"></a-icon>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
<a-input v-model.trim="inbound.settings.password"></a-input>
|
||||
</a-form-item>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ i18n "pages.inbounds.network" }}</td>
|
||||
<td>
|
||||
<a-form-item>
|
||||
<a-form-item label='{{ i18n "pages.inbounds.network" }}'>
|
||||
<a-select v-model="inbound.settings.network" style="width: 100px;" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-select-option value="tcp,udp">tcp+udp</a-select-option>
|
||||
<a-select-option value="tcp">tcp</a-select-option>
|
||||
<a-select-option value="udp">udp</a-select-option>
|
||||
<a-select-option value="tcp,udp">TCP,UDP</a-select-option>
|
||||
<a-select-option value="tcp">TCP</a-select-option>
|
||||
<a-select-option value="udp">UDP</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</a-form>
|
||||
{{end}}
|
|
@ -1,6 +1,6 @@
|
|||
{{define "form/socks"}}
|
||||
<a-form :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-form-item label='{{ i18n "pages.inbounds.enable" }} udp'>
|
||||
<a-form-item label='{{ i18n "pages.inbounds.enable" }} UDP'>
|
||||
<a-switch v-model="inbound.settings.udp"></a-switch>
|
||||
</a-form-item>
|
||||
<a-form-item label="IP" v-if="inbound.settings.udp">
|
||||
|
|
|
@ -33,14 +33,14 @@
|
|||
<!-- trojan fallbacks -->
|
||||
<a-form v-for="(fallback, index) in inbound.settings.fallbacks" :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-divider style="margin:0;">
|
||||
Fallback[[ index + 1 ]]
|
||||
Fallback [[ index + 1 ]]
|
||||
<a-icon type="delete" @click="() => inbound.settings.delFallback(index)"
|
||||
style="color: rgb(255, 77, 79);cursor: pointer;"/>
|
||||
</a-divider>
|
||||
<a-form-item label='Name'>
|
||||
<a-input v-model="fallback.name"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label='Alpn'>
|
||||
<a-form-item label='ALPN'>
|
||||
<a-input v-model="fallback.alpn"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label='Path'>
|
||||
|
|
|
@ -35,14 +35,14 @@
|
|||
<!-- vless fallbacks -->
|
||||
<a-form v-for="(fallback, index) in inbound.settings.fallbacks" :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-divider style="margin:0;">
|
||||
Fallback[[ index + 1 ]]
|
||||
Fallback [[ index + 1 ]]
|
||||
<a-icon type="delete" @click="() => inbound.settings.delFallback(index)"
|
||||
style="color: rgb(255, 77, 79);cursor: pointer;"/>
|
||||
</a-divider>
|
||||
<a-form-item label='Name'>
|
||||
<a-input v-model="fallback.name"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label='Alpn'>
|
||||
<a-form-item label='ALPN'>
|
||||
<a-input v-model="fallback.alpn"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label='Path'>
|
||||
|
@ -55,6 +55,6 @@
|
|||
<a-input-number v-model="fallback.xver" :min="0" :max="2"></a-input-number>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
<a-divider style="margin:0;"></a-divider>
|
||||
<a-divider style="margin:5px 0;"></a-divider>
|
||||
</template>
|
||||
{{end}}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{{define "form/sniffing"}}
|
||||
<a-divider style="margin:0;"></a-divider>
|
||||
<a-divider style="margin:5px 0 0;"></a-divider>
|
||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-form-item>
|
||||
<span slot="label">
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{{define "form/externalProxy"}}
|
||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-divider style="margin:0;"></a-divider>
|
||||
<a-divider style="margin:5px 0 0;"></a-divider>
|
||||
<a-form-item label="External Proxy">
|
||||
<a-switch v-model="externalProxy"></a-switch>
|
||||
<a-button v-if="externalProxy" type="primary" style="margin-left: 10px" size="small" @click="inbound.stream.externalProxy.push({forceTls: 'same', dest: '', port: 443, remark: ''})">+</a-button>
|
||||
</a-form-item>
|
||||
<a-input-group style="margin: 5px 0;" compact v-for="(row, index) in inbound.stream.externalProxy">
|
||||
<a-input-group style="margin: 8px 0;" compact v-for="(row, index) in inbound.stream.externalProxy">
|
||||
<template>
|
||||
<a-tooltip title="Force TLS">
|
||||
<a-select v-model="row.forceTls" style="width:20%; margin: 0px" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<a-form-item label="Service Name">
|
||||
<a-input v-model.trim="inbound.stream.grpc.serviceName"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label="MultiMode">
|
||||
<a-form-item label="Multi Mode">
|
||||
<a-switch v-model="inbound.stream.grpc.multiMode"></a-switch>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<a-form :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-form-item label='{{ i18n "camouflage" }}'>
|
||||
<a-select v-model="inbound.stream.kcp.type" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-select-option value="none">none (not camouflage)</a-select-option>
|
||||
<a-select-option value="srtp">SRTP (video call)</a-select-option>
|
||||
<a-select-option value="utp">UTP (BT DownloaD)</a-select-option>
|
||||
<a-select-option value="wechat-video">wechat-video (WeChat video)</a-select-option>
|
||||
<a-select-option value="none">none (No Obfuscation)</a-select-option>
|
||||
<a-select-option value="srtp">SRTP (Video Call)</a-select-option>
|
||||
<a-select-option value="utp">uTP (Bittorrent)</a-select-option>
|
||||
<a-select-option value="wechat-video">WeChat Video</a-select-option>
|
||||
<a-select-option value="dtls">DTLS (DTLS 1.2 packages)</a-select-option>
|
||||
<a-select-option value="wireguard">WireGuard (WireGuard packages)</a-select-option>
|
||||
</a-select>
|
||||
|
@ -16,22 +16,22 @@
|
|||
<a-form-item label='MTU'>
|
||||
<a-input-number v-model.number="inbound.stream.kcp.mtu"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='TTI(ms)'>
|
||||
<a-form-item label='TTI (ms)'>
|
||||
<a-input-number v-model.number="inbound.stream.kcp.tti"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='Uplink(Mb/s)'>
|
||||
<a-form-item label='Uplink (MB/s)'>
|
||||
<a-input-number v-model.number="inbound.stream.kcp.upCap"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='Downlink(Mb/s)'>
|
||||
<a-form-item label='Downlink (MB/s)'>
|
||||
<a-input-number v-model.number="inbound.stream.kcp.downCap"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='Congestion'>
|
||||
<a-switch v-model="inbound.stream.kcp.congestion"></a-switch>
|
||||
</a-form-item>
|
||||
<a-form-item label='Read buffer(MB)'>
|
||||
<a-form-item label='Read Buffer (MB)'>
|
||||
<a-input-number v-model.number="inbound.stream.kcp.readBuffer"></a-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label='Write buffer(MB)'>
|
||||
<a-form-item label='Write Buffer (MB)'>
|
||||
<a-input-number v-model.number="inbound.stream.kcp.writeBuffer"></a-input-number>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
</a-form-item>
|
||||
<a-form-item label='{{ i18n "camouflage" }}'>
|
||||
<a-select v-model="inbound.stream.quic.type" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||
<a-select-option value="none">none (not camouflage)</a-select-option>
|
||||
<a-select-option value="srtp">SRTP (video call)</a-select-option>
|
||||
<a-select-option value="utp">UTP (BT Download)</a-select-option>
|
||||
<a-select-option value="wechat-video">wechat-video (WeChat video)</a-select-option>
|
||||
<a-select-option value="none">none (No Obfuscation)</a-select-option>
|
||||
<a-select-option value="srtp">SRTP (Video Call)</a-select-option>
|
||||
<a-select-option value="utp">uTP (Bittorrent)</a-select-option>
|
||||
<a-select-option value="wechat-video">WeChat Video</a-select-option>
|
||||
<a-select-option value="dtls">DTLS (DTLS 1.2 packages)</a-select-option>
|
||||
<a-select-option value="wireguard">WireGuard (WireGuard Packages)</a-select-option>
|
||||
</a-select>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{{define "form/streamSockopt"}}
|
||||
<a-divider style="margin:0;"></a-divider>
|
||||
<a-divider style="margin:5px 0 0;"></a-divider>
|
||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-form-item label="Transparent Proxy">
|
||||
<a-switch v-model="inbound.stream.sockoptSwitch"></a-switch>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{{define "form/streamWS"}}
|
||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-form-item label="AcceptProxyProtocol">
|
||||
<a-form-item label="Accept Proxy Protocol">
|
||||
<a-switch v-model="inbound.stream.ws.acceptProxyProtocol"></a-switch>
|
||||
</a-form-item>
|
||||
<a-form-item label='{{ i18n "path" }}'>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{{define "form/tlsSettings"}}
|
||||
<!-- tls enable -->
|
||||
<a-form v-if="inbound.canEnableTls()" :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||
<a-divider style="margin:0;"></a-divider>
|
||||
<a-divider style="margin:3px 0;"></a-divider>
|
||||
<a-form-item label='{{ i18n "security" }}'>
|
||||
<a-radio-group v-model="inbound.stream.security" button-style="solid">
|
||||
<a-radio-button value="none">{{ i18n "none" }}</a-radio-button>
|
||||
|
@ -55,7 +55,7 @@
|
|||
<a-select-option v-for="alpn in ALPN_OPTION" :value="alpn">[[ alpn ]]</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="Allow insecure">
|
||||
<a-form-item label="Allow Insecure">
|
||||
<a-switch v-model="inbound.stream.tls.settings.allowInsecure"></a-switch>
|
||||
</a-form-item>
|
||||
<a-form-item label="Reject Unknown SNI">
|
||||
|
@ -109,7 +109,7 @@
|
|||
<a-select-option v-for="alpn in ALPN_OPTION" :value="alpn">[[ alpn ]]</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="Allow insecure">
|
||||
<a-form-item label="Allow Insecure">
|
||||
<a-switch v-model="inbound.stream.xtls.settings.allowInsecure"></a-switch>
|
||||
</a-form-item>
|
||||
<template v-for="cert,index in inbound.stream.xtls.certs">
|
||||
|
@ -171,7 +171,7 @@
|
|||
<template slot="title">
|
||||
<span>{{ i18n "pages.client.renew" }}</span>
|
||||
</template>
|
||||
Short Ids
|
||||
Short IDs
|
||||
<a-icon @click="inbound.stream.reality.shortIds = RandomUtil.randomShortId()" type="sync"> </a-icon>
|
||||
</a-icon>
|
||||
</template>
|
||||
|
|
|
@ -161,9 +161,9 @@
|
|||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center; justify-content: flex-start;">
|
||||
<div :style="isMobile ? '' : 'display: flex; align-items: center; justify-content: flex-start;'">
|
||||
<a-switch v-model="enableFilter"
|
||||
style="margin-right: .5rem;"
|
||||
:style="(isMobile ? 'margin' : 'margin-right') + ': .5rem;'"
|
||||
@change="toggleFilter">
|
||||
<a-icon slot="checkedChildren" type="search"></a-icon>
|
||||
<a-icon slot="unCheckedChildren" type="filter"></a-icon>
|
||||
|
|
|
@ -132,7 +132,7 @@
|
|||
<a-col :sm="24" :md="12">
|
||||
<a-card hoverable>
|
||||
{{ i18n "usage"}}:
|
||||
Memory [[ sizeFormat(status.appStats.mem) ]] -
|
||||
RAM [[ sizeFormat(status.appStats.mem) ]] -
|
||||
Threads [[ status.appStats.threads ]]
|
||||
</a-tooltip>
|
||||
</a-card>
|
||||
|
@ -190,7 +190,7 @@
|
|||
<a-row>
|
||||
<a-col :span="12">
|
||||
<a-icon type="arrow-up"></a-icon>
|
||||
[[ sizeFormat(status.netIO.up) ]]/S
|
||||
[[ sizeFormat(status.netIO.up) ]]/s
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ i18n "pages.index.upSpeed" }}
|
||||
|
@ -200,7 +200,7 @@
|
|||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-icon type="arrow-down"></a-icon>
|
||||
[[ sizeFormat(status.netIO.down) ]]/S
|
||||
[[ sizeFormat(status.netIO.down) ]]/s
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ i18n "pages.index.downSpeed" }}
|
||||
|
|
|
@ -438,7 +438,7 @@
|
|||
{ title: 'Port', dataIndex: 'port', align: 'center', width: 10, ellipsis: true }]},
|
||||
{ title: '{{ i18n "pages.xray.rules.inbound"}}', children: [
|
||||
{ title: 'Inbound Tag', dataIndex: 'inboundTag', align: 'center', width: 20, ellipsis: true },
|
||||
{ title: 'User email', dataIndex: 'user', align: 'center', width: 20, ellipsis: true }]},
|
||||
{ title: 'Client Email', dataIndex: 'user', align: 'center', width: 20, ellipsis: true }]},
|
||||
{ title: '{{ i18n "pages.xray.rules.outbound"}}', dataIndex: 'outboundTag', align: 'center', width: 20 },
|
||||
];
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"edit" = "Edit"
|
||||
"delete" = "Delete"
|
||||
"reset" = "Reset"
|
||||
"copySuccess" = "Copied successfully"
|
||||
"copySuccess" = "Copied Successfully"
|
||||
"sure" = "Sure"
|
||||
"encryption" = "Encryption"
|
||||
"transmission" = "Transmission"
|
||||
|
@ -40,12 +40,12 @@
|
|||
"depletingSoon" = "Depleting"
|
||||
"offline" = "Offline"
|
||||
"online" = "Online"
|
||||
"domainName" = "Domain name"
|
||||
"domainName" = "Domain Name"
|
||||
"monitor" = "Listening IP"
|
||||
"certificate" = "Certificate"
|
||||
"fail" = "Fail"
|
||||
"success" = "Success"
|
||||
"getVersion" = "Get version"
|
||||
"getVersion" = "Get Version"
|
||||
"install" = "Install"
|
||||
"clients" = "Clients"
|
||||
"usage" = "Usage"
|
||||
|
@ -59,11 +59,11 @@
|
|||
"settings" = "Panel Settings"
|
||||
"xray" = "Xray Settings"
|
||||
"logout" = "Logout"
|
||||
"link" = "Other"
|
||||
"link" = "Management"
|
||||
|
||||
[pages.login]
|
||||
"title" = "Login"
|
||||
"loginAgain" = "The login time limit has expired. Please log in again."
|
||||
"loginAgain" = "Your session has expired, please log in again"
|
||||
|
||||
[pages.login.toasts]
|
||||
"invalidFormData" = "Input data format is invalid."
|
||||
|
@ -74,8 +74,8 @@
|
|||
|
||||
[pages.index]
|
||||
"title" = "System Status"
|
||||
"memory" = "Memory"
|
||||
"hard" = "Hard Disk"
|
||||
"memory" = "RAM"
|
||||
"hard" = "Disk"
|
||||
"xrayStatus" = "Status"
|
||||
"stopXray" = "Stop"
|
||||
"restartXray" = "Restart"
|
||||
|
@ -85,21 +85,21 @@
|
|||
"operationHours" = "Uptime"
|
||||
"systemLoad" = "System Load"
|
||||
"systemLoadDesc" = "system load average for the past 1, 5, and 15 minutes"
|
||||
"connectionTcpCountDesc" = "Total TCP connections across all network cards."
|
||||
"connectionUdpCountDesc" = "Total UDP connections across all network cards."
|
||||
"connectionTcpCountDesc" = "Total TCP connections across all network cards"
|
||||
"connectionUdpCountDesc" = "Total UDP connections across all network cards"
|
||||
"connectionCount" = "Number of Connections"
|
||||
"upSpeed" = "Total upload speed for all network cards."
|
||||
"downSpeed" = "Total download speed for all network cards."
|
||||
"totalSent" = "Total upload traffic of all network cards since system startup."
|
||||
"totalReceive" = "Total download data across all network cards since system startup."
|
||||
"upSpeed" = "Total upload speed for all network cards"
|
||||
"downSpeed" = "Total download speed for all network cards"
|
||||
"totalSent" = "Total upload data across all network cards since OS startup"
|
||||
"totalReceive" = "Total download data across all network cards since OS startup"
|
||||
"xraySwitchVersionDialog" = "Switch Xray Version"
|
||||
"xraySwitchVersionDialogDesc" = "Are you sure you want to switch the Xray version to"
|
||||
"dontRefresh" = "Installation is in progress, please do not refresh this page."
|
||||
"dontRefresh" = "Installation is in progress, please do not refresh this page"
|
||||
"logs" = "Logs"
|
||||
"config" = "Config"
|
||||
"backup" = "Backup & Restore"
|
||||
"backupTitle" = "Backup & Restore Database"
|
||||
"backupDescription" = "Remember to backup before importing a new database."
|
||||
"backupDescription" = "It is recommended to backup before importing a new database."
|
||||
"exportDatabase" = "Download Database"
|
||||
"importDatabase" = "Upload Database"
|
||||
|
||||
|
@ -134,7 +134,7 @@
|
|||
"destinationPort" = "Destination Port"
|
||||
"targetAddress" = "Target Address"
|
||||
"monitorDesc" = "Leave blank by default"
|
||||
"meansNoLimit" = "Means No Limit"
|
||||
"meansNoLimit" = "Means no limit"
|
||||
"totalFlow" = "Total Flow"
|
||||
"leaveBlankToNeverExpire" = "Leave Blank to Never Expire"
|
||||
"noRecommendKeepDefault" = "No special requirements to maintain default settings"
|
||||
|
@ -152,16 +152,16 @@
|
|||
"cloneInboundContent" = "All settings of this inbound, except for Port, Listening IP, and Clients, will be applied to the clone."
|
||||
"cloneInboundOk" = "Clone"
|
||||
"resetAllTraffic" = "Reset All Inbounds Traffic"
|
||||
"resetAllTrafficTitle" = "Reset all inbounds traffic"
|
||||
"resetAllTrafficTitle" = "Reset All Inbounds Traffic"
|
||||
"resetAllTrafficContent" = "Are you sure you want to reset all inbounds traffic?"
|
||||
"resetInboundClientTraffics" = "Reset Clients Traffic"
|
||||
"resetInboundClientTrafficTitle" = "Reset all client traffic"
|
||||
"resetInboundClientTrafficTitle" = "Reset Clients Traffic"
|
||||
"resetInboundClientTrafficContent" = "Are you sure you want to reset all traffic for this inbound's clients?"
|
||||
"resetAllClientTraffics" = "Reset All Clients Traffic"
|
||||
"resetAllClientTrafficTitle" = "Reset all clients traffic"
|
||||
"resetAllClientTrafficContent" = "Are you sure you want to reset all traffics for all clients?"
|
||||
"delDepletedClients" = "Delete Depleted Clients"
|
||||
"delDepletedClientsTitle" = "Delete depleted clients"
|
||||
"delDepletedClientsTitle" = "Delete Depleted Clients"
|
||||
"delDepletedClientsContent" = "Are you sure you want to delete all depleted clients?"
|
||||
"email" = "Email"
|
||||
"emailDesc" = "Please provide a unique email address."
|
||||
|
@ -170,23 +170,23 @@
|
|||
"IPLimitlog" = "IP Log"
|
||||
"IPLimitlogDesc" = "IPs history log (before enabling inbound after it has been disabled by IP limit, you should clear the log)."
|
||||
"IPLimitlogclear" = "Clear The Log"
|
||||
"setDefaultCert" = "Set cert from panel"
|
||||
"setDefaultCert" = "Set Cert from Panel"
|
||||
"xtlsDesc" = "Xray core needs to be 1.7.5"
|
||||
"realityDesc" = "Xray core needs to be 1.8.0 or higher."
|
||||
"telegramDesc" = "use Telegram ID without @ or chat IDs ( you can get it here @userinfobot or use '/id' command in bot )"
|
||||
"subscriptionDesc" = "you can find your sub link on Details, also you can use the same name for several configurations"
|
||||
"info" = "Info"
|
||||
"same" = "Same"
|
||||
"inboundData" = "Inbound's data"
|
||||
"copyToClipboard" = "Copy to clipboard"
|
||||
"inboundData" = "Inbound's Data"
|
||||
"copyToClipboard" = "Copy to Clipboard"
|
||||
"import" = "Import"
|
||||
"importInbound" = "Import an inbound"
|
||||
"importInbound" = "Import an Inbound"
|
||||
|
||||
[pages.client]
|
||||
"add" = "Add Client"
|
||||
"edit" = "Edit Client"
|
||||
"submitAdd" = "Add Client"
|
||||
"submitEdit" = "Save changes"
|
||||
"submitEdit" = "Save Changes"
|
||||
"clientCount" = "Number of Clients"
|
||||
"bulk" = "Add Bulk"
|
||||
"method" = "Method"
|
||||
|
@ -194,28 +194,28 @@
|
|||
"last" = "Last"
|
||||
"prefix" = "Prefix"
|
||||
"postfix" = "Postfix"
|
||||
"delayedStart" = "Start after first use"
|
||||
"expireDays" = "Expire days"
|
||||
"days" = "day(s)"
|
||||
"renew" = "Auto renew"
|
||||
"delayedStart" = "Start After First Use"
|
||||
"expireDays" = "Expire Days"
|
||||
"days" = "Day(s)"
|
||||
"renew" = "Auto Renew"
|
||||
"renewDesc" = "Auto renew days after expiration. 0 = disable"
|
||||
|
||||
[pages.inbounds.toasts]
|
||||
"obtain" = "Obtain"
|
||||
|
||||
[pages.inbounds.stream.general]
|
||||
"requestHeader" = "Request header"
|
||||
"requestHeader" = "Request Header"
|
||||
"name" = "Name"
|
||||
"value" = "Value"
|
||||
|
||||
[pages.inbounds.stream.tcp]
|
||||
"requestVersion" = "Request version"
|
||||
"requestMethod" = "Request method"
|
||||
"requestPath" = "Request path"
|
||||
"responseVersion" = "Response version"
|
||||
"responseStatus" = "Response status"
|
||||
"responseStatusDescription" = "Response status description"
|
||||
"responseHeader" = "Response header"
|
||||
"requestVersion" = "Request Version"
|
||||
"requestMethod" = "Request Method"
|
||||
"requestPath" = "Request Path"
|
||||
"responseVersion" = "Response Version"
|
||||
"responseStatus" = "Response Status"
|
||||
"responseStatusDescription" = "Response Status Description"
|
||||
"responseHeader" = "Response Header"
|
||||
|
||||
[pages.inbounds.stream.quic]
|
||||
"encryption" = "Encryption"
|
||||
|
@ -224,8 +224,8 @@
|
|||
"title" = "Settings"
|
||||
"save" = "Save"
|
||||
"infoDesc" = "Every change made here needs to be saved. Please restart the panel to apply changes."
|
||||
"restartPanel" = "Restart Panel "
|
||||
"restartPanelDesc" = "Are you sure you want to restart the panel? Click OK to restart after 3 seconds. If you cannot access the panel after restarting, please view the panel log information on the server."
|
||||
"restartPanel" = "Restart Panel"
|
||||
"restartPanelDesc" = "Are you sure you want to restart the panel? click OK to restart after 3 seconds. If you cannot access the panel after restarting, please view the panel log info on the server."
|
||||
"actions" = "Actions"
|
||||
"resetDefaultConfig" = "Reset to Default Configuration"
|
||||
"panelSettings" = "Panel Settings"
|
||||
|
@ -234,68 +234,68 @@
|
|||
"panelListeningIP" = "Panel Listening IP"
|
||||
"panelListeningIPDesc" = "Leave blank by default to monitor all IPs."
|
||||
"panelListeningDomain" = "Panel Listening Domain"
|
||||
"panelListeningDomainDesc" = "Leave blank by default to monitor all domains and IPs"
|
||||
"panelListeningDomainDesc" = "Leave blank by default to monitor all domains and IPs."
|
||||
"panelPort" = "Panel Port"
|
||||
"panelPortDesc" = "The port used to display this panel"
|
||||
"publicKeyPath" = "Panel Certificate Public Key File Path"
|
||||
"panelPortDesc" = "Port number for serving the panel."
|
||||
"publicKeyPath" = "Panel Certificate Public Key Path"
|
||||
"publicKeyPathDesc" = "Fill in an absolute path starting with."
|
||||
"privateKeyPath" = "Panel Certificate Private Key File Path"
|
||||
"privateKeyPath" = "Panel Certificate Private Key Path"
|
||||
"privateKeyPathDesc" = "Fill in an absolute path starting with."
|
||||
"panelUrlPath" = "Panel URL Root Path"
|
||||
"panelUrlPathDesc" = "Must start with '/' and end with."
|
||||
"pageSize" = "Pagination size"
|
||||
"pageSize" = "Pagination Size"
|
||||
"pageSizeDesc" = "Define page size for inbounds table. Set 0 to disable"
|
||||
"remarkModel" = "Remark Model and Seperation charachter"
|
||||
"sampleRemark" = "Sample remark"
|
||||
"remarkModel" = "Remark Model and Seperation Charachter"
|
||||
"sampleRemark" = "Sample Remark"
|
||||
"oldUsername" = "Current Username"
|
||||
"currentPassword" = "Current Password"
|
||||
"newUsername" = "New Username"
|
||||
"newPassword" = "New Password"
|
||||
"telegramBotEnable" = "Enable Telegram bot"
|
||||
"telegramBotEnableDesc" = "Connect to the features of this panel through the Telegram bot"
|
||||
"telegramBotEnable" = "Enable Telegram Bot"
|
||||
"telegramBotEnableDesc" = "Connect to the features of this panel through the Telegram bot."
|
||||
"telegramToken" = "Telegram Token"
|
||||
"telegramTokenDesc" = "You must get the token from the manager of Telegram bots @botfather"
|
||||
"telegramTokenDesc" = "The token you have got from @BotFather."
|
||||
"telegramChatId" = "Telegram Admin Chat IDs"
|
||||
"telegramChatIdDesc" = "Multiple Chat IDs separated by comma. use @userinfobot or use '/id' command in bot to get your Chat IDs."
|
||||
"telegramChatIdDesc" = "Multiple chat IDs separated by comma. use @userinfobot or use '/id' command in bot to get your Chat IDs."
|
||||
"telegramNotifyTime" = "Telegram bot notification time"
|
||||
"telegramNotifyTimeDesc" = "Use Crontab timing format."
|
||||
"telegramNotifyTimeDesc" = "Use crontab timing format."
|
||||
"tgNotifyBackup" = "Database Backup"
|
||||
"tgNotifyBackupDesc" = "Include database backup file with report notification."
|
||||
"tgNotifyLogin" = "Login Notification"
|
||||
"tgNotifyLoginDesc" = "Displays the username, IP address, and time when someone tries to log into your panel."
|
||||
"sessionMaxAge" = "Session maximum age"
|
||||
"sessionMaxAgeDesc" = "The duration of a login session (unit: minute)"
|
||||
"expireTimeDiff" = "Expiration threshold for notification"
|
||||
"expireTimeDiffDesc" = "Get notified about account expiration before the threshold (unit: day)"
|
||||
"trafficDiff" = "Traffic threshold for notification"
|
||||
"trafficDiffDesc" = "Get notified about traffic exhaustion before reaching the threshold (unit: GB)"
|
||||
"tgNotifyCpu" = "CPU percentage alert threshold"
|
||||
"tgNotifyCpuDesc" = "Receive notification if CPU usage exceeds this threshold (unit: %)"
|
||||
"sessionMaxAge" = "Session Duration"
|
||||
"sessionMaxAgeDesc" = "The duration of a login session. (unit: minute)"
|
||||
"expireTimeDiff" = "Client Expiration Threshold Notification"
|
||||
"expireTimeDiffDesc" = "Get notified about client expiration before the threshold. (unit: day)"
|
||||
"trafficDiff" = "Traffic Limit Threshold Notification"
|
||||
"trafficDiffDesc" = "Get notified about traffic exhaustion before reaching the threshold. (unit: GB)"
|
||||
"tgNotifyCpu" = "CPU Load Threshold Notification"
|
||||
"tgNotifyCpuDesc" = "Get notified if CPU usage exceeds this threshold. (unit: %)"
|
||||
"timeZone" = "Time zone"
|
||||
"timeZoneDesc" = "Scheduled tasks run according to the time in this time zone."
|
||||
"subSettings" = "Subscription"
|
||||
"subEnable" = "Enable service"
|
||||
"subEnableDesc" = "Subscription feature with separate configuration"
|
||||
"subEnable" = "Enable Service"
|
||||
"subEnableDesc" = "Subscription feature with separate configuration."
|
||||
"subListen" = "Listening IP"
|
||||
"subListenDesc" = "Leave blank by default to monitor all IPs"
|
||||
"subListenDesc" = "Leave blank by default to monitor all IPs."
|
||||
"subPort" = "Subscription Port"
|
||||
"subPortDesc" = "Port number for serving the subscription service must be unused in server"
|
||||
"subCertPath" = "Subscription Certificate Public Key File Path"
|
||||
"subPortDesc" = "Port number for serving the subscription service. Must be unused in server."
|
||||
"subCertPath" = "Subscription Certificate Public Key Path"
|
||||
"subCertPathDesc" = "Fill in an absolute path starting with '/'"
|
||||
"subKeyPath" = "Subscription Certificate Private Key File Path"
|
||||
"subKeyPath" = "Subscription Certificate Private Key Path"
|
||||
"subKeyPathDesc" = "Fill in an absolute path starting with '/'"
|
||||
"subPath" = "Subscription URL Root Path"
|
||||
"subPathDesc" = "Must start with '/' and end with '/'"
|
||||
"subDomain" = "Listening Domain"
|
||||
"subDomainDesc" = "Leave blank by default to monitor all domains and IPs"
|
||||
"subDomainDesc" = "Leave blank by default to monitor all domains and IPs."
|
||||
"subUpdates" = "Subscription update intervals"
|
||||
"subUpdatesDesc" = "Interval hours between updates in client application"
|
||||
"subEncrypt" = "Encrypt configs"
|
||||
"subEncryptDesc" = "Encrypt the returned configs in subscription"
|
||||
"subShowInfo" = "Show usage info"
|
||||
"subShowInfoDesc" = "Show remained traffic and date after config name"
|
||||
"subUpdatesDesc" = "Interval hours between updates in client application."
|
||||
"subEncrypt" = "Encode Configs"
|
||||
"subEncryptDesc" = "Encode the returned configs in subscription."
|
||||
"subShowInfo" = "Show Usage Info"
|
||||
"subShowInfoDesc" = "Show remained traffic and date after config name."
|
||||
"subURI" = "Reverse Proxy URI"
|
||||
"subURIDesc" = "Change base URI of subscription URL for using on behind of proxies"
|
||||
"subURIDesc" = "Change base URI of subscription URL for using on behind of proxies."
|
||||
|
||||
[pages.xray]
|
||||
"title" = "Xray Settings"
|
||||
|
@ -321,9 +321,9 @@
|
|||
"FreedomStrategyDesc" = "Set the output strategy of the network in the Freedom Protocol."
|
||||
"RoutingStrategy" = "Configure Domains Routing Strategy"
|
||||
"RoutingStrategyDesc" = "Set the overall routing strategy for DNS resolving."
|
||||
"Torrent" = "Ban BitTorrent Usage"
|
||||
"TorrentDesc" = "Change the configuration template to avoid using BitTorrent by users."
|
||||
"PrivateIp" = "Ban Private IP Ranges to Connect"
|
||||
"Torrent" = "Ban BitTorrent Protocol"
|
||||
"TorrentDesc" = "Change the configuration template to avoid using BitTorrent protocol."
|
||||
"PrivateIp" = "Ban Private IPs to Connect"
|
||||
"PrivateIpDesc" = "Change the configuration template to avoid connecting to private IP ranges."
|
||||
"Ads" = "Block Ads"
|
||||
"AdsDesc" = "Change the configuration template to block ads."
|
||||
|
@ -331,29 +331,29 @@
|
|||
"FamilyDesc" = "DNS resolvers to block malware and adult content for family protection."
|
||||
"Speedtest" = "Block Speedtest Websites"
|
||||
"SpeedtestDesc" = "Change the configuration template to avoid connecting to speedtest websites."
|
||||
"IRIp" = "Disable connection to Iran IP ranges"
|
||||
"IRIp" = "Disable Connection to Iran IPs"
|
||||
"IRIpDesc" = "Change the configuration template to avoid connecting to Iran IP ranges."
|
||||
"IRDomain" = "Disable connection to Iran domains"
|
||||
"IRDomain" = "Disable Connection to Iran Domains"
|
||||
"IRDomainDesc" = "Change the configuration template to avoid connecting to Iran domains."
|
||||
"ChinaIp" = "Disable connection to China IP ranges"
|
||||
"ChinaIp" = "Disable Connection to China IPs"
|
||||
"ChinaIpDesc" = "Change the configuration template to avoid connecting to China IP ranges."
|
||||
"ChinaDomain" = "Disable connection to China domains"
|
||||
"ChinaDomain" = "Disable Connection to China Domains"
|
||||
"ChinaDomainDesc" = "Change the configuration template to avoid connecting to China domains."
|
||||
"RussiaIp" = "Disable connection to Russia IP ranges"
|
||||
"RussiaIp" = "Disable Connection to Russia IPs"
|
||||
"RussiaIpDesc" = "Change the configuration template to avoid connecting to Russia IP ranges."
|
||||
"RussiaDomain" = "Disable connection to Russia domains"
|
||||
"RussiaDomain" = "Disable Connection to Russia Domains"
|
||||
"RussiaDomainDesc" = "Change the configuration template to avoid connecting to Russia domains."
|
||||
"DirectIRIp" = "Direct connection to Iran IP ranges"
|
||||
"DirectIRIp" = "Direct Connection to Iran IPs"
|
||||
"DirectIRIpDesc" = "Change the configuration template for direct connecting to Iran IP ranges."
|
||||
"DirectIRDomain" = "Direct connection to Iran domains"
|
||||
"DirectIRDomain" = "Direct Connection to Iran Domains"
|
||||
"DirectIRDomainDesc" = "Change the configuration template for direct connecting to Iran domains."
|
||||
"DirectChinaIp" = "Direct connection to China IP ranges"
|
||||
"DirectChinaIp" = "Direct Connection to China IPs"
|
||||
"DirectChinaIpDesc" = "Change the configuration template for direct connecting to China IP ranges."
|
||||
"DirectChinaDomain" = "Direct connection to China domains"
|
||||
"DirectChinaDomain" = "Direct Connection to China Domains"
|
||||
"DirectChinaDomainDesc" = "Change the configuration template for direct connecting to China domains."
|
||||
"DirectRussiaIp" = "Direct connection to Russia IP ranges"
|
||||
"DirectRussiaIp" = "Direct Connection to Russia IPs"
|
||||
"DirectRussiaIpDesc" = "Change the configuration template for direct connecting to Russia IP ranges."
|
||||
"DirectRussiaDomain" = "Direct connection to Russia domains"
|
||||
"DirectRussiaDomain" = "Direct Connection to Russia Domains"
|
||||
"DirectRussiaDomainDesc" = "Change the configuration template for direct connecting to Russia domains."
|
||||
"GoogleIPv4" = "Use IPv4 for Google"
|
||||
"GoogleIPv4Desc" = "Add routing for Google to connect with IPv4."
|
||||
|
@ -373,7 +373,7 @@
|
|||
"InboundsDesc" = "Change the configuration template to accept specific clients."
|
||||
"Outbounds" = "Outbounds"
|
||||
"OutboundsDesc" = "Change the configuration template to define outgoing ways for this server."
|
||||
"Routings" = "routing rules."
|
||||
"Routings" = "Routing Rules"
|
||||
"RoutingsDesc" = "The priority of each rule is important!"
|
||||
"completeTemplate" = "All"
|
||||
|
||||
|
@ -392,12 +392,12 @@
|
|||
"useComma" = "Comma separated items"
|
||||
|
||||
[pages.xray.outbound]
|
||||
"addOutbound" = "Add outbound"
|
||||
"addReverse" = "Add reverse"
|
||||
"editOutbound" = "Edit outbound"
|
||||
"editReverse" = "Edit reverse"
|
||||
"addOutbound" = "Add Outbound"
|
||||
"addReverse" = "Add Reverse"
|
||||
"editOutbound" = "Edit Outbound"
|
||||
"editReverse" = "Edit Reverse"
|
||||
"tag" = "Tag"
|
||||
"tagDesc" = "Unique tag"
|
||||
"tagDesc" = "Unique Tag"
|
||||
"address" = "Address"
|
||||
"reverse" = "Reverse"
|
||||
"domain" = "Domain"
|
||||
|
@ -415,11 +415,11 @@
|
|||
"secretTokenDesc" = "Please copy and securely store this token in a safe place. This token is required for login and cannot be recovered from the x-ui command tool."
|
||||
|
||||
[pages.settings.toasts]
|
||||
"modifySettings" = "Modify Settings "
|
||||
"getSettings" = "Get Settings "
|
||||
"modifyUser" = "Modify User "
|
||||
"modifySettings" = "Modify Settings"
|
||||
"getSettings" = "Get Settings"
|
||||
"modifyUser" = "Modify User"
|
||||
"originalUserPassIncorrect" = "Incorrect original username or password"
|
||||
"userPassMustBeNotEmpty" = "New username and new password cannot be empty"
|
||||
"userPassMustBeNotEmpty" = "New username and password cannot be empty"
|
||||
|
||||
[tgbot]
|
||||
"keyboardClosed" = "❌ Custom keyboard closed!"
|
||||
|
@ -444,14 +444,14 @@
|
|||
"help" = "🤖 Welcome to this bot! It's designed to offer you specific data from the server, and it allows you to make modifications as needed.\r\n\r\n"
|
||||
"start" = "👋 Hello <i>{{ .Firstname }}</i>.\r\n"
|
||||
"welcome" = "🤖 Welcome to <b>{{ .Hostname }}</b> management bot.\r\n"
|
||||
"status" = "✅ Bot is ok!"
|
||||
"status" = "✅ Bot is OK!"
|
||||
"usage" = "❗ Please provide a text to search!"
|
||||
"getID" = "🆔 Your ID: <code>{{ .ID }}</code>"
|
||||
"helpAdminCommands" = "Search for a client email:\r\n<code>/usage [Email]</code>\r\n \r\nSearch for inbounds (with client stats):\r\n<code>/inbound [Remark]</code>"
|
||||
"helpClientCommands" = "To search for statistics, just use the following command:\r\n \r\n<code>/usage [UUID|Password]</code>\r\n \r\nUse UUID for vmess/vless and Password for Trojan."
|
||||
|
||||
[tgbot.messages]
|
||||
"cpuThreshold" = "🔴 The CPU usage {{ .Percent }}% is more than threshold {{ .Threshold }}%"
|
||||
"cpuThreshold" = "🔴 CPU Load {{ .Percent }}% is more than threshold {{ .Threshold }}%"
|
||||
"selectUserFailed" = "❌ Error in user selection!"
|
||||
"userSaved" = "✅ Telegram User saved."
|
||||
"loginSuccess" = "✅ Successfully logged-in to the panel.\r\n"
|
||||
|
@ -466,9 +466,9 @@
|
|||
"ips" = "🔢 IPs: \r\n{{ .IPs }}\r\n"
|
||||
"serverUpTime" = "⏳ Server Uptime: {{ .UpTime }} {{ .Unit }}\r\n"
|
||||
"serverLoad" = "📈 Server Load: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n"
|
||||
"serverMemory" = "📋 Server Memory: {{ .Current }}/{{ .Total }}\r\n"
|
||||
"tcpCount" = "🔹 TcpCount: {{ .Count }}\r\n"
|
||||
"udpCount" = "🔸 UdpCount: {{ .Count }}\r\n"
|
||||
"serverMemory" = "📋 Server RAM: {{ .Current }}/{{ .Total }}\r\n"
|
||||
"tcpCount" = "🔹 TCP: {{ .Count }}\r\n"
|
||||
"udpCount" = "🔸 UDP: {{ .Count }}\r\n"
|
||||
"traffic" = "🚦 Traffic: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
|
||||
"xrayStatus" = "ℹ️ Xray Status: {{ .State }}\r\n"
|
||||
"username" = "👤 Username: {{ .Username }}\r\n"
|
||||
|
@ -487,7 +487,7 @@
|
|||
"exhaustedMsg" = "🚨 Exhausted {{ .Type }}:\r\n"
|
||||
"exhaustedCount" = "🚨 Exhausted {{ .Type }} count:\r\n"
|
||||
"disabled" = "🛑 Disabled: {{ .Disabled }}\r\n"
|
||||
"depleteSoon" = "🔜 Deplete soon: {{ .Deplete }}\r\n \r\n"
|
||||
"depleteSoon" = "🔜 Deplete Soon: {{ .Deplete }}\r\n \r\n"
|
||||
"backupTime" = "🗄 Backup Time: {{ .Time }}\r\n"
|
||||
"refreshedOn" = "\r\n📋🔄 Refreshed On: {{ .Time }}\r\n \r\n"
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
"settings" = "تنظیمات پنل"
|
||||
"xray" = "الگوی ایکسری"
|
||||
"logout" = "خروج"
|
||||
"link" = "دیگر"
|
||||
"link" = "مدیریت"
|
||||
|
||||
[pages.login]
|
||||
"title" = "ورود به سیستم"
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
"settings" = "Настройки панели"
|
||||
"xray" = "Настройки Xray"
|
||||
"logout" = "Выход"
|
||||
"link" = "Прочее"
|
||||
"link" = "менеджмент"
|
||||
|
||||
[pages.login]
|
||||
"title" = "Логин"
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
"settings" = "Cài đặt bảng điều khiển"
|
||||
"logout" = "Đăng xuất"
|
||||
"xray" = "Xray Cài đặt"
|
||||
"link" = "Khác"
|
||||
"link" = "sự quản lý"
|
||||
|
||||
[pages.login]
|
||||
"title" = "Đăng nhập"
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
"settings" = "面板设置"
|
||||
"xray" = "Xray 设置"
|
||||
"logout" = "退出登录"
|
||||
"link" = "其他"
|
||||
"link" = "管理"
|
||||
|
||||
[pages.login]
|
||||
"title" = "登录"
|
||||
|
|
Loading…
Reference in a new issue