- Implemented OCR functionality using pytesseract for image and PDF text extraction. - Added Background Removal service using rembg for image processing. - Developed PDF Editor service for applying text annotations to PDF files. - Created corresponding API routes for OCR, Background Removal, and PDF Editor. - Added frontend components for OCR and Background Removal tools. - Integrated feature flagging for new tools, ensuring they are disabled by default. - Implemented comprehensive unit tests for OCR service, PDF editor, and background removal. - Updated documentation to reflect new features and usage instructions. - Added translations for new features in English, Arabic, and French.
450 lines
19 KiB
JSON
450 lines
19 KiB
JSON
{
|
|
"common": {
|
|
"appName": "SaaS-PDF",
|
|
"tagline": "Free Online File Tools",
|
|
"upload": "Upload File",
|
|
"download": "Download",
|
|
"processing": "Processing...",
|
|
"dragDrop": "Drag & drop your file here, or click to browse",
|
|
"maxSize": "Maximum file size: {{size}}MB",
|
|
"tryOtherTools": "Try Other Tools",
|
|
"error": "Error",
|
|
"success": "Success",
|
|
"loading": "Loading...",
|
|
"startOver": "Start Over",
|
|
"home": "Home",
|
|
"about": "About",
|
|
"privacy": "Privacy Policy",
|
|
"terms": "Terms of Service",
|
|
"language": "Language",
|
|
"allTools": "All Tools",
|
|
"account": "Account",
|
|
"signIn": "Sign In",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"darkMode": "Dark Mode",
|
|
"lightMode": "Light Mode"
|
|
},
|
|
"auth": {
|
|
"forgotPassword": {
|
|
"title": "Forgot Password",
|
|
"subtitle": "Enter your email and we'll send you a reset link.",
|
|
"submit": "Send Reset Link",
|
|
"sent": "If that email is registered, a reset link has been sent. Check your inbox.",
|
|
"error": "Something went wrong. Please try again.",
|
|
"link": "Forgot your password?"
|
|
},
|
|
"resetPassword": {
|
|
"title": "Reset Password",
|
|
"newPassword": "New Password",
|
|
"submit": "Reset Password",
|
|
"success": "Password updated successfully! Redirecting to sign in...",
|
|
"error": "Failed to reset password. The link may have expired.",
|
|
"tooShort": "Password must be at least 8 characters.",
|
|
"noToken": "Invalid reset link. Please request a new one."
|
|
}
|
|
},
|
|
"home": {
|
|
"hero": "Everything You Need to Work with PDF Files — Instantly",
|
|
"heroSub": "Upload or drag & drop your file, and we'll auto-detect its type and suggest the right tools — edit, convert, compress, and more. No registration required.",
|
|
"popularTools": "Popular Tools",
|
|
"pdfTools": "PDF Tools",
|
|
"imageTools": "Image Tools",
|
|
"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: 50 MB.",
|
|
"uploadSubtitle": "We generate a quick preview and instantly show matching tools.",
|
|
"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",
|
|
"fileDetected": "We detected a {{type}} file",
|
|
"unsupportedFile": "This file type is not supported. Try PDF, Word, images, or video.",
|
|
"fileTypes": {
|
|
"image": "Image",
|
|
"video": "Video",
|
|
"unknown": "Unknown"
|
|
},
|
|
"featuresTitle": "A smarter way to convert and edit online",
|
|
"feature1Title": "One complete workspace",
|
|
"feature1Desc": "Edit, convert, compress, merge, split without switching tabs.",
|
|
"feature2Title": "Accuracy you can trust",
|
|
"feature2Desc": "Get pixel-perfect, editable files in seconds with zero quality loss.",
|
|
"feature3Title": "Built-in security",
|
|
"feature3Desc": "Access files securely, protected by automatic encryption."
|
|
},
|
|
"tools": {
|
|
"pdfToWord": {
|
|
"title": "PDF to Word",
|
|
"description": "Convert PDF files to editable Word documents online for free.",
|
|
"shortDesc": "PDF → Word"
|
|
},
|
|
"wordToPdf": {
|
|
"title": "Word to PDF",
|
|
"description": "Convert Word documents (DOC, DOCX) to PDF format online for free.",
|
|
"shortDesc": "Word → PDF"
|
|
},
|
|
"compressPdf": {
|
|
"title": "Compress PDF",
|
|
"description": "Reduce PDF file size while maintaining quality. Choose your compression level.",
|
|
"shortDesc": "Compress PDF",
|
|
"qualityLow": "Maximum Compression",
|
|
"qualityMedium": "Balanced",
|
|
"qualityHigh": "High Quality"
|
|
},
|
|
"imageConvert": {
|
|
"title": "Image Converter",
|
|
"description": "Convert images between JPG, PNG, and WebP formats instantly.",
|
|
"shortDesc": "Convert Images"
|
|
},
|
|
"imageResize": {
|
|
"title": "Image Resize",
|
|
"description": "Resize images to exact dimensions while maintaining quality.",
|
|
"shortDesc": "Resize Image",
|
|
"dimensions": "Target Dimensions",
|
|
"width": "Width (px)",
|
|
"height": "Height (px)",
|
|
"quality": "Quality",
|
|
"lockAspect": "Lock aspect ratio",
|
|
"aspectHint": "Enter one dimension — the other will auto-calculate to preserve aspect ratio."
|
|
},
|
|
"ocr": {
|
|
"title": "OCR — Text Recognition",
|
|
"description": "Extract text from images and scanned PDF documents using optical character recognition.",
|
|
"shortDesc": "Extract Text",
|
|
"sourceType": "Source Type",
|
|
"modeImage": "Image",
|
|
"modePdf": "PDF",
|
|
"language": "OCR Language",
|
|
"extract": "Extract Text",
|
|
"charsExtracted": "{{count}} characters extracted",
|
|
"copyText": "Copy Text"
|
|
},
|
|
"removeBg": {
|
|
"title": "Remove Background",
|
|
"description": "Remove the background from images automatically using AI. Get a transparent PNG in seconds.",
|
|
"shortDesc": "Remove BG",
|
|
"remove": "Remove Background",
|
|
"success": "Background removed successfully!"
|
|
},
|
|
"videoToGif": {
|
|
"title": "Video to GIF",
|
|
"description": "Create animated GIFs from video clips. Customize start time, duration, and quality.",
|
|
"shortDesc": "Video → GIF",
|
|
"startTime": "Start Time (seconds)",
|
|
"duration": "Duration (seconds)",
|
|
"fps": "Frames Per Second",
|
|
"width": "Width (pixels)"
|
|
},
|
|
"wordCounter": {
|
|
"title": "Word Counter",
|
|
"description": "Count words, characters, sentences, and paragraphs in your text instantly.",
|
|
"shortDesc": "Count Words",
|
|
"words": "Words",
|
|
"characters": "Characters",
|
|
"sentences": "Sentences",
|
|
"paragraphs": "Paragraphs",
|
|
"placeholder": "Type or paste your text here..."
|
|
},
|
|
"textCleaner": {
|
|
"title": "Text Cleaner",
|
|
"description": "Remove extra spaces, convert text case, and clean up your text instantly.",
|
|
"shortDesc": "Clean Text",
|
|
"removeSpaces": "Remove Extra Spaces",
|
|
"toUpperCase": "UPPER CASE",
|
|
"toLowerCase": "lower case",
|
|
"toTitleCase": "Title Case",
|
|
"toSentenceCase": "Sentence case",
|
|
"removeDiacritics": "Remove Arabic Diacritics",
|
|
"copyResult": "Copy Result"
|
|
},
|
|
"mergePdf": {
|
|
"title": "Merge PDF",
|
|
"description": "Combine multiple PDF files into a single document. Free and fast.",
|
|
"shortDesc": "Merge PDFs",
|
|
"selectFiles": "Select PDF Files",
|
|
"addMore": "Add More Files",
|
|
"filesSelected": "{{count}} files selected",
|
|
"dragToReorder": "Drag files to reorder them"
|
|
},
|
|
"splitPdf": {
|
|
"title": "Split PDF",
|
|
"description": "Split a PDF into individual pages or extract specific page ranges.",
|
|
"shortDesc": "Split PDF",
|
|
"allPages": "All Pages",
|
|
"allPagesDesc": "Extract every page as a separate PDF file",
|
|
"selectPages": "Select Pages",
|
|
"selectPagesDesc": "Extract only specific pages or ranges",
|
|
"pageRange": "Page Range",
|
|
"rangeHint": "e.g. 1,3,5-8",
|
|
"rangePlaceholder": "Enter pages: 1,3,5-8",
|
|
"errors": {
|
|
"requiredPages": "Please enter page numbers or ranges (e.g. 1,3,5-8).",
|
|
"outOfRange": "Selected pages ({{selected}}) are out of range. This PDF has only {{total}} page(s).",
|
|
"invalidFormat": "Invalid page format: {{tokens}}. Use a format like 1,3,5-8.",
|
|
"noPagesSelected": "No pages selected. This PDF has {{total}} page(s)."
|
|
}
|
|
},
|
|
"rotatePdf": {
|
|
"title": "Rotate PDF",
|
|
"description": "Rotate all pages of a PDF by 90°, 180°, or 270° degrees.",
|
|
"shortDesc": "Rotate PDF",
|
|
"angle": "Rotation Angle",
|
|
"90": "90° Clockwise",
|
|
"180": "180° Flip",
|
|
"270": "270° Counter-clockwise"
|
|
},
|
|
"pdfToImages": {
|
|
"title": "PDF to Images",
|
|
"description": "Convert each page of a PDF into high-quality images (PNG or JPG).",
|
|
"shortDesc": "PDF → Images",
|
|
"format": "Image Format",
|
|
"dpi": "Resolution (DPI)",
|
|
"dpiLow": "72 — Screen",
|
|
"dpiMedium": "150 — Standard",
|
|
"dpiHigh": "200 — Good",
|
|
"dpiUltra": "300 — Print Quality"
|
|
},
|
|
"imagesToPdf": {
|
|
"title": "Images to PDF",
|
|
"description": "Combine multiple images into a single PDF document.",
|
|
"shortDesc": "Images → PDF",
|
|
"selectImages": "Select Images",
|
|
"addMore": "Add More Images",
|
|
"imagesSelected": "{{count}} images selected"
|
|
},
|
|
"watermarkPdf": {
|
|
"title": "Watermark PDF",
|
|
"description": "Add a custom text watermark to every page of your PDF.",
|
|
"shortDesc": "Add Watermark",
|
|
"text": "Watermark Text",
|
|
"textPlaceholder": "Enter watermark text",
|
|
"opacity": "Opacity",
|
|
"light": "Light",
|
|
"heavy": "Heavy"
|
|
},
|
|
"protectPdf": {
|
|
"title": "Protect PDF",
|
|
"description": "Add password protection to your PDF to prevent unauthorized access.",
|
|
"shortDesc": "Protect PDF",
|
|
"password": "Password",
|
|
"passwordPlaceholder": "Enter a strong password",
|
|
"confirmPassword": "Confirm Password",
|
|
"confirmPlaceholder": "Re-enter the password",
|
|
"mismatch": "Passwords do not match"
|
|
},
|
|
"unlockPdf": {
|
|
"title": "Unlock PDF",
|
|
"description": "Remove password protection from your PDF file.",
|
|
"shortDesc": "Unlock PDF",
|
|
"password": "Current Password",
|
|
"passwordPlaceholder": "Enter the PDF password"
|
|
},
|
|
"pageNumbers": {
|
|
"title": "Add Page Numbers",
|
|
"description": "Add page numbers to every page of your PDF. Choose position and starting number.",
|
|
"shortDesc": "Add Page Numbers",
|
|
"position": "Number Position",
|
|
"startNumber": "Start From",
|
|
"bottomCenter": "Bottom Center",
|
|
"bottomRight": "Bottom Right",
|
|
"bottomLeft": "Bottom Left",
|
|
"topCenter": "Top Center",
|
|
"topRight": "Top Right",
|
|
"topLeft": "Top Left"
|
|
},
|
|
"pdfEditor": {
|
|
"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": "Upload your PDF file.",
|
|
"step2": "Click optimize to create a fresh processed copy.",
|
|
"step3": "Download or share the generated file link."
|
|
},
|
|
"save": "Optimize & Save Copy",
|
|
"saveTooltip": "Create an optimized copy of the file",
|
|
"downloadFile": "Download File",
|
|
"downloadTooltip": "Download the final PDF",
|
|
"undo": "Undo",
|
|
"redo": "Redo",
|
|
"addPage": "Add Page",
|
|
"deletePage": "Delete Page",
|
|
"rotate": "Rotate",
|
|
"extractPage": "Extract as New File",
|
|
"thumbnails": "View Pages",
|
|
"share": "Share",
|
|
"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.",
|
|
"applyingChanges": "Applying changes…",
|
|
"applyingChangesSub": "Don't close the window — a new file will be created when done.",
|
|
"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 (20MB). Please reduce the file size and try again."
|
|
},
|
|
"pdfFlowchart": {
|
|
"title": "PDF to Flowchart",
|
|
"description": "Extract procedures from PDF documents and convert them into interactive flowcharts automatically.",
|
|
"shortDesc": "PDF → Flowchart",
|
|
"uploadStep": "Upload PDF",
|
|
"uploadDesc": "Upload your PDF document to extract procedures",
|
|
"dragDropHint": "or drag and drop your PDF file here",
|
|
"trySampleTitle": "No PDF handy?",
|
|
"trySampleDesc": "Try our sample document to see the tool in action",
|
|
"trySample": "Try Sample",
|
|
"extracting": "Analyzing document...",
|
|
"extractingDesc": "We are scanning your PDF and identifying procedures",
|
|
"proceduresFound": "{{count}} procedures found",
|
|
"noProcedures": "No procedures were detected in this document. Try a different PDF.",
|
|
"selectProcedures": "Select Procedures",
|
|
"selectProceduresDesc": "Choose which procedures to convert into flowcharts",
|
|
"selectAll": "Select All",
|
|
"deselectAll": "Deselect All",
|
|
"addManual": "Add Manually",
|
|
"pages": "Pages",
|
|
"generateFlows": "Generate Flowcharts",
|
|
"generating": "Generating flowcharts...",
|
|
"generatingDesc": "Creating visual flowcharts from selected procedures",
|
|
"generatingFor": "Generating flowcharts for {{count}} procedures...",
|
|
"flowReady": "Flowcharts Ready!",
|
|
"flowReadyDesc": "Your flowcharts have been generated successfully",
|
|
"flowReadyCount": "{{count}} flowchart(s) generated successfully",
|
|
"steps": "{{count}} steps",
|
|
"viewFlow": "View Flowchart",
|
|
"viewResults": "View Results",
|
|
"exportPng": "Export as PNG",
|
|
"exportSvg": "Export as SVG",
|
|
"exportPdf": "Export as PDF",
|
|
"startNode": "Start",
|
|
"endNode": "End",
|
|
"processNode": "Process",
|
|
"decisionNode": "Decision",
|
|
"backToList": "Back to List",
|
|
"back": "Back",
|
|
"reject": "Reject",
|
|
"restore": "Restore",
|
|
"viewSection": "View Document Section",
|
|
"rejectedTitle": "Rejected Procedures",
|
|
"rejectedCount": "{{count}} rejected",
|
|
"estimatedTime": "~{{time}} min",
|
|
"complexity": {
|
|
"simple": "Simple",
|
|
"medium": "Medium",
|
|
"complex": "Complex"
|
|
},
|
|
"wizard": {
|
|
"upload": "Upload",
|
|
"select": "Select",
|
|
"create": "Create",
|
|
"results": "Results"
|
|
},
|
|
"manualTitle": "Add Manual Procedure",
|
|
"manualDesc": "Specify a page range and create a custom procedure",
|
|
"procTitleLabel": "Procedure Title",
|
|
"procTitlePlaceholder": "Enter procedure title...",
|
|
"procDescriptionLabel": "Description",
|
|
"procDescriptionPlaceholder": "Describe the procedure...",
|
|
"selectPageRange": "Select Page Range",
|
|
"startPage": "Start Page",
|
|
"endPage": "End Page",
|
|
"invalidRange": "Invalid page range",
|
|
"pagesSelected": "{{count}} page(s) selected",
|
|
"createProcedure": "Create Procedure",
|
|
"pagePreview": "Page Preview",
|
|
"selectPagesToPreview": "Select pages to preview content",
|
|
"pageLabel": "Page {{num}}",
|
|
"noPageContent": "No content available for this page",
|
|
"documentViewer": "Document Viewer",
|
|
"backToProcedures": "Back to Procedures",
|
|
"totalPagesLabel": "Total Pages",
|
|
"documentContent": "Document Content",
|
|
"pagesWord": "pages",
|
|
"aiAnalysis": "AI Analysis",
|
|
"keyActions": "Key Actions",
|
|
"stepsIdentified": "{{count}} steps identified",
|
|
"decisionPoints": "Decision Points",
|
|
"flowComplexity": "Flow Complexity",
|
|
"flowStepsEstimate": "~{{count}} flow steps estimated",
|
|
"totalSteps": "Total Steps",
|
|
"processSteps": "Process Steps",
|
|
"aiAssistant": "AI Assistant",
|
|
"chatWelcome": "Hi! I can help you improve the flowchart \"{{title}}\". Ask me anything about the flow structure, suggest improvements, or request simplifications.",
|
|
"chatPlaceholder": "Ask about this flowchart...",
|
|
"chatTyping": "AI is thinking...",
|
|
"chatError": "Something went wrong. Please try again.",
|
|
"chatSuggestion1": "How can I simplify this flow?",
|
|
"chatSuggestion2": "Are there missing steps?",
|
|
"chatSuggestion3": "Suggest better titles",
|
|
"chatSuggestion4": "Add error handling",
|
|
"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!",
|
|
"originalSize": "Original Size",
|
|
"newSize": "New Size",
|
|
"reduction": "Reduction",
|
|
"downloadReady": "Your file is ready for download.",
|
|
"linkExpiry": "Download link expires in 30 minutes."
|
|
}
|
|
}
|