diff --git a/frontend/src/app/dashboard/api-keys/WebhookSnippet.tsx b/frontend/src/app/dashboard/api-keys/WebhookSnippet.tsx index e8b9ea8..31c5620 100644 --- a/frontend/src/app/dashboard/api-keys/WebhookSnippet.tsx +++ b/frontend/src/app/dashboard/api-keys/WebhookSnippet.tsx @@ -5,6 +5,7 @@ import { Webhook, Copy, Check } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { API_BASE_URL } from '@/lib/apiClient'; +import { useI18n } from '@/lib/i18n'; function getWebhookSnippet(): string { const baseUrl = API_BASE_URL.replace(/\/$/, ''); @@ -18,6 +19,7 @@ function getWebhookSnippet(): string { } export function WebhookSnippet() { + const { t } = useI18n(); const [copied, setCopied] = useState(false); const webhookSnippet = useMemo(() => getWebhookSnippet(), []); @@ -33,13 +35,12 @@ export function WebhookSnippet() {
- Webhook Integration + {t('apiKeys.webhook.title')}

- Pass a webhook_url parameter - to receive a POST request when your translation is complete. + {t('apiKeys.webhook.descriptionBefore')}{t('apiKeys.webhook.codeParam')}{t('apiKeys.webhook.descriptionAfter')}

- diff --git a/frontend/src/app/dashboard/glossaries/EditGlossaryDialog.tsx b/frontend/src/app/dashboard/glossaries/EditGlossaryDialog.tsx index 42a7f31..fbdb9b4 100644 --- a/frontend/src/app/dashboard/glossaries/EditGlossaryDialog.tsx +++ b/frontend/src/app/dashboard/glossaries/EditGlossaryDialog.tsx @@ -18,6 +18,7 @@ import { exportGlossaryToCsv, parseCsvToTerms } from './csvUtils'; import { useToast } from '@/components/ui/toast'; import type { Glossary, GlossaryTermInput } from './types'; import { MAX_TERMS_PER_GLOSSARY, SUPPORTED_LANGUAGES } from './types'; +import { useI18n } from '@/lib/i18n'; interface EditGlossaryDialogProps { open: boolean; @@ -41,6 +42,7 @@ export function EditGlossaryDialog({ onSave, isSaving, }: EditGlossaryDialogProps) { + const { t } = useI18n(); const [name, setName] = useState(''); const [sourceLanguage, setSourceLanguage] = useState('fr'); const [targetLanguage, setTargetLanguage] = useState('multi'); @@ -133,22 +135,22 @@ export function EditGlossaryDialog({ if (importedTerms.length > MAX_TERMS_PER_GLOSSARY) { toast({ variant: 'destructive', - title: 'Import failed', - description: `CSV contains ${importedTerms.length} terms, but maximum is ${MAX_TERMS_PER_GLOSSARY}. Please reduce the number of terms.`, + title: t('glossaries.edit.importFailedTitle'), + description: t('glossaries.edit.importFailedMaxDesc', { count: importedTerms.length, max: MAX_TERMS_PER_GLOSSARY }), }); e.target.value = ''; return; } setTerms(importedTerms); toast({ - title: 'Import successful', - description: `${importedTerms.length} terms imported successfully.`, + title: t('glossaries.edit.importSuccessTitle'), + description: t('glossaries.edit.importSuccessDesc', { count: importedTerms.length }), }); } else { toast({ variant: 'destructive', - title: 'Import failed', - description: 'No valid terms found in CSV file.', + title: t('glossaries.edit.importFailedTitle'), + description: t('glossaries.edit.importFailedEmptyDesc'), }); } } @@ -156,8 +158,8 @@ export function EditGlossaryDialog({ reader.onerror = () => { toast({ variant: 'destructive', - title: 'Import failed', - description: 'Failed to read CSV file.', + title: t('glossaries.edit.importFailedTitle'), + description: t('glossaries.edit.importFailedReadDesc'), }); }; reader.readAsText(file); @@ -171,27 +173,27 @@ export function EditGlossaryDialog({ - Edit Glossary + {t('glossaries.edit.title')} - Update the glossary name, language pair, and terms. + {t('glossaries.edit.description')}
- + setName(e.target.value)} - placeholder="Enter glossary name..." + placeholder={t('glossaries.edit.namePlaceholder')} disabled={isSaving} />
- + handleTargetLanguageChange(e.target.value)} @@ -220,7 +222,7 @@ export function EditGlossaryDialog({
- + - Export CSV + {t('glossaries.edit.exportCsv')} onOpenChange(false)} disabled={isSaving} > - Cancel + {t('glossaries.edit.cancel')} diff --git a/frontend/src/app/dashboard/glossaries/ProUpgradePrompt.tsx b/frontend/src/app/dashboard/glossaries/ProUpgradePrompt.tsx index 34fe4de..8c5e6f7 100644 --- a/frontend/src/app/dashboard/glossaries/ProUpgradePrompt.tsx +++ b/frontend/src/app/dashboard/glossaries/ProUpgradePrompt.tsx @@ -4,8 +4,10 @@ import { BookText, Sparkles } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import Link from 'next/link'; +import { useI18n } from '@/lib/i18n'; export function ProUpgradePrompt() { + const { t } = useI18n(); return (
@@ -13,39 +15,38 @@ export function ProUpgradePrompt() {
- Glossaries + {t('glossaries.upgrade.title')} - Customize your translations with custom terminology + {t('glossaries.upgrade.description')}
- Create multiple glossaries + {t('glossaries.upgrade.feature1')}
- Define source→target term pairs + {t('glossaries.upgrade.feature2')}
- Import/export via CSV + {t('glossaries.upgrade.feature3')}
- Apply to LLM translations + {t('glossaries.upgrade.feature4')}

- Glossaries are a Pro feature. - Upgrade to unlock custom terminology. + {t('glossaries.upgrade.proFeatureBefore')}{t('glossaries.upgrade.proLabel')}{t('glossaries.upgrade.proFeatureAfter')}

diff --git a/frontend/src/app/dashboard/translate/TranslationModeToggle.tsx b/frontend/src/app/dashboard/translate/TranslationModeToggle.tsx index 8c68d18..a4b829a 100644 --- a/frontend/src/app/dashboard/translate/TranslationModeToggle.tsx +++ b/frontend/src/app/dashboard/translate/TranslationModeToggle.tsx @@ -9,6 +9,7 @@ import { TooltipTrigger, } from '@/components/ui/tooltip'; import type { TranslationMode } from './types'; +import { useI18n } from '@/lib/i18n'; interface TranslationModeToggleProps { mode: TranslationMode; @@ -21,11 +22,12 @@ export function TranslationModeToggle({ onModeChange, isPro, }: TranslationModeToggleProps) { + const { t } = useI18n(); return (
@@ -57,9 +59,9 @@ export function TranslationModeToggle({ onClick={() => isPro && onModeChange('llm')} disabled={!isPro} > - Pro LLM + {t('translate.mode.proLlm')} - Context-Aware + {t('translate.mode.proLlmDesc')} {!isPro && ( @@ -68,7 +70,7 @@ export function TranslationModeToggle({ {!isPro && ( -

Upgrade to Pro for LLM translation

+

{t('translate.mode.tooltip')}

)}
@@ -76,9 +78,9 @@ export function TranslationModeToggle({ {!isPro && (

- Upgrade to Pro + {t('translate.mode.upgradeLink')} {' '} - for LLM-powered translations + {t('translate.mode.upgradeDesc')}

)}
diff --git a/frontend/src/lib/i18n.tsx b/frontend/src/lib/i18n.tsx index 073e00c..b0e1fcc 100644 --- a/frontend/src/lib/i18n.tsx +++ b/frontend/src/lib/i18n.tsx @@ -323,6 +323,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "terms imported", "glossaries.dialog.changeFile": "Change file", "glossaries.dialog.retry": "Retry", + "glossaries.edit.title": "Edit Glossary", + "glossaries.edit.description": "Update the glossary name, language pair, and terms.", + "glossaries.edit.nameLabel": "Glossary Name", + "glossaries.edit.namePlaceholder": "Enter glossary name...", + "glossaries.edit.sourceLang": "Source language", + "glossaries.edit.targetLang": "Target language", + "glossaries.edit.termsLabel": "Terms ({count} valid)", + "glossaries.edit.exportCsv": "Export CSV", + "glossaries.edit.importCsv": "Import CSV", + "glossaries.edit.cancel": "Cancel", + "glossaries.edit.saving": "Saving...", + "glossaries.edit.saveChanges": "Save Changes", + "glossaries.edit.importFailedTitle": "Import failed", + "glossaries.edit.importFailedMaxDesc": "CSV contains {count} terms, but maximum is {max}. Please reduce the number of terms.", + "glossaries.edit.importSuccessTitle": "Import successful", + "glossaries.edit.importSuccessDesc": "{count} terms imported successfully.", + "glossaries.edit.importFailedEmptyDesc": "No valid terms found in CSV file.", + "glossaries.edit.importFailedReadDesc": "Failed to read CSV file.", + "glossaries.delete.title": "Delete Glossary", + "glossaries.delete.description": "Are you sure you want to delete this glossary?", + "glossaries.delete.warning": "This action cannot be undone", + "glossaries.delete.warningDesc": "All term pairs will be permanently removed.", + "glossaries.delete.cancel": "Cancel", + "glossaries.delete.deleting": "Deleting...", + "glossaries.delete.deleteBtn": "Delete", + "glossaries.upgrade.title": "Glossaries", + "glossaries.upgrade.description": "Customize your translations with custom terminology", + "glossaries.upgrade.feature1": "Create multiple glossaries", + "glossaries.upgrade.feature2": "Define source→target term pairs", + "glossaries.upgrade.feature3": "Import/export via CSV", + "glossaries.upgrade.feature4": "Apply to LLM translations", + "glossaries.upgrade.proFeatureBefore": "Glossaries are a ", + "glossaries.upgrade.proFeatureAfter": " feature. Upgrade to unlock custom terminology.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Upgrade to Pro", + "apiKeys.webhook.title": "Webhook Integration", + "apiKeys.webhook.descriptionBefore": "Pass a ", + "apiKeys.webhook.descriptionAfter": " parameter to receive a POST request when your translation is complete.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Translation Mode", + "translate.mode.classic": "Classic", + "translate.mode.classicDesc": "Fast", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Context-Aware", + "translate.mode.tooltip": "Upgrade to Pro for LLM translation", + "translate.mode.upgradeLink": "Upgrade to Pro", + "translate.mode.upgradeDesc": "for LLM-powered translations", // ── Pricing page ── "pricing.nav.back": "Back", @@ -1140,6 +1187,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "termes importés", "glossaries.dialog.changeFile": "Changer le fichier", "glossaries.dialog.retry": "Réessayer", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", // ── Pricing page ── "pricing.nav.back": "Retour", @@ -1943,6 +2037,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "términos importados", "glossaries.dialog.changeFile": "Cambiar archivo", "glossaries.dialog.retry": "Reintentar", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "Volver", "pricing.nav.home": "Inicio", "pricing.nav.mySubscription": "Mi suscripción", @@ -2701,6 +2842,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "Begriffe importiert", "glossaries.dialog.changeFile": "Datei ändern", "glossaries.dialog.retry": "Erneut versuchen", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "Zurück", "pricing.nav.home": "Startseite", "pricing.nav.mySubscription": "Mein Abonnement", @@ -3459,6 +3647,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "termos importados", "glossaries.dialog.changeFile": "Trocar arquivo", "glossaries.dialog.retry": "Tentar novamente", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "Voltar", "pricing.nav.home": "Início", "pricing.nav.mySubscription": "Minha assinatura", @@ -4217,6 +4452,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "termini importati", "glossaries.dialog.changeFile": "Cambia file", "glossaries.dialog.retry": "Riprova", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "Indietro", "pricing.nav.home": "Home", "pricing.nav.mySubscription": "Il mio abbonamento", @@ -4975,6 +5257,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "termen geïmporteerd", "glossaries.dialog.changeFile": "Bestand wijzigen", "glossaries.dialog.retry": "Opnieuw proberen", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "Terug", "pricing.nav.home": "Home", "pricing.nav.mySubscription": "Mijn abonnement", @@ -5733,6 +6062,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "терминов импортировано", "glossaries.dialog.changeFile": "Изменить файл", "glossaries.dialog.retry": "Повторить", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "Назад", "pricing.nav.home": "Главная", "pricing.nav.mySubscription": "Моя подписка", @@ -6493,6 +6869,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "件インポート済み", "glossaries.dialog.changeFile": "ファイルを変更", "glossaries.dialog.retry": "再試行", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "戻る", "pricing.nav.home": "ホーム", "pricing.nav.mySubscription": "マイサブスクリプション", @@ -7250,6 +7673,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "개 용어 가져옴", "glossaries.dialog.changeFile": "파일 변경", "glossaries.dialog.retry": "다시 시도", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "뒤로", "pricing.nav.home": "홈", "pricing.nav.mySubscription": "내 구독", @@ -8007,6 +8477,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "个术语已导入", "glossaries.dialog.changeFile": "更换文件", "glossaries.dialog.retry": "重试", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "返回", "pricing.nav.home": "首页", "pricing.nav.mySubscription": "我的订阅", @@ -8722,6 +9239,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "مصطلحات مستوردة", "glossaries.dialog.changeFile": "تغيير الملف", "glossaries.dialog.retry": "إعادة المحاولة", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", "pricing.nav.back": "رجوع", "pricing.nav.home": "الرئيسية", "pricing.nav.mySubscription": "اشتراكي", @@ -9446,6 +10010,53 @@ const messages: Record> = { "glossaries.dialog.termsImported": "اصطلاح وارد شد", "glossaries.dialog.changeFile": "تغییر فایل", "glossaries.dialog.retry": "تلاش مجدد", + "glossaries.edit.title": "Modifier le glossaire", + "glossaries.edit.description": "Modifiez le nom, la paire de langues et les termes du glossaire.", + "glossaries.edit.nameLabel": "Nom du glossaire", + "glossaries.edit.namePlaceholder": "Entrez le nom du glossaire...", + "glossaries.edit.sourceLang": "Langue source", + "glossaries.edit.targetLang": "Langue cible", + "glossaries.edit.termsLabel": "Termes ({count} valides)", + "glossaries.edit.exportCsv": "Exporter CSV", + "glossaries.edit.importCsv": "Importer CSV", + "glossaries.edit.cancel": "Annuler", + "glossaries.edit.saving": "Enregistrement...", + "glossaries.edit.saveChanges": "Enregistrer les modifications", + "glossaries.edit.importFailedTitle": "Échec de l'importation", + "glossaries.edit.importFailedMaxDesc": "Le CSV contient {count} termes, le maximum est de {max}. Veuillez réduire le nombre de termes.", + "glossaries.edit.importSuccessTitle": "Importation réussie", + "glossaries.edit.importSuccessDesc": "{count} termes importés avec succès.", + "glossaries.edit.importFailedEmptyDesc": "Aucun terme valide trouvé dans le fichier CSV.", + "glossaries.edit.importFailedReadDesc": "Impossible de lire le fichier CSV.", + "glossaries.delete.title": "Supprimer le glossaire", + "glossaries.delete.description": "Êtes-vous sûr de vouloir supprimer ce glossaire ?", + "glossaries.delete.warning": "Cette action est irréversible", + "glossaries.delete.warningDesc": "Toutes les paires de termes seront définitivement supprimées.", + "glossaries.delete.cancel": "Annuler", + "glossaries.delete.deleting": "Suppression...", + "glossaries.delete.deleteBtn": "Supprimer", + "glossaries.upgrade.title": "Glossaires", + "glossaries.upgrade.description": "Personnalisez vos traductions avec une terminologie personnalisée", + "glossaries.upgrade.feature1": "Créez plusieurs glossaires", + "glossaries.upgrade.feature2": "Définissez des paires de termes source→cible", + "glossaries.upgrade.feature3": "Importez/exportez via CSV", + "glossaries.upgrade.feature4": "Appliquez aux traductions LLM", + "glossaries.upgrade.proFeatureBefore": "Les glossaires sont une fonctionnalité ", + "glossaries.upgrade.proFeatureAfter": ". Passez à un forfait supérieur pour débloquer la terminologie personnalisée.", + "glossaries.upgrade.proLabel": "Pro", + "glossaries.upgrade.upgradeBtn": "Passer à Pro", + "apiKeys.webhook.title": "Intégration Webhook", + "apiKeys.webhook.descriptionBefore": "Passez un paramètre ", + "apiKeys.webhook.descriptionAfter": " pour recevoir une requête POST lorsque votre traduction est terminée.", + "apiKeys.webhook.codeParam": "webhook_url", + "translate.mode.label": "Mode de traduction", + "translate.mode.classic": "Classique", + "translate.mode.classicDesc": "Rapide", + "translate.mode.proLlm": "Pro LLM", + "translate.mode.proLlmDesc": "Contextuel", + "translate.mode.tooltip": "Passez à Pro pour la traduction LLM", + "translate.mode.upgradeLink": "Passer à Pro", + "translate.mode.upgradeDesc": "pour des traductions alimentées par LLM", // ── Pricing page ── "pricing.nav.back": "بازگشت",