Overall text enhancement (#892)

* Update translate.zh_Hans.toml

* Update translate.vi_VN.toml

* Update translate.ru_RU.toml

* Update translate.fa_IR.toml

* Update translate.en_US.toml

* Update client_bulk_modal.html

* Update client.html

* Update inbound.html

* Update index.html

* Update warp_modal.html

* Update common_sider.html

* Update inbounds.html

* Update client_bulk_modal.html

* Update inbound.html

* Update client.html

* Update translate.en_US.toml

* Update translate.en_US.toml

* Update translate.en_US.toml

* Update translate.en_US.toml

* Update translate.fa_IR.toml

* Update translate.en_US.toml

* Update translate.en_US.toml

* Update translate.fa_IR.toml

* Update translate.vi_VN.toml

* Update translate.en_US.toml

* Update translate.fa_IR.toml

* Update translate.ru_RU.toml

* Update translate.zh_Hans.toml

* Update translate.vi_VN.toml

* Update translate.ru_RU.toml

* Update index.html

* Update index.html

* Update translate.en_US.toml

* Update translate.fa_IR.toml

* Update inbounds.html

* Update settings.html

* Update xray.html

* Update translate.en_US.toml

* Update translate.fa_IR.toml

* Update index.html

* Update index.html

* Update index.html

* Update index.html

* Update server.go

---------

Co-authored-by: Alireza Ahmadi <alireza7@gmail.com>
This commit is contained in:
Shahin
2024-02-13 17:38:06 +00:00
committed by GitHub
parent 44a1104bff
commit 294a3f46a0
15 changed files with 305 additions and 270 deletions

View File

@@ -61,13 +61,13 @@
<template slot="label">
<a-tooltip>
<template slot="title">
0 <span>{{ i18n "pages.inbounds.meansNoLimit" }}</span>
<span>{{ i18n "pages.inbounds.meansNoLimit" }}</span>
</template>
{{ i18n "pages.inbounds.totalFlow" }} (GB)
{{ i18n "pages.inbounds.totalFlow" }}
<a-icon type="question-circle"></a-icon>
</a-tooltip>
</template>
<a-input-number v-model="clientsBulkModal.totalGB" :min="0"></a-input-number>
<a-input-number v-model="clientsBulkModal.totalGB" :min="0"></a-input-number> GB
</a-form-item>
<a-form-item label='{{ i18n "pages.client.delayedStart" }}'>
<a-switch v-model="clientsBulkModal.delayedStart" @click="clientsBulkModal.expiryTime=0"></a-switch>

View File

@@ -1,23 +1,23 @@
{{define "menuItems"}}
<a-menu-item key="{{ .base_path }}xui/">
<a-icon type="dashboard"></a-icon>
<span>{{ i18n "menu.dashboard"}}</span>
<span><strong>{{ i18n "menu.dashboard"}}</strong></span>
</a-menu-item>
<a-menu-item key="{{ .base_path }}xui/inbounds">
<a-icon type="user"></a-icon>
<span>{{ i18n "menu.inbounds"}}</span>
<span><strong>{{ i18n "menu.inbounds"}}</strong></span>
</a-menu-item>
<a-menu-item key="{{ .base_path }}xui/settings">
<a-icon type="setting"></a-icon>
<span>{{ i18n "menu.settings"}}</span>
<span><strong>{{ i18n "menu.settings"}}</strong></span>
</a-menu-item>
<a-menu-item key="{{ .base_path }}xui/xray">
<a-icon type="tool"></a-icon>
<span>{{ i18n "menu.xray"}}</span>
<span><strong>{{ i18n "menu.xray"}}</strong></span>
</a-menu-item>
<a-menu-item key="{{ .base_path }}logout">
<a-icon type="logout"></a-icon>
<span>{{ i18n "menu.logout"}}</span>
<span><strong>{{ i18n "menu.logout"}}</strong></span>
</a-menu-item>
{{end}}

View File

@@ -73,13 +73,13 @@
<template slot="label">
<a-tooltip>
<template slot="title">
0 <span>{{ i18n "pages.inbounds.meansNoLimit" }}</span>
<span>{{ i18n "pages.inbounds.meansNoLimit" }}</span>
</template>
{{ i18n "pages.inbounds.totalFlow" }} (GB)
{{ i18n "pages.inbounds.totalFlow" }}
<a-icon type="question-circle"></a-icon>
</a-tooltip>
</template>
<a-input-number v-model="client._totalGB" :min="0"></a-input-number>
<a-input-number v-model="client._totalGB" :min="0"></a-input-number> GB
</a-form-item>
<a-form-item v-if="isEdit && clientStats" label='{{ i18n "usage" }}'>
<a-tag :color="clientUsageColor(clientStats, app.trafficDiff)">

View File

@@ -35,13 +35,13 @@
<template slot="label">
<a-tooltip>
<template slot="title">
0 <span>{{ i18n "pages.inbounds.meansNoLimit" }}</span>
<span>{{ i18n "pages.inbounds.meansNoLimit" }}</span>
</template>
{{ i18n "pages.inbounds.totalFlow" }} (GB)
{{ i18n "pages.inbounds.totalFlow" }}
<a-icon type="question-circle"></a-icon>
</a-tooltip>
</template>
<a-input-number v-model="dbInbound.totalGB" :min="0"></a-input-number>
<a-input-number v-model="dbInbound.totalGB" :min="0"></a-input-number> GB
</a-form-item>
<a-form-item>

View File

@@ -68,15 +68,15 @@
<a-card hoverable>
<a-row>
<a-col :xs="24" :sm="24" :lg="12">
{{ i18n "pages.inbounds.totalDownUp" }}:
<strong>{{ i18n "pages.inbounds.totalDownUp" }}:</strong>
<a-tag color="blue">[[ sizeFormat(total.up) ]] / [[ sizeFormat(total.down) ]]</a-tag>
</a-col>
<a-col :xs="24" :sm="24" :lg="12">
{{ i18n "pages.inbounds.totalUsage" }}:
<strong>{{ i18n "pages.inbounds.totalUsage" }}:</strong>
<a-tag color="blue">[[ sizeFormat(total.up + total.down) ]]</a-tag>
</a-col>
<a-col :xs="24" :sm="24" :lg="12">
{{ i18n "pages.inbounds.inboundCount" }}:
<strong>{{ i18n "pages.inbounds.inboundCount" }}:</strong>
<a-tag color="blue">[[ dbInbounds.length ]]</a-tag>
</a-col>
<a-col :xs="24" :sm="24" :lg="12">
@@ -84,7 +84,7 @@
<div>
<a-back-top :target="() => document.getElementById('content-layout')" visibility-height="200">
</a-back-top>
{{ i18n "clients" }}:
<strong>{{ i18n "clients" }}:</strong>
<a-tag color="blue">[[ total.clients ]]</a-tag>
<a-popover title='{{ i18n "disabled" }}' :overlay-class-name="themeSwitcher.currentTheme">
<template slot="content">
@@ -145,7 +145,7 @@
<a-icon type="file-done"></a-icon>
{{ i18n "pages.inbounds.resetAllClientTraffics" }}
</a-menu-item>
<a-menu-item key="delDepletedClients">
<a-menu-item key="delDepletedClients" style="color: #FF4D4F;">
<a-icon type="rest"></a-icon>
{{ i18n "pages.inbounds.delDepletedClients" }}
</a-menu-item>
@@ -220,7 +220,7 @@
<a-icon type="export"></a-icon>
{{ i18n "pages.inbounds.export"}}
</a-menu-item>
<a-menu-item key="delDepletedClients">
<a-menu-item key="delDepletedClients" style="color: #FF4D4F;">
<a-icon type="rest"></a-icon>
{{ i18n "pages.inbounds.delDepletedClients" }}
</a-menu-item>

View File

@@ -44,14 +44,14 @@
<a-progress type="dashboard" status="normal"
:stroke-color="status.cpu.color"
:percent="status.cpu.percent"></a-progress>
<div>CPU: [[ cpuCoreFormat(status.cpuCount) ]]</div>
<div><strong>CPU:</strong> [[ cpuCoreFormat(status.cpuCount) ]]</div>
</a-col>
<a-col :span="12" style="text-align: center">
<a-progress type="dashboard" status="normal"
:stroke-color="status.mem.color"
:percent="status.mem.percent"></a-progress>
<div>
{{ i18n "pages.index.memory"}}: [[ sizeFormat(status.mem.current) ]] / [[ sizeFormat(status.mem.total) ]]
<strong>{{ i18n "pages.index.memory"}}:</strong> [[ sizeFormat(status.mem.current) ]] / [[ sizeFormat(status.mem.total) ]]
</div>
</a-col>
</a-row>
@@ -63,7 +63,7 @@
:stroke-color="status.swap.color"
:percent="status.swap.percent"></a-progress>
<div>
Swap: [[ sizeFormat(status.swap.current) ]] / [[ sizeFormat(status.swap.total) ]]
<strong>Swap:</strong> [[ sizeFormat(status.swap.current) ]] / [[ sizeFormat(status.swap.total) ]]
</div>
</a-col>
<a-col :span="12" style="text-align: center">
@@ -71,7 +71,7 @@
:stroke-color="status.disk.color"
:percent="status.disk.percent"></a-progress>
<div>
{{ i18n "pages.index.hard"}}: [[ sizeFormat(status.disk.current) ]] / [[ sizeFormat(status.disk.total) ]]
<strong>{{ i18n "pages.index.hard"}}:</strong> [[ sizeFormat(status.disk.current) ]] / [[ sizeFormat(status.disk.total) ]]
</div>
</a-col>
</a-row>
@@ -84,32 +84,45 @@
<a-row>
<a-col :sm="24" :md="12">
<a-card hoverable>
X-UI <a href="https://github.com/alireza0/x-ui/releases" target="_blank"><a-tag color="blue">{{ .cur_ver }}</a-tag></a>
Xray
<a-tooltip title='{{ i18n "pages.index.xraySwitch" }}'>
<a-tag color="blue" style="cursor: pointer;" @click="openSelectV2rayVersion">[[ status.xray.version ]]</a-tag>
<strong>{{ i18n "pages.index.machineInfo" }}:</strong>
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.hostname" }}
</template>
<a-tag color="blue" style="margin-right: 3px;">[[ status.hostInfo.hostname ]]</a-tag>
</a-tooltip>
<template v-if="status.hostInfo.ipv4">
<a-tooltip>
<template slot="title">
IPv4:<br>[[ status.hostInfo.ipv4 ]]<br>IPv6:<br>[[ status.hostInfo.ipv6 ]]
</template>
<a-tag color="blue" style="margin-right: 3px;">IPv4/v6</a-tag>
</a-tooltip>
<a href="https://github.com/alireza0/x-ui/releases" target="_blank"><a-tag color="purple">X-UI {{ .cur_ver }}</a-tag></a>
</template>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
{{ i18n "pages.index.operationHours" }}:
Xray
<a-tag color="blue">[[ formatSecond(status.appStats.uptime) ]]</a-tag>
OS
<strong>{{ i18n "pages.index.operationHours" }}:</strong>
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.xrayoperationHoursDesc" }}
</template>
<a-tag color="blue" style="margin-right: 3px;">Xray [[ formatSecond(status.appStats.uptime) ]]</a-tag>
</a-tooltip>
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.operationHoursDesc" }}
</template>
<a-icon type="question-circle"></a-icon>
<a-tag color="blue">OS [[ formatSecond(status.uptime) ]]</a-tag>
</a-tooltip>
<a-tag color="blue">[[ formatSecond(status.uptime) ]]</a-tag>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
{{ i18n "pages.index.xrayStatus" }}:
<a-tag :color="status.xray.color">[[ status.xray.state ]]</a-tag>
<strong>{{ i18n "pages.index.xrayStatus" }}:</strong>
<a-tag :color="status.xray.color" style="margin-right: 3px;"><strong>[[ status.xray.state ]]</strong></a-tag>
<a-popover v-if="status.xray.state === State.Error"
:overlay-class-name="themeSwitcher.currentTheme">
<span slot="title" style="font-size: 12pt">An error occurred while running Xray
@@ -118,73 +131,64 @@
<template slot="content">
<p style="max-width: 400px" v-for="line in status.xray.errorMsg.split('\n')">[[ line ]]</p>
</template>
<a-icon type="question-circle"></a-icon>
<a-icon type="exclamation-circle"></a-icon>
</a-popover>
<a-tag color="purple" style="cursor: pointer;" @click="stopXrayService">{{ i18n "pages.index.stopXray" }}</a-tag>
<a-tag color="purple" style="cursor: pointer;" @click="restartXrayService">{{ i18n "pages.index.restartXray" }}</a-tag>
<a-tag color="purple" style="cursor: pointer; margin-right: 3px;" @click="stopXrayService">{{ i18n "pages.index.stopXray" }}</a-tag>
<a-tag color="purple" style="cursor: pointer; margin-right: 3px;" @click="restartXrayService">{{ i18n "pages.index.restartXray" }}</a-tag>
<a-tooltip title='{{ i18n "pages.index.xraySwitch" }}'>
<a-tag color="purple" style="cursor: pointer;" @click="openSelectV2rayVersion">[[ status.xray.version ]]</a-tag>
</a-tooltip>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
{{ i18n "menu.link" }}:
<a-tag color="purple" style="cursor: pointer;" @click="openLogs()">{{ i18n "pages.index.logs" }}</a-tag>
<a-tag color="purple" style="cursor: pointer;" @click="openConfig">{{ i18n "pages.index.config" }}</a-tag>
<strong>{{ i18n "menu.link" }}:</strong>
<a-tag color="purple" style="cursor: pointer; margin-right: 3px;" @click="openLogs()">{{ i18n "pages.index.logs" }}</a-tag>
<a-tag color="purple" style="cursor: pointer; margin-right: 3px;" @click="openConfig">{{ i18n "pages.index.config" }}</a-tag>
<a-tag color="purple" style="cursor: pointer;" @click="openBackup">{{ i18n "pages.index.backup" }}</a-tag>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
{{ i18n "pages.index.systemLoad" }}: [[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]]
<strong>{{ i18n "pages.index.systemLoad" }}:</strong>
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.systemLoadDesc" }}
</template>
<a-tag color="blue">[[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]]</a-tag>
</a-tooltip>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
{{ i18n "usage"}}:
RAM: [[ sizeFormat(status.appStats.mem) ]] -
Threads: [[ status.appStats.threads ]]
</a-tooltip>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
Host: [[ status.hostInfo.hostname ]] -
<template v-if="status.hostInfo.ipv4">IPv4:
<strong>{{ i18n "usage" }}:</strong>
<a-tooltip>
<template slot="title">
[[ status.hostInfo.ipv4 ]]
</template>
<a-icon type="question-circle"></a-icon>
<a-tag color="blue" style="margin-right: 3px;">RAM [[ sizeFormat(status.appStats.mem) ]]</a-tag>
</a-tooltip>
</template>
<template v-if="status.hostInfo.ipv6">IPv6:
<a-tooltip>
<template slot="title">
[[ status.hostInfo.ipv6 ]]
</template>
<a-icon type="question-circle"></a-icon>
<a-tag color="blue">Threads [[ status.appStats.threads ]]</a-tag>
</a-tooltip>
</template>
</a-card>
</a-col>
<a-col :sm="24" :md="12">
<a-card hoverable>
<a-row>
<a-col :span="12">
TCP: [[ status.tcpCount ]]
<a-icon type="swap"></a-icon>
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.connectionTcpCountDesc" }}
</template>
<a-icon type="question-circle"></a-icon>
<strong>TCP:</Strong> [[ status.tcpCount ]]
</a-tooltip>
</a-col>
<a-col :span="12">
UDP: [[ status.udpCount ]]
<a-icon type="swap"></a-icon>
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.connectionUdpCountDesc" }}
</template>
<a-icon type="question-circle"></a-icon>
<strong>UDP:</strong> [[ status.udpCount ]]
</a-tooltip>
</a-col>
</a-row>
@@ -195,22 +199,20 @@
<a-row>
<a-col :span="12">
<a-icon type="arrow-up"></a-icon>
[[ sizeFormat(status.netIO.up) ]]/s
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.upSpeed" }}
</template>
<a-icon type="question-circle"></a-icon>
<strong>UL:</strong> [[ sizeFormat(status.netIO.up) ]]/s
</a-tooltip>
</a-col>
<a-col :span="12">
<a-icon type="arrow-down"></a-icon>
[[ sizeFormat(status.netIO.down) ]]/s
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.downSpeed" }}
</template>
<a-icon type="question-circle"></a-icon>
<strong>DL:</strong> [[ sizeFormat(status.netIO.down) ]]/s
</a-tooltip>
</a-col>
</a-row>
@@ -221,22 +223,20 @@
<a-row>
<a-col :span="12">
<a-icon type="cloud-upload"></a-icon>
[[ sizeFormat(status.netTraffic.sent) ]]
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.totalSent" }}
</template>
<a-icon type="question-circle"></a-icon>
<strong>Out:</strong> [[ sizeFormat(status.netTraffic.sent) ]]
</a-tooltip>
</a-col>
<a-col :span="12">
<a-icon type="cloud-download"></a-icon>
[[ sizeFormat(status.netTraffic.recv) ]]
<a-tooltip>
<template slot="title">
{{ i18n "pages.index.totalReceive" }}
</template>
<a-icon type="question-circle"></a-icon>
<strong>In:</strong> [[ sizeFormat(status.netTraffic.recv) ]]
</a-tooltip>
</a-col>
</a-row>
@@ -297,12 +297,12 @@
</a-form-item>
<a-form-item>
<a-button type="primary" style="margin-bottom: 10px;"
:href="'data:application/text;charset=utf-8,' + encodeURIComponent(logModal.logs.join('\n'))" download="x-ui.log">
:href="'data:application/text;charset=utf-8,' + encodeURIComponent(logModal.logs)" download="x-ui.log">
{{ i18n "download" }} x-ui.log
</a-button>
</a-form-item>
</a-form>
<div class="ant-input" style="height: auto; max-height: 500px; overflow: auto;" v-html="logModal.formattedLogs"></div>
<div class="ant-input" style="height: auto; max-height: 500px; overflow: auto;" v-html="logModal.logs"></div>
</a-modal>
<a-modal id="backup-modal" v-model="backupModal.visible" :title="backupModal.title"
@@ -330,9 +330,9 @@
{{template "textModal"}}
<script>
const State = {
Running: "running",
Stop: "stop",
Error: "error",
Running: "Running",
Stop: "Stop",
Error: "Error",
}
Object.freeze(State);
@@ -400,7 +400,7 @@
this.xray = data.xray;
switch (this.xray.state) {
case State.Running:
this.xray.color = "blue";
this.xray.color = '#3dbd7d';
break;
case State.Stop:
this.xray.color = "orange";
@@ -428,8 +428,7 @@
const logModal = {
visible: false,
logs: [],
formattedLogs: '',
logs: '',
rows: 20,
level: 'info',
syslog: false,

View File

@@ -16,6 +16,7 @@
}
.ant-tabs-bar {
font-weight: bold;
margin: 0;
}
@@ -322,4 +323,4 @@
});
</script>
</body>
</html>
</html>

