{
  "app": {
    "title": "Tools",
    "footer": "© 2026 Tools. All rights reserved. Version 0.0.2",
    "darkMode": "Dark mode"
  },
  "nav": {
    "numberConversion": "Number Conversion",
    "mediaTools": "Media Tools",
    "p2pCommunication": "P2P Tools"
  },
  "common": {
    "bits": "Bits",
    "bytes": "Bytes",
    "si": "SI",
    "binary": "Binary",
    "online": "Online",
    "offline": "Offline",
    "yes": "Yes",
    "no": "No",
    "unknown": "Unknown",
    "none": "None",
    "dark": "Dark",
    "light": "Light"
  },
  "button": {
    "open": "Open",
    "convert": "Convert",
    "copy": "Copy",
    "download": "Download",
    "convertAndDownload": "Convert & Download",
    "calculate": "Calculate",
    "resetArtisticSettings": "Reset"
  },
  "numberBaseConverter": {
    "title": "Number Base Converter",
    "description": "Converts a number from one base to another.",
    "hint": "Enter a number, the base of the number, and the target base.",
    "invalidNumber": "Invalid number for the selected base.",
    "label": {
      "number": "Number",
      "base": "Base",
      "targetBase": "Target Base",
      "includeFormatting": "Include Formatting?"
    },
    "resultTitle": "Result"
  },
  "bitsAndBytes": {
    "title": "Bits and Bytes",
    "description": "Converts between bits and bytes.",
    "hint": "Enter a number, select the magnitude, choose bits or bytes and the target magnitude. Learn more about the difference between SI and binary on",
    "label": {
      "number": "Number",
      "type": "Type",
      "siBinary": "SI/Binary",
      "magnitude": "Magnitude",
      "resultShouldBe": "The result should be in:"
    },
    "resultTitle": "Result",
    "includeUnit": "Include Unit?"
  },
  "browserLocale": {
    "title": "Browser Infos",
    "description": "Shows the browser's locale, time zone, and other information.",
    "fields": {
      "currentTime": "Current Time",
      "timeZone": "Time Zone",
      "language": "Language",
      "preferredLanguages": "Preferred Languages",
      "userAgent": "User Agent",
      "platform": "Platform",
      "cookiesEnabled": "Cookies Enabled",
      "onlineStatus": "Online Status",
      "screenResolution": "Screen Resolution",
      "viewportSize": "Viewport Size",
      "pixelRatio": "Device Pixel Ratio",
      "colorScheme": "Preferred Color Scheme",
      "reducedMotion": "Reduced Motion Preferred",
      "touchSupport": "Touch Support",
      "hardwareConcurrency": "CPU Cores",
      "deviceMemory": "Device Memory",
      "connectionType": "Connection Type",
      "doNotTrack": "Do Not Track",
      "storageEnabled": "Local Storage Enabled",
      "referrer": "Referrer",
      "jsEnabled": "JavaScript Enabled"
    }
  },
  "imageMagick": {
    "title": "ImageMagick Converter",
    "description": "Convert images using ImageMagick.",
    "privacyNote": "The images are not uploaded at all to convert them. All conversion is done on the client so your own computer and will never leave it.",
    "formatsHint": "This is a list of formats that can be read and written by ImageMagick. I haven't tested all possible combinations - expect errors to pop up here and there.",
    "selectImage": "Select Image",
    "searchFormat": "Search Format",
    "outputFormat": "Output Format",
    "supportedFormats": "Supported Formats",
    "reading": "Reading",
    "writing": "Writing",
    "jpegPreview": "Jpeg Preview",
    "waiting": "Waiting for an Image...",
    "loading": "Loading ImageMagick...",
    "failedToLoad": "Failed to load ImageMagick.",
    "readingPreview": "Reading Image for preview...",
    "creatingJpegPreview": "Creating Jpeg Preview...",
    "jpegPreviewCreated": "Jpeg Preview Created",
    "readingImage": "Reading Image...",
    "convertingImage": "Converting Image...",
    "createdDownload": "Created Download..."
  },
  "qrCode": {
    "title": "QR Code Generator",
    "description": "Generate QR codes for your URLs, text, or other data.",
    "label": {
      "text": "Text",
      "resolution": "Resolution",
      "margin": "Margin",
      "style": "Style",
      "dotRadius": "Dot radius",
      "blur": "Blur",
      "softness": "Edge softness",
      "borderWidth": "Border thickness",
      "buildingHeight": "Building height",
      "cameraAngle": "Camera angle",
      "cameraRotation": "Camera rotation",
      "zoom": "Zoom"
    }
    ,"style":{
      "standard": "Standard",
      "artistic": "Artistic",
      "buildings3d": "3D buildings"
    }
    ,"errors":{
      "resolution":"Resolution must be between 128 and 4096.",
      "margin":"Margin must be between 0 and 99."
    },
    "downloadButton": "Download QR Code",
    "copyButton": "Copy to clipboard",
    "shuffleButton": "Shuffle colors"
  },
  "loanCalculator": {
    "title": "Loan Calculator",
    "description": "Calculates the monthly payment, interest, and repayment for one or several parallel annuity loans.",
    "descriptionLong": "The entered values are not stored and the calculation is performed on the client device. If the data needs to be saved, simply copy the URL or save it in the bookmarks.",
    "name": "Name",
    "currency": "$",
    "label": {
      "totalLoan": "Total Loan ($)",
      "startDate": "Start Date",
      "interestRate": "Effective Annual Interest Rate (%)",
      "repaymentRate": "Initial Repayment Rate (%)",
      "repaymentMode": "Specify Repayment as",
      "repaymentAmount": "Initial Repayment ($/Month)",
      "specialRepaymentRate": "Special Repayment (%)",
      "specialRepaymentAmount": "Special Repayment ($)",
      "specialRepaymentFrequency": "Special Repayment Frequency",
      "monthly": "Monthly",
      "yearly": "Yearly",
      "gracePeriodYears": "Interest-only Years",
      "duration": "Duration (Years)",
      "detailedView": "Detailed View",
      "savingsInterestRate": "Savings Phase Interest (% p.a.)",
      "savingsRate": "Savings Rate ($/Month)",
      "allocationPercent": "Allocation (%)",
      "repaymentInterestRate": "Repayment Phase Interest (% p.a.)",
      "bausparRepaymentAmount": "Repayment Rate ($/Month)",
      "linkedLoan": "Linked Loan",
      "linkedLoanNone": "None"
    },
    "error": {
      "specialRepaymentExceedsLimit": "The entered value exceeds the maximum allowed special repayment."
    },
    "button": {
      "addLoan": "Add Loan",
      "removeLoan": "Del.",
      "addBausparLoan": "Add Building Savings Loan",
      "copyUrl": "Copy Link",
      "copyQrCode": "Copy QR Code",
      "resetArtisticSettings": "Reset"
    },
    "result": {
      "monthlyPayment": "Monthly Payment",
      "totalInterest": "Total Interest Paid",
      "payoffTime": "Fixed-interest Period",
      "notFullyRepaid": "Remaining balance after fixed-interest period",
      "years": "Y",
      "months": "M",
      "savingsRate": "Savings Rate",
      "allocationAfter": "Allocated after",
      "allocationWarning": "Warning: Building savings loan is not yet allocation-ready when the linked loan ends",
      "chartTitle": "Remaining Balance",
      "todayLabel": "Today",
      "tableTitle": "Amortization Schedule",
      "totalLabel": "Total",
      "totalMonthlyPayment": "Total Monthly Payment",
      "totalRemainingBalance": "Total Remaining Balance",
      "statusTodayLabel": "Status Today",
      "paidSoFar": "Paid So Far",
      "interestPaidSoFar": "Interest Paid So Far",
      "monthsElapsed": "Months Elapsed",
      "shareLabel": "Share",
      "shareUrlLabel": "Share Link",
      "copied": "Copied!",
      "columns": {
        "month": "Month/Year",
        "payment": "Payment",
        "interest": "Interest",
        "repayment": "Repayment",
        "specialRepayment": "Special Repayment",
        "remainingBalance": "Remaining Balance",
        "savingsBalance": "Accumulated Savings Balance"
      }
    }
  },
  "m3u8Downloader": {
    "title": "HLS Stream Downloader",
    "description": "Downloads an HLS (m3u8) video stream and saves it as an MP4 file.",
    "privacyNote": "Everything runs in your browser - the stream is fetched and remuxed on your own computer and never uploaded anywhere. The URL is only used locally.",
    "browserLimitationsNote": "Note: browsers block cross-origin requests without proper CORS headers, and block plain HTTP requests from this HTTPS page (mixed content).",
    "inputMode": "Input Mode",
    "inputModeUrl": "URL",
    "inputModeCurl": "cURL Command",
    "curlCommand": "cURL Command",
    "curlCommandHint": "Paste a curl command, e.g. copied from Chrome DevTools' Network tab via \"Copy as cURL\". The URL and headers are extracted automatically.",
    "playlistUrl": "M3U8 Playlist URL",
    "mixedContentWarning": "This page is served over HTTPS but the URL uses HTTP - your browser will likely block this request (mixed content).",
    "fileName": "Output File Name",
    "concurrency": "Parallel Segment Downloads",
    "concurrencyHint": "How many video segments to download at the same time (1-32). Higher values are faster but put more load on the camera/server.",
    "headers": "Custom Headers (optional)",
    "headersHint": "One 'Header-Name: value' pair per line, e.g. for an auth token. Some headers (Cookie, Host, User-Agent, Origin, Referer, Priority, Sec-*) can't be set by browsers for security reasons and are removed automatically.",
    "droppedHeadersWarning": "Removed headers browsers don't allow scripts to set",
    "downloadButton": "Download",
    "cancelButton": "Cancel",
    "segments": "Segments",
    "remuxing": "Remuxing to MP4",
    "status": {
      "idle": "",
      "playlist": "Fetching playlist...",
      "segments": "Downloading segments...",
      "remux": "Remuxing to MP4...",
      "done": "Done - download started.",
      "cancelled": "Cancelled.",
      "error": "Something went wrong."
    }
  },
  "p2pChat": {
    "title": "P2P Group Chat",
    "description": "A serverless peer-to-peer group chat that connects browsers directly via WebRTC - one host, any number of guests.",
    "privacyNote": "Messages are sent directly between browsers - nothing is stored or relayed by any backend.",
    "limitationsNote": "Note: connecting still requires a one-time manual exchange of a short connection code per participant (there is no signaling server), and some restrictive networks may block the direct connection entirely since no TURN relay is used. Looking for a 1:1 call with audio/video? Use the P2P Video Call tool instead.",
    "yourName": "Your Name",
    "createRoomButton": "Create Room",
    "joinButton": "Join",
    "inviteLinkLabel": "Invite Link",
    "inviteLinkHint": "Send this link to the person you want to invite. Once they open it and send their connection code back to you, paste it below to connect.",
    "pasteAnswerLabel": "Paste Their Connection Code",
    "connectButton": "Connect",
    "cancelInviteButton": "Cancel",
    "inviteAnotherButton": "Invite Another Person",
    "generatingInviteCode": "Generating invite code...",
    "defaultGuestLabel": "Guest {{number}}",
    "hostLabelHint": "Your own private label for this participant - only visible to you, never sent to anyone.",
    "answerCodeLabel": "Your Connection Code",
    "answerCodeHint": "Send this code back to the host (via any chat/email you already have) so they can finish connecting you.",
    "participants": "Participants",
    "removeButton": "Remove",
    "guestRemoved": "You removed {{name}} from the chat",
    "removedByHost": "The host removed you from the chat. You'll need a fresh invite link to rejoin.",
    "messagePlaceholder": "Type a message...",
    "sendButton": "Send",
    "autoScroll": "Auto-scroll",
    "notificationLevel": {
      "label": "Notifications",
      "off": "Off",
      "anonymous": "Anonymous",
      "full": "Full"
    },
    "newMessageNotification": "New message",
    "copied": "Copied!",
    "guestPending": "(connecting...)",
    "guestJoined": "{{name}} joined the chat",
    "guestLeft": "{{name}} left the chat",
    "disconnectedFromHost": "Disconnected from host.",
    "status": {
      "connecting": "Connecting...",
      "connected": "Connected",
      "disconnected": "Disconnected"
    }
  },
  "p2pCall": {
    "title": "P2P Video Call",
    "description": "A serverless 1:1 peer-to-peer call with audio, video and text chat, connecting two browsers directly via WebRTC.",
    "privacyNote": "Audio, video and messages are sent directly between browsers - nothing is stored or relayed by any backend.",
    "limitationsNote": "Note: connecting still requires a one-time manual exchange of a short connection code (there is no signaling server), and some restrictive networks may block the direct connection entirely since no TURN relay is used. Camera/microphone can only be enabled if they were turned on before starting the call - enabling them later requires starting a new call.",
    "yourName": "Your Name",
    "cameraLabel": "Enable camera",
    "microphoneLabel": "Enable microphone",
    "mediaUnsupported": "This browser does not support camera/microphone access.",
    "startCallButton": "Start Call",
    "joinCallButton": "Join Call",
    "inviteLinkHint": "Send this link to the person you want to call. Once they open it and send their connection code back to you, paste it below to connect.",
    "pasteAnswerLabel": "Paste Their Connection Code",
    "connectButton": "Connect",
    "cancelButton": "Cancel",
    "answerCodeLabel": "Your Connection Code",
    "answerCodeHint": "Send this code back to the caller (via any chat/email you already have) so they can finish connecting you.",
    "muteButton": "Mute",
    "unmuteButton": "Unmute",
    "cameraOffButton": "Turn camera off",
    "cameraOnButton": "Turn camera on",
    "hangUpButton": "Hang up",
    "noMediaHint": "No camera/microphone",
    "peerJoined": "{{name}} joined the call",
    "peerLeft": "{{name}} left the call",
    "disconnectedFromPeer": "Disconnected from the other participant.",
    "callEnded": "Call ended.",
    "copied": "Copied!",
    "waitingForPeer": "Waiting for the other participant...",
    "toggleChatButton": "Toggle chat",
    "startNewCallButton": "Start New Call"
  },
  "toolCard": {
    "open": "Open"
  }
}
