Implement internationalization support across components
- Integrated `next-intl` for toast messages and locale handling in various components, including `Providers`, `CanvasUserMenu`, and `CreditOverview`. - Replaced hardcoded strings with translation keys to enhance localization capabilities. - Updated `RootLayout` to dynamically set the language attribute based on the user's locale. - Ensured consistent user feedback through localized toast messages in actions such as sign-out, canvas operations, and billing notifications.
This commit is contained in:
220
messages/de.json
Normal file
220
messages/de.json
Normal file
@@ -0,0 +1,220 @@
|
||||
{
|
||||
"common": {
|
||||
"save": "Speichern",
|
||||
"cancel": "Abbrechen",
|
||||
"delete": "Löschen",
|
||||
"close": "Schließen",
|
||||
"confirm": "Bestätigen",
|
||||
"loading": "Laden...",
|
||||
"error": "Fehler",
|
||||
"success": "Erfolg",
|
||||
"back": "Zurück",
|
||||
"next": "Weiter",
|
||||
"upgrade": "Upgrade"
|
||||
},
|
||||
"auth": {
|
||||
"signIn": "Anmelden",
|
||||
"signOut": "Abmelden",
|
||||
"magicLink": "Magischer Link",
|
||||
"magicLinkSent": "Magischer Link gesendet",
|
||||
"emailLabel": "E-Mail-Adresse",
|
||||
"emailPlaceholder": "ihre@email.de"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"newCanvas": "Neuer Canvas",
|
||||
"recentlyOpened": "Zuletzt geöffnet",
|
||||
"templates": "Vorlagen",
|
||||
"noCanvases": "Keine Canvases gefunden",
|
||||
"lastEdited": "Zuletzt bearbeitet",
|
||||
"nodeCount": "{count, plural, one {# Node} other {# Nodes}}"
|
||||
},
|
||||
"canvas": {
|
||||
"autosaved": "Automatisch gespeichert",
|
||||
"share": "Teilen",
|
||||
"credits": "Kreditpunkte",
|
||||
"zoomFit": "Auf Fenster skalieren",
|
||||
"addNode": "Node hinzufügen",
|
||||
"sidebar": {
|
||||
"properties": "Eigenschaften",
|
||||
"layers": "Ebene",
|
||||
"filters": "Filter",
|
||||
"actions": "Aktionen"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"image": "Bild",
|
||||
"aiImage": "KI-Bild",
|
||||
"curves": "Kurven",
|
||||
"render": "Rendern",
|
||||
"compare": "Vergleichen",
|
||||
"compareAction": "Vergleichen",
|
||||
"compareClose": "Schließen",
|
||||
"compareCurrent": "Aktuell",
|
||||
"compareOriginal": "Original",
|
||||
"compareProcessed": "Verarbeitet",
|
||||
"custom": "Benutzerdefiniert",
|
||||
"customize": "Anpassen",
|
||||
"prompts": {
|
||||
"prompt1": "Prompt 1",
|
||||
"prompt2": "Prompt 2",
|
||||
"negative": "Negativ",
|
||||
"style": "Stil",
|
||||
"aspectRatio": "Formatverhältnis",
|
||||
"imageSize": "Bildgröße",
|
||||
"quality": "Qualität",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"status": {
|
||||
"pending": "Ausstehend",
|
||||
"processing": "Verarbeitung läuft",
|
||||
"completed": "Abgeschlossen",
|
||||
"failed": "Fehlgeschlagen"
|
||||
}
|
||||
},
|
||||
"credits": {
|
||||
"balance": "Guthaben",
|
||||
"available": "Verfügbar",
|
||||
"reserved": "Reserviert",
|
||||
"topUp": "Aufladen",
|
||||
"upgrade": "Upgrade",
|
||||
"renewsOn": "Aktualisiert am",
|
||||
"insufficientCredits": "Nicht genügend Guthaben",
|
||||
"transactionHistory": "Transaktionshistorie"
|
||||
},
|
||||
"pricing": {
|
||||
"free": "Kostenlos",
|
||||
"starter": "Starter",
|
||||
"pro": "Pro",
|
||||
"max": "Max",
|
||||
"perMonth": "/Monat",
|
||||
"creditsPerMonth": "Kreditpunkte pro Monat",
|
||||
"currentPlan": "Aktueller Plan",
|
||||
"choosePlan": "Plan auswählen"
|
||||
},
|
||||
"errors": {
|
||||
"generic": "Etwas ist schiefgelaufen — bitte versuche es erneut.",
|
||||
"networkError": "Verbindungsfehler — prüfe deine Internetverbindung.",
|
||||
"timeout": "Timeout — Credits wurden nicht abgebucht.",
|
||||
"insufficientCredits": "Nicht genug Credits für diese Operation.",
|
||||
"rateLimited": "Zu viele Anfragen — bitte kurz warten.",
|
||||
"unauthorized": "Nicht angemeldet — bitte melde dich an.",
|
||||
"modelUnavailable": "Modell aktuell nicht verfügbar — bitte ein anderes wählen.",
|
||||
"contentPolicy": "Anfrage durch Inhaltsrichtlinie blockiert.",
|
||||
"invalidRequest": "Ungültige Anfrage — bitte Eingaben prüfen.",
|
||||
"dailyCap": "Tageslimit erreicht — morgen neu starten.",
|
||||
"concurrency": "Generierung bereits aktiv — bitte warten.",
|
||||
"nodeError": "Node-Fehler",
|
||||
"uploadFailed": "Upload fehlgeschlagen",
|
||||
"creditsTestDisabled": "Test-Gutschriften sind deaktiviert.",
|
||||
"creditsInvalidAmount": "Ungültiger Betrag.",
|
||||
"creditsBalanceNotFound": "Keine Credit-Balance gefunden.",
|
||||
"creditsDailyCapReached": "Tageslimit erreicht — morgen neu starten.",
|
||||
"creditsConcurrencyLimit": "Generierung bereits aktiv — bitte warten.",
|
||||
"openrouterMissingMessage": "OpenRouter: Antwort ungültig.",
|
||||
"openrouterModelRefusal": "Modell lehnt ab — {reason}.",
|
||||
"openrouterNoImageInResponse": "OpenRouter: Kein Bild in der Antwort.",
|
||||
"openrouterImageUrlLoadFailed": "OpenRouter: Bild-URL konnte nicht geladen werden.",
|
||||
"openrouterDataUriCreationFailed": "OpenRouter: Bild konnte nicht verarbeitet werden.",
|
||||
"openrouterDataUriMissingBase64": "OpenRouter: Bild konnte nicht verarbeitet werden."
|
||||
},
|
||||
"toasts": {
|
||||
"canvas": {
|
||||
"imageUploaded": "Bild hochgeladen",
|
||||
"uploadFailed": "Upload fehlgeschlagen",
|
||||
"uploadFormatError": "Format „{format}“ wird nicht unterstützt. Erlaubt: PNG, JPG, WebP.",
|
||||
"uploadSizeError": "Maximale Dateigröße: {maxMb} MB.",
|
||||
"nodeRemoved": "Element entfernt",
|
||||
"nodesRemoved": "{count, plural, one {Element entfernt} other {# Elemente entfernt}}",
|
||||
"nodeDeleteBlockedTitle": "Löschen momentan nicht möglich",
|
||||
"nodeDeleteBlockedDesc": "Bitte kurz warten und erneut versuchen.",
|
||||
"nodeDeleteOptimisticTitle": "Element wird noch angelegt",
|
||||
"nodeDeleteOptimisticDesc": "Dieses Element ist noch nicht vollständig auf dem Server gespeichert. Sobald die Synchronisierung fertig ist, kannst du es löschen.",
|
||||
"nodeDeleteBlockedMultiDesc": "Mindestens ein Element wird noch angelegt. Bitte kurz warten und erneut versuchen.",
|
||||
"nodeDeleteBlockedPartialTitle": "Nicht alle Elemente entfernt",
|
||||
"nodeDeleteBlockedPartialSuffixOne": "Ein Element wurde deshalb nicht gelöscht; die übrige Auswahl wurde entfernt.",
|
||||
"nodeDeleteBlockedPartialSuffixOther": "{count} Elemente wurden deshalb nicht gelöscht; die übrige Auswahl wurde entfernt."
|
||||
},
|
||||
"ai": {
|
||||
"generating": "Bild wird generiert…",
|
||||
"generated": "Bild generiert",
|
||||
"generatedDesc": "{credits} Credits verbraucht",
|
||||
"generationQueued": "Generierung gestartet",
|
||||
"generationQueuedDesc": "Das Bild erscheint automatisch, sobald es fertig ist.",
|
||||
"generationFailed": "Generierung fehlgeschlagen",
|
||||
"creditsNotCharged": "Credits wurden nicht abgebucht",
|
||||
"insufficientCreditsTitle": "Nicht genügend Credits",
|
||||
"insufficientCreditsDesc": "{needed} Credits benötigt, {available} verfügbar.",
|
||||
"modelUnavailableTitle": "Modell vorübergehend nicht verfügbar",
|
||||
"modelUnavailableDesc": "Versuche ein anderes Modell oder probiere es später erneut.",
|
||||
"contentPolicyTitle": "Anfrage durch Inhaltsrichtlinie blockiert",
|
||||
"contentPolicyDesc": "Versuche, den Prompt umzuformulieren.",
|
||||
"timeoutTitle": "Generierung abgelaufen",
|
||||
"timeoutDesc": "Credits wurden nicht abgebucht.",
|
||||
"openrouterIssuesTitle": "OpenRouter möglicherweise gestört",
|
||||
"openrouterIssuesDesc": "Mehrere Generierungen fehlgeschlagen.",
|
||||
"concurrentLimitReachedTitle": "Generierung bereits aktiv",
|
||||
"concurrentLimitReachedDesc": "Bitte warte, bis die laufende Generierung abgeschlossen ist."
|
||||
},
|
||||
"export": {
|
||||
"frameExported": "Frame exportiert",
|
||||
"exportingFrames": "Frames werden exportiert…",
|
||||
"zipReady": "ZIP bereit",
|
||||
"exportFailed": "Export fehlgeschlagen",
|
||||
"frameEmptyTitle": "Export fehlgeschlagen",
|
||||
"frameEmptyDesc": "Frame hat keinen sichtbaren Inhalt.",
|
||||
"noFramesOnCanvasTitle": "Export fehlgeschlagen",
|
||||
"noFramesOnCanvasDesc": "Keine Frames auf dem Canvas — zuerst einen Frame anlegen.",
|
||||
"download": "Herunterladen",
|
||||
"downloaded": "Heruntergeladen!"
|
||||
},
|
||||
"auth": {
|
||||
"welcomeBack": "Willkommen zurück",
|
||||
"welcomeOnDashboard": "Schön, dass du da bist",
|
||||
"checkEmailTitle": "E-Mail prüfen",
|
||||
"checkEmailDesc": "Bestätigungslink an {email} gesendet.",
|
||||
"sessionExpiredTitle": "Sitzung abgelaufen",
|
||||
"sessionExpiredDesc": "Bitte erneut anmelden.",
|
||||
"signedOut": "Abgemeldet",
|
||||
"signIn": "Anmelden",
|
||||
"initialSetupTitle": "Startguthaben aktiv",
|
||||
"initialSetupDesc": "Du kannst loslegen."
|
||||
},
|
||||
"billing": {
|
||||
"subscriptionActivatedTitle": "Abo aktiviert",
|
||||
"subscriptionActivatedDesc": "{credits} Credits deinem Guthaben hinzugefügt.",
|
||||
"creditsAddedTitle": "Credits hinzugefügt",
|
||||
"creditsAddedDesc": "+{credits} Credits",
|
||||
"subscriptionCancelledTitle": "Abo gekündigt",
|
||||
"subscriptionCancelledDesc": "Deine Credits bleiben bis {periodEnd} verfügbar.",
|
||||
"paymentFailedTitle": "Zahlung fehlgeschlagen",
|
||||
"paymentFailedDesc": "Bitte Zahlungsmethode aktualisieren.",
|
||||
"dailyLimitReachedTitle": "Tageslimit erreicht",
|
||||
"dailyLimitReachedDesc": "Maximal {limit} Generierungen pro Tag in deinem Tarif.",
|
||||
"lowCreditsTitle": "Credits fast aufgebraucht",
|
||||
"lowCreditsDesc": "Noch {remaining} Credits übrig.",
|
||||
"topUp": "Aufladen",
|
||||
"upgrade": "Upgrade",
|
||||
"manage": "Verwalten",
|
||||
"redirectingToCheckoutTitle": "Weiterleitung…",
|
||||
"redirectingToCheckoutDesc": "Du wirst zum sicheren Checkout weitergeleitet.",
|
||||
"openingPortalTitle": "Portal wird geöffnet…",
|
||||
"openingPortalDesc": "Du wirst zur Aboverwaltung weitergeleitet.",
|
||||
"testGrantFailedTitle": "Gutschrift fehlgeschlagen"
|
||||
},
|
||||
"system": {
|
||||
"reconnected": "Verbindung wiederhergestellt",
|
||||
"connectionLostTitle": "Verbindung verloren",
|
||||
"connectionLostDesc": "Änderungen werden möglicherweise nicht gespeichert.",
|
||||
"copiedToClipboard": "In Zwischenablage kopiert"
|
||||
},
|
||||
"dashboard": {
|
||||
"renameEmptyTitle": "Name ungültig",
|
||||
"renameEmptyDesc": "Name darf nicht leer sein.",
|
||||
"renameSuccess": "Arbeitsbereich umbenannt",
|
||||
"renameFailed": "Umbenennen fehlgeschlagen",
|
||||
"deleteSuccess": "Arbeitsbereich gelöscht",
|
||||
"deleteFailed": "Löschen fehlgeschlagen"
|
||||
}
|
||||
}
|
||||
}
|
||||
220
messages/en.json
Normal file
220
messages/en.json
Normal file
@@ -0,0 +1,220 @@
|
||||
{
|
||||
"common": {
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete",
|
||||
"close": "Close",
|
||||
"confirm": "Confirm",
|
||||
"loading": "Loading…",
|
||||
"error": "Error",
|
||||
"success": "Success",
|
||||
"back": "Back",
|
||||
"next": "Next",
|
||||
"upgrade": "Upgrade"
|
||||
},
|
||||
"auth": {
|
||||
"signIn": "Sign in",
|
||||
"signOut": "Sign out",
|
||||
"magicLink": "Magic link",
|
||||
"magicLinkSent": "Magic link sent",
|
||||
"emailLabel": "Email address",
|
||||
"emailPlaceholder": "you@email.com"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"newCanvas": "New canvas",
|
||||
"recentlyOpened": "Recently opened",
|
||||
"templates": "Templates",
|
||||
"noCanvases": "No canvases found",
|
||||
"lastEdited": "Last edited",
|
||||
"nodeCount": "{count, plural, one {# Node} other {# Nodes}}"
|
||||
},
|
||||
"canvas": {
|
||||
"autosaved": "Autosaved",
|
||||
"share": "Share",
|
||||
"credits": "Credits",
|
||||
"zoomFit": "Fit to window",
|
||||
"addNode": "Add node",
|
||||
"sidebar": {
|
||||
"properties": "Properties",
|
||||
"layers": "Layer",
|
||||
"filters": "Filters",
|
||||
"actions": "Actions"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"image": "Image",
|
||||
"aiImage": "AI image",
|
||||
"curves": "Curves",
|
||||
"render": "Render",
|
||||
"compare": "Compare",
|
||||
"compareAction": "Compare",
|
||||
"compareClose": "Close",
|
||||
"compareCurrent": "Current",
|
||||
"compareOriginal": "Original",
|
||||
"compareProcessed": "Processed",
|
||||
"custom": "Custom",
|
||||
"customize": "Customize",
|
||||
"prompts": {
|
||||
"prompt1": "Prompt 1",
|
||||
"prompt2": "Prompt 2",
|
||||
"negative": "Negative",
|
||||
"style": "Style",
|
||||
"aspectRatio": "Aspect ratio",
|
||||
"imageSize": "Image size",
|
||||
"quality": "Quality",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"status": {
|
||||
"pending": "Pending",
|
||||
"processing": "Processing",
|
||||
"completed": "Completed",
|
||||
"failed": "Failed"
|
||||
}
|
||||
},
|
||||
"credits": {
|
||||
"balance": "Balance",
|
||||
"available": "Available",
|
||||
"reserved": "Reserved",
|
||||
"topUp": "Top up",
|
||||
"upgrade": "Upgrade",
|
||||
"renewsOn": "Renews on",
|
||||
"insufficientCredits": "Insufficient credits",
|
||||
"transactionHistory": "Transaction history"
|
||||
},
|
||||
"pricing": {
|
||||
"free": "Free",
|
||||
"starter": "Starter",
|
||||
"pro": "Pro",
|
||||
"max": "Max",
|
||||
"perMonth": "/month",
|
||||
"creditsPerMonth": "Credits per month",
|
||||
"currentPlan": "Current plan",
|
||||
"choosePlan": "Choose plan"
|
||||
},
|
||||
"errors": {
|
||||
"generic": "Something went wrong — please try again.",
|
||||
"networkError": "Connection error — check your internet connection.",
|
||||
"timeout": "Timeout — credits were not charged.",
|
||||
"insufficientCredits": "Not enough credits for this operation.",
|
||||
"rateLimited": "Too many requests — please wait a moment.",
|
||||
"unauthorized": "Not signed in — please sign in.",
|
||||
"modelUnavailable": "Model currently unavailable — please choose another.",
|
||||
"contentPolicy": "Request blocked by content policy.",
|
||||
"invalidRequest": "Invalid request — please check your input.",
|
||||
"dailyCap": "Daily limit reached — try again tomorrow.",
|
||||
"concurrency": "Generation already active — please wait.",
|
||||
"nodeError": "Node error",
|
||||
"uploadFailed": "Upload failed",
|
||||
"creditsTestDisabled": "Test credits are disabled.",
|
||||
"creditsInvalidAmount": "Invalid amount.",
|
||||
"creditsBalanceNotFound": "No credit balance found.",
|
||||
"creditsDailyCapReached": "Daily limit reached — try again tomorrow.",
|
||||
"creditsConcurrencyLimit": "Generation already active — please wait.",
|
||||
"openrouterMissingMessage": "OpenRouter: Invalid response.",
|
||||
"openrouterModelRefusal": "Model refused — {reason}.",
|
||||
"openrouterNoImageInResponse": "OpenRouter: No image in response.",
|
||||
"openrouterImageUrlLoadFailed": "OpenRouter: Could not load image URL.",
|
||||
"openrouterDataUriCreationFailed": "OpenRouter: Could not process image.",
|
||||
"openrouterDataUriMissingBase64": "OpenRouter: Could not process image."
|
||||
},
|
||||
"toasts": {
|
||||
"canvas": {
|
||||
"imageUploaded": "Image uploaded",
|
||||
"uploadFailed": "Upload failed",
|
||||
"uploadFormatError": "Format \"{format}\" is not supported. Allowed: PNG, JPG, WebP.",
|
||||
"uploadSizeError": "Maximum file size: {maxMb} MB.",
|
||||
"nodeRemoved": "Item removed",
|
||||
"nodesRemoved": "{count, plural, one {Item removed} other {# Items removed}}",
|
||||
"nodeDeleteBlockedTitle": "Cannot delete right now",
|
||||
"nodeDeleteBlockedDesc": "Please wait a moment and try again.",
|
||||
"nodeDeleteOptimisticTitle": "Item is still being created",
|
||||
"nodeDeleteOptimisticDesc": "This item hasn't finished syncing to the server yet. Once synchronization is complete, you can delete it.",
|
||||
"nodeDeleteBlockedMultiDesc": "At least one item is still being created. Please wait and try again.",
|
||||
"nodeDeleteBlockedPartialTitle": "Not all items removed",
|
||||
"nodeDeleteBlockedPartialSuffixOne": "One item couldn't be deleted; the rest of the selection was removed.",
|
||||
"nodeDeleteBlockedPartialSuffixOther": "{count} items couldn't be deleted; the rest of the selection was removed."
|
||||
},
|
||||
"ai": {
|
||||
"generating": "Generating image…",
|
||||
"generated": "Image generated",
|
||||
"generatedDesc": "{credits} credits used",
|
||||
"generationQueued": "Generation started",
|
||||
"generationQueuedDesc": "The image will appear automatically when it's ready.",
|
||||
"generationFailed": "Generation failed",
|
||||
"creditsNotCharged": "Credits were not charged",
|
||||
"insufficientCreditsTitle": "Insufficient credits",
|
||||
"insufficientCreditsDesc": "{needed} credits needed, {available} available.",
|
||||
"modelUnavailableTitle": "Model temporarily unavailable",
|
||||
"modelUnavailableDesc": "Try a different model or try again later.",
|
||||
"contentPolicyTitle": "Request blocked by content policy",
|
||||
"contentPolicyDesc": "Try rephrasing your prompt.",
|
||||
"timeoutTitle": "Generation timed out",
|
||||
"timeoutDesc": "Credits were not charged.",
|
||||
"openrouterIssuesTitle": "OpenRouter may be experiencing issues",
|
||||
"openrouterIssuesDesc": "Several generations have failed.",
|
||||
"concurrentLimitReachedTitle": "Generation already active",
|
||||
"concurrentLimitReachedDesc": "Please wait until the current generation completes."
|
||||
},
|
||||
"export": {
|
||||
"frameExported": "Frame exported",
|
||||
"exportingFrames": "Exporting frames…",
|
||||
"zipReady": "ZIP ready",
|
||||
"exportFailed": "Export failed",
|
||||
"frameEmptyTitle": "Export failed",
|
||||
"frameEmptyDesc": "Frame has no visible content.",
|
||||
"noFramesOnCanvasTitle": "Export failed",
|
||||
"noFramesOnCanvasDesc": "No frames on canvas — create one first.",
|
||||
"download": "Download",
|
||||
"downloaded": "Downloaded!"
|
||||
},
|
||||
"auth": {
|
||||
"welcomeBack": "Welcome back",
|
||||
"welcomeOnDashboard": "Great to have you here",
|
||||
"checkEmailTitle": "Check your email",
|
||||
"checkEmailDesc": "Confirmation link sent to {email}.",
|
||||
"sessionExpiredTitle": "Session expired",
|
||||
"sessionExpiredDesc": "Please sign in again.",
|
||||
"signedOut": "Signed out",
|
||||
"signIn": "Sign in",
|
||||
"initialSetupTitle": "Starting credits activated",
|
||||
"initialSetupDesc": "You're ready to go."
|
||||
},
|
||||
"billing": {
|
||||
"subscriptionActivatedTitle": "Subscription activated",
|
||||
"subscriptionActivatedDesc": "{credits} credits added to your balance.",
|
||||
"creditsAddedTitle": "Credits added",
|
||||
"creditsAddedDesc": "+{credits} credits",
|
||||
"subscriptionCancelledTitle": "Subscription cancelled",
|
||||
"subscriptionCancelledDesc": "Your credits remain available until {periodEnd}.",
|
||||
"paymentFailedTitle": "Payment failed",
|
||||
"paymentFailedDesc": "Please update your payment method.",
|
||||
"dailyLimitReachedTitle": "Daily limit reached",
|
||||
"dailyLimitReachedDesc": "Maximum {limit} generations per day in your plan.",
|
||||
"lowCreditsTitle": "Credits running low",
|
||||
"lowCreditsDesc": "{remaining} credits remaining.",
|
||||
"topUp": "Top up",
|
||||
"upgrade": "Upgrade",
|
||||
"manage": "Manage",
|
||||
"redirectingToCheckoutTitle": "Redirecting…",
|
||||
"redirectingToCheckoutDesc": "You're being redirected to secure checkout.",
|
||||
"openingPortalTitle": "Opening portal…",
|
||||
"openingPortalDesc": "You're being redirected to subscription management.",
|
||||
"testGrantFailedTitle": "Credit grant failed"
|
||||
},
|
||||
"system": {
|
||||
"reconnected": "Connection restored",
|
||||
"connectionLostTitle": "Connection lost",
|
||||
"connectionLostDesc": "Changes may not be saved.",
|
||||
"copiedToClipboard": "Copied to clipboard"
|
||||
},
|
||||
"dashboard": {
|
||||
"renameEmptyTitle": "Invalid name",
|
||||
"renameEmptyDesc": "Name cannot be empty.",
|
||||
"renameSuccess": "Workspace renamed",
|
||||
"renameFailed": "Rename failed",
|
||||
"deleteSuccess": "Workspace deleted",
|
||||
"deleteFailed": "Delete failed"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user