Files
office_translator/frontend/src/lib/i18n/messages/fa/dashboard.json
sepehr b4e873ad2c
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 2m14s
feat(review,teams): review foundation — segments, side-by-side editor, rebuild, XLIFF, team workspaces
Foundations:
- TranslationSegment model + migration f7e8d9c0b1a2 (segments, workspaces,
  workspace_members, glossaries.workspace_id)
- SegmentRecorder injected into all 4 translators: unique (source,
  translation) pairs captured per job and persisted (best-effort)
- set_segment_overrides: human-reviewed translations applied verbatim on
  rebuild — top priority over TM and provider, zero API calls

Review API (routes/review_routes.py):
- GET /translations/{id}/segments (owner or job token)
- PATCH /segments/{id} edit/approve — feeds the per-user TM so approved
  translations are reused in later jobs
- POST /translations/{id}/rebuild — rebuild document with reviewed text
- GET/POST /translations/{id}/xliff — XLIFF 1.2 export/import (edited
  segments export their reviewed text)

Review editor (frontend /dashboard/reviews/[jobId]):
- side-by-side source/translation table, inline edit, approve (single or
  all), rebuild & download (auth blob), XLIFF export/import, 13 locales
- 'Relire et corriger' link on the translation-complete screen

Team workspaces (routes/workspace_routes.py + /dashboard/teams):
- Workspace/WorkspaceMember models, roles owner/admin/member
- create (Business plan), list with seat usage, invite by email with
  seat-limit enforcement (Business=5, Enterprise unlimited), removal
- shared glossaries: workspace members can use a glossary shared to their
  workspace (access check extended)

Tests: 1184 passed / 0 failed (11 new: recorder, overrides, docx
capture->rebuild e2e, XLIFF structure/escaping, seats, workspace CRUD,
shared glossary access)
2026-08-29 19:04:32 +02:00

