ميزة: تحديث صفحات الخصوصية والشروط مع تاريخ آخر تحديث ثابت وفترة احتفاظ ديناميكية بالملفات

ميزة: إضافة خدمة تحليلات لتكامل Google Analytics

اختبار: تحديث اختبارات خدمة واجهة برمجة التطبيقات (API) لتعكس تغييرات نقاط النهاية

إصلاح: تعديل خدمة واجهة برمجة التطبيقات (API) لدعم تحميل ملفات متعددة ومصادقة المستخدم

ميزة: تطبيق مخزن مصادقة باستخدام Zustand لإدارة المستخدمين

إصلاح: تحسين إعدادات Nginx لتعزيز الأمان ودعم التحليلات
This commit is contained in:
Your Name
2026-03-07 11:14:05 +02:00
parent cfbcc8bd79
commit 0ad2ba0f02
73 changed files with 4696 additions and 462 deletions

View File

@@ -18,6 +18,10 @@
"terms": "شروط الاستخدام",
"language": "اللغة",
"allTools": "كل الأدوات",
"account": "الحساب",
"signIn": "تسجيل الدخول",
"email": "البريد الإلكتروني",
"password": "كلمة المرور",
"darkMode": "الوضع الداكن",
"lightMode": "الوضع الفاتح"
},
@@ -30,10 +34,10 @@
"videoTools": "أدوات الفيديو",
"textTools": "أدوات النصوص",
"uploadCta": "اسحب ملفك هنا أو اضغط لاختياره",
"uploadOr": "ندعم: PDF, Word, JPG, PNG, WebP, MP4 — الحد الأقصى للحجم: 200 ميجابايت.",
"uploadOr": "ندعم: PDF, Word, JPG, PNG, WebP, MP4 — الحد الأقصى للحجم: 50 ميجابايت.",
"uploadSubtitle": "نستخرج معاينة سريعة ونعرض الأدوات المناسبة فوراً.",
"editNow": "عدّل ملفك الآن",
"editNowTooltip": "افتح محرّر الملفات — حرّر النصوص، أضف تعليقات، وغيّر الصفحات",
"editNow": "حسّن ملف PDF الآن",
"editNowTooltip": "افتح أداة تحسين PDF السريعة لإنشاء نسخة نظيفة قابلة للتنزيل",
"suggestedTools": "الأدوات المقترحة لملفك",
"suggestedToolsDesc": "بعد رفع الملف سنعرض الأدوات المتوافقة تلقائيًا: تحرير نص، تمييز، دمج/تقسيم، ضغط، تحويل إلى Word/صورة، تحويل فيديو إلى GIF، والمزيد.",
"selectTool": "اختر أداة",
@@ -203,17 +207,17 @@
"topLeft": "أعلى اليسار"
},
"pdfEditor": {
"title": "محرّر PDF متقدّم",
"description": "حرِّر نصوص PDF، أضف تعليقات، أعد ترتيب الصفحات وسجّل نسخة نهائية. سريع وبسيط ومباشر في المتصفح.",
"shortDesc": عديل PDF",
"intro": "مرحبا! هنا يمكنك تعديل ملف PDF مباشرةً في المتصفح: إضافة نص، تعليق، تمييز، رسم حر، حذف/إضافة صفحات، وتصدير نسخة جديدة دون المساس بالأصل.",
"title": "تحسين PDF السريع",
"description": "أنشئ نسخة محسّنة ونظيفة من ملف PDF بضغطة واحدة مع الحفاظ على الملف الأصلي بدون تغيير.",
"shortDesc": حسين PDF",
"intro": "ارفع ملف PDF وأنشئ نسخة محسّنة جاهزة للمشاركة والتنزيل.",
"steps": {
"step1": "أضف عناصر (نص، تمييز، رسم، ملاحظة) باستخدام شريط الأدوات أعلى الصفحة.",
"step2": "اضغط حفظ لحفظ نسخة جديدة من الملف (سيُنشأ إصدار جديد ولا يُستبدل الملف الأصلي).",
"step3": "اضغط تنزيل لتحميل النسخة النهائية أو اختر مشاركة لنسخ رابط التحميل."
"step1": "ارفع ملف PDF.",
"step2": "اضغط تحسين لإنشاء نسخة معالجة جديدة.",
"step3": "نزّل الملف الناتج أو شارك رابط التحميل."
},
"save": "حفظ التعديلات",
"saveTooltip": "حفظ نسخة جديدة من الملف",
"save": "تحسين وحفظ نسخة",
"saveTooltip": "إنشاء نسخة محسّنة من الملف",
"downloadFile": "تحميل الملف",
"downloadTooltip": "تنزيل PDF النهائي",
"undo": "تراجع",
@@ -224,7 +228,7 @@
"extractPage": "استخراج كملف جديد",
"thumbnails": "عرض الصفحات",
"share": "مشاركة",
"versionNote": "نحفظ نسخة جديدة في كل مرة تحفظ فيها التعديلات — لا نغيّر الملف الأصلي. يمكنك الرجوع إلى الإصدارات السابقة من صفحة الملف. يتم حذف الملفات المؤقتة تلقائيًا بعد 30 دقيقة إن لم تكمل العملية.",
"versionNote": "هذه الأداة تركّز حاليًا على تحسين ملف PDF وإخراج نسخة نظيفة. لا يتم تعديل الملف الأصلي أبدًا.",
"privacyNote": "ملفاتك محمية — نقوم بفحص الملفات أمنياً قبل المعالجة، ونستخدم اتصالاً مشفّراً (HTTPS). راجع سياسة الخصوصية للحصول على المزيد من التفاصيل.",
"preparingPreview": "جاري تجهيز المعاينة…",
"preparingPreviewSub": "قد يستغرق الأمر بضع ثوانٍ حسب حجم الملف.",
@@ -233,7 +237,7 @@
"savedSuccess": "تم حفظ التعديلات بنجاح — يمكنك الآن تنزيل الملف.",
"processingFailed": "فشل في معالجة الملف. جرّب إعادة التحميل أو حاول لاحقًا.",
"retry": "إعادة المحاولة",
"fileTooLarge": "حجم الملف أكبر من المسموح (200MB). قلِّل حجم الملف وحاول مرة أخرى."
"fileTooLarge": "حجم الملف أكبر من المسموح (20MB). قلِّل حجم الملف وحاول مرة أخرى."
},
"pdfFlowchart": {
"title": "PDF إلى مخطط انسيابي",
@@ -332,6 +336,58 @@
"sendMessage": "إرسال"
}
},
"account": {
"metaTitle": "الحساب",
"heroTitle": "احتفظ بنشاط ملفاتك داخل مساحة عمل آمنة واحدة",
"heroSubtitle": "أنشئ حسابًا مجانيًا للاحتفاظ بآخر التنزيلات، والعودة إلى المهام المكتملة، وبناء سجل فعلي لعمليات ملفاتك.",
"benefitsTitle": "لماذا تنشئ حسابًا",
"benefit1": "احتفظ بالملفات الناتجة الأخيرة في سجل واحد بدل فقدان الروابط بعد كل جلسة.",
"benefit2": "اعرف أي أداة أنتجت كل ملف حتى تصبح العمليات المتكررة أسرع وأقل عرضة للأخطاء.",
"benefit3": "جهّز مساحة عملك لحدود الاشتراك المستقبلية، والمعالجة المجمعة، والإعدادات المحفوظة.",
"loadFailed": "تعذر تحميل بيانات الحساب. حاول مرة أخرى.",
"passwordMismatch": "كلمتا المرور غير متطابقتين.",
"signInTitle": "سجّل الدخول إلى مساحة عملك",
"registerTitle": "أنشئ مساحة العمل المجانية",
"formSubtitle": "استخدم نفس الحساب عبر الجلسات حتى يبقى سجل الملفات الناتجة متاحًا لك.",
"createAccount": "إنشاء حساب",
"emailPlaceholder": "name@example.com",
"passwordPlaceholder": "أدخل كلمة مرور قوية",
"confirmPassword": "تأكيد كلمة المرور",
"confirmPasswordPlaceholder": "أعد إدخال كلمة المرور",
"submitLogin": "تسجيل الدخول",
"submitRegister": "إنشاء حساب مجاني",
"freePlanBadge": "الخطة المجانية",
"proPlanBadge": "خطة برو",
"signedInAs": "تم تسجيل الدخول باسم",
"currentPlan": "الخطة الحالية",
"logoutCta": "تسجيل الخروج",
"upgradeNotice": "تواصل معنا للترقية إلى خطة برو للحصول على حدود أعلى وإلغاء الإعلانات ووصول B2B API.",
"plans": {
"free": "مجاني",
"pro": "برو"
},
"webQuotaTitle": "مهام الويب هذا الشهر",
"apiQuotaTitle": "مهام API هذا الشهر",
"quotaPeriod": "الفترة",
"apiKeysTitle": "مفاتيح API",
"apiKeysSubtitle": "أدر مفاتيح B2B API. كل مفتاح يمنحك وصولاً متزامناً بمستوى برو لجميع الأدوات.",
"apiKeyNamePlaceholder": "اسم المفتاح (مثال: إنتاج)",
"apiKeyCreate": "إنشاء مفتاح",
"apiKeyCopyWarning": "انسخ هذا المفتاح الآن — لن يظهر مرة أخرى.",
"apiKeysEmpty": "لا توجد مفاتيح بعد. أنشئ مفتاحًا أعلاه.",
"apiKeyRevoked": "ملغي",
"apiKeyRevoke": "إلغاء المفتاح",
"historyTitle": "سجل الملفات الأخير",
"historySubtitle": "ستظهر هنا تلقائيًا كل المهام الناجحة أو الفاشلة المرتبطة بحسابك.",
"historyLoading": "جارٍ تحميل النشاط الأخير...",
"historyEmpty": "لا يوجد سجل ملفات بعد. عالج أي ملف أثناء تسجيل الدخول وسيظهر هنا.",
"downloadResult": "تحميل النتيجة",
"createdAt": "تاريخ الإنشاء",
"originalFile": "الملف الأصلي",
"outputFile": "الملف الناتج",
"statusCompleted": "مكتمل",
"statusFailed": "فشل"
},
"result": {
"conversionComplete": "اكتمل التحويل!",
"compressionComplete": "اكتمل الضغط!",

View File

@@ -18,6 +18,10 @@
"terms": "Terms of Service",
"language": "Language",
"allTools": "All Tools",
"account": "Account",
"signIn": "Sign In",
"email": "Email",
"password": "Password",
"darkMode": "Dark Mode",
"lightMode": "Light Mode"
},
@@ -30,10 +34,10 @@
"videoTools": "Video Tools",
"textTools": "Text Tools",
"uploadCta": "Drag your file here or click to browse",
"uploadOr": "Supported: PDF, Word, JPG, PNG, WebP, MP4 — Max size: 200 MB.",
"uploadOr": "Supported: PDF, Word, JPG, PNG, WebP, MP4 — Max size: 50 MB.",
"uploadSubtitle": "We generate a quick preview and instantly show matching tools.",
"editNow": "Edit Your File Now",
"editNowTooltip": "Open the file editor — edit text, add comments, and modify pages",
"editNow": "Optimize PDF Now",
"editNowTooltip": "Open quick PDF optimization for a cleaner downloadable copy",
"suggestedTools": "Suggested Tools for Your File",
"suggestedToolsDesc": "After uploading, we automatically show compatible tools: text editing, highlighting, merge/split, compress, convert to Word/image, video to GIF, and more.",
"selectTool": "Choose a Tool",
@@ -203,17 +207,17 @@
"topLeft": "Top Left"
},
"pdfEditor": {
"title": "Advanced PDF Editor",
"description": "Edit PDF text, add comments, reorder pages, and save a final copy. Fast, simple, and right in your browser.",
"shortDesc": "Edit PDF",
"intro": "Here you can edit your PDF directly in the browser: add text, comments, highlights, freehand drawing, delete/add pages, and export a new copy without altering the original.",
"title": "Quick PDF Optimizer",
"description": "Create a cleaner, optimized copy of your PDF with one click while keeping the original untouched.",
"shortDesc": "Optimize PDF",
"intro": "Upload your PDF and generate an optimized copy ready for sharing and download.",
"steps": {
"step1": "Add elements (text, highlight, drawing, note) using the toolbar at the top.",
"step2": "Click Save to save a new copy (a new version is created — the original file is not replaced).",
"step3": "Click Download to get the final copy, or choose Share to copy the download link."
"step1": "Upload your PDF file.",
"step2": "Click optimize to create a fresh processed copy.",
"step3": "Download or share the generated file link."
},
"save": "Save Changes",
"saveTooltip": "Save a new copy of the file",
"save": "Optimize & Save Copy",
"saveTooltip": "Create an optimized copy of the file",
"downloadFile": "Download File",
"downloadTooltip": "Download the final PDF",
"undo": "Undo",
@@ -224,7 +228,7 @@
"extractPage": "Extract as New File",
"thumbnails": "View Pages",
"share": "Share",
"versionNote": "We save a new copy each time you save changes — the original file is never modified. You can revert to previous versions from the file page. Temporary files are automatically deleted after 30 minutes if the process is not completed.",
"versionNote": "This tool currently focuses on PDF optimization and clean output generation. The original file is never modified.",
"privacyNote": "Your files are protected — we perform security checks before processing and use encrypted connections (HTTPS). See our Privacy Policy for more details.",
"preparingPreview": "Preparing preview…",
"preparingPreviewSub": "This may take a few seconds depending on file size.",
@@ -233,7 +237,7 @@
"savedSuccess": "Changes saved successfully — you can now download the file.",
"processingFailed": "Failed to process the file. Try re-uploading or try again later.",
"retry": "Retry",
"fileTooLarge": "File size exceeds the limit (200MB). Please reduce the file size and try again."
"fileTooLarge": "File size exceeds the limit (20MB). Please reduce the file size and try again."
},
"pdfFlowchart": {
"title": "PDF to Flowchart",
@@ -332,6 +336,58 @@
"sendMessage": "Send"
}
},
"account": {
"metaTitle": "Account",
"heroTitle": "Save your file activity in one secure workspace",
"heroSubtitle": "Create a free account to keep recent downloads, return to finished tasks, and build a usable history for your document workflow.",
"benefitsTitle": "Why create an account",
"benefit1": "Keep recent generated files in one timeline instead of losing links after each session.",
"benefit2": "See which tool produced each result so repeated work is faster and less error-prone.",
"benefit3": "Prepare your workspace for future premium limits, batch tools, and saved settings.",
"loadFailed": "We couldn't load your account data. Please try again.",
"passwordMismatch": "Passwords do not match.",
"signInTitle": "Sign in to your workspace",
"registerTitle": "Create your free workspace",
"formSubtitle": "Use the same account across sessions to keep your generated file history available.",
"createAccount": "Create Account",
"emailPlaceholder": "name@example.com",
"passwordPlaceholder": "Enter a strong password",
"confirmPassword": "Confirm Password",
"confirmPasswordPlaceholder": "Re-enter your password",
"submitLogin": "Sign In",
"submitRegister": "Create Free Account",
"freePlanBadge": "Free Plan",
"proPlanBadge": "Pro Plan",
"signedInAs": "Signed in as",
"currentPlan": "Current plan",
"logoutCta": "Sign Out",
"upgradeNotice": "Contact us to upgrade to Pro for higher limits, no ads, and B2B API access.",
"plans": {
"free": "Free",
"pro": "Pro"
},
"webQuotaTitle": "Web Tasks This Month",
"apiQuotaTitle": "API Tasks This Month",
"quotaPeriod": "Period",
"apiKeysTitle": "API Keys",
"apiKeysSubtitle": "Manage your B2B API keys. Each key gives Pro-level async access to all tools.",
"apiKeyNamePlaceholder": "Key name (e.g. Production)",
"apiKeyCreate": "Create Key",
"apiKeyCopyWarning": "Copy this key now — it will never be shown again.",
"apiKeysEmpty": "No API keys yet. Create one above.",
"apiKeyRevoked": "Revoked",
"apiKeyRevoke": "Revoke key",
"historyTitle": "Recent file history",
"historySubtitle": "Completed and failed tasks tied to your account appear here automatically.",
"historyLoading": "Loading recent activity...",
"historyEmpty": "No file history yet. Process a file while signed in and it will appear here.",
"downloadResult": "Download Result",
"createdAt": "Created",
"originalFile": "Original file",
"outputFile": "Output file",
"statusCompleted": "Completed",
"statusFailed": "Failed"
},
"result": {
"conversionComplete": "Conversion Complete!",
"compressionComplete": "Compression Complete!",

View File

@@ -18,6 +18,10 @@
"terms": "Conditions d'utilisation",
"language": "Langue",
"allTools": "Tous les outils",
"account": "Compte",
"signIn": "Se connecter",
"email": "E-mail",
"password": "Mot de passe",
"darkMode": "Mode sombre",
"lightMode": "Mode clair"
},
@@ -30,10 +34,10 @@
"videoTools": "Outils vidéo",
"textTools": "Outils de texte",
"uploadCta": "Glissez votre fichier ici ou cliquez pour parcourir",
"uploadOr": "Formats supportés : PDF, Word, JPG, PNG, WebP, MP4 — Taille max : 200 Mo.",
"uploadOr": "Formats supportés : PDF, Word, JPG, PNG, WebP, MP4 — Taille max : 50 Mo.",
"uploadSubtitle": "Nous générons un aperçu rapide et affichons les outils adaptés instantanément.",
"editNow": "Modifier votre fichier maintenant",
"editNowTooltip": "Ouvrir l'éditeur de fichiers — modifier le texte, ajouter des commentaires et modifier les pages",
"editNow": "Optimiser le PDF maintenant",
"editNowTooltip": "Ouvrir l'optimiseur PDF rapide pour générer une copie propre téléchargeable",
"suggestedTools": "Outils suggérés pour votre fichier",
"suggestedToolsDesc": "Après le téléchargement, nous affichons automatiquement les outils compatibles : édition de texte, surlignage, fusion/division, compression, conversion en Word/image, vidéo en GIF, et plus.",
"selectTool": "Choisir un outil",
@@ -203,17 +207,17 @@
"topLeft": "Haut gauche"
},
"pdfEditor": {
"title": "Éditeur PDF avancé",
"description": "Modifiez le texte PDF, ajoutez des commentaires, réorganisez les pages et enregistrez une copie finale. Rapide, simple et directement dans votre navigateur.",
"shortDesc": "Modifier PDF",
"intro": "Ici vous pouvez modifier votre PDF directement dans le navigateur : ajouter du texte, des commentaires, du surlignage, du dessin libre, supprimer/ajouter des pages, et exporter une nouvelle copie sans altérer l'original.",
"title": "Optimiseur PDF rapide",
"description": "Créez une copie PDF plus propre et optimisée en un clic, sans modifier le fichier original.",
"shortDesc": "Optimiser PDF",
"intro": "Téléchargez votre PDF et générez une copie optimisée prête à partager et à télécharger.",
"steps": {
"step1": "Ajoutez des éléments (texte, surlignage, dessin, note) à l'aide de la barre d'outils en haut.",
"step2": "Cliquez sur Enregistrer pour sauvegarder une nouvelle copie (une nouvelle version est créée — le fichier original n'est pas remplacé).",
"step3": "Cliquez sur Télécharger pour obtenir la copie finale, ou choisissez Partager pour copier le lien de téléchargement."
"step1": "Téléchargez votre fichier PDF.",
"step2": "Cliquez sur optimiser pour créer une nouvelle copie traitée.",
"step3": "Téléchargez le fichier généré ou partagez son lien."
},
"save": "Enregistrer les modifications",
"saveTooltip": "Enregistrer une nouvelle copie du fichier",
"save": "Optimiser et enregistrer",
"saveTooltip": "Créer une copie optimisée du fichier",
"downloadFile": "Télécharger le fichier",
"downloadTooltip": "Télécharger le PDF final",
"undo": "Annuler",
@@ -224,7 +228,7 @@
"extractPage": "Extraire comme nouveau fichier",
"thumbnails": "Voir les pages",
"share": "Partager",
"versionNote": "Nous sauvegardons une nouvelle copie à chaque enregistrement — le fichier original n'est jamais modifié. Vous pouvez revenir aux versions précédentes depuis la page du fichier. Les fichiers temporaires sont automatiquement supprimés après 30 minutes si le processus n'est pas terminé.",
"versionNote": "Cet outil se concentre actuellement sur l'optimisation PDF et la génération d'une copie propre. Le fichier original n'est jamais modifié.",
"privacyNote": "Vos fichiers sont protégés — nous effectuons des vérifications de sécurité avant le traitement et utilisons des connexions chiffrées (HTTPS). Consultez notre politique de confidentialité pour plus de détails.",
"preparingPreview": "Préparation de l'aperçu…",
"preparingPreviewSub": "Cela peut prendre quelques secondes selon la taille du fichier.",
@@ -233,7 +237,7 @@
"savedSuccess": "Modifications enregistrées avec succès — vous pouvez maintenant télécharger le fichier.",
"processingFailed": "Échec du traitement du fichier. Essayez de le re-télécharger ou réessayez plus tard.",
"retry": "Réessayer",
"fileTooLarge": "La taille du fichier dépasse la limite (200 Mo). Veuillez réduire la taille du fichier et réessayer."
"fileTooLarge": "La taille du fichier dépasse la limite (20 Mo). Veuillez réduire la taille du fichier et réessayer."
},
"pdfFlowchart": {
"title": "PDF vers Organigramme",
@@ -332,6 +336,58 @@
"sendMessage": "Envoyer"
}
},
"account": {
"metaTitle": "Compte",
"heroTitle": "Conservez l'activité de vos fichiers dans un espace sécurisé",
"heroSubtitle": "Créez un compte gratuit pour retrouver vos téléchargements récents, revenir sur les tâches terminées et garder un historique utile de votre flux documentaire.",
"benefitsTitle": "Pourquoi créer un compte",
"benefit1": "Conservez les fichiers générés récents dans une seule chronologie au lieu de perdre les liens à chaque session.",
"benefit2": "Identifiez l'outil qui a produit chaque résultat pour accélérer les tâches répétitives et réduire les erreurs.",
"benefit3": "Préparez votre espace pour les futures limites premium, les traitements par lots et les préférences enregistrées.",
"loadFailed": "Impossible de charger les données du compte. Veuillez réessayer.",
"passwordMismatch": "Les mots de passe ne correspondent pas.",
"signInTitle": "Connectez-vous à votre espace",
"registerTitle": "Créez votre espace gratuit",
"formSubtitle": "Utilisez le même compte entre les sessions pour conserver l'historique de vos fichiers générés.",
"createAccount": "Créer un compte",
"emailPlaceholder": "nom@example.com",
"passwordPlaceholder": "Entrez un mot de passe fort",
"confirmPassword": "Confirmer le mot de passe",
"confirmPasswordPlaceholder": "Saisissez à nouveau votre mot de passe",
"submitLogin": "Se connecter",
"submitRegister": "Créer un compte gratuit",
"freePlanBadge": "Forfait gratuit",
"proPlanBadge": "Forfait Pro",
"signedInAs": "Connecté en tant que",
"currentPlan": "Forfait actuel",
"logoutCta": "Se déconnecter",
"upgradeNotice": "Contactez-nous pour passer au forfait Pro : limites plus élevées, sans publicité et accès API B2B.",
"plans": {
"free": "Gratuit",
"pro": "Pro"
},
"webQuotaTitle": "Tâches web ce mois-ci",
"apiQuotaTitle": "Tâches API ce mois-ci",
"quotaPeriod": "Période",
"apiKeysTitle": "Clés API",
"apiKeysSubtitle": "Gérez vos clés API B2B. Chaque clé donne un accès asynchrone Pro à tous les outils.",
"apiKeyNamePlaceholder": "Nom de la clé (ex. Production)",
"apiKeyCreate": "Créer une clé",
"apiKeyCopyWarning": "Copiez cette clé maintenant — elle ne sera plus affichée.",
"apiKeysEmpty": "Aucune clé API pour l'instant. Créez-en une ci-dessus.",
"apiKeyRevoked": "Révoquée",
"apiKeyRevoke": "Révoquer la clé",
"historyTitle": "Historique récent des fichiers",
"historySubtitle": "Les tâches réussies et échouées liées à votre compte apparaissent ici automatiquement.",
"historyLoading": "Chargement de l'activité récente...",
"historyEmpty": "Aucun historique pour l'instant. Traitez un fichier en étant connecté et il apparaîtra ici.",
"downloadResult": "Télécharger le résultat",
"createdAt": "Créé le",
"originalFile": "Fichier source",
"outputFile": "Fichier de sortie",
"statusCompleted": "Terminé",
"statusFailed": "Échec"
},
"result": {
"conversionComplete": "Conversion terminée !",
"compressionComplete": "Compression terminée !",