♻️ refactor: Refactoring and adding multiple features

This commit is contained in:
web
2025-08-05 06:42:39 -07:00
committed by speakeloudest
parent 5a2fa2e937
commit 47d19d1b44
106 changed files with 6893 additions and 4604 deletions
+4 -11
View File
@@ -1,32 +1,25 @@
{
"ADS Config": "Configuration ADS",
"Announcement Management": "Gestion des annonces",
"Apple": "Identifiant Apple",
"Application Management": "Gestion des applications",
"Auth Control": "Contrôle d'authentification",
"Coupon Management": "Gestion des coupons",
"Dashboard": "Tableau de bord",
"Device": "Appareil",
"Document Management": "Gestion des documents",
"Email": "E-mail",
"Facebook": "Facebook",
"Finance": "Finance",
"General": "Général",
"GitHub": "GitHub",
"Google": "Google",
"Order Management": "Gestion des commandes",
"Payment Config": "Configuration de paiement",
"Phone Number": "Numéro de téléphone",
"Product Management": "Gestion de produit",
"Protocol Management": "Gestion de protocole",
"Rule Management": "Gestion des règles",
"Server": "Serveur",
"Server Management": "Gestion des services",
"Settings": "Paramètres",
"Subscribe Management": "Gestion des abonnements",
"Subscribe Config": "Configuration d'abonnement",
"System Config": "Configuration du système",
"System Management": "Gestion du système",
"System Tool": "Outil Système",
"Telegram": "Telegram",
"Ticket Management": "Gestion des billets",
"Twitter": "Twitter",
"User": "Utilisateur",
"User Detail": "Détail de l'utilisateur",
"User Management": "Gestion des utilisateurs"
+160
View File
@@ -0,0 +1,160 @@
{
"actions": "actions",
"app": {
"appDownloadURL": "URL de téléchargement de l'application",
"appIcon": "Icône de l'application",
"appList": "Liste des applications",
"appName": "Nom de l'application",
"backupDomains": "Liste des domaines de sauvegarde",
"backupDomainsDescription": "Liste des domaines de sauvegarde pour la résolution de domaine, un domaine par ligne",
"batchDelete": "Suppression par lot",
"cancel": "Annuler",
"communicationKey": "Clé de communication",
"communicationKeyDescription": "Clé utilisée pour la communication client",
"config": "Configuration",
"configApp": "Configuration de l'application",
"confirm": "Confirmer",
"confirmDelete": "Confirmer la suppression",
"create": "Créer",
"createApp": "Créer une application",
"createSuccess": "Créé avec succès",
"defaultVersion": "Par défaut",
"delete": "Supprimer",
"deleteWarning": "Cette action est irréversible",
"describeDescription": "Utilisé pour décrire l'application, affiché dans la liste des applications",
"description": "Description",
"downloadLink": "Lien de téléchargement",
"edit": "Modifier",
"editApp": "Modifier l'application",
"encryption": "Méthode de chiffrement",
"encryptionDescription": "Choisissez la méthode de chiffrement pour la communication client. Si elle est sélectionnée, le client utilisera cette méthode pour communiquer avec le serveur",
"nameDescription": "Nom de l'application, affiché dans la liste des applications",
"platform": "Plateforme",
"selectApp": "Sélectionner l'application",
"selectAppDescription": "Sélectionnez l'application à configurer, tous les paramètres s'appliqueront à l'application sélectionnée",
"startupPicture": "Image de démarrage",
"startupPictureDescription": "Image de démarrage, prend en charge les images réseau et locales. Pour les images réseau, veuillez entrer l'URL complète de l'image",
"startupPicturePreview": "Aperçu de l'image de démarrage",
"startupPictureSkip": "Temps de saut de l'image de démarrage",
"startupPictureSkipDescription": "Temps d'affichage de l'image de démarrage en secondes, entrez 0 pour ne pas afficher",
"subscriptionProtocol": "Protocole d'abonnement",
"updateSuccess": "Mis à jour avec succès",
"version": "Version"
},
"cancel": "Annuler",
"config": {
"singleSubscriptionMode": "Mode d'abonnement unique",
"subscriptionDomain": "Domaine d'abonnement",
"subscriptionDomainDescription": "Utilisé pour l'abonnement ; laissez vide pour utiliser le domaine du site",
"subscriptionDomainPlaceholder": "Entrez le domaine d'abonnement, un par ligne",
"subscriptionPath": "Chemin d'abonnement",
"subscriptionPathDescription": "Utilisé pour l'abonnement ; assurez-vous de redémarrer le système après modification pour des performances optimales",
"subscriptionPathPlaceholder": "Entrez",
"updateSuccess": "Mise à jour réussie",
"wildcardResolution": "Résolution générique",
"wildcardResolutionDescription": "Utilisé pour l'abonnement"
},
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"copy": "Copier",
"copySuccess": "Copié avec succès",
"create": "Créer",
"createSubscribe": "Créer un abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.",
"deviceLimit": "Nombre d'appareils",
"edit": "Éditer",
"editSubscribe": "Modifier l'abonnement",
"form": {
"Day": "Jour",
"Hour": "Heure",
"Minute": "Minute",
"Month": "Mois",
"NoLimit": "Pas de limite",
"Year": "Année",
"annualReset": "Réinitialisation Annuelle",
"basic": "Basique",
"cancel": "Annuler",
"confirm": "Confirmer",
"deductionRatio": "Configuration de Déduction Automatique/Manuelle",
"deductionRatioDescription": "Utilisé pour la déduction. Par défaut, le système adopte un algorithme de calcul automatique. Lorsqu'un ratio manuel est fourni, le système calcule les proportions en fonction du temps et du ratio de trafic, en veillant à ce que le total soit égal à 100%.",
"description": "Description",
"deviceLimit": "Limite d'appareils",
"discount": "Remise",
"discountDescription": "Remise basée sur le prix unitaire",
"discountMonths": "mois",
"discountPercent": "Pourcentage de remise",
"discount_price": "Prix remisé",
"duration": "Durée (mois)",
"groupId": "Groupe d'abonnement",
"inventory": "Limite d'abonnement",
"monthlyReset": "Réinitialisation Mensuelle",
"name": "Nom",
"noLimit": "Illimité",
"noReset": "Pas de Réinitialisation",
"pricing": "Tarification",
"purchaseWithDiscount": "Autoriser la Déduction",
"purchaseWithDiscountDescription": "Activer ou désactiver la fonctionnalité de désabonnement. Après activation, le système effectuera un traitement de déduction selon les règles et proportions configurées, et la valeur restante sera retournée au solde.",
"quota": "Quantité d'achat limitée",
"renewalReset": "Réinitialisation au Renouvellement",
"renewalResetDescription": "Réinitialiser le cycle lors du renouvellement",
"replacement": "Prix de réinitialisation (par fois)",
"resetCycle": "Cycle de Réinitialisation",
"resetOn1st": "Réinitialisation le 1er",
"selectResetCycle": "Veuillez sélectionner un cycle de réinitialisation",
"selectSubscribeGroup": "Veuillez sélectionner un groupe d'abonnement",
"selectUnitTime": "Veuillez sélectionner l'unité de temps",
"server": "Serveur",
"serverGroup": "Groupe de serveurs",
"servers": "Serveurs",
"speedLimit": "Limite de vitesse ",
"traffic": "Trafic",
"unitPrice": "Prix unitaire",
"unitTime": "Unité de temps"
},
"group": {
"actions": "Actions",
"cancel": "Annuler",
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"create": "Créer",
"createSubscribeGroup": "Créer un groupe d'abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Les données ne peuvent pas être récupérées après suppression, veuillez procéder avec prudence.",
"description": "Description",
"edit": "Éditer",
"editSubscribeGroup": "Éditer le groupe d'abonnement",
"form": {
"cancel": "Annuler",
"confirm": "Confirmer",
"description": "Description",
"name": "Nom"
},
"name": "Nom",
"title": "Liste des groupes d'abonnement",
"updateSuccess": "Mise à jour réussie",
"updatedAt": "Date de mise à jour"
},
"inventory": "Limite d'abonnement",
"name": "Nom",
"quota": "Limite d'achat/par fois",
"replacement": "Réinitialiser le prix/par fois",
"sell": "Vente",
"show": "Afficher",
"sold": "Nombre d'abonnements",
"subscribe": "S'abonner",
"subscribeGroup": "S'abonner au groupe",
"tabs": {
"subscribe": "S'abonner",
"subscribeApp": "Configuration de l'application",
"subscribeConfig": "Configuration de l'abonnement",
"subscribeGroup": "Groupe d'abonnement"
},
"traffic": "trafic",
"unitPrice": "Prix unitaire",
"updateSuccess": "Mise à jour réussie"
}
+74 -146
View File
@@ -1,161 +1,89 @@
{
"actions": "actions",
"app": {
"appDownloadURL": "URL de téléchargement de l'application",
"appIcon": "Icône de l'application",
"appList": "Liste des applications",
"appName": "Nom de l'application",
"backupDomains": "Liste des domaines de sauvegarde",
"backupDomainsDescription": "Liste des domaines de sauvegarde pour la résolution de domaine, un domaine par ligne",
"batchDelete": "Suppression par lot",
"actions": {
"cancel": "Annuler",
"communicationKey": "Clé de communication",
"communicationKeyDescription": "Clé utilisée pour la communication client",
"config": "Configuration",
"configApp": "Configuration de l'application",
"confirm": "Confirmer",
"confirmDelete": "Confirmer la suppression",
"create": "Créer",
"createApp": "Créer une application",
"createSuccess": "Créé avec succès",
"defaultVersion": "Par défaut",
"delete": "Supprimer",
"deleteWarning": "Cette action est irréversible",
"describeDescription": "Utilisé pour décrire l'application, affiché dans la liste des applications",
"description": "Description",
"downloadLink": "Lien de téléchargement",
"edit": "Modifier",
"editApp": "Modifier l'application",
"encryption": "Méthode de chiffrement",
"encryptionDescription": "Choisissez la méthode de chiffrement pour la communication client. Si elle est sélectionnée, le client utilisera cette méthode pour communiquer avec le serveur",
"nameDescription": "Nom de l'application, affiché dans la liste des applications",
"platform": "Plateforme",
"selectApp": "Sélectionner l'application",
"selectAppDescription": "Sélectionnez l'application à configurer, tous les paramètres s'appliqueront à l'application sélectionnée",
"startupPicture": "Image de démarrage",
"startupPictureDescription": "Image de démarrage, prend en charge les images réseau et locales. Pour les images réseau, veuillez entrer l'URL complète de l'image",
"startupPicturePreview": "Aperçu de l'image de démarrage",
"startupPictureSkip": "Temps de saut de l'image de démarrage",
"startupPictureSkipDescription": "Temps d'affichage de l'image de démarrage en secondes, entrez 0 pour ne pas afficher",
"subscriptionProtocol": "Protocole d'abonnement",
"updateSuccess": "Mis à jour avec succès",
"version": "Version"
"save": "Enregistrer",
"saveTemplate": "Enregistrer le modèle"
},
"cancel": "Annuler",
"config": {
"description": "Gérer les paramètres du système d'abonnement",
"restrictUserAgent": "Restriction de l'User-Agent",
"restrictUserAgentDescription": "Activer les restrictions d'accès basées sur l'User-Agent",
"singleSubscriptionMode": "Mode d'abonnement unique",
"singleSubscriptionModeDescription": "Lorsqu'il est activé, tous les abonnements des utilisateurs seront convertis en solde",
"singleSubscriptionModeDescription": "Limiter les utilisateurs à une seule souscription active. Les souscriptions existantes ne sont pas affectées",
"subscriptionDomain": "Domaine d'abonnement",
"subscriptionDomainDescription": "Utilisé pour l'abonnement ; laissez vide pour utiliser le domaine du site",
"subscriptionDomainDescription": "Domaine personnalisé pour les liens d'abonnement",
"subscriptionDomainPlaceholder": "Entrez le domaine d'abonnement, un par ligne",
"subscriptionPath": "Chemin d'abonnement",
"subscriptionPathDescription": "Utilisé pour l'abonnement ; assurez-vous de redémarrer le système après modification pour des performances optimales",
"subscriptionPathPlaceholder": "Entrez",
"updateSuccess": "Mise à jour réussie",
"wildcardResolution": "Résolution générique",
"wildcardResolutionDescription": "Utilisé pour l'abonnement"
"subscriptionPathDescription": "Chemin personnalisé pour les points de terminaison d'abonnement (meilleure performance après le redémarrage du système)",
"subscriptionPathPlaceholder": "Entrez le chemin d'abonnement",
"title": "Configuration de l'abonnement",
"updateError": "Échec de la mise à jour",
"updateSuccess": "Paramètres mis à jour avec succès",
"userAgentWhitelist": "Liste blanche des User-Agents",
"userAgentWhitelistDescription": "User-Agents autorisés pour l'accès à la souscription, un par ligne. Les modèles intégrés sont automatiquement inclus dans la liste blanche",
"userAgentWhitelistPlaceholder": "Entrez les User-Agents autorisés, un par ligne",
"wildcardResolution": "Résolution de wildcard",
"wildcardResolutionDescription": "Activer la résolution de domaine wildcard pour les abonnements"
},
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"copy": "Copier",
"copySuccess": "Copié avec succès",
"create": "Créer",
"createSubscribe": "Créer un abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.",
"deviceLimit": "Nombre d'appareils",
"edit": "Éditer",
"editSubscribe": "Modifier l'abonnement",
"form": {
"Day": "Jour",
"Hour": "Heure",
"Minute": "Minute",
"Month": "Mois",
"NoLimit": "Pas de limite",
"Year": "Année",
"annualReset": "Réinitialisation Annuelle",
"basic": "Basique",
"cancel": "Annuler",
"confirm": "Confirmer",
"deductionRatio": "Configuration de Déduction Automatique/Manuelle",
"deductionRatioDescription": "Utilisé pour la déduction. Par défaut, le système adopte un algorithme de calcul automatique. Lorsqu'un ratio manuel est fourni, le système calcule les proportions en fonction du temps et du ratio de trafic, en veillant à ce que le total soit égal à 100%.",
"description": "Description",
"deviceLimit": "Limite d'appareils",
"discount": "Remise",
"discountDescription": "Remise basée sur le prix unitaire",
"discountMonths": "mois",
"discountPercent": "Pourcentage de remise",
"discount_price": "Prix remisé",
"duration": "Durée (mois)",
"groupId": "Groupe d'abonnement",
"inventory": "Limite d'abonnement",
"monthlyReset": "Réinitialisation Mensuelle",
"name": "Nom",
"noLimit": "Illimité",
"noReset": "Pas de Réinitialisation",
"pricing": "Tarification",
"purchaseWithDiscount": "Autoriser la Déduction",
"purchaseWithDiscountDescription": "Activer ou désactiver la fonctionnalité de désabonnement. Après activation, le système effectuera un traitement de déduction selon les règles et proportions configurées, et la valeur restante sera retournée au solde.",
"quota": "Quantité d'achat limitée",
"renewalReset": "Réinitialisation au Renouvellement",
"renewalResetDescription": "Réinitialiser le cycle lors du renouvellement",
"replacement": "Prix de réinitialisation (par fois)",
"resetCycle": "Cycle de Réinitialisation",
"resetOn1st": "Réinitialisation le 1er",
"selectResetCycle": "Veuillez sélectionner un cycle de réinitialisation",
"selectSubscribeGroup": "Veuillez sélectionner un groupe d'abonnement",
"selectUnitTime": "Veuillez sélectionner l'unité de temps",
"server": "Serveur",
"serverGroup": "Groupe de serveurs",
"servers": "Serveurs",
"speedLimit": "Limite de vitesse ",
"traffic": "Trafic",
"unitPrice": "Prix unitaire",
"unitTime": "Unité de temps"
"description": "Configurer les paramètres d'abonnement et les modèles de client",
"messages": {
"noClients": "Aucun modèle de client",
"noClientsDescription": "Aucun modèle de client configuré pour le moment. Ajoutez votre premier modèle pour commencer."
},
"group": {
"actions": "Actions",
"cancel": "Annuler",
"confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"create": "Créer",
"createSubscribeGroup": "Créer un groupe d'abonnement",
"createSuccess": "Création réussie",
"delete": "Supprimer",
"deleteSuccess": "Suppression réussie",
"deleteWarning": "Les données ne peuvent pas être récupérées après suppression, veuillez procéder avec prudence.",
"description": "Description",
"edit": "Éditer",
"editSubscribeGroup": "Éditer le groupe d'abonnement",
"form": {
"cancel": "Annuler",
"confirm": "Confirmer",
"description": "Description",
"name": "Nom"
"protocol": {
"clients": {
"clash": {
"features": "Écosystème vaste, règles complètes, communauté active"
},
"egern": {
"features": "Client iOS moderne, excellente performance"
},
"hiddify": {
"features": "Multi-plateforme, protocoles complets, convivial pour les débutants"
},
"loon": {
"features": "Client avancé iOS, règles riches, interface magnifique"
},
"netch": {
"features": "Client proxy axé sur le jeu"
},
"quantumult": {
"features": "Client avancé iOS, règles flexibles, scripts riches"
},
"shadowrocket": {
"features": "Client classique iOS, configuration flexible"
},
"singbox": {
"features": "Noyau le plus récent, interface graphique officielle, support multi-plateforme"
},
"stash": {
"features": "Interface mobile moderne, protocoles complets"
},
"surfboard": {
"features": "Gratuit, développement actif, interface moderne"
},
"surge": {
"features": "Outil premium iOS/Mac, fonctionnalités puissantes"
},
"v2box": {
"features": "Client V2Ray convivial"
},
"v2rayn": {
"features": "Client Windows populaire, riche en fonctionnalités"
},
"v2rayng": {
"features": "Client Android populaire, léger"
}
},
"name": "Nom",
"title": "Liste des groupes d'abonnement",
"updateSuccess": "Mise à jour réussie",
"updatedAt": "Date de mise à jour"
"description": "Gérer les modèles de configuration d'abonnement pour les clients proxy",
"features": "Fonctionnalités clés",
"platforms": "Plateformes",
"subscribeTemplate": "Configuration du modèle d'abonnement",
"templateContent": "Contenu du modèle",
"templatePlaceholder": "Entrez le modèle de configuration du client...",
"title": "Modèles d'abonnement des clients"
},
"inventory": "Limite d'abonnement",
"name": "Nom",
"quota": "Limite d'achat/par fois",
"replacement": "Réinitialiser le prix/par fois",
"sell": "Vente",
"show": "Afficher",
"sold": "Nombre d'abonnements",
"subscribe": "S'abonner",
"subscribeGroup": "S'abonner au groupe",
"tabs": {
"subscribe": "S'abonner",
"subscribeApp": "Configuration de l'application",
"subscribeConfig": "Configuration de l'abonnement",
"subscribeGroup": "Groupe d'abonnement"
},
"traffic": "trafic",
"unitPrice": "Prix unitaire",
"updateSuccess": "Mise à jour réussie"
"title": "Gestion des abonnements"
}