113 lines
8.6 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"dashboard.nav.translate": "ترجمه",
"dashboard.nav.profile": "پروفایل من",
"dashboard.nav.settings": "تنظیمات",
"dashboard.nav.context": "زمینه",
"dashboard.nav.services": "خدمات",
"dashboard.nav.apiKeys": "کلیدهای API",
"dashboard.nav.glossaries": "واژه‌نامه‌ها",
"dashboard.header.title": "داشبورد",
"dashboard.header.subtitle": "مدیریت ترجمه‌های شما",
"dashboard.header.toggleMenu": "منو",
"dashboard.header.profileTitle": "پروفایل من",
"dashboard.sidebar.theme": "پوسته",
"dashboard.sidebar.signOut": "خروج",
"dashboard.sidebar.backHome": "بازگشت به صفحه اصلی",
"dashboard.sidebar.upgradeToPro": "ارتقا به Pro ←",
"dashboard.translate.pageTitle": "ترجمه یک سند",
"dashboard.translate.pageSubtitle": "یک فایل وارد کنید و زبان هدف را انتخاب کنید",
"dashboard.translate.errorNotificationTitle": "خطا",
"dashboard.translate.dropzone.uploadAria": "منطقه رها کردن فایل",
"dashboard.translate.dropzone.title": "فایل خود را اینجا بکشید و رها کنید",
"dashboard.translate.dropzone.subtitle": "یا کلیک کنید برای انتخاب (DOCX, XLSX, PPTX, PDF)",
"dashboard.translate.dropzone.replaceFile": "جایگزینی فایل",
"dashboard.translate.language.source": "زبان مبدأ",
"dashboard.translate.language.target": "زبان مقصد",
"dashboard.translate.language.loading": "در حال بارگذاری زبان‌ها…",
"dashboard.translate.language.autoDetect": "تشخیص خودکار",
"dashboard.translate.language.selectPlaceholder": "انتخاب…",
"dashboard.translate.language.loadErrorPrefix": "بارگذاری زبان‌ها ناموفق بود",
"dashboard.translate.provider.loading": "در حال بارگذاری ارائه‌دهنده‌ها…",
"dashboard.translate.provider.noneConfigured": "هیچ ارائه‌دهنده‌ای پیکربندی نشده",
"dashboard.translate.provider.modelTitle": "مدل",
"dashboard.translate.provider.sectionTitle": "ارائه‌دهنده",
"dashboard.translate.provider.llmDivider": "هوش مصنوعی · آگاه به زمینه",
"dashboard.translate.provider.llmDividerPro": "هوش مصنوعی · آگاه به زمینه (حرفه‌ای)",
"dashboard.translate.provider.upgrade": "ارتقا به حرفه‌ای",
"dashboard.translate.provider.upgradeSuffix": "برای دسترسی به ترجمه هوش مصنوعی",
"dashboard.translate.trust.zeroRetention": "بدون نگهداری",
"dashboard.translate.trust.deletedAfter": "فایل‌ها پس از پردازش حذف می‌شوند",
"dashboard.translate.actions.uploading": "در حال بارگذاری…",
"dashboard.translate.actions.translate": "ترجمه",
"dashboard.translate.actions.filePrefix": "فایل: ",
"dashboard.translate.actions.cancel": "انصراف",
"dashboard.translate.actions.tryAgain": "تلاش دوباره",
"dashboard.translate.steps.uploading": "در حال بارگذاری فایل…",
"dashboard.translate.steps.starting": "در حال شروع ترجمه…",
"dashboard.translate.complete.title": "ترجمه کامل شد!",
"dashboard.translate.complete.descNamed": "فایل {name} شما با موفقیت ترجمه شد.",
"dashboard.translate.complete.descGeneric": "فایل شما با موفقیت ترجمه شد.",
"dashboard.translate.complete.downloading": "در حال دانلود…",
"dashboard.translate.complete.download": "دانلود",
"dashboard.translate.complete.newTranslation": "ترجمه جدید",
"dashboard.translate.complete.toastOkTitle": "موفقیت",
"dashboard.translate.complete.toastOkDesc": "{name} با موفقیت بارگیری شد.",
"dashboard.translate.complete.toastFailTitle": "ناموفق",
"dashboard.translate.complete.toastFailDesc": "ترجمه ناموفق بود. لطفاً دوباره تلاش کنید.",
"dashboard.translate.sourceDocument": "سند مبدأ",
"dashboard.translate.configuration": "پیکربندی",
"dashboard.translate.translating": "در حال ترجمه",
"dashboard.translate.liveMonitor": "مانیتور زنده",
"dashboard.translate.summary": "خلاصه",
"dashboard.translate.engine": "موتور",
"dashboard.translate.confidence": "اطمینان",
"dashboard.translate.cancel": "لغو",
"dashboard.translate.segments": "بخش‌ها",
"dashboard.translate.characters": "نویسه‌ها",
"dashboard.translate.elapsed": "گذشته",
"dashboard.translate.segPerMin": "بخش/دقیقه",
"dashboard.translate.highQuality": "کیفیت بالا",
"dashboard.translate.quality": "کیفیت",
"dashboard.translate.completed": "ترجمه انجام شد",
"dashboard.translate.replace": "جایگزینی",
"dashboard.translate.pdfMode.title": "حالت ترجمه PDF",
"dashboard.translate.pdfMode.preserveLayout": "حفظ چیدمان",
"dashboard.translate.pdfMode.textOnly": "فقط متن",
"dashboard.translate.pdfMode.preserveLayoutDesc": "تصاویر، جداول و قالب‌بندی را حفظ می‌کند. مناسب PDFهای ساده.",
"dashboard.translate.pdfMode.textOnlyDesc": "تمام متن را کاملاً ترجمه می‌کند. خروجی تمیز، بدون مشکل چیدمان.",
"dashboard.translate.pipeline.upload": "بارگذاری",
"dashboard.translate.pipeline.analyze": "تحلیل",
"dashboard.translate.pipeline.translate": "ترجمه",
"dashboard.translate.pipeline.rebuild": "بازسازی",
"dashboard.translate.pipeline.finalize": "نهایی‌سازی",
"dashboard.translate.progress.processingFallback": "در حال پردازش…",
"dashboard.translate.progress.connectionLost": "اتصال قطع شد. در حال تلاش مجدد…",
"dashboard.translate.progress.failedTitle": "ترجمه ناموفق",
"dashboard.translate.error.unexpected": "خطای غیرمنتظره‌ای رخ داد. لطفاً دوباره تلاش کنید.",
"dashboard.translate.error.noResult": "ترجمه نتیجه‌ای نداشت. تأیید کنید که سند حاوی متن است، سپس دوباره تلاش کنید یا موتور دیگری انتخاب کنید.",
"dashboard.translate.error.apiKey": "کلید API نامعتبر یا ناموجود است. با مدیر تماس بگیرید تا کلیدها را پیکربندی کند.",
"dashboard.translate.error.quota": "محدودیت استفاده به پایان رسیده. چند دقیقه دیگر دوباره تلاش کنید یا موتور دیگری انتخاب کنید.",
"dashboard.translate.error.timeout": "اتصال به سرویس ترجمه منقضی شد. شبکه خود را بررسی کنید و دوباره تلاش کنید.",
"dashboard.translate.error.sessionExpired": "نشست منقضی شده. برای شروع مجدد ترجمه روی تلاش مجدد کلیک کنید.",
"dashboard.translate.error.empty": "سند خالی به نظر می‌رسد یا متن قابل ترجمه‌ای ندارد (تصویر PDF اسکن شده؟).",
"dashboard.translate.error.unsupported": "فرمت فایل پشتیبانی نمی‌شود یا فایل خراب است.",
"dashboard.translate.error.connection": "اتصال قطع شد. شبکه خود را بررسی کنید و دوباره تلاش کنید.",
"dashboard.translate.error.generic": "ترجمه ناموفق: {detail}",
"dashboard.translate.error.title": "ترجمه ناموفق",
"dashboard.translate.retry": "تلاش مجدد ترجمه",
"dashboard.translate.newFile": "فایل جدید",
"dashboard.translate.modeAI": "حالت هوش مصنوعی",
"dashboard.translate.modeClassic": "حالت کلاسیک",
"dashboard.translate.glossaryLLMHint": "واژه‌نامه‌ها در حالت هوش مصنوعی موجودند",
"dashboard.translate.submitting": "در حال ارسال...",
"dashboard.translate.submit": "شروع ترجمه",
"dashboard.translate.noFile": "ابتدا یک فایل آپلود کنید",
"dashboard.translate.noTargetLang": "زبان مقصد را انتخاب کنید",
"dashboard.topbar.interfaceLabel": "رابط ترجمه",
"dashboard.topbar.premiumAccess": "دسترسی ویژه",
"dashboard.checkoutSyncError": "خطا در همگام‌سازی پرداخت.",
"dashboard.networkRefresh": "خطای شبکه. لطفاً صفحه را تازه‌سازی کنید.",
"dashboard.continueToTranslate": "ادامه به ترجمه",
"dashboard.nav.teams": "تیم"
}