From e11a6b16a05c2ce916c05670a7e634565cbdc5a1 Mon Sep 17 00:00:00 2001 From: Sepehr Date: Sun, 7 Jun 2026 09:58:16 +0200 Subject: [PATCH] =?UTF-8?q?fix(glossaries):=20source=20language=20combobox?= =?UTF-8?q?=20was=20a=20lie=20=E2=80=94=20replace=20with=20fixed=20FR=20la?= =?UTF-8?q?bel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les templates data/glossaires/*.json ne stockent les termes sources qu'en francais. Le combobox 'Langue source' laissait l'utilisateur croire qu'il pouvait traduire depuis une autre langue, mais le backend renverrait toujours des termes en francais. Fix : remplacer le select par un label fixe 'Francais' avec un badge 'fixe' et une note explicative indiquant que le multilingue source est sur la roadmap. Le select 'Langue cible' reste : il determine quelle traduction du terme est affichee dans la colonne 'Cible' (FR+10 langues via le champ translations). --- .../app/dashboard/glossaries/[id]/page.tsx | 27 +++++++------ frontend/src/lib/i18n.tsx | 39 +++++++++++++++++++ 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/frontend/src/app/dashboard/glossaries/[id]/page.tsx b/frontend/src/app/dashboard/glossaries/[id]/page.tsx index 20416ac..a1bbd01 100644 --- a/frontend/src/app/dashboard/glossaries/[id]/page.tsx +++ b/frontend/src/app/dashboard/glossaries/[id]/page.tsx @@ -363,18 +363,17 @@ export default function GlossaryDetailPage() { - +
+ 🇫🇷 + Français + + {t('glossaries.detail.sourceLocked') || 'fixé'} + +
+

+ {t('glossaries.detail.sourceLockedNote') || + 'Les templates ne stockent la source qu\'en français. Le multilingue source est sur la roadmap.'} +

diff --git a/frontend/src/lib/i18n.tsx b/frontend/src/lib/i18n.tsx index 4a47e58..a5f17f5 100644 --- a/frontend/src/lib/i18n.tsx +++ b/frontend/src/lib/i18n.tsx @@ -438,6 +438,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -1422,6 +1425,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirmer la suppression ?", "glossaries.detail.confirm": "Confirmer", "glossaries.detail.cancel": "Annuler", + "glossaries.detail.sourceLocked": "fixé", + "glossaries.detail.sourceLockedNote": "Les templates ne stockent la source qu'en français. Le multilingue source est sur la roadmap.", + "glossaries.detail.targetLangNote": "Choisissez une langue pour voir les traductions correspondantes, ou « Multilingue » pour la valeur par défaut.", "glossaries.detail.notFoundTitle": "Glossaire introuvable", "glossaries.detail.notFoundDesc": "Ce glossaire n'existe pas ou vous n'y avez pas accès.", "glossaries.detail.maxTermsTitle": "Limite atteinte", @@ -2392,6 +2398,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -3317,6 +3326,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -4242,6 +4254,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -5167,6 +5182,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -6092,6 +6110,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -7017,6 +7038,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -7944,6 +7968,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -8868,6 +8895,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -9792,6 +9822,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -10674,6 +10707,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached", @@ -11565,6 +11601,9 @@ const messages: Record> = { "glossaries.detail.confirmDelete": "Confirm deletion?", "glossaries.detail.confirm": "Confirm", "glossaries.detail.cancel": "Cancel", + "glossaries.detail.sourceLocked": "fixed", + "glossaries.detail.sourceLockedNote": "Templates only store the source in French. Multilingual source is on the roadmap.", + "glossaries.detail.targetLangNote": "Pick a language to see the matching translations, or « Multilingual » for the default value.", "glossaries.detail.notFoundTitle": "Glossary not found", "glossaries.detail.notFoundDesc": "This glossary does not exist or you don't have access to it.", "glossaries.detail.maxTermsTitle": "Limit reached",