View File

@@ -12,7 +12,7 @@
<td>[[ warpModal.warpData.access_token ]]</td>
</tr>
<tr>
<td>Devide ID</td>
<td>Device ID</td>
<td>[[ warpModal.warpData.device_id ]]</td>
</tr>
<tr class="client-table-odd-row">
@@ -24,19 +24,19 @@
<td>[[ warpModal.warpData.private_key ]]</td>
</tr>
</table>
<a-divider style="margin: 0;">{{ i18n "pages.settings.toasts.modifySettings" }}</a-divider>
<a-divider style="margin: 0;">{{ i18n "pages.xray.outbound.settings" }}</a-divider>
<a-collapse style="margin: 10px 0;">
<a-collapse-panel header='WARP/WARP+ License Key'>
<a-form :colon="false" :label-col="{ md: {span:6} }" :wrapper-col="{ md: {span:14} }">
<a-form-item label="License Key">
<a-form-item label="Key">
<a-input v-model="warpPlus"></a-input>
<a-button @click="updateLicense(warpPlus)" :disabled="warpPlus.length<26" :loading="warpModal.confirmLoading">{{ i18n "pages.inbounds.update" }}</a-button>
</a-form-item>
</a-form>
</a-collapse-panel>
</a-collapse>
<a-divider style="margin: 0;">{{ i18n "pages.settings.toasts.getSettings" }}</a-divider>
<a-button icon="sync" @click="getConfig" style="margin-bottom: 10px;" :loading="warpModal.confirmLoading">{{ i18n "info" }}</a-button>
<a-divider style="margin: 0;">{{ i18n "pages.xray.outbound.accountInfo" }}</a-divider>
<a-button icon="sync" @click="getConfig" style="margin-top: 5px; margin-bottom: 10px;" :loading="warpModal.confirmLoading" type="primary">{{ i18n "info" }}</a-button>
<template v-if="!ObjectUtil.isEmpty(warpModal.warpConfig)">
<table style="width: 100%">
<tr class="client-table-odd-row">
@@ -48,7 +48,7 @@
<td>[[ warpModal.warpConfig.model ]]</td>
</tr>
<tr class="client-table-odd-row">
<td>Device Active</td>
<td>Device Enabled</td>
<td>[[ warpModal.warpConfig.enabled ]]</td>
</tr>
<template v-if="!ObjectUtil.isEmpty(warpModal.warpConfig.account)">
@@ -61,7 +61,7 @@
<td>[[ warpModal.warpConfig.account.role ]]</td>
</tr>
<tr>
<td>Premium Data</td>
<td>WARP+ Data</td>
<td>[[ sizeFormat(warpModal.warpConfig.account.premium_data) ]]</td>
</tr>
<tr class="client-table-odd-row">
@@ -74,16 +74,15 @@
</tr>
</template>
</table>
<a-divider style="margin: 10px 0;">WARP {{ i18n "pages.xray.rules.outbound" }}</a-divider>
<a-divider style="margin: 10px 0;">{{ i18n "pages.xray.outbound.outboundStatus" }}</a-divider>
<a-form :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
<a-form-item label="{{ i18n "status" }}">
<template v-if="warpOutboundIndex>=0">
<a-tag color="green">{{ i18n "enabled" }}</a-tag>
<a-button @click="resetOutbound" :loading="warpModal.confirmLoading">{{ i18n "reset" }}</a-button>
<a-tag color="green" style="line-height: 31px;">{{ i18n "enabled" }}</a-tag>
<a-button @click="resetOutbound" :loading="warpModal.confirmLoading" type="danger">{{ i18n "reset" }}</a-button>
</template>
<template v-else>
<a-tag color="orange">{{ i18n "disabled" }}</a-tag>
<a-button @click="addOutbound" :loading="warpModal.confirmLoading">{{ i18n "pages.xray.outbound.addOutbound" }}</a-button>
<a-tag color="orange" style="line-height: 31px;">{{ i18n "disabled" }}</a-tag>
<a-button @click="addOutbound" :loading="warpModal.confirmLoading" type="primary">{{ i18n "pages.xray.outbound.addOutbound" }}</a-button>
</template>
</a-form-item>
</a-form>

