perf+security: fix build, secure downloads, dedupe translations, refactor i18n
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m49s

Frontend:
- Fix Framer Motion / motion-dom build error by pinning framer-motion to
  11.18.2 (compatible with React 19 and Next.js 16).
- Add cross-env and build:local script to bypass standalone symlink errors
  on Windows without Developer Mode.
- Allow NEXT_OUTPUT=default to disable standalone output for local builds.
- Refactor i18n: split 14,177-line src/lib/i18n.tsx into per-locale,
  per-namespace JSON files under src/lib/i18n/messages/.
- Load English synchronously; other locales loaded on demand via dynamic
  imports (reduces initial bundle, improves maintainability).
- Remove unused next-intl message files src/messages/en.json and fr.json.

Backend:
- Remove insecure legacy /api/v1/download/{filename} and /api/v1/cleanup/{filename}
  endpoints. The job-based /api/v1/download/{job_id} already enforces ownership.
- Deduplicate texts in TranslationService.translate_batch before sending them
  to the provider, reducing API calls for repeated strings.
- Pin httpx to <0.28 to fix TestClient incompatibility with starlette 0.35.1.
- Add pytest-cov and ruff dev dependencies/config.

DevOps:
- Remove hardcoded Grafana password from docker-compose.yml and
  docker-compose.monitoring.yml; use GRAFANA_PASSWORD env var.
- Change default TRANSLATION_SERVICE from ollama to google in
  docker-compose.yml (Ollama is an optional profile).
- Add GRAFANA_PASSWORD to .env.example.
- Add .coverage and frontend/pnpm-workspace.yaml to .gitignore.

Tests:
- Update API versioning tests for removed legacy endpoints.
- Add tests/test_translation_service.py for deduplication behavior.

