From 4322a18ee32253721760c29bf66f14843db678c1 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Fri, 8 May 2026 17:20:30 +0200 Subject: [PATCH] =?UTF-8?q?i18n(frontend):=20Phase=207-c=20=E2=80=94=20tra?= =?UTF-8?q?nslate=20settings,=20inbounds=20modals,=20xray=20tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Continues the page-by-page translation pass started in cb37dd55 — runs every user-visible string on settings (General/Security/Telegram/Sub), inbounds (Client/QR/Info modals), and xray (Routing/Balancer/Rule/Warp/ Nord/Basics/Outbounds tabs) through useI18n. Updates the TOML→JSON sync script to escape `@` (vue-i18n parses it as a linked-format prefix) and refreshes all 13 locale files. Co-Authored-By: Claude Opus 4.7 --- frontend/scripts/sync-locales.mjs | 17 +- frontend/src/locales/ar-EG.json | 6 +- frontend/src/locales/en-US.json | 6 +- frontend/src/locales/es-ES.json | 6 +- frontend/src/locales/fa-IR.json | 6 +- frontend/src/locales/id-ID.json | 6 +- frontend/src/locales/ja-JP.json | 6 +- frontend/src/locales/pt-BR.json | 6 +- frontend/src/locales/ru-RU.json | 6 +- frontend/src/locales/tr-TR.json | 6 +- frontend/src/locales/uk-UA.json | 6 +- frontend/src/locales/vi-VN.json | 6 +- frontend/src/locales/zh-CN.json | 6 +- frontend/src/locales/zh-TW.json | 6 +- .../src/pages/inbounds/ClientBulkModal.vue | 47 +++-- .../src/pages/inbounds/ClientFormModal.vue | 88 +++----- .../src/pages/inbounds/ClientRowTable.vue | 98 ++++----- .../src/pages/inbounds/InboundInfoModal.vue | 117 +++++------ frontend/src/pages/inbounds/QrCodeModal.vue | 5 +- frontend/src/pages/inbounds/QrPanel.vue | 9 +- frontend/src/pages/settings/GeneralTab.vue | 166 ++++++--------- frontend/src/pages/settings/SecurityTab.vue | 47 ++--- frontend/src/pages/settings/SettingsPage.vue | 70 ++++--- .../pages/settings/SubscriptionFormatsTab.vue | 145 +++++-------- .../pages/settings/SubscriptionGeneralTab.vue | 117 +++++------ frontend/src/pages/settings/TelegramTab.vue | 74 +++---- .../src/pages/settings/TwoFactorModal.vue | 27 +-- frontend/src/pages/xray/BalancerFormModal.vue | 43 ++-- frontend/src/pages/xray/BalancersTab.vue | 59 +++--- frontend/src/pages/xray/BasicsTab.vue | 190 ++++++++---------- frontend/src/pages/xray/NordModal.vue | 112 +++++------ frontend/src/pages/xray/OutboundsTab.vue | 44 ++-- frontend/src/pages/xray/RoutingTab.vue | 40 ++-- frontend/src/pages/xray/RuleFormModal.vue | 15 +- frontend/src/pages/xray/WarpModal.vue | 4 + frontend/src/pages/xray/XrayPage.vue | 20 +- 36 files changed, 755 insertions(+), 877 deletions(-) diff --git a/frontend/scripts/sync-locales.mjs b/frontend/scripts/sync-locales.mjs index 1dc38986..34fd4199 100644 --- a/frontend/scripts/sync-locales.mjs +++ b/frontend/scripts/sync-locales.mjs @@ -43,6 +43,21 @@ function unescape(value) { }); } +// vue-i18n's message compiler treats `@` as the start of a linked +// reference (`@:key` or `@.modifier:key`). When the panel's strings +// contain a literal `@` (e.g. "@BotFather", "@userinfobot", +// "@every 1m"), the compiler aborts with "Invalid linked format". +// vue-i18n's escape syntax is `{'@'}` — that renders a literal `@`. +// We don't use linked references anywhere in the panel's locales, +// so a blanket escape is safe and keeps the TOML readable for +// translators (and for the Go-side template renderer that doesn't +// need this escape). +function escapeForVueI18n(value) { + // Keep the `{` and `}` characters that vue-i18n already uses for + // `{var}` named interpolation working — only `@` needs escaping. + return value.replace(/@/g, "{'@'}"); +} + function setNested(target, path, value) { let cursor = target; for (let i = 0; i < path.length - 1; i++) { @@ -78,7 +93,7 @@ function parseToml(src) { throw new Error(`Unsupported TOML construct at line ${lineNo}: ${rawLine}`); } const [, key, value] = kvMatch; - setNested(tree, [...section, unescape(key)], unescape(value)); + setNested(tree, [...section, unescape(key)], escapeForVueI18n(unescape(value))); } return tree; } diff --git a/frontend/src/locales/ar-EG.json b/frontend/src/locales/ar-EG.json index 52ffde2b..66246c88 100644 --- a/frontend/src/locales/ar-EG.json +++ b/frontend/src/locales/ar-EG.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "سجل تاريخ الـ IPs. (عشان تفعل الإدخال بعد التعطيل، امسح السجل)", "IPLimitlogclear": "امسح السجل", "setDefaultCert": "استخدم شهادة البانل", - "telegramDesc": "ادخل ID شات Telegram. (استخدم '/id' في البوت) أو (@userinfobot)", + "telegramDesc": "ادخل ID شات Telegram. (استخدم '/id' في البوت) أو ({'@'}userinfobot)", "subscriptionDesc": "عشان تلاقي رابط الاشتراك، ادخل على 'التفاصيل'. وكمان ممكن تستخدم نفس الاسم لعدة عملاء.", "info": "معلومات", "same": "نفسه", @@ -418,13 +418,13 @@ "telegramBotEnable": "تفعيل بوت Telegram", "telegramBotEnableDesc": "يفعل بوت Telegram.", "telegramToken": "توكن Telegram", - "telegramTokenDesc": "توكن البوت اللي جبت من '@BotFather'.", + "telegramTokenDesc": "توكن البوت اللي جبت من '{'@'}BotFather'.", "telegramProxy": "بروكسي SOCKS", "telegramProxyDesc": "يفعل بروكسي SOCKS5 للاتصال بـ Telegram. (اضبط الإعدادات حسب الدليل)", "telegramAPIServer": "سيرفر Telegram API", "telegramAPIServerDesc": "سيرفر Telegram API المستخدم. سيبه فاضي لاستخدام الافتراضي.", "telegramChatId": "ID شات الأدمن", - "telegramChatIdDesc": "ID شات الأدمن في Telegram. (مفصول بفواصل)(تقدر تجيبه من @userinfobot) أو (استخدم '/id' في البوت)", + "telegramChatIdDesc": "ID شات الأدمن في Telegram. (مفصول بفواصل)(تقدر تجيبه من {'@'}userinfobot) أو (استخدم '/id' في البوت)", "telegramNotifyTime": "وقت الإشعار", "telegramNotifyTimeDesc": "وقت إشعار البوت للتقارير الدورية. (استخدم صيغة وقت crontab)", "tgNotifyBackup": "نسخة احتياطية لقاعدة البيانات", diff --git a/frontend/src/locales/en-US.json b/frontend/src/locales/en-US.json index 616674c7..cfe11db1 100644 --- a/frontend/src/locales/en-US.json +++ b/frontend/src/locales/en-US.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "The IPs history log. (to enable inbound after disabling, clear the log)", "IPLimitlogclear": "Clear The Log", "setDefaultCert": "Set Cert from Panel", - "telegramDesc": "Please provide Telegram Chat ID. (use '/id' command in the bot) or (@userinfobot)", + "telegramDesc": "Please provide Telegram Chat ID. (use '/id' command in the bot) or ({'@'}userinfobot)", "subscriptionDesc": "To find your subscription URL, navigate to the 'Details'. Additionally, you can use the same name for several clients.", "info": "Info", "same": "Same", @@ -418,13 +418,13 @@ "telegramBotEnable": "Enable Telegram Bot", "telegramBotEnableDesc": "Enables the Telegram bot.", "telegramToken": "Telegram Token", - "telegramTokenDesc": "The Telegram bot token obtained from '@BotFather'.", + "telegramTokenDesc": "The Telegram bot token obtained from '{'@'}BotFather'.", "telegramProxy": "SOCKS Proxy", "telegramProxyDesc": "Enables SOCKS5 proxy for connecting to Telegram. (adjust settings as per guide)", "telegramAPIServer": "Telegram API Server", "telegramAPIServerDesc": "The Telegram API server to use. Leave blank to use the default server.", "telegramChatId": "Admin Chat ID", - "telegramChatIdDesc": "The Telegram Admin Chat ID(s). (comma-separated)(get it here @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)", "tgNotifyBackup": "Database Backup", diff --git a/frontend/src/locales/es-ES.json b/frontend/src/locales/es-ES.json index 2d7d403d..cae44109 100644 --- a/frontend/src/locales/es-ES.json +++ b/frontend/src/locales/es-ES.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "Registro de historial de IPs (antes de habilitar la entrada después de que haya sido desactivada por el límite de IP, debes borrar el registro).", "IPLimitlogclear": "Limpiar el Registro", "setDefaultCert": "Establecer certificado desde el panel", - "telegramDesc": "Por favor, proporciona el ID de Chat de Telegram. (usa el comando '/id' en el bot) o (@userinfobot)", + "telegramDesc": "Por favor, proporciona el ID de Chat de Telegram. (usa el comando '/id' en el bot) o ({'@'}userinfobot)", "subscriptionDesc": "Puedes encontrar tu enlace de suscripción en Detalles, también puedes usar el mismo nombre para varias configuraciones.", "info": "Info", "same": "misma", @@ -418,13 +418,13 @@ "telegramBotEnable": "Habilitar bot de Telegram", "telegramBotEnableDesc": "Conéctese a las funciones de este panel a través del bot de Telegram.", "telegramToken": "Token de Telegram", - "telegramTokenDesc": "Debe obtener el token del administrador de bots de Telegram @botfather.", + "telegramTokenDesc": "Debe obtener el token del administrador de bots de Telegram {'@'}botfather.", "telegramProxy": "Socks5 Proxy", "telegramProxyDesc": "Si necesita el proxy Socks5 para conectarse a Telegram. Ajuste su configuración según la guía.", "telegramAPIServer": "API Server de Telegram", "telegramAPIServerDesc": "El servidor API de Telegram a utilizar. Déjelo en blanco para utilizar el servidor predeterminado.", "telegramChatId": "IDs de Chat de Telegram para Administradores", - "telegramChatIdDesc": "IDs de Chat múltiples separados por comas. Use @userinfobot o use el comando '/id' en el bot para obtener sus IDs de Chat.", + "telegramChatIdDesc": "IDs de Chat múltiples separados por comas. Use {'@'}userinfobot o use el comando '/id' en el bot para obtener sus IDs de Chat.", "telegramNotifyTime": "Hora de Notificación del Bot de Telegram", "telegramNotifyTimeDesc": "Usar el formato de tiempo de Crontab.", "tgNotifyBackup": "Respaldo de Base de Datos", diff --git a/frontend/src/locales/fa-IR.json b/frontend/src/locales/fa-IR.json index 320828f6..a64d3be3 100644 --- a/frontend/src/locales/fa-IR.json +++ b/frontend/src/locales/fa-IR.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "گزارش تاریخچه آی‌پی. برای فعال کردن ورودی پس از غیرفعال شدن، گزارش را پاک کنید", "IPLimitlogclear": "پاک کردن گزارش‌ها", "setDefaultCert": "استفاده از گواهی پنل", - "telegramDesc": "لطفا شناسه گفتگوی تلگرام را وارد کنید. (از دستور '/id' در ربات استفاده کنید) یا (@userinfobot)", + "telegramDesc": "لطفا شناسه گفتگوی تلگرام را وارد کنید. (از دستور '/id' در ربات استفاده کنید) یا ({'@'}userinfobot)", "subscriptionDesc": "شما می‌توانید لینک سابسکربپشن خودرا در 'جزئیات' پیدا کنید، همچنین می‌توانید از همین نام برای چندین کاربر استفاده‌کنید", "info": "اطلاعات", "same": "همسان", @@ -418,13 +418,13 @@ "telegramBotEnable": "فعال‌سازی ربات تلگرام", "telegramBotEnableDesc": "ربات تلگرام را فعال می‌کند", "telegramToken": "توکن تلگرام", - "telegramTokenDesc": "دریافت کنید @botfather توکن را می‌توانید از", + "telegramTokenDesc": "دریافت کنید {'@'}botfather توکن را می‌توانید از", "telegramProxy": "SOCKS پراکسی", "telegramProxyDesc": "را برای اتصال به تلگرام فعال می کند SOCKS5 پراکسی", "telegramAPIServer": "سرور API تلگرام", "telegramAPIServerDesc": "API سرور تلگرام برای اتصال را تغییر میدهد. برای استفاده از سرور پیش فرض خالی بگذارید", "telegramChatId": "آی‌دی چت مدیر", - "telegramChatIdDesc": "دریافت ‌کنید ('/id'یا (دستور (@userinfobot) آی‌دی(های) چت تلگرام مدیر، از", + "telegramChatIdDesc": "دریافت ‌کنید ('/id'یا (دستور ({'@'}userinfobot) آی‌دی(های) چت تلگرام مدیر، از", "telegramNotifyTime": "زمان نوتیفیکیشن", "telegramNotifyTimeDesc": "زمان‌اطلاع‌رسانی ربات تلگرام برای گزارش های دوره‌ای. از فرمت زمانبندی لینوکس استفاده‌کنید‌", "tgNotifyBackup": "پشتیبان‌گیری از دیتابیس", diff --git a/frontend/src/locales/id-ID.json b/frontend/src/locales/id-ID.json index ac4189c4..1df5359e 100644 --- a/frontend/src/locales/id-ID.json +++ b/frontend/src/locales/id-ID.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "Log histori IP. (untuk mengaktifkan masuk setelah menonaktifkan, hapus log)", "IPLimitlogclear": "Hapus Log", "setDefaultCert": "Atur Sertifikat dari Panel", - "telegramDesc": "Harap berikan ID Obrolan Telegram. (gunakan perintah '/id' di bot) atau (@userinfobot)", + "telegramDesc": "Harap berikan ID Obrolan Telegram. (gunakan perintah '/id' di bot) atau ({'@'}userinfobot)", "subscriptionDesc": "Untuk menemukan URL langganan Anda, buka 'Rincian'. Selain itu, Anda dapat menggunakan nama yang sama untuk beberapa klien.", "info": "Info", "same": "Sama", @@ -418,13 +418,13 @@ "telegramBotEnable": "Aktifkan Bot Telegram", "telegramBotEnableDesc": "Mengaktifkan bot Telegram.", "telegramToken": "Token Telegram", - "telegramTokenDesc": "Token bot Telegram yang diperoleh dari '@BotFather'.", + "telegramTokenDesc": "Token bot Telegram yang diperoleh dari '{'@'}BotFather'.", "telegramProxy": "Proxy SOCKS", "telegramProxyDesc": "Mengaktifkan proxy SOCKS5 untuk terhubung ke Telegram. (sesuaikan pengaturan sesuai panduan)", "telegramAPIServer": "Telegram API Server", "telegramAPIServerDesc": "Server API Telegram yang akan digunakan. Biarkan kosong untuk menggunakan server default.", "telegramChatId": "ID Obrolan Admin", - "telegramChatIdDesc": "ID Obrolan Admin Telegram. (dipisahkan koma)(dapatkan di sini @userinfobot) atau (gunakan perintah '/id' di bot)", + "telegramChatIdDesc": "ID Obrolan Admin Telegram. (dipisahkan koma)(dapatkan di sini {'@'}userinfobot) atau (gunakan perintah '/id' di bot)", "telegramNotifyTime": "Waktu Notifikasi", "telegramNotifyTimeDesc": "Waktu notifikasi bot Telegram yang diatur untuk laporan berkala. (gunakan format waktu crontab)", "tgNotifyBackup": "Cadangan Database", diff --git a/frontend/src/locales/ja-JP.json b/frontend/src/locales/ja-JP.json index 442544f1..203220f6 100644 --- a/frontend/src/locales/ja-JP.json +++ b/frontend/src/locales/ja-JP.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "IP履歴ログ(無効なインバウンドトラフィックを有効にするには、ログをクリアしてください)", "IPLimitlogclear": "ログをクリア", "setDefaultCert": "パネル設定から証明書を設定", - "telegramDesc": "TelegramチャットIDを提供してください。(ボットで'/id'コマンドを使用)または(@userinfobot)", + "telegramDesc": "TelegramチャットIDを提供してください。(ボットで'/id'コマンドを使用)または({'@'}userinfobot)", "subscriptionDesc": "サブスクリプションURLを見つけるには、“詳細情報”に移動してください。また、複数のクライアントに同じ名前を使用することができます。", "info": "情報", "same": "同じ", @@ -418,13 +418,13 @@ "telegramBotEnable": "Telegramボットを有効にする", "telegramBotEnableDesc": "Telegramボット機能を有効にする", "telegramToken": "Telegramボットトークン", - "telegramTokenDesc": "'@BotFather'から取得したTelegramボットトークン", + "telegramTokenDesc": "'{'@'}BotFather'から取得したTelegramボットトークン", "telegramProxy": "SOCKS5プロキシ", "telegramProxyDesc": "SOCKS5プロキシを有効にしてTelegramに接続する(ガイドに従って設定を調整)", "telegramAPIServer": "Telegram APIサーバー", "telegramAPIServerDesc": "使用するTelegram APIサーバー。空白の場合はデフォルトサーバーを使用する", "telegramChatId": "管理者チャットID", - "telegramChatIdDesc": "Telegram管理者チャットID(複数の場合はカンマで区切る)@userinfobotで取得するか、ボットで'/id'コマンドを使用して取得する", + "telegramChatIdDesc": "Telegram管理者チャットID(複数の場合はカンマで区切る){'@'}userinfobotで取得するか、ボットで'/id'コマンドを使用して取得する", "telegramNotifyTime": "通知時間", "telegramNotifyTimeDesc": "定期的なTelegramボット通知時間を設定する(crontab時間形式を使用)", "tgNotifyBackup": "データベースバックアップ", diff --git a/frontend/src/locales/pt-BR.json b/frontend/src/locales/pt-BR.json index b249d571..bb0aa193 100644 --- a/frontend/src/locales/pt-BR.json +++ b/frontend/src/locales/pt-BR.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "O histórico de IPs. (para ativar o inbound após a desativação, limpe o log)", "IPLimitlogclear": "Limpar o Log", "setDefaultCert": "Definir Certificado pelo Painel", - "telegramDesc": "Por favor, forneça o ID do Chat do Telegram. (use o comando '/id' no bot) ou (@userinfobot)", + "telegramDesc": "Por favor, forneça o ID do Chat do Telegram. (use o comando '/id' no bot) ou ({'@'}userinfobot)", "subscriptionDesc": "Para encontrar seu URL de assinatura, navegue até 'Detalhes'. Além disso, você pode usar o mesmo nome para vários clientes.", "info": "Informações", "same": "Igual", @@ -418,13 +418,13 @@ "telegramBotEnable": "Ativar Bot do Telegram", "telegramBotEnableDesc": "Ativa o bot do Telegram.", "telegramToken": "Token do Telegram", - "telegramTokenDesc": "O token do bot do Telegram obtido de '@BotFather'.", + "telegramTokenDesc": "O token do bot do Telegram obtido de '{'@'}BotFather'.", "telegramProxy": "Proxy SOCKS", "telegramProxyDesc": "Ativa o proxy SOCKS5 para conectar ao Telegram. (ajuste as configurações conforme o guia)", "telegramAPIServer": "API Server do Telegram", "telegramAPIServerDesc": "O servidor API do Telegram a ser usado. Deixe em branco para usar o servidor padrão.", "telegramChatId": "ID de Chat do Administrador", - "telegramChatIdDesc": "O(s) ID(s) de Chat do Administrador no Telegram. (separado por vírgulas)(obtenha aqui @userinfobot) ou (use o comando '/id' no bot)", + "telegramChatIdDesc": "O(s) ID(s) de Chat do Administrador no Telegram. (separado por vírgulas)(obtenha aqui {'@'}userinfobot) ou (use o comando '/id' no bot)", "telegramNotifyTime": "Hora da Notificação", "telegramNotifyTimeDesc": "O horário de notificação do bot do Telegram configurado para relatórios periódicos. (use o formato de tempo do crontab)", "tgNotifyBackup": "Backup do Banco de Dados", diff --git a/frontend/src/locales/ru-RU.json b/frontend/src/locales/ru-RU.json index dc2a8788..74f82ca2 100644 --- a/frontend/src/locales/ru-RU.json +++ b/frontend/src/locales/ru-RU.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "Лог IP-адресов (перед включением лога IP-адресов, вы должны очистить лог)", "IPLimitlogclear": "Очистить лог", "setDefaultCert": "Установить сертификат панели", - "telegramDesc": "Пожалуйста, укажите Chat ID Telegram. (используйте команду '/id' в боте) или (@userinfobot)", + "telegramDesc": "Пожалуйста, укажите Chat ID Telegram. (используйте команду '/id' в боте) или ({'@'}userinfobot)", "subscriptionDesc": "Вы можете найти свою ссылку подписки в разделе 'Подробнее'", "info": "Информация", "same": "Тот же", @@ -418,13 +418,13 @@ "telegramBotEnable": "Включить Telegram бота", "telegramBotEnableDesc": "Доступ к функциям панели через Telegram-бота", "telegramToken": "Токен Telegram бота", - "telegramTokenDesc": "Необходимо получить токен у менеджера ботов Telegram @botfather", + "telegramTokenDesc": "Необходимо получить токен у менеджера ботов Telegram {'@'}botfather", "telegramProxy": "Прокси-сервер Socks5", "telegramProxyDesc": "Если для подключения к Telegram вам нужен прокси Socks5, настройте его параметры согласно руководству.", "telegramAPIServer": "API-сервер Telegram", "telegramAPIServerDesc": "Используемый API-сервер Telegram. Оставьте пустым, чтобы использовать сервер по умолчанию.", "telegramChatId": "User ID администратора бота", - "telegramChatIdDesc": "Один или несколько User ID администратора(-ов) Telegram-бота. Для получения User ID используйте @userinfobot или команду '/id' в боте.", + "telegramChatIdDesc": "Один или несколько User ID администратора(-ов) Telegram-бота. Для получения User ID используйте {'@'}userinfobot или команду '/id' в боте.", "telegramNotifyTime": "Частота уведомлений для администраторов от бота", "telegramNotifyTimeDesc": "Укажите интервал уведомлений в формате Crontab", "tgNotifyBackup": "Резервное копирование базы данных", diff --git a/frontend/src/locales/tr-TR.json b/frontend/src/locales/tr-TR.json index e145ce20..dce24c48 100644 --- a/frontend/src/locales/tr-TR.json +++ b/frontend/src/locales/tr-TR.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "IP geçmiş günlüğü. (devre dışı bırakıldıktan sonra gelini etkinleştirmek için günlüğü temizleyin)", "IPLimitlogclear": "Günlüğü Temizle", "setDefaultCert": "Panelden Sertifikayı Ayarla", - "telegramDesc": "Lütfen Telegram Sohbet Kimliği sağlayın. (botta '/id' komutunu kullanın) veya (@userinfobot)", + "telegramDesc": "Lütfen Telegram Sohbet Kimliği sağlayın. (botta '/id' komutunu kullanın) veya ({'@'}userinfobot)", "subscriptionDesc": "Abonelik URL'inizi bulmak için 'Detaylar'a gidin. Ayrıca, aynı adı birden fazla müşteri için kullanabilirsiniz.", "info": "Bilgi", "same": "Aynı", @@ -418,13 +418,13 @@ "telegramBotEnable": "Telegram Botunu Etkinleştir", "telegramBotEnableDesc": "Telegram botunu etkinleştirir.", "telegramToken": "Telegram Token", - "telegramTokenDesc": "'@BotFather'dan alınan Telegram bot token.", + "telegramTokenDesc": "'{'@'}BotFather'dan alınan Telegram bot token.", "telegramProxy": "SOCKS Proxy", "telegramProxyDesc": "Telegram'a bağlanmak için SOCKS5 proxy'sini etkinleştirir. (ayarları kılavuzda belirtilen şekilde ayarlayın)", "telegramAPIServer": "Telegram API Server", "telegramAPIServerDesc": "Kullanılacak Telegram API sunucusu. Varsayılan sunucuyu kullanmak için boş bırakın.", "telegramChatId": "Yönetici Sohbet Kimliği", - "telegramChatIdDesc": "Telegram Yönetici Sohbet Kimliği(leri). (virgülle ayrılmış)(buradan alın @userinfobot) veya (botta '/id' komutunu kullanın)", + "telegramChatIdDesc": "Telegram Yönetici Sohbet Kimliği(leri). (virgülle ayrılmış)(buradan alın {'@'}userinfobot) veya (botta '/id' komutunu kullanın)", "telegramNotifyTime": "Bildirim Zamanı", "telegramNotifyTimeDesc": "Periyodik raporlar için ayarlanan Telegram bot bildirim zamanı. (crontab zaman formatını kullanın)", "tgNotifyBackup": "Veritabanı Yedeği", diff --git a/frontend/src/locales/uk-UA.json b/frontend/src/locales/uk-UA.json index 6d39c948..1cfff66a 100644 --- a/frontend/src/locales/uk-UA.json +++ b/frontend/src/locales/uk-UA.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "Журнал історії IP-адрес. (щоб увімкнути вхідну після вимкнення, очистіть журнал)", "IPLimitlogclear": "Очистити журнал", "setDefaultCert": "Установити сертифікат з панелі", - "telegramDesc": "Будь ласка, вкажіть ID чату Telegram. (використовуйте команду '/id' у боті) або (@userinfobot)", + "telegramDesc": "Будь ласка, вкажіть ID чату Telegram. (використовуйте команду '/id' у боті) або ({'@'}userinfobot)", "subscriptionDesc": "Щоб знайти URL-адресу вашої підписки, перейдіть до «Деталі». Крім того, ви можете використовувати одне ім'я для кількох клієнтів.", "info": "Інформація", "same": "Те саме", @@ -418,13 +418,13 @@ "telegramBotEnable": "Увімкнути Telegram Bot", "telegramBotEnableDesc": "Вмикає бота Telegram.", "telegramToken": "Telegram Токен", - "telegramTokenDesc": "Токен бота Telegram, отриманий від '@BotFather'.", + "telegramTokenDesc": "Токен бота Telegram, отриманий від '{'@'}BotFather'.", "telegramProxy": "SOCKS Проксі", "telegramProxyDesc": "Вмикає проксі-сервер SOCKS5 для підключення до Telegram. (відкоригуйте параметри відповідно до посібника)", "telegramAPIServer": "Сервер Telegram API", "telegramAPIServerDesc": "Сервер Telegram API для використання. Залиште поле порожнім, щоб використовувати сервер за умовчанням.", "telegramChatId": "Ідентифікатор чату адміністратора", - "telegramChatIdDesc": "Ідентифікатори чату адміністратора Telegram. (розділені комами) (отримайте тут @userinfobot) або (використовуйте команду '/id' у боті)", + "telegramChatIdDesc": "Ідентифікатори чату адміністратора Telegram. (розділені комами) (отримайте тут {'@'}userinfobot) або (використовуйте команду '/id' у боті)", "telegramNotifyTime": "Час сповіщення", "telegramNotifyTimeDesc": "Час повідомлення бота Telegram, встановлений для періодичних звітів. (використовуйте формат часу crontab)", "tgNotifyBackup": "Резервне копіювання бази даних", diff --git a/frontend/src/locales/vi-VN.json b/frontend/src/locales/vi-VN.json index 9b8b90a0..f7779f5e 100644 --- a/frontend/src/locales/vi-VN.json +++ b/frontend/src/locales/vi-VN.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "Lịch sử đăng nhập IP (trước khi kích hoạt điểm vào sau khi bị vô hiệu hóa bởi giới hạn IP, bạn nên xóa lịch sử).", "IPLimitlogclear": "Xóa Lịch sử", "setDefaultCert": "Đặt chứng chỉ từ bảng điều khiển", - "telegramDesc": "Vui lòng cung cấp ID Trò chuyện Telegram. (sử dụng lệnh '/id' trong bot) hoặc (@userinfobot)", + "telegramDesc": "Vui lòng cung cấp ID Trò chuyện Telegram. (sử dụng lệnh '/id' trong bot) hoặc ({'@'}userinfobot)", "subscriptionDesc": "Bạn có thể tìm liên kết gói đăng ký của mình trong Chi tiết, cũng như bạn có thể sử dụng cùng tên cho nhiều cấu hình khác nhau", "info": "Thông tin", "same": "Giống nhau", @@ -418,13 +418,13 @@ "telegramBotEnable": "Bật Bot Telegram", "telegramBotEnableDesc": "Kết nối với các tính năng của bảng điều khiển này thông qua bot Telegram", "telegramToken": "Token Telegram", - "telegramTokenDesc": "Bạn phải nhận token từ quản lý bot Telegram @botfather", + "telegramTokenDesc": "Bạn phải nhận token từ quản lý bot Telegram {'@'}botfather", "telegramProxy": "Socks5 Proxy", "telegramProxyDesc": "Nếu bạn cần socks5 proxy để kết nối với Telegram. Điều chỉnh cài đặt của nó theo hướng dẫn.", "telegramAPIServer": "Telegram API Server", "telegramAPIServerDesc": "Máy chủ API Telegram để sử dụng. Để trống để sử dụng máy chủ mặc định.", "telegramChatId": "Chat ID Telegram của quản trị viên", - "telegramChatIdDesc": "Nhiều Chat ID phân tách bằng dấu phẩy. Sử dụng @userinfobot hoặc sử dụng lệnh '/id' trong bot để lấy Chat ID của bạn.", + "telegramChatIdDesc": "Nhiều Chat ID phân tách bằng dấu phẩy. Sử dụng {'@'}userinfobot hoặc sử dụng lệnh '/id' trong bot để lấy Chat ID của bạn.", "telegramNotifyTime": "Thời gian thông báo của bot Telegram", "telegramNotifyTimeDesc": "Sử dụng định dạng thời gian Crontab.", "tgNotifyBackup": "Sao lưu Cơ sở dữ liệu", diff --git a/frontend/src/locales/zh-CN.json b/frontend/src/locales/zh-CN.json index d5ee8787..6cb7c702 100644 --- a/frontend/src/locales/zh-CN.json +++ b/frontend/src/locales/zh-CN.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "IP 历史日志(要启用被禁用的入站流量,请清除日志)", "IPLimitlogclear": "清除日志", "setDefaultCert": "从面板设置证书", - "telegramDesc": "请提供Telegram聊天ID。(在机器人中使用'/id'命令)或(@userinfobot", + "telegramDesc": "请提供Telegram聊天ID。(在机器人中使用'/id'命令)或({'@'}userinfobot", "subscriptionDesc": "要找到你的订阅 URL,请导航到“详细信息”。此外,你可以为多个客户端使用相同的名称。", "info": "信息", "same": "相同", @@ -418,13 +418,13 @@ "telegramBotEnable": "启用 Telegram 机器人", "telegramBotEnableDesc": "启用 Telegram 机器人功能", "telegramToken": "Telegram 机器人令牌(token)", - "telegramTokenDesc": "从 '@BotFather' 获取的 Telegram 机器人令牌", + "telegramTokenDesc": "从 '{'@'}BotFather' 获取的 Telegram 机器人令牌", "telegramProxy": "SOCKS5 Proxy", "telegramProxyDesc": "启用 SOCKS5 代理连接到 Telegram(根据指南调整设置)", "telegramAPIServer": "Telegram API Server", "telegramAPIServerDesc": "要使用的 Telegram API 服务器。留空以使用默认服务器。", "telegramChatId": "管理员聊天 ID", - "telegramChatIdDesc": "Telegram 管理员聊天 ID (多个以逗号分隔)(可通过 @userinfobot 获取,或在机器人中使用 '/id' 命令获取)", + "telegramChatIdDesc": "Telegram 管理员聊天 ID (多个以逗号分隔)(可通过 {'@'}userinfobot 获取,或在机器人中使用 '/id' 命令获取)", "telegramNotifyTime": "通知时间", "telegramNotifyTimeDesc": "设置周期性的 Telegram 机器人通知时间(使用 crontab 时间格式)", "tgNotifyBackup": "数据库备份", diff --git a/frontend/src/locales/zh-TW.json b/frontend/src/locales/zh-TW.json index 6f038089..42c702ce 100644 --- a/frontend/src/locales/zh-TW.json +++ b/frontend/src/locales/zh-TW.json @@ -292,7 +292,7 @@ "IPLimitlogDesc": "IP 歷史日誌(要啟用被禁用的入站流量,請清除日誌)", "IPLimitlogclear": "清除日誌", "setDefaultCert": "從面板設定證書", - "telegramDesc": "請提供Telegram聊天ID。(在機器人中使用'/id'命令)或(@userinfobot", + "telegramDesc": "請提供Telegram聊天ID。(在機器人中使用'/id'命令)或({'@'}userinfobot", "subscriptionDesc": "要找到你的訂閱 URL,請導航到“詳細資訊”。此外,你可以為多個客戶端使用相同的名稱。", "info": "資訊", "same": "相同", @@ -418,13 +418,13 @@ "telegramBotEnable": "啟用 Telegram 機器人", "telegramBotEnableDesc": "啟用 Telegram 機器人功能", "telegramToken": "Telegram 機器人令牌(token)", - "telegramTokenDesc": "從 '@BotFather' 獲取的 Telegram 機器人令牌", + "telegramTokenDesc": "從 '{'@'}BotFather' 獲取的 Telegram 機器人令牌", "telegramProxy": "SOCKS5 Proxy", "telegramProxyDesc": "啟用 SOCKS5 代理連線到 Telegram(根據指南調整設定)", "telegramAPIServer": "Telegram API Server", "telegramAPIServerDesc": "要使用的 Telegram API 伺服器。留空以使用預設伺服器。", "telegramChatId": "管理員聊天 ID", - "telegramChatIdDesc": "Telegram 管理員聊天 ID (多個以逗號分隔)(可通過 @userinfobot 獲取,或在機器人中使用 '/id' 命令獲取)", + "telegramChatIdDesc": "Telegram 管理員聊天 ID (多個以逗號分隔)(可通過 {'@'}userinfobot 獲取,或在機器人中使用 '/id' 命令獲取)", "telegramNotifyTime": "通知時間", "telegramNotifyTimeDesc": "設定週期性的 Telegram 機器人通知時間(使用 crontab 時間格式)", "tgNotifyBackup": "資料庫備份", diff --git a/frontend/src/pages/inbounds/ClientBulkModal.vue b/frontend/src/pages/inbounds/ClientBulkModal.vue index ffe034c8..a4009eac 100644 --- a/frontend/src/pages/inbounds/ClientBulkModal.vue +++ b/frontend/src/pages/inbounds/ClientBulkModal.vue @@ -1,9 +1,12 @@ @@ -248,8 +237,8 @@ const title = computed(() => color="red" class="status-banner" > - Account is (expired | traffic ended) and disabled + {{ t('depleted') }} :label-col="{ md: { span: 8 } }" :wrapper-col="{ md: { span: 14 } }" > - + - + {{ key }} @@ -320,92 +301,85 @@ const title = computed(() => - + - + - + - Clear + {{ t('pages.inbounds.IPLimitlogclear') }} - none + {{ t('none') }} {{ key }} - - + - + {{ SizeFormatter.sizeFormat(clientStats.up) }} / {{ SizeFormatter.sizeFormat(clientStats.down) }} ({{ SizeFormatter.sizeFormat(clientStats.up + clientStats.down) }}) - + - + - + format="YYYY-MM-DD HH:mm:ss" :style="{ width: '100%' }" /> - Expired + {{ t('depleted') }} diff --git a/frontend/src/pages/inbounds/ClientRowTable.vue b/frontend/src/pages/inbounds/ClientRowTable.vue index 71e9f400..fc6d35c4 100644 --- a/frontend/src/pages/inbounds/ClientRowTable.vue +++ b/frontend/src/pages/inbounds/ClientRowTable.vue @@ -1,5 +1,6 @@