View File

@@ -37,6 +37,7 @@
}
.ant-tabs-bar {
font-weight: bold;
margin: 0;
}

View File

@@ -33,9 +33,9 @@ import (
type ProcessState string
const (
Running ProcessState = "running"
Stop ProcessState = "stop"
Error ProcessState = "error"
Running ProcessState = "Running"
Stop ProcessState = "Stop"
Error ProcessState = "Error"
)
type Status struct {

View File

@@ -43,24 +43,24 @@
"domainName" = "Domain Name"
"monitor" = "Listen IP"
"certificate" = "Certificate"
"fail" = " Fail"
"fail" = " Failed"
"success" = " Successful"
"getVersion" = "Get Version"
"install" = "Install"
"clients" = "Clients"
"usage" = "Usage"
"remained" = "Remained"
"remained" = "Remaining"
"secAlertTitle" = "Security Alert"
"secAlertSsl" = "THIS CONNECTION IS NOT SECURE. PLEASE AVOID ENTERING SENSITIVE INFORMATION UNTIL TLS IS ACTIVATED FOR DATA PROTECTION."
"secAlertSsl" = "This connection is not secure. Please avoid entering sensitive information until TLS is activated for data protection."
"security" = "Security"
[menu]
"dashboard" = "OVERVIEW"
"inbounds" = "INBOUNDS"
"settings" = "PANEL SETTINGS"
"xray" = "XRAY CONFIGS"
"logout" = "LOG OUT"
"link" = "Management"
"dashboard" = "Overview"
"inbounds" = "Inbounds"
"settings" = "Panel Settings"
"xray" = "Xray Configs"
"logout" = "Log Out"
"link" = "Manage"
[pages.login]
"title" = "Welcome"
@@ -77,30 +77,34 @@
"title" = "Overview"
"memory" = "RAM"
"hard" = "Disk"
"xrayStatus" = "Status"
"machineInfo" = "Machine"
"hostname" = "Hostname"
"xrayStatus" = "Xray"
"stopXray" = "Stop"
"restartXray" = "Restart"
"xraySwitch" = "Change Xray Version"
"xraySwitchClick" = "Choose the version you want to switch."
"xraySwitchClickDesk" = "Choose carefully, as older versions may not be compatible with the current configurations."
"operationHours" = "Uptime"
"operationHoursDesc" = "Time since startup"
"operationHoursDesc" = "Uptime since OS startup"
"xrayoperationHoursDesc" = "Uptime since Xray last restart"
"systemLoad" = "System Load"
"connectionTcpCountDesc" = "Total TCP connections across all networks"
"connectionUdpCountDesc" = "Total UDP connections across all networks"
"upSpeed" = "Overall upload speed across all networks"
"downSpeed" = "Overall download speed across all networks"
"totalSent" = "Total traffic sent across all networks since OS startup"
"totalReceive" = "Total traffic received across all networks since OS startup"
"systemLoadDesc" = "Average load for the past 1, 5, and 15 minutes"
"connectionTcpCountDesc" = "Total TCP connections"
"connectionUdpCountDesc" = "Total UDP connections"
"upSpeed" = "Overall upload speed"
"downSpeed" = "Overall download speed"
"totalSent" = "Total data sent since OS startup"
"totalReceive" = "Total data received since OS startup"
"xraySwitchVersionDialog" = "Change Xray Version"
"xraySwitchVersionDialogDesc" = "Are you sure you want to change the Xray version to"
"dontRefresh" = "Installation is in progress, please do not refresh this page."
"logs" = "Logs"
"config" = "Config"
"backup" = "Backup & Restore"
"backupTitle" = "Backup & Restore Database"
"backupDescription" = "It is recommended to make a backup before importing a new database."
"exportDatabase" = "Backup"
"backupTitle" = "Database Backup & Restore"
"backupDescription" = "It is recommended to make a backup before restoring a database."
"exportDatabase" = "Get Backup"
"importDatabase" = "Restore"
[pages.inbounds]
@@ -116,13 +120,13 @@
"traffic" = "Traffic"
"details" = "Details"
"transportConfig" = "Transport Config"
"expireDate" = "Expiry Date"
"expireDate" = "Expiration"
"resetTraffic" = "Reset Traffic"
"addInbound" = "Add Inbound"
"generalActions" = "General Actions"
"create" = "Create"
"update" = "Update"
"modifyInbound" = "Modify Inbound"
"modifyInbound" = "Edit Inbound"
"deleteInbound" = "Delete Inbound"
"deleteInboundContent" = "Are you sure you want to delete inbound?"
"deleteClient" = "Delete Client"
@@ -134,8 +138,8 @@
"destinationPort" = "Destination Port"
"targetAddress" = "Target Address"
"monitorDesc" = "Leave blank to listen on all IPs"
"meansNoLimit" = "Means no limit"
"totalFlow" = "Total Flow"
"meansNoLimit" = "Zero means unlimited. (Unit: GB)"
"totalFlow" = "Total Traffic"
"leaveBlankToNeverExpire" = "Leave blank to never expire"
"noRecommendKeepDefault" = "It is recommended to keep the default"
"certificatePath" = "File Path"
@@ -149,7 +153,7 @@
"export" = "Export All URLs"
"clone" = "Clone"
"cloneInbound" = "Clone"
"cloneInboundContent" = "All settings for this inbound, except Port, Listening IP, and Clients, will be applied to the clone."
"cloneInboundContent" = "All settings for this inbound, except Port, Listen IP, and Clients, will be applied to the clone."
"cloneInboundOk" = "Clone"
"resetAllTraffic" = "Reset All Inbounds Traffic"
"resetAllTrafficTitle" = "Reset All Inbounds Traffic"
@@ -166,8 +170,8 @@
"email" = "Email"
"emailDesc" = "Please provide a unique email address"
"setDefaultCert" = "Set Cert from Panel"
"telegramDesc" = "Please provide Telegram or Chat ID(s) without using the '@'. (get it here @userinfobot) or (use '/id' command in the bot)"
"subscriptionDesc" = "To find your subscription URL, navigate to the 'Details'. Additionally, you can use the same name for several clients."
"telegramDesc" = "Please provide Chat ID(s) without using the '@' symbol. (Get it here @userinfobot) or (Use '/id' command in the bot)"
"subscriptionDesc" = "To find your subscription URL, navigate to the 'More Information'. Additionally, you can use the same name for several clients."
"info" = "Info"
"same" = "Same"
"inboundData" = "Inbound's Data"
@@ -187,11 +191,11 @@
"last" = "Last"
"prefix" = "Prefix"
"postfix" = "Postfix"
"delayedStart" = "Start after First Use"
"delayedStart" = "Start on Initial Use"
"expireDays" = "Duration"
"days" = "Day(s)"
"renew" = "Auto Renew"
"renewDesc" = "Auto-renewal after expiration. (0 = disable)(unit: day)"
"renewDesc" = "Auto-renewal after expiration. (0 = disable)(Unit: day)"
[pages.inbounds.toasts]
"obtain" = "Obtain"
@@ -221,23 +225,23 @@
"restartPanel" = "Restart Panel"
"restartPanelDesc" = "Are you sure you want to restart the panel? If you are unable to access the panel after restarting, please check the logs in the terminal script"
"resetDefaultConfig" = "Reset to Default"
"panelConfig" = "Configuration"
"panelConfig" = "General"
"userSettings" = "Authentication"
"TGBotSettings" = "Telegram Bot"
"panelListeningIP" = "Listen IP"
"panelListeningIPDesc" = "The IP address for the web panel. (leave blank to listen on all IPs)"
"panelListeningIPDesc" = "The IP address for the web panel. (Leave blank to listen on all IPs)"
"panelListeningDomain" = "Listen Domain"
"panelListeningDomainDesc" = "The domain name for the web panel. (leave blank to listen on all domains and IPs)"
"panelListeningDomainDesc" = "The domain name for the web panel. (Leave blank to listen on all domains and IPs)"
"panelPort" = "Listen Port"
"panelPortDesc" = "The port number for the web panel. (must be an unused port)"
"panelPortDesc" = "The port number for the web panel. (Must be an unused port)"
"publicKeyPath" = "Public Key Path"
"publicKeyPathDesc" = "The public key file path for the web panel. (begins with /)"
"publicKeyPathDesc" = "The public key file path for the web panel. (Begins with /)"
"privateKeyPath" = "Private Key Path"
"privateKeyPathDesc" = "The private key file path for the web panel. (begins with /)"
"privateKeyPathDesc" = "The private key file path for the web panel. (Begins with /)"
"panelUrlPath" = "URI Path"
"panelUrlPathDesc" = "The URI path for the web panel. (begins with / and concludes with /)"
"panelUrlPathDesc" = "The URI path for the web panel. (Begins with / and concludes with /)"
"pageSize" = "Pagination Size"
"pageSizeDesc" = "Define page size for the inbounds table. (0 = disable)"
"pageSizeDesc" = "The page size for the inbounds table. (0 = disable)"
"remarkModel" = "Remark Model & Separation Character"
"sampleRemark" = "Sample Remark"
"oldUsername" = "Current Username"
@@ -247,53 +251,53 @@
"telegramBotEnable" = "Enable Telegram Bot"
"telegramBotEnableDesc" = "Enables the Telegram bot."
"telegramToken" = "Telegram Token"
"telegramTokenDesc" = "The Telegram bot token obtained from '@BotFather'."
"telegramTokenDesc" = "The Telegram token. (Get it here @BotFather)"
"telegramChatId" = "Admin Chat ID"
"telegramChatIdDesc" = "The Telegram Admin Chat ID(s). (comma-separated)(use @userinfobot) or (use '/id' command in the bot)"
"telegramChatIdDesc" = "The Telegram Admin Chat ID(s). (Comma-separated)(Get it here @userinfobot) or (Use '/id' command in the bot)"
"telegramNotifyTime" = "Notification Time"
"telegramNotifyTimeDesc" = "The Telegram bot notification time set for periodic reports. (use the crontab time format)"
"telegramNotifyTimeDesc" = "The Telegram bot notification time set for periodic reports. (Use the crontab time format)"
"tgNotifyBackup" = "Database Backup"
"tgNotifyBackupDesc" = "Send a database backup file with a report."
"tgNotifyBackupDesc" = "Get a database backup file with a report."
"tgNotifyLogin" = "Login Notification"
"tgNotifyLoginDesc" = "Get notified about the username, IP address, and time whenever someone attempts to log into your web panel."
"tgNotifyLoginDesc" = "Get notified about the username, IP, and time whenever someone attempts to log into your web panel."
"sessionMaxAge" = "Session Duration"
"sessionMaxAgeDesc" = "The duration for which you can stay logged in. (unit: minute)"
"expireTimeDiff" = "Client Expiration Threshold Notification"
"expireTimeDiffDesc" = "Get notified about client expiration when reaching this threshold. (unit: day)"
"trafficDiff" = "Traffic Exhaustion Threshold Notification"
"trafficDiffDesc" = "Get notified about traffic exhaustion when reaching this threshold. (unit: GB)"
"tgNotifyCpu" = "CPU Load Threshold Notification"
"tgNotifyCpuDesc" = "Get notified if CPU usage exceeds this threshold. (unit: %)"
"sessionMaxAgeDesc" = "The duration for which you can stay logged in. (Unit: minute)"
"expireTimeDiff" = "Expiration Time Notification"
"expireTimeDiffDesc" = "Get notified when the remaining time reaches the set threshold. (Unit: day)"
"trafficDiff" = "Traffic Limit Notification"
"trafficDiffDesc" = "Get notified when remaining traffic reaches the set threshold. (Unit: GB)"
"tgNotifyCpu" = "CPU Load Notification"
"tgNotifyCpuDesc" = "Get notified if CPU load exceeds the set threshold. (Unit: %)"
"timeZone" = "Time Zone"
"timeZoneDesc" = "Scheduled tasks run based on this time zone."
"timeZoneDesc" = "Scheduled tasks will run based on this time zone."
"subSettings" = "Subscription"
"subEnable" = "Enable Subscription Service"
"subEnableDesc" = "Enables the subscription service."
"subListen" = "Listen IP"
"subListenDesc" = "The IP address for the subscription service. (leave blank to listen on all IPs)"
"subListenDesc" = "The IP address for the subscription service. (Leave blank to listen on all IPs)"
"subPort" = "Listen Port"
"subPortDesc" = "The port number for the subscription service. (must be an unused port)"
"subPortDesc" = "The port number for the subscription service. (Must be an unused port)"
"subCertPath" = "Public Key Path"
"subCertPathDesc" = "The public key file path for the subscription service. (begins with /)"
"subCertPathDesc" = "The public key file path for the subscription service. (Begins with /)"
"subKeyPath" = "Private Key Path"
"subKeyPathDesc" = "The private key file path for the subscription service. (begins with /)"
"subKeyPathDesc" = "The private key file path for the subscription service. (Begins with /)"
"subPath" = "URI Path"
"subPathDesc" = "The URI path for the subscription service. (begins with / and concludes with /)"
"subPathDesc" = "The URI path for the subscription service. (Begins with / and concludes with /)"
"subDomain" = "Listen Domain"
"subDomainDesc" = "The domain name for the subscription service. (leave blank to listen on all domains and IPs)"
"subDomainDesc" = "The domain name for the subscription service. (Leave blank to listen on all domains and IPs)"
"subUpdates" = "Update Intervals"
"subUpdatesDesc" = "The update intervals of the subscription URL in the client apps. (unit: hour)"
"subUpdatesDesc" = "The update intervals of the subscription URL in the client apps. (Unit: hour)"
"subEncrypt" = "Encode"
"subEncryptDesc" = "The returned content of subscription service will be Base64 encoded."
"subShowInfo" = "Show Usage Info"
"subShowInfoDesc" = "The remaining traffic and date will be displayed in the client apps."
"subURI" = "Reverse Proxy URI"
"subURIDesc" = "The URI path of the subscription URL for use behind proxies."
"subURIDesc" = "The subscription service will use the URI that has been set up behind reverse proxies."
[pages.settings.toasts]
"modifySettings" = "Modify Settings"
"getSettings" = "Get Settings"
"modifyUser" = "Modify User"
"modifyUser" = "Modify Admin"
"originalUserPassIncorrect" = "The current username or password is incorrect"
"userPassMustBeNotEmpty" = "The new username or password is required"
@@ -301,7 +305,7 @@
"title" = "Xray Configs"
"save" = "Save"
"restart" = "Restart Xray"
"basicTemplate" = "Basic"
"basicTemplate" = "Basics"
"advancedTemplate" = "Advanced"
"generalConfigs" = "General Strategy"
"generalConfigsDesc" = "These options will determine general strategy adjustments."
@@ -312,11 +316,11 @@
"directCountryConfigs" = "Direct Country"
"directCountryConfigsDesc" = "These options will directly forward traffic based on the specific requested country."
"ipv4Configs" = "IPv4 Routing"
"ipv4ConfigsDesc" = "These options will route requests to destination only via IPv4."
"warpConfigs" = "WARP Routing"
"warpConfigsDesc" = "WARP will route traffic to websites through Cloudflare servers."
"ipv4ConfigsDesc" = "These options will route traffic based on specific requested destination via system's IPv4."
"warpConfigs" = "WARP Config"
"warpConfigsDesc" = "These options will route traffic based on specific requested destination via WARP."
"Template" = "Advanced Xray Configuration Template"
"TemplateDesc" = "The final Xray configuration file will be generated based on this template."
"TemplateDesc" = "The final Xray config file will be generated based on this template."
"FreedomStrategy" = "Freedom Protocol Strategy"
"FreedomStrategyDesc" = "Set the output strategy for the network in the Freedom Protocol."
"RoutingStrategy" = "Overall Routing Strategy"
@@ -360,7 +364,7 @@
"GoogleWARP" = "Google"
"GoogleWARPDesc" = "Routes traffic to Google via WARP."
"OpenAIWARP" = "ChatGPT"
"OpenAIWARPDesc" = "Routes traffic to OpenAI (ChatGPT) via WARP."
"OpenAIWARPDesc" = "Routes traffic to ChatGPT via WARP."
"NetflixWARP" = "Netflix"
"NetflixWARPDesc" = "Routes traffic to Netflix via WARP."
"SpotifyWARP" = "Spotify"
@@ -399,6 +403,9 @@
"bridge" = "Bridge"
"portal" = "Portal"
"intercon" = "Interconnection"
"settings" = "Settings"
"accountInfo" = "Account Information"
"outboundStatus" = "Outbound Status"
[pages.xray.wireguard]
"secretKey" = "Secret Key"
@@ -428,11 +435,11 @@
"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, simply 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/Shadowsocks."
"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, simply 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/Shadowsocks."
[tgbot.messages]
"cpuThreshold" = "🔴 CPU load {{ .Percent }}% = CPU load {{ .Percent }}% is more than the threshold of {{ .Threshold }}%"
"cpuThreshold" = "🔴 CPU load {{ .Percent }}% Exceeds the threshold of {{ .Threshold }}%"
"loginSuccess" = "✅ Logged in to the web panel successfully.\r\n"
"loginFailed" = "❗Log in to the web panel failed.\r\n"
"report" = "🕰 Scheduled reports: {{ .RunTime }}\r\n"
@@ -448,12 +455,12 @@
"tcpCount" = "🔹 TCP: {{ .Count }}\r\n"
"udpCount" = "🔸 UDP: {{ .Count }}\r\n"
"traffic" = "🚦 Traffic: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
"xrayStatus" = " Xray status: {{ .State }}\r\n"
"xrayStatus" = " Status: {{ .State }}\r\n"
"username" = "👤 Username: {{ .Username }}\r\n"
"time" = "⏰ Time: {{ .Time }}\r\n"
"inbound" = "📍 Inbound: {{ .Remark }}\r\n"
"port" = "🔌 Port: {{ .Port }}\r\n"
"expire" = "📅 Expire date: {{ .DateTime }}\r\n \r\n"
"expire" = "📅 Expiry date: {{ .DateTime }}\r\n \r\n"
"expireIn" = "📅 Expire in: {{ .Time }}\r\n \r\n"
"active" = "💡 Active: {{ .Enable }}\r\n"
"online" = "🌐 Connection status: {{ .Status }}\r\n"
@@ -462,7 +469,7 @@
"download" = "🔽 Download↓: {{ .Download }}\r\n"
"total" = "🔄 Total: {{ .UpDown }} / {{ .Total }}\r\n"
"exhaustedMsg" = "🚨 Exhausted {{ .Type }}:\r\n"
"exhaustedCount" = "🚨 Exhausted {{ .Type }} count:\r\n"
"exhaustedCount" = "🚨 Exhausted {{ .Type }} Count:\r\n"
"onlinesCount" = "🌐 Online clients: {{ .Count }}\r\n"
"disabled" = "🛑 Disabled: {{ .Disabled }}\r\n"
"depleteSoon" = "🔜 Deplete soon: {{ .Deplete }}\r\n \r\n"
@@ -471,8 +478,8 @@
"no" = "❌ No"
[tgbot.buttons]
"dbBackup" = "Get DB Backup"
"serverUsage" = "Server Usage"
"dbBackup" = "Get Backup"
"serverUsage" = "System Usage"
"getInbounds" = "Get Inbounds"
"depleteSoon" = "Deplete Soon"
"clientUsage" = "Get Usage"
@@ -481,5 +488,5 @@
[tgbot.answers]
"getInboundsFailed" = "❌ Failed to get inbounds"
"askToAddUser" = "Your configuration is not found!\r\nYou should configure your Telegram username and ask your Admin to add it to your configuration(s)."
"askToAddUserName" = "Your configuration is not found!\r\nPlease ask your Admin to use your Telegram username in your configuration(s).\r\n\r\nYour username: <b>@{{ .TgUserName }}</b>"
"askToAddUser" = "Your configuration is not found!\r\nPlease set a Telegram username, and then ask the service admin to add it to the configuration(s)."
"askToAddUserName" = "Your configuration is not found!\r\nPlease ask the service admin to add your Telegram username to the configuration(s).\r\n\r\nYour Username: <b>@{{ .TgUserName }}</b>"

View File

@@ -21,7 +21,7 @@
"indefinite" = "نامحدود"
"unlimited" = "نامحدود"
"none" = "هیچ"
"qrCode" = "QRکد"
"qrCode" = "QR کد"
"info" = "اطلاعات بیشتر"
"edit" = "ویرایش"
"delete" = "حذف"
@@ -41,7 +41,7 @@
"offline" = "آفلاین"
"online" = "آنلاین"
"domainName" = "آدرس دامنه"
"monitor" = "آی‌پی اتصال"
"monitor" = درس آی‌پی"
"certificate" = "گواهی"
"fail" = "ناموفق"
"success" = " موفق"
@@ -51,7 +51,7 @@
"usage" = "استفاده"
"remained" = "باقی‌مانده"
"secAlertTitle" = "هشدار‌امنیتی"
"secAlertSsl" = "این‌اتصال‌امن نیست. لطفا‌ تازمانی‌که تی‌ال‌اس برای محافظت از‌ داده‌ها فعال نشده‌است، از وارد کردن اطلاعات حساس خودداریکنید"
"secAlertSsl" = "این‌اتصال‌امن نیست. لطفا‌ تازمانی‌که تی‌ال‌اس برای محافظت از‌ داده‌ها فعال نشده‌است، از وارد کردن اطلاعات حساس خودداری کنید"
"security" = "امنیت"
[menu]
@@ -64,7 +64,7 @@
[pages.login]
"title" = "خوش‌آمدید"
"loginAgain" = "مدت زمان استفاده به‌اتمام‌رسیده، لطفا دوباره وارد شوید"
"loginAgain" = "مدت زمان استفاده به‌اتمام ‌رسیده، لطفا دوباره وارد شوید"
[pages.login.toasts]
"invalidFormData" = "اطلاعات به‌درستی وارد نشده‌است"
@@ -77,44 +77,48 @@
"title" = "نمای کلی"
"memory" = "RAM"
"hard" = "Disk"
"xrayStatus" = "وضعیت‌ایکس‌ری"
"machineInfo" = "ماشین"
"hostname" = "نام میزبان"
"xrayStatus" = "‌ایکس‌ری"
"stopXray" = "توقف"
"restartXray" = "شروع‌مجدد"
"xraySwitch" = "تغییر‌نسخه"
"restartXray" = "ریستارت"
"xraySwitch" = "تغییر‌ نسخه ایکس‌ری"
"xraySwitchClick" = "نسخه‌ مورد نظر را انتخاب کنید"
"xraySwitchClickDesk" = "لطفا بادقت انتخاب کنید. درصورت انتخاب نسخه قدیمی‌تر، امکان ناهماهنگی با پیکربندی فعلی وجود دارد"
"xraySwitchClickDesk" = "لطفا بادقت انتخاب کنید. درصورت انتخاب نسخه قدیمی‌تر، امکان ناهماهنگی با پیکربندی‌های فعلی وجود دارد"
"operationHours" = "مدت‌کارکرد"
"operationHoursDesc" = "مدت فعالیت سیستم‌عامل پس‌از شروع به‌کار"
"operationHoursDesc" = "مدت کارکرد سیستم‌عامل پس‌از شروع به‌کار"
"xrayoperationHoursDesc" = "مدت کارکرد ایکس‌ری پس‌از آخرین ریستارت"
"systemLoad" = "بارسیستم"
"connectionTcpCountDesc" = "در تمام‌شبکه‌ها TCP مجموع‌اتصالات"
"connectionUdpCountDesc" = "در تمام‌شبکه‌ها UDP مجموع‌اتصالات"
"upSpeed" = "سرعت کلی آپلود در تمام‌شبکه‌ها"
"downSpeed" = "سرعت کلی دانلود در تمام‌شبکه‌ها"
"totalSent" = "مجموع ترافیک ارسال‌‌شده پس‌از شروع‌به‌کار سیستم‌عامل"
"totalReceive" = "مجموع ترافیک دریافت‌شده پس‌از شروعبه‌کار سیستم‌عامل"
"systemLoadDesc" = "میانگین بار در 1، 5 و 15 دقیقه گذشته"
"connectionTcpCountDesc" = "TCP کل اتصالات"
"connectionUdpCountDesc" = "UDP کل اتصالات"
"upSpeed" = "سرعت کلی آپلود"
"downSpeed" = "‌سرعت کلی دانلود"
"totalSent" = "کل ترافیک ارسالی پس‌از شروع به‌کار سیستم‌عامل"
"totalReceive" = "کل ترافیک دریافتی پس‌از شروع به‌کار سیستم‌عامل"
"xraySwitchVersionDialog" = "تغییرنسخه‌ایکس‌ری"
"xraySwitchVersionDialogDesc" = "آیا از تغییر نسخه‌ مطمئن هستید؟"
"dontRefresh" = "در حال نصب، لطفا صفحه را رفرش نکنید"
"logs" = "گزارش‌ها"
"config" = "پیکربندی"
"backup" = "پشتیبان‌گیری"
"backupTitle" = "پشتیبان‌گیری دیتابیس"
"backupDescription" = "توصیه‌می‌شود قبل‌از واردکردن یک دیتابیس جدید، نسخه پشتیبان تهیه ‌کنید"
"config" = "کانفیگ"
"backup" = "پشتیبان‌گیری و بازیابی"
"backupTitle" = "پشتیبان‌گیری و بازیابی دیتابیس"
"backupDescription" = "توصیه‌می‌شود قبل‌از بازیابی دیتابیس، یک نسخه پشتیبان تهیه ‌کنید"
"exportDatabase" = "پشتیبان‌گیری"
"importDatabase" = "بازگرداندن"
"importDatabase" = "بازیابی"
[pages.inbounds]
"title" = "کاربران"
"totalDownUp" = "دریافت/ارسال کل"
"totalUsage" = "‌‌‌مصرف کل"
"inboundCount" = "کل ورودی‌ها"
"operate" = "عملیات"
"operate" = "منو"
"enable" = "فعال"
"remark" = "نام"
"protocol" = "پروتکل"
"port" = "پورت"
"traffic" = "ترافیک"
"details" = "توضیحات"
"details" = "جزئیات"
"transportConfig" = "نحوه اتصال"
"expireDate" = "تاریخ انقضا"
"resetTraffic" = "ریست ترافیک"
@@ -133,8 +137,8 @@
"network" = "شبکه"
"destinationPort" = "پورت مقصد"
"targetAddress" = "آدرس مقصد"
"monitorDesc" = ه‌طور پیش‌فرض خالی‌بگذارید"
"meansNoLimit" = "یعنی‌بدون‌محدودیت"
"monitorDesc" = رای گوش‌دادن به‌تمام آی‌پی‌ها خالی‌بگذارید"
"meansNoLimit" = "صفر یعنی نامحدود. واحد: گیگابایت"
"totalFlow" = "ترافیک کل"
"leaveBlankToNeverExpire" = "برای منقضی‌نشدن خالی‌بگذارید"
"noRecommendKeepDefault" = "توصیه‌می‌شود به‌طور پیش‌فرض حفظ‌شود"
@@ -144,7 +148,7 @@
"publicKeyContent" = "محتوای کلید عمومی"
"keyPath" = "مسیر کلید خصوصی"
"keyContent" = "محتوای کلید خصوصی"
"clickOnQRcode" = "برای کپی بر روی کدتصویری کلیک کنید"
"clickOnQRcode" = "برای کپی لینک بر روی کدتصویری کلیک کنید"
"client" = "کاربر"
"export" = "استخراج لینک‌ها"
"clone" = "شبیه‌سازی"
@@ -165,8 +169,8 @@
"email" = "ایمیل"
"emailDesc" = "باید یک ایمیل یکتا باشد"
"setDefaultCert" = "استفاده از گواهی پنل"
"telegramDesc" = " استفاده کنید'/id'یااز دستور @userinfobot آن‌را اینجا دریافت کنید .از آی‌دی(های) چت تلگرام بدون '@' استفاده کنید"
"subscriptionDesc" = "شما می‌توانید لینک سابسکربپشن خودرا در 'جزئیات' پیدا کنید، همچنین می‌توانید از همین نام برای چندین کاربر استفاده‌کنید"
"telegramDesc" = "دریافت کنید '/id'یا دستور @userinfobot آی‌دی(های) چت مدیر را بدون '@' واردکنید. از"
"subscriptionDesc" = "لینک سابسکربپشن خودرا در 'اطلاعات بیشتر' پیدا کنید، همچنین می‌توانید از همین نام برای چندین کاربر استفاده‌کنید"
"info" = "اطلاعات"
"same" = "همسان"
"inboundData" = "داده‌های ورودی"
@@ -218,23 +222,23 @@
"save" = "ذخیره"
"infoDesc" = "برای اعمال تغییرات در این بخش باید پس از ذخیره کردن، پنل را ریستارت کنید"
"restartPanel" = "ریستارت پنل"
"restartPanelDesc" = "آیا مطمئن به ریستارت پنل هستید؟ اگر پس‌از ریستارت نمی‌توانید به پنل دسترسی پیدا کنید، لطفاً گزارش‌های موجود در اسکریپت پنل را بررسی کنید"
"restartPanelDesc" = "آیا مطمئن به ریستارت پنل هستید؟ اگر پس‌از ریستارت نتوانستید به پنل دسترسی پیدا کنید، گزارش‌های موجود در اسکریپت پنل را بررسی کنید"
"resetDefaultConfig" = "برگشت به پیش‌فرض"
"panelConfig" = "پیکربندی"
"panelConfig" = "عمومی"
"userSettings" = "احرازهویت"
"TGBotSettings" = "ربات تلگرام"
"panelListeningIP" = "آدرس آی‌پی"
"panelListeningIPDesc" = "آدرس آی‌پی برای وب پنل. برای گوش‌دادن به‌تمام آی‌پی‌ها خالی‌بگذارید"
"panelListeningDomain" = "نام دامنه"
"panelListeningDomainDesc" = "آدرس دامنه برای وب پنل. برای گوش دادن به‌تمام دامنه‌ها و آی‌پی‌ها خالی‌بگذارید"
"panelPort" = "پورت"
"panelListeningDomainDesc" = "آدرس دامنه برای وب پنل. برای گوشدادن به‌تمام دامنه‌ها و آی‌پی‌ها خالی‌بگذارید"
"panelPort" = "شماره پورت"
"panelPortDesc" = "شماره پورت برای وب پنل. باید پورت استفاده نشده‌باشد"
"publicKeyPath" = "مسیر کلید عمومی"
"publicKeyPathDesc" = "مسیر فایل کلیدعمومی برای وب پنل. با '/' شروع‌می‌شود"
"privateKeyPath" = "مسیر کلید خصوصی"
"privateKeyPathDesc" = "مسیر فایل کلیدخصوصی برای وب پنل. با '/' شروع‌می‌شود"
"panelUrlPath" = "URI مسیر"
"panelUrlPathDesc" = "برای وب پنل. با '/' شروع‌ و با '/' خاتمه‌ می‌یابد URI مسیر"
"panelUrlPathDesc" = "مسیر لینک وب پنل. با '/' شروع‌ و با '/' خاتمه‌ می‌یابد"
"pageSize" = "اندازه صفحه بندی جدول"
"pageSizeDesc" = "اندازه صفحه برای جدول ورودی‌ها. 0 = غیرفعال"
"remarkModel" = "نام‌کانفیگ و جداکننده"
@@ -246,48 +250,48 @@
"telegramBotEnable" = "فعال‌سازی ربات تلگرام"
"telegramBotEnableDesc" = "ربات تلگرام را فعال می‌کند"
"telegramToken" = "توکن تلگرام"
"telegramTokenDesc" = "دریافت کنید @botfather توکن را می‌توانید از"
"telegramTokenDesc" = "دریافت کنید @botfather توکن تلگرام، از"
"telegramChatId" = "آی‌دی چت مدیر"
"telegramChatIdDesc" = "استفاده‌کنید'/id'یا دستور @userinfobot آی‌دی(های) چت تلگرام مدیر، برای دریافت شناسه‌های چت خود از"
"telegramNotifyTime" = "زمان نوتیفیکیشن"
"telegramNotifyTimeDesc" = "زمان‌اطلاع‌رسانی ربات تلگرام برای گزارش های دوره‌ای. از فرمت زمانبندی لینوکس استفاده‌کنید‌"
"tgNotifyBackup" = "پشتیبان‌گیری از دیتابیس"
"tgNotifyBackupDesc" = "فایل پشتیباندیتابیس را به‌همراه گزارش ارسال می‌کند"
"tgNotifyLogin" = "اعلان ورود"
"tgNotifyLoginDesc" = "نام‌کاربری، آدرس آی‌پی، و زمان ورود، فردی که سعی می‌کند وارد پنل شود را نمایش می‌دهد"
"sessionMaxAge" = "بیشینه زمان جلسه وب"
"sessionMaxAgeDesc" = "بیشینه زمانی که می‌توانید لاگین بمانید. واحد: دقیقه"
"expireTimeDiff" = "آستانه زمان باقی مانده"
"expireTimeDiffDesc" = "فاصله زمانی هشدار تا رسیدن به زمان انقضا. واحد: روز"
"trafficDiff" = "آستانه ترافیک باقی مانده"
"trafficDiffDesc" = "فاصله زمانی هشدار تا رسیدن به اتمام ترافیک. واحد: گیگابایت"
"tgNotifyCpu" = "آستانه هشدار بار پردازنده"
"tgNotifyCpuDesc" = "اگر بار روی پردازنده ازاین آستانه فراتر رفت، برای شما پیام ارسال می‌شود. واحد: درصد"
"telegramChatIdDesc" = "دریافت کنید '/id'یا دستور @userinfobot آی‌دی(های) چت مدیر، از"
"telegramNotifyTime" = "زمان اطلاع‌رسانی"
"telegramNotifyTimeDesc" = "زمان‌اطلاع‌رسانی ربات تلگرام برای ارسال گزارشهای دوره‌ای. از فرمت زمانی کرون‌تاب استفاده‌کنید‌"
"tgNotifyBackup" = "پشتیبان‌گیری دیتابیس"
"tgNotifyBackupDesc" = "فایل پشتیبان دیتابیس را به‌همراه گزارش دریافت می‌کنید‌"
"tgNotifyLogin" = "اطلاع‌رسانی ورود"
"tgNotifyLoginDesc" = "هر زمان کسی سعی به ورود به وب پنل شما را داشت. درباره نام‌کاربری، آی‌پی و زمان، مطلع می‌شوید"
"sessionMaxAge" = "مدت جلسه"
"sessionMaxAgeDesc" = "بیشینه مدت زمانیکه می‌توانید لاگین بمانید. واحد: دقیقه"
"expireTimeDiff" = "اطلاع‌رسانی زمان‌انقضا"
"expireTimeDiffDesc" = "وقتی زمان باقی‌مانده به‌آستانه تعیین‌شده رسید، مطلع می‌شوید. واحد: روز"
"trafficDiff" = "اطلاع‌رسانی ترافیک باقیمانده"
"trafficDiffDesc" = "وقتی‌ ترافیک باقی‌مانده به‌آستانه تعیین‌شده رسید، مطلع می‌شوید. واحد: گیگابایت"
"tgNotifyCpu" = "اطلاع‌رسانی بار پردازنده"
"tgNotifyCpuDesc" = "اگر بار پردازنده از آستانه تعیین‌شده فراتر رفت، مطلع می‌شوید. واحد: درصد"
"timeZone" = "منطقه زمانی"
"timeZoneDesc" = "وظایف برنامه ریزی شده بر اساس این منطقه‌زمانی اجرا می‌شود"
"subSettings" = "سابسکریپشن"
"subEnable" = "فعال‌سازی سرویس سابسکریپشن"
"subEnableDesc" = " سرویس سابسکریپشن‌ را فعالمی‌کند"
"subEnableDesc" = " سرویس سابسکریپشن‌ را فعال می‌کند"
"subListen" = "آدرس آی‌پی"
"subListenDesc" = "آدرس آی‌پی برای سرویس سابسکریپشن. برای گوش دادن به‌تمام آی‌پی‌ها خالی‌بگذارید"
"subPort" = "پورت"
"subPortDesc" = "شماره پورت برای سرویس سابسکریپشن. باید پورت استفاده نشده‌باشد"
"subListenDesc" = "آدرس آی‌پی برای سابسکریپشن. برای گوشدادن به‌تمام آی‌پی‌ها خالی‌بگذارید"
"subPort" = "شماره پورت"
"subPortDesc" = "شماره پورت برای سابسکریپشن. باید پورت استفاده نشده‌باشد"
"subCertPath" = "مسیر کلید عمومی"
"subCertPathDesc" = "مسیر فایل کلیدعمومی برای سرویس سابیکریپشن. با '/' شروع‌می‌شود"
"subCertPathDesc" = "مسیر فایل کلیدعمومی برای سابیکریپشن. با '/' شروع‌می‌شود"
"subKeyPath" = "مسیر کلید خصوصی"
"subKeyPathDesc" = "مسیر فایل کلیدخصوصی برای سرویس سابسکریپشن. با '/' شروع‌می‌شود"
"subKeyPathDesc" = "مسیر فایل کلیدخصوصی برای سابسکریپشن. با '/' شروع‌می‌شود"
"subPath" = "URI مسیر"
"subPathDesc" = "برای سرویس سابسکریپشن. با '/' شروع‌ و با '/' خاتمه‌ می‌یابد URI مسیر"
"subPathDesc" = "مسیر لینک سابسکریپشن. با '/' شروع‌ و با '/' خاتمه‌ می‌یابد"
"subDomain" = "نام دامنه"
"subDomainDesc" = "آدرس دامنه برای سرویس سابسکریپشن. برای گوش دادن به تمام دامنه‌ها و آی‌پی‌ها خالی‌بگذارید‌"
"subUpdates" = "فاصله بروزرسانی‌ سابسکریپشن"
"subUpdatesDesc" = "فاصله مابین بروزرسانی در برنامه‌های کاربری - واحد: ساعت"
"subDomainDesc" = "آدرس دامنه برای سابسکریپشن. برای گوشدادن بهتمام دامنه‌ها و آی‌پی‌ها خالی‌بگذارید‌"
"subUpdates" = "فاصله بروزرسانی‌"
"subUpdatesDesc" = "فاصله مابین بروزرسانی لینک سابسکریپشن در برنامه‌های کاربری. واحد: ساعت"
"subEncrypt" = "کدگذاری"
"subEncryptDesc" = "کدگذاری خواهدشد Base64 محتوای برگشتی سرویس سابسکریپشن برپایه"
"subEncryptDesc" = " محتوای برگشتی سابسکریپشن برپایه بیس64 کدگذاری خواهدشد"
"subShowInfo" = "نمایش اطلاعات مصرف"
"subShowInfoDesc" = "ترافیک و زمان باقی‌مانده را در برنامه‌های کاربری نمایش می‌دهد"
"subURI" = "پروکسی معکوس URI مسیر"
"subURIDesc" = "سابسکریپشن را برای استفاده در پشت پراکسی‌ها تغییر می‌دهد URI مسیر"
"subURI" = "پراکسی معکوس URI"
"subURIDesc" = "سابسکریپشن از لینکی که در پشت پراکسی‌های معکوس تنظیم شده‌، استفاده خواهدکرد"
[pages.settings.toasts]
"modifySettings" = "ویرایش تنظیمات"
@@ -311,9 +315,9 @@
"directCountryConfigs" = "اتصال مستقیم کشور"
"directCountryConfigsDesc" = "این گزینه‌ها ترافیک را بر اساس کشور درخواستی خاص بصورت مستقیم ارسال می‌کند"
"ipv4Configs" = "IPv4 مسیریابی"
"ipv4ConfigsDesc" = "این گزینه‌ها درخواست‌ها را فقط از طریق آی‌پینسخه4 به مقصد هدایت می‌کند"
"warpConfigs" = "تنظیمات برای وارپ"
"warpConfigsDesc" = ".وارپ ترافیک را از طریق سرورهای کلادفلر به وب سایت ها هدایت می کند"
"ipv4ConfigsDesc" = "این گزینه‌ها ترافیک را از طریق آی‌پی نسخه4 ماشین، به مقصد هدایت می‌کند"
"warpConfigs" = "WARP تنظمیات"
"warpConfigsDesc" = "این گزینه‌ها ترافیک را از طریق وارپ کلادفلر به مقصد هدایت میکند"
"Template" = "‌پیکربندی پیشرفته الگو ایکس‌ری"
"TemplateDesc" = "فایل پیکربندی نهایی ایکس‌ری بر اساس این الگو ایجاد می‌شود"
"FreedomStrategy" = "Freedom استراتژی پروتکل"
@@ -326,7 +330,7 @@
"PrivateIpDesc" = "اتصال به آی‌پی‌های رنج خصوصی را مسدود می‌کند"
"Ads" = "مسدودسازی تبلیغات"
"AdsDesc" = "وب‌سایت‌های تبلیغاتی را مسدود می‌کند"
"Family" = "محافظت خانواده"
"Family" = "محافظ خانواده"
"FamilyDesc" = "محتوای مخصوص بزرگسالان، و وبسایت‌های ناامن را مسدود می‌کند"
"IRIp" = "مسدودسازی اتصال به آی‌پی‌های ایران"
"IRIpDesc" = "اتصال به آی‌پی‌های کشور ایران را مسدود می‌کند"
@@ -353,9 +357,9 @@
"DirectRussiaDomain" = "ارتباط مستقیم دامنه های روسیه"
"DirectRussiaDomainDesc" = "اتصال مستقیم به دامنه‌های کشور روسیه"
"GoogleIPv4" = "گوگل"
"GoogleIPv4Desc" = "ترافیک را از طریق آی‌پینسخه4 به گوگل هدایت می‌کند"
"GoogleIPv4Desc" = "ترافیک را از طریق آی‌پی نسخه4، به گوگل هدایت می‌کند"
"NetflixIPv4" = "نتفلیکس"
"NetflixIPv4Desc" = "ترافیک را از طریق آی‌پینسخه4 به نتفلیکس هدایت می‌کند"
"NetflixIPv4Desc" = "ترافیک را از طریق آی‌پی نسخه4، به نتفلیکس هدایت می‌کند"
"completeTemplate" = "کامل"
"GoogleWARP" = "گوگل"
"GoogleWARPDesc" = "ترافیک را از طریق وارپ به گوگل هدایت می‌کند"
@@ -398,6 +402,9 @@
"bridge" = "پل"
"portal" = "پورتال"
"intercon" = "اتصال میانی"
"settings" = "تنظیمات"
"accountInfo" = "اطلاعات حساب"
"outboundStatus" = "وضعیت خروجی"
[pages.xray.wireguard]
"secretKey" = "کلید شخصی"
@@ -437,48 +444,48 @@
"report" = "🕰 گزارشات‌زمان‌بندی‌شده: {{ .RunTime }}\r\n"
"datetime" = "⏰ تاریخ‌وزمان: {{ .DateTime }}\r\n"
"hostname" = "💻 نام‌میزبان: {{ .Hostname }}\r\n"
"version" = "🚀 نسخه‌پنل: {{ .Version }}\r\n"
"version" = "🚀 X-UI: {{ .Version }}\r\n"
"ipv6" = "🌐 IPv6: {{ .IPv6 }}\r\n"
"ipv4" = "🌐 IPv4: {{ .IPv4 }}\r\n"
"ip" = "🌐 آدرس‌آی‌پی: {{ .IP }}\r\n"
"serverUpTime" = "⏳ مدت‌کارکردسیستم: {{ .UpTime }} {{ .Unit }}\r\n"
"ip" = "🌐 IP: {{ .IP }}\r\n"
"serverUpTime" = "⏳ مدت‌کارکرد: {{ .UpTime }} {{ .Unit }}\r\n"
"serverLoad" = "📈 بارسیستم: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n"
"serverMemory" = "📋 RAM: {{ .Current }}/{{ .Total }}\r\n"
"tcpCount" = "🔹 TCP: {{ .Count }}\r\n"
"udpCount" = "🔸 UDP: {{ .Count }}\r\n"
"traffic" = "🚦 ترافیک: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
"xrayStatus" = " وضعیت‌ایکس‌ری: {{ .State }}\r\n"
"xrayStatus" = " وضعیت‌: {{ .State }}\r\n"
"username" = "👤 نام‌کاربری: {{ .Username }}\r\n"
"time" = "⏰ زمان: {{ .Time }}\r\n"
"inbound" = "📍 نام‌ورودی: {{ .Remark }}\r\n"
"port" = "🔌 پورت: {{ .Port }}\r\n"
"expire" = "📅 تاریخ‌انقضا: {{ .DateTime }}\r\n \r\n"
"expireIn" = "📅 باقی‌مانده‌تاانقضا: {{ .Time }}\r\n \r\n"
"expireIn" = "📅 انقضا در: {{ .Time }}\r\n \r\n"
"active" = "💡 فعال: {{ .Enable }}\r\n"
"online" = "🌐 وضعیت اتصال: {{ .Status }}\r\n"
"online" = "🌐 وضعیتاتصال: {{ .Status }}\r\n"
"email" = "📧 ایمیل: {{ .Email }}\r\n"
"upload" = "🔼 آپلود↑: {{ .Upload }}\r\n"
"download" = "🔽 دانلود↓: {{ .Download }}\r\n"
"total" = "🔄 کل: {{ .UpDown }} / {{ .Total }}\r\n"
"exhaustedMsg" = "🚨 {{ .Type }} به‌اتمام‌رسیده‌است:\r\n"
"exhaustedCount" = "🚨 تعداد {{ .Type }} به‌اتمامرسیده‌است:\r\n"
"exhaustedCount" = "🚨 تعداد {{ .Type }} به‌اتمام رسیده‌است:\r\n"
"onlinesCount" = "🌐 کاربران‌آنلاین: {{ .Count }}\r\n"
"disabled" = "🛑 غیرفعال: {{ .Disabled }}\r\n"
"depleteSoon" = "🔜 به‌زودیبه‌پایانخواهدرسید: {{ .Deplete }}\r\n \r\n"
"depleteSoon" = "🔜 به‌زودی به‌پایان خواهدرسید: {{ .Deplete }}\r\n \r\n"
"backupTime" = "🗄 زمان‌پشتیبان‌گیری: {{ .Time }}\r\n"
"yes" = "✅ بله"
"no" = "❌ خیر"
[tgbot.buttons]
"dbBackup" = "دریافت پشتیبان دیتابیس"
"dbBackup" = "دریافت فایل پشتیبان"
"serverUsage" = "استفاده از سیستم"
"getInbounds" = "دریافت ورودی‌ها"
"depleteSoon" = "به‌زودی به پایان خواهد رسید"
"depleteSoon" = "به‌زودی بهپایان خواهدرسید"
"clientUsage" = "دریافت آمار کاربر"
"onlines" = "کاربران آنلاین"
"commands" = "دستورات"
[tgbot.answers]
"getInboundsFailed" = "❌ دریافت ورودی‌ها باخطا مواجه شد"
"askToAddUser" = "پیکربندی شما پیدا نشد!\r\nشما باید نام‌کاربری تلگرام خود را پیکربندی کنید و از مدیر پنل خود بخواهید که آن را به پیکربندی شما اضافه کند"
"askToAddUserName" = "پیکربندی شما یافت نشد!\r\nلطفاً از مدیر پنل درخواست کنید اطلاعات تلگرام شما را در پیکربندی(های) مربوط به‌شما تنظیم‌کند \r\n\r\nنامکاربری شما: @{{ .TgUserName }}"
"askToAddUser" = "پیکربندی شما پیدا نشد!\r\nشما باید نام‌کاربری تلگرام خود را تنظیم کنید و از مدیر سرویس خود بخواهید که آن را به پیکربندی(های) شما اضافه کند"
"askToAddUserName" = "پیکربندی شما یافت نشد!\r\nلطفاً از مدیر سرویس خود بخواهید اطلاعات تلگرام شما را به پیکربندی(های) شما اضافه کند \r\n\r\nنامکاربری شما: @{{ .TgUserName }}"

View File

@@ -77,15 +77,19 @@
"title" = "Статус системы"
"memory" = "ОЗУ"
"hard" = "Место на диске"
"xrayStatus" = "Статус Xray"
"machineInfo" = "Машина"
"hostname" = "Имя хоста"
"xrayStatus" = "Xray"
"stopXray" = "Остановка"
"restartXray" = "Перезапуск Xray"
"restartXray" = "Перезапуск"
"xraySwitch" = "Сменить версию"
"xraySwitchClick" = "Выберите желаемую версию"
"xraySwitchClickDesk" = "Выбирайте внимательно, так как старые версии могут быть несовместимы с текущими конфигурациями"
"operationHours" = "Время работы"
"operationHoursDesc" = "Время работы системы: время с момента запуска."
"operationHoursDesc" = "Время безотказной работы с момента запуска ОС"
"xrayoperationHoursDesc" = "Время работы с момента последней перезагрузки Xray"
"systemLoad" = "Системная нагрузка"
"systemLoadDesc" = "Средняя нагрузка за последние 1, 5 и 15 минут"
"connectionTcpCountDesc" = "Всего подключений TCP по всем сетевым картам."
"connectionUdpCountDesc" = "Общее количество подключений UDP по всем сетевым картам."
"upSpeed" = "Общая скорость отдачи"
@@ -100,8 +104,8 @@
"backup" = "Бекап и восстановление"
"backupTitle" = "База данных бекапа и восстановления"
"backupDescription" = "Не забудьте сделать резервную копию перед импортом новой базы данных"
"exportDatabase" = "Экспорт базы данных"
"importDatabase" = "Импорт базы данных"
"exportDatabase" = "Резерв"
"importDatabase" = "Восстановить"
[pages.inbounds]
"title" = "Подключения"
@@ -134,7 +138,7 @@
"destinationPort" = "Порт назначения"
"targetAddress" = "Целевой адрес"
"monitorDesc" = "Оставьте пустым по умолчанию"
"meansNoLimit" = "Значит без ограничений"
"meansNoLimit" = "Ноль означает неограниченно. (значение: ГБ)"
"totalFlow" = "Общий расход"
"leaveBlankToNeverExpire" = "Оставьте пустым, чтобы сделать бессрочно"
"noRecommendKeepDefault" = "Нет особых требований для сохранения настроек по умолчанию"
@@ -399,6 +403,9 @@
"bridge" = "Мост"
"portal" = "Портал"
"intercon" = "Соединение"
"settings" = "Настройки"
"accountInfo" = "Информация Об Учетной Записи"
"outboundStatus" = "Исходящий статус"
[pages.xray.wireguard]
"secretKey" = "Секретный ключ"

View File

@@ -77,15 +77,19 @@
"title" = "Trạng thái hệ thống"
"memory" = "Bộ nhớ"
"hard" = "Ổ cứng"
"xrayStatus" = "Trạng thái của Xray"
"stopXray" = "Dừng Xray"
"restartXray" = "Khởi động lại Xray"
"machineInfo" = "Máy"
"hostname" = "Tên máy chủ"
"xrayStatus" = "Xray"
"stopXray" = "Dừng"
"restartXray" = "Khởi động lại"
"xraySwitch" = "Chuyển đổi phiên bản"
"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, của Bạn"
"operationHours" = "Thời gian hoạt động"
"operationHoursDesc" = "Thời gian hoạt động của hệ thống: thời gian kể từ khi khởi động."
"operationHoursDesc" = "Thời gian hoạt động kể từ khi khởi động hệ điều hành"
"xrayoperationHoursDesc" = "Thời gian hoạt động kể từ lần khởi động Xray cuối cùng"
"systemLoad" = "Tải hệ thống"
"systemLoadDesc" = "Tải trung bình trong 1, 5 và 15 phút qua"
"connectionTcpCountDesc" = "Tổng số kết nối TCP trên tất cả các card mạng."
"connectionUdpCountDesc" = "Tổng số kết nối UDP trên tất cả các card mạng."
"upSpeed" = "Tổng tốc độ tải lên cho tất cả các thẻ mạng."
@@ -134,7 +138,7 @@
"destinationPort" = "Cổng đích"
"targetAddress" = "Địa chỉ mục tiêu"
"monitorDesc" = "Mặc định để trống"
"meansNoLimit" = "Nghĩa là không giới hạn"
"meansNoLimit" = "Số không có nghĩa là không giới hạn. (đơn vị: GB)"
"totalFlow" = "Tổng lưu lượng"
"leaveBlankToNeverExpire" = "Để trống để không bao giờ hết hạn"
"noRecommendKeepDefault" = "Không yêu cầu đặc biệt để giữ nguyên cài đặt mặc định"
@@ -399,6 +403,9 @@
"bridge" = "Liên kết"
"portal" = "Cổng thông tin"
"intercon" = "Kết nối"
"settings" = "cài đặt"
"accountInfo" = "Thông tin tài khoản"
"outboundStatus" = "Trạng thái đầu ra"
[pages.xray.wireguard]
"secretKey" = "Chìa khoá bí mật"
@@ -455,7 +462,7 @@
"port" = "🔌 Cổng: {{ .Port }}\r\n"
"expire" = "📅 Hạn sử dụng: {{ .DateTime }}\r\n \r\n"
"expireIn" = "📅 Hết hạn vào: {{ .Time }}\r\n \r\n"
"active" = "💡 Có hiệu lực {{ .Enable }}\r\n"
"active" = "💡 Có hiu lc {{ .Enable }}\r\n"
"online" = "🌐 Tình trạng kết nối: {{ .Status }}\r\n"
"email" = "📧 Email: {{ .Email }}\r\n"
"upload" = "🔼 Tải lên↑: {{ .Upload }}\r\n"

View File

@@ -77,15 +77,19 @@
"title" = "系统状态"
"memory" = "内存"
"hard" = "硬盘"
"xrayStatus" = "Xray 状态"
"machineInfo" = "机器"
"hostname" = "主机名"
"xrayStatus" = "Xray"
"stopXray" = "停止"
"restartXray" = "重启"
"xraySwitch" = "切换版本"
"xraySwitchClick" = "点击你想切换的版本"
"xraySwitchClickDesk" = "请谨慎选择,旧版本可能配置不兼容"
"operationHours" = "运行时间"
"operationHoursDesc" = "系统启动以来的运行时间"
"operationHoursDesc" = "自操作系统启动以来的正常运行时间"
"xrayoperationHoursDesc" = "自 Xray 上次重启以来的正常运行时间"
"systemLoad" = "系统负载"
"systemLoadDesc" = "过去 1 分钟、5 分钟和 15 分钟的平均负载"
"connectionTcpCountDesc" = "所有网卡的总 TCP 连接数。"
"connectionUdpCountDesc" = "所有网卡的总 UDP 连接数。"
"upSpeed" = "所有网卡的总上传速度"
@@ -134,7 +138,7 @@
"destinationPort" = "目标端口"
"targetAddress" = "目标地址"
"monitorDesc" = "默认留空即可"
"meansNoLimit" = "表示不限制"
"meansNoLimit" = "零意味着无限。(单位GB)"
"totalFlow" = "总流量"
"leaveBlankToNeverExpire" = "留空则永不到期"
"noRecommendKeepDefault" = "没有特殊需求保持默认即可"
@@ -399,6 +403,9 @@
"bridge" = "桥"
"portal" = "门户"
"intercon" = "互连"
"settings" = "设置"
"accountInfo" = "帐户信息"
"outboundStatus" = "出站状态"
[pages.xray.wireguard]
"secretKey" = "密钥"