Verified:
- pnpm run build:local passes.
- uv run pytest tests/test_providers/* tests/test_translation_service.py
  tests/test_story_3_5_api_versioning.py tests/test_download_endpoint.py
  tests/test_translators/test_excel_translator.py: provider/translator tests
  pass; one pre-existing French error-message test still fails (message is
  returned in English, unrelated to this change).
This commit is contained in:
2026-06-14 16:44:18 +02:00
parent eda6821632
commit fa637abff0
365 changed files with 23910 additions and 14955 deletions

View File

@@ -0,0 +1,48 @@
{
"admin.login.title": "الإدارة",
"admin.login.required": "تسجيل الدخول مطلوب",
"admin.login.password": "كلمة مرور المسؤول",
"admin.login.connecting": "جارٍ الاتصال...",
"admin.login.access": "الدخول إلى لوحة الإدارة",
"admin.login.restricted": "مخصص للمسؤولين فقط",
"admin.layout.checking": "جارٍ التحقق من المصادقة...",
"admin.dashboard.title": "لوحة تحكم المسؤول",
"admin.dashboard.subtitle": "لوحة تحكم المسؤولين",
"admin.dashboard.refresh": "تحديث",
"admin.dashboard.refreshTooltip": "تحديث بيانات لوحة التحكم",
"admin.dashboard.config": "إعدادات النظام",
"admin.dashboard.maxFileSize": "الحد الأقصى لحجم الملف:",
"admin.dashboard.translationService": "خدمة الترجمة:",
"admin.dashboard.formats": "التنسيقات:",
"admin.nav.dashboard": "Dashboard",
"admin.nav.users": "المستخدمون",
"admin.nav.pricing": "الأسعار و Stripe",
"admin.nav.providers": "المزوّدون",
"admin.nav.system": "النظام",
"admin.nav.logs": "السجلات",
"admin.users.title": "إدارة المستخدمين",
"admin.users.subtitle": "عرض حسابات المستخدمين وإدارتها",
"admin.users.planUpdated": "تم تحديث الخطة",
"admin.users.planChanged": "تم تغيير الخطة إلى \\\"{plan}\\\" بنجاح.",
"admin.users.unknownError": "خطأ غير معروف",
"admin.users.error": "خطأ",
"admin.users.planUpdateError": "تعذر تحديث الخطة: {message}",
"admin.users.noKeys": "لا توجد مفاتيح",
"admin.users.noKeysDesc": "لا يمتلك هذا المستخدم مفاتيح API نشطة.",
"admin.users.keysRevoked": "تم إلغاء المفاتيح",
"admin.users.keysRevokedDesc": "تم إلغاء {count} مفتاح API بنجاح.",
"admin.users.revokeError": "تعذر إلغاء المفاتيح: {message}",
"admin.users.retry": "إعادة المحاولة",
"admin.system.title": "النظام",
"admin.system.subtitle": "مراقبة حالة النظام وإدارة الموارد",
"admin.system.quotas": "حصص الترجمة",
"admin.system.resetQuotas": "إعادة تعيين الحصص الشهرية",
"admin.system.resetting": "جارٍ إعادة التعيين...",
"admin.system.reset": "إعادة تعيين",
"admin.system.allOperational": "جميع الأنظمة تعمل بشكل طبيعي",
"admin.system.issuesDetected": "تم اكتشاف مشاكل في النظام",
"admin.system.waitingData": "في انتظار البيانات...",
"admin.system.purging": "جارٍ الحذف...",
"admin.system.clean": "تنظيف",
"admin.system.purge": "حذف"
}

View File

@@ -0,0 +1,72 @@
{
"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",
"apiKeys.title": "مفاتيح API",
"apiKeys.subtitle": "إدارة مفاتيح API للوصول البرمجي إلى واجهة الترجمة.",
"apiKeys.loading": "جارٍ التحميل...",
"apiKeys.sectionTitle": "API والأتمتة",
"apiKeys.sectionDesc": "إنشاء وإدارة مفاتيح API لسير عمل الأتمتة",
"apiKeys.keysUsed": "{total} من {max} مفاتيح مستخدمة",
"apiKeys.maxReached": "تم بلوغ الحد الأقصى للمفاتيح. قم بإلغاء مفتاح لإنشاء واحد جديد.",
"apiKeys.canGenerate": "يمكنك إنشاء {count} مفتاح إضافي",
"apiKeys.canGeneratePlural": "يمكنك إنشاء {count} مفاتيح إضافية",
"apiKeys.generateNew": "إنشاء مفتاح جديد",
"apiKeys.keyRevoked": "تم إلغاء المفتاح",
"apiKeys.keyRevokedDesc": "تم إلغاء مفتاح API بنجاح.",
"apiKeys.keyNotFound": "المفتاح غير موجود",
"apiKeys.keyNotFoundDesc": "مفتاح API لم يعد موجودًا. ربما تم إلغاؤه بالفعل.",
"apiKeys.error": "خطأ",
"apiKeys.revokeError": "فشل إلغاء مفتاح API. يرجى المحاولة مرة أخرى.",
"apiKeys.limitReached": "تم بلوغ الحد",
"apiKeys.limitReachedDesc": "لقد وصلت إلى الحد الأقصى وهو 10 مفاتيح API. قم بإلغاء مفتاح حالي لإنشاء واحد جديد.",
"apiKeys.proRequired": "ميزة Pro مطلوبة",
"apiKeys.proRequiredDesc": "مفاتيح API هي ميزة Pro. يرجى ترقية حسابك.",
"apiKeys.generateError": "فشل إنشاء مفتاح API. يرجى المحاولة مرة أخرى.",
"apiKeys.upgrade.title": "مفاتيح API",
"apiKeys.upgrade.subtitle": "أتمتة ترجماتك مع وصول API",
"apiKeys.upgrade.feat1": "إنشاء مفاتيح API غير محدودة",
"apiKeys.upgrade.feat2": "أتمتة ترجمة المستندات",
"apiKeys.upgrade.feat3": "إشعارات Webhook",
"apiKeys.upgrade.feat4": "أوضاع ترجمة LLM",
"apiKeys.upgrade.proFeature": "مفاتيح API هي ميزة {pro}. قم بالترقية لفتح أتمتة API.",
"apiKeys.upgrade.pro": "Pro",
"apiKeys.upgrade.cta": "الترقية إلى Pro",
"apiKeys.dialog.maxTitle": "تم بلوغ الحد الأقصى للمفاتيح",
"apiKeys.dialog.maxDesc": "لقد وصلت إلى الحد الأقصى وهو 10 مفاتيح API. يرجى إلغاء مفتاح حالي قبل إنشاء واحد جديد.",
"apiKeys.dialog.close": "إغلاق",
"apiKeys.dialog.generated": "تم إنشاء مفتاح API!",
"apiKeys.dialog.generatedDesc": "تم إنشاء مفتاح API الجديد. انسخه الآن - لن يظهر مرة أخرى.",
"apiKeys.dialog.important": "مهم:",
"apiKeys.dialog.importantDesc": "هذه هي المرة الوحيدة التي سترى فيها هذا المفتاح. احفظه في مكان آمن.",
"apiKeys.dialog.apiKey": "مفتاح API",
"apiKeys.dialog.name": "الاسم:",
"apiKeys.dialog.done": "تم",
"apiKeys.dialog.copied": "لقد نسخت المفتاح",
"apiKeys.dialog.generateTitle": "إنشاء مفتاح API جديد",
"apiKeys.dialog.generateDesc": "إنشاء مفتاح API جديد للوصول البرمجي إلى واجهة الترجمة.",
"apiKeys.dialog.keyName": "اسم المفتاح (اختياري)",
"apiKeys.dialog.keyNamePlaceholder": "مثال: الإنتاج، الاختبار",
"apiKeys.dialog.keyNameHint": "اسم وصفي لمساعدتك على التعرف على هذا المفتاح لاحقًا.",
"apiKeys.dialog.nameTooLong": "يجب ألا يتجاوز الاسم {max} حرفًا",
"apiKeys.dialog.nameInvalid": "يمكن أن يحتوي الاسم على أحرف وأرقام ومسافات وشرطات وشرطات سفلية فقط",
"apiKeys.dialog.cancel": "إلغاء",
"apiKeys.dialog.generating": "جارٍ الإنشاء...",
"apiKeys.dialog.generate": "إنشاء مفتاح",
"apiKeys.table.name": "الاسم",
"apiKeys.table.prefix": "البادئة",
"apiKeys.table.created": "تاريخ الإنشاء",
"apiKeys.table.lastUsed": "آخر استخدام",
"apiKeys.table.never": "أبدًا",
"apiKeys.table.actions": "الإجراءات",
"apiKeys.table.revoke": "إلغاء",
"apiKeys.table.copyPrefix": "نسخ بادئة المفتاح",
"apiKeys.table.revokeKey": "إلغاء المفتاح",
"apiKeys.revokeDialog.title": "إلغاء مفتاح API",
"apiKeys.revokeDialog.desc": "هل أنت متأكد من إلغاء المفتاح \\\"{name}\\\"؟ لا يمكن التراجع عن هذا الإجراء.",
"apiKeys.revokeDialog.confirm": "نعم، إلغاء",
"apiKeys.revokeDialog.cancel": "إلغاء",
"apiKeys.noKeysGenerated": "لم يتم إنشاء مفاتيح",
"apiKeys.copied": "تم النسخ!"
}

View File

@@ -0,0 +1,3 @@
{
"auth.brandName": "Wordly"
}

View File

@@ -0,0 +1,12 @@
{
"checkout.activating": "جارٍ التفعيل…",
"checkout.activatingDesc": "نقوم بتحديث اشتراكك، يرجى الانتظار.",
"checkout.paymentConfirmed": "تم تأكيد الدفع!",
"checkout.subscriptionActivated": "تم تفعيل الاشتراك!",
"checkout.planActivated": "تم تفعيل خطة {plan}!",
"checkout.redirectingToProfile": "إعادة التوجيه إلى ملفك الشخصي…",
"checkout.paymentReceived": "تم استلام الدفع",
"checkout.redirecting": "جارٍ إعادة التوجيه…",
"checkout.syncError": "خطأ في المزامنة",
"checkout.networkError": "خطأ في الشبكة. تم تأكيد الدفع — يرجى إعادة تحميل ملفك الشخصي."
}

View File

@@ -0,0 +1,4 @@
{
"common.loading": "جارٍ التحميل...",
"common.backToHome": "العودة للرئيسية"
}

View File

@@ -0,0 +1,25 @@
{
"context.proTitle": "ميزة Pro",
"context.proDesc": "السياق والمصطلحات المهنية متاحة مع خطط Pro وBusiness وEnterprise. توفر ترجمات أكثر دقة من خلال تعليمات ومفردات خاصة بمجالك.",
"context.viewPlans": "عرض الخطط",
"context.title": "السياق والمصطلحات",
"context.subtitle": "حسّن جودة الترجمة من خلال تعليمات ومفردات خاصة بمجالك.",
"context.presets.title": "المصطلحات المهنية",
"context.presets.desc": "تحميل مصطلحات كاملة مع تعليمات ومصطلحات متخصصة",
"context.instructions.title": "تعليمات السياق",
"context.instructions.desc": "تعليمات سيتبعها الذكاء الاصطناعي أثناء الترجمة",
"context.instructions.placeholder": "مثال: أنت تترجم مستندات تقنية HVAC. استخدم مصطلحات الهندسة الدقيقة...",
"context.glossary.title": "المصطلحات التقنية",
"context.glossary.desc": "التنسيق: source=target (واحد في كل سطر). المصطلحات المحملة عبر الإعدادات المسبقة قابلة للتعديل.",
"context.glossary.terms": "مصطلحات في القاموس",
"context.clearAll": "مسح الكل",
"context.saving": "جارٍ الحفظ...",
"context.save": "حفظ",
"context.presets.createGlossary": "إنشاء مسرد",
"context.presets.created": "تم إنشاء المسرد",
"context.presets.createdDesc": "تم إنشاء المسرد \\\"{name}\\\" بـ {count} مصطلحات.",
"context.presets.hint": "انقر على إعداد مسبق لإنشاء مسرد بمصطلحات خاصة بالمجال. أد穹 مصادرك في قسم المسرات.",
"context.glossary.manage": "إدارة المسرات",
"context.saved": "تم الحفظ",
"context.savedDesc": "تم حفظ تعليمات السياق الخاصة بك."
}

View File

@@ -0,0 +1,7 @@
{
"cookieConsent.title": "ملفات تعريف الارتباط على Wordly",
"cookieConsent.description": "نستخدم ملفات تعريف الارتباط الأساسية لعمل التطبيق (الجلسة، الأمان، اللغة). بإذنك، نستخدم أيضًا ملفات تعريف ارتباط اختيارية لقياس حركة المرور وتحسين المنتج.",
"cookieConsent.acceptAll": "قبول الكل",
"cookieConsent.essentialOnly": "الأساسية فقط",
"cookieConsent.learnMore": "معرفة المزيد"
}

View File

@@ -0,0 +1,111 @@
{
"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": "ذكاء اصطناعي · مدرك للسياق (Pro)",
"dashboard.translate.provider.upgrade": "الترقية إلى Pro",
"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 غير صالح أو مفقود. اتصل بالمسؤول لإعداد مفاتيح 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": "متابعة إلى الترجمة"
}

View File

@@ -0,0 +1,31 @@
{
"fileUploader.uploadDocument": "تحميل المستند",
"fileUploader.uploadDesc": "اسحب وأفلت أو انقر لتحديد ملف (Excel, Word, PowerPoint)",
"fileUploader.dropHere": "أفلت ملفك هنا…",
"fileUploader.dragAndDrop": "اسحب وأفلت المستند هنا",
"fileUploader.orClickBrowse": "أو انقر للتصفح",
"fileUploader.preview": "معاينة",
"fileUploader.translationOptions": "خيارات الترجمة",
"fileUploader.configureSettings": "اضبط إعدادات الترجمة",
"fileUploader.targetLanguage": "اللغة المستهدفة",
"fileUploader.selectLanguage": "اختر اللغة",
"fileUploader.translationProvider": "مزود الترجمة",
"fileUploader.selectProvider": "اختر المزود",
"fileUploader.advancedOptions": "خيارات متقدمة",
"fileUploader.translateImages": "ترجمة الصور",
"fileUploader.translating": "جارٍ الترجمة…",
"fileUploader.translateDocument": "ترجمة المستند",
"fileUploader.processing": "جارٍ المعالجة…",
"fileUploader.translationError": "خطأ في الترجمة",
"fileUploader.translationComplete": "اكتملت الترجمة!",
"fileUploader.translationCompleteDesc": "تمت ترجمة مستندك بنجاح مع الحفاظ على جميع التنسيقات.",
"fileUploader.download": "تنزيل المستند المترجم",
"fileUploader.webgpuUnsupported": "WebGPU غير مدعوم في هذا المتصفح. يرجى استخدام Chrome 113+ أو Edge 113+.",
"fileUploader.webllmNotLoaded": "نموذج WebLLM غير محمّل. اذهب إلى الإعدادات > خدمات الترجمة لتحميل نموذج أولاً.",
"fileUploader.extracting": "استخراج النصوص من المستند…",
"fileUploader.noTranslatable": "لم يتم العثور على نص قابل للترجمة في المستند",
"fileUploader.foundTexts": "تم العثور على {count} نصوص للترجمة",
"fileUploader.translatingItem": "ترجمة {current}/{total}: \\\"{preview}\\\"",
"fileUploader.reconstructing": "إعادة بناء المستند…",
"fileUploader.translatingLocally": "ترجمة محلية باستخدام WebLLM…"
}

View File

@@ -0,0 +1,189 @@
{
"glossaries.yourGlossaries": "معاجمك",
"glossaries.title": "المعاجم والسياق",
"glossaries.description": "قم بإدارة معاجمك وتعليمات السياق للحصول على ترجمات أكثر دقة.",
"glossaries.createNew": "إنشاء جديد",
"glossaries.empty": "لا توجد معاجم بعد",
"glossaries.emptyDesc": "أنشئ أول معجم لك أو حمّل إعدادًا مسبقًا احترافيًا أعلاه",
"glossaries.defineTerms": "مصطلحات",
"glossaries.aboutTitle": "حول المعاجم",
"glossaries.aboutDesc": "تتيح لك المعاجم تحديد ترجمات دقيقة لمصطلحات معينة. عند الترجمة، يتم استخدام مصطلحات المعجم لضمان ترجمات متسقة ودقيقة.",
"glossaries.aboutFormat": "كل مصطلح له كلمة مصدر وترجمات بلغات متعددة. حدد معجمًا في صفحة الترجمة لتطبيقه.",
"glossaries.toast.created": "تم إنشاء المعجم",
"glossaries.toast.createdDesc": "تم إنشاء المعجم \\\"{name}\\\".",
"glossaries.toast.imported": "تم استيراد المعجم",
"glossaries.toast.importedDesc": "تم استيراد المعجم \\\"{name}\\\".",
"glossaries.toast.updated": "تم تحديث المعجم",
"glossaries.toast.updatedDesc": "تم تحديث المعجم \\\"{name}\\\".",
"glossaries.toast.deleted": "تم حذف المعجم",
"glossaries.toast.deletedDesc": "تم حذف المعجم.",
"glossaries.toast.error": "خطأ",
"glossaries.toast.errorCreate": "فشل إنشاء المعجم",
"glossaries.toast.errorImport": "فشل استيراد المعجم",
"glossaries.toast.errorUpdate": "فشل تحديث المعجم",
"glossaries.toast.errorDelete": "فشل حذف المعجم",
"glossaries.dialog.title": "معجم جديد",
"glossaries.dialog.description": "أنشئ معجمًا لترجماتك",
"glossaries.dialog.nameLabel": "الاسم",
"glossaries.dialog.namePlaceholder": "معجمي",
"glossaries.dialog.tabTemplates": "القوالب",
"glossaries.dialog.tabFile": "ملف",
"glossaries.dialog.tabManual": "يدوي",
"glossaries.dialog.cancel": "إلغاء",
"glossaries.dialog.creating": "جارٍ الإنشاء…",
"glossaries.dialog.importing": "جارٍ الاستيراد…",
"glossaries.dialog.importBtn": "استيراد",
"glossaries.dialog.selectPrompt": "اختيار",
"glossaries.dialog.createBtn": "إنشاء",
"glossaries.dialog.createEmpty": "إنشاء فارغ",
"glossaries.dialog.terms": "مصطلحات",
"glossaries.dialog.templatesDesc": "اختر قالبًا مُعدًّا مسبقًا",
"glossaries.dialog.templatesEmpty": "لا توجد قوالب متاحة",
"glossaries.dialog.dropTitle": "اسحب ملف CSV هنا",
"glossaries.dialog.dropOr": "أو",
"glossaries.dialog.dropFormats": "CSV, TSV, TXT",
"glossaries.termEditor.addTerm": "إضافة مصطلح",
"glossaries.termEditor.maxReached": "تم بلوغ الحد الأقصى {max} من المصطلحات لكل قاموس.",
"glossaries.dialog.formatTitle": "التنسيق",
"glossaries.dialog.formatDesc": "المصدر،الهدف (واحدة لكل سطر)",
"glossaries.dialog.formatNote": "يُتجاهل السطر الأول عند اكتشاف ترويسة",
"glossaries.dialog.errorFormat": "تنسيق غير مدعوم",
"glossaries.dialog.errorSize": "الملف كبير جدًا",
"glossaries.dialog.errorEmpty": "ملف فارغ",
"glossaries.dialog.errorRead": "خطأ في القراءة",
"glossaries.dialog.parsing": "جارٍ التحليل…",
"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",
"glossaries.loading": "Chargement...",
"glossaries.howItWorks.title": "Comment ces paramètres sont utilisés",
"glossaries.howItWorks.step1Title": "Configurez ici",
"glossaries.howItWorks.step1Desc": "Rédigez vos instructions de contexte ou créez/importez un glossaire de termes.",
"glossaries.howItWorks.step2Title": "Activez dans Traduire",
"glossaries.howItWorks.step2Desc": "Sur la page de traduction, dans la colonne de droite, sélectionnez votre glossaire.",
"glossaries.howItWorks.warning": "Les instructions de contexte s'appliquent automatiquement à toutes vos traductions IA une fois enregistrées. Les glossaires doivent être sélectionnés manuellement sur la page Traduire.",
"glossaries.howItWorks.goToTranslate": "Aller à Traduire",
"glossaries.status.unsaved": "Non enregistré",
"glossaries.status.active": "Actif · s'applique à toutes les traductions IA",
"glossaries.status.inactive": "Inactif",
"glossaries.instructions.whatForBold": "À quoi ça sert ?",
"glossaries.instructions.whatForDesc": "Ces instructions sont envoyées automatiquement à l'IA avant chaque traduction, sans que vous ayez besoin de faire quoi que ce soit sur la page Traduire. Utilisez-les pour guider le style, le registre ou la terminologie générale.",
"glossaries.instructions.example": "Exemple : « Vous traduisez des rapports financiers. Soyez formel, précis et conservez tous les chiffres. »",
"glossaries.instructions.charCount": "{count} caractères",
"glossaries.instructions.emptyHint": "Vide — aucune instruction envoyée à l'IA",
"glossaries.instructions.clearAll": "Tout effacer",
"glossaries.instructions.saving": "Enregistrement…",
"glossaries.instructions.saved": "Enregistré",
"glossaries.presets.whatForBold": "À quoi ça sert ?",
"glossaries.presets.whatForDesc": "Cliquer sur une carte crée un glossaire pré-rempli avec les termes spécialisés du domaine. Ce glossaire apparaîtra dans vos glossaires ci-dessous, et vous pourrez le sélectionner manuellement sur la page Traduire pour forcer des traductions de termes précis.",
"glossaries.presets.clickHint": "Cliquez sur une carte → glossaire créé → sélectionnez-le dans Traduire",
"glossaries.presets.creating": "Création…",
"glossaries.presets.alreadyImported": "Déjà importé",
"glossaries.presets.it.title": "IT / Logiciel",
"glossaries.presets.it.desc": "Développement, infrastructure, DevOps",
"glossaries.presets.legal.title": "Juridique / Contrats",
"glossaries.presets.legal.desc": "Droit des affaires, contentieux",
"glossaries.presets.medical.title": "Médical / Santé",
"glossaries.presets.medical.desc": "Pharmacologie, chirurgie, diagnostic",
"glossaries.presets.finance.title": "Finance / Comptabilité",
"glossaries.presets.finance.desc": "IFRS, bilans, fiscalité",
"glossaries.presets.marketing.title": "Marketing / Publicité",
"glossaries.presets.marketing.desc": "Digital, branding, analytics",
"glossaries.presets.hr.title": "RH / Ressources Humaines",
"glossaries.presets.hr.desc": "Contrats, politiques, recrutement",
"glossaries.presets.scientific.title": "Scientifique / Recherche",
"glossaries.presets.scientific.desc": "Publications, thèses, articles",
"glossaries.presets.ecommerce.title": "E-commerce / Vente",
"glossaries.presets.ecommerce.desc": "Boutiques en ligne, catalogues, CRM",
"glossaries.grid.title": "Vos",
"glossaries.grid.titleHighlight": "glossaires",
"glossaries.grid.countWithAction": "{count} glossaire({plural}) — cliquez sur une carte pour la modifier",
"glossaries.grid.emptyAction": "Créez votre premier glossaire ou importez un preset ci-dessus",
"glossaries.grid.activeTranslation": "Traduction active :",
"glossaries.grid.goToTranslate": "Aller à Traduire pour activer",
"glossaries.badge.compatible": "Compatible",
"glossaries.badge.otherTarget": "Autre cible",
"glossaries.card.editTerms": "Modifier les termes",
"glossaries.card.created": "تم الإنشاء",
"glossaries.card.term": "مصطلح",
"glossaries.card.delete": "Supprimer",
"glossaries.grid.searchPlaceholder": "Search a glossary…",
"glossaries.grid.noResults": "No results for this search.",
"glossaries.detail.backToList": "Back to glossaries",
"glossaries.detail.save": "Save",
"glossaries.detail.savedTitle": "Saved",
"glossaries.detail.savedDesc": "The glossary has been updated.",
"glossaries.detail.settingsTitle": "Settings",
"glossaries.detail.sourceLang": "Source language",
"glossaries.detail.targetLang": "Target language",
"glossaries.detail.termsTitle": "Terms",
"glossaries.detail.terms": "terms",
"glossaries.detail.searchTerms": "Filter…",
"glossaries.detail.noTerms": "No terms yet.",
"glossaries.detail.addFirstTerm": "Add the first term",
"glossaries.detail.addTerm": "Add a term",
"glossaries.detail.maxReached": "Maximum limit reached",
"glossaries.detail.source": "Source",
"glossaries.detail.target": "Target",
"glossaries.detail.sourcePlaceholder": "source term",
"glossaries.detail.targetPlaceholder": "target term",
"glossaries.detail.csvTitle": "CSV",
"glossaries.detail.csvDesc": "Export your terms as CSV or import new ones (replaces the current list).",
"glossaries.detail.export": "Export",
"glossaries.detail.import": "Import",
"glossaries.detail.dangerTitle": "Danger zone",
"glossaries.detail.dangerDesc": "Deletion is permanent. All associated terms will be lost.",
"glossaries.detail.deleteGlossary": "Delete this glossary",
"glossaries.detail.confirmDelete": "Confirm deletion?",
"glossaries.detail.confirm": "Confirm",
"glossaries.detail.cancel": "Cancel",
"glossaries.detail.sourceLangNote": "'The original source is in French. For other languages, we read the term's translations field (if available).'",
"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",
"glossaries.detail.maxTermsDesc": "Maximum {max} terms per glossary.",
"glossaries.detail.importEmptyTitle": "Empty file",
"glossaries.detail.importEmptyDesc": "No terms detected in this file.",
"glossaries.detail.importedTitle": "Imported",
"glossaries.detail.importedDesc": "{count} terms imported.",
"glossaries.detail.importErrorTitle": "Read error",
"glossaries.detail.importErrorDesc": "Unable to read the file."
}

View File

@@ -0,0 +1,56 @@
// Auto-generated by scripts/generate_i18n_index.py
// Merges all namespace JSON files for locale "ar".
import admin from "./admin.json";
import apiKeys from "./apiKeys.json";
import auth from "./auth.json";
import checkout from "./checkout.json";
import common from "./common.json";
import context from "./context.json";
import cookieConsent from "./cookieConsent.json";
import dashboard from "./dashboard.json";
import fileUploader from "./fileUploader.json";
import glossaries from "./glossaries.json";
import landing from "./landing.json";
import langSelector from "./langSelector.json";
import layout from "./layout.json";
import login from "./login.json";
import memento from "./memento.json";
import pricing from "./pricing.json";
import profile from "./profile.json";
import providerSelector from "./providerSelector.json";
import providerTheme from "./providerTheme.json";
import register from "./register.json";
import services from "./services.json";
import settings from "./settings.json";
import translate from "./translate.json";
import translateComplete from "./translateComplete.json";
const messages: Record<string, string> = {
...admin,
...apiKeys,
...auth,
...checkout,
...common,
...context,
...cookieConsent,
...dashboard,
...fileUploader,
...glossaries,
...landing,
...langSelector,
...layout,
...login,
...memento,
...pricing,
...profile,
...providerSelector,
...providerTheme,
...register,
...services,
...settings,
...translate,
...translateComplete,
};
export default messages;

View File

@@ -0,0 +1,146 @@
{
"landing.nav.why": "لماذا نحن؟",
"landing.nav.formats": "التنسيقات",
"landing.nav.pricing": "الأسعار",
"landing.nav.login": "تسجيل الدخول",
"landing.nav.startFree": "ابدأ مجانًا",
"landing.hero.tag": "ذكاء اصطناعي احترافي للمستندات",
"landing.hero.titleLine1": "ترجم مستنداتك.",
"landing.hero.titleLine2": "مع تنسيق مثالي.",
"landing.hero.description": "المترجم الوحيد الذي يحافظ على SmartArt والرسوم البيانية وجداول المحتويات والأشكال والتخطيطات المعقدة — تمامًا كما كانت.",
"landing.hero.ctaMain": "ابدأ مجانًا — مستندان/شهر",
"landing.hero.ctaSec": "عرض العروض",
"landing.hero.deleted": "الملفات تُحذف بعد 60 دقيقة",
"landing.hero.noHidden": "بدون رسوم خفية",
"landing.hero.preview": "معاينة قبل الدفع",
"landing.hero.formattedOk": "التنسيق سليم",
"landing.hero.aiActive": "ترجمة الذكاء الاصطناعي نشطة",
"landing.steps.title": "كيف يعمل؟",
"landing.steps.subtitle": "ثلاث خطوات. صفر فقدان في التنسيق.",
"landing.steps.step1.num": "01",
"landing.steps.step1.title": "ارفع ملفك",
"landing.steps.step1.desc": "اسحب وأفلت مستند Excel أو Word أو PowerPoint أو PDF.",
"landing.steps.step2.num": "02",
"landing.steps.step2.title": "اختر اللغة والمحرك",
"landing.steps.step2.desc": "حدد اللغة المستهدفة والمحرك — كلاسيكي أو ذكاء اصطناعي سياقي.",
"landing.steps.step3.num": "03",
"landing.steps.step3.title": "حمّل النتيجة",
"landing.steps.step3.desc": "احصل على مستندك المترجم بتنسيق مطابق تمامًا للأصل.",
"landing.features.tag": "محرك ترجمة بالذكاء الاصطناعي",
"landing.features.title": "ترجمة تفهم مجالك",
"landing.features.description": "نماذج الذكاء الاصطناعي لدينا تحلل السياق وتحترم مصطلحاتك وحتى تترجم النصوص داخل الصور.",
"landing.features.context.title": "سياق الصناعة",
"landing.features.context.desc": "صِف مجالك واحصل على ترجمات مخصصة، وليس عامة.",
"landing.features.glossary.title": "قواميس المصطلحات",
"landing.features.glossary.desc": "حدد مصطلحاتك التقنية. CTA تبقى «وحدة معالجة الهواء»، وليس «الدعوة للإجراء».",
"landing.features.vision.title": "التعرف على الصور",
"landing.features.vision.desc": "النص المضمن في الصور والمخططات والرسوم البياني يتم اكتشافه وترجمته.",
"landing.features.demo.source": "المصدر (FR)",
"landing.features.demo.google": "Google Translate",
"landing.features.demo.ours": "ذكاؤنا الاصطناعي",
"landing.layout.title": "تنسيقك،",
"landing.layout.title2": "محفوظ بشكل مثالي",
"landing.layout.subtitle": "المترجمون الآخرون يدمرون تخطيطك. نحن لا.",
"landing.layout.p1.title": "SmartArt والمخططات",
"landing.layout.p1.desc": "الهياكل التنظيمية، المخططات الانسيابية، التسلسلات الهرمية — كلها مترجمة بشكل مطابق.",
"landing.layout.p2.title": "جداول المحتويات",
"landing.layout.p2.desc": "إدخالات جدول المحتويات وأرقام الصفحات والمراجع المتبادلة محدثة بشكل صحيح.",
"landing.layout.p3.title": "الرسوم والمخططات البيانية",
"landing.layout.p3.desc": "العناوين، تسميات المحاور، التسميات التوضيحية وأسماء السلاسل — كل شيء مترجم.",
"landing.layout.p4.title": "الأشكال ومربعات النص",
"landing.layout.p4.desc": "مستطيلات، كتل مستديرة، تعليقات توضيحية — محلية في كل مكان.",
"landing.layout.p5.title": "الرؤوس والتذييلات",
"landing.layout.p5.desc": "الرؤوس والتذييلات والحواشي لا تُفوت أبدًا.",
"landing.layout.p6.title": "130+ لغة",
"landing.layout.p6.desc": "Google Translate و DeepL ومحركات ذكاء اصطناعي احترافية.",
"landing.formats.title": "كل تنسيق،",
"landing.formats.title2": "كل عنصر",
"landing.formats.subtitle": "نترجم ما يفوته الآخرون. عملك يستحق توثيقًا لا تشوبه شائبة.",
"landing.formats.word.name": "Word",
"landing.formats.word.i1": "الفقرات والعناوين",
"landing.formats.word.i2": "الجداول والرسوم البيانية",
"landing.formats.word.i3": "مخططات SmartArt",
"landing.formats.word.i4": "جدول المحتويات",
"landing.formats.word.i5": "الرؤوس والتذييلات",
"landing.formats.word.i6": "الأشكال ومربعات النص",
"landing.formats.word.i7": "الحواشي والتعليقات الختامية",
"landing.formats.excel.name": "Excel",
"landing.formats.excel.i1": "قيم الخلايا",
"landing.formats.excel.i2": "أسماء الأوراق",
"landing.formats.excel.i3": "الرسوم والتسميات",
"landing.formats.excel.i4": "الرؤوس والتذييلات",
"landing.formats.excel.i5": "الخلايا المدمجة محفوظة",
"landing.formats.pptx.name": "PowerPoint",
"landing.formats.pptx.i1": "نص الشرائح والملاحظات",
"landing.formats.pptx.i2": "الرسوم والمخططات",
"landing.formats.pptx.i3": "الأشكال ومربعات النص",
"landing.formats.pptx.i4": "التخطيطات الرئيسية",
"landing.formats.pptx.i5": "الرسوم المتحركة محفوظة",
"landing.formats.pdf.name": "PDF",
"landing.formats.pdf.i1": "ملفات PDF النصية",
"landing.formats.pdf.i2": "التخطيط محفوظ",
"landing.formats.pdf.i3": "الصور في مكانها",
"landing.formats.pdf.i4": "الجداول محفوظة",
"landing.formats.pdf.i5": "الإخراج كـ DOCX أو PDF",
"landing.pricing.title": "أسعار بسيطة وشفافة",
"landing.pricing.subtitle": "ما تراه هو ما تدفعه. بدون رسوم خفية.",
"landing.pricing.monthly": "شهريًا",
"landing.pricing.annual": "سنويًا",
"landing.pricing.bestValue": "الأكثر شعبية",
"landing.pricing.month": "/شهر",
"landing.pricing.footer": "السعر المعروض هو السعر الذي تدفعه. بدون رسوم خفية بعد الترجمة.",
"landing.pricing.starter.name": "Starter",
"landing.pricing.starter.desc": "للأفراد والمشاريع الصغيرة",
"landing.pricing.starter.f1": "50 مستند / شهر",
"landing.pricing.starter.f2": "حتى 50 صفحة لكل مستند",
"landing.pricing.starter.f3": "Google Translate + DeepL",
"landing.pricing.starter.f4": "ملفات حتى 10 ميجابايت",
"landing.pricing.starter.cta": "ابدأ الآن",
"landing.pricing.pro.name": "Pro",
"landing.pricing.pro.desc": "للمحترفين المتميزين",
"landing.pricing.pro.f1": "200 مستند / شهر",
"landing.pricing.pro.f2": "حتى 200 صفحة لكل مستند",
"landing.pricing.pro.f3": "ترجمة بالذكاء الاصطناعي",
"landing.pricing.pro.f4": "Google + DeepL مشمولان",
"landing.pricing.pro.f5": "قواميس وأوامر مخصصة",
"landing.pricing.pro.f6": "دعم ذو أولوية",
"landing.pricing.pro.cta": "جرّب Pro",
"landing.pricing.business.name": "الأعمال",
"landing.pricing.business.desc": "للفرق ذات الاحتياجات الكبيرة",
"landing.pricing.business.f1": "1,000 مستند / شهر",
"landing.pricing.business.f2": "حتى 500 صفحة لكل مستند",
"landing.pricing.business.f3": "ذكاء اصطناعي متميز (Claude)",
"landing.pricing.business.f4": "جميع المزودين + واجهة برمجة التطبيقات",
"landing.pricing.business.f5": "خطاطف الويب والأتمتة",
"landing.pricing.business.f6": "5 مقاعد للفريق",
"landing.pricing.business.cta": "تواصل معنا",
"landing.cta.title": "ابدأ الترجمة في 30 ثانية",
"landing.cta.subtitle": "لا حاجة لبطاقة ائتمان. جرّب مجانًا الآن وأعد الحياة إلى مستنداتك متعددة اللغات.",
"landing.cta.button": "إنشاء حساب مجاني",
"landing.cta.secure": "محمي بتشفير AES-256",
"landing.footer.desc": "خبراء في الترجمة الذكية للمستندات. نمزج بين فن التنسيق وعلم الذكاء الاصطناعي السياقي.",
"landing.footer.product": "المنتج",
"landing.footer.resources": "الموارد",
"landing.footer.legal": "قانوني",
"landing.footer.rights": "© 2026 Wordly.art — جميع الحقوق محفوظة.",
"landing.hero.contextEngine": "ترجمة مكتشفة: مصطلح صيانة تقني لأنظمة التدفئة والتهوية...",
"landing.hero.liveAnalysis": "تحليل مباشر",
"landing.hero.termsDetected": "مصطلحات مكتشفة",
"landing.steps.process": "العملية",
"landing.translate.newProject": "مشروع جديد",
"landing.translate.title": "ترجمة مستند",
"landing.translate.subtitle": "استورد ملفًا واختر اللغة المستهدفة",
"landing.translate.sourceDocument": "المستند المصدر",
"landing.translate.configuration": "الإعدادات",
"landing.translate.sourceLang": "لغة المصدر",
"landing.translate.targetLang": "اللغة المستهدفة",
"landing.translate.provider": "المزود",
"landing.translate.startTranslation": "بدء الترجمة",
"landing.translate.zeroRetention": "صفر احتفاظ",
"landing.translate.filesDeleted": "الملفات محذوفة بعد المعالجة",
"landing.translate.dropHere": "اسحب وأفلت هنا",
"landing.translate.supportedFormats": "ملفات DOCX, XLSX, PPTX أو PDF مدعومة",
"landing.translate.aiAnalysis": "تحليل AI نشط",
"landing.translate.processing": "جاري المعالجة",
"landing.translate.preservingLayout": "جاري الحفاظ على التنسيق"
}

View File

@@ -0,0 +1,7 @@
{
"langSelector.search": "بحث…",
"langSelector.noResults": "لا توجد نتائج",
"langSelector.source": "المصدر",
"langSelector.target": "الهدف",
"langSelector.swap": "تبديل"
}

View File

@@ -0,0 +1,5 @@
{
"layout.nav.apiAccess": "وصول API",
"layout.footer.terms": "الشروط",
"layout.footer.privacy": "الخصوصية"
}

View File

@@ -0,0 +1,6 @@
{
"login.orContinueWith": "أو تابع بالبريد الإلكتروني",
"login.google.connecting": "جارٍ الاتصال…",
"login.google.errorGeneric": "حدث خطأ في تسجيل الدخول عبر Google.",
"login.google.errorFailed": "فشل تسجيل الدخول عبر Google. حاول مرة أخرى."
}

View File

@@ -0,0 +1,6 @@
{
"memento.title": "اكتشف Momento",
"memento.slogan": "Momento ليس مجرد تطبيق ملاحظات. إنه نظام بيئي ذكي يربط ويحلل ويطور أفكارك في الوقت الفعلي باستخدام 6 وكلاء ذكاء اصطناعي وبحث دلالي متقدم.",
"memento.ctaFree": "ابدأ مجاناً",
"memento.ctaMore": "اعرف المزيد"
}

View File

@@ -0,0 +1,151 @@
{
"pricing.nav.back": "رجوع",
"pricing.nav.home": "الرئيسية",
"pricing.nav.mySubscription": "اشتراكي",
"pricing.header.badge": "نماذج الذكاء الاصطناعي المحدّثة — مارس 2026",
"pricing.header.title": "خطة لكل احتياج",
"pricing.header.subtitle": "ترجم مستندات Word و Excel و PowerPoint مع الحفاظ على التنسيق الأصلي. بدون الحاجة إلى مفتاح API.",
"pricing.billing.monthly": "شهري",
"pricing.billing.yearly": "سنوي",
"pricing.plans.free.name": "مجاني",
"pricing.plans.starter.name": "Starter",
"pricing.plans.pro.name": "Pro",
"pricing.plans.business.name": "Business",
"pricing.plans.enterprise.name": "Enterprise",
"pricing.plans.free.description": "مثالي لاكتشاف التطبيق",
"pricing.plans.starter.description": "للأفراد والمشاريع الصغيرة",
"pricing.plans.pro.description": "للمحترفين والفرق النامية",
"pricing.plans.business.description": "للفرق والمؤسسات",
"pricing.plans.enterprise.description": "حلول مخصصة للمؤسسات الكبيرة",
"pricing.plans.pro.highlight": "الأكثر شعبية",
"pricing.plans.pro.badge": "رائج",
"pricing.plans.enterprise.badge": "حسب الطلب",
"pricing.plans.free.feat1": "5 مستندات / شهر",
"pricing.plans.free.feat2": "حتى 15 صفحة لكل مستند",
"pricing.plans.free.feat3": "ترجمة Google مشمولة",
"pricing.plans.free.feat4": "جميع اللغات (130+)",
"pricing.plans.free.feat5": "دعم المجتمع",
"pricing.plans.starter.feat1": "50 مستندًا / شهر",
"pricing.plans.starter.feat2": "حتى 50 صفحة لكل مستند",
"pricing.plans.starter.feat3": "ترجمة Google + DeepL",
"pricing.plans.starter.feat4": "ملفات حتى 10 ميغابايت",
"pricing.plans.starter.feat5": "دعم عبر البريد الإلكتروني",
"pricing.plans.starter.feat6": "سجل 30 يومًا",
"pricing.plans.pro.feat1": "200 مستند / شهر",
"pricing.plans.pro.feat2": "حتى 200 صفحة لكل مستند",
"pricing.plans.pro.feat3": "ترجمة الذكاء الاصطناعي الأساسية",
"pricing.plans.pro.feat4": "ترجمة Google + DeepL",
"pricing.plans.pro.feat5": "ملفات حتى 25 ميغابايت",
"pricing.plans.pro.feat6": "معاجم مخصصة",
"pricing.plans.pro.feat7": "دعم ذو أولوية",
"pricing.plans.pro.feat8": "سجل 90 يومًا",
"pricing.plans.business.feat1": "1 000 مستند / شهر",
"pricing.plans.business.feat2": "حتى 500 صفحة لكل مستند",
"pricing.plans.business.feat3": "AI أساسية + متميزة (Claude Haiku)",
"pricing.plans.business.feat4": "جميع مزوّدي الترجمة",
"pricing.plans.business.feat5": "ملفات حتى 50 ميغابايت",
"pricing.plans.business.feat6": "وصول API (10 000 استدعاء/شهر)",
"pricing.plans.business.feat7": "ويب هوك للإشعارات",
"pricing.plans.business.feat8": "دعم مخصص",
"pricing.plans.business.feat9": "سجل سنة واحدة",
"pricing.plans.business.feat10": "تحليلات متقدمة",
"pricing.plans.enterprise.feat1": "مستندات بلا حدود",
"pricing.plans.enterprise.feat2": "جميع نماذج AI (GPT-5, Claude Opus 4.6…)",
"pricing.plans.enterprise.feat3": "نشر محلي أو سحابة مخصصة",
"pricing.plans.enterprise.feat4": "SLA 99.9% مضمون",
"pricing.plans.enterprise.feat5": "دعم مخصص على مدار الساعة",
"pricing.plans.enterprise.feat6": "العلامة البيضاء (White-label)",
"pricing.plans.enterprise.feat7": "فرق بلا حدود",
"pricing.plans.enterprise.feat8": "تكاملات مخصصة",
"pricing.card.onRequest": "حسب الطلب",
"pricing.card.free": "مجاني",
"pricing.card.perMonth": "/شهر",
"pricing.card.billedYearly": "يُحاسب {price} € / سنة",
"pricing.card.documents": "المستندات",
"pricing.card.pagesMax": "الحد الأقصى للصفحات",
"pricing.card.aiTranslation": "ترجمة AI",
"pricing.card.unlimited": "بلا حدود",
"pricing.card.perMonthStat": "/ شهر",
"pricing.card.perDoc": "ص / مستند",
"pricing.card.aiEssential": "أساسي",
"pricing.card.aiEssentialPremium": "أساسي + متميز",
"pricing.card.aiCustom": "مخصص",
"pricing.card.myPlan": "خطتي",
"pricing.card.managePlan": "إدارة خطتي",
"pricing.card.startFree": "ابدأ مجانًا",
"pricing.card.contactUs": "تواصل معنا",
"pricing.card.choosePlan": "اختر هذه الخطة",
"pricing.card.processing": "جارٍ المعالجة…",
"pricing.comparison.title": "مقارنة تفصيلية",
"pricing.comparison.subtitle": "كل ما هو مشمول في كل خطة",
"pricing.comparison.feature": "الميزة",
"pricing.comparison.docsPerMonth": "المستندات / شهر",
"pricing.comparison.pagesMaxPerDoc": "الحد الأقصى للصفحات / مستند",
"pricing.comparison.maxFileSize": "الحد الأقصى لحجم الملف",
"pricing.comparison.googleTranslation": "ترجمة Google",
"pricing.comparison.deepl": "DeepL",
"pricing.comparison.aiEssential": "ترجمة AI أساسية",
"pricing.comparison.aiPremium": "ترجمة AI متميزة",
"pricing.comparison.apiAccess": "وصول API",
"pricing.comparison.priorityProcessing": "معالجة ذات أولوية",
"pricing.comparison.support": "الدعم",
"pricing.comparison.support.community": "المجتمع",
"pricing.comparison.support.email": "البريد الإلكتروني",
"pricing.comparison.support.priority": "ذو أولوية",
"pricing.comparison.support.dedicated": "مخصص",
"pricing.comparison.mb": "ميغابايت",
"pricing.credits.title": "أرصدة إضافية",
"pricing.credits.subtitle": "تحتاج المزيد؟ اشترِ أرصدة فردية بدون اشتراك.",
"pricing.credits.perPage": "رصيد واحد = صفحة واحدة مترجمة.",
"pricing.credits.bestValue": "أفضل قيمة",
"pricing.credits.unit": "أرصدة",
"pricing.credits.centsPerCredit": "سنت / رصيد",
"pricing.credits.buy": "شراء",
"pricing.trust.encryption.title": "تشفير شامل",
"pricing.trust.encryption.sub": "TLS 1.3 + AES-256 في حالة السكون",
"pricing.trust.languages.title": "+130 لغة",
"pricing.trust.languages.sub": "بما فيها العربية والفارسية والعبرية (RTL)",
"pricing.trust.parallel.title": "معالجة متوازية",
"pricing.trust.parallel.sub": "ذكاء اصطناعي متعدد المسارات فائق السرعة",
"pricing.trust.availability.title": "متاح على مدار الساعة",
"pricing.trust.availability.sub": "ضمان وقت تشغيل 99.9%",
"pricing.aiModels.title": "نماذج الذكاء الاصطناعي — مارس 2026",
"pricing.aiModels.essential.title": "ترجمة AI أساسية",
"pricing.aiModels.essential.plan": "خطة Pro",
"pricing.aiModels.essential.descPrefix": "مبني على",
"pricing.aiModels.essential.descSuffix": "— أنموذج الذكاء الاصطناعي الأكثر فعالية من حيث التكلفة لعام 2026. جودة مماثلة للنماذج المتقدمة بتكلفة أقل بكثير.",
"pricing.aiModels.essential.modelName": "نموذج الذكاء الاصطناعي الأساسي",
"pricing.aiModels.essential.context": "163K رمز سياقي",
"pricing.aiModels.essential.value": "قيمة ممتازة مقابل المال",
"pricing.aiModels.premium.title": "ترجمة AI متميزة",
"pricing.aiModels.premium.plan": "خطة Business",
"pricing.aiModels.premium.descPrefix": "مبني على",
"pricing.aiModels.premium.descSuffix": "من Anthropic — دقة عالية في المستندات القانونية والطبية والتقنية المعقدة.",
"pricing.aiModels.premium.context": "200K رمز سياقي",
"pricing.aiModels.premium.precision": "أعلى دقة",
"pricing.faq.title": "الأسئلة الشائعة",
"pricing.faq.q1": "هل يمكنني تغيير خطتي في أي وقت؟",
"pricing.faq.a1": "نعم. الترقية فورية ومُحاسب عليها بالتناسب. التخفيض يسري في نهاية الفترة الحالية.",
"pricing.faq.q2": "ما هي «ترجمة AI الأساسية»؟",
"pricing.faq.a2": "إنه محرك الذكاء الاصطناعي الخاص بنا. يفهم سياق مستنداتك، ويحافظ على التخطيط، ويتعامل مع المصطلحات التقنية بشكل أفضل بكثير من الترجمة الكلاسيكية.",
"pricing.faq.q3": "ما الفرق بين AI الأساسية وAI المتميزة؟",
"pricing.faq.a3": "الذكاء الاصطناعي الأساسي يستخدم نموذجًا محسّنًا (قيمة ممتازة مقابل المال). الذكاء الاصطناعي المتميز يستخدم Claude 3.5 Haiku من Anthropic، أكثر دقة في المستندات القانونية والطبية والتقنية المعقدة.",
"pricing.faq.q4": "هل تُحفظ مستنداتي بعد الترجمة؟",
"pricing.faq.a4": "الملفات المترجمة متاحة حسب خطتك (30 يومًا لـ Starter، 90 يومًا لـ Pro، سنة واحدة لـ Business). وهي مشفرة أثناء التخزين والنقل.",
"pricing.faq.q5": "ماذا يحدث إذا تجاوزت حصتي الشهرية؟",
"pricing.faq.a5": "يمكنك شراء أرصدة إضافية بشكل فردي أو ترقية خطتك. يتم إشعارك عند بلوغ 80% من الاستخدام.",
"pricing.faq.q6": "هل توجد فترة تجريبية مجانية للخطط المدفوعة؟",
"pricing.faq.a6": "الخطة المجانية دائمة ولا تتطلب بطاقة ائتمان. للخطط Pro و Business تواصل معنا للحصول على تجربة 14 يومًا.",
"pricing.faq.q7": "ما تنسيقات الملفات المدعومة؟",
"pricing.faq.a7": "Word (.docx), Excel (.xlsx/.xls), PowerPoint (.pptx), and soon PDF. All plans support the same formats.",
"pricing.cta.title": "مستعد للبدء؟",
"pricing.cta.subtitle": "ابدأ مجانًا بدون بطاقة ائتمان. رقِّق عندما تحتاج.",
"pricing.cta.createAccount": "إنشاء حساب مجاني",
"pricing.cta.login": "تسجيل الدخول",
"pricing.toast.demo": "الوضع التجريبي — Stripe لم يُعدّ بعد. في بيئة الإنتاج سيتم توجيهك إلى الدفع لتفعيل خطة {planId}.",
"pricing.toast.networkError": "خطأ في الشبكة. يرجى إعادة المحاولة.",
"pricing.toast.paymentError": "خطأ أثناء إنشاء الدفع.",
"pricing.dashboard": "لوحة التحكم",
"pricing.okSymbol": "✓",
"pricing.errSymbol": "✕"
}

View File

@@ -0,0 +1,58 @@
{
"profile.header.title": "ملفي الشخصي",
"profile.header.subtitle": "إدارة حسابك وتفضيلاتك.",
"profile.tabs.account": "الحساب",
"profile.tabs.subscription": "الاشتراك",
"profile.tabs.preferences": "التفضيلات",
"profile.account.user": "المستخدم",
"profile.account.memberSince": "عضو منذ",
"profile.plan.label": "الخطة",
"profile.plan.free": "Free",
"profile.plan.starter": "Starter",
"profile.plan.pro": "Pro",
"profile.plan.business": "Business",
"profile.plan.enterprise": "Enterprise",
"profile.plan.pricePerMonth": "{price} €/شهر",
"profile.subscription.canceling": "جارٍ الإلغاء",
"profile.subscription.active": "نشط",
"profile.subscription.unknown": "غير معروف",
"profile.subscription.accessUntil": "الوصول حتى",
"profile.subscription.renewalOn": "التجديد في",
"profile.subscription.upgradePlan": "الترقية إلى خطة مدفوعة",
"profile.subscription.changePlan": "تغيير الخطة",
"profile.subscription.manageBilling": "إدارة الفوترة",
"profile.subscription.billingUnavailable": "بوابة الفوترة غير متاحة.",
"profile.subscription.billingError": "خطأ في الوصول إلى بوابة الفوترة.",
"profile.subscription.cancelSuccess": "تم إلغاء الاشتراك. تحتفظ بالوصول حتى نهاية الفترة.",
"profile.subscription.cancelError": "حدث خطأ أثناء الإلغاء.",
"profile.subscription.networkError": "خطأ في الشبكة.",
"profile.usage.title": "الاستخدام هذا الشهر",
"profile.usage.resetOn": "إعادة التعيين في",
"profile.usage.documents": "المستندات",
"profile.usage.pages": "الصفحات",
"profile.usage.extraCredits": "رصيد إضافي",
"profile.usage.extraCreditsPlural": "أرصدة إضافية",
"profile.usage.quotaReached": "تم بلوغ الحصة",
"profile.usage.quotaReachedDesc": "قم بالترقية إلى خطة أعلى للمتابعة.",
"profile.usage.unlockMore": "احصل على المزيد من الترجمات مع خطة مدفوعة.",
"profile.usage.viewPlans": "عرض الخطط",
"profile.usage.includedInPlan": "مضمن في خطتك",
"profile.danger.title": "منطقة الخطر",
"profile.danger.description": "يتم تطبيق الإلغاء في نهاية الفترة الحالية. تحتفظ بالوصول حتى ذلك التاريخ.",
"profile.danger.confirm": "هل أنت متأكد؟ لا يمكن التراجع عن هذا الإجراء.",
"profile.danger.confirmCancel": "تأكيد الإلغاء",
"profile.danger.cancelSubscription": "إلغاء اشتراكي",
"profile.danger.keep": "لا، إبقاء",
"profile.prefs.interfaceLang": "لغة الواجهة",
"profile.prefs.interfaceLangDesc": "يتم اكتشاف اللغة تلقائيًا بناءً على متصفحك. يمكنك تغييرها يدويًا.",
"profile.prefs.defaultTargetLang": "اللغة الهدف الافتراضية",
"profile.prefs.selectLanguage": "اختر لغة",
"profile.prefs.defaultTargetLangDesc": "سيتم تحديد هذه اللغة مسبقًا لترجماتك.",
"profile.prefs.save": "حفظ",
"profile.prefs.theme": "المظهر",
"profile.prefs.themeDesc": "اختر مظهر الواجهة",
"profile.prefs.cache": "ذاكرة التخزين المؤقت",
"profile.prefs.cacheDesc": "مسح ذاكرة التخزين المؤقت المحلية قد يحل بعض مشاكل العرض.",
"profile.prefs.clearing": "جارٍ المسح...",
"profile.prefs.clearCache": "مسح ذاكرة التخزين المؤقت"
}

View File

@@ -0,0 +1,7 @@
{
"providerSelector.noClassic": "لا يوجد مترجم قياسي متاح.",
"providerSelector.noLlm": "لم يتم تكوين نموذج ذكاء اصطناعي.",
"providerSelector.costOne": "التكلفة: رصيد واحد لكل صفحة",
"providerSelector.costFive": "التكلفة: 5 أرصدة لكل صفحة (عامل مميز)",
"providerSelector.unlockContextual": "افتح الترجمة السياقية المتميزة لمستنداتك بالكامل."
}

View File

@@ -0,0 +1,29 @@
{
"providerTheme.deepseek.badge": "أساسي",
"providerTheme.deepseek.subBadge": "تقني واقتصادي",
"providerTheme.deepseek.desc": "ترجمة فائقة الدقة واقتصادية، مثالية للمستندات التقنية والبرمجة.",
"providerTheme.openai.badge": "مميز",
"providerTheme.openai.subBadge": "دقة عالية",
"providerTheme.openai.desc": "معيار الذكاء الاصطناعي العالمي. أقصى اتساق نصي واحترام صارم للأسلوب.",
"providerTheme.minimax.badge": "متقدم",
"providerTheme.minimax.subBadge": "الأداء",
"providerTheme.minimax.desc": "سرعة تنفيذ مذهلة وفهم ممتاز للهياكل المعقدة.",
"providerTheme.openrouter.badge": "سريع",
"providerTheme.openrouter.subBadge": "متعدد النماذج",
"providerTheme.openrouter.desc": "وصول موحد إلى أفضل النماذج مفتوحة المصدر المحسّنة للترجمة.",
"providerTheme.openrouter_premium.badge": "فائق",
"providerTheme.openrouter_premium.subBadge": "السياق الأقصى",
"providerTheme.openrouter_premium.desc": "مدعوم من أحدث النماذج (GPT-4o، Claude Sonnet 4.6) للمستندات الطويلة.",
"providerTheme.zai.badge": "متخصص",
"providerTheme.zai.subBadge": "المال والقانون",
"providerTheme.zai.desc": "نموذج مضبوط بدقة للمصطلحات التجارية المتطلبة (قانونية، مالية).",
"providerTheme.default.badge": "حديث",
"providerTheme.default.subBadge": "تفكير الذكاء الاصطناعي",
"providerTheme.default.desc": "ترجمة بنموذج لغوي كبير (LLM) مع تحليل دلالي متقدم.",
"providerTheme.classic.google.label": "ترجمة Google",
"providerTheme.classic.google.desc": "ترجمة فائقة السرعة تغطي أكثر من 130 لغة. موصى بها للتدفقات العامة.",
"providerTheme.classic.deepl.label": "DeepL Pro",
"providerTheme.classic.deepl.desc": "ترجمة عالية الدقة مشهور بسيولتها وصياغاتها الطبيعية.",
"providerTheme.classic.google_cloud.label": "Google Cloud API",
"providerTheme.classic.google_cloud.desc": "محرك سحابي احترافي محسّن لمعالجة كميات كبيرة من المستندات."
}

View File

@@ -0,0 +1,29 @@
{
"register.title": "إنشاء حساب",
"register.subtitle": "ابدأ الترجمة مجانًا",
"register.error.failed": "فشل التسجيل",
"register.name.label": "الاسم",
"register.name.placeholder": "اسمك",
"register.name.error": "يجب أن يحتوي الاسم على حرفين على الأقل",
"register.email.label": "البريد الإلكتروني",
"register.email.placeholder": "you@example.com",
"register.email.error": "عنوان بريد إلكتروني غير صالح",
"register.password.label": "كلمة المرور",
"register.password.error": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل، مع حرف كبير وحرف صغير ورقم",
"register.password.show": "إظهار كلمة المرور",
"register.password.hide": "إخفاء كلمة المرور",
"register.password.strengthLabel": "القوة:",
"register.password.strength.weak": "ضعيفة",
"register.password.strength.medium": "متوسطة",
"register.password.strength.strong": "قوية",
"register.confirmPassword.label": "تأكيد كلمة المرور",
"register.confirmPassword.error": "كلمتا المرور غير متطابقتين",
"register.confirmPassword.show": "إظهار",
"register.confirmPassword.hide": "إخفاء",
"register.submit.creating": "جارٍ إنشاء الحساب...",
"register.submit.create": "إنشاء حسابي",
"register.hasAccount": "لديك حساب بالفعل؟",
"register.login": "تسجيل الدخول",
"register.terms.prefix": "بإنشاء حساب، فإنك تقبل",
"register.terms.link": "شروط الخدمة الخاصة بنا"
}

View File

@@ -0,0 +1,14 @@
{
"services.title": "مزودو الترجمة",
"services.subtitle": "تم تكوين المزودين من قبل المسؤول. يمكنك معرفة أيهم متاح حاليًا لحسابك.",
"services.loading": "جارٍ تحميل المزودين...",
"services.noProviders": "لا يوجد مزودون مكوّنون حاليًا. اتصل بالمسؤول.",
"services.classic": "ترجمة كلاسيكية",
"services.llmPro": "LLM · مدرك للسياق (Pro)",
"services.available": "متاح",
"services.model": "النموذج",
"services.adminOnly.title": "تكوين المزودين للمسؤولين فقط",
"services.adminOnly.desc": "يتم إدارة مفاتيح API واختيار النماذج وتفعيل المزودين حصريًا من قبل المسؤول في لوحة الإدارة. لا تحتاج أبدًا إلى إدخال مفتاح API.",
"services.fallback.google.label": "ترجمة Google",
"services.fallback.google.desc": "ترجمة سريعة، أكثر من 130 لغة"
}

View File

@@ -0,0 +1,20 @@
{
"settings.title": "الإعدادات",
"settings.subtitle": "إعدادات التطبيق العامة",
"settings.formats.title": "التنسيقات المدعومة",
"settings.formats.subtitle": "أنواع المستندات التي يمكنك ترجمتها",
"settings.formats.formulas": "الصيغ",
"settings.formats.styles": "الأنماط",
"settings.formats.images": "الصور",
"settings.formats.headers": "الرؤوس",
"settings.formats.tables": "الجداول",
"settings.formats.slides": "الشرائح",
"settings.formats.notes": "الملاحظات",
"settings.cache.title": "ذاكرة التخزين المؤقت",
"settings.cache.desc": "مسح ذاكرة التخزين المؤقت المحلية قد يحل بعض مشاكل العرض.",
"settings.cache.clearing": "جارٍ المسح...",
"settings.cache.clear": "مسح ذاكرة التخزين المؤقت",
"settings.formats.excel.name": "Excel",
"settings.formats.word.name": "Word",
"settings.formats.powerpoint.name": "PowerPoint"
}

View File

@@ -0,0 +1,92 @@
{
"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",
"translate.glossary.title": "المسرد",
"translate.glossary.select": "اختر مسرداً",
"translate.glossary.none": "بدون",
"translate.glossary.terms": "مصطلحات",
"translate.glossary.proOnly": "قم بالترقية إلى Pro لاستخدام المصطلحات",
"translate.glossary.myGlossaries": "مصطلحاتي",
"translate.glossary.fromTemplate": "إنشاء من قالب",
"translate.glossary.noGlossaryForPair": "لا مصطلحات لـ",
"translate.glossary.noGlossaries": "لا مصطلحات",
"translate.glossary.loading": "جاري التحميل...",
"translate.glossary.classicMode": "محرك محايد بدون مسرد (AI فقط)",
"translate.glossary.selectPlaceholder": "اختر مسرداً...",
"translate.glossary.multilingual": "متعدد اللغات",
"translate.glossary.noGlossaryAvailable": "لا يوجد مسرد متاح",
"translate.glossary.filterByLang": "تصفية حسب اللغة",
"translate.glossary.active": "نشط",
"translate.glossary.inactive": "غير نشط",
"translate.glossary.availableTemplates": "القوالب المتاحة",
"translate.glossary.importing": "جاري الاستيراد...",
"translate.glossary.imported": "(مستورد)",
"translate.glossary.noGlossaryForSource": "لا يوجد مسرد أو قالب للغة المصدر",
"translate.glossary.createGlossary": "إنشاء مسرد",
"translate.glossary.showAll": "عرض جميع المسارد",
"translate.glossary.activePreview": "معاينة التطابقات النشطة:",
"translate.glossary.total": "الإجمالي",
"translate.glossary.moreTerms": "مصطلحات إضافية",
"translate.glossary.noTerms": "لا توجد مصطلحات في هذا المسرد.",
"translate.glossary.sourceTerm": "مصطلح المصدر",
"translate.glossary.translation": "الترجمة",
"translate.glossary.addTerm": "إضافة مصطلح",
"translate.glossary.disabledMode": "محرك محايد بدون مسرد مطبق",
"translate.glossary.addTermError": "خطأ في إضافة المصطلح",
"translate.glossary.networkError": "خطأ في الشبكة",
"translate.glossary.importFailed": "فشل الاستيراد ({status})",
"translate.glossary.helpText": "يسرد المسرد ترجمة دقيقة للمصطلحات. اختر مسرداً تطابق لغته المصدر اللغة الأصلية لمستندك.",
"translate.glossary.sourceWarning": "تحذير: هذا المسرد يستخدم لغة المصدر",
"translate.glossary.sourceWarningBut": "ولكن مستندك مهيأ بـ",
"translate.glossary.targetWarning": "عدم توافق الهدف: هذا المسرد مصمم للترجمة إلى",
"translate.glossary.targetWarningBut": "ولكن مستندك يستهدف",
"translate.glossary.targetWarningEnd": "قد لا تكون المصطلحات ذات صلة.",
"translate.header.processing": "جارٍ المعالجة",
"translate.header.aiActive": "تحليل الذكاء الاصطناعي نشط",
"translate.header.aiActiveDesc": "يتم الحفاظ على تخطيطك بواسطة محركنا السياقي.",
"translate.header.completed": "مكتمل",
"translate.header.completedTitle": "اكتملت الترجمة",
"translate.header.proSpace": "مساحة Pro",
"translate.header.translateDoc": "ترجمة مستند",
"translate.header.translateDocDesc": "حافظ على التخطيط الأصلي من خلال محرك الترجمة فائق الدقة.",
"translate.upload.nativeFormat": "التنسيق الأصلي",
"translate.fileType.word": "Word (.docx)",
"translate.fileType.excel": "Excel (.xlsx)",
"translate.fileType.slides": "شرائح (.pptx)",
"translate.fileType.pdf": "PDF (.pdf)",
"translate.startTranslation": "بدء الترجمة",
"translate.submit": "جارٍ الإرسال…",
"translate.chooseTargetLang": "يرجى اختيار لغة مستهدفة",
"translate.pleaseLoadFile": "يرجى تحميل ملف أولاً",
"translate.contextEngineActive": "المحرك السياقي نشط",
"translate.phase1": "المرحلة 1: التهيئة",
"translate.phase2": "المرحلة 2: إعادة البناء السياقي",
"translate.stat.segments": "مقاطع",
"translate.stat.precision": "الدقة",
"translate.stat.speedLabel": "السرعة",
"translate.stat.turbo": "تيربو",
"translate.stat.time": "الوقت",
"translate.complete.masterQuality": "✓ جودة رئيسية",
"translate.download": "تنزيل",
"translate.newTranslation": "+ ترجمة جديدة",
"translate.failedTitle": "خطأ في الترجمة",
"translate.retry": "إعادة المحاولة",
"translate.uploadAnother": "تحميل ملف آخر",
"translate.monitor": "مراقب الذكاء الاصطناعي",
"translate.summary": "ملخص",
"translate.cancelProcess": "⟳ إلغاء العملية",
"translate.layoutIntegrity": "سلامة التخطيط",
"translate.secureHundred": "100% آمن",
"translate.okHundred": "100% OK",
"translate.preserveLayout": "الحفاظ على التخطيط",
"translate.preserveLayoutDesc": "الحفاظ على التخطيط",
"translate.textOnly": "نص فقط",
"translate.textOnlyDesc": "ترجمة سريعة للنص فقط",
"translate.unavailableStandard": "غير متاح في الوضع القياسي (AI فقط)"
}

View File

@@ -0,0 +1,6 @@
{
"translateComplete.highQuality": "جودة عالية",
"translateComplete.segments": "المقاطع",
"translateComplete.characters": "الأحرف",
"translateComplete.confidence": "الثقة"
}