Add invite links with admin-configurable config creation limits.
Admins can create shareable links that allow redeeming a VPN config a set number of times (or unlimited). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"nav_servers": "Servers",
|
||||
"nav_users": "Users",
|
||||
"nav_invites": "Invite links",
|
||||
"nav_settings": "Settings",
|
||||
"nav_connections": "Connections",
|
||||
"nav_logout": "Logout",
|
||||
@@ -196,6 +197,41 @@
|
||||
"guest_not_found": "404 Not Found",
|
||||
"guest_not_found_desc": "Guest access is disabled or the link is invalid.",
|
||||
"wrong_guest_password": "Wrong password",
|
||||
"invites_title": "Invite links",
|
||||
"invites_hint": "Create shareable links. Anyone with the link can create a VPN config — you set how many times.",
|
||||
"invites_empty": "No invite links yet",
|
||||
"invites_empty_desc": "Create a link and share it — no registration needed.",
|
||||
"invite_create": "Create link",
|
||||
"invite_edit": "Edit link",
|
||||
"invite_active": "Active",
|
||||
"invite_expired": "Expired",
|
||||
"invite_exhausted": "No uses left",
|
||||
"invite_uses": "Uses",
|
||||
"invite_name_label": "Link name",
|
||||
"invite_max_uses_label": "Max configs",
|
||||
"invite_max_uses_hint": "How many configs can be created via this link. 0 = unlimited.",
|
||||
"invite_user_label": "Store configs under user",
|
||||
"invite_user_hint": "Created configs are attached to this panel user (for management).",
|
||||
"invite_user_required": "Select a user to store configs under",
|
||||
"invite_password_label": "Password (optional)",
|
||||
"invite_expires_label": "Expires at (optional)",
|
||||
"invite_clear_expires": "Remove expiration",
|
||||
"invite_note_label": "Note (admin only)",
|
||||
"invite_note_placeholder": "Internal comment",
|
||||
"invite_reset_used": "Reset used counter to 0",
|
||||
"invite_created": "Invite link created (URL copied)",
|
||||
"invite_updated": "Invite link updated",
|
||||
"invite_deleted": "Invite link deleted",
|
||||
"invite_delete_confirm": "Delete this invite link?",
|
||||
"invite_public_title": "Invite",
|
||||
"invite_public_subtitle": "Get a VPN config via invite link",
|
||||
"invite_protected_desc": "This invite link is password protected.",
|
||||
"invite_get_config_hint": "Each click creates one new config and counts as a use",
|
||||
"invite_uses_left": "Remaining uses: {}",
|
||||
"invite_uses_left_unlimited": "Created so far: {} (unlimited)",
|
||||
"invite_not_found": "404 Not Found",
|
||||
"invite_not_found_desc": "Invite link is invalid or was deleted.",
|
||||
"wrong_invite_password": "Wrong password",
|
||||
"public_link_label": "Public link",
|
||||
"disabled": "Disabled",
|
||||
"out_of": "Of",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"nav_servers": "سرورها",
|
||||
"nav_users": "کاربران",
|
||||
"nav_invites": "لینک دعوت",
|
||||
"nav_settings": "تنظیمات",
|
||||
"nav_connections": "اتصالها",
|
||||
"nav_logout": "خروج",
|
||||
@@ -194,6 +195,41 @@
|
||||
"guest_not_found": "404 یافت نشد",
|
||||
"guest_not_found_desc": "دسترسی مهمان غیرفعال است یا لینک نامعتبر است.",
|
||||
"wrong_guest_password": "رمز عبور اشتباه است",
|
||||
"invites_title": "لینکهای دعوت",
|
||||
"invites_hint": "لینک قابل اشتراک بسازید. با لینک میتوان کانفیگ VPN ساخت — تعداد را شما تعیین میکنید.",
|
||||
"invites_empty": "هنوز لینکی نیست",
|
||||
"invites_empty_desc": "لینک بسازید و به اشتراک بگذارید — بدون ثبتنام.",
|
||||
"invite_create": "ساخت لینک",
|
||||
"invite_edit": "ویرایش لینک",
|
||||
"invite_active": "فعال",
|
||||
"invite_expired": "منقضی",
|
||||
"invite_exhausted": "ظرفیت تمام شده",
|
||||
"invite_uses": "استفادهها",
|
||||
"invite_name_label": "نام لینک",
|
||||
"invite_max_uses_label": "حداکثر کانفیگ",
|
||||
"invite_max_uses_hint": "چند بار میتوان با این لینک کانفیگ ساخت. 0 = نامحدود.",
|
||||
"invite_user_label": "کاربر ذخیرهسازی",
|
||||
"invite_user_hint": "کانفیگهای ساختهشده به این کاربر پنل وصل میشوند.",
|
||||
"invite_user_required": "یک کاربر انتخاب کنید",
|
||||
"invite_password_label": "رمز عبور (اختیاری)",
|
||||
"invite_expires_label": "انقضا (اختیاری)",
|
||||
"invite_clear_expires": "حذف تاریخ انقضا",
|
||||
"invite_note_label": "یادداشت (فقط ادمین)",
|
||||
"invite_note_placeholder": "توضیح داخلی",
|
||||
"invite_reset_used": "ریست شمارنده استفاده",
|
||||
"invite_created": "لینک ساخته شد (URL کپی شد)",
|
||||
"invite_updated": "لینک بهروز شد",
|
||||
"invite_deleted": "لینک حذف شد",
|
||||
"invite_delete_confirm": "این لینک حذف شود؟",
|
||||
"invite_public_title": "دعوت",
|
||||
"invite_public_subtitle": "دریافت کانفیگ VPN با لینک دعوت",
|
||||
"invite_protected_desc": "این لینک با رمز محافظت شده است.",
|
||||
"invite_get_config_hint": "هر کلیک یک کانفیگ جدید میسازد و یک استفاده کم میکند",
|
||||
"invite_uses_left": "باقیمانده: {}",
|
||||
"invite_uses_left_unlimited": "ساختهشده: {} (نامحدود)",
|
||||
"invite_not_found": "404 یافت نشد",
|
||||
"invite_not_found_desc": "لینک نامعتبر است یا حذف شده.",
|
||||
"wrong_invite_password": "رمز عبور اشتباه است",
|
||||
"public_link_label": "لینک عمومی",
|
||||
"disabled": "غیرفعال",
|
||||
"out_of": "از",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"nav_servers": "Serveurs",
|
||||
"nav_users": "Utilisateurs",
|
||||
"nav_invites": "Liens d'invitation",
|
||||
"nav_settings": "Paramètres",
|
||||
"nav_connections": "Connexions",
|
||||
"nav_logout": "Déconnexion",
|
||||
@@ -194,6 +195,41 @@
|
||||
"guest_not_found": "404 Introuvable",
|
||||
"guest_not_found_desc": "Accès invité désactivé ou lien invalide.",
|
||||
"wrong_guest_password": "Mauvais mot de passe",
|
||||
"invites_title": "Liens d'invitation",
|
||||
"invites_hint": "Créez des liens partageables. Le destinataire peut créer une config VPN — vous fixez le nombre d'utilisations.",
|
||||
"invites_empty": "Aucun lien",
|
||||
"invites_empty_desc": "Créez un lien à partager — sans inscription.",
|
||||
"invite_create": "Créer un lien",
|
||||
"invite_edit": "Modifier le lien",
|
||||
"invite_active": "Actif",
|
||||
"invite_expired": "Expiré",
|
||||
"invite_exhausted": "Plus d'utilisations",
|
||||
"invite_uses": "Utilisations",
|
||||
"invite_name_label": "Nom du lien",
|
||||
"invite_max_uses_label": "Configs max",
|
||||
"invite_max_uses_hint": "Nombre de configs créables via ce lien. 0 = illimité.",
|
||||
"invite_user_label": "Utilisateur de stockage",
|
||||
"invite_user_hint": "Les configs créées sont attachées à cet utilisateur.",
|
||||
"invite_user_required": "Choisissez un utilisateur",
|
||||
"invite_password_label": "Mot de passe (optionnel)",
|
||||
"invite_expires_label": "Expiration (optionnel)",
|
||||
"invite_clear_expires": "Retirer l'expiration",
|
||||
"invite_note_label": "Note (admin)",
|
||||
"invite_note_placeholder": "Commentaire interne",
|
||||
"invite_reset_used": "Réinitialiser le compteur",
|
||||
"invite_created": "Lien créé (URL copiée)",
|
||||
"invite_updated": "Lien mis à jour",
|
||||
"invite_deleted": "Lien supprimé",
|
||||
"invite_delete_confirm": "Supprimer ce lien ?",
|
||||
"invite_public_title": "Invitation",
|
||||
"invite_public_subtitle": "Obtenir une config VPN via invitation",
|
||||
"invite_protected_desc": "Lien protégé par mot de passe.",
|
||||
"invite_get_config_hint": "Chaque clic crée une config et compte comme une utilisation",
|
||||
"invite_uses_left": "Restantes : {}",
|
||||
"invite_uses_left_unlimited": "Créées : {} (illimité)",
|
||||
"invite_not_found": "404 Introuvable",
|
||||
"invite_not_found_desc": "Lien invalide ou supprimé.",
|
||||
"wrong_invite_password": "Mauvais mot de passe",
|
||||
"public_link_label": "Lien public",
|
||||
"disabled": "Désactivé",
|
||||
"out_of": "sur",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"nav_servers": "Серверы",
|
||||
"nav_users": "Пользователи",
|
||||
"nav_invites": "Ссылки",
|
||||
"nav_settings": "Настройки",
|
||||
"nav_connections": "Подключения",
|
||||
"nav_logout": "Выход",
|
||||
@@ -196,6 +197,41 @@
|
||||
"guest_not_found": "404 Не найдено",
|
||||
"guest_not_found_desc": "Гостевой доступ отключён или ссылка неверна.",
|
||||
"wrong_guest_password": "Неверный пароль",
|
||||
"invites_title": "Ссылки для конфигов",
|
||||
"invites_hint": "Создавайте ссылки для раздачи. По ссылке можно создать VPN-конфиг — сколько раз, указываете вы.",
|
||||
"invites_empty": "Ссылок пока нет",
|
||||
"invites_empty_desc": "Создайте ссылку и отправьте её — регистрация не нужна.",
|
||||
"invite_create": "Создать ссылку",
|
||||
"invite_edit": "Редактировать ссылку",
|
||||
"invite_active": "Активна",
|
||||
"invite_expired": "Истекла",
|
||||
"invite_exhausted": "Лимит исчерпан",
|
||||
"invite_uses": "Использований",
|
||||
"invite_name_label": "Название ссылки",
|
||||
"invite_max_uses_label": "Сколько конфигов",
|
||||
"invite_max_uses_hint": "Сколько раз можно создать конфиг по этой ссылке. 0 = без лимита.",
|
||||
"invite_user_label": "Пользователь для хранения",
|
||||
"invite_user_hint": "Созданные конфиги привязываются к этому пользователю панели.",
|
||||
"invite_user_required": "Выберите пользователя для хранения конфигов",
|
||||
"invite_password_label": "Пароль (опционально)",
|
||||
"invite_expires_label": "Срок действия (опционально)",
|
||||
"invite_clear_expires": "Убрать срок действия",
|
||||
"invite_note_label": "Заметка (только админ)",
|
||||
"invite_note_placeholder": "Внутренний комментарий",
|
||||
"invite_reset_used": "Сбросить счётчик использований",
|
||||
"invite_created": "Ссылка создана (URL скопирован)",
|
||||
"invite_updated": "Ссылка обновлена",
|
||||
"invite_deleted": "Ссылка удалена",
|
||||
"invite_delete_confirm": "Удалить эту ссылку?",
|
||||
"invite_public_title": "Приглашение",
|
||||
"invite_public_subtitle": "Получите VPN-конфиг по ссылке",
|
||||
"invite_protected_desc": "Эта ссылка защищена паролем.",
|
||||
"invite_get_config_hint": "Каждое нажатие создаёт новый конфиг и тратит одно использование",
|
||||
"invite_uses_left": "Осталось использований: {}",
|
||||
"invite_uses_left_unlimited": "Уже создано: {} (без лимита)",
|
||||
"invite_not_found": "404 Не найдено",
|
||||
"invite_not_found_desc": "Ссылка неверна или была удалена.",
|
||||
"wrong_invite_password": "Неверный пароль",
|
||||
"public_link_label": "Публичная ссылка",
|
||||
"disabled": "Отключён",
|
||||
"out_of": "Из",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"nav_servers": "服务器",
|
||||
"nav_users": "用户列表",
|
||||
"nav_invites": "邀请链接",
|
||||
"nav_settings": "设置",
|
||||
"nav_connections": "连接管理",
|
||||
"nav_logout": "登出",
|
||||
@@ -194,6 +195,41 @@
|
||||
"guest_not_found": "404 未找到",
|
||||
"guest_not_found_desc": "访客访问已禁用或链接无效。",
|
||||
"wrong_guest_password": "密码错误",
|
||||
"invites_title": "邀请链接",
|
||||
"invites_hint": "创建可分享的链接。对方可创建 VPN 配置,次数由您设定。",
|
||||
"invites_empty": "暂无邀请链接",
|
||||
"invites_empty_desc": "创建链接并分享 — 无需注册。",
|
||||
"invite_create": "创建链接",
|
||||
"invite_edit": "编辑链接",
|
||||
"invite_active": "有效",
|
||||
"invite_expired": "已过期",
|
||||
"invite_exhausted": "次数用尽",
|
||||
"invite_uses": "使用次数",
|
||||
"invite_name_label": "链接名称",
|
||||
"invite_max_uses_label": "最多配置数",
|
||||
"invite_max_uses_hint": "此链接可创建配置的次数。0 = 不限。",
|
||||
"invite_user_label": "配置归属用户",
|
||||
"invite_user_hint": "创建的配置会挂到该面板用户下。",
|
||||
"invite_user_required": "请选择用户",
|
||||
"invite_password_label": "密码(可选)",
|
||||
"invite_expires_label": "过期时间(可选)",
|
||||
"invite_clear_expires": "清除过期时间",
|
||||
"invite_note_label": "备注(仅管理员)",
|
||||
"invite_note_placeholder": "内部备注",
|
||||
"invite_reset_used": "重置已用次数",
|
||||
"invite_created": "链接已创建(URL 已复制)",
|
||||
"invite_updated": "链接已更新",
|
||||
"invite_deleted": "链接已删除",
|
||||
"invite_delete_confirm": "删除此邀请链接?",
|
||||
"invite_public_title": "邀请",
|
||||
"invite_public_subtitle": "通过邀请链接获取 VPN 配置",
|
||||
"invite_protected_desc": "此链接受密码保护。",
|
||||
"invite_get_config_hint": "每次点击创建一份新配置并消耗一次额度",
|
||||
"invite_uses_left": "剩余次数:{}",
|
||||
"invite_uses_left_unlimited": "已创建:{}(不限)",
|
||||
"invite_not_found": "404 未找到",
|
||||
"invite_not_found_desc": "链接无效或已删除。",
|
||||
"wrong_invite_password": "密码错误",
|
||||
"public_link_label": "公开链接",
|
||||
"disabled": "已禁用",
|
||||
"out_of": "/",
|
||||
|
||||
Reference in New Issue
Block a user