feat: multilingual glossary UI, translate selector, context fusion
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m30s
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m30s
- TermEditor: rewritten with expandable multilingual translation grid (13 languages), editorial styling, source/target + translations JSON - GlossarySelector: new component in translate page config panel, fetches user glossaries, shows flag + term count, Pro+LLM only - useTranslationConfig: added glossaryId state - useTranslationSubmit: sends glossary_id to backend - Context page: removed textarea glossary, presets now create API glossaries via template import, added link to Glossaries page - i18n: added 12 keys × 13 locales for glossary/translate/context Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -694,6 +694,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Clear all",
|
||||
"context.saving": "Saving...",
|
||||
"context.save": "Save",
|
||||
"translate.glossary.title": "Glossary",
|
||||
"translate.glossary.select": "Select a glossary",
|
||||
"translate.glossary.none": "None",
|
||||
"translate.glossary.terms": "terms",
|
||||
"context.presets.createGlossary": "Create glossary",
|
||||
"context.presets.created": "Glossary created",
|
||||
"context.presets.createdDesc": "The glossary \"{name}\" has been created with {count} terms.",
|
||||
"context.presets.hint": "Click a preset to create a glossary with domain-specific terms. Manage your glossaries in the Glossaries section.",
|
||||
"context.glossary.manage": "Manage glossaries",
|
||||
"context.saved": "Saved",
|
||||
"context.savedDesc": "Your context instructions have been saved.",
|
||||
|
||||
// ── Admin ──
|
||||
"admin.login.title": "Administration",
|
||||
@@ -1447,6 +1458,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Tout effacer",
|
||||
"context.saving": "Enregistrement...",
|
||||
"context.save": "Enregistrer",
|
||||
"translate.glossary.title": "Glossaire",
|
||||
"translate.glossary.select": "Sélectionner un glossaire",
|
||||
"translate.glossary.none": "Aucun",
|
||||
"translate.glossary.terms": "termes",
|
||||
"context.presets.createGlossary": "Créer le glossaire",
|
||||
"context.presets.created": "Glossaire créé",
|
||||
"context.presets.createdDesc": "Le glossaire \"{name}\" a été créé avec {count} termes.",
|
||||
"context.presets.hint": "Cliquez sur un preset pour créer un glossaire avec des termes spécifiques au domaine. Gérez vos glossaires dans la section Glossaires.",
|
||||
"context.glossary.manage": "Gérer les glossaires",
|
||||
"context.saved": "Enregistré",
|
||||
"context.savedDesc": "Vos instructions de contexte ont été enregistrées.",
|
||||
|
||||
// ── Admin ──
|
||||
"admin.login.title": "Administration",
|
||||
@@ -2146,6 +2168,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Borrar todo",
|
||||
"context.saving": "Guardando...",
|
||||
"context.save": "Guardar",
|
||||
"translate.glossary.title": "Glosario",
|
||||
"translate.glossary.select": "Seleccionar glosario",
|
||||
"translate.glossary.none": "Ninguno",
|
||||
"translate.glossary.terms": "términos",
|
||||
"context.presets.createGlossary": "Crear glosario",
|
||||
"context.presets.created": "Glosario creado",
|
||||
"context.presets.createdDesc": "El glosario \"{name}\" ha sido creado con {count} términos.",
|
||||
"context.presets.hint": "Haz clic en un preset para crear un glosario con términos específicos del dominio. Gestiona tus glosarios en la sección de Glosarios.",
|
||||
"context.glossary.manage": "Gestionar glosarios",
|
||||
"context.saved": "Guardado",
|
||||
"context.savedDesc": "Tus instrucciones de contexto se han guardado.",
|
||||
"admin.login.title": "Administración",
|
||||
"admin.login.required": "Inicio de sesión requerido",
|
||||
"admin.login.password": "Contraseña de administrador",
|
||||
@@ -2843,6 +2876,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Alles löschen",
|
||||
"context.saving": "Wird gespeichert...",
|
||||
"context.save": "Speichern",
|
||||
"translate.glossary.title": "Glossar",
|
||||
"translate.glossary.select": "Glossar auswählen",
|
||||
"translate.glossary.none": "Keins",
|
||||
"translate.glossary.terms": "Begriffe",
|
||||
"context.presets.createGlossary": "Glossar erstellen",
|
||||
"context.presets.created": "Glossar erstellt",
|
||||
"context.presets.createdDesc": "Das Glossar \"{name}\" wurde mit {count} Begriffen erstellt.",
|
||||
"context.presets.hint": "Klicken Sie auf ein Preset, um ein Glossar mit domänenspezifischen Begriffen zu erstellen. Verwalten Sie Ihre Glossare im Glossar-Bereich.",
|
||||
"context.glossary.manage": "Glossare verwalten",
|
||||
"context.saved": "Gespeichert",
|
||||
"context.savedDesc": "Ihre Kontextanweisungen wurden gespeichert.",
|
||||
"admin.login.title": "Administration",
|
||||
"admin.login.required": "Anmeldung erforderlich",
|
||||
"admin.login.password": "Admin-Passwort",
|
||||
@@ -3540,6 +3584,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Limpar tudo",
|
||||
"context.saving": "Salvando...",
|
||||
"context.save": "Salvar",
|
||||
"translate.glossary.title": "Glossário",
|
||||
"translate.glossary.select": "Selecionar glossário",
|
||||
"translate.glossary.none": "Nenhum",
|
||||
"translate.glossary.terms": "termos",
|
||||
"context.presets.createGlossary": "Criar glossário",
|
||||
"context.presets.created": "Glossário criado",
|
||||
"context.presets.createdDesc": "O glossário \"{name}\" foi criado com {count} termos.",
|
||||
"context.presets.hint": "Clique em um preset para criar um glossário com termos específicos do domínio. Gerencie seus glossários na seção Glossários.",
|
||||
"context.glossary.manage": "Gerenciar glossários",
|
||||
"context.saved": "Salvo",
|
||||
"context.savedDesc": "Suas instruções de contexto foram salvas.",
|
||||
"admin.login.title": "Administração",
|
||||
"admin.login.required": "Login necessário",
|
||||
"admin.login.password": "Senha de administrador",
|
||||
@@ -4237,6 +4292,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Cancella tutto",
|
||||
"context.saving": "Salvataggio...",
|
||||
"context.save": "Salva",
|
||||
"translate.glossary.title": "Glossario",
|
||||
"translate.glossary.select": "Seleziona glossario",
|
||||
"translate.glossary.none": "Nessuno",
|
||||
"translate.glossary.terms": "termini",
|
||||
"context.presets.createGlossary": "Crea glossario",
|
||||
"context.presets.created": "Glossario creato",
|
||||
"context.presets.createdDesc": "Il glossario \"{name}\" è stato creato con {count} termini.",
|
||||
"context.presets.hint": "Fai clic su un preset per creare un glossario con termini specifici del dominio. Gestisci i tuoi glossari nella sezione Glossari.",
|
||||
"context.glossary.manage": "Gestisci glossari",
|
||||
"context.saved": "Salvato",
|
||||
"context.savedDesc": "Le tue istruzioni di contesto sono state salvate.",
|
||||
"admin.login.title": "Amministrazione",
|
||||
"admin.login.required": "Accesso richiesto",
|
||||
"admin.login.password": "Password amministratore",
|
||||
@@ -4934,6 +5000,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Alles wissen",
|
||||
"context.saving": "Opslaan...",
|
||||
"context.save": "Opslaan",
|
||||
"translate.glossary.title": "Woordenlijst",
|
||||
"translate.glossary.select": "Woordenlijst selecteren",
|
||||
"translate.glossary.none": "Geen",
|
||||
"translate.glossary.terms": "termen",
|
||||
"context.presets.createGlossary": "Woordenlijst maken",
|
||||
"context.presets.created": "Woordenlijst gemaakt",
|
||||
"context.presets.createdDesc": "De woordenlijst \"{name}\" is gemaakt met {count} termen.",
|
||||
"context.presets.hint": "Klik op een preset om een woordenlijst met domeinspecifieke termen te maken. Beheer je woordenlijsten in het Woordenlijsten-gedeelte.",
|
||||
"context.glossary.manage": "Woordenlijsten beheren",
|
||||
"context.saved": "Opgeslagen",
|
||||
"context.savedDesc": "Je contextinstructies zijn opgeslagen.",
|
||||
"admin.login.title": "Beheer",
|
||||
"admin.login.required": "Inloggen vereist",
|
||||
"admin.login.password": "Admin-wachtwoord",
|
||||
@@ -5633,6 +5710,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "Очистить всё",
|
||||
"context.saving": "Сохранение...",
|
||||
"context.save": "Сохранить",
|
||||
"translate.glossary.title": "Глоссарий",
|
||||
"translate.glossary.select": "Выбрать глоссарий",
|
||||
"translate.glossary.none": "Нет",
|
||||
"translate.glossary.terms": "терминов",
|
||||
"context.presets.createGlossary": "Создать глоссарий",
|
||||
"context.presets.created": "Глоссарий создан",
|
||||
"context.presets.createdDesc": "Глоссарий \"{name}\" создан с {count} терминами.",
|
||||
"context.presets.hint": "Нажмите на пресет, чтобы создать глоссарий с предметными терминами. Управляйте глоссариями в разделе Глоссарии.",
|
||||
"context.glossary.manage": "Управлять глоссариями",
|
||||
"context.saved": "Сохранено",
|
||||
"context.savedDesc": "Ваши контекстные инструкции сохранены.",
|
||||
"admin.login.title": "Администрирование",
|
||||
"admin.login.required": "Требуется вход",
|
||||
"admin.login.password": "Пароль администратора",
|
||||
@@ -6329,6 +6417,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "すべてクリア",
|
||||
"context.saving": "保存中...",
|
||||
"context.save": "保存",
|
||||
"translate.glossary.title": "用語集",
|
||||
"translate.glossary.select": "用語集を選択",
|
||||
"translate.glossary.none": "なし",
|
||||
"translate.glossary.terms": "件",
|
||||
"context.presets.createGlossary": "用語集を作成",
|
||||
"context.presets.created": "用語集を作成しました",
|
||||
"context.presets.createdDesc": "用語集「{name}」を{count}件の用語で作成しました。",
|
||||
"context.presets.hint": "プリセットをクリックして、専門用語の用語集を作成します。用語集セクションで管理できます。",
|
||||
"context.glossary.manage": "用語集を管理",
|
||||
"context.saved": "保存しました",
|
||||
"context.savedDesc": "コンテキスト指示を保存しました。",
|
||||
"admin.login.title": "管理画面",
|
||||
"admin.login.required": "ログインが必要です",
|
||||
"admin.login.password": "管理者パスワード",
|
||||
@@ -7025,6 +7124,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "모두 지우기",
|
||||
"context.saving": "저장 중...",
|
||||
"context.save": "저장",
|
||||
"translate.glossary.title": "용어집",
|
||||
"translate.glossary.select": "용어집 선택",
|
||||
"translate.glossary.none": "없음",
|
||||
"translate.glossary.terms": "개",
|
||||
"context.presets.createGlossary": "용어집 만들기",
|
||||
"context.presets.created": "용어집 생성됨",
|
||||
"context.presets.createdDesc": "용어집 \"{name}\"이(가) {count}개의 용어로 생성되었습니다.",
|
||||
"context.presets.hint": "프리셋을 클릭하여 도메인별 용어가 포함된 용어집을 만드세요. 용어집 섹션에서 관리할 수 있습니다.",
|
||||
"context.glossary.manage": "용어집 관리",
|
||||
"context.saved": "저장됨",
|
||||
"context.savedDesc": "컨텍스트 지침이 저장되었습니다.",
|
||||
"admin.login.title": "관리",
|
||||
"admin.login.required": "로그인 필요",
|
||||
"admin.login.password": "관리자 비밀번호",
|
||||
@@ -7679,6 +7789,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "全部清除",
|
||||
"context.saving": "保存中...",
|
||||
"context.save": "保存",
|
||||
"translate.glossary.title": "术语表",
|
||||
"translate.glossary.select": "选择术语表",
|
||||
"translate.glossary.none": "无",
|
||||
"translate.glossary.terms": "个术语",
|
||||
"context.presets.createGlossary": "创建术语表",
|
||||
"context.presets.created": "术语表已创建",
|
||||
"context.presets.createdDesc": "术语表 \"{name}\" 已创建,包含 {count} 个术语。",
|
||||
"context.presets.hint": "点击预设以创建包含领域特定术语的术语表。在术语表部分管理您的术语表。",
|
||||
"context.glossary.manage": "管理术语表",
|
||||
"context.saved": "已保存",
|
||||
"context.savedDesc": "您的上下文说明已保存。",
|
||||
"admin.login.title": "管理后台",
|
||||
"admin.login.required": "需要登录",
|
||||
"admin.login.password": "管理员密码",
|
||||
@@ -8333,6 +8454,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "مسح الكل",
|
||||
"context.saving": "جارٍ الحفظ...",
|
||||
"context.save": "حفظ",
|
||||
"translate.glossary.title": "المسرد",
|
||||
"translate.glossary.select": "اختر مسرداً",
|
||||
"translate.glossary.none": "بدون",
|
||||
"translate.glossary.terms": "مصطلحات",
|
||||
"context.presets.createGlossary": "إنشاء مسرد",
|
||||
"context.presets.created": "تم إنشاء المسرد",
|
||||
"context.presets.createdDesc": "تم إنشاء المسرد \"{name}\" بـ {count} مصطلحات.",
|
||||
"context.presets.hint": "انقر على إعداد مسبق لإنشاء مسرد بمصطلحات خاصة بالمجال. أد穹 مصادرك في قسم المسرات.",
|
||||
"context.glossary.manage": "إدارة المسرات",
|
||||
"context.saved": "تم الحفظ",
|
||||
"context.savedDesc": "تم حفظ تعليمات السياق الخاصة بك.",
|
||||
"admin.login.title": "الإدارة",
|
||||
"admin.login.required": "تسجيل الدخول مطلوب",
|
||||
"admin.login.password": "كلمة مرور المسؤول",
|
||||
@@ -9023,6 +9155,17 @@ const messages: Record<Locale, Record<string, string>> = {
|
||||
"context.clearAll": "پاک کردن همه",
|
||||
"context.saving": "در حال ذخیره...",
|
||||
"context.save": "ذخیره",
|
||||
"translate.glossary.title": "واژهنامه",
|
||||
"translate.glossary.select": "انتخاب واژهنامه",
|
||||
"translate.glossary.none": "هیچکدام",
|
||||
"translate.glossary.terms": "واژه",
|
||||
"context.presets.createGlossary": "ایجاد واژهنامه",
|
||||
"context.presets.created": "واژهنامه ایجاد شد",
|
||||
"context.presets.createdDesc": "واژهنامه \"{name}\" با {count} واژه ایجاد شد.",
|
||||
"context.presets.hint": "روی یک پیشتنظیم کلیک کنید تا واژهنامهای با اصطلاحات تخصصی ایجاد شود. واژهنامههای خود را در بخش واژهنامهها مدیریت کنید.",
|
||||
"context.glossary.manage": "مدیریت واژهنامهها",
|
||||
"context.saved": "ذخیره شد",
|
||||
"context.savedDesc": "دستورالعملهای زمینه شما ذخیره شد.",
|
||||
"admin.login.title": "مدیریت",
|
||||
"admin.login.required": "ورود لازم است",
|
||||
"admin.login.password": "رمز عبور مدیر",
|
||||
|
||||
Reference in New Issue
Block a user