- Delete Glossary
+ {t('glossaries.delete.title')}
- Are you sure you want to delete this glossary?
+ {t('glossaries.delete.description')}
{glossaryName && (
"{glossaryName}"
@@ -45,9 +47,9 @@ export function DeleteGlossaryDialog({
-
This action cannot be undone
+
{t('glossaries.delete.warning')}
- All term pairs will be permanently removed.
+ {t('glossaries.delete.warningDesc')}
@@ -59,14 +61,14 @@ export function DeleteGlossaryDialog({
onClick={() => onOpenChange(false)}
disabled={isDeleting}
>
- Cancel
+ {t('glossaries.delete.cancel')}
-
- {isDeleting ? 'Deleting...' : 'Delete'}
+ {isDeleting ? t('glossaries.delete.deleting') : t('glossaries.delete.deleteBtn')}
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')}
- Glossary Name
+ {t('glossaries.edit.nameLabel')}
setName(e.target.value)}
- placeholder="Enter glossary name..."
+ placeholder={t('glossaries.edit.namePlaceholder')}
disabled={isSaving}
/>
- Langue source
+ {t('glossaries.edit.sourceLang')}
setSourceLanguage(e.target.value)}
@@ -205,7 +207,7 @@ export function EditGlossaryDialog({
→
- Langue cible
+ {t('glossaries.edit.targetLang')}
handleTargetLanguageChange(e.target.value)}
@@ -220,7 +222,7 @@ export function EditGlossaryDialog({
-
Terms ({validTermsCount} valid)
+
{t('glossaries.edit.termsLabel', { count: validTermsCount })}
- Export CSV
+ {t('glossaries.edit.exportCsv')}
- Import CSV
+ {t('glossaries.edit.importCsv')}
onOpenChange(false)}
disabled={isSaving}
>
- Cancel
+ {t('glossaries.edit.cancel')}
- {isSaving ? 'Saving...' : 'Save Changes'}
+ {isSaving ? t('glossaries.edit.saving') : t('glossaries.edit.saveChanges')}
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')}
- Upgrade to Pro
+ {t('glossaries.upgrade.upgradeBtn')}
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 (
- Translation Mode
+ {t('translate.mode.label')}
onModeChange('classic')}
>
- Classic
+ {t('translate.mode.classic')}
- Fast
+ {t('translate.mode.classicDesc')}
@@ -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": "بازگشت",