/** * English translations — the default / reference locale. * * Adding a new language is as simple as creating a new file (e.g. de.ts, fr.ts) * that satisfies the same shape as `TranslationKeys`. */ export const en = { common: { upload: "Upload from computer", process: "Process", download: "Download", cancel: "Cancel", save: "Save", delete: "Delete", settings: "Settings", search: "Search tools...", dropFiles: "Drop files here or click the upload button", loading: "Loading...", error: "An error occurred", confirm: "Confirm", close: "Close", back: "Back", next: "Next", clear: "Clear", copy: "Copy", copied: "Copied!", noResults: "No results found", }, tools: { resize: { name: "Resize", description: "Resize by pixels, percentage, or social media presets", }, crop: { name: "Crop", description: "Freeform crop, aspect ratio presets, shape crop" }, rotate: { name: "Rotate & Flip", description: "Rotate, flip, and straighten images" }, convert: { name: "Convert", description: "Convert between image formats" }, compress: { name: "Compress", description: "Reduce file size by quality or target size" }, "optimize-for-web": { name: "Optimize for Web", description: "Optimize images for web with format conversion, quality control, and live preview", }, "strip-metadata": { name: "Remove Metadata", description: "Remove EXIF, GPS, and camera info" }, "edit-metadata": { name: "Edit Metadata", description: "Edit EXIF, IPTC, XMP, GPS, keywords, and dates", }, "bulk-rename": { name: "Bulk Rename", description: "Rename multiple files with patterns" }, "image-to-pdf": { name: "Image to PDF", description: "Combine images into a PDF document" }, "pdf-to-image": { name: "PDF to Image", description: "Convert PDF pages to images" }, favicon: { name: "Favicon Generator", description: "Generate all favicon and app icon sizes" }, "adjust-colors": { name: "Adjust Colors", description: "Brightness, contrast, exposure, saturation, temperature, sharpness, and effects", }, sharpening: { name: "Sharpening", description: "Adaptive, unsharp mask, and high-pass sharpening with presets", }, "replace-color": { name: "Replace & Invert Color", description: "Replace specific colors or invert", }, "remove-background": { name: "Remove Background", description: "AI-powered background removal", }, upscale: { name: "Image Upscaling", description: "AI super-resolution enhancement" }, "erase-object": { name: "Object Eraser", description: "Remove unwanted objects with AI" }, ocr: { name: "OCR / Text Extraction", description: "Extract text from images with AI-powered accuracy", }, "blur-faces": { name: "Face / PII Blur", description: "Auto-detect and blur faces and sensitive info", }, "enhance-faces": { name: "Face Enhancement", description: "Restore and enhance faces with AI", }, "smart-crop": { name: "Smart Crop", description: "Smart subject, face, or trim-based cropping", }, "image-enhancement": { name: "Image Enhancement", description: "One-click auto-improve with smart exposure, contrast, color, and sharpness correction", }, "noise-removal": { name: "Noise Removal", description: "AI-powered noise and grain removal", }, "red-eye-removal": { name: "Red Eye Removal", description: "AI-powered red eye detection and correction for flash photos", }, "restore-photo": { name: "Photo Restoration", description: "Fix scratches, tears, and damage on old photos with AI", }, "content-aware-resize": { name: "Content-Aware Resize", description: "Intelligently resize images while preserving important content", }, colorize: { name: "AI Colorization", description: "Convert black & white photos to full color using AI deep learning models", }, "passport-photo": { name: "Passport Photo", description: "Create government-compliant passport, visa, and ID photos with auto face detection", }, "watermark-text": { name: "Text Watermark", description: "Add text watermark overlay" }, "watermark-image": { name: "Image Watermark", description: "Overlay a logo as watermark" }, "text-overlay": { name: "Text Overlay", description: "Add styled text to images" }, compose: { name: "Image Composition", description: "Layer images with position and opacity" }, info: { name: "Image Info", description: "View all metadata and image properties" }, compare: { name: "Image Compare", description: "Side-by-side comparison of two images" }, "find-duplicates": { name: "Find Duplicates", description: "Detect duplicate and near-duplicate images", }, "color-palette": { name: "Color Palette", description: "Extract dominant colors from image" }, "qr-generate": { name: "QR Code Generator", description: "Generate styled QR codes with custom colors, patterns, and logos", }, "barcode-read": { name: "Barcode Reader", description: "Scan images for QR codes, barcodes, and 2D codes", }, collage: { name: "Collage / Grid", description: "Combine images into beautiful grid collages with 25+ templates", }, stitch: { name: "Stitch / Combine", description: "Join images side by side, stacked, or in a grid", }, split: { name: "Image Splitting", description: "Split images into grid tiles or by pixel size with live preview", }, border: { name: "Border & Frame", description: "Add borders, padding, rounded corners, and shadows with one-click presets", }, "svg-to-raster": { name: "SVG to Raster", description: "Convert SVG to PNG, JPEG, WebP, AVIF, TIFF, GIF, or HEIF at custom scale and DPI", }, vectorize: { name: "Image to SVG", description: "Convert images to scalable vector graphics" }, "gif-tools": { name: "GIF Tools", description: "Resize, optimize, change speed, reverse, extract frames, and rotate animated GIFs", }, "image-to-base64": { name: "Image to Base64", description: "Convert images to base64 strings for embedding in HTML, CSS, and more", }, pipeline: { name: "Pipeline Builder", description: "Chain multiple tools into a workflow" }, }, settings: { title: "Settings", general: "General", system: "System Settings", security: "Security", apiKeys: "API Keys", about: "About", username: "Username", logout: "Log out", defaultView: "Default Tool View", sidebarView: "Sidebar", fullscreenView: "Fullscreen Grid", version: "Version", appName: "App Name", uploadLimit: "File Upload Limit", defaultTheme: "Default Theme", defaultLocale: "Language", changePassword: "Change Password", currentPassword: "Current Password", newPassword: "New Password", confirmPassword: "Confirm Password", passwordChanged: "Password changed successfully", loginAttemptLimit: "Login Attempt Limit", generateKey: "Generate API Key", regenerateKey: "Regenerate", copyKey: "Copy Key", aboutDescription: "SnapOtter is a self-hosted, privacy-first image processing suite with 30+ tools.", aboutLinks: "Links", github: "GitHub", documentation: "Documentation", teams: { title: "Teams", description: "Manage teams and organize workspace members", createTeam: "Create New Team", teamName: "Team Name", totalMembers: "Total Members", rename: "Rename", delete: "Delete", deleteConfirm: "Are you sure you want to delete this team?", cannotDeleteDefault: "Cannot delete the Default team", cannotDeleteWithMembers: "Cannot delete a team with assigned members", namePlaceholder: "Enter team name", nameRequired: "Team name is required", nameTooLong: "Team name must be 50 characters or less", duplicateName: "A team with this name already exists", }, tools: { title: "Tools", description: "Enable or disable tools for all users", searchPlaceholder: "Search tools...", enabled: "Enabled", disabled: "Disabled", restartRequired: "Restart required for changes to take effect", toolUnavailable: "Tool unavailable", }, experimental: { label: "Enable Experimental Tools", description: "Show tools that are still in development. These may be unstable.", }, fileManagement: { title: "File Management", maxAge: "Max File Age (hours)", maxAgeDescription: "How long processed files are kept before automatic cleanup", startupCleanup: "Startup Cleanup", startupCleanupDescription: "Clean up old temporary files when the server starts", }, branding: { logo: "Custom Logo", logoDescription: "Upload a custom logo for the sidebar and navbar", uploadLogo: "Upload Logo", removeLogo: "Remove Logo", logoRequirements: "PNG, SVG, or JPEG. Max 500KB.", dragDrop: "Drag and drop or click to upload", }, limitsAndResources: "Limits & Resources", maxFileSize: "Max File Size", maxBatchSize: "Max Batch Size", concurrentJobs: "Concurrent Jobs", workerThreads: "Worker Threads", maxPipelineSteps: "Max Pipeline Steps", processingTimeout: "Processing Timeout", rateLimitPerMin: "Rate Limit (req/min)", unlimited: "Unlimited", auto: "Auto", disabled: "Disabled", envOverride: "Set by environment variable", maxCanvasPixels: "Max Canvas Pixels", maxSvgSize: "Max SVG Size", maxLogoSize: "Max Logo Size", maxSplitGrid: "Max Split Grid", maxPdfPages: "Max PDF Pages", sessionDuration: "Session Duration", }, auth: { login: "Login", logout: "Log out", username: "Username", password: "Password", loginButton: "Login", loggingIn: "Logging in...", invalidCredentials: "Invalid username or password", connectionError: "Connection error", }, pipeline: { title: "Automate", createNew: "Create New Automation", savedAutomations: "Saved Automations", templates: "Templates", addStep: "Add Step", removeStep: "Remove", moveUp: "Move up", moveDown: "Move down", savePipeline: "Save Pipeline", runPipeline: "Process", pipelineName: "Pipeline Name", pipelineDescription: "Description (optional)", noSteps: "Add steps to build your automation", step: "Step", settings: "Settings", processing: "Processing pipeline...", socialMediaReady: "Social Media Ready", privacyClean: "Privacy Clean", webOptimization: "Web Optimization", profilePicture: "Profile Picture", watermarkBatch: "Watermark Batch", }, nav: { tools: "Tools", reader: "Reader", automate: "Automate", files: "Files", help: "Help", settings: "Settings", }, analytics: { consentTitle: "Help improve SnapOtter", consentDescription: "Anonymous usage stats help us fix bugs and build the tools you actually need. Your images and files stay on your machine.", consentChangeable: "You can turn this off anytime in Settings.", acceptButton: "Sure, sounds good", declineButton: "Not right now", settingsTitle: "Product Analytics", settingsDescription: "Share anonymous usage data to help improve SnapOtter.", settingsPrivacy: "Your images never leave your machine.", settingsDisabledByAdmin: "Product analytics has been disabled by the server administrator.", learnMore: "Learn more", }, } as const; export type TranslationKeys = typeof en;