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).
152 lines
11 KiB
JSON
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": "✕"
|
|
}
|