mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-04-16 12:35:54 +00:00
Merge ee920322be into 96b8fe472c
This commit is contained in:
commit
4dc4777b17
14 changed files with 1818 additions and 1603 deletions
|
|
@ -516,6 +516,19 @@ func (t *Tgbot) OnReceive() {
|
|||
message_text, _ := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol)
|
||||
t.addClient(message.Chat.ID, message_text)
|
||||
}
|
||||
case "awaiting_subid":
|
||||
if client_SubID == strings.TrimSpace(message.Text) {
|
||||
t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.using_default_value"), 3, tu.ReplyKeyboardRemove())
|
||||
delete(userStates, message.Chat.ID)
|
||||
return nil
|
||||
}
|
||||
|
||||
client_SubID = strings.TrimSpace(message.Text)
|
||||
t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_subid"), 3, tu.ReplyKeyboardRemove())
|
||||
delete(userStates, message.Chat.ID)
|
||||
inbound, _ := t.inboundService.GetInbound(receiver_inbound_ID)
|
||||
message_text, _ := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol)
|
||||
t.addClient(message.Chat.ID, message_text)
|
||||
case "awaiting_password_tr":
|
||||
if client_TrPassword == strings.TrimSpace(message.Text) {
|
||||
t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.using_default_value"), 3, tu.ReplyKeyboardRemove())
|
||||
|
|
@ -1750,6 +1763,54 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool
|
|||
)
|
||||
prompt_message := t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email)
|
||||
t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup)
|
||||
case "add_client_ch_default_subid":
|
||||
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
||||
userStates[chatId] = "awaiting_subid"
|
||||
cancel_btn_markup := tu.InlineKeyboard(
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"),
|
||||
),
|
||||
)
|
||||
prompt_message := t.I18nBot("tgbot.messages.subid_prompt", "ClientSubId=="+client_SubID)
|
||||
t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup)
|
||||
|
||||
case "add_client_ch_default_flow":
|
||||
inlineKeyboard := tu.InlineKeyboard(
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton("xtls-rprx-vision").WithCallbackData("set_flow_vision"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton("xtls-rprx-vision-udp443").WithCallbackData("set_flow_vision_udp443"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.flow_empty")).WithCallbackData("set_flow_empty"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_default_info"),
|
||||
),
|
||||
)
|
||||
t.editMessageCallbackTgBot(chatId, callbackQuery.Message.GetMessageID(), inlineKeyboard)
|
||||
|
||||
case "set_flow_vision":
|
||||
client_Flow = "xtls-rprx-vision"
|
||||
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
||||
inbound, _ := t.inboundService.GetInbound(receiver_inbound_ID)
|
||||
message_text, _ := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol)
|
||||
t.addClient(chatId, message_text)
|
||||
|
||||
case "set_flow_vision_udp443":
|
||||
client_Flow = "xtls-rprx-vision-udp443"
|
||||
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
||||
inbound, _ := t.inboundService.GetInbound(receiver_inbound_ID)
|
||||
message_text, _ := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol)
|
||||
t.addClient(chatId, message_text)
|
||||
|
||||
case "set_flow_empty":
|
||||
client_Flow = ""
|
||||
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
||||
inbound, _ := t.inboundService.GetInbound(receiver_inbound_ID)
|
||||
message_text, _ := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol)
|
||||
t.addClient(chatId, message_text)
|
||||
case "add_client_ch_default_id":
|
||||
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
||||
userStates[chatId] = "awaiting_id"
|
||||
|
|
@ -2071,6 +2132,27 @@ func (t *Tgbot) BuildInboundClientDataMessage(inbound_remark string, protocol mo
|
|||
return "", errors.New("unknown protocol")
|
||||
}
|
||||
|
||||
message += fmt.Sprintf("\n\n<b>Sub ID:</b> <code>%s</code>", client_SubID)
|
||||
|
||||
if protocol == model.VLESS {
|
||||
inbound, err := t.inboundService.GetInbound(receiver_inbound_ID)
|
||||
if err == nil {
|
||||
var streamSettings map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(inbound.StreamSettings), &streamSettings); err == nil {
|
||||
network, _ := streamSettings["network"].(string)
|
||||
security, _ := streamSettings["security"].(string)
|
||||
|
||||
if network == "tcp" && (security == "tls" || security == "reality") {
|
||||
if client_Flow != "" {
|
||||
message += fmt.Sprintf("\n<b>Flow:</b> <code>%s</code>", client_Flow)
|
||||
} else {
|
||||
message += fmt.Sprintf("\n<b>Flow:</b> <i>%s</i>", t.I18nBot("tgbot.messages.not_specified"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return message, nil
|
||||
}
|
||||
|
||||
|
|
@ -3314,13 +3396,32 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
|||
|
||||
protocol := inbound.Protocol
|
||||
|
||||
canUseFlow := false
|
||||
if protocol == model.VLESS {
|
||||
var streamSettings map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(inbound.StreamSettings), &streamSettings); err == nil {
|
||||
network, _ := streamSettings["network"].(string)
|
||||
security, _ := streamSettings["security"].(string)
|
||||
|
||||
// Strict: only TCP and only with TLS or REALITY
|
||||
if network == "tcp" && (security == "tls" || security == "reality") {
|
||||
canUseFlow = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var inlineKeyboard *telego.InlineKeyboardMarkup
|
||||
|
||||
switch protocol {
|
||||
case model.VMESS, model.VLESS:
|
||||
inlineKeyboard := tu.InlineKeyboard(
|
||||
case model.VMESS:
|
||||
inlineKeyboard = tu.InlineKeyboard(
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_id")).WithCallbackData("add_client_ch_default_id"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton("📝 Sub ID").WithCallbackData("add_client_ch_default_subid"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"),
|
||||
|
|
@ -3337,24 +3438,62 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
|||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
||||
),
|
||||
)
|
||||
if len(messageID) > 0 {
|
||||
t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
||||
} else {
|
||||
t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
||||
|
||||
case model.VLESS:
|
||||
rows := [][]telego.InlineKeyboardButton{
|
||||
{
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_id")).WithCallbackData("add_client_ch_default_id"),
|
||||
},
|
||||
}
|
||||
|
||||
if canUseFlow {
|
||||
rows = append(rows, []telego.InlineKeyboardButton{
|
||||
tu.InlineKeyboardButton("📝 Sub ID").WithCallbackData("add_client_ch_default_subid"),
|
||||
tu.InlineKeyboardButton("🌊 Flow").WithCallbackData("add_client_ch_default_flow"),
|
||||
})
|
||||
} else {
|
||||
rows = append(rows, []telego.InlineKeyboardButton{
|
||||
tu.InlineKeyboardButton("📝 Sub ID").WithCallbackData("add_client_ch_default_subid"),
|
||||
})
|
||||
client_Flow = "" //
|
||||
}
|
||||
|
||||
rows = append(rows,
|
||||
[]telego.InlineKeyboardButton{
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"),
|
||||
},
|
||||
[]telego.InlineKeyboardButton{
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_comment")).WithCallbackData("add_client_ch_default_comment"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.ipLimit")).WithCallbackData("add_client_ch_default_ip_limit"),
|
||||
},
|
||||
[]telego.InlineKeyboardButton{
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"),
|
||||
},
|
||||
[]telego.InlineKeyboardButton{
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
||||
},
|
||||
)
|
||||
inlineKeyboard = tu.InlineKeyboard(rows...)
|
||||
|
||||
case model.Trojan:
|
||||
inlineKeyboard := tu.InlineKeyboard(
|
||||
inlineKeyboard = tu.InlineKeyboard(
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_password")).WithCallbackData("add_client_ch_default_pass_tr"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton("📝 Sub ID").WithCallbackData("add_client_ch_default_subid"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_comment")).WithCallbackData("add_client_ch_default_comment"),
|
||||
tu.InlineKeyboardButton("ip limit").WithCallbackData("add_client_ch_default_ip_limit"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.ipLimit")).WithCallbackData("add_client_ch_default_ip_limit"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
||||
|
|
@ -3364,24 +3503,23 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
|||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
||||
),
|
||||
)
|
||||
if len(messageID) > 0 {
|
||||
t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
||||
} else {
|
||||
t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
||||
}
|
||||
|
||||
case model.Shadowsocks:
|
||||
inlineKeyboard := tu.InlineKeyboard(
|
||||
inlineKeyboard = tu.InlineKeyboard(
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_password")).WithCallbackData("add_client_ch_default_pass_sh"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton("📝 Sub ID").WithCallbackData("add_client_ch_default_subid"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_comment")).WithCallbackData("add_client_ch_default_comment"),
|
||||
tu.InlineKeyboardButton("ip limit").WithCallbackData("add_client_ch_default_ip_limit"),
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.ipLimit")).WithCallbackData("add_client_ch_default_ip_limit"),
|
||||
),
|
||||
tu.InlineKeyboardRow(
|
||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
||||
|
|
@ -3391,14 +3529,13 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
|||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
||||
),
|
||||
)
|
||||
|
||||
if len(messageID) > 0 {
|
||||
t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
||||
} else {
|
||||
t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
||||
}
|
||||
}
|
||||
|
||||
if len(messageID) > 0 {
|
||||
t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
||||
} else {
|
||||
t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
||||
}
|
||||
}
|
||||
|
||||
// searchInbound searches for inbounds by remark and sends the results.
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 الباسورد اتحدث."
|
||||
"received_email" = "📧📥 الإيميل اتحدث."
|
||||
"received_comment" = "💬📥 التعليق اتحدث."
|
||||
"received_subid" = "تم تغيير الـ Sub ID بنجاح!"
|
||||
"id_prompt" = "🔑 الـ ID الافتراضي: {{ .ClientId }}\n\nادخل الـ ID بتاعك."
|
||||
"pass_prompt" = "🔑 الباسورد الافتراضي: {{ .ClientPassword }}\n\nادخل الباسورد بتاعك."
|
||||
"email_prompt" = "📧 الإيميل الافتراضي: {{ .ClientEmail }}\n\nادخل الإيميل بتاعك."
|
||||
"comment_prompt" = "💬 التعليق الافتراضي: {{ .ClientComment }}\n\nادخل تعليقك."
|
||||
"subid_prompt" = "من فضلك أدخل Sub ID جديد:\nالحالي: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 الدخول: {{ .InboundRemark }}\n\n🔑 المعرف: {{ .ClientId }}\n📧 البريد الإلكتروني: {{ .ClientEmail }}\n📊 الترافيك: {{ .ClientTraffic }}\n📅 تاريخ الانتهاء: {{ .ClientExp }}\n🌐 حدّ IP: {{ .IpLimit }}\n💬 تعليق: {{ .ClientComment }}\n\nدلوقتي تقدر تضيف العميل على الدخول!"
|
||||
"inbound_client_data_pass" = "🔄 الدخول: {{ .InboundRemark }}\n\n🔑 كلمة المرور: {{ .ClientPass }}\n📧 البريد الإلكتروني: {{ .ClientEmail }}\n📊 الترافيك: {{ .ClientTraffic }}\n📅 تاريخ الانتهاء: {{ .ClientExp }}\n🌐 حدّ IP: {{ .IpLimit }}\n💬 تعليق: {{ .ClientComment }}\n\nدلوقتي تقدر تضيف العميل على الدخول!"
|
||||
"cancel" = "❌ العملية اتلغت! \n\nممكن تبدأ من /start في أي وقت. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "تمام، هشيل على القيمة الافتراضية. 😊"
|
||||
"incorrect_input" = "المدخلات مش صحيحة.\nالكلمات لازم تكون متصلة من غير فراغات.\nمثال صحيح: aaaaaa\nمثال غلط: aaa aaa 🚫"
|
||||
"AreYouSure" = "إنت متأكد؟ 🤔"
|
||||
"not_specified" = "غير محدد"
|
||||
"SuccessResetTraffic" = "📧 البريد الإلكتروني: {{ .ClientEmail }}\n🏁 النتيجة: ✅ تم بنجاح"
|
||||
"FailedResetTraffic" = "📧 البريد الإلكتروني: {{ .ClientEmail }}\n🏁 النتيجة: ❌ فشل \n\n🛠️ الخطأ: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 عملية إعادة ضبط الترافيك خلصت لكل العملاء."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 كلمة السر"
|
||||
"change_email" = "⚙️📧 البريد الإلكتروني"
|
||||
"change_comment" = "⚙️💬 تعليق"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "فارغ"
|
||||
"ResetAllTraffics" = "إعادة ضبط جميع الترافيك"
|
||||
"SortedTrafficUsageReport" = "تقرير استخدام الترافيك المرتب"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,9 +708,11 @@
|
|||
"received_password" = "🔑📥 Password updated."
|
||||
"received_email" = "📧📥 Email updated."
|
||||
"received_comment" = "💬📥 Comment updated."
|
||||
"received_subid" = "Sub ID updated successfully!"
|
||||
"id_prompt" = "🔑 Default ID: {{ .ClientId }}\n\nEnter your id."
|
||||
"pass_prompt" = "🔑 Default Password: {{ .ClientPassword }}\n\nEnter your password."
|
||||
"email_prompt" = "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email."
|
||||
"subid_prompt" = "Please enter new Sub ID:\nCurrent: {{.ClientSubId}}"
|
||||
"comment_prompt" = "💬 Default Comment: {{ .ClientComment }}\n\nEnter your Comment."
|
||||
"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Traffic: {{ .ClientTraffic }}\n📅 Expire Date: {{ .ClientExp }}\n🌐 IP Limit: {{ .IpLimit }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!"
|
||||
"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Password: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Traffic: {{ .ClientTraffic }}\n📅 Expire Date: {{ .ClientExp }}\n🌐 IP Limit: {{ .IpLimit }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "Okay, I'll stick with the default value. 😊"
|
||||
"incorrect_input" = "Your input is not valid.\nThe phrases should be continuous without spaces.\nCorrect example: aaaaaa\nIncorrect example: aaa aaa 🚫"
|
||||
"AreYouSure" = "Are you sure? 🤔"
|
||||
"not_specified" = "Not specified"
|
||||
"SuccessResetTraffic" = "📧 Email: {{ .ClientEmail }}\n🏁 Result: ✅ Success"
|
||||
"FailedResetTraffic" = "📧 Email: {{ .ClientEmail }}\n🏁 Result: ❌ Failed \n\n🛠️ Error: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 Traffic reset process finished for all clients."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 Password"
|
||||
"change_email" = "⚙️📧 Email"
|
||||
"change_comment" = "⚙️💬 Comment"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "Empty"
|
||||
"ResetAllTraffics" = "Reset All Traffics"
|
||||
"SortedTrafficUsageReport" = "Sorted Traffic Usage Report"
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 رمز عبور بهروزرسانی شد."
|
||||
"received_email" = "📧📥 ایمیل بهروزرسانی شد."
|
||||
"received_comment" = "💬📥 نظر بهروزرسانی شد."
|
||||
"received_subid" = "Sub ID با موفقیت تغییر کرد!"
|
||||
"id_prompt" = "🔑 شناسه پیشفرض: {{ .ClientId }}\n\nشناسه خود را وارد کنید."
|
||||
"pass_prompt" = "🔑 رمز عبور پیشفرض: {{ .ClientPassword }}\n\nرمز عبور خود را وارد کنید."
|
||||
"email_prompt" = "📧 ایمیل پیشفرض: {{ .ClientEmail }}\n\nایمیل خود را وارد کنید."
|
||||
"comment_prompt" = "💬 نظر پیشفرض: {{ .ClientComment }}\n\nنظر خود را وارد کنید."
|
||||
"subid_prompt" = "لطفاً Sub ID جدید را وارد کنید:\nفعلی: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n📊 ترافیک: {{ .ClientTraffic }}\n📅 تاریخ انقضا: {{ .ClientExp }}\n🌐 محدودیت IP: {{ .IpLimit }}\n💬 توضیح: {{ .ClientComment }}\n\nاکنون میتونی مشتری را به ورودی اضافه کنی!"
|
||||
"inbound_client_data_pass" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n📊 ترافیک: {{ .ClientTraffic }}\n📅 تاریخ انقضا: {{ .ClientExp }}\n🌐 محدودیت IP: {{ .IpLimit }}\n💬 توضیح: {{ .ClientComment }}\n\nاکنون میتونی مشتری را به ورودی اضافه کنی!"
|
||||
"cancel" = "❌ فرآیند لغو شد! \n\nمیتوانید هر زمان که خواستید /start را دوباره اجرا کنید. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "باشه، از مقدار پیشفرض استفاده میکنم. 😊"
|
||||
"incorrect_input" = "ورودی شما معتبر نیست.\nعبارتها باید بدون فاصله باشند.\nمثال صحیح: aaaaaa\nمثال نادرست: aaa aaa 🚫"
|
||||
"AreYouSure" = "مطمئنی؟ 🤔"
|
||||
"not_specified" = "مشخص نشده"
|
||||
"SuccessResetTraffic" = "📧 ایمیل: {{ .ClientEmail }}\n🏁 نتیجه: ✅ موفقیتآمیز"
|
||||
"FailedResetTraffic" = "📧 ایمیل: {{ .ClientEmail }}\n🏁 نتیجه: ❌ ناموفق \n\n🛠️ خطا: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 فرآیند بازنشانی ترافیک برای همه مشتریان به پایان رسید."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 گذرواژه"
|
||||
"change_email" = "⚙️📧 ایمیل"
|
||||
"change_comment" = "⚙️💬 نظر"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "خالی"
|
||||
"ResetAllTraffics" = "بازنشانی همه ترافیکها"
|
||||
"SortedTrafficUsageReport" = "گزارش استفاده از ترافیک مرتبشده"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 Kata sandi diperbarui."
|
||||
"received_email" = "📧📥 Email diperbarui."
|
||||
"received_comment" = "💬📥 Komentar diperbarui."
|
||||
"received_subid" = "Sub ID berhasil diubah!"
|
||||
"id_prompt" = "🔑 ID Default: {{ .ClientId }}\n\nMasukkan ID Anda."
|
||||
"pass_prompt" = "🔑 Kata Sandi Default: {{ .ClientPassword }}\n\nMasukkan kata sandi Anda."
|
||||
"email_prompt" = "📧 Email Default: {{ .ClientEmail }}\n\nMasukkan email Anda."
|
||||
"comment_prompt" = "💬 Komentar Default: {{ .ClientComment }}\n\nMasukkan komentar Anda."
|
||||
"subid_prompt" = "Silakan masukkan Sub ID baru:\nSaat ini: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Lalu lintas: {{ .ClientTraffic }}\n📅 Tanggal Kedaluwarsa: {{ .ClientExp }}\n🌐 Batas IP: {{ .IpLimit }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang kamu bisa menambahkan klien ke inbound!"
|
||||
"inbound_client_data_pass" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 Kata sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Lalu lintas: {{ .ClientTraffic }}\n📅 Tanggal Kedaluwarsa: {{ .ClientExp }}\n🌐 Batas IP: {{ .IpLimit }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang kamu bisa menambahkan klien ke inbound!"
|
||||
"cancel" = "❌ Proses Dibatalkan! \n\nAnda dapat /start lagi kapan saja. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "Oke, saya akan tetap menggunakan nilai default. 😊"
|
||||
"incorrect_input" = "Masukan Anda tidak valid.\nFrasa harus berlanjut tanpa spasi.\nContoh benar: aaaaaa\nContoh salah: aaa aaa 🚫"
|
||||
"AreYouSure" = "Apakah kamu yakin? 🤔"
|
||||
"not_specified" = "Tidak ditentukan"
|
||||
"SuccessResetTraffic" = "📧 Email: {{ .ClientEmail }}\n🏁 Hasil: ✅ Berhasil"
|
||||
"FailedResetTraffic" = "📧 Email: {{ .ClientEmail }}\n🏁 Hasil: ❌ Gagal \n\n🛠️ Kesalahan: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 Proses reset traffic selesai untuk semua klien."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 Kata Sandi"
|
||||
"change_email" = "⚙️📧 Email"
|
||||
"change_comment" = "⚙️💬 Komentar"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "Kosong"
|
||||
"ResetAllTraffics" = "Reset Semua Lalu Lintas"
|
||||
"SortedTrafficUsageReport" = "Laporan Penggunaan Lalu Lintas yang Terurut"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 パスワードが更新されました。"
|
||||
"received_email" = "📧📥 メールが更新されました。"
|
||||
"received_comment" = "💬📥 コメントが更新されました。"
|
||||
"received_subid" = "Sub ID が正常に変更されました!"
|
||||
"id_prompt" = "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。"
|
||||
"pass_prompt" = "🔑 デフォルトパスワード: {{ .ClientPassword }}\n\nパスワードを入力してください。"
|
||||
"email_prompt" = "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールを入力してください。"
|
||||
"comment_prompt" = "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。"
|
||||
"subid_prompt" = "新しい Sub ID を入力してください:\n現在: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 インバウンド: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n📊 トラフィック: {{ .ClientTraffic }}\n📅 有効期限: {{ .ClientExp }}\n🌐 IP制限: {{ .IpLimit }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐこのクライアントをインバウンドに追加できます!"
|
||||
"inbound_client_data_pass" = "🔄 インバウンド: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n📊 トラフィック: {{ .ClientTraffic }}\n📅 有効期限: {{ .ClientExp }}\n🌐 IP制限: {{ .IpLimit }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐこのクライアントをインバウンドに追加できます!"
|
||||
"cancel" = "❌ プロセスがキャンセルされました!\n\nいつでも /start で再開できます。 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "わかりました、デフォルト値を使用します。 😊"
|
||||
"incorrect_input" = "入力が無効です。\nフレーズはスペースなしで続けて入力してください。\n正しい例: aaaaaa\n間違った例: aaa aaa 🚫"
|
||||
"AreYouSure" = "本当にいいですか?🤔"
|
||||
"not_specified" = "指定なし"
|
||||
"SuccessResetTraffic" = "📧 メール: {{ .ClientEmail }}\n🏁 結果: ✅ 成功"
|
||||
"FailedResetTraffic" = "📧 メール: {{ .ClientEmail }}\n🏁 結果: ❌ 失敗 \n\n🛠️ エラー: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 すべてのクライアントのトラフィックリセットが完了しました。"
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 パスワード"
|
||||
"change_email" = "⚙️📧 メールアドレス"
|
||||
"change_comment" = "⚙️💬 コメント"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "空"
|
||||
"ResetAllTraffics" = "すべてのトラフィックをリセット"
|
||||
"SortedTrafficUsageReport" = "ソートされたトラフィック使用レポート"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 Senha atualizada."
|
||||
"received_email" = "📧📥 E-mail atualizado."
|
||||
"received_comment" = "💬📥 Comentário atualizado."
|
||||
"received_subid" = "Sub ID alterado com sucesso!"
|
||||
"id_prompt" = "🔑 ID Padrão: {{ .ClientId }}\n\nDigite seu ID."
|
||||
"pass_prompt" = "🔑 Senha Padrão: {{ .ClientPassword }}\n\nDigite sua senha."
|
||||
"email_prompt" = "📧 E-mail Padrão: {{ .ClientEmail }}\n\nDigite seu e-mail."
|
||||
"comment_prompt" = "💬 Comentário Padrão: {{ .ClientComment }}\n\nDigite seu comentário."
|
||||
"subid_prompt" = "Por favor, insira um novo Sub ID:\nAtual: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Tráfego: {{ .ClientTraffic }}\n📅 Data de expiração: {{ .ClientExp }}\n🌐 Limite de IP: {{ .IpLimit }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!"
|
||||
"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Tráfego: {{ .ClientTraffic }}\n📅 Data de expiração: {{ .ClientExp }}\n🌐 Limite de IP: {{ .IpLimit }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!"
|
||||
"cancel" = "❌ Processo Cancelado! \n\nVocê pode iniciar novamente a qualquer momento com /start. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "Tudo bem, vou manter o valor padrão. 😊"
|
||||
"incorrect_input" = "Sua entrada não é válida.\nAs frases devem ser contínuas, sem espaços.\nExemplo correto: aaaaaa\nExemplo incorreto: aaa aaa 🚫"
|
||||
"AreYouSure" = "Você tem certeza? 🤔"
|
||||
"not_specified" = "Não especificado"
|
||||
"SuccessResetTraffic" = "📧 Email: {{ .ClientEmail }}\n🏁 Resultado: ✅ Sucesso"
|
||||
"FailedResetTraffic" = "📧 Email: {{ .ClientEmail }}\n🏁 Resultado: ❌ Falhou \n\n🛠️ Erro: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 Processo de redefinição de tráfego concluído para todos os clientes."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 Senha"
|
||||
"change_email" = "⚙️📧 E-mail"
|
||||
"change_comment" = "⚙️💬 Comentário"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "Vazio"
|
||||
"ResetAllTraffics" = "Redefinir Todo o Tráfego"
|
||||
"SortedTrafficUsageReport" = "Relatório de Uso de Tráfego Ordenado"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 Пароль обновлён."
|
||||
"received_email" = "📧📥 Email обновлен."
|
||||
"received_comment" = "💬📥 Комментарий обновлён."
|
||||
"received_subid" = "Sub ID успешно изменен!"
|
||||
"id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID."
|
||||
"pass_prompt" = "🔑 Стандартный пароль: {{ .ClientPassword }}\n\nВведите ваш пароль."
|
||||
"email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email."
|
||||
"comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий."
|
||||
"subid_prompt" = "Пожалуйста, введите новый Sub ID:\nТекущий: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 Входящие подключения: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Срок действия: {{ .ClientExp }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящее подключение!"
|
||||
"inbound_client_data_pass" = "🔄 Входящие подключения: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Срок действия: {{ .ClientExp }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящее подключение!"
|
||||
"cancel" = "❌ Процесс отменён! \n\nВы можете снова начать с /start в любое время. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "Используется значение по умолчанию👌"
|
||||
"incorrect_input" = "Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫"
|
||||
"AreYouSure" = "Вы уверены? 🤔"
|
||||
"not_specified" = "Не указан"
|
||||
"SuccessResetTraffic" = "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успешно"
|
||||
"FailedResetTraffic" = "📧 Почта: {{ .ClientEmail }}\n🏁 Результат: ❌ Неудача \n\n🛠️ Ошибка: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 Сброс трафика завершён для всех клиентов."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 Пароль"
|
||||
"change_email" = "⚙️📧 Email"
|
||||
"change_comment" = "⚙️💬 Комментарий"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "Пусто"
|
||||
"ResetAllTraffics" = "Сбросить весь трафик"
|
||||
"SortedTrafficUsageReport" = "Отсортированный отчет об использовании трафика"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 Şifre güncellendi."
|
||||
"received_email" = "📧📥 E-posta güncellendi."
|
||||
"received_comment" = "💬📥 Yorum güncellendi."
|
||||
"received_subid" = "Sub ID başarıyla değiştirildi!"
|
||||
"id_prompt" = "🔑 Varsayılan Kimlik: {{ .ClientId }}\n\nKimliğinizi girin."
|
||||
"pass_prompt" = "🔑 Varsayılan Şifre: {{ .ClientPassword }}\n\nŞifrenizi girin."
|
||||
"email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-postanızı girin."
|
||||
"comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin."
|
||||
"subid_prompt" = "Lütfen yeni bir Sub ID girin:\nMevcut: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 Kimlik: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n📊 Trafik: {{ .ClientTraffic }}\n📅 Bitiş Tarihi: {{ .ClientExp }}\n🌐 IP Sınırı: {{ .IpLimit }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık bu müşteriyi girişe ekleyebilirsin!"
|
||||
"inbound_client_data_pass" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n📊 Trafik: {{ .ClientTraffic }}\n📅 Bitiş Tarihi: {{ .ClientExp }}\n🌐 IP Sınırı: {{ .IpLimit }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık bu müşteriyi girişe ekleyebilirsin!"
|
||||
"cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start ile yeniden başlayabilirsiniz. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "Tamam, varsayılan değeri kullanacağım. 😊"
|
||||
"incorrect_input" = "Girdiğiniz değer geçerli değil.\nKelime öbekleri boşluk olmadan devam etmelidir.\nDoğru örnek: aaaaaa\nYanlış örnek: aaa aaa 🚫"
|
||||
"AreYouSure" = "Emin misin? 🤔"
|
||||
"not_specified" = "Belirtilmemiş"
|
||||
"SuccessResetTraffic" = "📧 E-posta: {{ .ClientEmail }}\n🏁 Sonuç: ✅ Başarılı"
|
||||
"FailedResetTraffic" = "📧 E-posta: {{ .ClientEmail }}\n🏁 Sonuç: ❌ Başarısız \n\n🛠️ Hata: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 Tüm müşteriler için trafik sıfırlama işlemi tamamlandı."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 Şifre"
|
||||
"change_email" = "⚙️📧 E-posta"
|
||||
"change_comment" = "⚙️💬 Yorum"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "Boş"
|
||||
"ResetAllTraffics" = "Tüm Trafikleri Sıfırla"
|
||||
"SortedTrafficUsageReport" = "Sıralı Trafik Kullanım Raporu"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 Пароль оновлено."
|
||||
"received_email" = "📧📥 Електронна пошта оновлена."
|
||||
"received_comment" = "💬📥 Коментар оновлено."
|
||||
"received_subid" = "Sub ID успішно змінено!"
|
||||
"id_prompt" = "🔑 Стандартний ID: {{ .ClientId }}\n\nВведіть ваш ID."
|
||||
"pass_prompt" = "🔑 Стандартний пароль: {{ .ClientPassword }}\n\nВведіть ваш пароль."
|
||||
"email_prompt" = "📧 Стандартний email: {{ .ClientEmail }}\n\nВведіть ваш email."
|
||||
"comment_prompt" = "💬 Стандартний коментар: {{ .ClientComment }}\n\nВведіть ваш коментар."
|
||||
"subid_prompt" = "Будь ласка, введіть новий Sub ID:\nПоточний: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 Вхід: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Електронна пошта: {{ .ClientEmail }}\n📊 Трафік: {{ .ClientTraffic }}\n📅 Дата завершення: {{ .ClientExp }}\n🌐 Обмеження IP: {{ .IpLimit }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідного з'єднання!"
|
||||
"inbound_client_data_pass" = "🔄 Вхід: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Електронна пошта: {{ .ClientEmail }}\n📊 Трафік: {{ .ClientTraffic }}\n📅 Дата завершення: {{ .ClientExp }}\n🌐 Обмеження IP: {{ .IpLimit }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідного з'єднання!"
|
||||
"cancel" = "❌ Процес скасовано! \n\nВи можете знову розпочати, використовуючи /start у будь-який час. 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "Гаразд, залишу значення за замовчуванням. 😊"
|
||||
"incorrect_input" = "Ваш ввід невірний.\nФрази повинні бути без пробілів.\nПравильний приклад: aaaaaa\nНеправильний приклад: aaa aaa 🚫"
|
||||
"AreYouSure" = "Ви впевнені? 🤔"
|
||||
"not_specified" = "Не вказано"
|
||||
"SuccessResetTraffic" = "📧 Електронна пошта: {{ .ClientEmail }}\n🏁 Результат: ✅ Успішно"
|
||||
"FailedResetTraffic" = "📧 Електронна пошта: {{ .ClientEmail }}\n🏁 Результат: ❌ Невдача \n\n🛠️ Помилка: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 Процес скидання трафіку завершено для всіх клієнтів."
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 Пароль"
|
||||
"change_email" = "⚙️📧 Електронна пошта"
|
||||
"change_comment" = "⚙️💬 Коментар"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "Пусто"
|
||||
"ResetAllTraffics" = "Скинути весь трафік"
|
||||
"SortedTrafficUsageReport" = "Відсортований звіт про використання трафіку"
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 密码已更新。"
|
||||
"received_email" = "📧📥 邮箱已更新。"
|
||||
"received_comment" = "💬📥 评论已更新。"
|
||||
"received_subid" = "Sub ID 修改成功!"
|
||||
"id_prompt" = "🔑 默认 ID: {{ .ClientId }}\n\n请输入您的 ID。"
|
||||
"pass_prompt" = "🔑 默认密码: {{ .ClientPassword }}\n\n请输入您的密码。"
|
||||
"email_prompt" = "📧 默认邮箱: {{ .ClientEmail }}\n\n请输入您的邮箱。"
|
||||
"comment_prompt" = "💬 默认评论: {{ .ClientComment }}\n\n请输入您的评论。"
|
||||
"subid_prompt" = "请输入新的 Sub ID:\n当前: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 邮箱: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 到期日期: {{ .ClientExp }}\n🌐 IP 限制: {{ .IpLimit }}\n💬 备注: {{ .ClientComment }}\n\n你现在可以将客户添加到入站了!"
|
||||
"inbound_client_data_pass" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 邮箱: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 到期日期: {{ .ClientExp }}\n🌐 IP 限制: {{ .IpLimit }}\n💬 备注: {{ .ClientComment }}\n\n你现在可以将客户添加到入站了!"
|
||||
"cancel" = "❌ 进程已取消!\n\n您可以随时使用 /start 重新开始。 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "好的,我会使用默认值。 😊"
|
||||
"incorrect_input" = "您的输入无效。\n短语应连续输入,不能有空格。\n正确示例: aaaaaa\n错误示例: aaa aaa 🚫"
|
||||
"AreYouSure" = "你确定吗?🤔"
|
||||
"not_specified" = "未指定"
|
||||
"SuccessResetTraffic" = "📧 邮箱: {{ .ClientEmail }}\n🏁 结果: ✅ 成功"
|
||||
"FailedResetTraffic" = "📧 邮箱: {{ .ClientEmail }}\n🏁 结果: ❌ 失败 \n\n🛠️ 错误: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 所有客户的流量重置已完成。"
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 密码"
|
||||
"change_email" = "⚙️📧 邮箱"
|
||||
"change_comment" = "⚙️💬 评论"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "空"
|
||||
"ResetAllTraffics" = "重置所有流量"
|
||||
"SortedTrafficUsageReport" = "排序的流量使用报告"
|
||||
|
||||
|
|
|
|||
|
|
@ -708,10 +708,12 @@
|
|||
"received_password" = "🔑📥 密碼已更新。"
|
||||
"received_email" = "📧📥 電子郵件已更新。"
|
||||
"received_comment" = "💬📥 評論已更新。"
|
||||
"received_subid" = "Sub ID 修改成功!"
|
||||
"id_prompt" = "🔑 預設 ID: {{ .ClientId }}\n\n請輸入您的 ID。"
|
||||
"pass_prompt" = "🔑 預設密碼: {{ .ClientPassword }}\n\n請輸入您的密碼。"
|
||||
"email_prompt" = "📧 預設電子郵件: {{ .ClientEmail }}\n\n請輸入您的電子郵件。"
|
||||
"comment_prompt" = "💬 預設評論: {{ .ClientComment }}\n\n請輸入您的評論。"
|
||||
"subid_prompt" = "請輸入新的 Sub ID:\n當前: {{.ClientSubId}}"
|
||||
"inbound_client_data_id" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 到期日: {{ .ClientExp }}\n🌐 IP 限制: {{ .IpLimit }}\n💬 備註: {{ .ClientComment }}\n\n你現在可以將客戶加入入站了!"
|
||||
"inbound_client_data_pass" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 到期日: {{ .ClientExp }}\n🌐 IP 限制: {{ .IpLimit }}\n💬 備註: {{ .ClientComment }}\n\n你現在可以將客戶加入入站了!"
|
||||
"cancel" = "❌ 程序已取消!\n\n您可以隨時使用 /start 重新開始。 🔄"
|
||||
|
|
@ -719,6 +721,7 @@
|
|||
"using_default_value" = "好的,我會使用預設值。 😊"
|
||||
"incorrect_input" = "您的輸入無效。\n短語應連續輸入,不能有空格。\n正確示例: aaaaaa\n錯誤示例: aaa aaa 🚫"
|
||||
"AreYouSure" = "你確定嗎?🤔"
|
||||
"not_specified" = "未指定"
|
||||
"SuccessResetTraffic" = "📧 電子郵件: {{ .ClientEmail }}\n🏁 結果: ✅ 成功"
|
||||
"FailedResetTraffic" = "📧 電子郵件: {{ .ClientEmail }}\n🏁 結果: ❌ 失敗 \n\n🛠️ 錯誤: [ {{ .ErrorMessage }} ]"
|
||||
"FinishProcess" = "🔚 所有客戶的流量重置已完成。"
|
||||
|
|
@ -764,6 +767,9 @@
|
|||
"change_password" = "⚙️🔑 密碼"
|
||||
"change_email" = "⚙️📧 電子郵件"
|
||||
"change_comment" = "⚙️💬 評論"
|
||||
"change_subid" = "📝 Sub ID"
|
||||
"change_flow" = "🌊 Flow"
|
||||
"flow_empty" = "空"
|
||||
"ResetAllTraffics" = "重設所有流量"
|
||||
"SortedTrafficUsageReport" = "排序過的流量使用報告"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue