Files
office_translator/frontend/src/lib/i18n/messages/ar/pricing.json
sepehr fa637abff0
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m49s
perf+security: fix build, secure downloads, dedupe translations, refactor i18n
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).
2026-06-14 16:44:18 +02:00

152 lines
11 KiB
JSON

{
"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": "✕"
}