Feature: Copy clients between inbounds (#4087)

* feat: copy clients between inbounds

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* fix: copy clients modal not opening

* revert: undo install.sh/deploy.sh changes; i18n: add copy-clients translations for all languages

---------

Co-authored-by: Нестеров Руслан <r.nesterov@comagic.dev>
This commit is contained in:
Rs.Nest
2026-04-23 16:19:07 +03:00
committed by GitHub
parent ff25072690
commit 6bcaf61c44
16 changed files with 641 additions and 0 deletions
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "احفظ التعديلات"
"clientCount" = "عدد العملاء"
"bulk" = "إضافة بالجملة"
"copyFromInbound" = "نسخ العملاء من الـ Inbound"
"copyToInbound" = "نسخ العملاء إلى"
"copySelected" = "نسخ المحدد"
"copySource" = "المصدر"
"copyEmailPreview" = "معاينة البريد الإلكتروني الناتج"
"copySelectSourceFirst" = "الرجاء اختيار الـ Inbound المصدر أولاً."
"copyResult" = "نتيجة النسخ"
"copyResultSuccess" = "تم النسخ بنجاح"
"copyResultNone" = "لا يوجد شيء للنسخ: لم يتم اختيار أي عميل أو أن المصدر فارغ"
"copyResultErrors" = "أخطاء النسخ"
"copyFlowLabel" = "Flow للعملاء الجدد (VLESS)"
"copyFlowHint" = "يُطبَّق على جميع العملاء المنسوخين. اتركه فارغاً لتخطيه."
"selectAll" = "تحديد الكل"
"clearAll" = "مسح الكل"
"method" = "طريقة"
"first" = "أول واحد"
"last" = "آخر واحد"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Save Changes"
"clientCount" = "Number of Clients"
"bulk" = "Add Bulk"
"copyFromInbound" = "Copy Clients from Inbound"
"copyToInbound" = "Copy clients to"
"copySelected" = "Copy Selected"
"copySource" = "Source"
"copyEmailPreview" = "Resulting email preview"
"copySelectSourceFirst" = "Please select a source inbound first."
"copyResult" = "Copy result"
"copyResultSuccess" = "Copied successfully"
"copyResultNone" = "Nothing to copy: no clients selected or source is empty"
"copyResultErrors" = "Copy errors"
"copyFlowLabel" = "Flow for new clients (VLESS)"
"copyFlowHint" = "Applied to all copied clients. Leave empty to skip."
"selectAll" = "Select all"
"clearAll" = "Clear all"
"method" = "Method"
"first" = "First"
"last" = "Last"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Guardar Cambios"
"clientCount" = "Número de Clientes"
"bulk" = "Agregar en Lote"
"copyFromInbound" = "Copiar clientes desde entrada"
"copyToInbound" = "Copiar clientes a"
"copySelected" = "Copiar seleccionados"
"copySource" = "Origen"
"copyEmailPreview" = "Vista previa del email resultante"
"copySelectSourceFirst" = "Seleccione primero una entrada de origen."
"copyResult" = "Resultado de la copia"
"copyResultSuccess" = "Copiado correctamente"
"copyResultNone" = "Nada que copiar: ningún cliente seleccionado o el origen está vacío"
"copyResultErrors" = "Errores al copiar"
"copyFlowLabel" = "Flow para nuevos clientes (VLESS)"
"copyFlowHint" = "Se aplica a todos los clientes copiados. Déjelo vacío para omitir."
"selectAll" = "Seleccionar todo"
"clearAll" = "Limpiar todo"
"method" = "Método"
"first" = "Primero"
"last" = "Último"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "ذخیره تغییرات"
"clientCount" = "تعداد کاربران"
"bulk" = "انبوه‌سازی"
"copyFromInbound" = "کپی کاربران از اینباند"
"copyToInbound" = "کپی کاربران به"
"copySelected" = "کپی انتخاب‌شده‌ها"
"copySource" = "منبع"
"copyEmailPreview" = "پیش‌نمایش ایمیل نهایی"
"copySelectSourceFirst" = "ابتدا یک اینباند منبع انتخاب کنید."
"copyResult" = "نتیجه کپی"
"copyResultSuccess" = "با موفقیت کپی شد"
"copyResultNone" = "چیزی برای کپی نیست: هیچ کاربری انتخاب نشده یا منبع خالی است"
"copyResultErrors" = "خطاهای کپی"
"copyFlowLabel" = "Flow برای کاربران جدید (VLESS)"
"copyFlowHint" = "برای همه کاربران کپی‌شده اعمال می‌شود. برای نادیده گرفتن، خالی بگذارید."
"selectAll" = "انتخاب همه"
"clearAll" = "پاک کردن همه"
"method" = "روش"
"first" = "از"
"last" = "تا"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Simpan Perubahan"
"clientCount" = "Jumlah Klien"
"bulk" = "Tambahkan Massal"
"copyFromInbound" = "Salin klien dari inbound"
"copyToInbound" = "Salin klien ke"
"copySelected" = "Salin yang dipilih"
"copySource" = "Sumber"
"copyEmailPreview" = "Pratinjau email hasil"
"copySelectSourceFirst" = "Silakan pilih inbound sumber terlebih dahulu."
"copyResult" = "Hasil penyalinan"
"copyResultSuccess" = "Berhasil disalin"
"copyResultNone" = "Tidak ada yang disalin: tidak ada klien yang dipilih atau sumber kosong"
"copyResultErrors" = "Kesalahan penyalinan"
"copyFlowLabel" = "Flow untuk klien baru (VLESS)"
"copyFlowHint" = "Diterapkan ke semua klien yang disalin. Biarkan kosong untuk melewati."
"selectAll" = "Pilih semua"
"clearAll" = "Hapus semua"
"method" = "Metode"
"first" = "Pertama"
"last" = "Terakhir"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "変更を保存"
"clientCount" = "クライアント数"
"bulk" = "一括作成"
"copyFromInbound" = "インバウンドからクライアントをコピー"
"copyToInbound" = "クライアントのコピー先"
"copySelected" = "選択項目をコピー"
"copySource" = "ソース"
"copyEmailPreview" = "結果メールのプレビュー"
"copySelectSourceFirst" = "先にソースインバウンドを選択してください。"
"copyResult" = "コピー結果"
"copyResultSuccess" = "正常にコピーされました"
"copyResultNone" = "コピーする項目がありません: クライアントが選択されていないかソースが空です"
"copyResultErrors" = "コピーエラー"
"copyFlowLabel" = "新規クライアントの Flow (VLESS)"
"copyFlowHint" = "すべてのコピー対象クライアントに適用されます。空のままにするとスキップします。"
"selectAll" = "すべて選択"
"clearAll" = "すべて解除"
"method" = "方法"
"first" = "最初"
"last" = "最後"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Salvar Alterações"
"clientCount" = "Número de Clientes"
"bulk" = "Adicionar Vários"
"copyFromInbound" = "Copiar clientes da entrada"
"copyToInbound" = "Copiar clientes para"
"copySelected" = "Copiar selecionados"
"copySource" = "Origem"
"copyEmailPreview" = "Prévia do email resultante"
"copySelectSourceFirst" = "Selecione primeiro uma entrada de origem."
"copyResult" = "Resultado da cópia"
"copyResultSuccess" = "Copiado com sucesso"
"copyResultNone" = "Nada a copiar: nenhum cliente selecionado ou origem vazia"
"copyResultErrors" = "Erros ao copiar"
"copyFlowLabel" = "Flow para novos clientes (VLESS)"
"copyFlowHint" = "Aplicado a todos os clientes copiados. Deixe em branco para ignorar."
"selectAll" = "Selecionar tudo"
"clearAll" = "Limpar tudo"
"method" = "Método"
"first" = "Primeiro"
"last" = "Último"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Сохранить изменения"
"clientCount" = "Количество клиентов"
"bulk" = "Добавить несколько"
"copyFromInbound" = "Скопировать клиентов из инбаунда"
"copyToInbound" = "Скопировать клиентов в"
"copySelected" = "Скопировать выбранных"
"copySource" = "Источник"
"copyEmailPreview" = "Предпросмотр итоговых email"
"copySelectSourceFirst" = "Сначала выберите источник."
"copyResult" = "Результат копирования"
"copyResultSuccess" = "Успешно скопировано"
"copyResultNone" = "Нечего копировать: ни одного клиента не выбрано или список источника пуст"
"copyResultErrors" = "Ошибки при копировании"
"copyFlowLabel" = "Flow для новых клиентов (VLESS)"
"copyFlowHint" = "Применится ко всем копируемым клиентам. Оставьте пустым, чтобы не задавать."
"selectAll" = "Выбрать всех"
"clearAll" = "Снять всё"
"method" = "Метод"
"first" = "Первый"
"last" = "Последний"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Değişiklikleri Kaydet"
"clientCount" = "Müşteri Sayısı"
"bulk" = "Toplu Ekle"
"copyFromInbound" = "Gelen bağlantıdan istemcileri kopyala"
"copyToInbound" = "İstemcileri şuraya kopyala"
"copySelected" = "Seçilenleri kopyala"
"copySource" = "Kaynak"
"copyEmailPreview" = "Sonuç e-posta önizlemesi"
"copySelectSourceFirst" = "Önce bir kaynak gelen bağlantı seçin."
"copyResult" = "Kopyalama sonucu"
"copyResultSuccess" = "Başarıyla kopyalandı"
"copyResultNone" = "Kopyalanacak bir şey yok: istemci seçilmedi veya kaynak boş"
"copyResultErrors" = "Kopyalama hataları"
"copyFlowLabel" = "Yeni istemciler için Flow (VLESS)"
"copyFlowHint" = "Kopyalanan tüm istemcilere uygulanır. Boş bırakırsanız atlanır."
"selectAll" = "Tümünü seç"
"clearAll" = "Tümünü temizle"
"method" = "Yöntem"
"first" = "İlk"
"last" = "Son"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Зберегти зміни"
"clientCount" = "Кількість клієнтів"
"bulk" = "Додати групу"
"copyFromInbound" = "Скопіювати клієнтів з інбаунда"
"copyToInbound" = "Скопіювати клієнтів у"
"copySelected" = "Скопіювати вибраних"
"copySource" = "Джерело"
"copyEmailPreview" = "Попередній перегляд підсумкових email"
"copySelectSourceFirst" = "Спочатку виберіть джерело."
"copyResult" = "Результат копіювання"
"copyResultSuccess" = "Успішно скопійовано"
"copyResultNone" = "Нічого копіювати: жодного клієнта не вибрано або список джерела порожній"
"copyResultErrors" = "Помилки під час копіювання"
"copyFlowLabel" = "Flow для нових клієнтів (VLESS)"
"copyFlowHint" = "Застосується до всіх скопійованих клієнтів. Залиште порожнім, щоб не задавати."
"selectAll" = "Вибрати всіх"
"clearAll" = "Зняти все"
"method" = "Метод"
"first" = "Перший"
"last" = "Останній"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "Lưu thay đổi"
"clientCount" = "Số lượng người dùng"
"bulk" = "Thêm hàng loạt"
"copyFromInbound" = "Sao chép người dùng từ Inbound"
"copyToInbound" = "Sao chép người dùng đến"
"copySelected" = "Sao chép đã chọn"
"copySource" = "Nguồn"
"copyEmailPreview" = "Xem trước email kết quả"
"copySelectSourceFirst" = "Vui lòng chọn Inbound nguồn trước."
"copyResult" = "Kết quả sao chép"
"copyResultSuccess" = "Đã sao chép thành công"
"copyResultNone" = "Không có gì để sao chép: chưa chọn người dùng hoặc nguồn trống"
"copyResultErrors" = "Lỗi sao chép"
"copyFlowLabel" = "Flow cho người dùng mới (VLESS)"
"copyFlowHint" = "Áp dụng cho tất cả người dùng được sao chép. Để trống để bỏ qua."
"selectAll" = "Chọn tất cả"
"clearAll" = "Bỏ chọn tất cả"
"method" = "Phương pháp"
"first" = "Đầu tiên"
"last" = "Cuối cùng"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "保存修改"
"clientCount" = "客户端数量"
"bulk" = "批量创建"
"copyFromInbound" = "从入站复制客户端"
"copyToInbound" = "复制客户端到"
"copySelected" = "复制所选"
"copySource" = "来源"
"copyEmailPreview" = "最终邮箱预览"
"copySelectSourceFirst" = "请先选择来源入站。"
"copyResult" = "复制结果"
"copyResultSuccess" = "复制成功"
"copyResultNone" = "没有可复制的内容:未选择客户端或来源为空"
"copyResultErrors" = "复制错误"
"copyFlowLabel" = "新客户端的 Flow (VLESS)"
"copyFlowHint" = "应用于所有复制的客户端。留空则跳过。"
"selectAll" = "全选"
"clearAll" = "全不选"
"method" = "方法"
"first" = "置顶"
"last" = "置底"
+14
View File
@@ -298,6 +298,20 @@
"submitEdit" = "儲存修改"
"clientCount" = "客戶端數量"
"bulk" = "批量建立"
"copyFromInbound" = "從入站複製用戶端"
"copyToInbound" = "複製用戶端到"
"copySelected" = "複製所選"
"copySource" = "來源"
"copyEmailPreview" = "最終郵箱預覽"
"copySelectSourceFirst" = "請先選擇來源入站。"
"copyResult" = "複製結果"
"copyResultSuccess" = "複製成功"
"copyResultNone" = "沒有可複製的內容:未選擇用戶端或來源為空"
"copyResultErrors" = "複製錯誤"
"copyFlowLabel" = "新用戶端的 Flow (VLESS)"
"copyFlowHint" = "套用於所有複製的用戶端。留空則略過。"
"selectAll" = "全選"
"clearAll" = "全不選"
"method" = "方法"
"first" = "置頂"
"last" = "置底"