All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m51s
- Gamme officielle : Essentielle (Pro) = deepseek-v4-flash, glm-5.3-flash, minimax-m3 ; Premium (Business) = claude-sonnet-5, deepseek-v4-pro, glm-5.3 - Routage reel : le modele employe suit le palier IA du forfait (reglages admin > defaut du plan), garde anti-croisement de palier - Nouvelle page admin « Modeles & abonnements » (matrice forfaits/paliers, modele par defaut, catalogue OpenRouter) - Statistiques enrichies : revenus (30 j + total), MRR estime, credits, liste d'attente, paliers utilises - Nouvelle page admin « Marketing » : audiences avec compteurs, apercu, envoi test obligatoire, historique, desabonnement public + en-tetes List-Unsubscribe ; .gitignore pour les donnees d'execution - Interface (accueil + tarifs) alignee sur la gamme, 13 langues completes - Tests : routage par palier (fonction + tache), marketing, revenus en base
150 lines
8.6 KiB
JSON
150 lines
8.6 KiB
JSON
{
|
|
"admin.login.title": "Administration",
|
|
"admin.login.required": "Login required",
|
|
"admin.login.password": "Admin password",
|
|
"admin.login.connecting": "Connecting...",
|
|
"admin.login.access": "Access admin panel",
|
|
"admin.login.restricted": "Restricted to administrators",
|
|
"admin.layout.checking": "Verifying authentication...",
|
|
"admin.dashboard.title": "Admin Dashboard",
|
|
"admin.dashboard.subtitle": "Administrator control panel",
|
|
"admin.dashboard.refresh": "Refresh",
|
|
"admin.dashboard.refreshTooltip": "Refresh dashboard data",
|
|
"admin.dashboard.config": "System Configuration",
|
|
"admin.dashboard.maxFileSize": "Max file size:",
|
|
"admin.dashboard.translationService": "Translation service:",
|
|
"admin.dashboard.formats": "Formats:",
|
|
"admin.nav.dashboard": "Dashboard",
|
|
"admin.nav.users": "Users",
|
|
"admin.nav.pricing": "Pricing & Stripe",
|
|
"admin.nav.providers": "Providers",
|
|
"admin.nav.system": "System",
|
|
"admin.nav.logs": "Logs",
|
|
"admin.nav.stats": "Statistics",
|
|
"admin.users.title": "User Management",
|
|
"admin.users.subtitle": "View and manage user accounts",
|
|
"admin.users.planUpdated": "Plan updated",
|
|
"admin.users.planChanged": "The plan has been changed to \\\"{plan}\\\" successfully.",
|
|
"admin.users.unknownError": "Unknown error",
|
|
"admin.users.error": "Error",
|
|
"admin.users.planUpdateError": "Unable to update plan: {message}",
|
|
"admin.users.noKeys": "No keys",
|
|
"admin.users.noKeysDesc": "This user has no active API keys.",
|
|
"admin.users.keysRevoked": "Keys revoked",
|
|
"admin.users.keysRevokedDesc": "{count} API key(s) revoked successfully.",
|
|
"admin.users.revokeError": "Unable to revoke keys: {message}",
|
|
"admin.users.retry": "Retry",
|
|
"admin.system.title": "System",
|
|
"admin.system.subtitle": "Monitor system status and manage resources",
|
|
"admin.system.quotas": "Translation quotas",
|
|
"admin.system.resetQuotas": "Reset monthly quotas",
|
|
"admin.system.resetting": "Resetting...",
|
|
"admin.system.reset": "Reset",
|
|
"admin.system.allOperational": "All Systems Operational",
|
|
"admin.system.issuesDetected": "System Issues Detected",
|
|
"admin.system.waitingData": "Waiting for data...",
|
|
"admin.system.purging": "Purging...",
|
|
"admin.system.clean": "Clean",
|
|
"admin.system.purge": "Purge",
|
|
"admin.nav.models": "Models & subscriptions",
|
|
"admin.nav.marketing": "Marketing",
|
|
"admin.marketing.audience": "Audience",
|
|
"admin.marketing.audienceAllUsers": "All accounts",
|
|
"admin.marketing.audienceInactive": "Accounts inactive for 30 days",
|
|
"admin.marketing.audiencePlaceholder": "Choose an audience",
|
|
"admin.marketing.audiencePlanBusiness": "Business plan",
|
|
"admin.marketing.audiencePlanEnterprise": "Enterprise plan",
|
|
"admin.marketing.audiencePlanFree": "Free plan",
|
|
"admin.marketing.audiencePlanPro": "Pro plan",
|
|
"admin.marketing.audiencePlanStarter": "Starter plan",
|
|
"admin.marketing.audienceWaitlist": "Waitlist",
|
|
"admin.marketing.badgeReal": "real",
|
|
"admin.marketing.badgeTest": "test",
|
|
"admin.marketing.confirmSend": "Send this email to {count} recipient(s) (“{audience}”)?",
|
|
"admin.marketing.footerNote": "A footer with the unsubscribe link is automatically added when sending.",
|
|
"admin.marketing.hidePreview": "Hide preview",
|
|
"admin.marketing.history": "Send history",
|
|
"admin.marketing.historyFailedSuffix": ", {count} failed",
|
|
"admin.marketing.historySent": "{sent}/{total} sent",
|
|
"admin.marketing.html": "HTML content",
|
|
"admin.marketing.htmlPlaceholder": "<html><body>…</body></html>",
|
|
"admin.marketing.incompleteDesc": "Please fill in the subject and the HTML.",
|
|
"admin.marketing.incompleteTitle": "Incomplete content",
|
|
"admin.marketing.loadErrorTitle": "Loading error",
|
|
"admin.marketing.localCheckUnavailable": "Local check unavailable in this browser: the server will verify the prior test send.",
|
|
"admin.marketing.networkDesc": "Cannot reach the backend.",
|
|
"admin.marketing.newCampaign": "New campaign",
|
|
"admin.marketing.noHistory": "No send recorded.",
|
|
"admin.marketing.preview": "Preview",
|
|
"admin.marketing.previewEmpty": "Preview: paste your HTML next to this panel.",
|
|
"admin.marketing.previewTitle": "Email preview",
|
|
"admin.marketing.recipientsAvailable": "{count} recipient(s) available after excluding unsubscribed contacts.",
|
|
"admin.marketing.sendReal": "Send to {count} recipient(s)",
|
|
"admin.marketing.sendRefusedTitle": "Send refused",
|
|
"admin.marketing.sendTest": "Send test",
|
|
"admin.marketing.sendingDesc": "{count} email(s) queued for sending (0.2 s interval). Unsubscribed contacts are excluded.",
|
|
"admin.marketing.sendingTitle": "Send in progress",
|
|
"admin.marketing.subject": "Subject",
|
|
"admin.marketing.subjectPlaceholder": "E.g.: Your translation is waiting — 20% off for 7 days",
|
|
"admin.marketing.subtitle": "Send emails to an audience, with a mandatory test send, automatic unsubscribe link and full history.",
|
|
"admin.marketing.testDoneDesc": "Email received at {email}",
|
|
"admin.marketing.testDoneTitle": "Test send done",
|
|
"admin.marketing.testEmail": "Test email (optional)",
|
|
"admin.marketing.testEmailPlaceholder": "Otherwise: SMTP sender address",
|
|
"admin.marketing.testFailedTitle": "Test send failed",
|
|
"admin.marketing.testRequiredHint": "A real send requires a prior test send of this exact content (verified by the server).",
|
|
"admin.marketing.testValidated": "Test send validated for this content.",
|
|
"admin.marketing.title": "Marketing — email campaigns",
|
|
"admin.marketing.unsubscribedNote": "{count} unsubscribed contact(s) will be excluded from any send.",
|
|
"admin.models.addModel": "Add a model",
|
|
"admin.models.businessBadge": "Business plan",
|
|
"admin.models.cancel": "Cancel",
|
|
"admin.models.catalog": "OpenRouter catalog",
|
|
"admin.models.catalogErrorDesc": "Failed to load the OpenRouter catalog.",
|
|
"admin.models.catalogErrorTitle": "Catalog unavailable",
|
|
"admin.models.customBadge": "Custom tier",
|
|
"admin.models.customNote": "Bespoke models, agreed case by case with the customer.",
|
|
"admin.models.defaultBadge": "default",
|
|
"admin.models.emptyTier": "No model: the plan's official range will be used.",
|
|
"admin.models.enterpriseBadge": "Enterprise plan",
|
|
"admin.models.essentialBadge": "Essential AI tier",
|
|
"admin.models.essentialCost": "— billed at cost factor 1",
|
|
"admin.models.fallbackFirst": "(fallback #1)",
|
|
"admin.models.loadErrorDesc": "HTTP {status} — check your admin token.",
|
|
"admin.models.loadErrorTitle": "Loading error",
|
|
"admin.models.matrixDesc": "Active models per tier — the list order is the fallback priority. The radio button picks the default model, applied immediately without redeployment.",
|
|
"admin.models.matrixTitle": "Model matrix by plan",
|
|
"admin.models.missingConfig": "AI tier configuration not found. Reload the page.",
|
|
"admin.models.moveDown": "Move down",
|
|
"admin.models.moveUp": "Move up",
|
|
"admin.models.networkDesc": "Cannot reach the backend.",
|
|
"admin.models.networkTitle": "Network error",
|
|
"admin.models.premiumBadge": "Premium AI tier",
|
|
"admin.models.premiumCost": "— billed at cost factor 5",
|
|
"admin.models.premiumReservedNote": "Reserved for Business and Enterprise plans (“openrouter_premium” engine).",
|
|
"admin.models.proBadge": "Pro plan",
|
|
"admin.models.remove": "Remove",
|
|
"admin.models.save": "Save",
|
|
"admin.models.saveErrorTitle": "Save error",
|
|
"admin.models.saveNetworkDesc": "Could not save the configuration.",
|
|
"admin.models.savedDesc": "The new default model applies from the next translation, without redeployment.",
|
|
"admin.models.savedTitle": "Models saved",
|
|
"admin.models.saving": "Saving...",
|
|
"admin.models.setDefault": "Set {model} as default model",
|
|
"admin.models.sharedTierNote": "Shared tier: the Business plan also uses the Essential tier for its “openrouter” engine — the list above applies to both plans.",
|
|
"admin.models.subtitle": "Plans → AI tiers matrix. The model actually used per translation is the plan's tier model: a Pro plan can never trigger a Premium model.",
|
|
"admin.models.title": "Models & subscriptions",
|
|
"admin.stats.aiTiers": "AI tiers (30 d)",
|
|
"admin.stats.includingCredits": "including {amount} in credits",
|
|
"admin.stats.mrr": "Estimated MRR",
|
|
"admin.stats.noTranslationsYet": "No translation stored in the last 30 days: the AI tier breakdown will fill in with upcoming translations.",
|
|
"admin.stats.payments30": "{count} payment(s) in 30 days",
|
|
"admin.stats.refreshing": "Refreshing...",
|
|
"admin.stats.revenue30": "Revenue (30 days)",
|
|
"admin.stats.revenueTotal": "Total collected revenue",
|
|
"admin.stats.tiersSub": "Essential / Premium · classic {classic} · other {other}",
|
|
"admin.stats.unavailable": "Business statistics unavailable ({error}).",
|
|
"admin.stats.waitlist": "Waitlist",
|
|
"admin.stats.waitlistSub": "people waiting"
|
|
}
|