mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-09-13 05:30:06 +00:00
Add periodic traffic reset feature model and ui with localization support
This commit is contained in:
parent
2750f46c01
commit
cad0074557
21 changed files with 215 additions and 26 deletions
|
@ -36,6 +36,7 @@ type Inbound struct {
|
||||||
Remark string `json:"remark" form:"remark"`
|
Remark string `json:"remark" form:"remark"`
|
||||||
Enable bool `json:"enable" form:"enable"`
|
Enable bool `json:"enable" form:"enable"`
|
||||||
ExpiryTime int64 `json:"expiryTime" form:"expiryTime"`
|
ExpiryTime int64 `json:"expiryTime" form:"expiryTime"`
|
||||||
|
PeriodicTrafficReset string `json:"periodicTrafficReset" form:"periodicTrafficReset" gorm:"default:never"`
|
||||||
ClientStats []xray.ClientTraffic `gorm:"foreignKey:InboundId;references:Id" json:"clientStats" form:"clientStats"`
|
ClientStats []xray.ClientTraffic `gorm:"foreignKey:InboundId;references:Id" json:"clientStats" form:"clientStats"`
|
||||||
|
|
||||||
// config part
|
// config part
|
||||||
|
@ -103,6 +104,7 @@ type Client struct {
|
||||||
SubID string `json:"subId" form:"subId"`
|
SubID string `json:"subId" form:"subId"`
|
||||||
Comment string `json:"comment" form:"comment"`
|
Comment string `json:"comment" form:"comment"`
|
||||||
Reset int `json:"reset" form:"reset"`
|
Reset int `json:"reset" form:"reset"`
|
||||||
|
PeriodicTrafficReset string `json:"periodicTrafficReset" form:"periodicTrafficReset"`
|
||||||
CreatedAt int64 `json:"created_at,omitempty"`
|
CreatedAt int64 `json:"created_at,omitempty"`
|
||||||
UpdatedAt int64 `json:"updated_at,omitempty"`
|
UpdatedAt int64 `json:"updated_at,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ class DBInbound {
|
||||||
this.remark = "";
|
this.remark = "";
|
||||||
this.enable = true;
|
this.enable = true;
|
||||||
this.expiryTime = 0;
|
this.expiryTime = 0;
|
||||||
|
this.periodicTrafficReset = "never";
|
||||||
|
|
||||||
this.listen = "";
|
this.listen = "";
|
||||||
this.port = 0;
|
this.port = 0;
|
||||||
|
|
|
@ -1792,6 +1792,7 @@ Inbound.VmessSettings.VMESS = class extends XrayCommonClass {
|
||||||
subId = RandomUtil.randomLowerAndNum(16),
|
subId = RandomUtil.randomLowerAndNum(16),
|
||||||
comment = '',
|
comment = '',
|
||||||
reset = 0,
|
reset = 0,
|
||||||
|
periodicTrafficReset = 'never',
|
||||||
created_at = undefined,
|
created_at = undefined,
|
||||||
updated_at = undefined
|
updated_at = undefined
|
||||||
) {
|
) {
|
||||||
|
@ -1807,6 +1808,7 @@ Inbound.VmessSettings.VMESS = class extends XrayCommonClass {
|
||||||
this.subId = subId;
|
this.subId = subId;
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
this.reset = reset;
|
this.reset = reset;
|
||||||
|
this.periodicTrafficReset = periodicTrafficReset;
|
||||||
this.created_at = created_at;
|
this.created_at = created_at;
|
||||||
this.updated_at = updated_at;
|
this.updated_at = updated_at;
|
||||||
}
|
}
|
||||||
|
@ -1824,6 +1826,7 @@ Inbound.VmessSettings.VMESS = class extends XrayCommonClass {
|
||||||
json.subId,
|
json.subId,
|
||||||
json.comment,
|
json.comment,
|
||||||
json.reset,
|
json.reset,
|
||||||
|
json.periodicTrafficReset,
|
||||||
json.created_at,
|
json.created_at,
|
||||||
json.updated_at,
|
json.updated_at,
|
||||||
);
|
);
|
||||||
|
@ -1907,6 +1910,7 @@ Inbound.VLESSSettings.VLESS = class extends XrayCommonClass {
|
||||||
subId = RandomUtil.randomLowerAndNum(16),
|
subId = RandomUtil.randomLowerAndNum(16),
|
||||||
comment = '',
|
comment = '',
|
||||||
reset = 0,
|
reset = 0,
|
||||||
|
periodicTrafficReset = 'never',
|
||||||
created_at = undefined,
|
created_at = undefined,
|
||||||
updated_at = undefined
|
updated_at = undefined
|
||||||
) {
|
) {
|
||||||
|
@ -1922,6 +1926,7 @@ Inbound.VLESSSettings.VLESS = class extends XrayCommonClass {
|
||||||
this.subId = subId;
|
this.subId = subId;
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
this.reset = reset;
|
this.reset = reset;
|
||||||
|
this.periodicTrafficReset = periodicTrafficReset;
|
||||||
this.created_at = created_at;
|
this.created_at = created_at;
|
||||||
this.updated_at = updated_at;
|
this.updated_at = updated_at;
|
||||||
}
|
}
|
||||||
|
@ -1939,6 +1944,7 @@ Inbound.VLESSSettings.VLESS = class extends XrayCommonClass {
|
||||||
json.subId,
|
json.subId,
|
||||||
json.comment,
|
json.comment,
|
||||||
json.reset,
|
json.reset,
|
||||||
|
json.periodicTrafficReset,
|
||||||
json.created_at,
|
json.created_at,
|
||||||
json.updated_at,
|
json.updated_at,
|
||||||
);
|
);
|
||||||
|
@ -2052,6 +2058,7 @@ Inbound.TrojanSettings.Trojan = class extends XrayCommonClass {
|
||||||
subId = RandomUtil.randomLowerAndNum(16),
|
subId = RandomUtil.randomLowerAndNum(16),
|
||||||
comment = '',
|
comment = '',
|
||||||
reset = 0,
|
reset = 0,
|
||||||
|
periodicTrafficReset = 'never',
|
||||||
created_at = undefined,
|
created_at = undefined,
|
||||||
updated_at = undefined
|
updated_at = undefined
|
||||||
) {
|
) {
|
||||||
|
@ -2066,6 +2073,7 @@ Inbound.TrojanSettings.Trojan = class extends XrayCommonClass {
|
||||||
this.subId = subId;
|
this.subId = subId;
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
this.reset = reset;
|
this.reset = reset;
|
||||||
|
this.periodicTrafficReset = periodicTrafficReset;
|
||||||
this.created_at = created_at;
|
this.created_at = created_at;
|
||||||
this.updated_at = updated_at;
|
this.updated_at = updated_at;
|
||||||
}
|
}
|
||||||
|
@ -2082,6 +2090,7 @@ Inbound.TrojanSettings.Trojan = class extends XrayCommonClass {
|
||||||
subId: this.subId,
|
subId: this.subId,
|
||||||
comment: this.comment,
|
comment: this.comment,
|
||||||
reset: this.reset,
|
reset: this.reset,
|
||||||
|
periodicTrafficReset: this.periodicTrafficReset,
|
||||||
created_at: this.created_at,
|
created_at: this.created_at,
|
||||||
updated_at: this.updated_at,
|
updated_at: this.updated_at,
|
||||||
};
|
};
|
||||||
|
@ -2099,6 +2108,7 @@ Inbound.TrojanSettings.Trojan = class extends XrayCommonClass {
|
||||||
json.subId,
|
json.subId,
|
||||||
json.comment,
|
json.comment,
|
||||||
json.reset,
|
json.reset,
|
||||||
|
json.periodicTrafficReset,
|
||||||
json.created_at,
|
json.created_at,
|
||||||
json.updated_at,
|
json.updated_at,
|
||||||
);
|
);
|
||||||
|
@ -2221,6 +2231,7 @@ Inbound.ShadowsocksSettings.Shadowsocks = class extends XrayCommonClass {
|
||||||
subId = RandomUtil.randomLowerAndNum(16),
|
subId = RandomUtil.randomLowerAndNum(16),
|
||||||
comment = '',
|
comment = '',
|
||||||
reset = 0,
|
reset = 0,
|
||||||
|
periodicTrafficReset = 'never',
|
||||||
created_at = undefined,
|
created_at = undefined,
|
||||||
updated_at = undefined
|
updated_at = undefined
|
||||||
) {
|
) {
|
||||||
|
@ -2236,6 +2247,7 @@ Inbound.ShadowsocksSettings.Shadowsocks = class extends XrayCommonClass {
|
||||||
this.subId = subId;
|
this.subId = subId;
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
this.reset = reset;
|
this.reset = reset;
|
||||||
|
this.periodicTrafficReset = periodicTrafficReset;
|
||||||
this.created_at = created_at;
|
this.created_at = created_at;
|
||||||
this.updated_at = updated_at;
|
this.updated_at = updated_at;
|
||||||
}
|
}
|
||||||
|
@ -2253,6 +2265,7 @@ Inbound.ShadowsocksSettings.Shadowsocks = class extends XrayCommonClass {
|
||||||
subId: this.subId,
|
subId: this.subId,
|
||||||
comment: this.comment,
|
comment: this.comment,
|
||||||
reset: this.reset,
|
reset: this.reset,
|
||||||
|
periodicTrafficReset: this.periodicTrafficReset,
|
||||||
created_at: this.created_at,
|
created_at: this.created_at,
|
||||||
updated_at: this.updated_at,
|
updated_at: this.updated_at,
|
||||||
};
|
};
|
||||||
|
@ -2271,6 +2284,7 @@ Inbound.ShadowsocksSettings.Shadowsocks = class extends XrayCommonClass {
|
||||||
json.subId,
|
json.subId,
|
||||||
json.comment,
|
json.comment,
|
||||||
json.reset,
|
json.reset,
|
||||||
|
json.periodicTrafficReset,
|
||||||
json.created_at,
|
json.created_at,
|
||||||
json.updated_at,
|
json.updated_at,
|
||||||
);
|
);
|
||||||
|
|
|
@ -168,5 +168,23 @@
|
||||||
</template>
|
</template>
|
||||||
<a-input-number v-model.number="client.reset" :min="0"></a-input-number>
|
<a-input-number v-model.number="client.reset" :min="0"></a-input-number>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
|
<a-form-item>
|
||||||
|
<template slot="label">
|
||||||
|
<a-tooltip>
|
||||||
|
<template slot="title">
|
||||||
|
<span>{{ i18n "pages.inbounds.periodicTrafficResetDesc" }}</span>
|
||||||
|
</template>
|
||||||
|
{{ i18n "pages.inbounds.periodicTrafficResetTitle" }}
|
||||||
|
<a-icon type="question-circle"></a-icon>
|
||||||
|
</a-tooltip>
|
||||||
|
</template>
|
||||||
|
<a-select v-model="client.periodicTrafficReset" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||||
|
<a-select-option value="never">{{ i18n "pages.inbounds.periodicTrafficReset.never" }}</a-select-option>
|
||||||
|
<a-select-option value="daily">{{ i18n "pages.inbounds.periodicTrafficReset.daily" }}</a-select-option>
|
||||||
|
<a-select-option value="weekly">{{ i18n "pages.inbounds.periodicTrafficReset.weekly" }}</a-select-option>
|
||||||
|
<a-select-option value="monthly">{{ i18n "pages.inbounds.periodicTrafficReset.monthly" }}</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
{{end}}
|
{{end}}
|
|
@ -61,6 +61,24 @@
|
||||||
value="dbInbound._expiryTime" v-model="dbInbound._expiryTime">
|
value="dbInbound._expiryTime" v-model="dbInbound._expiryTime">
|
||||||
</a-persian-datepicker>
|
</a-persian-datepicker>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
|
<a-form-item>
|
||||||
|
<template slot="label">
|
||||||
|
<a-tooltip>
|
||||||
|
<template slot="title">
|
||||||
|
<span>{{ i18n "pages.inbounds.periodicTrafficResetDesc" }}</span>
|
||||||
|
</template>
|
||||||
|
{{ i18n "pages.inbounds.periodicTrafficResetTitle" }}
|
||||||
|
<a-icon type="question-circle"></a-icon>
|
||||||
|
</a-tooltip>
|
||||||
|
</template>
|
||||||
|
<a-select v-model="dbInbound.periodicTrafficReset" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||||
|
<a-select-option value="never">{{ i18n "pages.inbounds.periodicTrafficReset.never" }}</a-select-option>
|
||||||
|
<a-select-option value="daily">{{ i18n "pages.inbounds.periodicTrafficReset.daily" }}</a-select-option>
|
||||||
|
<a-select-option value="weekly">{{ i18n "pages.inbounds.periodicTrafficReset.weekly" }}</a-select-option>
|
||||||
|
<a-select-option value="monthly">{{ i18n "pages.inbounds.periodicTrafficReset.monthly" }}</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
|
||||||
<!-- vmess settings -->
|
<!-- vmess settings -->
|
||||||
|
|
|
@ -645,6 +645,12 @@
|
||||||
</a-tag>
|
</a-tag>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{{ i18n "pages.inbounds.periodicTrafficResetTitle" }}</td>
|
||||||
|
<td>
|
||||||
|
<a-tag color="blue">[[ i18n("pages.inbounds.periodicTrafficReset." + dbInbound.periodicTrafficReset) ]]</a-tag>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</template>
|
</template>
|
||||||
<a-badge>
|
<a-badge>
|
||||||
|
|
|
@ -122,6 +122,23 @@
|
||||||
</template>
|
</template>
|
||||||
<a-input-number v-model.number="clientsBulkModal.reset" :min="0"></a-input-number>
|
<a-input-number v-model.number="clientsBulkModal.reset" :min="0"></a-input-number>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
<a-form-item>
|
||||||
|
<template slot="label">
|
||||||
|
<a-tooltip>
|
||||||
|
<template slot="title">
|
||||||
|
<span>{{ i18n "pages.inbounds.periodicTrafficResetDesc" }}</span>
|
||||||
|
</template>
|
||||||
|
{{ i18n "pages.inbounds.periodicTrafficResetTitle" }}
|
||||||
|
<a-icon type="question-circle"></a-icon>
|
||||||
|
</a-tooltip>
|
||||||
|
</template>
|
||||||
|
<a-select v-model="clientsBulkModal.periodicTrafficReset" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||||
|
<a-select-option value="never">{{ i18n "pages.inbounds.periodicTrafficReset.never" }}</a-select-option>
|
||||||
|
<a-select-option value="daily">{{ i18n "pages.inbounds.periodicTrafficReset.daily" }}</a-select-option>
|
||||||
|
<a-select-option value="weekly">{{ i18n "pages.inbounds.periodicTrafficReset.weekly" }}</a-select-option>
|
||||||
|
<a-select-option value="monthly">{{ i18n "pages.inbounds.periodicTrafficReset.monthly" }}</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
<script>
|
<script>
|
||||||
|
@ -149,6 +166,7 @@
|
||||||
flow: "",
|
flow: "",
|
||||||
delayedStart: false,
|
delayedStart: false,
|
||||||
reset: 0,
|
reset: 0,
|
||||||
|
periodicTrafficReset: "never",
|
||||||
ok() {
|
ok() {
|
||||||
clients = [];
|
clients = [];
|
||||||
method = clientsBulkModal.emailMethod;
|
method = clientsBulkModal.emailMethod;
|
||||||
|
@ -176,6 +194,7 @@
|
||||||
newClient.flow = clientsBulkModal.flow;
|
newClient.flow = clientsBulkModal.flow;
|
||||||
}
|
}
|
||||||
newClient.reset = clientsBulkModal.reset;
|
newClient.reset = clientsBulkModal.reset;
|
||||||
|
newClient.periodicTrafficReset = clientsBulkModal.periodicTrafficReset;
|
||||||
clients.push(newClient);
|
clients.push(newClient);
|
||||||
}
|
}
|
||||||
ObjectUtil.execute(clientsBulkModal.confirm, clients, clientsBulkModal.dbInbound.id);
|
ObjectUtil.execute(clientsBulkModal.confirm, clients, clientsBulkModal.dbInbound.id);
|
||||||
|
@ -207,6 +226,7 @@
|
||||||
this.inbound = dbInbound.toInbound();
|
this.inbound = dbInbound.toInbound();
|
||||||
this.delayedStart = false;
|
this.delayedStart = false;
|
||||||
this.reset = 0;
|
this.reset = 0;
|
||||||
|
this.periodicTrafficReset = "never";
|
||||||
},
|
},
|
||||||
newClient(protocol) {
|
newClient(protocol) {
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
|
|
|
@ -193,6 +193,12 @@
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr v-if="infoModal.clientSettings.periodicTrafficReset">
|
||||||
|
<td>{{ i18n "pages.inbounds.periodicTrafficResetTitle" }}</td>
|
||||||
|
<td>
|
||||||
|
<a-tag color="blue">[[ i18n("pages.inbounds.periodicTrafficReset." + infoModal.clientSettings.periodicTrafficReset) ]]</a-tag>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr v-if="app.ipLimitEnable">
|
<tr v-if="app.ipLimitEnable">
|
||||||
<td>{{ i18n "pages.inbounds.IPLimit" }}</td>
|
<td>{{ i18n "pages.inbounds.IPLimit" }}</td>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "يوم/أيام"
|
"days" = "يوم/أيام"
|
||||||
"renew" = "تجديد تلقائي"
|
"renew" = "تجديد تلقائي"
|
||||||
"renewDesc" = "تجديد تلقائي بعد انتهاء الصلاحية. (0 = تعطيل)(الوحدة: يوم)"
|
"renewDesc" = "تجديد تلقائي بعد انتهاء الصلاحية. (0 = تعطيل)(الوحدة: يوم)"
|
||||||
|
"periodicTrafficResetTitle" = "إعادة تعيين حركة المرور"
|
||||||
|
"periodicTrafficResetDesc" = "إعادة تعيين عداد حركة المرور تلقائيًا في فترات محددة"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "أبداً"
|
||||||
|
"daily" = "يومياً"
|
||||||
|
"weekly" = "أسبوعياً"
|
||||||
|
"monthly" = "شهرياً"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "تم الحصول عليه"
|
"obtain" = "تم الحصول عليه"
|
||||||
|
|
|
@ -229,6 +229,8 @@
|
||||||
"exportInbound" = "Export Inbound"
|
"exportInbound" = "Export Inbound"
|
||||||
"import" = "Import"
|
"import" = "Import"
|
||||||
"importInbound" = "Import an Inbound"
|
"importInbound" = "Import an Inbound"
|
||||||
|
"periodicTrafficResetTitle" = "Traffic Reset"
|
||||||
|
"periodicTrafficResetDesc" = "Automatically reset traffic counter at specified intervals"
|
||||||
|
|
||||||
[pages.client]
|
[pages.client]
|
||||||
"add" = "Add Client"
|
"add" = "Add Client"
|
||||||
|
@ -248,6 +250,12 @@
|
||||||
"renew" = "Auto Renew"
|
"renew" = "Auto Renew"
|
||||||
"renewDesc" = "Auto-renewal after expiration. (0 = disable)(unit: day)"
|
"renewDesc" = "Auto-renewal after expiration. (0 = disable)(unit: day)"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Never"
|
||||||
|
"daily" = "Daily"
|
||||||
|
"weekly" = "Weekly"
|
||||||
|
"monthly" = "Monthly"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Obtain"
|
"obtain" = "Obtain"
|
||||||
"updateSuccess" = "The update was successful."
|
"updateSuccess" = "The update was successful."
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "Día(s)"
|
"days" = "Día(s)"
|
||||||
"renew" = "Renovación automática"
|
"renew" = "Renovación automática"
|
||||||
"renewDesc" = "Renovación automática después de la expiración. (0 = desactivar) (unidad: día)"
|
"renewDesc" = "Renovación automática después de la expiración. (0 = desactivar) (unidad: día)"
|
||||||
|
"periodicTrafficResetTitle" = "Reset de Tráfico"
|
||||||
|
"periodicTrafficResetDesc" = "Reiniciar automáticamente el contador de tráfico en intervalos especificados"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Nunca"
|
||||||
|
"daily" = "Diariamente"
|
||||||
|
"weekly" = "Semanalmente"
|
||||||
|
"monthly" = "Mensualmente"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Recibir"
|
"obtain" = "Recibir"
|
||||||
|
|
|
@ -246,7 +246,15 @@
|
||||||
"expireDays" = "مدت زمان"
|
"expireDays" = "مدت زمان"
|
||||||
"days" = "(روز)"
|
"days" = "(روز)"
|
||||||
"renew" = "تمدید خودکار"
|
"renew" = "تمدید خودکار"
|
||||||
"renewDesc" = "(تمدید خودکار پساز انقضا. (0 = غیرفعال)(واحد: روز"
|
"renewDesc" = "تمدید خودکار پساز انقضا. (0 = غیرفعال)(واحد: روز)"
|
||||||
|
"periodicTrafficResetTitle" = "بازنشانی ترافیک"
|
||||||
|
"periodicTrafficResetDesc" = "بازنشانی خودکار شمارنده ترافیک در فواصل زمانی مشخص"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "هرگز"
|
||||||
|
"daily" = "روزانه"
|
||||||
|
"weekly" = "هفتگی"
|
||||||
|
"monthly" = "ماهانه"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "فراهمسازی"
|
"obtain" = "فراهمسازی"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "Hari"
|
"days" = "Hari"
|
||||||
"renew" = "Perpanjang Otomatis"
|
"renew" = "Perpanjang Otomatis"
|
||||||
"renewDesc" = "Perpanjangan otomatis setelah kedaluwarsa. (0 = nonaktif)(unit: hari)"
|
"renewDesc" = "Perpanjangan otomatis setelah kedaluwarsa. (0 = nonaktif)(unit: hari)"
|
||||||
|
"periodicTrafficResetTitle" = "Reset Trafik Berkala"
|
||||||
|
"periodicTrafficResetDesc" = "Reset otomatis penghitung trafik pada interval tertentu"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Tidak Pernah"
|
||||||
|
"daily" = "Harian"
|
||||||
|
"weekly" = "Mingguan"
|
||||||
|
"monthly" = "Bulanan"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Dapatkan"
|
"obtain" = "Dapatkan"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "日"
|
"days" = "日"
|
||||||
"renew" = "自動更新"
|
"renew" = "自動更新"
|
||||||
"renewDesc" = "期限が切れた後に自動更新。(0 = 無効)(単位:日)"
|
"renewDesc" = "期限が切れた後に自動更新。(0 = 無効)(単位:日)"
|
||||||
|
"periodicTrafficResetTitle" = "トラフィックリセット"
|
||||||
|
"periodicTrafficResetDesc" = "指定された間隔でトラフィックカウンタを自動的にリセット"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "なし"
|
||||||
|
"daily" = "毎日"
|
||||||
|
"weekly" = "毎週"
|
||||||
|
"monthly" = "毎月"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "取得"
|
"obtain" = "取得"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "Dia(s)"
|
"days" = "Dia(s)"
|
||||||
"renew" = "Renovação Automática"
|
"renew" = "Renovação Automática"
|
||||||
"renewDesc" = "Renovação automática após expiração. (0 = desativado)(unidade: dia)"
|
"renewDesc" = "Renovação automática após expiração. (0 = desativado)(unidade: dia)"
|
||||||
|
"periodicTrafficResetTitle" = "Reset de Tráfego"
|
||||||
|
"periodicTrafficResetDesc" = "Reinicia automaticamente o contador de tráfego em intervalos especificados"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Nunca"
|
||||||
|
"daily" = "Diariamente"
|
||||||
|
"weekly" = "Semanalmente"
|
||||||
|
"monthly" = "Mensalmente"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Obter"
|
"obtain" = "Obter"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "дней"
|
"days" = "дней"
|
||||||
"renew" = "Автопродление"
|
"renew" = "Автопродление"
|
||||||
"renewDesc" = "Автопродление после истечения срока действия. (0 = отключить)(единица: день)"
|
"renewDesc" = "Автопродление после истечения срока действия. (0 = отключить)(единица: день)"
|
||||||
|
"periodicTrafficResetTitle" = "Сброс трафика"
|
||||||
|
"periodicTrafficResetDesc" = "Автоматический сброс счетчика трафика через указанные интервалы"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Никогда"
|
||||||
|
"daily" = "Ежедневно"
|
||||||
|
"weekly" = "Еженедельно"
|
||||||
|
"monthly" = "Ежемесячно"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Получить"
|
"obtain" = "Получить"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "Gün"
|
"days" = "Gün"
|
||||||
"renew" = "Otomatik Yenile"
|
"renew" = "Otomatik Yenile"
|
||||||
"renewDesc" = "Süresi dolduktan sonra otomatik yenileme. (0 = devre dışı)(birim: gün)"
|
"renewDesc" = "Süresi dolduktan sonra otomatik yenileme. (0 = devre dışı)(birim: gün)"
|
||||||
|
"periodicTrafficResetTitle" = "Trafik Sıfırlama"
|
||||||
|
"periodicTrafficResetDesc" = "Belirtilen aralıklarla trafik sayacını otomatik olarak sıfırla"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Asla"
|
||||||
|
"daily" = "Günlük"
|
||||||
|
"weekly" = "Haftalık"
|
||||||
|
"monthly" = "Aylık"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Elde Et"
|
"obtain" = "Elde Et"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "Дні(в)"
|
"days" = "Дні(в)"
|
||||||
"renew" = "Автоматичне оновлення"
|
"renew" = "Автоматичне оновлення"
|
||||||
"renewDesc" = "Автоматичне поновлення після закінчення терміну дії. (0 = вимкнено)(одиниця: день)"
|
"renewDesc" = "Автоматичне поновлення після закінчення терміну дії. (0 = вимкнено)(одиниця: день)"
|
||||||
|
"periodicTrafficResetTitle" = "Скидання трафіку"
|
||||||
|
"periodicTrafficResetDesc" = "Автоматично скидати лічильник трафіку через певні проміжки часу"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Ніколи"
|
||||||
|
"daily" = "Щодня"
|
||||||
|
"weekly" = "Щотижня"
|
||||||
|
"monthly" = "Щомісяця"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Отримати"
|
"obtain" = "Отримати"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "ngày"
|
"days" = "ngày"
|
||||||
"renew" = "Tự động gia hạn"
|
"renew" = "Tự động gia hạn"
|
||||||
"renewDesc" = "Tự động gia hạn sau khi hết hạn. (0 = tắt)(đơn vị: ngày)"
|
"renewDesc" = "Tự động gia hạn sau khi hết hạn. (0 = tắt)(đơn vị: ngày)"
|
||||||
|
"periodicTrafficResetTitle" = "Đặt lại lưu lượng"
|
||||||
|
"periodicTrafficResetDesc" = "Tự động đặt lại bộ đếm lưu lượng theo khoảng thời gian xác định"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "Không bao giờ"
|
||||||
|
"daily" = "Hàng ngày"
|
||||||
|
"weekly" = "Hàng tuần"
|
||||||
|
"monthly" = "Hàng tháng"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "Nhận"
|
"obtain" = "Nhận"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "天"
|
"days" = "天"
|
||||||
"renew" = "自动续订"
|
"renew" = "自动续订"
|
||||||
"renewDesc" = "到期后自动续订。(0 = 禁用)(单位: 天)"
|
"renewDesc" = "到期后自动续订。(0 = 禁用)(单位: 天)"
|
||||||
|
"periodicTrafficResetTitle" = "流量重置"
|
||||||
|
"periodicTrafficResetDesc" = "按指定间隔自动重置流量计数器"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "从不"
|
||||||
|
"daily" = "每日"
|
||||||
|
"weekly" = "每周"
|
||||||
|
"monthly" = "每月"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "获取"
|
"obtain" = "获取"
|
||||||
|
|
|
@ -247,6 +247,14 @@
|
||||||
"days" = "天"
|
"days" = "天"
|
||||||
"renew" = "自動續訂"
|
"renew" = "自動續訂"
|
||||||
"renewDesc" = "到期後自動續訂。(0 = 禁用)(單位: 天)"
|
"renewDesc" = "到期後自動續訂。(0 = 禁用)(單位: 天)"
|
||||||
|
"periodicTrafficResetTitle" = "流量重置"
|
||||||
|
"periodicTrafficResetDesc" = "按指定間隔自動重置流量計數器"
|
||||||
|
|
||||||
|
[pages.inbounds.periodicTrafficReset]
|
||||||
|
"never" = "從不"
|
||||||
|
"daily" = "每日"
|
||||||
|
"weekly" = "每週"
|
||||||
|
"monthly" = "每月"
|
||||||
|
|
||||||
[pages.inbounds.toasts]
|
[pages.inbounds.toasts]
|
||||||
"obtain" = "獲取"
|
"obtain" = "獲取"
|
||||||
|
|
Loading…
Reference in a new issue