mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-09-07 10:46:19 +00:00
Resolve interference and mistakes
This commit is contained in:
parent
fe36d066ee
commit
cd83708c17
10 changed files with 157 additions and 131 deletions
|
@ -33,7 +33,7 @@
|
||||||
</template>
|
</template>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='{{ i18n "pages.inbounds.stream.general.requestHeader" }}'>
|
<a-form-item label='{{ i18n "pages.inbounds.stream.general.requestHeader" }}'>
|
||||||
<a-button size="small" @click="inbound.stream.tcp.request.addHeader('', '')">+</a-button>
|
<a-button size="small" @click="inbound.stream.tcp.request.addHeader('host', '')">+</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item :wrapper-col="{span:24}">
|
<a-form-item :wrapper-col="{span:24}">
|
||||||
<a-input-group compact v-for="(header, index) in inbound.stream.tcp.request.headers">
|
<a-input-group compact v-for="(header, index) in inbound.stream.tcp.request.headers">
|
||||||
|
|
|
@ -412,9 +412,7 @@
|
||||||
if (msg.success) {
|
if (msg.success) {
|
||||||
this.loading(true);
|
this.loading(true);
|
||||||
await PromiseUtil.sleep(5000);
|
await PromiseUtil.sleep(5000);
|
||||||
var { webCertFile, webKeyFile, webDomain: host, webPort: port, webBasePath: base } = this.allSetting;
|
let { webCertFile, webKeyFile, webDomain: host, webPort: port, webBasePath: base } = this.allSetting;
|
||||||
if (host == this.oldAllSetting.webDomain) host = null;
|
|
||||||
if (port == this.oldAllSetting.webPort) port = null;
|
|
||||||
const isTLS = webCertFile !== "" || webKeyFile !== "";
|
const isTLS = webCertFile !== "" || webKeyFile !== "";
|
||||||
const url = buildURL({ host, port, isTLS, base, path: "panel/settings" });
|
const url = buildURL({ host, port, isTLS, base, path: "panel/settings" });
|
||||||
window.location.replace(url);
|
window.location.replace(url);
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
<a-button type="primary" :disabled="saveBtnDisable" @click="updateXraySetting">{{ i18n "pages.xray.save" }}</a-button>
|
<a-button type="primary" :disabled="saveBtnDisable" @click="updateXraySetting">{{ i18n "pages.xray.save" }}</a-button>
|
||||||
<a-button type="danger" :disabled="!saveBtnDisable" @click="restartXray">{{ i18n "pages.xray.restart" }}</a-button>
|
<a-button type="danger" :disabled="!saveBtnDisable" @click="restartXray">{{ i18n "pages.xray.restart" }}</a-button>
|
||||||
<a-popover v-if="restartResult"
|
<a-popover v-if="restartResult"
|
||||||
:overlay-class-name="themeSwitcher.currentTheme">
|
:overlay-class-name="themeSwitcher.currentTheme">
|
||||||
<span slot="title" style="font-size: 12pt">Error in running xray-core</span>
|
<span slot="title" style="font-size: 12pt">Error in running xray-core</span>
|
||||||
<template slot="content">
|
<template slot="content">
|
||||||
<p style="max-width: 400px" v-for="line in restartResult.split('\n')">[[ line ]]</p>
|
<p style="max-width: 400px" v-for="line in restartResult.split('\n')">[[ line ]]</p>
|
||||||
|
@ -83,15 +83,15 @@
|
||||||
<a-back-top :target="() => document.getElementById('content-layout')" visibility-height="200">
|
<a-back-top :target="() => document.getElementById('content-layout')" visibility-height="200">
|
||||||
</a-back-top>
|
</a-back-top>
|
||||||
<a-alert type="warning" style="float: right; width: fit-content"
|
<a-alert type="warning" style="float: right; width: fit-content"
|
||||||
message='{{ i18n "pages.settings.infoDesc" }}'
|
message='{{ i18n "pages.settings.infoDesc" }}'
|
||||||
show-icon
|
show-icon
|
||||||
>
|
>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-card>
|
</a-card>
|
||||||
<a-tabs class="ant-card-dark-box-nohover" default-active-key="tpl-1"
|
<a-tabs class="ant-card-dark-box-nohover" default-active-key="tpl-1"
|
||||||
@change="(activeKey) => { if(activeKey == 'tpl-4') this.changeCode(); }"
|
@change="(activeKey) => { if(activeKey == 'tpl-4') this.changeCode(); }"
|
||||||
:class="themeSwitcher.currentTheme">
|
:class="themeSwitcher.currentTheme">
|
||||||
<a-tab-pane key="tpl-1" tab='{{ i18n "pages.xray.basicTemplate"}}'>
|
<a-tab-pane key="tpl-1" tab='{{ i18n "pages.xray.basicTemplate"}}'>
|
||||||
<a-space direction="horizontal" style="padding: 20px 20px">
|
<a-space direction="horizontal" style="padding: 20px 20px">
|
||||||
<a-button type="primary" @click="resetXrayConfigToDefault">{{ i18n "pages.settings.resetDefaultConfig" }}</a-button>
|
<a-button type="primary" @click="resetXrayConfigToDefault">{{ i18n "pages.settings.resetDefaultConfig" }}</a-button>
|
||||||
|
@ -109,16 +109,16 @@
|
||||||
<a-list-item>
|
<a-list-item>
|
||||||
<a-row style="padding: 20px">
|
<a-row style="padding: 20px">
|
||||||
<a-col :lg="24" :xl="12">
|
<a-col :lg="24" :xl="12">
|
||||||
<a-list-item-meta
|
<a-list-item-meta
|
||||||
title='{{ i18n "pages.xray.FreedomStrategy" }}'
|
title='{{ i18n "pages.xray.FreedomStrategy" }}'
|
||||||
description='{{ i18n "pages.xray.FreedomStrategyDesc" }}'/>
|
description='{{ i18n "pages.xray.FreedomStrategyDesc" }}'/>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="24" :xl="12">
|
<a-col :lg="24" :xl="12">
|
||||||
<template>
|
<template>
|
||||||
<a-select
|
<a-select
|
||||||
v-model="freedomStrategy"
|
v-model="freedomStrategy"
|
||||||
:dropdown-class-name="themeSwitcher.currentTheme"
|
:dropdown-class-name="themeSwitcher.currentTheme"
|
||||||
style="width: 100%">
|
style="width: 100%">
|
||||||
<a-select-option v-for="s in outboundDomainStrategies" :value="s">[[ s ]]</a-select-option>
|
<a-select-option v-for="s in outboundDomainStrategies" :value="s">[[ s ]]</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</template>
|
</template>
|
||||||
|
@ -127,22 +127,22 @@
|
||||||
</a-list-item>
|
</a-list-item>
|
||||||
<a-row style="padding: 20px">
|
<a-row style="padding: 20px">
|
||||||
<a-col :lg="24" :xl="12">
|
<a-col :lg="24" :xl="12">
|
||||||
<a-list-item-meta
|
<a-list-item-meta
|
||||||
title='{{ i18n "pages.xray.RoutingStrategy" }}'
|
title='{{ i18n "pages.xray.RoutingStrategy" }}'
|
||||||
description='{{ i18n "pages.xray.RoutingStrategyDesc" }}'/>
|
description='{{ i18n "pages.xray.RoutingStrategyDesc" }}'/>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="24" :xl="12">
|
<a-col :lg="24" :xl="12">
|
||||||
<template>
|
<template>
|
||||||
<a-select
|
<a-select
|
||||||
v-model="routingStrategy"
|
v-model="routingStrategy"
|
||||||
:dropdown-class-name="themeSwitcher.currentTheme"
|
:dropdown-class-name="themeSwitcher.currentTheme"
|
||||||
style="width: 100%">
|
style="width: 100%">
|
||||||
<a-select-option v-for="s in routingDomainStrategies" :value="s">[[ s ]]</a-select-option>
|
<a-select-option v-for="s in routingDomainStrategies" :value="s">[[ s ]]</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</template>
|
</template>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-list-item>
|
</a-list-item>
|
||||||
</a-collapse-panel>
|
</a-collapse-panel>
|
||||||
<a-collapse-panel header='{{ i18n "pages.xray.blockConfigs"}}'>
|
<a-collapse-panel header='{{ i18n "pages.xray.blockConfigs"}}'>
|
||||||
<a-row :xs="24" :sm="24" :lg="12">
|
<a-row :xs="24" :sm="24" :lg="12">
|
||||||
|
@ -157,6 +157,7 @@
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.PrivateIp"}}' desc='{{ i18n "pages.xray.PrivateIpDesc"}}' v-model="privateIpSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.PrivateIp"}}' desc='{{ i18n "pages.xray.PrivateIpDesc"}}' v-model="privateIpSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.Ads"}}' desc='{{ i18n "pages.xray.AdsDesc"}}' v-model="AdsSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.Ads"}}' desc='{{ i18n "pages.xray.AdsDesc"}}' v-model="AdsSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.Family"}}' desc='{{ i18n "pages.xray.FamilyDesc"}}' v-model="familyProtectSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.Family"}}' desc='{{ i18n "pages.xray.FamilyDesc"}}' v-model="familyProtectSettings"></setting-list-item>
|
||||||
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.Security"}}' desc='{{ i18n "pages.xray.SecurityDesc"}}' v-model="SecuritySettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.Speedtest"}}' desc='{{ i18n "pages.xray.SpeedtestDesc"}}' v-model="SpeedTestSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.Speedtest"}}' desc='{{ i18n "pages.xray.SpeedtestDesc"}}' v-model="SpeedTestSettings"></setting-list-item>
|
||||||
</a-collapse-panel>
|
</a-collapse-panel>
|
||||||
<a-collapse-panel header='{{ i18n "pages.xray.blockCountryConfigs"}}'>
|
<a-collapse-panel header='{{ i18n "pages.xray.blockCountryConfigs"}}'>
|
||||||
|
@ -174,7 +175,7 @@
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.ChinaDomain"}}' desc='{{ i18n "pages.xray.ChinaDomainDesc"}}' v-model="ChinaDomainSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.ChinaDomain"}}' desc='{{ i18n "pages.xray.ChinaDomainDesc"}}' v-model="ChinaDomainSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.RussiaIp"}}' desc='{{ i18n "pages.xray.RussiaIpDesc"}}' v-model="RussiaIpSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.RussiaIp"}}' desc='{{ i18n "pages.xray.RussiaIpDesc"}}' v-model="RussiaIpSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.RussiaDomain"}}' desc='{{ i18n "pages.xray.RussiaDomainDesc"}}' v-model="RussiaDomainSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.RussiaDomain"}}' desc='{{ i18n "pages.xray.RussiaDomainDesc"}}' v-model="RussiaDomainSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.VNIp"}}' desc='{{ i18n "pages.xray.VNIpDesc"}}' v-model="VNIpSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.VNIp"}}' desc='{{ i18n "pages.xray.VNIpDesc"}}' v-model="VNIpSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.VNDomain"}}' desc='{{ i18n "pages.xray.VNDomainDesc"}}' v-model="VNDomainSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.VNDomain"}}' desc='{{ i18n "pages.xray.VNDomainDesc"}}' v-model="VNDomainSettings"></setting-list-item>
|
||||||
</a-collapse-panel>
|
</a-collapse-panel>
|
||||||
<a-collapse-panel header='{{ i18n "pages.xray.directCountryConfigs"}}'>
|
<a-collapse-panel header='{{ i18n "pages.xray.directCountryConfigs"}}'>
|
||||||
|
@ -192,8 +193,8 @@
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectChinaDomain"}}' desc='{{ i18n "pages.xray.DirectChinaDomainDesc"}}' v-model="ChinaDomainDirectSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectChinaDomain"}}' desc='{{ i18n "pages.xray.DirectChinaDomainDesc"}}' v-model="ChinaDomainDirectSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectRussiaIp"}}' desc='{{ i18n "pages.xray.DirectRussiaIpDesc"}}' v-model="RussiaIpDirectSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectRussiaIp"}}' desc='{{ i18n "pages.xray.DirectRussiaIpDesc"}}' v-model="RussiaIpDirectSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectRussiaDomain"}}' desc='{{ i18n "pages.xray.DirectRussiaDomainDesc"}}' v-model="RussiaDomainDirectSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectRussiaDomain"}}' desc='{{ i18n "pages.xray.DirectRussiaDomainDesc"}}' v-model="RussiaDomainDirectSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectVNIp"}}' desc='{{ i18n "pages.xray.DirectVNIpDesc"}}' v-model="VNIpDirectSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectVNIp"}}' desc='{{ i18n "pages.xray.DirectVNIpDesc"}}' v-model="VNIpDirectSettings"></setting-list-item>
|
||||||
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectVNDomain"}}' desc='{{ i18n "pages.xray.DirectVNDomainDesc"}}' v-model="VNDomainDirectSettings"></setting-list-item>
|
<setting-list-item type="switch" title='{{ i18n "pages.xray.DirectVNDomain"}}' desc='{{ i18n "pages.xray.DirectVNDomainDesc"}}' v-model="VNDomainDirectSettings"></setting-list-item>
|
||||||
</a-collapse-panel>
|
</a-collapse-panel>
|
||||||
<a-collapse-panel header='{{ i18n "pages.xray.ipv4Configs"}}'>
|
<a-collapse-panel header='{{ i18n "pages.xray.ipv4Configs"}}'>
|
||||||
<a-row :xs="24" :sm="24" :lg="12">
|
<a-row :xs="24" :sm="24" :lg="12">
|
||||||
|
@ -225,15 +226,15 @@
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="tpl-2" tab='{{ i18n "pages.xray.Routings"}}' style="padding-top: 20px;">
|
<a-tab-pane key="tpl-2" tab='{{ i18n "pages.xray.Routings"}}' style="padding-top: 20px;">
|
||||||
<a-alert type="warning" style="margin-bottom: 10px; width: fit-content"
|
<a-alert type="warning" style="margin-bottom: 10px; width: fit-content"
|
||||||
message='{{ i18n "pages.xray.RoutingsDesc"}}' show-icon></a-alert>
|
message='{{ i18n "pages.xray.RoutingsDesc"}}' show-icon></a-alert>
|
||||||
<a-button type="primary" icon="plus" @click="addRule">{{ i18n "pages.xray.rules.add" }}</a-button>
|
<a-button type="primary" icon="plus" @click="addRule">{{ i18n "pages.xray.rules.add" }}</a-button>
|
||||||
<a-table :columns="isMobile ? rulesMobileColumns : rulesColumns" bordered
|
<a-table :columns="isMobile ? rulesMobileColumns : rulesColumns" bordered
|
||||||
:row-key="r => r.key"
|
:row-key="r => r.key"
|
||||||
:data-source="routingRuleData"
|
:data-source="routingRuleData"
|
||||||
:scroll="isMobile ? {} : { x: 1000 }"
|
:scroll="isMobile ? {} : { x: 1000 }"
|
||||||
:pagination="false"
|
:pagination="false"
|
||||||
:indent-size="0"
|
:indent-size="0"
|
||||||
:style="isMobile ? 'padding: 5px 0' : 'margin-top: 10px;'">
|
:style="isMobile ? 'padding: 5px 0' : 'margin-top: 10px;'">
|
||||||
<template slot="action" slot-scope="text, rule, index">
|
<template slot="action" slot-scope="text, rule, index">
|
||||||
[[ index+1 ]]
|
[[ index+1 ]]
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
@ -286,8 +287,8 @@
|
||||||
</template>
|
</template>
|
||||||
<template slot="info" slot-scope="text, rule, index">
|
<template slot="info" slot-scope="text, rule, index">
|
||||||
<a-popover placement="bottomRight"
|
<a-popover placement="bottomRight"
|
||||||
v-if="(rule.source+rule.sourcePort+rule.network+rule.protocol+rule.attrs+rule.ip+rule.domain+rule.port).length>0"
|
v-if="(rule.source+rule.sourcePort+rule.network+rule.protocol+rule.attrs+rule.ip+rule.domain+rule.port).length>0"
|
||||||
:overlay-class-name="themeSwitcher.currentTheme" trigger="click">
|
:overlay-class-name="themeSwitcher.currentTheme" trigger="click">
|
||||||
<template slot="content">
|
<template slot="content">
|
||||||
<table cellpadding="2" style="max-width: 300px;">
|
<table cellpadding="2" style="max-width: 300px;">
|
||||||
<tr v-if="rule.source">
|
<tr v-if="rule.source">
|
||||||
|
@ -338,12 +339,12 @@
|
||||||
<a-col :sm="24" :md="12">
|
<a-col :sm="24" :md="12">
|
||||||
<p style="margin: 10px;">{{ i18n "pages.xray.Outbounds"}}</p>
|
<p style="margin: 10px;">{{ i18n "pages.xray.Outbounds"}}</p>
|
||||||
<a-table :columns="outboundColumns" bordered
|
<a-table :columns="outboundColumns" bordered
|
||||||
:row-key="r => r.key"
|
:row-key="r => r.key"
|
||||||
:data-source="outboundData"
|
:data-source="outboundData"
|
||||||
:scroll="isMobile ? {} : { x: 200 }"
|
:scroll="isMobile ? {} : { x: 200 }"
|
||||||
:pagination="false"
|
:pagination="false"
|
||||||
:indent-size="0"
|
:indent-size="0"
|
||||||
:style="isMobile ? 'padding: 5px 5px' : 'margin-right: 1px;'">
|
:style="isMobile ? 'padding: 5px 5px' : 'margin-right: 1px;'">
|
||||||
<template slot="action" slot-scope="text, outbound, index">
|
<template slot="action" slot-scope="text, outbound, index">
|
||||||
[[ index+1 ]]
|
[[ index+1 ]]
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
@ -377,12 +378,12 @@
|
||||||
<a-col :sm="24" :md="12" v-if="reverseData.length>0">
|
<a-col :sm="24" :md="12" v-if="reverseData.length>0">
|
||||||
<p style="margin: 10px;">{{ i18n "pages.xray.outbound.reverse"}}</p>
|
<p style="margin: 10px;">{{ i18n "pages.xray.outbound.reverse"}}</p>
|
||||||
<a-table :columns="reverseColumns" bordered
|
<a-table :columns="reverseColumns" bordered
|
||||||
:row-key="r => r.key"
|
:row-key="r => r.key"
|
||||||
:data-source="reverseData"
|
:data-source="reverseData"
|
||||||
:scroll="isMobile ? {} : { x: 200 }"
|
:scroll="isMobile ? {} : { x: 200 }"
|
||||||
:pagination="false"
|
:pagination="false"
|
||||||
:indent-size="0"
|
:indent-size="0"
|
||||||
:style="isMobile ? 'padding: 5px 0' : 'margin-left: 1px;'">
|
:style="isMobile ? 'padding: 5px 0' : 'margin-left: 1px;'">
|
||||||
<template slot="action" slot-scope="text, reverse, index">
|
<template slot="action" slot-scope="text, reverse, index">
|
||||||
[[ index+1 ]]
|
[[ index+1 ]]
|
||||||
<a-dropdown :trigger="['click']">
|
<a-dropdown :trigger="['click']">
|
||||||
|
@ -427,22 +428,22 @@
|
||||||
{{template "outModal"}}
|
{{template "outModal"}}
|
||||||
{{template "reverseModal"}}
|
{{template "reverseModal"}}
|
||||||
<script>
|
<script>
|
||||||
const rulesColumns = [
|
const rulesColumns = [
|
||||||
{ title: "#", align: 'center', width: 15, scopedSlots: { customRender: 'action' } },
|
{ title: "#", align: 'center', width: 15, scopedSlots: { customRender: 'action' } },
|
||||||
{ title: '{{ i18n "pages.xray.rules.source"}}', children: [
|
{ title: '{{ i18n "pages.xray.rules.source"}}', children: [
|
||||||
{ title: 'IP', dataIndex: "source", align: 'center', width: 20, ellipsis: true },
|
{ title: 'IP', dataIndex: "source", align: 'center', width: 20, ellipsis: true },
|
||||||
{ title: 'port', dataIndex: 'sourcePort', align: 'center', width: 10, ellipsis: true } ]},
|
{ title: 'port', dataIndex: 'sourcePort', align: 'center', width: 10, ellipsis: true } ]},
|
||||||
{ title: '{{ i18n "pages.inbounds.network"}}', children: [
|
{ title: '{{ i18n "pages.inbounds.network"}}', children: [
|
||||||
{ title: 'L4', dataIndex: 'network', align: 'center', width: 10 },
|
{ title: 'L4', dataIndex: 'network', align: 'center', width: 10 },
|
||||||
{ title: 'Protocol', dataIndex: 'protocol', align: 'center', width: 10, ellipsis: true },
|
{ title: 'Protocol', dataIndex: 'protocol', align: 'center', width: 10, ellipsis: true },
|
||||||
{ title: 'Attrs', dataIndex: 'attrs', align: 'center', width: 20, ellipsis: true } ]},
|
{ title: 'Attrs', dataIndex: 'attrs', align: 'center', width: 20, ellipsis: true } ]},
|
||||||
{ title: '{{ i18n "pages.xray.rules.dest"}}', children: [
|
{ title: '{{ i18n "pages.xray.rules.dest"}}', children: [
|
||||||
{ title: 'IP', dataIndex: 'ip', align: 'center', width: 20, ellipsis: true },
|
{ title: 'IP', dataIndex: 'ip', align: 'center', width: 20, ellipsis: true },
|
||||||
{ title: 'Domain', dataIndex: 'domain', align: 'center', width: 20, ellipsis: true },
|
{ title: 'Domain', dataIndex: 'domain', align: 'center', width: 20, ellipsis: true },
|
||||||
{ title: 'Port', dataIndex: 'port', align: 'center', width: 10, ellipsis: true }]},
|
{ title: 'Port', dataIndex: 'port', align: 'center', width: 10, ellipsis: true }]},
|
||||||
{ title: '{{ i18n "pages.xray.rules.inbound"}}', children: [
|
{ title: '{{ i18n "pages.xray.rules.inbound"}}', children: [
|
||||||
{ title: 'Inbound Tag', dataIndex: 'inboundTag', align: 'center', width: 20, ellipsis: true },
|
{ title: 'Inbound Tag', dataIndex: 'inboundTag', align: 'center', width: 20, ellipsis: true },
|
||||||
{ title: 'Client 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 },
|
{ title: '{{ i18n "pages.xray.rules.outbound"}}', dataIndex: 'outboundTag', align: 'center', width: 20 },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -537,13 +538,18 @@
|
||||||
cn: ["geoip:cn"],
|
cn: ["geoip:cn"],
|
||||||
ir: ["ext:geoip_IR.dat:ir"],
|
ir: ["ext:geoip_IR.dat:ir"],
|
||||||
ru: ["geoip:ru"],
|
ru: ["geoip:ru"],
|
||||||
vn: ["ext:geoip_VN.dat:vn"],
|
vn: ["ext:geoip_VN.dat:vn"],
|
||||||
},
|
},
|
||||||
domains: {
|
domains: {
|
||||||
ads: [
|
ads: [
|
||||||
"geosite:category-ads-all",
|
"geosite:category-ads-all",
|
||||||
"ext:geosite_IR.dat:category-ads-all"
|
"ext:geosite_IR.dat:category-ads-all"
|
||||||
],
|
],
|
||||||
|
security: [
|
||||||
|
"ext:geosite_IR.dat:malware",
|
||||||
|
"ext:geosite_IR.dat:phishing",
|
||||||
|
"ext:geosite_IR.dat:cryptominers"
|
||||||
|
],
|
||||||
speedtest: ["geosite:speedtest"],
|
speedtest: ["geosite:speedtest"],
|
||||||
openai: ["geosite:openai"],
|
openai: ["geosite:openai"],
|
||||||
google: ["geosite:google"],
|
google: ["geosite:google"],
|
||||||
|
@ -560,20 +566,18 @@
|
||||||
ir: [
|
ir: [
|
||||||
"regexp:.*\\.ir$",
|
"regexp:.*\\.ir$",
|
||||||
"regexp:.*\\.xn--mgba3a4f16a$", // .ایران
|
"regexp:.*\\.xn--mgba3a4f16a$", // .ایران
|
||||||
"ext:geosite_IR.dat:ir" // have rules to bypass all .ir domains.
|
"ext:geosite_IR.dat:ir"
|
||||||
],
|
],
|
||||||
vn: [
|
vn: [
|
||||||
"regexp:.*\\.vn$",
|
"regexp:.*\\.vn$",
|
||||||
"ext:geosite_VN.dat:vn",
|
"ext:geosite_VN.dat:vn",
|
||||||
"ext:geosite_VN.dat:ads"
|
"ext:geosite_VN.dat:ads"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
familyProtectDNS: {
|
familyProtectDNS: {
|
||||||
"servers": [
|
"servers": [
|
||||||
"1.1.1.3", // https://developers.cloudflare.com/1.1.1.1/setup/
|
"1.1.1.3", // https://developers.cloudflare.com/1.1.1.1/setup/
|
||||||
"1.0.0.3",
|
"1.0.0.3"
|
||||||
"94.140.14.15", // https://adguard-dns.io/kb/general/dns-providers/
|
|
||||||
"94.140.15.16"
|
|
||||||
],
|
],
|
||||||
"queryStrategy": "UseIPv4"
|
"queryStrategy": "UseIPv4"
|
||||||
},
|
},
|
||||||
|
@ -616,10 +620,10 @@
|
||||||
},
|
},
|
||||||
async getXrayResult() {
|
async getXrayResult() {
|
||||||
const msg = await HttpUtil.get("/panel/xray/getXrayResult");
|
const msg = await HttpUtil.get("/panel/xray/getXrayResult");
|
||||||
if(msg.success){
|
if(msg.success){
|
||||||
this.restartResult=msg.obj;
|
this.restartResult=msg.obj;
|
||||||
if(msg.obj.length > 1) Vue.prototype.$message.error(msg.obj);
|
if(msg.obj.length > 1) Vue.prototype.$message.error(msg.obj);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async fetchUserSecret() {
|
async fetchUserSecret() {
|
||||||
this.loading(true);
|
this.loading(true);
|
||||||
|
@ -657,9 +661,9 @@
|
||||||
},
|
},
|
||||||
async toggleToken(value) {
|
async toggleToken(value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
await this.getNewSecret();
|
await this.getNewSecret();
|
||||||
} else {
|
} else {
|
||||||
this.user.loginSecret = "";
|
this.user.loginSecret = "";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async resetXrayConfigToDefault() {
|
async resetXrayConfigToDefault() {
|
||||||
|
@ -898,7 +902,7 @@
|
||||||
newRules = newTemplateSettings.routing.rules.filter(r => r.outboundTag != oldData.tag);
|
newRules = newTemplateSettings.routing.rules.filter(r => r.outboundTag != oldData.tag);
|
||||||
}
|
}
|
||||||
newTemplateSettings.routing.rules = newRules;
|
newTemplateSettings.routing.rules = newRules;
|
||||||
|
|
||||||
this.templateSettings = newTemplateSettings;
|
this.templateSettings = newTemplateSettings;
|
||||||
},
|
},
|
||||||
addRule(){
|
addRule(){
|
||||||
|
@ -1182,6 +1186,18 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
SecuritySettings: {
|
||||||
|
get: function () {
|
||||||
|
return doAllItemsExist(this.settingsData.domains.security, this.blockedDomains);
|
||||||
|
},
|
||||||
|
set: function (newValue) {
|
||||||
|
if (newValue) {
|
||||||
|
this.blockedDomains = [...this.blockedDomains, ...this.settingsData.domains.security];
|
||||||
|
} else {
|
||||||
|
this.blockedDomains = this.blockedDomains.filter(data => !this.settingsData.domains.security.includes(data));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
SpeedTestSettings: {
|
SpeedTestSettings: {
|
||||||
get: function () {
|
get: function () {
|
||||||
return doAllItemsExist(this.settingsData.domains.speedtest, this.blockedDomains);
|
return doAllItemsExist(this.settingsData.domains.speedtest, this.blockedDomains);
|
||||||
|
@ -1305,7 +1321,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
VNIpSettings: {
|
VNIpSettings: {
|
||||||
get: function () {
|
get: function () {
|
||||||
return doAllItemsExist(this.settingsData.ips.vn, this.blockedIPs);
|
return doAllItemsExist(this.settingsData.ips.vn, this.blockedIPs);
|
||||||
},
|
},
|
||||||
|
@ -1401,7 +1417,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
VNIpDirectSettings: {
|
VNIpDirectSettings: {
|
||||||
get: function () {
|
get: function () {
|
||||||
return doAllItemsExist(this.settingsData.ips.vn, this.directIPs);
|
return doAllItemsExist(this.settingsData.ips.vn, this.directIPs);
|
||||||
},
|
},
|
||||||
|
@ -1424,7 +1440,7 @@
|
||||||
this.directDomains = this.directDomains.filter(data => !this.settingsData.domains.vn.includes(data));
|
this.directDomains = this.directDomains.filter(data => !this.settingsData.domains.vn.includes(data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
GoogleWARPSettings: {
|
GoogleWARPSettings: {
|
||||||
get: function () {
|
get: function () {
|
||||||
return doAllItemsExist(this.settingsData.domains.google, this.warpDomains);
|
return doAllItemsExist(this.settingsData.domains.google, this.warpDomains);
|
||||||
|
@ -1477,4 +1493,4 @@
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -4,9 +4,9 @@
|
||||||
:ok-text="ruleModal.okText" cancel-text='{{ i18n "close" }}' :class="themeSwitcher.currentTheme">
|
:ok-text="ruleModal.okText" cancel-text='{{ i18n "close" }}' :class="themeSwitcher.currentTheme">
|
||||||
<a-form :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
<a-form :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
|
||||||
<a-form-item label='Domain Matcher'>
|
<a-form-item label='Domain Matcher'>
|
||||||
<a-select v-model="ruleModal.rule.domainMatcher" :dropdown-class-name="themeSwitcher.currentTheme">
|
<a-select v-model="ruleModal.rule.domainMatcher" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||||
<a-select-option v-for="dm in ['','hybrid','linear']" :value="dm">[[ dm ]]</a-select-option>
|
<a-select-option v-for="dm in ['','hybrid','linear']" :value="dm">[[ dm ]]</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<template slot="label">
|
<template slot="label">
|
||||||
|
@ -36,8 +36,8 @@
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='Protocol'>
|
<a-form-item label='Protocol'>
|
||||||
<a-select v-model="ruleModal.rule.protocol" :dropdown-class-name="themeSwitcher.currentTheme">
|
<a-select v-model="ruleModal.rule.protocol" mode="multiple" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||||
<a-select-option v-for="x in ['','http','tls','bittorrent']" :value="x">[[ x ]]</a-select-option>
|
<a-select-option v-for="x in ['http','tls','bittorrent']" :value="x">[[ x ]]</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='Attributes'>
|
<a-form-item label='Attributes'>
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
<a-select-option v-for="tag in ruleModal.outboundTags" :value="tag">[[ tag ]]</a-select-option>
|
<a-select-option v-for="tag in ruleModal.outboundTags" :value="tag">[[ tag ]]</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</table>
|
</table>
|
||||||
</a-form>
|
</a-form>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
<script>
|
<script>
|
||||||
|
@ -214,11 +214,11 @@
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(rule)) {
|
for (const [key, value] of Object.entries(rule)) {
|
||||||
if (
|
if (
|
||||||
value !== null &&
|
value !== null &&
|
||||||
value !== undefined &&
|
value !== undefined &&
|
||||||
!(Array.isArray(value) && value.length === 0) &&
|
!(Array.isArray(value) && value.length === 0) &&
|
||||||
!(typeof value === 'object' && Object.keys(value).length === 0) &&
|
!(typeof value === 'object' && Object.keys(value).length === 0) &&
|
||||||
value !== ''
|
value !== ''
|
||||||
) {
|
) {
|
||||||
newRule[key] = value;
|
newRule[key] = value;
|
||||||
}
|
}
|
||||||
|
@ -236,4 +236,4 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{{end}}
|
{{end}}
|
|
@ -59,7 +59,7 @@
|
||||||
"settings" = "Panel Settings"
|
"settings" = "Panel Settings"
|
||||||
"xray" = "Xray Settings"
|
"xray" = "Xray Settings"
|
||||||
"logout" = "Logout"
|
"logout" = "Logout"
|
||||||
"link" = "Management"
|
"link" = "Manage"
|
||||||
|
|
||||||
[pages.login]
|
[pages.login]
|
||||||
"title" = "Login"
|
"title" = "Login"
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
"xrayStatus" = "Status"
|
"xrayStatus" = "Status"
|
||||||
"stopXray" = "Stop"
|
"stopXray" = "Stop"
|
||||||
"restartXray" = "Restart"
|
"restartXray" = "Restart"
|
||||||
"xraySwitch" = "SwitchV"
|
"xraySwitch" = "Version"
|
||||||
"xraySwitchClick" = "Choose the version you want to switch to."
|
"xraySwitchClick" = "Choose the version you want to switch to."
|
||||||
"xraySwitchClickDesk" = "Choose wisely, as older versions may not be compatible with current configurations."
|
"xraySwitchClickDesk" = "Choose wisely, as older versions may not be compatible with current configurations."
|
||||||
"operationHours" = "Uptime"
|
"operationHours" = "Uptime"
|
||||||
|
@ -329,8 +329,10 @@
|
||||||
"PrivateIpDesc" = "Change the configuration template to avoid connecting to private IP ranges."
|
"PrivateIpDesc" = "Change the configuration template to avoid connecting to private IP ranges."
|
||||||
"Ads" = "Block Ads"
|
"Ads" = "Block Ads"
|
||||||
"AdsDesc" = "Change the configuration template to block ads."
|
"AdsDesc" = "Change the configuration template to block ads."
|
||||||
"Family" = "Block Malware and Adult Content"
|
"Family" = "Block malware and Adult Content"
|
||||||
"FamilyDesc" = "DNS resolvers to block malware and adult content for family protection."
|
"FamilyDesc" = "Cloudflare DNS resolvers to block malware and adult content for family protection."
|
||||||
|
"Security" = "Block Malware, Phishing and Cryptominers Websites"
|
||||||
|
"SecurityDesc" = "Change the configuration template for Security protection."
|
||||||
"Speedtest" = "Block Speedtest Websites"
|
"Speedtest" = "Block Speedtest Websites"
|
||||||
"SpeedtestDesc" = "Change the configuration template to avoid connecting to speedtest websites."
|
"SpeedtestDesc" = "Change the configuration template to avoid connecting to speedtest websites."
|
||||||
"IRIp" = "Disable Connection to Iran IPs"
|
"IRIp" = "Disable Connection to Iran IPs"
|
||||||
|
@ -549,4 +551,4 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }} : Enabled successfully."
|
"enableSuccess" = "✅ {{ .Email }} : Enabled successfully."
|
||||||
"disableSuccess" = "✅ {{ .Email }} : Disabled successfully."
|
"disableSuccess" = "✅ {{ .Email }} : Disabled successfully."
|
||||||
"askToAddUserId" = "Your configuration is not found!\r\nPlease ask your Admin to use your telegram user id in your configuration(s).\r\n\r\nYour user id: <b>{{ .TgUserID }}</b>"
|
"askToAddUserId" = "Your configuration is not found!\r\nPlease ask your Admin to use your telegram user id in your configuration(s).\r\n\r\nYour user id: <b>{{ .TgUserID }}</b>"
|
||||||
"askToAddUserName" = "Your configuration is not found!\r\nPlease ask your Admin to use your telegram username or user id in your configuration(s).\r\n\r\nYour username: <b>@{{ .TgUserName }}</b>\r\n\r\nYour user id: <b>{{ .TgUserID }}</b>"
|
"askToAddUserName" = "Your configuration is not found!\r\nPlease ask your Admin to use your telegram username or user id in your configuration(s).\r\n\r\nYour username: <b>@{{ .TgUserName }}</b>\r\n\r\nYour user id: <b>{{ .TgUserID }}</b>"
|
|
@ -76,10 +76,10 @@
|
||||||
"title" = "Estado del Sistema"
|
"title" = "Estado del Sistema"
|
||||||
"memory" = "Memoria"
|
"memory" = "Memoria"
|
||||||
"hard" = "Disco Duro"
|
"hard" = "Disco Duro"
|
||||||
"xrayStatus" = "Estado de Xray"
|
"xrayStatus" = "Estado de"
|
||||||
"stopXray" = "Detener Xray"
|
"stopXray" = "Detener"
|
||||||
"restartXray" = "Reiniciar"
|
"restartXray" = "Reiniciar"
|
||||||
"xraySwitch" = "Cambiar Versión"
|
"xraySwitch" = "Versión"
|
||||||
"xraySwitchClick" = "Elige la versión a la que deseas cambiar."
|
"xraySwitchClick" = "Elige la versión a la que deseas cambiar."
|
||||||
"xraySwitchClickDesk" = "Elige sabiamente, ya que las versiones anteriores pueden no ser compatibles con las configuraciones actuales."
|
"xraySwitchClickDesk" = "Elige sabiamente, ya que las versiones anteriores pueden no ser compatibles con las configuraciones actuales."
|
||||||
"operationHours" = "Tiempo de Funcionamiento"
|
"operationHours" = "Tiempo de Funcionamiento"
|
||||||
|
@ -329,8 +329,10 @@
|
||||||
"PrivateIpDesc" = "Cambia la plantilla de configuración para evitar la conexión a rangos de IP privadas."
|
"PrivateIpDesc" = "Cambia la plantilla de configuración para evitar la conexión a rangos de IP privadas."
|
||||||
"Ads" = "Bloquear Anuncios"
|
"Ads" = "Bloquear Anuncios"
|
||||||
"AdsDesc" = "Cambia la plantilla de configuración para bloquear anuncios."
|
"AdsDesc" = "Cambia la plantilla de configuración para bloquear anuncios."
|
||||||
"Family" = "Bloquear Malware y Contenido para Adultos"
|
"Family" = "Bloquee malware y contenido para adultos"
|
||||||
"FamilyDesc" = "Resolvedores de DNS para bloquear malware y contenido para adultos para protección familiar."
|
"FamilyDesc" = "Resolutores de DNS de Cloudflare para bloquear malware y contenido para adultos para protección familiar."
|
||||||
|
"Security" = "Bloquee sitios web de malware, phishing y criptomineros"
|
||||||
|
"SecurityDesc" = "Cambiar la plantilla de configuración para la protección de seguridad."
|
||||||
"Speedtest" = "Bloquear Sitios Web de Pruebas de Velocidad"
|
"Speedtest" = "Bloquear Sitios Web de Pruebas de Velocidad"
|
||||||
"SpeedtestDesc" = "Cambia la plantilla de configuración para evitar la conexión a sitios web de pruebas de velocidad."
|
"SpeedtestDesc" = "Cambia la plantilla de configuración para evitar la conexión a sitios web de pruebas de velocidad."
|
||||||
"IRIp" = "Desactivar Conexión a Rangos de IP de Irán"
|
"IRIp" = "Desactivar Conexión a Rangos de IP de Irán"
|
||||||
|
@ -549,4 +551,4 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }} : Habilitado exitosamente."
|
"enableSuccess" = "✅ {{ .Email }} : Habilitado exitosamente."
|
||||||
"disableSuccess" = "✅ {{ .Email }} : Deshabilitado exitosamente."
|
"disableSuccess" = "✅ {{ .Email }} : Deshabilitado exitosamente."
|
||||||
"askToAddUserId" = "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su ID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu ID de usuario: <b>{{ .TgUserID }}</b>"
|
"askToAddUserId" = "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su ID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu ID de usuario: <b>{{ .TgUserID }}</b>"
|
||||||
"askToAddUserName" = "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su nombre de usuario o ID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu nombre de usuario: <b>@{{ .TgUserName }}</b>\r\n\r\nSu ID de usuario: <b>{{ .TgUserID }}</b>"
|
"askToAddUserName" = "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su nombre de usuario o ID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu nombre de usuario: <b>@{{ .TgUserName }}</b>\r\n\r\nSu ID de usuario: <b>{{ .TgUserID }}</b>"
|
|
@ -79,7 +79,7 @@
|
||||||
"xrayStatus" = "وضعیت"
|
"xrayStatus" = "وضعیت"
|
||||||
"stopXray" = "توقف"
|
"stopXray" = "توقف"
|
||||||
"restartXray" = "شروع مجدد"
|
"restartXray" = "شروع مجدد"
|
||||||
"xraySwitch" = "تغییر ورژن"
|
"xraySwitch" = "ورژن"
|
||||||
"xraySwitchClick" = "ورژن مورد نظر را انتخاب کنید"
|
"xraySwitchClick" = "ورژن مورد نظر را انتخاب کنید"
|
||||||
"xraySwitchClickDesk" = "لطفا با دقت انتخاب کنید ، در صورت انتخاب اشتباه امکان قطعی سیستم وجود دارد "
|
"xraySwitchClickDesk" = "لطفا با دقت انتخاب کنید ، در صورت انتخاب اشتباه امکان قطعی سیستم وجود دارد "
|
||||||
"operationHours" = "آپ تایم سیستم"
|
"operationHours" = "آپ تایم سیستم"
|
||||||
|
@ -330,7 +330,9 @@
|
||||||
"Ads" = "مسدود کردن تبلیغات"
|
"Ads" = "مسدود کردن تبلیغات"
|
||||||
"AdsDesc" = "الگوی تنظیمات را برای مسدود کردن تبلیغات تغییر میدهد"
|
"AdsDesc" = "الگوی تنظیمات را برای مسدود کردن تبلیغات تغییر میدهد"
|
||||||
"Family" = "فعال کردن حالت خانواده"
|
"Family" = "فعال کردن حالت خانواده"
|
||||||
"FamilyDesc" = "برای جلوگیری از ارتباط با وبسایت های ناامن"
|
"FamilyDesc" = "مسدود کردن محتوای بزرگسالان به کمک دی ان اس کلودفلر برای حالت خانواده "
|
||||||
|
"Security" = "مسدود کردن وبسایتهای بدافزار، فیشینگ و کریپتومینرها"
|
||||||
|
"SecurityDesc" = "الگوی پیکربندی را برای حفاظت از امنیت تغییر دهید"
|
||||||
"Speedtest" = "جلوگیری از اتصال به سایت های تست سرعت"
|
"Speedtest" = "جلوگیری از اتصال به سایت های تست سرعت"
|
||||||
"SpeedtestDesc" = "الگوی تنظیمات را برای فیلتر کردن اتصال به سایت های تست سرعت تغییر میدهد"
|
"SpeedtestDesc" = "الگوی تنظیمات را برای فیلتر کردن اتصال به سایت های تست سرعت تغییر میدهد"
|
||||||
"IRIp" = "جلوگیری از اتصال آیپی های ایران"
|
"IRIp" = "جلوگیری از اتصال آیپی های ایران"
|
||||||
|
@ -549,4 +551,4 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }} : با موفقیت فعال شد."
|
"enableSuccess" = "✅ {{ .Email }} : با موفقیت فعال شد."
|
||||||
"disableSuccess" = "✅ {{ .Email }} : با موفقیت غیرفعال شد."
|
"disableSuccess" = "✅ {{ .Email }} : با موفقیت غیرفعال شد."
|
||||||
"askToAddUserId" = "پیکربندی شما یافت نشد!\r\nلطفاً از مدیر خود بخواهید که شناسه کاربر تلگرام خود را در پیکربندی (های) خود استفاده کند.\r\n\r\nشناسه کاربری شما: <b>{{ .TgUserID }}</b>"
|
"askToAddUserId" = "پیکربندی شما یافت نشد!\r\nلطفاً از مدیر خود بخواهید که شناسه کاربر تلگرام خود را در پیکربندی (های) خود استفاده کند.\r\n\r\nشناسه کاربری شما: <b>{{ .TgUserID }}</b>"
|
||||||
"askToAddUserName" = "پیکربندی شما یافت نشد!\r\nلطفاً از مدیر خود بخواهید که نام کاربری یا شناسه کاربر تلگرام خود را در پیکربندی (های) خود استفاده کند.\r\n\r\nنام کاربری شما: <b>@{{ .TgUserName }}</b>\r\n\r\nشناسه کاربری شما: <b>{{ .TgUserID }}</b>"
|
"askToAddUserName" = "پیکربندی شما یافت نشد!\r\nلطفاً از مدیر خود بخواهید که نام کاربری یا شناسه کاربر تلگرام خود را در پیکربندی (های) خود استفاده کند.\r\n\r\nنام کاربری شما: <b>@{{ .TgUserName }}</b>\r\n\r\nشناسه کاربری شما: <b>{{ .TgUserID }}</b>"
|
|
@ -77,9 +77,9 @@
|
||||||
"memory" = "Память"
|
"memory" = "Память"
|
||||||
"hard" = "Жесткий диск"
|
"hard" = "Жесткий диск"
|
||||||
"xrayStatus" = "Статус"
|
"xrayStatus" = "Статус"
|
||||||
"stopXray" = "Остановить Xray"
|
"stopXray" = "Остановить"
|
||||||
"restartXray" = "Перезапустить Xray"
|
"restartXray" = "Перезапустить"
|
||||||
"xraySwitch" = "Переключить версию"
|
"xraySwitch" = "Версия"
|
||||||
"xraySwitchClick" = "Выберите желаемую версию"
|
"xraySwitchClick" = "Выберите желаемую версию"
|
||||||
"xraySwitchClickDesk" = "Выбирайте внимательно, так как старые версии могут быть несовместимы с текущими конфигурациями"
|
"xraySwitchClickDesk" = "Выбирайте внимательно, так как старые версии могут быть несовместимы с текущими конфигурациями"
|
||||||
"operationHours" = "Время работы системы"
|
"operationHours" = "Время работы системы"
|
||||||
|
@ -329,8 +329,10 @@
|
||||||
"PrivateIpDesc" = "Изменение шаблона конфигурации для предупреждения подключения к диапазонам частных IP-адресов"
|
"PrivateIpDesc" = "Изменение шаблона конфигурации для предупреждения подключения к диапазонам частных IP-адресов"
|
||||||
"Ads" = "Блокировка рекламы"
|
"Ads" = "Блокировка рекламы"
|
||||||
"AdsDesc" = "Изменение конфигурации для блокировки рекламы"
|
"AdsDesc" = "Изменение конфигурации для блокировки рекламы"
|
||||||
"Family" = "Блокировать вредоносное ПО и контент для взрослых"
|
"Family" = "Блокируйте вредоносное ПО и контент для взрослых"
|
||||||
"FamilyDesc" = "Резольверы DNS для блокировки вредоносных программ и контента для взрослых для защиты семьи"
|
"FamilyDesc" = "DNS-преобразователи Cloudflare для блокировки вредоносного ПО и контента для взрослых в целях защиты семьи."
|
||||||
|
"Security" = "Блокируйте вредоносное ПО, фишинговые сайты и сайты криптомайнеров"
|
||||||
|
"SecurityDesc" = "Изменение шаблона конфигурации для защиты безопасности."
|
||||||
"Speedtest" = "Блокировать сайты для проверки скорости"
|
"Speedtest" = "Блокировать сайты для проверки скорости"
|
||||||
"SpeedtestDesc" = "Изменение шаблона конфигурации для предупреждения подключения к веб-сайтам для тестирования скорости"
|
"SpeedtestDesc" = "Изменение шаблона конфигурации для предупреждения подключения к веб-сайтам для тестирования скорости"
|
||||||
"IRIp" = "Заблокировать подключения к диапазонам IP-адресов Ирана"
|
"IRIp" = "Заблокировать подключения к диапазонам IP-адресов Ирана"
|
||||||
|
@ -549,4 +551,4 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }}: Включено успешно."
|
"enableSuccess" = "✅ {{ .Email }}: Включено успешно."
|
||||||
"disableSuccess" = "✅ {{ .Email }}: Отключено успешно."
|
"disableSuccess" = "✅ {{ .Email }}: Отключено успешно."
|
||||||
"askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <b>{{ .TgUserID }}</b>"
|
"askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <b>{{ .TgUserID }}</b>"
|
||||||
"askToAddUserName" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваше имя пользователя или идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаше имя пользователя: <b>@{{ .TgUserName }}</b>\r\n\r\nВаш идентификатор пользователя: <b>{{ .TgUserID }}</b>"
|
"askToAddUserName" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваше имя пользователя или идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаше имя пользователя: <b>@{{ .TgUserName }}</b>\r\n\r\nВаш идентификатор пользователя: <b>{{ .TgUserID }}</b>"
|
|
@ -74,12 +74,12 @@
|
||||||
|
|
||||||
[pages.index]
|
[pages.index]
|
||||||
"title" = "Trạng thái hệ thống"
|
"title" = "Trạng thái hệ thống"
|
||||||
"memory" = "Bộ nhớ"
|
"memory" = "ĐẬP"
|
||||||
"hard" = "Ổ cứng"
|
"hard" = "Đĩa"
|
||||||
"xrayStatus" = "Trạng thái của Xray"
|
"xrayStatus" = "Trạng thái"
|
||||||
"stopXray" = "Dừng Xray"
|
"stopXray" = "Dừng lại"
|
||||||
"restartXray" = "Khởi động lại Xray"
|
"restartXray" = "Khởi động lại"
|
||||||
"xraySwitch" = "Chuyển đổi phiên bản"
|
"xraySwitch" = "Phiên bản"
|
||||||
"xraySwitchClick" = "Chọn phiên bản mà bạn muốn chuyển đổi sang."
|
"xraySwitchClick" = "Chọn phiên bản mà bạn muốn chuyển đổi sang."
|
||||||
"xraySwitchClickDesk" = "Hãy lựa chọn thận trọng, vì các phiên bản cũ có thể không tương thích với các cấu hình hiện tại."
|
"xraySwitchClickDesk" = "Hãy lựa chọn thận trọng, vì các phiên bản cũ có thể không tương thích với các cấu hình hiện tại."
|
||||||
"operationHours" = "Thời gian hoạt động"
|
"operationHours" = "Thời gian hoạt động"
|
||||||
|
@ -329,8 +329,10 @@
|
||||||
"PrivateIpDesc" = "Thay đổi mẫu cấu hình để tránh kết nối đến dải IP riêng tư."
|
"PrivateIpDesc" = "Thay đổi mẫu cấu hình để tránh kết nối đến dải IP riêng tư."
|
||||||
"Ads" = "Chặn Quảng cáo"
|
"Ads" = "Chặn Quảng cáo"
|
||||||
"AdsDesc" = "Thay đổi mẫu cấu hình để chặn quảng cáo."
|
"AdsDesc" = "Thay đổi mẫu cấu hình để chặn quảng cáo."
|
||||||
"Family" = "Chặn Phần mềm độc hại và Nội dung cho Người lớn"
|
"Family" = "Chặn phần mềm độc hại và nội dung người lớn"
|
||||||
"FamilyDesc" = "Các trình giải quyết DNS để chặn phần mềm độc hại và nội dung cho bảo vệ gia đình."
|
"FamilyDesc" = "Trình phân giải DNS của Cloudflare để chặn phần mềm độc hại và nội dung người lớn để bảo vệ gia đình."
|
||||||
|
"Security" = "Chặn các trang web chứa phần mềm độc hại, lừa đảo và khai thác tiền điện tử"
|
||||||
|
"SecurityDesc" = "Thay đổi mẫu cấu hình để bảo vệ Bảo mật."
|
||||||
"Speedtest" = "Chặn Trang web Speedtest"
|
"Speedtest" = "Chặn Trang web Speedtest"
|
||||||
"SpeedtestDesc" = "Thay đổi mẫu cấu hình để tránh kết nối đến các trang web Speedtest."
|
"SpeedtestDesc" = "Thay đổi mẫu cấu hình để tránh kết nối đến các trang web Speedtest."
|
||||||
"IRIp" = "Vô hiệu hóa kết nối đến dải IP của Iran"
|
"IRIp" = "Vô hiệu hóa kết nối đến dải IP của Iran"
|
||||||
|
@ -549,4 +551,4 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }} : Đã Bật Thành Công."
|
"enableSuccess" = "✅ {{ .Email }} : Đã Bật Thành Công."
|
||||||
"disableSuccess" = "✅ {{ .Email }} : Đã Tắt Thành Công."
|
"disableSuccess" = "✅ {{ .Email }} : Đã Tắt Thành Công."
|
||||||
"askToAddUserId" = "Cấu hình của bạn không được tìm thấy!\r\nVui lòng yêu cầu Quản trị viên sử dụng ID người dùng telegram của bạn trong cấu hình của bạn.\r\n\r\nID người dùng của bạn: <b>{{ .TgUserID }}</b>"
|
"askToAddUserId" = "Cấu hình của bạn không được tìm thấy!\r\nVui lòng yêu cầu Quản trị viên sử dụng ID người dùng telegram của bạn trong cấu hình của bạn.\r\n\r\nID người dùng của bạn: <b>{{ .TgUserID }}</b>"
|
||||||
"askToAddUserName" = "Cấu hình của bạn không được tìm thấy!\r\nVui lòng yêu cầu Quản trị viên sử dụng tên người dùng hoặc ID người dùng telegram của bạn trong cấu hình của bạn.\r\n\r\nTên người dùng của bạn: <b>@{{ .TgUserName }}</b>\r\n\r\nID người dùng của bạn: <b>{{ .TgUserID }}</b>"
|
"askToAddUserName" = "Cấu hình của bạn không được tìm thấy!\r\nVui lòng yêu cầu Quản trị viên sử dụng tên người dùng hoặc ID người dùng telegram của bạn trong cấu hình của bạn.\r\n\r\nTên người dùng của bạn: <b>@{{ .TgUserName }}</b>\r\n\r\nID người dùng của bạn: <b>{{ .TgUserID }}</b>"
|
|
@ -10,8 +10,8 @@
|
||||||
"remark" = "备注"
|
"remark" = "备注"
|
||||||
"enable" = "启用"
|
"enable" = "启用"
|
||||||
"protocol" = "协议"
|
"protocol" = "协议"
|
||||||
"search" = "搜尋"
|
"search" = "搜索"
|
||||||
"filter" = "过滤器"
|
"filter" = "筛选"
|
||||||
"loading" = "加载中..."
|
"loading" = "加载中..."
|
||||||
"second" = "秒"
|
"second" = "秒"
|
||||||
"minute" = "分钟"
|
"minute" = "分钟"
|
||||||
|
@ -30,8 +30,8 @@
|
||||||
"sure" = "确定"
|
"sure" = "确定"
|
||||||
"encryption" = "加密"
|
"encryption" = "加密"
|
||||||
"transmission" = "传输"
|
"transmission" = "传输"
|
||||||
"host" = "主持人"
|
"host" = "Host"
|
||||||
"path" = "小路"
|
"path" = "Path"
|
||||||
"camouflage" = "伪装"
|
"camouflage" = "伪装"
|
||||||
"status" = "状态"
|
"status" = "状态"
|
||||||
"enabled" = "开启"
|
"enabled" = "开启"
|
||||||
|
@ -49,8 +49,8 @@
|
||||||
"install" = "安装"
|
"install" = "安装"
|
||||||
"clients" = "客户端"
|
"clients" = "客户端"
|
||||||
"usage" = "用法"
|
"usage" = "用法"
|
||||||
"secretToken" = "秘密令牌"
|
"secretToken" = "安全密钥"
|
||||||
"remained" = "仍然存在"
|
"remained" = "剩余"
|
||||||
"security" = "安全"
|
"security" = "安全"
|
||||||
|
|
||||||
[menu]
|
[menu]
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
"xrayStatus" = "状态"
|
"xrayStatus" = "状态"
|
||||||
"stopXray" = "停止"
|
"stopXray" = "停止"
|
||||||
"restartXray" = "重启"
|
"restartXray" = "重启"
|
||||||
"xraySwitch" = "切换版本"
|
"xraySwitch" = "版本"
|
||||||
"xraySwitchClick" = "点击你想切换的版本"
|
"xraySwitchClick" = "点击你想切换的版本"
|
||||||
"xraySwitchClickDesk" = "请谨慎选择,旧版本可能配置不兼容"
|
"xraySwitchClickDesk" = "请谨慎选择,旧版本可能配置不兼容"
|
||||||
"operationHours" = "系统正常运行时间"
|
"operationHours" = "系统正常运行时间"
|
||||||
|
@ -148,7 +148,7 @@
|
||||||
"client" = "客户"
|
"client" = "客户"
|
||||||
"export" = "导出链接"
|
"export" = "导出链接"
|
||||||
"clone" = "克隆"
|
"clone" = "克隆"
|
||||||
"cloneInbound" = "创造"
|
"cloneInbound" = "克隆"
|
||||||
"cloneInboundContent" = "此入站的所有项目除 Port、Listening IP、Clients 将应用于克隆"
|
"cloneInboundContent" = "此入站的所有项目除 Port、Listening IP、Clients 将应用于克隆"
|
||||||
"cloneInboundOk" = "从创建克隆"
|
"cloneInboundOk" = "从创建克隆"
|
||||||
"resetAllTraffic" = "重置所有入站流量"
|
"resetAllTraffic" = "重置所有入站流量"
|
||||||
|
@ -329,8 +329,10 @@
|
||||||
"PrivateIpDesc" = "更改配置模板以避免连接私有 IP 范围"
|
"PrivateIpDesc" = "更改配置模板以避免连接私有 IP 范围"
|
||||||
"Ads" = "屏蔽广告"
|
"Ads" = "屏蔽广告"
|
||||||
"AdsDesc" = "修改配置模板屏蔽广告"
|
"AdsDesc" = "修改配置模板屏蔽广告"
|
||||||
"Family" = "启用家庭友好配置"
|
"Family" = "阻止恶意软件和成人内容"
|
||||||
"FamilyDesc" = "避免为家人连接到不安全的网站"
|
"FamilyDesc" = "Cloudflare DNS 解析器可阻止恶意软件和成人内容以保护家庭."
|
||||||
|
"Security" = "阻止恶意软件、网络钓鱼和加密货币挖矿网站"
|
||||||
|
"SecurityDesc" = "更改安全防护配置模板."
|
||||||
"Speedtest" = "阻止测速网站"
|
"Speedtest" = "阻止测速网站"
|
||||||
"SpeedtestDesc" = "更改配置模板以避免连接到速度测试网站。 重新启动面板以应用更改。"
|
"SpeedtestDesc" = "更改配置模板以避免连接到速度测试网站。 重新启动面板以应用更改。"
|
||||||
"IRIp" = "禁止伊朗 IP 范围连接"
|
"IRIp" = "禁止伊朗 IP 范围连接"
|
||||||
|
@ -379,7 +381,7 @@
|
||||||
"SpotifyWARPDesc" = "为Spotify添加路由到WARP"
|
"SpotifyWARPDesc" = "为Spotify添加路由到WARP"
|
||||||
"IRWARP" = "将伊朗域名路由到 WARP"
|
"IRWARP" = "将伊朗域名路由到 WARP"
|
||||||
"IRWARPDesc" = "将伊朗域的路由添加到 WARP。 重启面板生效"
|
"IRWARPDesc" = "将伊朗域的路由添加到 WARP。 重启面板生效"
|
||||||
"Inbounds" = "界内"
|
"Inbounds" = "入站"
|
||||||
"InboundsDesc" = "更改配置模板接受特殊客户端"
|
"InboundsDesc" = "更改配置模板接受特殊客户端"
|
||||||
"Outbounds" = "出站"
|
"Outbounds" = "出站"
|
||||||
"OutboundsDesc" = "更改配置模板定义此服务器的传出方式"
|
"OutboundsDesc" = "更改配置模板定义此服务器的传出方式"
|
||||||
|
@ -407,7 +409,7 @@
|
||||||
"editOutbound" = "编辑出站"
|
"editOutbound" = "编辑出站"
|
||||||
"editReverse" = "编辑反向"
|
"editReverse" = "编辑反向"
|
||||||
"tag" = "标签"
|
"tag" = "标签"
|
||||||
"tagDesc" = "独特的标签"
|
"tagDesc" = "唯一标记"
|
||||||
"address" = "地址"
|
"address" = "地址"
|
||||||
"reverse" = "反转"
|
"reverse" = "反转"
|
||||||
"domain" = "域名"
|
"domain" = "域名"
|
||||||
|
@ -422,7 +424,7 @@
|
||||||
"loginSecurity" = "登录安全"
|
"loginSecurity" = "登录安全"
|
||||||
"loginSecurityDesc" = "在用户登录页面中切换附加步骤"
|
"loginSecurityDesc" = "在用户登录页面中切换附加步骤"
|
||||||
"secretToken" = "密钥"
|
"secretToken" = "密钥"
|
||||||
"secretTokenDesc" = "复制此密钥并将其保存在安全的地方;没有这个你将无法登录。这也无法从 x-ui 命令工具中恢复"
|
"secretTokenDesc" = "复制此密钥并将其保存在安全的地方;没有这个你将无法登录。这也无法从 x-ui 命令工具中恢复"
|
||||||
|
|
||||||
[pages.settings.toasts]
|
[pages.settings.toasts]
|
||||||
"modifySettings" = "修改设置"
|
"modifySettings" = "修改设置"
|
||||||
|
@ -549,4 +551,4 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }}:已成功启用。"
|
"enableSuccess" = "✅ {{ .Email }}:已成功启用。"
|
||||||
"disableSuccess" = "✅ {{ .Email }}:已成功禁用。"
|
"disableSuccess" = "✅ {{ .Email }}:已成功禁用。"
|
||||||
"askToAddUserId" = "未找到您的配置!\r\n请向管理员询问,在您的配置中使用您的 Telegram 用户ID。\r\n\r\n您的用户ID:<b>{{ .TgUserID }}</b>"
|
"askToAddUserId" = "未找到您的配置!\r\n请向管理员询问,在您的配置中使用您的 Telegram 用户ID。\r\n\r\n您的用户ID:<b>{{ .TgUserID }}</b>"
|
||||||
"askToAddUserName" = "未找到您的配置!\r\n请向管理员询问,在您的配置中使用您的 Telegram 用户名或用户ID。\r\n\r\n您的用户名:<b>@{{ .TgUserName }}</b>\r\n\r\n您的用户ID:<b>{{ .TgUserID }}</b>"
|
"askToAddUserName" = "未找到您的配置!\r\n请向管理员询问,在您的配置中使用您的 Telegram 用户名或用户ID。\r\n\r\n您的用户名:<b>@{{ .TgUserName }}</b>\r\n\r\n您的用户ID:<b>{{ .TgUserID }}</b>"
|
Loading…
Reference in a new issue