Files
Stirling-PDF/frontend/editor/public/locales/en-US/translation.toml
T
James Brunton 76549288a9 Redesign S3 connections to use connection resolver (#6965)
# Description of Changes
Redesign S3 connections based on feedback from #6948. Also redesigns the
UI for Sources to make them more like the Pipelines page which improves
UX quite a bit. There's still plenty more UI/UX work for Sources and S3
but moving in the right direction.
2026-07-13 14:44:41 +00:00

11175 lines
392 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
alphabet = "Alphabet"
apply = "Apply"
applyAndContinue = "Save & Leave"
areYouSure = "Are you sure you want to leave?"
back = "Back"
black = "Black"
blue = "Blue"
cancel = "Cancel"
chooseFile = "Choose File"
clear = "Clear"
close = "Close"
comingSoon = "Coming soon"
confirm = "Confirm"
confirmClose = "Confirm Close"
confirmCloseCancel = "Cancel"
confirmCloseConfirm = "Close File"
confirmCloseDiscard = "Discard changes and close"
confirmCloseMessage = "Are you sure you want to close this file?"
confirmCloseSave = "Save and close"
confirmCloseSaveFailed_one = "Saved with errors. {{count}} file could not be saved."
confirmCloseSaveFailed_other = "Saved with errors. {{count}} files could not be saved."
confirmCloseSaveFailedTitle = "Save Failed"
confirmCloseUnsaved = "This file has unsaved changes."
confirmCloseUnsavedList_one = "You have {{count}} file with unsaved changes.\n\n{{fileList}}"
confirmCloseUnsavedList_other = "You have {{count}} files with unsaved changes.\n\n{{fileList}}"
custom = "Custom..."
customPosition = "Custom Position"
customTextTooltip = "Optional custom format for page numbers. Use {n} as placeholder for the number. Example: \"Page {n}\" will show \"Page 1\", \"Page 2\", etc."
delete = "Delete"
details = "Details"
discardChanges = "Discard & Leave"
download = "Download"
downloadPdf = "Download PDF"
downloadUnavailable = "Download unavailable for this item"
edit = "Edit"
editSecret = "Edit this value"
editYourNewFiles = "Edit your new file(s)"
encryptedFilesBlocked_one = "File is password-protected. Unlock it first."
encryptedFilesBlocked_other = "{{count}} files are password-protected. Unlock them first."
exportAndContinue = "Export & Continue"
false = "False"
fileNotSavedToDisk = "Not saved to disk"
fileSavedToDisk = "File saved to disk"
fileSelected = "{{filename}}"
filesSelected = "{{count}} files"
font = "Font"
fontSizeTooltip = "Size of the page number text in points. Larger numbers create bigger text."
fontTypeTooltip = "Font family for the page numbers. Choose based on your document style."
genericSubmit = "Submit"
green = "Green"
help = "Help"
imgPrompt = "Select Image(s)"
incorrectPasswordMessage = "Current password is incorrect."
info = "Info"
invalidUndoData = "Cannot undo: invalid operation data"
keepWorking = "Keep Working"
loading = "Loading..."
loginAgreementAccept = "Accept"
loginAgreementDecline = "Decline"
loginAgreementProvider = "This notice is provided by your administrator, not Stirling PDF Inc."
loginAgreementTitle = "Login Agreement"
logOut = "Log out"
marginTooltip = "Distance between the page number and the edge of the page."
moreOptions = "More Options"
multiPdfPrompt = "Select PDFs (2+)"
never = "Never"
no = "No"
noFileSelected = "No file loaded. Please upload one."
noFilesToUndo = "Cannot undo: no files were processed in the last operation"
noOperationToUndo = "No operation to undo"
nothingToUndo = "Nothing to undo"
noValidFiles = "No valid files to process"
oops = "Oops!"
openInNewWindow = "Open in new window"
openInViewer = "Open in Viewer"
operationCancelled = "Operation canceled"
page = "Page"
pageNum = "Page Number"
pageOrderPrompt = "Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :"
pages = "Pages"
pageSelectionPrompt = "Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1)"
password = "Password"
pdfPrompt = "Select PDF(s)"
pin = "Pin File (keep active after tool run)"
pro = "Pro"
processingComplete = "Your file is ready."
processingCompleteMultiple = "{{count}} files are ready."
property = "Property"
quickPosition = "Quick Position"
red = "Red"
remove = "Remove"
reset = "Reset"
review = "Review"
save = "Save"
saveUnavailable = "Save unavailable for this item"
size = "Size"
startingNumberTooltip = "The first number to display. Subsequent pages will increment from this number."
submit = "Submit"
success = "Success"
termsAndConditions = "Terms & Conditions"
text = "Text"
true = "True"
undo = "Undo"
undoDataMismatch = "Cannot undo: operation data is corrupted"
undoFailed = "Failed to undo operation"
undoOperationTooltip = "Click to undo the last operation and restore the original files"
undoQuotaError = "Cannot undo: insufficient storage space"
undoStorageError = "Undo completed but some files could not be saved to storage"
undoSuccess = "Operation undone successfully"
unknown = "Unknown"
unpin = "Unpin File (replace after tool run)"
unsavedChanges = "You have unsaved changes to your PDF."
unsavedChangesTitle = "Unsaved Changes"
unsupported = "Unsupported"
username = "Username"
welcome = "Welcome"
white = "White"
yes = "Yes"
[account]
accountSettings = "Account Settings"
adminSettings = "Admin Settings - View and Add Users"
changePassword = "Change Password"
changeUsername = "Change Username"
changeUsernameDescription = "Update your username. You will be logged out after updating."
confirmNewPassword = "Confirm New Password"
newPassword = "New Password"
newUsername = "New Username"
newUsernamePlaceholder = "Enter your new username"
oldPassword = "Old password"
password = "Confirmation Password"
property = "Property"
settingsCompare = "Settings Comparison:"
signOut = "Sign Out"
syncTitle = "Sync browser settings with Account"
syncToAccount = "Sync Account <- Browser"
syncToBrowser = "Sync Account -> Browser"
title = "Account Settings"
userControlSettings = "User Control Settings"
webBrowserSettings = "Web Browser Setting"
yourApiKey = "Your API Key"
[account.mfa]
codeLabel = "Authentication code"
codePlaceholder = "Enter 6-digit code"
codeRequired = "Enter the authentication code to continue."
confirmDisable = "Disable"
confirmEnable = "Enable"
description = "Add an extra layer of security to your account."
disableButton = "Disable two-factor authentication"
disabled = "Two-factor authentication disabled."
disableDescription = "Enter a valid authentication code to disable two-factor authentication."
disableFailed = "Unable to disable two-factor authentication. Check the code and try again."
disableTitle = "Disable two-factor authentication"
enableButton = "Enable two-factor authentication"
enabled = "Two-factor authentication enabled."
enableFailed = "Unable to enable two-factor authentication. Check the code and try again."
manualKey = "Manual setup key"
secretWarning = "Keep this key private. Anyone with access can generate valid authentication codes."
setupDescription = "Scan the QR code with your authenticator app, then enter the 6-digit code to confirm."
setupFailed = "Unable to start two-factor setup. Please try again."
setupTitle = "Set up two-factor authentication"
ssoDescription = "Two-factor authentication is managed by your identity provider for single sign-on accounts."
ssoManaged = "Configure MFA through your identity provider."
title = "Two-factor authentication"
[account.overview]
logOut = "Log out"
signedInAs = "Signed in as: {{email}}"
[add-page-numbers]
tags = "paginate,label,organize,index"
[addAttachments]
tags = "embed,attach,include,attachments,attach files,embed files,include files,add files,file attachment,associated files,supplementary files"
[addAttachments.error]
failed = "An error occurred while adding attachments to the PDF."
[AddAttachmentsRequest]
addMoreFiles = "Add more files..."
attachments = "Select Attachments"
info = "Select files to attach to your PDF. These files will be embedded and accessible through the PDF's attachment panel."
placeholder = "Choose files..."
removeFile = "Remove file"
selectedFiles = "Selected Files"
submit = "Add Attachments"
[AddAttachmentsRequest.error]
failed = "Add attachments operation failed"
[AddAttachmentsRequest.results]
title = "Attachment Results"
[AddAttachmentsRequest.tooltip.description]
title = "What it does"
[AddAttachmentsRequest.tooltip.header]
title = "About Add Attachments"
[addFileCard]
upload = "Upload"
[addImage]
applySignatures = "Apply Images"
header = "Add images to PDFs"
tags = "img,jpg,picture,photo"
title = "Add Image"
[addImage.canvas]
colorPickerTitle = "Choose stroke color"
[addImage.error]
failed = "An error occurred while adding image to the PDF."
[addImage.image]
hint = "Supports PNG, JPEG, GIF, BMP, TIFF, and SVG files. SVG files will be converted to PNG for embedding."
label = "Image file"
name = "Image"
placeholder = "Upload an image"
[addImage.instructions]
noSignature = "Upload an image above to enable placement."
paused = "Placement paused"
resumeHint = "Resume placement to click and add your image."
text = "After uploading your image above, click anywhere on the PDF to place it."
title = "How to add images"
[addImage.mode]
move = "Move Image"
pause = "Pause placement"
place = "Place Image"
resume = "Resume placement"
[addImage.results]
title = "Add Image Results"
[addImage.saved]
defaultCanvasLabel = "Drawing signature"
defaultImageLabel = "Uploaded image"
defaultLabel = "Image"
defaultTextLabel = "Typed signature"
delete = "Remove"
emptyTitle = "No saved signatures yet"
heading = "Saved signatures"
label = "Label"
limitTitle = "Limit reached"
next = "Next"
personalHeading = "Personal Signatures"
prev = "Previous"
savePersonal = "Save Personal"
saveShared = "Save Shared"
sharedHeading = "Shared Signatures"
[addImage.saved.type]
canvas = "Drawing"
image = "Upload"
text = "Text"
[addImage.step]
createDesc = "Upload the image you want to add"
place = "Place image"
placeDesc = "Click on the PDF to add your image"
[addImage.steps]
configure = "Configure Image"
[addImage.text]
colorLabel = "Text color"
fontLabel = "Font"
fontSizeLabel = "Font size"
name = "Text"
placeholder = "Enter text"
[addImage.type]
canvas = "Canvas"
image = "Image"
saved = "Saved"
text = "Text"
[addPageNumbers]
customize = "Customize Appearance"
customNumberDesc = "e.g., \"Page {n}\" or leave blank for just numbers"
fontName = "Font Name"
fontSize = "Font Size"
numberPagesDesc = "e.g., 1,3,5-8 or leave blank for all pages"
pagesAndStarting = "Pages & Starting Number"
positionAndPages = "Position & Pages"
preview = "Position Selection"
previewDisclaimer = "Preview is approximate. Final output may vary due to PDF font metrics."
submit = "Add Page Numbers"
tags = "number,pagination,count,add page numbers,page numbering,page numbers,footer,header,number pages,sequential,pagination tool"
title = "Add Page Numbers"
zeroPad = "Zeropad Width (Bates Stamping)"
zeroPadTooltip = "Zeropad (Bates Stamp) page numbers to this width (e.g., 3 ⇒ 001). Set 0 to disable."
[addPageNumbers.error]
failed = "Add page numbers operation failed"
[addPageNumbers.results]
title = "Page Number Results"
[addPageNumbers.selectText]
2 = "Margin Size"
4 = "Starting Number"
5 = "Pages to Number"
6 = "Custom Text Format"
[addPassword]
desc = "Encrypt your PDF document with a password."
submit = "Encrypt"
tags = "encrypt,password,lock,secure,protect,security,encryption,safeguard,confidential,private,restrict access"
title = "Add Password"
[addPassword.encryption.keyLength]
128bit = "128-bit (Standard)"
256bit = "256-bit (High)"
40bit = "40-bit (Low)"
label = "Encryption Key Length"
[addPassword.error]
failed = "An error occurred while encrypting the PDF."
[addPassword.passwords]
stepTitle = "Passwords & Encryption"
[addPassword.passwords.owner]
label = "Owner Password"
placeholder = "Enter owner password"
[addPassword.passwords.user]
label = "User Password"
placeholder = "Enter user password"
[addPassword.results]
title = "Encrypted PDFs"
[addPassword.tooltip.encryption]
bullet1 = "40-bit: Basic security, compatible with older viewers"
bullet2 = "128-bit: Standard security, widely supported"
bullet3 = "256-bit: Maximum security, requires modern viewers"
text = "Higher encryption levels provide better security but may not be supported by older PDF viewers."
title = "Encryption Levels"
[addPassword.tooltip.header]
title = "Password Protection Overview"
[addPassword.tooltip.passwords]
bullet1 = "User Password: Required to open the PDF"
bullet2 = "Owner Password: Controls document permissions (not supported by all PDF viewers)"
text = "User passwords restrict opening the document, while owner passwords control what can be done with the document once opened. You can set both or just one."
title = "Password Types"
[addPassword.tooltip.permissions]
text = "These permissions control what users can do with the PDF. Most effective when combined with an owner password."
title = "Change Permissions"
[addStamp]
preview = "Preview Stamp"
tags = "stamp,mark,seal,approved,rejected,confidential,stamp tool,rubber stamp,date stamp,approval stamp,received,void,copy,original"
[AddStampRequest]
alphabet = "Alphabet"
clickToExpand = "Click to expand"
customColor = "Custom Text Color"
customDateDesc = "Custom format"
customPosition = "Drag the stamp to the desired location in the preview window."
dateDesc = "Current date"
datetimeDesc = "Date and time combined"
dateTimeVars = "Date & Time"
dynamicVariables = "Dynamic Variables"
examples = "Examples"
filenameDesc = "Filename without extension"
filenameFullDesc = "Filename with extension"
fileVars = "File Information"
fontSize = "Font/Image Size"
imageSize = "Image Size"
margin = "Margin"
metadataDesc = "From PDF document properties"
metadataVars = "Document Metadata"
multiLine = "multi-line"
noStampSelected = "No stamp selected. Return to Step 1."
opacity = "Opacity"
otherVars = "Other"
pageNumberDesc = "Current page number"
pageVars = "Page Information"
position = "Position"
positionAndFormatting = "Position & Formatting"
preview = "Preview:"
quickPosition = "Select a position on the page to place the stamp."
rotation = "Rotation"
selectTemplate = "Select a template..."
stampSetup = "Stamp Setup"
stampText = "Stamp Text"
stampTextDescription = "Use dynamic variables below. Use @@ for literal @. Use \\n for new lines."
stampType = "Stamp Type"
submit = "Submit"
tags = "Stamp, Add image, center image, Watermark, PDF, Embed, Customize"
timeDesc = "Current time"
title = "Stamp PDF"
totalPagesDesc = "Total number of pages"
useTemplate = "Use Template"
uuidDesc = "Short unique identifier (8 chars)"
variablesHelp = "Click on any variable to insert it into your stamp text. Use @@ for literal @."
yearMonthDayDesc = "Individual date parts"
[AddStampRequest.error]
failed = "An error occurred while adding stamp to the PDF."
[AddStampRequest.results]
title = "Stamp Results"
[AddStampRequest.template]
custom = "Custom"
dateHeader = "Date Header"
doc-info = "Document Info"
draft = "Draft Watermark"
draftWatermark = "Draft Watermark"
european-date = "European Date (DD/MM/YYYY)"
europeanDate = "European Date"
legal-footer = "Legal Footer"
page-numbers = "Page Numbers"
pageNumberFooter = "Page Number Footer"
timestamp = "Timestamp"
[addText]
applySignatures = "Apply Text"
header = "Add text to PDFs"
tags = "text,annotation,label"
title = "Add Text"
[addText.canvas]
colorPickerTitle = "Choose stroke color"
[addText.error]
failed = "An error occurred while adding text to the PDF."
[addText.instructions]
noSignature = "Enter text above to enable placement."
paused = "Placement paused"
resumeHint = "Resume placement to click and add your text."
text = "After entering your text above, click anywhere on the PDF to place it."
title = "How to add text"
[addText.mode]
move = "Move Text"
pause = "Pause placement"
place = "Place Text"
resume = "Resume placement"
[addText.results]
title = "Add Text Results"
[addText.saved]
defaultCanvasLabel = "Drawing signature"
defaultImageLabel = "Uploaded signature"
defaultLabel = "Signature"
defaultTextLabel = "Typed signature"
delete = "Remove"
emptyTitle = "No saved signatures yet"
heading = "Saved signatures"
label = "Label"
limitTitle = "Limit reached"
next = "Next"
personalHeading = "Personal Signatures"
prev = "Previous"
savePersonal = "Save Personal"
saveShared = "Save Shared"
sharedHeading = "Shared Signatures"
[addText.saved.type]
canvas = "Drawing"
image = "Upload"
text = "Text"
[addText.step]
createDesc = "Enter the text you want to add"
place = "Place text"
placeDesc = "Click on the PDF to add your text"
[addText.steps]
configure = "Configure Text"
[addText.text]
colorLabel = "Text color"
fontLabel = "Font"
fontSizeLabel = "Font size"
fontSizePlaceholder = "Type or select font size (8-200)"
name = "Text content"
placeholder = "Enter the text you want to add"
[addText.type]
canvas = "Canvas"
image = "Image"
saved = "Saved"
text = "Text"
[adjust-contrast]
tags = "color-correction,tune,modify,enhance"
[adjustContrast]
adjustColors = "Adjust Colors"
basic = "Basic Adjustments"
blue = "Blue"
brightness = "Brightness:"
confirm = "Confirm"
contrast = "Contrast:"
green = "Green"
noPreview = "Select a PDF to preview"
red = "Red"
saturation = "Saturation:"
tags = "contrast,brightness,saturation,adjust colors,color correction,enhance,lighten,darken,improve quality,color balance,hue,vibrance"
title = "Adjust Colors/Contrast"
[adjustContrast.error]
failed = "Failed to adjust colors/contrast"
[adjustContrast.results]
title = "Adjusted PDF"
[adjustPageScale]
submit = "Adjust Page Scale"
tags = "resize,modify,dimension,adapt"
title = "Adjust Page Scale"
[adjustPageScale.error]
failed = "An error occurred while adjusting the page scale."
[adjustPageScale.orientation]
label = "Page orientation"
landscape = "Landscape"
portrait = "Portrait"
[adjustPageScale.pageSize]
keep = "Keep Original Size"
label = "Target Page Size"
legal = "Legal"
letter = "Letter"
[adjustPageScale.scaleFactor]
label = "Scale Factor"
[adjustPageScale.tooltip.description]
text = "Adjust the size of PDF content and change the page dimensions."
title = "Description"
[adjustPageScale.tooltip.header]
title = "Page Scale Settings Overview"
[adjustPageScale.tooltip.pageSize]
text = "Sets the dimensions of the output PDF pages. 'Keep Original Size' maintains current dimensions, while other options resize to standard paper sizes."
title = "Target Page Size"
[adjustPageScale.tooltip.scaleFactor]
bullet1 = "1.0 = Original size"
bullet2 = "0.5 = Half size (50% smaller)"
bullet3 = "2.0 = Double size (200% larger, may crop)"
text = "Controls how large or small the content appears on the page. Content is scaled and centered - if scaled content is larger than the page size, it may be cropped."
title = "Scale Factor"
[admin]
close = "Close"
error = "Error"
expand = "Expand"
[admin.settings]
discard = "Discard"
error = "Failed to save settings"
fetchError = "Failed to load settings"
loginRequired = "Login mode must be enabled to modify admin settings"
restartError = "Failed to restart server. Please restart manually."
restarting = "Restarting Server"
restartingMessage = "The server is restarting. Please wait a moment..."
restartRequired = "Restart Required"
save = "Save Changes"
saved = "Settings saved successfully"
saveError = "Failed to save settings"
saveSuccess = "Settings saved successfully"
success = "Settings saved successfully"
title = "Admin Settings"
workspace = "Workspace"
[admin.settings.advanced]
description = "Configure advanced features and experimental functionality."
features = "Feature Flags"
processing = "Processing"
title = "Advanced"
[admin.settings.advanced.disableSanitize]
description = "WARNING: Security risk - disabling HTML sanitization can lead to XSS vulnerabilities"
label = "Disable HTML Sanitization"
[admin.settings.advanced.enableAlphaFunctionality]
description = "Enable experimental and alpha-stage features (may be unstable)"
label = "Enable Alpha Features"
[admin.settings.advanced.enableUrlToPDF]
description = "Allow conversion of web pages to PDF documents"
label = "Enable URL to PDF"
[admin.settings.advanced.endpoints]
description = "Endpoint management is configured via YAML. See documentation for details on enabling/disabling specific endpoints."
label = "Endpoints"
manage = "Manage API Endpoints"
[admin.settings.advanced.maxDPI]
description = "Maximum DPI for image processing (0 = unlimited)"
label = "Maximum DPI"
[admin.settings.advanced.processExecutor]
calibre = "Calibre"
description = "Configure session limits and timeouts for each process executor"
ghostscript = "Ghostscript"
installApp = "Install App"
label = "Process Executor Limits"
libreOffice = "LibreOffice"
ocrMyPdf = "OCRmyPDF"
pdfToHtml = "PDF to HTML"
pythonOpenCv = "Python OpenCV"
qpdf = "QPDF"
tesseract = "Tesseract OCR"
weasyPrint = "WeasyPrint"
[admin.settings.advanced.processExecutor.sessionLimit]
description = "Maximum concurrent instances"
label = "Session Limit"
[admin.settings.advanced.processExecutor.timeout]
description = "Maximum execution time"
label = "Timeout (minutes)"
[admin.settings.advanced.tempFileManagement]
description = "Configure temporary file storage and cleanup behavior"
label = "Temp File Management"
[admin.settings.advanced.tempFileManagement.baseTmpDir]
description = "Base directory for temporary files (leave empty for default: java.io.tmpdir/stirling-pdf)"
label = "Base Temp Directory"
placeholder = "Default: java.io.tmpdir/stirling-pdf"
[admin.settings.advanced.tempFileManagement.cleanupIntervalMinutes]
description = "How often to run cleanup (in minutes)"
label = "Cleanup Interval (minutes)"
[admin.settings.advanced.tempFileManagement.cleanupSystemTemp]
description = "Whether to clean broader system temp directory (use with caution)"
label = "Cleanup System Temp"
[admin.settings.advanced.tempFileManagement.libreofficeDir]
description = "Directory for LibreOffice temp files (leave empty for default: baseTmpDir/libreoffice)"
label = "LibreOffice Temp Directory"
placeholder = "Default: baseTmpDir/libreoffice"
[admin.settings.advanced.tempFileManagement.maxAgeHours]
description = "Maximum age in hours before temp files are cleaned up"
label = "Max Age (hours)"
[admin.settings.advanced.tempFileManagement.prefix]
description = "Prefix for temp file names"
label = "Temp File Prefix"
[admin.settings.advanced.tempFileManagement.startupCleanup]
description = "Clean up old temp files on application startup"
label = "Startup Cleanup"
[admin.settings.advanced.tempFileManagement.systemTempDir]
description = "System temp directory to clean (only used if cleanupSystemTemp is enabled)"
label = "System Temp Directory"
placeholder = "System temp directory path"
[admin.settings.advanced.tessdataDir]
description = "Path to the tessdata directory for OCR language files"
downloadButton = "Download selected languages"
downloadErrorGeneric = "Download failed: {{message}}. Please try again later."
downloadErrorNetwork = "Download failed due to a network error. Please check your connection and try again."
downloadErrorPermission = "Tessdata directory is not writable: {{message}}. Please choose a writable directory (e.g. under the application data folder) or adjust permissions."
downloadErrorServer = "The server encountered an error while downloading tessdata languages. Please try again later."
downloadErrorTitle = "Download Failed"
downloadInvalidBody = "Some selected languages are not available to download. Please refresh and choose from the list."
downloadInvalidTitle = "Invalid selection"
downloadLabel = "Download additional tessdata languages"
downloadMissingBody = "Please select at least one language to download."
downloadMissingTitle = "No language selected"
downloadNothingFound = "No additional languages found"
downloadPlaceholder = "Select languages"
downloadSuccessBody = "The selected tessdata languages have been saved."
downloadSuccessTitle = "Languages downloaded"
installedLanguages = "Installed tessdata languages"
label = "Tessdata Directory"
loadingLanguages = "Loading installed tessdata languages..."
manualLinks = "Manual downloads: click the links and place the files into the tessdata folder."
noLanguages = "No tessdata languages found in the configured directory."
permissionNotice = "The tessdata path is not writable. Downloads will be opened in the browser; please save the .traineddata files manually into the tessdata folder."
[admin.settings.badge]
clickToUpgrade = "Click to view plan details"
[admin.settings.connections]
connect = "Connect"
description = "Configure external authentication providers like OAuth2 and SAML."
disconnect = "Disconnect"
disconnected = "Provider disconnected successfully"
disconnectError = "Failed to disconnect provider"
documentation = "View documentation"
imageResolutionFull = "Full (Original Size)"
imageResolutionReduced = "Reduced (Max 1200px)"
linkedServices = "Linked Services"
mobileScannerConvertToPdf = "Convert Images to PDF"
mobileScannerConvertToPdfDesc = "Automatically convert uploaded images to PDF format. If disabled, images will be kept as-is."
mobileScannerImageResolution = "Image Resolution"
mobileScannerImageResolutionDesc = "Resolution of uploaded images. \"Reduced\" scales images to max 1200px to reduce file size."
mobileScannerPageFormat = "Page Format"
mobileScannerPageFormatDesc = "PDF page size for converted images. \"Keep\" uses original image dimensions."
mobileScannerStretchToFit = "Stretch to Fit"
mobileScannerStretchToFitDesc = "Stretch images to fill the entire page. If disabled, images are centered with preserved aspect ratio."
pageFormatA4 = "A4 (210×297mm)"
pageFormatKeep = "Keep (Original Dimensions)"
pageFormatLetter = "Letter (8.5×11in)"
title = "Connections"
unlinkedServices = "Unlinked Services"
[admin.settings.connections.mobileScanner]
description = "Allow users to upload files from mobile devices by scanning a QR code"
enable = "Enable QR Code Upload"
imageResolutionFull = "Full (Original Size)"
imageResolutionReduced = "Reduced (Max 1200px)"
label = "Mobile Phone Upload"
link = "Configure in System Settings"
mobileScannerConvertToPdf = "Convert Images to PDF"
mobileScannerConvertToPdfDesc = "Automatically convert uploaded images to PDF format. If disabled, images will be kept as-is."
mobileScannerImageResolution = "Image Resolution"
mobileScannerImageResolutionDesc = "Resolution of uploaded images. \"Reduced\" scales images to max 1200px to reduce file size."
mobileScannerPageFormat = "Page Format"
mobileScannerPageFormatDesc = "PDF page size for converted images. \"Keep\" uses original image dimensions."
mobileScannerStretchToFit = "Stretch to Fit"
mobileScannerStretchToFitDesc = "Stretch images to fill the entire page. If disabled, images are centered with preserved aspect ratio."
note = "Note: Requires Frontend URL to be configured. "
pageFormatA4 = "A4 (210×297mm)"
pageFormatKeep = "Keep (Original Dimensions)"
pageFormatLetter = "Letter (8.5×11in)"
[admin.settings.connections.oauth2]
label = "OAuth2"
[admin.settings.connections.oauth2.autoCreateUser]
description = "Automatically create user accounts on first OAuth2 login"
label = "Auto Create Users"
[admin.settings.connections.oauth2.blockRegistration]
description = "Prevent new user registration via OAuth2"
label = "Block Registration"
[admin.settings.connections.oauth2.clientId]
description = "The OAuth2 client ID from your provider"
label = "Client ID"
[admin.settings.connections.oauth2.clientSecret]
description = "The OAuth2 client secret from your provider"
label = "Client Secret"
[admin.settings.connections.oauth2.enabled]
description = "Allow users to authenticate using OAuth2 providers"
label = "Enable OAuth2"
[admin.settings.connections.oauth2.issuer]
description = "The OAuth2 provider issuer URL"
label = "Issuer URL"
[admin.settings.connections.oauth2.provider]
description = "The OAuth2 provider to use for authentication"
label = "Provider"
[admin.settings.connections.oauth2.scopes]
description = "Comma-separated list of OAuth2 scopes to request (e.g., openid, profile, email)"
label = "OAuth2 Scopes"
[admin.settings.connections.oauth2.useAsUsername]
description = "The OAuth2 claim to use as the username (e.g., email, sub)"
label = "Use as Username"
[admin.settings.connections.saml2]
label = "SAML2"
[admin.settings.connections.saml2.autoCreateUser]
description = "Automatically create user accounts on first SAML2 login"
label = "Auto Create Users"
[admin.settings.connections.saml2.blockRegistration]
description = "Prevent new user registration via SAML2"
label = "Block Registration"
[admin.settings.connections.saml2.enabled]
description = "Allow users to authenticate using SAML2 providers"
label = "Enable SAML2"
[admin.settings.connections.saml2.provider]
description = "The SAML2 provider name"
label = "Provider"
[admin.settings.connections.saml2.registrationId]
description = "The SAML2 registration identifier"
label = "Registration ID"
[admin.settings.connections.ssoAutoLogin]
description = "Automatically redirect to SSO login when authentication is required"
enable = "Enable SSO Auto Login"
label = "SSO Auto Login"
[admin.settings.database]
actions = "Actions"
backupCreated = "Backup created successfully"
backupDescription = "Manage H2 backups directly from the admin console."
backupFailed = "Failed to create backup"
backupTitle = "Backups & Restore"
chooseFile = "Choose a .sql backup file"
codeMismatch = "Confirmation code does not match"
codeMismatchBody = "Please enter the code exactly as shown to proceed."
configuration = "Database Configuration"
confirmCodeLabel = "Enter the confirmation code to proceed"
confirmImport = "Confirm import"
confirmImportTitle = "Confirm database import"
createBackup = "Create backup"
created = "Created"
delete = "Delete"
deleteConfirm = "Delete this backup? This cannot be undone."
deleteConfirmAction = "Delete backup"
deleteFailed = "Failed to delete backup"
deleteSuccess = "Backup deleted"
deleteTitle = "Delete backup"
description = "Configure custom database connection settings for enterprise deployments."
download = "Download"
downloadFailed = "Failed to download backup"
embedded = "Embedded H2"
enterCode = "Enter the code shown above"
external = "External DB"
fileName = "File"
h2Hint = "Set the database type to H2 and disable custom database to enable backup and restore."
h2Only = "Backups are available only for the embedded H2 database."
import = "Import"
importFailed = "Failed to import backup"
importFromUpload = "Import upload"
importSuccess = "Backup imported successfully"
loadError = "Failed to load database backups"
manageBackups = "Manage backups"
noBackups = "No backups found yet."
overwriteWarning = "Warning: This will overwrite the current database."
overwriteWarningBody = "All existing data will be replaced by the uploaded backup. This action cannot be undone."
refresh = "Refresh"
selectFile = "Please select a .sql file to import"
size = "Size"
title = "Database"
unavailable = "Backup list unavailable for the current database configuration."
uploadTitle = "Upload & import"
version = "H2 Version"
[admin.settings.database.customUrl]
description = "Full JDBC connection string (e.g., jdbc:postgresql://localhost:5432/postgres). If provided, individual connection settings below are not used."
label = "Custom Database URL"
[admin.settings.database.enableCustom]
description = "Use your own custom database configuration instead of the default embedded database"
label = "Enable Custom Database"
[admin.settings.database.hostName]
description = "Database server hostname (not used if custom URL is provided)"
label = "Host Name"
[admin.settings.database.name]
description = "Name of the database (not used if custom URL is provided)"
label = "Database Name"
[admin.settings.database.password]
description = "Database authentication password"
label = "Password"
placeholder = "Enter database password"
[admin.settings.database.port]
description = "Database server port (not used if custom URL is provided)"
label = "Port"
[admin.settings.database.type]
description = "Type of database (not used if custom URL is provided)"
label = "Database Type"
[admin.settings.database.username]
description = "Database authentication username"
label = "Username"
[admin.settings.endpoints]
description = "Control which API endpoints and endpoint groups are available."
management = "Endpoint Management"
title = "API Endpoints"
userDefaults = "User Preference Defaults"
userDefaultsDescription = "Set default values for user preferences. Users can override these in their personal settings."
[admin.settings.endpoints.defaultHideUnavailableConversions]
description = "Remove disabled conversion options instead of showing them grayed out"
label = "Hide unavailable conversions by default"
[admin.settings.endpoints.defaultHideUnavailableTools]
description = "Remove disabled tools instead of showing them grayed out"
label = "Hide unavailable tools by default"
[admin.settings.endpoints.groupsToRemove]
description = "Select endpoint groups to disable"
label = "Disabled Endpoint Groups"
placeholder = "Select groups to disable"
[admin.settings.endpoints.toRemove]
description = "Select individual endpoints to disable"
label = "Disabled Endpoints"
placeholder = "Select endpoints to disable"
[admin.settings.enterpriseRequired]
message = "An Enterprise license is required to access {{featureName}}. You are viewing demo data for reference."
title = "Enterprise License Required"
[admin.settings.features]
description = "Configure optional features and functionality."
title = "Features"
[admin.settings.features.serverCertificate]
description = "Configure server-side certificate generation for \"Sign with Stirling-PDF\" functionality"
label = "Server Certificate"
[admin.settings.features.serverCertificate.enabled]
description = "Enable server-side certificate for \"Sign with Stirling-PDF\" option"
label = "Enable Server Certificate"
[admin.settings.features.serverCertificate.organizationName]
description = "Organization name for generated certificates"
label = "Organization Name"
[admin.settings.features.serverCertificate.regenerateOnStartup]
description = "Generate new certificate on each application startup"
label = "Regenerate on Startup"
[admin.settings.features.serverCertificate.validity]
description = "Number of days the certificate will be valid"
label = "Certificate Validity (days)"
[admin.settings.general]
description = "Configure system-wide application settings including branding and default behavior."
system = "System"
title = "System Settings"
ui = "User Interface"
[admin.settings.general.appName]
description = "The name displayed in the browser tab and home page"
label = "Application Name"
[admin.settings.general.appNameNavbar]
description = "The name displayed in the navigation bar"
label = "Navbar Brand"
[admin.settings.general.customHTMLFiles]
description = "Allow serving custom HTML files from the customFiles directory"
label = "Custom HTML Files"
[admin.settings.general.customMetadata]
label = "Custom Metadata"
[admin.settings.general.customMetadata.author]
description = "Default author for PDF metadata (e.g., username)"
label = "Default Author"
[admin.settings.general.customMetadata.autoUpdate]
description = "Automatically update PDF metadata on all processed documents"
label = "Auto Update Metadata"
[admin.settings.general.customMetadata.creator]
description = "Default creator for PDF metadata"
label = "Default Creator"
[admin.settings.general.customMetadata.producer]
description = "Default producer for PDF metadata"
label = "Default Producer"
[admin.settings.general.customPaths]
description = "Configure custom file system paths for pipeline processing and external tools"
label = "Custom Paths"
[admin.settings.general.customPaths.operations]
label = "External Tool Paths"
[admin.settings.general.customPaths.operations.unoconvert]
description = "Path to LibreOffice unoconvert for document conversions (leave empty for default: /opt/venv/bin/unoconvert)"
label = "Unoconvert Executable"
[admin.settings.general.customPaths.operations.weasyprint]
description = "Path to WeasyPrint executable for HTML to PDF conversion (leave empty for default: /opt/venv/bin/weasyprint)"
label = "WeasyPrint Executable"
[admin.settings.general.customPaths.pipeline]
label = "Pipeline Directories"
[admin.settings.general.customPaths.pipeline.finishedFoldersDir]
description = "Directory where processed PDFs are outputted (leave empty for default: /pipeline/finishedFolders)"
label = "Finished Folders Directory"
[admin.settings.general.customPaths.pipeline.pipelineDir]
description = "Base directory for pipeline resources (leave empty for default: /pipeline)"
label = "Pipeline Directory"
[admin.settings.general.customPaths.pipeline.watchedFoldersDir]
description = "Directory where pipeline monitors for incoming PDFs (leave empty for default: /pipeline/watchedFolders)"
label = "Watched Folders Directory"
[admin.settings.general.customPaths.pipeline.watchedFoldersDirs]
description = "Directories where pipeline monitors for incoming PDFs (one per line or comma-separated; leave empty for default: /pipeline/watchedFolders)"
label = "Watched Folders Directories"
[admin.settings.general.defaultLocale]
description = "The default language for new users (e.g., en_US, es_ES)"
label = "Default Locale"
[admin.settings.general.fileUploadLimit]
description = "Maximum file upload size (e.g., 100MB, 1GB)"
label = "File Upload Limit"
[admin.settings.general.frontendUrl]
description = "Base URL for frontend (e.g., https://pdf.example.com). Used for email invite links and mobile QR code uploads. Leave empty to use backend URL."
label = "Frontend URL"
[admin.settings.general.hideDisabledTools]
description = "Hide disabled tools from the interface"
label = "Hide Disabled Tools"
[admin.settings.general.hideDisabledTools.googleDrive]
description = "Hide Google Drive button when not enabled"
label = "Hide Google Drive"
[admin.settings.general.hideDisabledTools.mobileScanner]
description = "Hide mobile QR scanner button when not enabled"
label = "Hide Mobile Scanner"
[admin.settings.general.homeDescription]
description = "The description text shown on the home page"
label = "Home Description"
[admin.settings.general.languages]
description = "Languages that users can select from (leave empty to enable all languages)"
label = "Available Languages"
placeholder = "Select languages"
[admin.settings.general.logoStyle]
classic = "Classic"
classicAlt = "Classic logo"
description = "Set the default logo style for all users on this server. Users can override this setting in their personal preferences."
label = "Logo Style"
modern = "Modern"
modernAlt = "Modern logo"
[admin.settings.general.showUpdate]
description = "Display notifications when a new version is available"
label = "Show Update Notifications"
[admin.settings.general.showUpdateOnlyAdmin]
description = "Restrict update notifications to admin users only"
label = "Show Updates to Admins Only"
[admin.settings.legal]
description = "Configure links to legal documents and policies."
title = "Legal Documents"
[admin.settings.legal.accessibilityStatement]
description = "URL or filename to accessibility statement"
label = "Accessibility Statement"
[admin.settings.legal.cookiePolicy]
description = "URL or filename to cookie policy"
label = "Cookie Policy"
[admin.settings.legal.disclaimer]
message = "By customizing these legal documents, you assume full responsibility for ensuring compliance with all applicable laws and regulations, including but not limited to GDPR and other EU data protection requirements. Only modify these settings if: (1) you are operating a personal/private instance, (2) you are outside EU jurisdiction and understand your local legal obligations, or (3) you have obtained proper legal counsel and accept sole responsibility for all user data and legal compliance. Stirling-PDF and its developers assume no liability for your legal obligations."
title = "Legal Responsibility Warning"
[admin.settings.legal.impressum]
description = "URL or filename to impressum (required in some jurisdictions)"
label = "Impressum"
[admin.settings.legal.loginAgreement]
defaultLocaleHint = "— used as the fallback when a language has no file."
defaultLocaleLink = "Configure the default locale"
description = "Show a disclaimer users must accept after logging in. The text follows each user's language."
discardConfirm = "You have unsaved changes that will be lost. Switch language anyway?"
editLabel = "Markdown"
emptyPreview = "Nothing to preview yet."
language = "Language"
languageHelp = "Each language has its own file. If a user's language has no file, the agreement falls back to the default locale's file, then to the fallback text."
loadError = "Failed to load the agreement for {{locale}}. Switch language and back to retry."
previewLabel = "Preview"
restartNote = "Enabling or disabling the agreement applies after a restart, like other settings. Text edits below apply immediately."
save = "Save text"
saved = "Saved"
savedBody = "Login agreement updated for {{locale}}"
textDescription = "Saved to customFiles/disclaimer/{{locale}}.md and shown live on the next login. Leave blank to remove this language."
title = "Login Agreement"
[admin.settings.legal.loginAgreement.anonymous]
label = "Show in anonymous (no-login) mode"
[admin.settings.legal.loginAgreement.enabled]
label = "Enable login agreement"
[admin.settings.legal.privacyPolicy]
description = "URL or filename to privacy policy"
label = "Privacy Policy"
[admin.settings.legal.termsAndConditions]
description = "URL or filename to terms and conditions"
label = "Terms and Conditions"
[admin.settings.loginDisabled]
message = "Login mode must be enabled to modify admin settings. Please set SECURITY_ENABLELOGIN=true in your environment or security.enableLogin: true in settings.yml, then restart the server."
readOnly = "The settings below show example values for reference. Enable login mode to view and edit actual configuration."
title = "Login Mode Required"
[admin.settings.mail]
description = "Configure SMTP settings for sending email notifications."
smtp = "SMTP Configuration"
title = "Mail Server"
[admin.settings.mail.enabled]
description = "Enable email notifications and SMTP functionality"
label = "Enable Mail"
[admin.settings.mail.enableInvites]
description = "Allow admins to invite users via email with auto-generated passwords"
label = "Enable Email Invites"
[admin.settings.mail.from]
description = "The email address to use as the sender"
label = "From Address"
[admin.settings.mail.frontendUrl]
description = "Base URL for frontend (e.g. https://pdf.example.com). Used for generating invite links in emails. Leave empty to use backend URL."
label = "Frontend URL"
[admin.settings.mail.frontendUrlNote]
link = "Configure in System Settings"
note = "Note: Requires Frontend URL to be configured. "
[admin.settings.mail.host]
description = "The hostname or IP address of your SMTP server"
label = "SMTP Host"
[admin.settings.mail.password]
description = "Password for SMTP authentication"
label = "SMTP Password"
placeholder = "Enter SMTP password"
[admin.settings.mail.port]
description = "The port number for SMTP connection (typically 25, 465, or 587)"
label = "SMTP Port"
[admin.settings.mail.username]
description = "Username for SMTP authentication"
label = "SMTP Username"
[admin.settings.mcp]
apikeyNote = "Clients send a Stirling API key in the X-API-KEY header (or Authorization: Bearer <key>). The key maps to its owning Stirling user - only provisioned accounts get in, and actions are audited as that user. Manage keys under Account > API Keys."
description = "Expose Stirling's PDF tools and AI agents to MCP clients over an OAuth-protected endpoint."
title = "MCP Server"
[admin.settings.mcp.acceptedAudiences]
description = "Extra token audience values accepted besides the Resource ID (comma or space separated). Leave blank for strict RFC 8707. Needed for IdPs that cannot mint resource audiences - e.g. Supabase's OAuth server always issues aud=authenticated."
label = "Additional accepted audiences (optional)"
[admin.settings.mcp.allowedOps]
description = "If set, ONLY these operation ids are exposed (an allow-list; comma or space separated). Leave blank to expose all enabled tools except any blocked below."
label = "Allowed tools"
[admin.settings.mcp.blockedOps]
description = "Operation ids to hide from MCP (comma or space separated), e.g. add-password remove-password. Leave blank to expose all enabled tools."
label = "Blocked tools"
[admin.settings.mcp.enabled]
description = "When off (default), no /mcp endpoint, metadata, or MCP beans are loaded."
label = "Enable MCP Server"
[admin.settings.mcp.guide]
step1 = "Enter your OAuth issuer + resource ID above, Save, and restart."
step1ApiKey = "Create an API key under Account > API Keys (each user uses their own)."
step2 = "In your MCP client add a"
step2b = "server pointing at:"
step3 = "The client auto-discovers OAuth from:"
step3ApiKey = "Send the key in an"
step3ApiKeyb = "header (or Authorization: Bearer <key>). No OAuth or metadata discovery is used."
step4 = "Approve the sign-in; the client retries with a token. Tools appear grouped: convert, pages, misc, security, ai."
step4ApiKey = "Tools appear grouped: convert, pages, misc, security, ai - and every call is audited as the key's owner."
tip = "Tip: register the resource ID as an allowed audience in your IdP. Tested with MCP Inspector and Claude Desktop."
tipApiKey = "Tip: API-key mode needs no external IdP - simplest for self-host. The key maps to its owning Stirling user."
title = "Connect an MCP client"
[admin.settings.mcp.issuerUri]
description = "Your OAuth2 authorization server (must publish /.well-known/openid-configuration). Required when enabled."
label = "OAuth Issuer URL"
[admin.settings.mcp.jwksUri]
description = "Leave blank to discover it from the issuer. Set only if your IdP serves keys at a non-standard URL."
label = "JWKS URL (optional)"
placeholder = "Auto-discovered from issuer"
[admin.settings.mcp.mode]
description = "OAuth needs an external IdP. API key uses a Stirling per-user API key (X-API-KEY) - simplest for self-host."
label = "Authentication mode"
[admin.settings.mcp.requireAccount]
description = "Only let tokens through if their subject maps to a provisioned, enabled Stirling user."
label = "Require an existing Stirling account"
[admin.settings.mcp.resourceId]
description = "This server's public /mcp URL. Tokens must list it in their audience (RFC 8707) or they are rejected."
label = "Resource ID"
[admin.settings.mcp.scopes]
description = "Require mcp.tools.read for read ops and mcp.tools.write for write/AI ops."
label = "Enforce OAuth scopes"
[admin.settings.mcp.usernameClaim]
description = "JWT claim matched against a Stirling username (e.g. sub, email, preferred_username)."
label = "Username claim"
[admin.settings.plan.noData]
message = "Plans data is not available at the moment."
title = "No data available"
[admin.settings.premium]
description = "Configure your premium or enterprise license key."
license = "License Configuration"
noInput = "Please provide a license key or file"
title = "Premium & Enterprise"
[admin.settings.premium.currentLicense]
file = "Source: License file ({{path}})"
key = "Source: License key"
noInput = "Please provide a license key or upload a certificate file"
success = "Success"
title = "Active License"
type = "Type: {{type}}"
[admin.settings.premium.enabled]
description = "Enable license key checks for pro/enterprise features"
label = "Enable Premium Features"
[admin.settings.premium.file]
choose = "Choose License File"
description = "Upload your .lic or .cert license file from offline purchases"
label = "License Certificate File"
selected = "Selected: {{filename}} ({{size}})"
successMessage = "License file uploaded and activated successfully. No restart required."
[admin.settings.premium.inputMethod]
file = "Certificate File"
text = "License Key"
[admin.settings.premium.key]
description = "Enter your premium or enterprise license key. Premium features will be automatically enabled when a key is provided."
label = "License Key"
success = "License Key Saved"
successMessage = "Your license key has been activated successfully. No restart required."
[admin.settings.premium.key.overwriteWarning]
line1 = "Overwriting your current license key cannot be undone."
line2 = "Your previous license will be permanently lost unless you have backed it up elsewhere."
line3 = "Important: Keep license keys private and secure. Never share them publicly."
title = "⚠️ Warning: Existing License Detected"
[admin.settings.premium.licenseKey]
info = "If you have a license key or certificate file from a direct purchase, you can enter it here to activate premium or enterprise features."
toggle = "Got a license key or certificate file?"
[admin.settings.premium.movedFeatures]
auditLogging = "<0>Audit Logging</0> (ENTERPRISE) - Security"
customMetadata = "<0>Custom Metadata</0> (PRO) - General"
databaseConfiguration = "<0>Database Configuration</0> (ENTERPRISE) - Database"
message = "Premium and Enterprise features are now organized in their respective sections:"
title = "Premium Features Distributed"
[admin.settings.privacy]
analytics = "Analytics & Tracking"
description = "Configure privacy and data collection settings."
searchEngine = "Search Engine Visibility"
title = "Privacy"
[admin.settings.privacy.enableAnalytics]
description = "Collect anonymous usage analytics to help improve the application"
label = "Enable Analytics"
[admin.settings.privacy.googleVisibility]
description = "Allow search engines to index this application"
label = "Google Visibility"
[admin.settings.privacy.metricsEnabled]
description = "Enable collection of performance and usage metrics. Provides API endpoint for admins to access metrics data"
label = "Enable Metrics"
[admin.settings.restart]
later = "Restart Later"
message = "Settings have been saved successfully. A server restart is required for the changes to take effect."
now = "Restart Now"
question = "Would you like to restart the server now or later?"
title = "Restart Required"
[admin.settings.security]
authentication = "Authentication"
description = "Configure authentication, login behavior, and security policies."
title = "Security"
[admin.settings.security.audit]
hideDetails = "Hide audit level details"
label = "Audit Logging"
showDetails = "Show audit level details"
[admin.settings.security.audit.advancedOptions]
description = "The following options increase processing time and memory usage. Enable only if truly needed."
title = "Advanced Options"
[admin.settings.security.audit.captureFileHash]
description = "Extract SHA-256 hash of uploaded PDF files for integrity verification. Independent of audit level."
label = "Capture File Hash (SHA-256)"
[admin.settings.security.audit.captureOperationResults]
description = "Capture method return values. Not recommended: significantly increases log volume and disk usage."
label = "Capture Operation Results"
[admin.settings.security.audit.capturePdfAuthor]
description = "Extract author field from PDF documents during processing. Requires PDF parsing, increases latency. Independent of audit level."
label = "Capture PDF Author Metadata"
[admin.settings.security.audit.enabled]
description = "Track user actions and system events for compliance and security monitoring"
label = "Enable Audit Logging"
[admin.settings.security.audit.level]
description = "Audit Level: OFF (0) = no logging | BASIC (1) = file modifications (compress/split/merge/etc) & settings | STANDARD (2) = file operations + user actions | VERBOSE (3) = all requests including polling. Higher levels include all events from lower levels."
label = "Audit Level"
[admin.settings.security.audit.levelDetails]
basic = "PDF file operations (compress, split, merge, etc.) and settings changes. Captures: operation status (success/failure), method parameters, timing. Minimal log volume."
off = "No audit logging (except critical security events)"
standard = "BASIC events plus: user login/logout, account changes, general GET requests. Excludes continuous polling calls (/auth/me, /app-config, /health, etc.) to reduce log noise. Ideal for most deployments."
verbose = "STANDARD events plus: continuous polling calls, all GET requests, detailed timing. Warning: high log volume and performance impact."
[admin.settings.security.audit.retentionDays]
description = "Number of days to retain audit logs (0 = infinite retention)"
label = "Audit Retention (days)"
[admin.settings.security.csrfDisabled]
description = "Disable Cross-Site Request Forgery protection (not recommended)"
label = "Disable CSRF Protection"
[admin.settings.security.enableLogin]
description = "Require users to log in before accessing the application"
label = "Enable Login"
[admin.settings.security.htmlUrlSecurity]
advanced = "Advanced Settings"
description = "Configure URL access restrictions for HTML processing to prevent SSRF attacks"
label = "HTML URL Security"
networkBlocking = "Network Blocking"
[admin.settings.security.htmlUrlSecurity.allowedDomains]
description = "One domain per line (e.g., cdn.example.com). Only these domains allowed when level is MAX"
label = "Allowed Domains (Whitelist)"
[admin.settings.security.htmlUrlSecurity.blockCloudMetadata]
description = "Block cloud provider metadata endpoints (169.254.169.254)"
label = "Block Cloud Metadata Endpoints"
[admin.settings.security.htmlUrlSecurity.blockedDomains]
description = "One domain per line (e.g., malicious.com). Additional domains to block"
label = "Blocked Domains (Blacklist)"
[admin.settings.security.htmlUrlSecurity.blockLinkLocal]
description = "Block link-local addresses (169.254.x.x, fe80::/10)"
label = "Block Link-Local Addresses"
[admin.settings.security.htmlUrlSecurity.blockLocalhost]
description = "Block localhost and loopback addresses (127.x.x.x, ::1)"
label = "Block Localhost"
[admin.settings.security.htmlUrlSecurity.blockPrivateNetworks]
description = "Block RFC 1918 private networks (10.x.x.x, 192.168.x.x, 172.16-31.x.x)"
label = "Block Private Networks"
[admin.settings.security.htmlUrlSecurity.enabled]
description = "Enable URL security restrictions for HTML to PDF conversions"
label = "Enable URL Security"
[admin.settings.security.htmlUrlSecurity.internalTlds]
description = "One TLD per line (e.g., .local, .internal). Block domains with these TLD patterns"
label = "Internal TLDs"
[admin.settings.security.htmlUrlSecurity.level]
description = "MAX: whitelist only, MEDIUM: block internal networks, OFF: no restrictions"
label = "Security Level"
max = "Maximum (Whitelist Only)"
medium = "Medium (Block Internal)"
off = "Off (No Restrictions)"
[admin.settings.security.initialLogin]
label = "Initial Login"
[admin.settings.security.initialLogin.password]
description = "The password for the initial admin account"
label = "Initial Password"
[admin.settings.security.initialLogin.username]
description = "The username for the initial admin account"
label = "Initial Username"
[admin.settings.security.jwt]
label = "JWT Configuration"
[admin.settings.security.jwt.allowedClockSkewSeconds]
description = "Tolerance for client/server time drift during token validation (default: 60 seconds)"
label = "Clock Skew Tolerance (seconds)"
[admin.settings.security.jwt.desktopTokenExpiryMinutes]
description = "Access token lifetime in minutes for desktop clients. Desktop apps automatically detected via User-Agent and receive longer sessions for better UX (default: 43200 = 30 days)"
label = "Desktop Token Expiry (minutes)"
[admin.settings.security.jwt.enableKeyCleanup]
description = "Automatically remove expired JWT keys"
label = "Enable Key Cleanup"
[admin.settings.security.jwt.enableKeyRotation]
description = "Automatically rotate JWT signing keys periodically"
label = "Enable Key Rotation"
[admin.settings.security.jwt.persistence]
description = "Store JWT keys persistently to survive server restarts"
label = "Enable Key Persistence"
[admin.settings.security.jwt.refreshGraceMinutes]
description = "Allow token refresh within this many minutes after expiry (default: 15 minutes, max 3 attempts)"
label = "Refresh Grace Period (minutes)"
[admin.settings.security.jwt.secureCookie]
description = "Require HTTPS for JWT cookies (recommended for production)"
label = "Secure Cookie"
[admin.settings.security.jwt.tokenExpiryMinutes]
description = "Access token lifetime in minutes for web clients (default: 1440 = 24 hours)"
label = "Web Token Expiry (minutes)"
[admin.settings.security.loginAttemptCount]
description = "Maximum number of failed login attempts before account lockout"
label = "Login Attempt Limit"
[admin.settings.security.loginMethod]
all = "All Methods"
description = "The authentication method to use for user login"
label = "Login Method"
normal = "Username/Password Only"
oauth2 = "OAuth2 Only"
saml2 = "SAML2 Only"
[admin.settings.security.loginResetTimeMinutes]
description = "Time before failed login attempts are reset"
label = "Login Reset Time (minutes)"
[admin.settings.security.ssoNotice]
message = "OAuth2 and SAML2 authentication providers have been moved to the Connections menu for easier management."
title = "Looking for SSO/SAML settings?"
[admin.settings.security.xFrameOptions]
deny = "Deny (Prevents all framing)"
description = "Controls whether the application can be embedded in iframes"
disabled = "Disabled (No X-Frame-Options header)"
label = "X-Frame-Options"
sameorigin = "Same Origin (Allow framing from same domain)"
[admin.settings.storage]
description = "Control server storage and sharing options."
title = "File Storage & Sharing"
[admin.settings.storage.enabled]
description = "Allow users to store files on the server."
label = "Enable Server File Storage"
[admin.settings.storage.sharing.email]
description = "Allow sharing with email addresses."
label = "Enable Email Sharing"
mailLink = "Configure Mail Settings"
mailNote = "Requires mail configuration. "
[admin.settings.storage.sharing.enabled]
description = "Allow users to share stored files."
label = "Enable Sharing"
[admin.settings.storage.sharing.links]
description = "Allow sharing via signed-in links."
frontendUrlLink = "Configure in System Settings"
frontendUrlNote = "Requires a Frontend URL. "
label = "Enable Share Links"
[admin.settings.storage.signing.enabled]
description = "Allow users to create multi-participant document signing sessions. Requires server file storage to be enabled."
label = "Enable Group Signing (Alpha)"
[admin.settings.telegram]
description = "Configure Telegram bot connectivity, access controls, and feedback behavior."
title = "Telegram Bot"
[admin.settings.telegram.accessControl]
description = "Restrict which users or channels can interact with the bot."
title = "Access Control"
[admin.settings.telegram.allowChannelIDs]
description = "Enter Telegram channel IDs allowed to interact with the bot."
label = "Allowed Channel IDs"
placeholder = "Add channel ID and press enter"
[admin.settings.telegram.allowUserIDs]
description = "Enter Telegram user IDs allowed to interact with the bot."
label = "Allowed User IDs"
placeholder = "Add user ID and press enter"
[admin.settings.telegram.botToken]
description = "API token provided by BotFather for your Telegram bot."
label = "Bot Token"
[admin.settings.telegram.botUsername]
description = "The public username of your Telegram bot."
label = "Bot Username"
[admin.settings.telegram.customFolderSuffix]
description = "Append the chat ID to incoming file folders to isolate uploads per chat."
label = "Use Custom Folder Suffix"
[admin.settings.telegram.enableAllowChannelIDs]
description = "When enabled, only listed channel IDs can use the bot."
label = "Allow Specific Channel IDs"
[admin.settings.telegram.enableAllowUserIDs]
description = "When enabled, only listed user IDs can use the bot."
label = "Allow Specific User IDs"
[admin.settings.telegram.enabled]
description = "Allow users to interact with Stirling PDF through your configured Telegram bot."
label = "Enable Telegram Bot"
[admin.settings.telegram.feedback]
description = "Choose when the bot should send feedback to users and channels."
title = "Feedback Messages"
[admin.settings.telegram.feedback.channel]
title = "Channel Feedback Rules"
[admin.settings.telegram.feedback.channel.errorMessage]
description = "Show detailed error messages for channels."
label = "Show error messages (Channel)"
[admin.settings.telegram.feedback.channel.errorProcessing]
description = "Send processing error messages to channels."
label = "Show processing errors (Channel)"
[admin.settings.telegram.feedback.channel.noValidDocument]
description = "Suppress the no valid document response for channel uploads."
label = "Show \"No valid document\" (Channel)"
[admin.settings.telegram.feedback.general.enabled]
description = "Control whether the bot sends feedback messages at all."
label = "Enable Feedback"
[admin.settings.telegram.feedback.user]
title = "User Feedback Rules"
[admin.settings.telegram.feedback.user.errorMessage]
description = "Show detailed error messages for users."
label = "Show error messages (User)"
[admin.settings.telegram.feedback.user.errorProcessing]
description = "Send processing error messages to users."
label = "Show processing errors (User)"
[admin.settings.telegram.feedback.user.noValidDocument]
description = "Suppress the no valid document response for user uploads."
label = "Show \"No valid document\" (User)"
[admin.settings.telegram.pipelineInboxFolder]
description = "Folder under the pipeline directory where incoming Telegram files are stored."
label = "Inbox Folder"
[admin.settings.telegram.pollingIntervalMillis]
description = "Interval between checks for new Telegram updates."
label = "Polling Interval (ms)"
[admin.settings.telegram.processing]
description = "Control polling intervals and processing timeouts for Telegram uploads."
title = "Processing"
[admin.settings.telegram.processingTimeoutSeconds]
description = "Maximum time to wait for a processing job before reporting an error."
label = "Processing Timeout (seconds)"
[admin.settings.unsavedChanges]
cancel = "Keep Editing"
discard = "Discard Changes"
hint = "You have unsaved changes"
message = "You have unsaved changes. Do you want to discard them?"
title = "Unsaved Changes"
[adminOnboarding]
adminTools = "Finally, we have advanced administration tools like <strong>Auditing</strong> to track system activity and <strong>Usage Analytics</strong> to monitor how your users interact with the platform."
configButton = "Open <strong>Settings</strong> to access all system configuration and administrative controls."
connectionsSection = "The <strong>Connections</strong> section supports various login methods including custom SSO and SAML providers like Google and GitHub, plus email integrations for notifications and communications."
databaseSection = "For advanced production environments, we have settings to allow <strong>external database hookups</strong> so you can integrate with your existing infrastructure."
settingsOverview = "This is the <strong>Settings Panel</strong>. Admin settings are organized by category for easy navigation."
systemCustomization = "We have extensive ways to customize the UI: <strong>System Settings</strong> let you change the app name and languages, <strong>Features</strong> allows server certificate management, and <strong>Endpoints</strong> lets you enable or disable specific tools for your users."
teamsAndUsers = "Manage <strong>Teams</strong> and individual users here. You can invite new users via email, shareable links, or create custom accounts for them yourself."
welcome = "Welcome to the <strong>Admin Tour</strong>! Let's explore the powerful enterprise features and settings available to system administrators."
wrapUp = "That's the admin tour! You've seen the enterprise features that make Stirling PDF a powerful, customizable solution for organizations. You can replay it anytime - just open <strong>Settings</strong> and find it here in the <strong>Tours</strong> section under Help."
[adminUserSettings]
admin = "Admin"
title = "User Control Settings"
[agents]
stirling_name = "Stirling"
[analytics]
learnMore = "Learn more about our analytics"
paragraph1 = "Stirling PDF has opt-in analytics to help us improve the product. We do not track any personal information or file contents."
paragraph2 = "Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better."
title = "Do you want to help make Stirling PDF better?"
[annotate]
tags = "annotate,highlight,draw,markup,comment,notes,review,redline,feedback,markup tools,sticky notes,shapes,arrows,text box,freehand"
[annotation]
alignCenter = "Align center"
alignLeft = "Align left"
alignRight = "Align right"
annotationStyle = "Annotation style"
backgroundColor = "Background color"
borderOff = "Border: Off"
borderOn = "Border: On"
changeColor = "Change Color"
chooseColor = "Choose color"
circle = "Circle"
clearBackground = "Remove background"
clearDocumentAnnotations = "Clear all annotations"
clearDocumentAnnotationsConfirm = "Clear all"
clearDocumentAnnotationsDescription = "This removes all annotations currently loaded in the editor. Please save changes to persist this in the PDF."
clearDocumentAnnotationsEmptyBody = "There are no annotations currently loaded in the editor."
clearDocumentAnnotationsEmptyTitle = "No annotations to clear"
clearDocumentAnnotationsErrorTitle = "Could not clear annotations"
clearDocumentAnnotationsSuccessBody = "Please save changes to persist the annotation removal in the PDF."
clearDocumentAnnotationsSuccessTitle = "All annotations cleared"
clearDocumentAnnotationsTitle = "Clear all annotations?"
clearDocumentAnnotationsUnavailableBody = "The annotation layer is still loading. Try again in a moment."
clearDocumentAnnotationsUnavailableTitle = "Annotations are not ready"
color = "Color"
comment = "Comment"
comments = "Comments"
contents = "Text"
delete = "Delete"
drawing = "Drawing"
editSelectDescription = "Click an existing annotation to edit its color, opacity, text, or size."
editText = "Edit"
fillColor = "Fill Color"
fillOpacity = "Fill Opacity"
fontSize = "Font size"
freehandHighlighter = "Freehand Highlighter"
highlight = "Highlight"
imagePreview = "Preview"
insertText = "Insert Text"
line = "Line"
lineArrow = "Arrow"
moreActions = "More actions"
noBackground = "No background"
note = "Note"
notesStamps = "Notes & Stamps"
opacity = "Opacity"
pen = "Pen"
polygon = "Polygon"
polyline = "Polyline"
properties = "Properties"
rectangle = "Rectangle"
replaceText = "Replace Text"
saveChanges = "Save Changes"
select = "Select"
selectAndMove = "Select and Edit"
settings = "Settings"
shapes = "Shapes"
square = "Square"
squiggly = "Squiggly"
stamp = "Add Image"
stampSettings = "Stamp Settings"
strikeout = "Strikeout"
strokeColor = "Stroke Color"
strokeOpacity = "Stroke Opacity"
strokeWidth = "Width"
text = "Text box"
textAlignment = "Text Alignment"
textMarkup = "Text Markup"
title = "Annotate"
underline = "Underline"
width = "Width"
[app]
description = "The Free Adobe Acrobat alternative (10M+ Downloads)"
[attachments]
convertToPdfA3b = "Convert to PDF/A-3b"
convertToPdfA3bDescription = "Creates an archival PDF with embedded attachments"
convertToPdfA3bTooltip = "PDF/A-3b is an archival format ensuring long-term preservation. It allows embedding arbitrary file formats as attachments. Conversion requires Ghostscript and may take longer for large files."
convertToPdfA3bTooltipHeader = "About PDF/A-3b Conversion"
convertToPdfA3bTooltipTitle = "What it does"
tags = "attachments,add,remove,embed,file"
title = "Add Attachments"
[audit]
configureAudit = "Configure Audit Logging"
configureAuditMessage = "Adjust audit logging level, retention period, and other settings in the Security & Authentication section."
disabled = "Audit logging is disabled"
disabledMessage = "Enable audit logging in your application configuration to track system events."
enterpriseRequired = "Enterprise License Required"
enterpriseRequiredMessage = "The audit logging system is an enterprise feature. Please upgrade to an enterprise license to access audit logs and analytics."
goToSettings = "Go to Audit Settings"
notAvailable = "Audit system not available"
notAvailableMessage = "The audit system is not configured or not available."
[audit.charts]
byType = "Events by Type"
byUser = "Top Users"
day = "Day"
error = "Error loading charts"
month = "Month"
noData = "No data for this period"
overTime = "Events Over Time"
title = "Audit Dashboard"
week = "Week"
[audit.clearData]
cancel = "Cancel"
codeDoesNotMatch = "Code does not match"
codePlaceholder = "Type the code here"
confirmationCode = "Confirmation Code"
confirmationRequired = "Delete All Audit Data"
confirmMessage = "This will permanently remove all audit logs. Enter the confirmation code below to proceed."
confirmTitle = "Please confirm you want to delete"
deleteButton = "Delete"
enterCode = "Confirmation Code"
enterCodeBelow = "Enter the code exactly as shown above (case-sensitive)"
initiateDelete = "Delete All Data"
irreversible = "IRREVERSIBLE"
success = "Success"
successMessage = "All audit data has been cleared successfully"
warning1 = "This action cannot be undone"
warning2 = "Deleting audit data will permanently remove all historical audit logs, including security events, user activities, and file operations from the database."
[audit.error]
title = "Error loading audit system"
[audit.events]
actions = "Actions"
author = "Author"
clearFilters = "Clear"
details = "Details"
documentName = "Document"
endDate = "End date"
error = "Error loading events"
eventDetails = "Event Details"
fileHash = "File Hash"
filterByType = "Filter by type"
filterByUser = "Filter by user"
ipAddress = "IP Address"
noEvents = "No events found"
startDate = "Start date"
timestamp = "Timestamp"
title = "Audit Events"
type = "Type"
user = "User"
viewDetails = "View Details"
[audit.export]
description = "Export audit events to CSV or JSON format. Use filters to limit the exported data."
error = "Failed to export data"
exportButton = "Export Data"
fieldAuthor = "Author (from PDF)"
fieldDate = "Date"
fieldDocumentName = "Document Name"
fieldFileHash = "File Hash (SHA-256)"
fieldIpAddress = "IP Address"
fieldOperationResults = "Operation Results"
fieldOutcome = "Outcome (Success/Failure)"
fieldTool = "Tool"
fieldUsername = "Username"
filters = "Filters (Optional)"
format = "Export Format"
selectFields = "Select Fields to Include"
title = "Export Audit Data"
[audit.filters]
last30Days = "Last 30 days"
last7Days = "Last 7 days"
quickPresets = "Quick filters"
thisMonth = "This month"
today = "Today"
[audit.stats]
activeUsers = "Active Users"
attention = "Attention needed"
avgLatency = "Avg Latency"
error = "Error loading statistics"
excellent = "Excellent"
good = "Good"
noData = "N/A"
successRate = "Success Rate"
totalEvents = "Total Events"
vsLastPeriod = "vs last period"
[audit.systemStatus]
captureBySettings = "Enable in settings"
capturedFields = "Captured Fields"
date = "Date"
days = "days"
disabled = "Disabled"
documentName = "Document Name"
enabled = "Enabled"
fileHash = "File Hash"
level = "Audit Level"
pdfAuthor = "PDF Author"
retention = "Retention Period"
status = "Audit Logging"
title = "System Status"
tool = "Tool"
totalEvents = "Total Events"
username = "Username"
[audit.tabs]
clearData = "Clear Data"
dashboard = "Dashboard"
events = "Audit Events"
export = "Export"
[auth]
accessDenied = "Access Denied"
insufficientPermissions = "You do not have permission to perform this action."
[auth.callback]
completing = "Completing authentication"
invalidToken = "OAuth login failed - invalid token."
missingToken = "OAuth login failed - no token received."
oauthFailed = "OAuth login failed. Please try again."
pleaseWait = "Please wait while we finish signing you in."
signedOut = "You have been signed out. Please sign in again."
windowMayClose = "You can close this window once it completes."
[auth.displayName]
guest = "Guest"
user = "User"
[auto-rename]
description = "Automatically finds the title from your PDF content and uses it as the filename."
submit = "Auto Rename"
tags = "auto-detect,header-based,organize,relabel"
title = "Auto Rename"
[auto-rename.error]
failed = "An error occurred while auto-renaming the PDF."
[auto-rename.results]
title = "Auto-Rename Results"
[auto-rename.settings]
title = "About"
[auto-rename.tooltip.description]
title = "What it does"
[auto-rename.tooltip.header]
title = "How Auto-Rename Works"
[auto-rename.tooltip.howItWorks]
bullet1 = "Looks for text that appears to be a title or heading"
bullet2 = "Creates a clean, valid filename from the detected title"
bullet3 = "Keeps the original name if no suitable title is found"
title = "Smart Renaming"
[automate]
copyToSaved = "Copy to Saved"
desc = "Build multi-step workflows by chaining together PDF actions. Ideal for recurring tasks."
export = "Export"
exportForFolderScanning = "Export for Folder Scanning"
import = "Import"
importPartialSuccess_one = "Imported with {{count}} unmapped operation: {{ops}}"
importPartialSuccess_other = "Imported with {{count}} unmapped operations: {{ops}}"
importSuccess = "Imported automation: {{name}}"
invalidStep = "Invalid step"
reviewTitle = "Automation Results"
tags = "workflow,sequence,automation,automate,batch,batch processing,pipeline,chain,multi-step,recurring,scheduled,automatic,process multiple,bulk operations"
title = "Automate"
[automate.config]
cancel = "Cancel"
description = "Configure the settings for this tool. These settings will be applied when the automation runs."
noSettings = "This tool does not have configurable settings."
save = "Save Configuration"
title = "Configure {{toolName}}"
[automate.creation]
createTitle = "Create Automation"
editTitle = "Edit Automation"
export = "Export"
exportForFolderScanning = "Export for Folder Scanning"
intro = "Automations run tools sequentially. To get started, add tools in the order you want them to run."
save = "Save Automation"
[automate.creation.description]
label = "Description (optional)"
placeholder = "Describe what this automation does..."
[automate.creation.icon]
label = "Icon"
[automate.creation.name]
label = "Automation Name"
placeholder = "My Automation"
[automate.creation.tools]
add = "Add a tool..."
addTool = "Add Tool"
configure = "Configure tool"
notConfigured = "! Not Configured"
remove = "Remove tool"
selected = "Selected Tools"
selectTool = "Select a tool..."
[automate.creation.unsavedChanges]
cancel = "Cancel"
confirm = "Go Back"
message = "You have unsaved changes. Are you sure you want to go back? All changes will be lost."
title = "Unsaved Changes"
[automate.entryMenu]
label = "Open menu for {{title}}"
[automate.importModal]
cancel = "Cancel"
confirm = "Import"
detectedAutomation = "Automate JSON"
detectedFolderScan = "Folder Scanning JSON"
dropHint = "Drop JSON here or click to choose a file"
dropSubhint = "Both Automate and Folder Scanning configs are accepted"
dropzoneAriaLabel = "Drop an automation JSON file here"
intro = "Drop a JSON file or paste its contents below. The format (Automate or Folder Scanning) is detected automatically."
opCount_one = "{{count}} operation"
opCount_other = "{{count}} operations"
parseError = "Could not parse: {{message}}"
pasteLabel = "Or paste JSON"
pastePlaceholder = "Paste your automation JSON here…"
title = "Import automation"
unresolved = "Unmapped: {{ops}}"
[automate.run]
title = "Run Automation"
[automate.selection]
title = "Automation Selection"
[automate.selection.createNew]
title = "Create New Automation"
[automate.selection.saved]
title = "Saved"
[automate.selection.suggested]
title = "Suggested"
[automate.sequence]
finish = "Finish"
run = "Run Automation"
running = "Running Automation..."
steps_one = "{{count}} step"
steps_other = "{{count}} steps"
unnamed = "Unnamed Automation"
[automation.suggested]
emailPreparation = "Email Preparation"
emailPreparationDesc = "Optimizes PDFs for email distribution by compressing files, splitting large documents into 20MB chunks for email compatibility, and removing metadata for privacy."
prePublishSanitization = "Pre-publish Sanitization"
prePublishSanitizationDesc = "Sanitization workflow that removes all hidden metadata, JavaScript, embedded files, annotations, and flattens forms to prevent data leakage before publishing PDFs online."
processImages = "Process Images"
processImagesDesc = "Converts multiple image files into a single PDF document, then applies OCR technology to extract searchable text from the images."
securePdfIngestion = "Secure PDF Ingestion"
securePdfIngestionDesc = "Comprehensive PDF processing workflow that sanitizes documents, applies OCR with cleanup, converts to PDF/A format for long-term archival, and optimizes file size."
secureWorkflow = "Security Workflow"
secureWorkflowDesc = "Secures PDF documents by removing potentially malicious content like JavaScript and embedded files, then adds password protection to prevent unauthorized access. Password is set to 'password' by default."
[autoRename]
description = "This tool will automatically rename PDF files based on their content. It analyzes the document to find the most suitable title from the text."
tags = "auto-detect,header-based,organize,relabel,auto rename,automatic rename,smart rename,rename by content,filename,file naming,detect title"
[autoSizeSplitPDF]
tags = "pdf,split,document,organization"
[autoSplitPDF]
dividerDownload2 = "Download 'Auto Splitter Divider (with instructions).pdf'"
duplexMode = "Duplex Mode (Front and back scanning)"
tags = "QR-based,separate,scan-segment,organize"
title = "Auto Split PDF"
[backendHealth]
checking = "Checking backend status..."
offline = "Backend Offline"
online = "Backend Online"
starting = "Backend starting up..."
wait = "Please wait for the backend to finish launching and try again."
[backendStartup]
notFoundTitle = "Backend not found"
retry = "Retry"
unreachable = "The application cannot currently connect to the backend. Verify the backend status and network connectivity, then try again."
[billing]
basedOnUsers = "(current users)"
currentSeats = "Current Seats"
manageBilling = "Manage Billing"
minimumSeats = "Minimum Seats"
newSeatCount = "New Seat Count"
newSeatCountDescription = "Select the number of seats for your enterprise license"
notEnterprise = "Seat management is only available for enterprise licenses"
preparingUpdate = "Preparing seat update..."
seatCountTooLow = "Seat count must be at least {{minimum}} (current number of users)"
seatCountUnchanged = "Please select a different seat count"
seatsUpdated = "Seats Updated"
seatsUpdatedMessage = "Your enterprise seats have been updated to {{seats}}"
stripePortalRedirect = "You will be redirected to Stripe's billing portal to review and confirm the seat change. The prorated amount will be calculated automatically."
updateEnterpriseSeats = "Update Enterprise Seats"
updateProcessing = "Update Processing"
updateProcessingMessage = "Your seat update is being processed. Please refresh in a few moments."
updateSeats = "Update Seats"
whatHappensNext = "What happens next?"
[billing.portal]
error = "Failed to open billing portal"
[bookletImposition]
paperSizeNote = "Paper size is automatically derived from your first page."
submit = "Create Booklet"
tags = "booklet,imposition,printing,binding,folding,signature"
title = "Booklet Imposition"
[bookletImposition.addBorder]
label = "Add borders around pages"
tooltip = "Adds borders around each page section to help with cutting and alignment"
[bookletImposition.addGutter]
label = "Add gutter margin"
tooltip = "Adds inner margin space for binding"
[bookletImposition.advanced]
toggle = "Advanced Options"
[bookletImposition.doubleSided]
label = "Double-sided printing"
tooltip = "Creates both front and back sides for proper booklet printing"
[bookletImposition.duplexPass]
first = "1st Pass"
firstInstructions = "Prints front sides → stack face-down → run again with 2nd Pass"
label = "Print Pass"
second = "2nd Pass"
secondInstructions = "Load printed stack face-down → prints back sides"
[bookletImposition.error]
failed = "An error occurred while creating the booklet imposition."
[bookletImposition.flipOnShortEdge]
label = "Flip on short edge (automatic duplex only)"
manualNote = "Not needed in manual mode - you flip the stack yourself"
tooltip = "Enable for short-edge duplex printing (automatic duplex only - ignored in manual mode)"
[bookletImposition.gutterSize]
label = "Gutter size (points)"
[bookletImposition.manualDuplex]
instructions = "For printers without automatic duplex. You'll need to run this twice:"
title = "Manual Duplex Mode"
[bookletImposition.rtlBinding]
label = "Right-to-left binding"
tooltip = "For Arabic, Hebrew, or other right-to-left languages"
[bookletImposition.tooltip.advanced]
bullet1 = "Right-to-Left Binding: For Arabic, Hebrew, or RTL languages"
bullet2 = "Borders: Shows cut lines for trimming"
bullet3 = "Gutter Margin: Adds space for binding/stapling"
bullet4 = "Short-edge Flip: Only for automatic duplex printers"
text = "Fine-tune your booklet:"
title = "Advanced Options"
[bookletImposition.tooltip.description]
text = "Creates professional booklets by arranging pages in the correct printing order. Your PDF pages are placed 2-up on landscape sheets so when folded and bound, they read in proper sequence like a real book."
title = "What is Booklet Imposition?"
[bookletImposition.tooltip.example]
bullet1 = "Sheet 1 Front: Pages 8, 1 | Back: Pages 2, 7"
bullet2 = "Sheet 2 Front: Pages 6, 3 | Back: Pages 4, 5"
bullet3 = "When folded & stacked: Reads 1→2→3→4→5→6→7→8"
text = "Your 8-page document becomes 2 sheets:"
title = "Example: 8-Page Booklet"
[bookletImposition.tooltip.header]
title = "Booklet Creation Guide"
[bookletImposition.tooltip.manualDuplex]
bullet1 = "Turn OFF 'Double-sided printing'"
bullet2 = "Select '1st Pass' → Print → Stack face-down"
bullet3 = "Select '2nd Pass' → Load stack → Print backs"
bullet4 = "Fold and assemble as normal"
text = "For printers without automatic duplex:"
title = "Manual Duplex (Single-sided Printers)"
[bookletImposition.tooltip.printing]
bullet1 = "Print double-sided with 'Flip on long edge'"
bullet2 = "Stack sheets in order, fold in half"
bullet3 = "Staple or bind along the folded spine"
bullet4 = "For short-edge printers: Enable 'Flip on short edge' option"
text = "Follow these steps for perfect booklets:"
title = "How to Print & Assemble"
[bulkSelection]
syntaxError = "There is a syntax issue. See Page Selection tips for help."
[bulkSelection.advanced]
title = "Advanced"
[bulkSelection.everyNthPage]
placeholder = "Step size"
title = "Every Nth Page"
[bulkSelection.examples]
combineSets = "Combine sets"
every3rd = "Every 3rd"
first50 = "First 50"
last50 = "Last 50"
oddWithinExcluding = "Odd within 1-20 excluding 5-7"
title = "Examples"
[bulkSelection.firstNPages]
placeholder = "Number of pages"
title = "First N Pages"
[bulkSelection.header]
title = "Page Selection Guide"
[bulkSelection.keywords]
title = "Keywords"
[bulkSelection.lastNPages]
placeholder = "Number of pages"
title = "Last N Pages"
[bulkSelection.operators]
text = "AND has higher precedence than comma. NOT applies within the document range."
title = "Operators"
[bulkSelection.operators.and]
title = "Combine selections (both conditions must be true)"
[bulkSelection.operators.descriptions]
and = "AND: & or \"and\" - require both conditions (e.g., 1-50 & even)"
comma = "Comma: , or | - combine selections (e.g., 1-10, 20)"
not = "NOT: ! or \"not\" - exclude pages (e.g., 3n & not 30)"
[bulkSelection.operators.even]
title = "Select all even-numbered pages (2, 4, 6, 8...)"
[bulkSelection.operators.not]
title = "Exclude from selection"
[bulkSelection.operators.odd]
title = "Select all odd-numbered pages (1, 3, 5, 7...)"
[bulkSelection.operators.or]
title = "Add to selection (either condition can be true)"
[bulkSelection.pageSelection]
title = "Page Selection"
[bulkSelection.range]
fromPlaceholder = "From"
title = "Range"
toPlaceholder = "To"
[bulkSelection.syntax]
text = "Use numbers, ranges, keywords, and progressions (n starts at 0). Parentheses are supported."
title = "Syntax Basics"
[bulkSelection.syntax.bullets]
keywords = "Keywords: odd, even"
numbers = "Numbers/ranges: 5, 10-20"
progressions = "Progressions: 3n, 4n+1"
[certificateChoice.tooltip]
header = "Certificate Types"
[certificateChoice.tooltip.organization]
bullet1 = "Managed by system administrators"
bullet2 = "Shared across authorized users"
bullet3 = "Represents company identity, not individual"
bullet4 = "Best for: Official documents, team signatures"
description = "A shared certificate provided by your organization. Used for company-wide signing authority."
title = "Organization Certificate"
[certificateChoice.tooltip.personal]
bullet1 = "Generated automatically on first use"
bullet2 = "Tied to your user account"
bullet3 = "Cannot be shared with other users"
bullet4 = "Best for: Personal documents, individual accountability"
description = "An auto-generated certificate unique to your user account. Suitable for individual signatures."
title = "Personal Certificate"
[certificateChoice.tooltip.upload]
bullet1 = "Requires P12/PFX file and password"
bullet2 = "Can be issued by external Certificate Authorities"
bullet3 = "Higher trust level for legal documents"
bullet4 = "Best for: Legally binding contracts, external validation"
description = "Use your own PKCS#12 certificate file. Provides full control over certificate properties."
title = "Upload Custom P12"
[certSign]
awaitingSignatures = "Awaiting signatures"
chooseCertificate = "Choose Certificate File"
chooseJksFile = "Choose JKS File"
chooseP12File = "Choose PKCS12 File"
choosePfxFile = "Choose PFX File"
choosePrivateKey = "Choose Private Key File"
declined = "Declined"
fetchFailed = "Failed to load signing data"
finalized = "Finalized"
location = "Location"
logoTitle = "Logo"
name = "Name"
noLogo = "No Logo"
pageNumber = "Page Number"
password = "Certificate Password"
passwordOptional = "Leave empty if no password"
pemCertificateLabel = "Certificate (.pem / .crt)"
pemPrivateKeyLabel = "Private key (.pem / .key)"
pending = "Pending"
readyToFinalize = "Ready to finalize"
reason = "Reason"
serverCertMessage = "Using server certificate - no files or password required"
showLogo = "Show Logo"
signatureProgress = "{{signedCount}}/{{totalCount}} signatures"
signed = "Signed"
tags = "authenticate,PEM,P12,official,encrypt,sign,certificate,PKCS12,JKS,server,manual,auto"
title = "Certificate Signing"
viewed = "Viewed"
[certSign.appearance]
invisible = "Invisible"
stepTitle = "Signature Appearance"
visibility = "Visibility"
visible = "Visible"
[certSign.appearance.options]
title = "Signature Details"
[certSign.appearance.tooltip.header]
title = "About Signature Appearance"
[certSign.appearance.tooltip.invisible]
bullet1 = "Provides security without visual changes"
bullet2 = "Meets legal requirements for digital signing"
bullet3 = "Doesn't affect document layout or design"
text = "The signature is added to the PDF for security but won't be visible when viewing the document. Perfect for legal requirements without changing the document's appearance."
title = "Invisible Signatures"
[certSign.appearance.tooltip.visible]
bullet1 = "Shows signer name and date on the document"
bullet2 = "Can include reason and location for signing"
bullet3 = "Choose which page to place the signature"
bullet4 = "Optional logo can be included"
text = "Shows a signature block on the PDF with your name, date, and optional details. Useful when you want readers to clearly see the document is signed."
title = "Visible Signatures"
[certSign.certFiles]
stepTitle = "Certificate Files"
[certSign.certType.tooltip.convert]
text = "Convert your file to a Java keystore (.jks) with keytool, then pick JKS."
title = "Key not listed?"
[certSign.certType.tooltip.header]
title = "About Certificate Types"
[certSign.certType.tooltip.what]
text = "It's a secure ID for your signature that proves you signed. Unless you're required to sign via certificate, we recommend using another secure method like Type, Draw, or Upload."
title = "What's a certificate?"
[certSign.certType.tooltip.which]
bullet1 = "PKCS#12 (.p12 / .pfx) one combined file (most common)"
bullet2 = "PFX (.pfx) Microsoft's version of PKCS12"
bullet3 = "PEM separate private-key and certificate .pem files"
bullet4 = "JKS Java .jks keystore for dev / CI-CD workflows"
text = "Choose the format that matches your certificate file:"
title = "Which option should I use?"
[certSign.certTypeStep]
stepTitle = "Certificate Format"
[certSign.collab.addParticipants]
add_one = "Add {{count}} Participant"
add_other = "Add {{count}} Participants"
reasonHelp = "Pre-set a signing reason for these participants (optional, they can override when signing)"
reasonPlaceholder = "e.g. Approval, Review..."
[certSign.collab.finalize]
button = "Finalize and Load Signed PDF"
early = "Finalize with Current Signatures"
[certSign.collab.participant]
certInvalid = "✗ {{error}}"
certInvalidFallback = "Invalid certificate"
certNetworkError = "Could not validate certificate"
certValid = "✓ Certificate valid"
certValidating = "Validating certificate..."
certValidUntil = " until {{date}}"
[certSign.collab.sessionCreation]
includeSummaryPage = "Include Signature Summary Page"
includeSummaryPageHelp = "A summary page will be added at the end with all signature metadata. The digital certificate signature boxes on individual pages will be suppressed (wet signatures are unaffected)."
[certSign.collab.sessionDetail]
addParticipants = "Add Participants"
addParticipantsError = "Failed to add participants"
backToList = "Back to Sessions"
deleteConfirm = "Are you sure? This cannot be undone."
deleteError = "Failed to delete session"
deleteSession = "Delete Session"
dueDate = "Due Date"
finalizeError = "Failed to finalize session"
loadPdfError = "Failed to load signed PDF"
loadSignedPdf = "Load Signed PDF into Active Files"
messageLabel = "Message"
owner = "Owner"
participantRemoved = "Participant removed"
participants = "Participants"
participantsAdded = "Participants added successfully"
removeParticipant = "Remove"
removeParticipantError = "Failed to remove participant"
selectUsers = "Select users..."
sessionInfo = "Session Info"
[certSign.collab.sessionList]
active = "Active"
finalized = "Finalized"
[certSign.collab.signatureSettings]
description = "Configure how signatures will appear for all participants"
title = "Signature Appearance"
[certSign.collab.signRequest]
addedToFiles = "Document added to active files"
addToFiles = "Add to Active Files"
advancedSettings = "Advanced Settings"
backToList = "Back to Sign Requests"
certificateChoice = "Select a certificate to sign with"
changeSignature = "Change signature"
clearSignature = "Clear Signature"
completeAndSign = "Complete & Sign"
createNewSignature = "Create New Signature"
decline = "Decline Request"
declineButton = "Decline"
deleteSelected = "Delete selected signature"
drawSignature = "Draw your signature below"
fileTooLarge = "File size must be less than 5MB"
fontFamily = "Font Family"
fontSize = "Font Size: {{size}}px"
fontSizePlaceholder = "Size"
from = "From"
invalidFileType = "Please select an image file"
location = "Location (Optional)"
locationPlaceholder = "Where are you signing from?"
noCertificate = "Please select a certificate file"
noSignatures = "Please place at least one signature on the PDF"
p12File = "P12/PFX Certificate File"
password = "Certificate Password"
penColor = "Pen Color"
penSize = "Pen Size: {{size}}px"
reason = "Reason (Optional)"
reasonPlaceholder = "Why are you signing?"
removeImage = "Remove Image"
savedSignatures = "Saved Signatures"
selectFile = "Select Image File"
selectSignatureTitle = "Select or Create Signature"
signatureInfo = "These settings are configured by the document owner"
signatureSettings = "Signature Settings"
signatureText = "Signature Text"
signatureTextPlaceholder = "Enter your name..."
signatureTypeLabel = "Signature Type"
signButton = "Sign Document"
signingTitle = "Signing"
textColor = "Text Color"
typeSignature = "Type your name to create a signature"
uploadCert = "Custom Certificate"
uploadCertDesc = "Use your own P12/PFX certificate"
uploadSignature = "Upload your signature image"
usePersonalCert = "Personal Certificate"
usePersonalCertDesc = "Auto-generated for your account"
useServerCert = "Organization Certificate"
useServerCertDesc = "Shared organization certificate"
useSignature = "Use signature"
[certSign.collab.signRequest.certModal]
certInvalid = "Certificate invalid: {{error}}"
certInvalidFallback = "Invalid certificate"
certNetworkError = "Could not validate certificate"
certValidating = "Validating certificate..."
certValidUntil = "Certificate valid until {{date}}"
description_one = "You have placed {{count}} signature. Choose your certificate to complete signing."
description_other = "You have placed {{count}} signatures. Choose your certificate to complete signing."
sign = "Sign Document"
title = "Configure Certificate"
[certSign.collab.signRequest.mode]
move = "Move Signature"
place = "Place Signature"
title = "Sign or move mode"
[certSign.collab.signRequest.modeTabs]
draw = "Draw"
image = "Upload"
text = "Type"
[certSign.collab.signRequest.preview]
create = "Add signature"
imageAlt = "Selected signature"
textFallback = "Signature"
[certSign.collab.signRequest.saved]
defaultCanvasLabel = "Drawing signature"
defaultImageLabel = "Uploaded signature"
defaultLabel = "Signature"
defaultTextLabel = "Typed signature"
delete = "Delete signature"
none = "No saved signatures"
[certSign.collab.signRequest.signatureType]
draw = "Draw"
type = "Type"
upload = "Upload"
[certSign.collab.signRequest.steps]
back = "Back"
cancelPlacement = "Cancel Placement"
certificate = "Certificate"
clickMultipleTimes = "Click on the PDF multiple times to place signatures. Drag any signature to move or resize it."
clickToPlace = "Click on the PDF where you would like your signature to appear."
continue = "Continue to Certificate Selection"
continueToPlacement = "Continue to Placement"
continueToReview = "Continue to Review"
createSignature = "Create Signature"
invisible = "Invisible"
location = "Location:"
multipleSignatures = "{{count}} signatures will be applied to the PDF"
oneSignature = "1 signature will be applied to the PDF"
placeOnPdf = "Place on PDF"
reason = "Reason:"
reviewTitle = "Review Before Signing"
signaturePlaced = "Signature placed on page {{page}}. You can adjust the position by clicking again or continue to review."
visibility = "Visibility:"
visible = "Visible"
yourSignatures = "Your Signatures ({{count}})"
[certSign.collab.userSelector]
inviteUsers = "Add Users"
loadError = "Failed to load users"
noTeam = "No Team"
noUsers = "No other users found."
placeholder = "Select users..."
[certSign.device]
stepTitle = "This device"
[certSign.error]
failed = "An error occurred while processing signatures."
[certSign.format]
pkcs11 = "USB Token"
windowsStore = "Windows certificate store"
[certSign.hardware]
certificate = "Certificate"
customLibrary = "Custom driver path…"
driver = "PKCS#11 driver"
driverPath = "Driver library path"
driverPathPlaceholder = "Full path to your PKCS#11 driver (.dll, .so or .dylib)"
expired = "expired"
expires = "expires"
listCerts = "List certificates"
loading = "Reading certificates…"
noCerts = "No signing certificates found"
noDriver = "No PKCS#11 driver was detected. Install your token's driver (e.g. OpenSC), then reopen this - or enter the driver path manually below."
notYetValid = "not yet valid"
pin = "Token PIN"
pkcs11Hint = "Select your token's PKCS#11 driver, enter the PIN, then list the certificates on the token."
pkcs11LoadError = "Could not read certificates from the token. Check the PIN and driver."
refresh = "Refresh"
selectCert = "Select certificate"
selectDriver = "Select driver"
slot = "Slot (optional)"
windowsHint = "Pick a certificate from your Windows certificate store. Signing uses the key on your card/token - Windows will prompt for the PIN."
windowsLoadError = "Could not read the Windows certificate store"
[certSign.sessions]
deleted = "Session deleted"
fetchFailed = "Failed to load session details"
finalized = "Session finalized"
loaded = "Signed PDF loaded"
pdfNotReady = "PDF Not Ready"
pdfNotReadyDesc = "The signed PDF is being generated. Please try again in a moment."
[certSign.sign]
results = "Signed PDF"
submit = "Sign PDF"
[certSign.signMode.tooltip.auto]
text = "Signs with a server <b>self-signed</b> certificate. Same <b>tamper-evident seal</b> and <b>audit trail</b>; typically shows <b>Unverified</b> in viewers."
title = "Auto - Zero-setup, instant system seal"
use = "Use when: you need speed and consistent internal identity across reviews and records."
[certSign.signMode.tooltip.header]
title = "About PDF Signatures"
[certSign.signMode.tooltip.manual]
text = "Use your own certificate files for brand-aligned identity. Can display <b>Trusted</b> when your CA/chain is recognized."
title = "Manual - Bring your certificate"
use = "Use for: customer-facing, legal, compliance."
[certSign.signMode.tooltip.overview]
text = "Both modes seal the document (any edits are flagged as tampering) and record who/when/how for auditing. Viewer trust depends on the certificate chain."
title = "How signatures work"
[certSign.signMode.tooltip.rule]
text = "Need recipient <b>Trusted</b> status? <b>Manual</b>. Need a fast, tamper-evident seal and audit trail with no setup? <b>Auto</b>."
title = "Rule of thumb"
[certSign.source]
device = "This device"
noOtherSources = "No other certificate sources are available."
server = "Server"
stepTitle = "Certificate source"
upload = "Upload"
[certSign.tooltip.header]
title = "About Managing Signatures"
[certSign.tooltip.overview]
bullet1 = "Check existing signatures and their validity"
bullet2 = "View detailed information about signers and certificates"
bullet3 = "Add new digital signatures to secure your documents"
bullet4 = "Multiple files supported with easy navigation"
text = "This tool lets you check if your PDFs are digitally signed and add new digital signatures. Digital signatures prove who created or approved a document and show if it has been changed since signing."
title = "What can this tool do?"
[certSign.tooltip.signing]
bullet1 = "Supports PEM, PKCS12, JKS, and server certificate formats"
bullet2 = "Option to show or hide signature on the PDF"
bullet3 = "Add reason, location, and signer name"
bullet4 = "Choose which page to place visible signatures"
bullet5 = "Use server certificate for simple 'Sign with Stirling-PDF' option"
text = "To sign a PDF, you need a digital certificate (like PEM, PKCS12, or JKS). You can choose to make the signature visible on the document or keep it invisible for security only."
title = "Adding Signatures"
[certSign.tooltip.validation]
bullet1 = "Shows if signatures are valid or invalid"
bullet2 = "Displays signer information and signing date"
bullet3 = "Checks if the document was modified after signing"
bullet4 = "Can use custom certificates for verification"
text = "When you check signatures, the tool tells you if they're valid, who signed the document, when it was signed, and whether the document has been changed since signing."
title = "Checking Signatures"
[changeCreds]
changeUsername = "Update your username. You will be logged out after updating."
credsUpdated = "Account updated"
description = "Changes saved. Please log in again."
error = "Unable to update username. Please verify your password and try again."
header = "Update Your Account Details"
newUsername = "New Username"
oldPassword = "Current Password"
ssoManaged = "Your account is managed by your identity provider."
title = "Change Credentials"
[changeMetadata]
filenamePrefix = "metadata"
submit = "Change"
tags = "edit,modify,update,metadata,properties,document properties,author,title,subject,keywords,creator,producer,info,document info,file properties"
[changeMetadata.advanced]
title = "Advanced Options"
[changeMetadata.author]
label = "Author"
placeholder = "Document author"
[changeMetadata.creationDate]
label = "Creation Date"
placeholder = "Creation date"
[changeMetadata.creator]
label = "Creator"
placeholder = "Document creator"
[changeMetadata.customFields]
add = "Add Field"
description = "Add custom metadata fields to the document"
key = "Key"
keyPlaceholder = "Custom key"
remove = "Remove"
title = "Custom Metadata"
value = "Value"
valuePlaceholder = "Custom value"
[changeMetadata.dates]
title = "Date Fields"
[changeMetadata.deleteAll]
checkbox = "Delete all metadata"
label = "Remove Existing Metadata"
[changeMetadata.error]
failed = "An error occurred while changing the PDF metadata."
[changeMetadata.keywords]
label = "Keywords"
placeholder = "Document keywords"
[changeMetadata.modificationDate]
label = "Modification Date"
placeholder = "Modification date"
[changeMetadata.producer]
label = "Producer"
placeholder = "Document producer"
[changeMetadata.results]
title = "Updated PDFs"
[changeMetadata.standardFields]
title = "Standard Fields"
[changeMetadata.subject]
label = "Subject"
placeholder = "Document subject"
[changeMetadata.title]
label = "Title"
placeholder = "Document title"
[changeMetadata.tooltip.advanced]
title = "Advanced Options"
[changeMetadata.tooltip.advanced.trapped]
bullet1 = "True: Document has been trapped for printing"
bullet2 = "False: Document has not been trapped"
bullet3 = "Unknown: Trapped status is not specified"
description = "Indicates if document is prepared for high-quality printing."
title = "Trapped Status"
[changeMetadata.tooltip.customFields]
bullet1 = "Add any custom fields relevant to your document"
bullet2 = "Examples: Department, Project, Version, Status"
bullet3 = "Both key and value are required for each entry"
text = "Add your own custom key-value metadata pairs."
title = "Custom Metadata"
[changeMetadata.tooltip.dates]
bullet1 = "Creation Date: When original document was made"
bullet2 = "Modification Date: When last changed"
text = "When the document was created and modified."
title = "Date Fields"
[changeMetadata.tooltip.deleteAll]
text = "Complete metadata deletion to ensure privacy."
title = "Remove Existing Metadata"
[changeMetadata.tooltip.standardFields]
bullet1 = "Title: Document name or heading"
bullet2 = "Author: Person who created the document"
bullet3 = "Subject: Brief description of content"
bullet4 = "Keywords: Search terms for the document"
bullet5 = "Creator/Producer: Software used to create the PDF"
text = "Common PDF metadata fields that describe the document."
title = "Standard Fields"
[changeMetadata.trapped]
false = "False"
label = "Trapped Status"
true = "True"
unknown = "Unknown"
[changePermissions]
desc = "Change document restrictions and permissions."
submit = "Change Permissions"
tags = "permissions,restrictions,rights,access control,allow,deny,printing,copying,editing,modify permissions,security settings,user rights"
title = "Change Permissions"
[changePermissions.error]
failed = "An error occurred while changing PDF permissions."
[changePermissions.permissions.preventAssembly]
label = "Prevent assembly of document"
[changePermissions.permissions.preventExtractContent]
label = "Prevent content extraction"
[changePermissions.permissions.preventExtractForAccessibility]
label = "Prevent extraction for accessibility"
[changePermissions.permissions.preventFillInForm]
label = "Prevent filling in form"
[changePermissions.permissions.preventModify]
label = "Prevent modification"
[changePermissions.permissions.preventModifyAnnotations]
label = "Prevent annotation modification"
[changePermissions.permissions.preventPrinting]
label = "Prevent printing"
[changePermissions.permissions.preventPrintingFaithful]
label = "Prevent printing different formats"
[changePermissions.results]
title = "Modified PDFs"
[changePermissions.tooltip.description]
text = "Changes document permissions, allowing/disallowing access to different features in PDF readers."
[changePermissions.tooltip.header]
title = "Change Permissions"
[changePermissions.tooltip.warning]
text = "To make these permissions unchangeable, use the Add Password tool to set an owner password."
[chat.actions]
copy = "Copy message"
[chat.fab]
close = "Close chat"
open = "Open Stirling AI assistant"
[chat.header]
agentMenu = "Stirling agent options"
clearChat = "Clear chat"
[chat.input]
disclaimer = "AI can make mistakes. Be sure to verify the output before sharing."
placeholder = "What do you want to do?"
send = "Send message"
[chat.progress]
analyzing = "Analyzing your request..."
calling_engine = "AI is thinking..."
executing_tool_generic = "Running tool..."
executing_tool_generic_step = "Running tool (step {{step}} of {{total}})..."
executing_tool_single = "Running {{tool}}..."
executing_tool_step = "Running {{tool}} (step {{step}} of {{total}})..."
extracting_content = "Extracting content from your documents..."
processing = "Processing extracted content..."
ranForMinutes_one = "Ran for 1 minute"
ranForMinutes_other = "Ran for {{count}} minutes"
ranForMinutesSeconds = "Ran for {{minutes}} min, {{seconds}} sec"
ranForSeconds_one = "Ran for 1 second"
ranForSeconds_other = "Ran for {{count}} seconds"
thinking = "Thinking..."
whole_doc_compression_round = "Consolidating notes..."
whole_doc_read_done = "Finished reading the document..."
whole_doc_read_started = "Reading the document..."
whole_doc_slice_done = "Reading the document... ({{percent}}% complete)"
[chat.quickActions]
browseYourFiles = "Browse your files"
compressMany = "Compress these documents"
compressOne = "Compress this document"
convertMany = "Convert these documents to PDF"
convertOne = "Convert this document to PDF"
heading = "Get started"
mergeMany = "Merge these {{count}} documents into 1"
moreFiles = "+{{count}} more"
openFromComputer = "Open from computer"
removeFile = "Remove {{name}}"
splitOne = "Split this document"
[chat.responses]
cannot_continue = "Something went wrong and I can't continue."
cannot_do = "I'm unable to do that."
done = "Done."
need_clarification = "Could you clarify your request?"
not_found = "I couldn't find the requested information."
processing = "Processing ({{outcome}})..."
unsupported_capability = "Unsupported capability: {{capability}}"
usage_limit_reached = "You've reached your usage limit. Check your plan options to keep going."
[chat.toolsUsed]
summary_one = "Ran 1 tool"
summary_other = "Ran {{count}} tools"
unknownTool = "Unknown tool"
[cloudBadge]
tooltip = "This operation will use your cloud credits"
[color.eyeDropper]
tooltip = "Pick color from screen"
[colorPicker]
title = "Choose color"
[common]
back = "Back"
cancel = "Cancel"
close = "Close"
collapse = "Collapse"
confirm = "Confirm"
continue = "Continue"
copied = "Copied!"
copy = "Copy"
done = "Done"
error = "Error"
expand = "Expand"
loading = "Loading..."
next = "Next"
preview = "Preview"
previous = "Previous"
refresh = "Refresh"
remaining = "Remaining"
retry = "Retry"
save = "Save"
[compare]
clearSelected = "Clear selected"
clearSlot = "Remove file"
cta = "Compare"
loading = "Comparing..."
newLine = "new-line"
pages = "Pages"
tags = "differentiate,contrast,changes,analysis"
title = "Compare"
[compare.actions]
linkScroll = "Link scroll"
placeSideBySide = "Place side by side"
resetView = "Reset view"
stackVertically = "Stack vertically"
unlinkScroll = "Unlink scroll"
zoomIn = "Zoom in"
zoomOut = "Zoom out"
[compare.clear]
confirm = "Clear Selected"
confirmBody = "This will close the current comparison and take you back to Active Files."
confirmTitle = "Clear selected PDFs?"
[compare.dropdown]
additions = "Additions ({{count}})"
additionsLabel = "Additions"
deletions = "Deletions ({{count}})"
deletionsLabel = "Deletions"
noResults = "No changes found"
searchPlaceholder = "Search changes..."
[compare.earlyDissimilarity]
body = "We're seeing very few similarities so far. You can stop the comparison if these aren't related documents."
stopButton = "Stop comparison"
title = "These PDFs look highly different"
[compare.edited]
label = "Edited PDF"
placeholder = "Select the edited PDF"
selectBaseFirst = "Select original PDF first"
[compare.error]
filesMissing = "Unable to locate the selected files. Please re-select them."
generic = "Unable to compare these files."
selectRequired = "Select a original and edited document."
title = "Comparison failed"
[compare.large.file]
message = "One or Both of the provided documents are too large to process"
[compare.longJob]
body = "These PDFs together exceed 2,000 pages. Processing can take several minutes."
title = "Large comparison in progress"
[compare.no.text]
message = "One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison."
[compare.original]
label = "Original PDF"
placeholder = "Select the original PDF"
[compare.pixel]
base = "Original"
changed = "changed"
comparison = "Edited"
diff = "Differences"
diffOnly = "Diff only"
missingInBase = "Missing in original"
missingInComparison = "Missing in edited"
overall = "overall"
overlay = "Overlay"
pageLabel = "Page"
pagesChanged = "pages changed"
sideBySide = "Side-by-side"
sizeMismatch = "Size mismatch"
summaryTitle = "Pixel comparison"
[compare.pixel.errors]
canvasContextUnavailable = "Unable to acquire 2D canvas context for pixel comparison."
[compare.pixel.warnings]
noPages = "One or both documents have no pages."
pageCountMismatch = "Page count mismatch: original has {{base}} page(s), edited has {{comparison}}. Extra pages are shown one-sided and marked as fully removed/added."
[compare.rendering]
complete = "Page rendering complete"
inProgress = "At least one of these PDFs are very large, scrolling won't be smooth until the rendering is complete"
pageNotReadyBody = "Some pages are still rendering. Navigation will snap once they are ready."
pageNotReadyTitle = "Page not rendered yet"
pagesRendered = "pages rendered"
rendering = "rendering"
[compare.review]
title = "Comparison Result"
[compare.selection]
originalEditedTitle = "Select Original and Edited PDFs"
[compare.status]
complete = "Comparison ready"
error = "Comparison failed"
extracting = "Extracting text..."
processing = "Analyzing differences..."
[compare.summary]
baseHeading = "Original document"
comparisonHeading = "Edited document"
pageLabel = "Page"
[compare.swap]
confirm = "Swap and Re-run"
confirmBody = "This will rerun the tool. Are you sure you want to swap the order of Original and Edited?"
confirmTitle = "Re-run comparison?"
label = "Swap"
[compare.toasts]
unlinkedBody = "Tip: Arrow Up/Down scroll both panes; panning only moves the active pane."
unlinkedTitle = "Independent scroll & pan enabled"
[compare.too.dissimilar]
message = "These documents appear highly dissimilar. Comparison was stopped to save time."
[compress]
desc = "Compress PDFs to reduce their file size."
submit = "Compress"
tags = "shrink,reduce,optimize,compress,smaller,downsize,file size,reduce size,minimize,make smaller,decrease size,optimize size"
title = "Compress"
[compress.compressionLevel]
range1to3 = "Lower values preserve quality but result in larger files"
range4to6 = "Medium compression with moderate quality reduction"
range7to9 = "Higher values reduce file size significantly but may reduce image clarity"
[compress.error]
failed = "An error occurred while compressing the PDF."
[compress.grayscale]
label = "Apply Grayscale for Compression"
[compress.linearize]
label = "Linearize PDF for fast web viewing"
[compress.lineArt]
description = "Uses ImageMagick to reduce pages to high-contrast black and white for maximum size reduction."
detailLevel = "Detail level"
edgeEmphasis = "Edge emphasis"
edgeHigh = "Strong"
edgeLow = "Gentle"
edgeMedium = "Balanced"
label = "Convert images to line art"
unavailable = "ImageMagick is not installed or enabled on this server"
[compress.method]
filesize = "File Size"
quality = "Quality"
title = "Compression Method"
[compress.settings]
desiredSize = "Desired File Size"
desiredSizePlaceholder = "Enter size"
[compress.tooltip.description]
text = "Compression is an easy way to reduce your file size. Pick File Size to enter a target size and have us adjust quality for you. Pick Quality to set compression strength manually."
title = "Description"
[compress.tooltip.grayscale]
text = "Select this option to convert all images to black and white, which can significantly reduce file size especially for scanned PDFs or image-heavy documents."
title = "Grayscale"
[compress.tooltip.header]
title = "Compress Settings Overview"
[compress.tooltip.lineArt]
text = "Convert pages to high-contrast black and white using ImageMagick. Use detail level to control how much content becomes black, and edge emphasis to control how aggressively edges are detected."
title = "Line Art"
[compress.tooltip.qualityAdjustment]
bullet1 = "Lower values preserve quality"
bullet2 = "Higher values reduce file size"
text = "Drag the slider to adjust the compression strength. Lower values (1-3) preserve quality but result in larger files. Higher values (7-9) shrink the file more but reduce image clarity."
title = "Quality Adjustment"
[compressPdfs]
tags = "squish,small,tiny"
[config]
plan = "Plan"
team = "Team"
[config.account.overview]
confirmDelete = "Delete My Account"
deleteAccount = "Delete Account"
deleteAccountTitle = "Delete Account"
deleteFailed = "Failed to delete account."
deleteFailedTitle = "Unable to delete account"
deleteWarning = "This action is permanent and cannot be undone. All your data will be deleted."
enterEmailConfirm = "To confirm deletion, please type your email address ({{email}}) below:"
guestDescription = "You are signed in as a guest. Consider upgrading your account above."
label = "Overview"
manageAccountPreferences = "Manage your account preferences"
signedInAs = "Signed in as"
title = "Account Settings"
[config.account.profilePicture]
description = "Upload an image to personalize your account."
help = "PNG, JPG, or WebP up to 2MB."
remove = "Remove"
sizeError = "Please select an image smaller than 2MB."
switchedToCustom = "Switched to custom picture. You can now upload your own."
title = "Profile picture"
upload = "Upload"
useCustom = "Use custom picture"
usingProvider = "Using {{provider}} profile picture"
[config.account.profilePicture.cropper]
cropError = "Failed to crop image. Please try again."
invalidImage = "Invalid image file. Please select a valid PNG, JPG, or WebP file."
processing = "Processing crop..."
save = "Save Cropped Image"
sizeErrorAfterCrop = "Cropped image is too large. Please zoom out or crop a smaller area."
title = "Crop Profile Picture"
zoom = "Zoom"
[config.account.security]
changePassword = "Change password"
description = "Manage your password and security settings."
title = "Passwords & Security"
update = "Update password"
[config.account.upgrade]
description = "Link your account to preserve your history and access more features!"
email = "Email"
emailPassword = "or enter your email & password"
emailPlaceholder = "Enter your email"
linkWith = "Link with"
password = "Password (optional)"
passwordNote = "Leave empty to use email verification only"
passwordPlaceholder = "Set a password"
socialLogin = "Upgrade with Social Account"
title = "Upgrade Guest Account"
upgradeButton = "Upgrade Account"
[config.apiKeys]
copyKeyAriaLabel = "Copy API key"
description = "Your API key for accessing Stirling's suite of PDF tools. Copy it to your project or refresh to generate a new one."
docsDescription = "Learn more about integrating with Stirling PDF:"
docsLink = "API Documentation"
docsTitle = "API Documentation"
generateError = "We couldn't generate your API key."
goToAccount = "Go to Account"
guestInfo = "Guest users do not receive API keys. Create an account to get an API key you can use in your applications."
intro = "Use your API key to programmatically access Stirling PDF's processing capabilities."
label = "API Key"
publicKeyAriaLabel = "Public API key"
refreshAriaLabel = "Refresh API key"
schemaLink = "API Schema Reference"
usage = "Include this key in the X-API-KEY header with all API requests."
[config.apiKeys.alert]
apiKeyErrorTitle = "API Key Error"
apiKeyRefreshed = "API Key Refreshed"
apiKeyRefreshedBody = "Your API key has been successfully refreshed."
failedToCreateApiKey = "Failed to create API key."
failedToFetchApiKey = "Failed to fetch API key."
failedToRefreshApiKey = "Failed to refresh API key."
failedToRetrieveApiKey = "Failed to retrieve API key from response."
[config.apiKeys.refreshModal]
confirmCta = "Refresh Keys"
confirmPrompt = "Are you sure you want to continue?"
impact = "Any applications or services currently using these keys will stop working until you update them with the new keys."
title = "Refresh API Keys"
warning = "⚠️ Warning: This action will generate new API keys and make your previous keys invalid."
[config.mcp]
description = "Model Context Protocol (MCP) lets AI assistants like Claude use your Stirling PDF tools directly. Connect a client once and your assistant can convert, edit, secure and process documents on your behalf."
guestInfo = "Guest users can't connect MCP clients. Create an account to use the MCP server and let your AI assistant run Stirling PDF tools on your behalf."
navLabel = "MCP Server"
tip = "Every action your assistant runs is performed as your account and counts toward your usage, just like using Stirling PDF directly."
title = "MCP Server"
viewApiKeys = "View API keys"
[config.mcp.copy]
configLabel = "Config"
copied = "Copied"
copy = "Copy"
endpointLabel = "Endpoint URL"
tooltip = "Copy {{label}}"
tooltipCopied = "{{label}} copied"
[config.mcp.endpoint]
label = "Your MCP endpoint"
[config.mcp.setup]
addTo = "Add to"
hint = "Pick your client, paste the snippet into the file shown, then restart it. You'll sign in with your Stirling account on first use - no keys to copy."
title = "Connect your AI assistant"
[config.overview]
description = "Current application settings and configuration details."
error = "Error"
loading = "Loading configuration..."
title = "Application Configuration"
warning = "Configuration Warning"
[config.overview.sections]
basic = "Basic Configuration"
integration = "Integration Configuration"
security = "Security Configuration"
system = "System Configuration"
[convert]
autoRotate = "Auto Rotate"
autoRotateDescription = "Automatically rotate images to better fit the PDF page"
blackwhite = "Black & White"
cbrDpi = "DPI for image rendering"
cbrOptions = "CBR Options"
cbrOutputOptions = "PDF to CBR Options"
cbrToPdf = "CBR → PDF"
cbzDpi = "DPI for image rendering"
cbzOptions = "CBZ to PDF Options"
cbzOutputOptions = "PDF to CBZ Options"
cbzToPdf = "CBZ → PDF"
color = "Color"
colorType = "Color Type"
combineImages = "Combine Images"
combineImagesDescription = "Combine all images into one PDF, or create separate PDFs for each image"
combineSvgs = "Combine SVGs into single PDF"
combineSvgsDescription = "Combine all SVG files into one PDF with multiple pages, or create separate PDFs for each SVG"
conversionResults = "Conversion Results"
convertFiles = "Convert Files"
convertFrom = "Convert from"
converting = "Converting..."
convertTo = "Convert to"
desc = "Convert files between different formats"
downloadHtml = "Download HTML intermediate file instead of PDF"
dpi = "DPI"
ebookToPdf = "eBook → PDF"
emailOptions = "Email to PDF Options"
emlToPdf = "Email → PDF"
errorConversion = "An error occurred while converting the file."
fileToPdf = "Office/Document → PDF"
fillPage = "Fill Page"
fitDocumentToPage = "Fit Document to Page"
fitOption = "Fit Option"
grayscale = "Grayscale"
imageOptions = "Image Options"
includeAllRecipients = "Include CC and BCC recipients in header"
includeAttachments = "Include email attachments"
maintainAspectRatio = "Maintain Aspect Ratio"
maxAttachmentSize = "Maximum attachment size (MB)"
multiple = "Multiple"
optimizeForEbook = "Optimize PDF for ebook readers (uses Ghostscript)"
output = "Output"
outputFormat = "Output Format"
pdfaDigitalSignatureWarning = "The PDF contains a digital signature. This will be removed in the next step."
pdfaNote = "PDF/A-1b is more compatible, PDF/A-2b supports more features, PDF/A-3b supports embedded files."
pdfaOptions = "PDF/A Options"
pdfOptions = "PDF Options"
pdfToCbr = "PDF → CBR"
pdfToCbz = "PDF → CBZ"
pdfToEpub = "PDF → EPUB"
selectSourceFormatFirst = "Choose a source format first"
settings = "Settings"
single = "Single"
sourceFormatPlaceholder = "Source format"
strictMode = "Strict Mode"
strictModeDesc = "Error if conversion is not perfect (uses VeraPDF verification)"
svgPdfOptions = "SVG to PDF Options"
svgToPdf = "SVG → PDF"
svgVectorNote = "SVG files are rendered as vector graphics for crisp output at any resolution. Dimensions from the SVG determine the PDF page size."
tags = "transform,change,convert,PDF to Word,PDF to Excel,PDF to image,Word to PDF,Excel to PDF,PowerPoint to PDF,HTML to PDF,export,import,file conversion,format change,save as"
targetFormatPlaceholder = "Target format"
title = "Convert"
webOptions = "Web to PDF Options"
zoomLevel = "Zoom Level"
[convert.ebookOptions]
embedAllFonts = "Embed all fonts"
embedAllFontsDesc = "Embed all fonts from the eBook into the generated PDF"
includePageNumbers = "Include page numbers"
includePageNumbersDesc = "Add page numbers to the generated PDF"
includeTableOfContents = "Include table of contents"
includeTableOfContentsDesc = "Add a generated table of contents to the resulting PDF"
optimizeForEbookPdf = "Optimize for ebook readers"
optimizeForEbookPdfDesc = "Optimize the PDF for eBook reading (smaller file size, better rendering on eInk devices)"
[convert.epubOptions]
detectChapters = "Detect chapters"
detectChaptersDesc = "Detect headings that look like chapters and insert EPUB page breaks"
kindleEink = "Kindle e-Ink (text optimized)"
outputFormat = "Output format"
outputFormatDesc = "Choose the output format for the ebook"
tabletPhone = "Tablet/Phone (with images)"
targetDevice = "Target device"
targetDeviceDesc = "Choose an output profile optimized for the reader device"
[cookieBanner.popUp]
acceptAllBtn = "Okay"
acceptNecessaryBtn = "No Thanks"
showPreferencesBtn = "Manage preferences"
title = "How we use Cookies"
[cookieBanner.popUp.description]
1 = "We use cookies and other technologies to make Stirling PDF work better for you-helping us improve our tools and keep building features you'll love."
2 = "If you'd rather not, clicking 'No Thanks' will only enable the essential cookies needed to keep things running smoothly."
[cookieBanner.preferencesModal]
acceptAllBtn = "Accept all"
acceptNecessaryBtn = "Reject all"
closeIconLabel = "Close modal"
savePreferencesBtn = "Save preferences"
serviceCounterLabel = "Service|Services"
subtitle = "Cookie Usage"
title = "Consent Preferences Center"
[cookieBanner.preferencesModal.analytics]
description = "These cookies help us understand how our tools are being used, so we can focus on building the features our community values most. Rest assured-Stirling PDF cannot and will never track the content of the documents you work with."
title = "Analytics"
[cookieBanner.preferencesModal.description]
1 = "Stirling PDF uses cookies and similar technologies to enhance your experience and understand how our tools are used. This helps us improve performance, develop the features you care about, and provide ongoing support to our users."
2 = "Stirling PDF cannot-and will never-track or access the content of the documents you use."
3 = "Your privacy and trust are at the core of what we do."
[cookieBanner.preferencesModal.necessary]
description = "These cookies are essential for the website to function properly. They enable core features like setting your privacy preferences, logging in, and filling out forms-which is why they can't be turned off."
[cookieBanner.preferencesModal.necessary.title]
1 = "Strictly Necessary Cookies"
2 = "Always Enabled"
[cookieBanner.services]
posthog = "PostHog Analytics"
scarf = "Scarf Pixel"
[credits.modal]
advancedMonitoring = "Advanced monitoring"
allInOneWorkspace = "All-in-one PDF workspace (viewer, tools & agent)"
apiSandbox = "API sandbox"
dedicatedSupportSlas = "Dedicated support & SLAs"
fasterThroughput = "10x faster throughput"
fullyPrivateFiles = "Fully private files"
largeFileProcessing = "Large file processing"
orgWideAccess = "Org-wide access controls"
premiumAiModels = "Premium AI models"
prioritySupport = "Priority support"
privateDocCloud = "Private Document Cloud"
ragFineTuning = "RAG + fine-tuning"
secureApiAccess = "Secure API access"
standardThroughput = "Standard throughput"
unlimitedApiAccess = "Unlimited API access"
unlimitedSeats = "Unlimited seats"
[crop]
autoCrop = "Auto-crop whitespace"
noFileSelected = "Add a PDF file to begin cropping"
reset = "Reset to full PDF"
submit = "Apply Crop"
title = "Crop"
[crop.automation]
info = "Enter crop coordinates in PDF points. Origin (0,0) is at bottom-left. These values will be applied to all PDFs processed in this automation."
reference = "Reference: A4 page is 595.28 × 841.89 points (210mm × 297mm). 1 inch = 72 points."
[crop.coordinates]
title = "Position and Size"
[crop.coordinates.height]
desc = "Crop height (points)"
label = "Height"
[crop.coordinates.width]
desc = "Crop width (points)"
label = "Width"
[crop.coordinates.x]
desc = "Left edge (points)"
label = "X Position"
[crop.coordinates.y]
desc = "Bottom edge (points)"
label = "Y Position"
[crop.error]
failed = "Failed to crop PDF"
invalidArea = "Crop area extends beyond PDF boundaries"
[crop.preview]
title = "Crop Area Selection"
[crop.results]
title = "Crop Results"
[crop.steps]
selectArea = "Select Crop Area"
[crop.tooltip]
description = "Select the area to crop from your PDF by dragging and resizing the blue overlay on the thumbnail."
drag = "Drag the overlay to move the crop area"
precision = "Use coordinate inputs for precise positioning"
resize = "Drag the corner and edge handles to resize"
title = "How to Crop PDFs"
[database]
backupCreated = "Database backup successful"
fileName = "File Name"
title = "Database Import/Export"
[defaultApp]
setDefault = "Set Default"
title = "Set as Default PDF App"
[defaultApp.error]
message = "Failed to set default PDF handler"
title = "Error"
[defaultApp.prompt]
message = "Make Stirling PDF your default application for opening PDF files."
[defaultApp.settingsOpened]
message = "In Windows Settings, search for 'PDF' and select Stirling PDF as your default app"
title = "Settings Opened"
[defaultApp.success]
message = "Stirling PDF is now your default PDF editor"
title = "Default App Set"
[desktopUpdate]
downloading = "Downloading update..."
installing = "Installing update..."
installingWarning = "The app will close automatically to complete the installation."
installNow = "Install Now"
readyToRestart = "Update Ready"
restartMessage = "The update has been installed. Restart the app to finish."
restartNow = "Restart Now"
updateFailed = "Update Failed"
updateFailedMessage = "Failed to download or install the update."
[desktopUpdate.blocked]
docsLink = "View installation documentation"
message = "Stirling-PDF does not have permission to update itself on this machine."
title = "Administrator permissions required"
[devAirgapped]
tags = "air-gapped,offline,isolated,no internet,disconnected,secure,network isolation,standalone"
[devApi]
tags = "API,development,documentation,developer,REST,integration,endpoints,programmatic,automation,scripting"
[devFolderScanning]
tags = "automation,folder,scanning,watch folder,hot folder,automatic processing,batch,monitor folder,auto process,folder monitoring"
[devSsoGuide]
tags = "SSO,single sign-on,authentication,SAML,OAuth,OIDC,login,enterprise,identity provider,IdP"
[dropdownList]
searchPlaceholder = "Search..."
[editableSecretField]
edit = "Edit"
editSecretValue = "Edit secret value"
[editTableOfContents]
submit = "Apply table of contents"
tags = "bookmarks,contents,edit,table of contents,TOC,outline,navigation,chapters,sections,add bookmarks,edit bookmarks,PDF outline"
[editTableOfContents.actions]
clipboardUnavailable = "Clipboard access is not available in this browser."
export = "Export bookmarks"
exportClipboard = "Copy JSON to clipboard"
exportJson = "Download JSON"
importClipboard = "Paste JSON from clipboard"
importJson = "Import JSON"
loadFromPdf = "Load from selected PDF"
noFile = "Select a PDF to extract existing bookmarks."
selectedFile = "Loaded from {{file}}"
source = "Load bookmarks"
[editTableOfContents.editor]
addTopLevel = "Add top-level bookmark"
childBadge = "Child"
confirmRemove = "Remove this bookmark and all of its children?"
defaultChildTitle = "Child bookmark"
defaultSiblingTitle = "New bookmark"
defaultTitle = "New bookmark"
description = "Add, nest, and reorder bookmarks to craft your PDF outline."
heading = "Bookmark editor"
pagePreview = "Page {{page}}"
untitled = "Untitled bookmark"
[editTableOfContents.editor.actions]
addChild = "Add child bookmark"
addSibling = "Add sibling bookmark"
remove = "Remove bookmark"
toggle = "Toggle children"
[editTableOfContents.editor.empty]
action = "Add first bookmark"
description = "Import existing bookmarks or start by adding your first entry."
title = "No bookmarks yet"
[editTableOfContents.editor.field]
page = "Target page number"
title = "Bookmark title"
[editTableOfContents.error]
failed = "Failed to update the table of contents"
[editTableOfContents.info]
line1 = "Each bookmark needs a descriptive title and the page it should open."
line2 = "Use child bookmarks to build a hierarchy for chapters, sections, or subsections."
line3 = "Import bookmarks from the selected PDF or from a JSON file to save time."
[editTableOfContents.messages]
copied = "Copied to clipboard"
copiedBody = "Bookmark JSON copied successfully."
copyFailed = "Copy failed"
exported = "JSON download ready"
imported = "Bookmarks imported"
importedBody = "Your JSON outline replaced the current editor contents."
importedClipboard = "Clipboard data replaced the current bookmark list."
invalidJson = "Invalid JSON structure"
invalidJsonBody = "Please provide a valid bookmark JSON file and try again."
loadedBody = "Existing bookmarks from the PDF were loaded into the editor."
loadedTitle = "Bookmarks extracted"
loadFailed = "Unable to extract bookmarks from the selected PDF."
noBookmarks = "No bookmarks were found in the selected PDF."
[editTableOfContents.results]
subtitle = "Download the processed file or undo the operation below."
title = "Updated PDF with bookmarks"
[editTableOfContents.settings]
replaceExisting = "Replace existing bookmarks (uncheck to append)"
replaceExistingHint = "When disabled, the new outline is appended after the current bookmarks."
title = "Bookmarks & outline"
[editTableOfContents.workbench]
changeFile = "Change PDF"
filePrompt = "Select a PDF from your library or upload a new one to begin."
selectFile = "Select PDF"
subtitle = "Import bookmarks, build hierarchies, and apply the outline without cramped side panels."
[editTableOfContents.workbench.empty]
description = "Select the Edit Table of Contents tool to load its workspace."
title = "Open the tool to start editing"
[emptyFilesState]
upload = "Upload"
[encryptedPdfUnlock]
description = "This PDF is password protected. Enter the password so you can continue working with it."
emptyResponse = "Password removal did not produce a file."
incorrectPassword = "Incorrect password"
missingFile = "The selected file is no longer available."
required = "Enter the password to continue."
skip = "Skip for now"
successBody = "Password removed successfully."
successBodyWithName = "Password removed from {{fileName}}"
successTitle = "Password removed"
title = "Remove password to continue"
unlock = "Unlock & Continue"
unlockAll = "Use for all ({{count}})"
unlockAllPartialFail = "Wrong password for: {{names}}"
unlockAllSuccess_one = "Unlocked {{count}} file."
unlockAllSuccess_other = "Unlocked {{count}} files."
unlockPrompt = "Unlock PDF to continue"
viewerLocked = "This PDF is password-protected"
viewerUnlock = "Unlock"
[encryptedPdfUnlock.password]
label = "PDF password"
placeholder = "Enter the PDF password"
[endpointStatistics]
title = "Endpoint Statistics"
[error]
_value = "Error"
dismissAllErrors = "Dismiss All Errors"
generic = "An error occurred"
[extractImages]
allowDuplicates = "Save duplicate images"
selectText = "Select image format to convert extracted images to"
submit = "Extract"
tags = "picture,photo,save,archive,zip,capture,grab"
title = "Extract Images"
[extractImages.error]
failed = "An error occurred while extracting images from the PDF."
[extractImages.settings]
title = "Settings"
[extractPage]
tags = "extract"
[extractPages]
submit = "Extract Pages"
tags = "pull,select,copy,extract,extract pages,get pages,pull out,save pages,export pages,copy pages,select pages,specific pages"
title = "Extract Pages"
[extractPages.error]
failed = "Failed to extract pages"
[extractPages.pageNumbers]
label = "Pages to Extract"
placeholder = "e.g., 1,3,5-8 or odd & 1-10"
[extractPages.results]
title = "Pages Extracted"
[extractPages.settings]
title = "Settings"
[extractPages.tooltip]
description = "Extracts the selected pages into a new PDF, preserving order."
[fileCard]
openInFileEditor = "Open in File Editor"
viewInViewer = "View in Viewer"
[fileDropdownMenu]
closeFile = "Close file"
[fileEditor]
addFiles = "Add Files"
[fileManager]
active = "Active"
addToUpload = "Add to Upload"
changesNotUploaded = "Changes not uploaded"
clearAll = "Clear All"
clearSelection = "Clear"
closeAllFiles = "Close all files"
closeFile = "Close File"
cloudFile = "Cloud file"
copyCreated = "Copy saved to this device."
copyFailed = "Could not create a copy."
delete = "Delete"
deleteAll = "Delete All"
deleteSelected = "Delete Files"
deselectAll = "Uncheck All"
details = "File Details"
download = "Download"
downloadSelected = "Download Files"
dropFilesHere = "Drop files here"
fileFormat = "Format"
fileHistory = "File History"
fileName = "Name"
fileSize = "Size"
filesSelected = "files"
filesStored = "files stored"
fileVersion = "Version"
filterAll = "All"
filterLocal = "Local"
filterSharedByMe = "Shared by me"
filterSharedWithMe = "Shared with me"
googleDrive = "Google Drive"
googleDriveNotAvailable = "Google Drive integration not available"
googleDriveShort = "Drive"
hideHistory = "Hide History"
lastModified = "Last Modified"
lastSynced = "Last synced"
leaveShare = "Remove from my list"
leaveShareFailed = "Could not remove the shared file."
leaveShareSuccess = "Removed from your shared list."
loadingFiles = "Loading files..."
localOnly = "Local only"
makeCopy = "Make a copy"
mobileShort = "Mobile"
mobileUpload = "Mobile Upload"
mobileUploadNotAvailable = "Mobile upload not enabled"
moreOptions = "More options"
myFiles = "My Files"
nextFile = "Next file"
noFiles = "No files available"
noFilesFound = "No files found matching your search"
noRecentFiles = "No recent files found"
openFile = "Open File"
openFiles = "Open Files"
openInFileEditor = "Open in File Editor"
openInPageEditor = "Open in Page Editor"
owner = "Owner"
ownerUnknown = "Unknown"
previousFile = "Previous file"
recent = "Recent"
removeBoth = "Remove from both"
removeFilePrompt = "This file is saved on this device and on your server. Where would you like to remove it from?"
removeFileTitle = "Remove file"
removeLocalOnly = "This device only"
removeServerFailed = "Could not remove the file from the server."
removeServerOnly = "Server only"
removeServerOnlyPrompt = "This file is stored only on your server. Would you like to remove it from the server?"
removeServerSuccess = "Removed from server."
removeSharedPrompt = "This file is shared with you. You can remove it from this device or your shared list."
removeSharedServerOnlyBlockedPrompt = "This file is shared with you and stored only on the server."
removeSharedServerOnlyPrompt = "This file is shared with you and stored only on the server. Remove it from your list?"
restore = "Restore"
saveSelected = "Save Files"
searchFiles = "Search files..."
selectAll = "Check All"
selectedCount = "{{count}} checked"
share = "Share"
shared = "Shared"
sharedByYou = "Shared by you"
sharedEditNoticeBody = "You do not have edit rights to the server version of this file. Any edits you make will be saved as a local copy."
sharedEditNoticeConfirm = "Got it"
sharedEditNoticeTitle = "Read-only server copy"
sharedWithYou = "Shared with you"
shareSelected = "Share Files"
sharing = "Sharing"
showAll = "Show All"
showHistory = "Show History"
sortByDate = "Sort by Date"
sortByName = "Sort by Name"
sortBySize = "Sort by Size"
storage = "Storage"
storageState = "Storage"
synced = "Synced"
title = "Upload PDF Files"
toolChain = "Tools Applied"
unsupported = "Unsupported"
unzip = "Unzip"
updateOnServer = "Update on Server"
uploadSelected = "Upload Files"
uploadToServer = "Upload to Server"
versionHistory = "Version history"
[files]
addFiles = "Add files"
created = "Created"
selectFromWorkbench = "Add files to the workbench or "
selectMultipleFromWorkbench = "Add at least {{count}} files to the workbench or "
size = "File Size"
title = "Files"
upload = "Upload"
uploadFiles = "Upload Files"
[fileSelectorPicker]
empty = "No files available"
placeholder = "Select file"
search = "Filter files…"
tabListLabel = "Saved files, workbench, upload"
upload = "Upload from computer"
[fileSelectorPicker.sort]
dateAsc = "Oldest first"
dateDesc = "Newest first"
dateLabel = "Latest"
nameAsc = "A to Z"
nameDesc = "Z to A"
nameLabel = "AZ"
[fileSelectorPicker.tabs]
saved = "Saved files"
upload = "Upload"
workbench = "Workbench"
[fileSidebar]
addFiles = "Add files"
addingFiles = "Adding files…"
collapse = "Collapse sidebar"
customizeGroups = "Customize groups"
dropHint = "Open files to get started"
dropToAdd = "Drop files to add"
expand = "Expand sidebar"
files = "Files"
googleDrive = "Google Drive"
googleDriveDisabled = "Google Drive is not configured"
leaveMyFiles = "Leave My Files"
myFiles = "My Files"
noFiles = "No files yet"
openFileManager = "Browse all files & folders"
openFromComputer = "Open from computer"
openSettings = "Open settings"
other = "Other"
recent = "Recent"
search = "Search"
searchPlaceholder = "Search files..."
viewAll = "View all {{count}} files"
[fileSidebar.fileItem]
closeViewer = "Close viewer"
delete = "Delete"
moreActions = "More actions"
openInViewer = "Open in viewer"
savedToServer = "Saved to server"
updateOnServer = "Update on server"
uploadToServer = "Upload to server"
versionHistory = "Version history"
[fileSidebar.groupsModal]
add = "Add"
addLabel = "Add a label…"
categoryIconAria = "Choose an icon for {{name}}"
createCategory = "Create category"
delete = "Delete category"
done = "Done"
hide = "Hide category"
newCategory = "New category name…"
removeLabel = "Remove {{name}}"
rename = "Rename"
reset = "Reset to defaults"
search = "Search labels…"
show = "Show category"
subtitle = "Group your files into parent categories. Add existing or new labels to a category, rename it, or create your own. Files in none of your categories appear under “Other”."
title = "Sidebar categories"
[filesPage]
addToWorkspace = "Add to workspace"
addToWorkspaceCount = "Add {{count}} to workspace"
allFiles = "All files"
back = "Back"
backToFolder = "Back to {{folder}}"
backToMyFiles = "Back to My Files"
breadcrumbs = "Folder path"
cancel = "Cancel"
classification = "Classification"
clearSearch = "Clear search"
clearSelection = "Clear selection"
closeDetails = "Close details"
create = "Create"
cycleBlocked = "Can't move a folder into one of its own subfolders."
delete = "Delete"
deleteFilesChoiceBody = "Some of these files are saved both on this device and in the cloud. Where should they be deleted from?"
deleteFilesCloudBody_one = "Delete 1 file from the cloud? This cannot be undone."
deleteFilesCloudBody_other = "Delete {{count}} files from the cloud? This cannot be undone."
deleteFilesError = "Could not delete. Try again."
deleteFilesLocalBody_one = "Delete 1 file from this device? This cannot be undone."
deleteFilesLocalBody_other = "Delete {{count}} files from this device? This cannot be undone."
deleteFilesTitle_one = "Delete 1 file?"
deleteFilesTitle_other = "Delete {{count}} files?"
deleteFolder = "Delete folder"
deleteFolderBody = "Delete folder \"{{name}}\"?"
deleteFolderContents_one = "Also delete {{count}} file inside the folder"
deleteFolderContents_other = "Also delete {{count}} files inside the folder"
deleteFolderContentsWarning = "Files will be permanently removed and cannot be recovered."
deleteFolderError = "Could not delete the folder. Try again."
deleteFolderKeepHint = "Files inside will be moved to All files."
deleteFolderTitle = "Delete folder?"
deselectAll = "Clear selection"
details = "Details"
detailsCount_one = "{{count}} file selected"
detailsCount_other = "{{count}} files selected"
dismissError = "Dismiss"
download = "Download"
downloadAll = "Download all"
downloadVersion = "Download this version"
dropOverlay = "Drop files to upload"
dropOverlaySub = "Files start in Local. Use 'Move to' or 'Save to cloud' to organize them into a folder."
file = "File"
fileInfo = "File info"
fileMenu = "File actions"
folder = "Folder"
folderItems_one = "{{count}} item"
folderItems_other = "{{count}} items"
folderMenu = "Folder actions"
inPath = "in {{path}}"
inWorkspace = "Open"
inWorkspaceAria = "Already in workspace"
loading = "Loading…"
localFoldersUnavailable = "Folders are cloud-only - save a file to the cloud to organize it."
moveSkippedRemote_one = "{{count}} file couldn't be moved on the server (no permission or already deleted)."
moveSkippedRemote_other = "{{count}} files couldn't be moved on the server (no permission or already deleted)."
moveTo = "Move to…"
myFiles = "My Files"
newFolder = "New folder"
newFolderStorageDisabled = "Server folder storage isn't enabled. Ask your admin to turn it on."
newFolderTabUnavailable = "Switch to All or Cloud to create folders."
offlineNoFolderEdits = "Server folder sync unavailable - folder changes are disabled. Check sign-in and storage configuration."
open = "Open"
openVersionInWorkspace = "Open in workspace"
originFilter = "Filter by source"
refresh = "Refresh from server"
remove = "Delete"
removeVersion = "Remove this version"
rename = "Rename"
renameFolder = "Rename folder"
resizeFolderTree = "Resize folder tree (arrow keys, Shift for bigger steps; double-click to auto-fit)"
save = "Save"
saveToServer = "Save to server"
saveToServerDisabledHint = "Saving to the server isn't enabled on this server. Ask your admin to enable it."
search = "Search"
searchPlaceholder = "Search this folder & subfolders"
selectAll = "Select all"
selectAllHint = "Click to select all. Tip: hold Ctrl (or Cmd) to add files one at a time, Shift to select a range."
selectedCount = "{{count}} selected"
selectFile = "Select file {{name}}"
shareDisabledHint = "File sharing isn't enabled on this server. Ask your admin to enable it."
shareManage = "Manage sharing"
showDetails = "Show details"
signInRequired = "Sign in to use cloud storage."
summary_one = "{{count}} item"
summary_other = "{{count}} items"
tree = "Folders"
upload = "Upload"
uploadedToLocal = "Uploaded files start in Local. Use 'Save to cloud' to put them in a folder."
uploadFromMobile = "Upload from Mobile"
versionActions = "Version actions"
versionCollapse = "Collapse middle versions"
versionHistory = "Version history"
versionHistoryEmpty = "This file has no earlier versions."
versionOrigin = "Original upload"
versionsCount = "{{count}} versions"
versionShowHidden = "Show {{count}} earlier versions"
viewVersionHistory = "Version journey ({{count}})"
[filesPage.appearance]
colour = "Color"
icon = "Icon"
title = "Appearance"
useColour = "Use color {{c}}"
[filesPage.column]
modified = "Modified"
name = "Name"
size = "Size"
type = "Type"
[filesPage.deleteScope]
cloud = "Cloud only"
cloudHint = "Deletes from the server. A copy stays on this device."
device = "This device only"
deviceHint = "Removes the local copy. The cloud copy is kept."
everywhere = "Everywhere"
everywhereHint = "Deletes the file from this device and the cloud."
[filesPage.empty]
hint = "Drop PDFs anywhere on this page to upload, or use the New folder button to organize your files."
newFolderCta = "Create folder"
title = "This folder is empty"
uploadCta = "Upload files"
[filesPage.empty.cloud]
hint = "Upload a file to start, or create a folder to organize."
offlineHint = "Reconnect to load your cloud library."
offlineTitle = "No cached cloud files"
title = "No cloud files yet"
[filesPage.empty.local]
hint = "Files saved without uploading stay here. Drop a file to add one."
title = "No local-only files"
[filesPage.empty.recent]
hint = "Files you open or edit will appear here."
title = "Nothing modified yet"
[filesPage.empty.shared]
hint = "When someone shares a file via link, it appears here."
title = "Nothing shared with you"
[filesPage.empty.sharedByMe]
hint = "Create a share link or invite a teammate from any of your files to see it here."
title = "You haven't shared any files yet"
[filesPage.error]
actionFailed = "Could not {{action}}."
actionFailedDetail = "Could not {{action}}: {{message}}"
cloudDeleteFailed_one = "Couldn't delete 1 file from the cloud."
cloudDeleteFailed_other = "Couldn't delete {{count}} files from the cloud."
deleteFolderFailed = "Could not delete folder."
deleteFolderFailedDetail = "Could not delete folder: {{message}}"
folderAppearanceFailed = "Could not update folder appearance."
folderAppearanceFailedDetail = "Could not update folder appearance: {{message}}"
moveFilesFailed = "Could not move files."
moveFilesFailedDetail = "Could not move files: {{message}}"
moveFolderFailed = "Could not move folder."
moveFolderFailedDetail = "Could not move folder: {{message}}"
removeFilesFailed = "Could not remove files."
removeFilesFailedDetail = "Could not remove files: {{message}}"
uploadFilesFailed = "Could not upload files."
uploadFilesFailedDetail = "Could not upload files: {{message}}"
[filesPage.field]
added = "Added"
count = "Files"
folder = "Folder"
labels = "Labels"
modified = "Modified"
name = "Name"
size = "Size"
toolHistoryAtVersion = "Cumulative tool chain"
totalSize = "Total size"
type = "Type"
versionHistory = "Version journey"
[filesPage.folderName]
cancel = "Cancel"
error = "Could not save folder. Try again."
label = "Folder name"
placeholder = "Folder name"
[filesPage.moveDialog]
cancel = "Cancel"
confirm = "Move here"
error = "Could not move. Try again."
hint = "Pick a destination folder. Tip: you can also drag and drop files onto folders in the tree on the left."
newFolderCancel = "Discard"
newFolderCreate = "Create"
newFolderError = "Could not create folder. Try again."
newFolderLabel = "New folder name"
newFolderPlaceholder = "Folder name"
newFolderToggle = "Create new folder…"
title = "Move to folder"
[filesPage.origin]
all = "All sources"
cloud = "Cloud"
cloudHint = "Stored on the Stirling server"
local = "Local"
localHint = "Only stored in this browser"
shared = "Shared"
sharedHint = "Shared with you via link"
[filesPage.sort]
modifiedAsc = "Oldest first"
modifiedDesc = "Recent first"
nameAsc = "Name A→Z"
nameDesc = "Name Z→A"
sizeAsc = "Smallest first"
sizeDesc = "Largest first"
[filesPage.syncError]
client = "Folder sync failed."
network = "Could not reach the server."
server = "Server error during folder sync."
[filesPage.tabName]
local = "Local"
recent = "Recent"
shared = "Shared with me"
sharedByMe = "Shared by me"
[filesPage.tabs]
all = "All"
ariaLabel = "File views"
recent = "Recent"
shared = "Shared with me"
sharedByMe = "Shared by me"
[filesPage.treeMenu]
actions = "Folder actions for {{name}}"
delete = "Delete folder"
newSubfolder = "New subfolder"
rename = "Rename"
[filesPage.typeFilter]
allTypes = "All types"
label = "Filter by type"
[filesPage.viewMode]
grid = "Grid view"
label = "View mode"
list = "List view"
[fileToPDF]
tags = "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint"
title = "File to PDF"
[fileUpload]
dropFilesHere = "Drop files here or click the upload button"
dropFilesHereOpen = "Drop files here or click the open button"
filesAvailable = "files available"
loadFromStorage = "Load from Storage"
noFilesInStorage = "No files available in storage. Upload some files first."
noFilesInStorageOpen = "No files available in storage. Open some files first."
open = "Open"
openFile = "Open File"
openFiles = "Open Files"
selectFromStorage = "Select from Storage"
upload = "Upload"
uploadFile = "Upload File"
uploadFiles = "Upload Files"
[firstLogin]
allFieldsRequired = "All fields are required"
changePassword = "Change Password"
confirmPassword = "Confirm New Password"
currentPassword = "Current Password"
enterCurrentPassword = "Enter your current password"
enterNewPassword = "Enter new password (min 8 characters)"
error = "Error"
loggedInAs = "Logged in as"
newPassword = "New Password"
passwordChangedSuccess = "Password changed successfully! Please log in again."
passwordChangeFailed = "Failed to change password. Please check your current password."
passwordMustBeDifferent = "New password must be different from current password"
passwordsDoNotMatch = "New passwords do not match"
passwordTooShort = "Password must be at least 8 characters"
reEnterNewPassword = "Re-enter new password"
title = "First Time Login"
welcomeMessage = "For security reasons, you must change your password on your first login."
welcomeTitle = "Welcome!"
[flatten]
submit = "Flatten"
tags = "simplify,remove,interactive,flatten,flatten form,remove form fields,make static,finalize form,lock form,disable editing,convert to image,non-editable"
title = "Flatten"
[flatten.error]
failed = "An error occurred while flattening the PDF."
[flatten.options]
stepTitle = "Flatten Options"
[flatten.options.flattenOnlyForms]
desc = "Only flatten form fields, leaving other interactive elements intact"
label = "Flatten only forms"
[flatten.renderDpi]
help = "Leave blank to use the system default. Higher DPI sharpens output but increases processing time and file size."
label = "Rendering DPI (optional, recommended 150 DPI)"
placeholder = "e.g. 150"
[flatten.results]
title = "Flatten Results"
[flatten.tooltip.description]
bullet1 = "Text boxes become regular text (can't be edited)"
bullet2 = "Checkboxes and buttons become pictures"
bullet3 = "Great for final versions you don't want changed"
bullet4 = "Ensures consistent appearance across all devices"
text = "Flattening makes your PDF non-editable by turning fillable forms and buttons into regular text and images. The PDF will look exactly the same, but no one can change or fill in the forms anymore. Perfect for sharing completed forms, creating final documents for records, or ensuring the PDF looks the same everywhere."
title = "What does flattening do?"
[flatten.tooltip.formsOnly]
bullet1 = "Forms become non-editable"
bullet2 = "Links still work when clicked"
bullet3 = "Comments and notes remain visible"
bullet4 = "Bookmarks still help you navigate"
text = "This option only removes the ability to fill in forms, but keeps other features working like clicking links, viewing bookmarks, and reading comments."
title = "What does 'Flatten only forms' mean?"
[flatten.tooltip.header]
title = "About Flattening PDFs"
[footer]
discord = "Discord"
issues = "GitHub"
[formFill]
allSaved = "All saved"
extractCsvError = "Failed to extract CSV"
extractXlsxError = "Failed to extract XLSX"
flattenAfterFilling = "Flatten after filling"
requiredAbbreviation = "req"
requiredFieldsError = "Please fill in all required fields"
rescanFields = "Re-scan fields"
rescanFormFields = "Re-scan form fields"
save = "Save"
saveShortcut = "Ctrl+S to save"
unsavedChanges = "Unsaved changes"
[formFill.sidebar]
close = "Close sidebar"
[getPdfInfo]
downloadJson = "Download JSON"
downloads = "Downloads"
indexTitle = "Index"
noneDetected = "None detected"
noResults = "Run the tool to generate a report."
processing = "Extracting information..."
results = "Results"
submit = "Get Info"
tags = "infomation,data,stats,statistics"
title = "Get Info on PDF"
[getPdfInfo.compliance]
failed = "Failed"
failedCount = "failed"
noVerification = "No Verification Performed"
noVerificationDesc = "PDF standards compliance was not verified for this document."
passed = "Passed"
passedCount = "passed"
[getPdfInfo.error]
partial = "Some files could not be processed."
unexpected = "Unexpected error during extraction."
[getPdfInfo.other]
attachments = "Attachments"
embeddedFiles = "Embedded Files"
javaScript = "JavaScript"
layers = "Layers"
structureTree = "StructureTree"
xmp = "XMPMetadata"
[getPdfInfo.perPage]
annotations = "Annotations"
fonts = "Fonts"
images = "Images"
links = "Links"
multimedia = "Multimedia"
size = "Size"
xobjects = "XObject Counts"
[getPdfInfo.report]
shortTitle = "PDF Information"
[getPdfInfo.sections]
basicInfo = "Basic Info"
compliance = "Compliance"
documentInfo = "Document Info"
encryption = "Encryption"
formFields = "Form Fields"
metadata = "Metadata"
other = "Other"
permissions = "Permissions"
perPageInfo = "Per Page Info"
tableOfContents = "Table of Contents"
[getPdfInfo.status]
complete = "Extraction complete"
[getPdfInfo.summary]
author = "Author"
basic = "Basic Information"
complianceChecked = "Standards verified ({{failed}} failed)"
compliancePassed = "{{standards}} compliant"
created = "Created"
documentInfo = "Document Information"
fileSize = "File Size"
language = "Language"
modified = "Modified"
noCompliance = "No Compliance Standards"
overviewTitle = "PDF Overview"
pages = "Pages"
pdfVersion = "PDF Version"
permsAll = "All Permissions Allowed"
permsMixed = "Some permissions restricted"
permsRestricted_one = "{{count}} restriction"
permsRestricted_other = "{{count}} restrictions"
securityTitle = "Security Status"
technical = "Technical"
title = "PDF Summary"
[getPdfInfo.summary.overview]
text = "This is a {{pages}}-page PDF titled {{title}} created by {{author}} (PDF version {{version}})."
unknown = "Unknown Author"
untitled = "an untitled document"
[getPdfInfo.summary.security]
encrypted = "Encrypted PDF - Password protection present"
unencrypted = "Unencrypted PDF - No password protection"
[getPdfInfo.summary.tech]
bookmarks = "Bookmarks"
embeddedFiles = "Embedded Files"
fonts = "Fonts"
formFields = "Form Fields"
images = "Images"
javaScript = "JavaScript"
layers = "Layers"
multimedia = "Multimedia"
[groupSigning.steps]
back = "Back"
completed = "Completed"
current = "Current"
stepLabel = "Step {{number}}"
[groupSigning.steps.configureDefaults]
continue = "Continue"
invisible = "Signatures will be invisible (metadata only)"
locationLabel = "Location:"
preview = "Preview"
reasonLabel = "Reason:"
title = "Configure Signature Settings"
visible = "Signatures will be visible on page {{page}}"
[groupSigning.steps.review]
document = "Document"
dueDate = "Due Date (Optional)"
dueDatePlaceholder = "Select due date..."
invisible = "Invisible (metadata only)"
location = "Location:"
logo = "Logo:"
logoHidden = "No logo"
logoShown = "Stirling PDF logo shown"
participantCount_one = "{{count}} participant will sign in order"
participantCount_other = "{{count}} participants will sign in order"
participants = "Participants"
reason = "Reason:"
send = "Send Signing Requests"
signatureSettings = "Signature Settings"
title = "Review Session Details"
titleShort = "Review & Send"
visibility = "Visibility:"
visible = "Visible on page {{page}}"
[groupSigning.steps.selectDocument]
continue = "Continue"
noFile = "Please select a single PDF file from your active files to create a signing session."
selectedFile = "Selected document"
title = "Select Document"
[groupSigning.steps.selectParticipants]
continue = "Continue"
count_one = "{{count}} participant selected"
count_other = "{{count}} participants selected"
label = "Select participants"
placeholder = "Choose participants to sign..."
title = "Choose Participants"
[groupSigning.tooltip]
header = "About Group Signing"
[groupSigning.tooltip.finalization]
bullet1 = "All signatures are applied in the participant order you specified"
bullet2 = "You can finalize with partial signatures if needed"
bullet3 = "Once finalized, the session cannot be modified"
description = "Once all participants have signed (or you choose to finalize early), you can generate the final signed PDF."
title = "Finalization Process"
[groupSigning.tooltip.roles]
bullet1 = "Owner (you): Creates session, configures signature defaults, finalizes document"
bullet2 = "Participants: Create their signature, choose certificate, place on PDF"
bullet3 = "Participants cannot modify signature visibility, reason, or location settings"
description = "You control the signature appearance settings for all participants."
title = "Participant Roles"
[groupSigning.tooltip.sequential]
bullet1 = "First participant must sign before the second can access the document"
bullet2 = "Ensures proper signing order for legal compliance"
bullet3 = "You can reorder participants by dragging them in the list"
description = "Participants sign documents in the order you specify. Each signer receives a notification when it is their turn."
title = "Sequential Signing"
[guestBanner]
dismiss = "Dismiss banner"
message = "Create a free account to save your work, access more features, and support the project."
signUp = "Sign Up Free"
title = "You're using Stirling PDF as a guest!"
[home.addAttachments]
desc = "Add or remove embedded files (attachments) to/from a PDF"
tags = "embed,attach,include,attachments,attach files,embed files,include files,add files,file attachment,associated files,supplementary files"
title = "Add Attachments"
[home.addImage]
desc = "Adds a image onto a set location on the PDF"
tags = "insert,embed,place,add image,insert image,place image,embed image,add photo,add picture,add logo,graphics,insert picture,place photo,PNG,JPG,JPEG"
title = "Add image"
[home.addPageNumbers]
desc = "Add Page numbers throughout a document in a set location"
tags = "number,pagination,count,add page numbers,page numbering,page numbers,footer,header,number pages,sequential,pagination tool"
title = "Add Page Numbers"
[home.addPassword]
desc = "Add password protection and restrictions to PDF files"
tags = "encrypt,password,lock,secure,protect,security,encryption,safeguard,confidential,private,restrict access"
title = "Add Password"
[home.addStamp]
desc = "Add text or add image stamps at set locations"
tags = "stamp,mark,seal,approved,rejected,confidential,stamp tool,rubber stamp,date stamp,approval stamp,received,void,copy,original"
title = "Add Stamp to PDF"
[home.addText]
desc = "Add custom text anywhere in your PDF"
tags = "text,annotation,label,add text,insert text,place text,text box,add label,add caption,type on PDF,write on PDF,add words,add note,text overlay,typewriter"
title = "Add Text"
[home.adjustContrast]
desc = "Adjust Colors/Contrast, Saturation and Brightness of a PDF"
tags = "contrast,brightness,saturation,adjust colors,color correction,enhance,lighten,darken,improve quality,color balance,hue,vibrance"
title = "Adjust Colors/Contrast"
[home.annotate]
desc = "Highlight, draw, add notes and shapes in the viewer"
tags = "annotate,highlight,draw,markup,comment,notes,review,redline,feedback,markup tools,sticky notes,shapes,arrows,text box,freehand"
title = "Annotate"
[home.automate]
desc = "Build multi-step workflows by chaining together PDF actions. Ideal for recurring tasks."
tags = "workflow,sequence,automation,automate,batch,batch processing,pipeline,chain,multi-step,recurring,scheduled,automatic,process multiple,bulk operations"
title = "Automate"
[home.autoRename]
desc = "Auto renames a PDF file based on its detected header"
tags = "auto-detect,header-based,organize,relabel,auto rename,automatic rename,smart rename,rename by content,filename,file naming,detect title"
title = "Auto Rename PDF File"
[home.autoSizeSplitPDF]
tags = "auto,split,size"
title = "Auto Split by Size/Count"
[home.autoSplitPDF]
tags = "auto,split,QR,auto split,QR code,QR split,barcode,automatic split,divider page,separator page,scan divider,batch scanning"
title = "Auto Split Pages"
[home.bookletImposition]
desc = "Create booklets with proper page ordering and multi-page layout for printing and binding"
tags = "booklet,print,binding,imposition,booklet printing,saddle stitch,fold,pamphlet,brochure,print booklet,duplex,two-sided,signature,book layout,page imposition,print layout"
title = "Booklet Imposition"
[home.certSign]
desc = "Signs a PDF with a Certificate/Key (PEM/P12)"
tags = "authenticate,PEM,P12,official,encrypt,sign,certificate,PKCS12,JKS,server,manual,auto,digital certificate,certificate signature,PKI,cryptographic signature,trusted signature"
title = "Sign with Certificate"
[home.changeMetadata]
desc = "Change/Remove/Add metadata from a PDF document"
tags = "edit,modify,update,metadata,properties,document properties,author,title,subject,keywords,creator,producer,info,document info,file properties"
title = "Change Metadata"
[home.changePermissions]
desc = "Change document restrictions and permissions"
tags = "permissions,restrictions,rights,access control,allow,deny,printing,copying,editing,modify permissions,security settings,user rights"
title = "Change Permissions"
[home.compare]
desc = "Compares and shows the differences between 2 PDF Documents"
tags = "difference,compare,diff,compare PDFs,compare documents,find differences,show differences,changes,what changed,track changes,revisions,version compare,side by side,contrast,delta"
title = "Compare"
[home.compress]
desc = "Compress PDFs to reduce their file size."
tags = "shrink,reduce,optimize,compress,smaller,downsize,file size,reduce size,minimize,make smaller,decrease size,optimize size"
title = "Compress"
[home.convert]
desc = "Convert files between different formats"
tags = "transform,change,convert,PDF to Word,PDF to Excel,PDF to image,Word to PDF,Excel to PDF,PowerPoint to PDF,HTML to PDF,export,import,file conversion,format change,save as"
title = "Convert"
[home.crop]
desc = "Crop a PDF to reduce its size (maintains text!)"
tags = "trim,cut,resize,crop,crop PDF,trim PDF,trim margins,remove margins,cut edges,trim borders,remove white space,crop pages,trim pages,reduce margins,set margins"
title = "Crop PDF"
[home.devAirgapped]
desc = "Link to air-gapped setup guide"
tags = "air-gapped,offline,isolated,no internet,disconnected,secure,network isolation,standalone"
title = "Air-gapped Setup"
[home.devApi]
desc = "Link to API documentation"
tags = "API,development,documentation,developer,REST,integration,endpoints,programmatic,automation,scripting"
title = "API"
[home.devFolderScanning]
desc = "Link to automated folder scanning guide"
tags = "automation,folder,scanning,watch folder,hot folder,automatic processing,batch,monitor folder,auto process,folder monitoring"
title = "Automated Folder Scanning"
[home.devSsoGuide]
desc = "Link to SSO guide"
tags = "SSO,single sign-on,authentication,SAML,OAuth,OIDC,login,enterprise,identity provider,IdP"
title = "SSO Guide"
[home.editTableOfContents]
desc = "Add or edit bookmarks and table of contents in PDF documents"
tags = "bookmarks,contents,edit,table of contents,TOC,outline,navigation,chapters,sections,add bookmarks,edit bookmarks,PDF outline"
title = "Edit Table of Contents"
[home.extractImages]
desc = "Extracts all images from a PDF and saves them to zip"
tags = "pull,save,export,extract images,get images,save images,export images,extract photos,extract pictures,pull images,download images,rip images,extract graphics,save photos"
title = "Extract Images"
[home.extractPages]
desc = "Extract specific pages from a PDF document"
tags = "pull,select,copy,extract,extract pages,get pages,pull out,save pages,export pages,copy pages,select pages,specific pages"
title = "Extract Pages"
[home.flatten]
desc = "Remove all interactive elements and forms from a PDF"
tags = "simplify,remove,interactive,flatten,flatten form,remove form fields,make static,finalize form,lock form,disable editing,convert to image,non-editable"
title = "Flatten"
[home.formFill]
desc = "Fill PDF form fields interactively with a visual editor"
title = "Fill Form"
[home.getPdfInfo]
desc = "Grabs any and all information possible on PDFs"
tags = "info,metadata,details,PDF info,document info,properties,file info,get info,show info,view properties,document properties,statistics,page count,file details,inspect"
title = "Get ALL Info on PDF"
[home.manageCertificates]
tags = "certificates,import,export,manage certificates,digital certificates,certificate management,PFX,P12,keystore,import certificate,export certificate,certificate store,PKI"
title = "Manage Certificates"
[home.merge]
desc = "Easily merge multiple PDFs into one."
tags = "combine,join,unite,merge,merge PDFs,combine PDFs,join PDFs,concatenate,append,stitch,combine files,join files,merge documents"
title = "Merge"
[home.mobile]
brandAlt = "Stirling PDF logo"
openFiles = "Open files"
swipeHint = "Swipe left or right to switch views"
tools = "Tools"
toolsSlide = "Tool selection panel"
viewSwitcher = "Switch workspace view"
workbenchSlide = "Workspace panel"
workspace = "Workspace"
[home.multiTool]
desc = "Merge, Rotate, Rearrange, Split, and Remove pages"
tags = "multiple,tools,multi-tool,all-in-one,swiss army,page organizer,page editor,edit pages,manage pages,organize,reorganize"
title = "PDF Multi Tool"
[home.ocr]
desc = "Cleanup scans and detects text from images within a PDF and re-adds it as text."
tags = "extract,scan,OCR,optical character recognition,text recognition,scan to text,image to text,scanned document,searchable PDF,make searchable,extract text,recognize text,read scanned"
title = "OCR / Cleanup scans"
[home.overlay-pdfs]
desc = "Overlay one PDF on top of another"
tags = "overlay,combine,merge,layer,superimpose,overlay PDF,layer PDFs,combine PDFs,stack,overlay pages,background,foreground,composite"
title = "Overlay PDFs"
[home.pageLayout]
desc = "Merge multiple pages of a PDF document into a single page"
tags = "layout,arrange,combine,N-up,2-up,4-up,multiple per page,pages per sheet,layout pages,tile,grid layout,multi-page layout,combine on page,handout"
title = "Multi-Page Layout"
[home.pdfCommentAgent]
desc = "Ask AI to annotate a PDF with sticky-note comments based on your prompt"
tags = "AI,agent,comment,annotate,sticky note,review,feedback,notes"
title = "Add AI comments"
[home.pdfOrganiser]
tags = "organize,rearrange,reorder,arrange pages,sort,move pages,delete pages,remove pages,page management,page organizer,resequence"
title = "Organize"
[home.pdfTextEditor]
desc = "Edit existing text and images inside PDFs"
tags = "edit text,modify text,change text,edit content,update text,rewrite,correct,amend,redline,revise,text editor,content editor"
title = "PDF Text Editor"
[home.pdfToSinglePage]
desc = "Merges all PDF pages into one large single page"
tags = "combine,merge,single,single page,one page,merge to single,combine all,stitch pages,concatenate vertical,long page,poster"
title = "PDF to Single Large Page"
[home.read]
desc = "View and annotate PDFs. Highlight text, draw, or insert comments for review and collaboration."
tags = "view,open,display,read,viewer,PDF viewer,PDF reader,open PDF,view PDF,display PDF,preview,browse"
title = "Read"
[home.redact]
desc = "Redacts (blacks out) a PDF based on selected text, drawn shapes and/or selected page(s)"
tags = "censor,blackout,hide,redact,redaction,black out,block out,remove sensitive,hide text,privacy,confidential,GDPR,PII,sensitive data,permanently remove,cover up,legal redaction"
title = "Redact"
[home.removeAnnotations]
desc = "Removes all comments/annotations from a PDF"
tags = "delete,clean,strip,remove annotations,remove comments,delete comments,remove markup,remove highlights,clean annotations,strip comments,remove notes,delete markup,clear comments"
title = "Remove Annotations"
[home.removeBlanks]
desc = "Detects and removes blank pages from a document"
tags = "delete,clean,empty,remove blank,delete blank pages,empty pages,white pages,remove empty,clean up,cleanup blank"
title = "Remove Blank pages"
[home.removeCertSign]
desc = "Remove certificate signature from PDF"
tags = "remove,delete,unlock,remove certificate,remove signature,delete signature,unsigned,remove digital signature,strip signature,remove cert,unsign"
title = "Remove Certificate Sign"
[home.removeImage]
desc = "Remove image from PDF to reduce file size"
tags = "remove,delete,clean,remove image,delete image,strip images,remove pictures,delete photos,clean images,reduce size,remove graphics"
title = "Remove image"
[home.removePages]
desc = "Remove specific pages from a PDF document"
tags = "delete,extract,exclude,remove pages,delete pages,remove page,delete page,exclude pages,take out pages,discard pages,drop pages"
title = "Remove Pages"
[home.removePassword]
desc = "Remove password protection from your PDF document."
tags = "unlock,remove password,unlock PDF,decrypt,remove encryption,unprotect,open protected PDF,password removal,unlock protected,disable password,remove security,remove owner password"
title = "Remove Password"
[home.reorganizePages]
desc = "Rearrange, duplicate, or delete PDF pages with visual drag-and-drop control."
tags = "rearrange,reorder,organize,reorganize,move pages,page order,sort pages,arrange pages,shuffle,resequence"
title = "Reorganize Pages"
[home.repair]
desc = "Tries to repair a corrupt/broken PDF"
tags = "fix,restore,repair,fix PDF,fix broken,fix corrupt,repair PDF,repair corrupt,broken PDF,corrupt PDF,damaged PDF,recover,fix errors,PDF won't open,can't open PDF,PDF errors,troubleshoot,restore PDF,rebuild,corrupted"
title = "Repair"
[home.replaceColor]
desc = "Replace or invert colors in PDF documents"
tags = "replace color,invert color,color replacement,swap colors,change color,invert,negative,color swap,find and replace color,convert color,color change"
title = "Replace & Invert Color"
[home.rotate]
desc = "Easily rotate your PDFs."
tags = "turn,flip,orient,rotate,orientation,landscape,portrait,90 degrees,180 degrees,clockwise,counterclockwise,counter-clockwise,fix orientation"
title = "Rotate"
[home.sanitize]
desc = "Remove potentially harmful elements from PDF files"
tags = "clean,purge,remove,sanitize,remove scripts,remove javascript,remove metadata,strip metadata,security,clean document,remove hidden data,privacy"
title = "Sanitize"
[home.scalePages]
desc = "Change the size/scale of a page and/or its contents."
tags = "resize,adjust,scale,page size,resize page,scale page,change size,adjust size,enlarge,shrink page,fit to page,A4,letter size"
title = "Adjust page size/scale"
[home.scannerEffect]
desc = "Create a PDF that looks like it was scanned"
tags = "scan,simulate,create,fake scan,look scanned,scanner effect,make look scanned,photocopy effect,simulate scanner,realistic scan"
title = "Scanner Effect"
[home.scannerImageSplit]
desc = "Detect and split scanned photos into separate pages"
tags = "detect,split,photos,auto detect,detect photos,split photos,separate photos,split scanned images,multiple photos,auto split,photo detection,image detection,scan separation"
title = "Detect & Split Scanned Photos"
[home.sharedSign]
desc = "Request signatures from others and track signing sessions"
title = "Shared Signing"
[home.showJS]
desc = "Searches and displays any JS injected into a PDF"
tags = "javascript,code,script,show javascript,show JS,find javascript,detect javascript,view javascript,embedded scripts,malware,security,inspect,debug"
title = "Show Javascript"
[home.sign]
desc = "Adds signature to PDF by drawing, text or image"
tags = "signature,autograph,e-sign,electronic signature,digital signature,sign document,approval,signoff,authorize,endorse,ink signature,handwriting"
title = "Sign"
[home.split]
desc = "Split PDFs into multiple documents"
tags = "divide,separate,break,split,extract pages,separate pages,divide document,break apart,separate files,unbind,split by page,divide by chapter"
title = "Split"
[home.splitByChapters]
tags = "split,chapters,structure,split by chapters,split by bookmarks,bookmarks,outline,table of contents,TOC split,chapter split,divide by sections"
title = "Split PDF by Chapters"
[home.splitBySections]
tags = "split,sections,divide,split by sections,grid split,divide pages,split into sections,cut pages,divide grid,section split,horizontal split,vertical split"
title = "Split PDF by Sections"
[home.swagger]
tags = "API,documentation,test,swagger,API docs,REST API,endpoints,developer,API reference,API testing,OpenAPI,integration,developer docs"
title = "API Documentation"
[home.timestampPdf]
desc = "Add an RFC 3161 document timestamp to prove when your PDF existed"
tags = "timestamp,RFC 3161,TSA,time stamp authority,document timestamp,proof of existence,timestamp token,trusted timestamp,sign timestamp,notarize"
title = "Timestamp PDF"
[home.unlockPDFForms]
desc = "Remove read-only property of form fields in a PDF document."
tags = "unlock,enable,edit,unlock forms,enable forms,editable forms,remove read only,make editable,unlock fields,enable editing,form fields,fillable,unprotect forms"
title = "Unlock PDF Forms"
[home.validateSignature]
desc = "Verify digital signatures and certificates in PDF documents"
tags = "validate,verify,certificate,validate signature,verify signature,check signature,digital signature,certificate verification,signature validation,authentic,trust,signed,verify certificate"
title = "Validate PDF Signature"
[home.viewPdf]
title = "View/Edit PDF"
[home.watermark]
desc = "Add a custom watermark to your PDF document."
tags = "stamp,mark,overlay,watermark,branding,logo,confidential,draft,copyright,trademark,text overlay,image overlay,background text"
title = "Add Watermark"
[HTMLToPDF]
header = "HTML To PDF"
tags = "markup,web-content,transformation,convert"
title = "HTML To PDF"
[image.upload]
hint = "Upload a PNG, JPG, SVG, or other image file to place on the PDF. SVG files will be converted to PNG for compatibility."
label = "Upload Image"
placeholder = "Select image file"
[imageToPdf]
tags = "conversion,img,jpg,picture,photo"
[imageToPDF]
header = "Image to PDF"
title = "Image to PDF"
[infoBanner]
dismiss = "Dismiss"
[invite]
acceptError = "Failed to create account"
accountFor = "Creating account for"
alreadyHaveAccount = "Already have an account?"
choosePassword = "Choose a password"
confirmPassword = "Confirm password"
confirmPasswordPlaceholder = "Re-enter your password"
createAccount = "Create account"
creating = "Creating Account..."
email = "Email address"
emailPlaceholder = "Enter your email address"
emailRequired = "Email address is required"
goToLogin = "Go to Login"
invalidEmail = "Invalid email address"
invalidInvitation = "Invalid Invitation"
invalidToken = "Invalid invitation link"
linkExpires = "Link expires"
passwordMismatch = "Passwords do not match"
passwordPlaceholder = "Enter your password"
passwordRequired = "Password is required"
signIn = "Sign in"
validating = "Validating invitation..."
validationError = "Failed to validate invitation link"
welcome = "Welcome to Stirling PDF"
welcomeSubtitle = "Complete your account setup to get started"
welcomeTitle = "You've been invited!"
[landing]
addFiles = "Add Files"
mobileUpload = "Upload from Mobile"
openFromComputer = "Open from computer"
uploadFromComputer = "Upload from computer"
workbenchEmptyStateHero = "Drop a PDF anywhere"
[language]
direction = "ltr"
[legal]
accessibility = "Accessibility"
cookie = "Cookie Policy"
iAgreeToThe = "I agree to all of the"
impressum = "Impressum"
privacy = "Privacy Policy"
showCookieBanner = "Cookie Preferences"
terms = "Terms and Conditions"
[licenses]
title = "3rd Party Licenses"
[localMode]
toolUnavailable = "This tool requires an account. Sign in to Stirling Cloud or connect to a self-hosted server to use it."
[localMode.toolPicker]
message = "Sign in to unlock all tools."
signIn = "Sign In"
[login]
accountCreatedSuccess = "Account created successfully! You can now sign in."
backToSignIn = "Back to sign in"
changePasswordWarning = "Please change your password after logging in for the first time"
createAccount = "Create an account"
credentialsUpdated = "Your credentials have been updated. Please sign in again."
defaultCredentials = "Default Login Credentials"
email = "Email"
enterEmail = "Enter your email"
enterEmailForMagicLink = "Enter your email for magic link"
enterMfaCode = "Enter 6-digit code"
enterPassword = "Enter your password"
enterUsername = "Enter username"
failedToSignIn = "Failed to sign in with {{provider}}: {{message}}"
forgotPassword = "Forgot your password?"
loggingIn = "Logging In..."
logIn = "Log In"
login = "Login"
magicLinkSent = "Magic link sent to {{email}}! Check your email and click the link to sign in."
mfaCode = "Authentication Code"
mfaRequired = "Two-factor code required"
or = "Or"
password = "Password"
passwordChangedSuccess = "Password changed successfully! Please sign in with your new password."
passwordResetSent = "Password reset link sent to {{email}}! Check your email and follow the instructions."
passwordUpdatedSuccess = "Your password has been updated successfully."
pleaseEnterBoth = "Please enter both email and password"
pleaseEnterEmail = "Please enter your email address"
resetHelp = "Enter your email to receive a secure link to reset your password. If the link has expired, please request a new one."
resetYourPassword = "Reset your password"
sending = "Sending…"
sendMagicLink = "Send Magic Link"
sendResetLink = "Send reset link"
sessionExpired = "Your session has expired. Please sign in again."
signin = "Sign in"
signingIn = "Signing in..."
signInWith = "Sign in with"
title = "Sign in"
unexpectedError = "Unexpected error: {{message}}"
updatePassword = "Update password"
useEmailInstead = "Login with email"
useMagicLink = "Use magic link instead"
username = "Username"
youAreLoggedIn = "You are logged in!"
[login.slides.edit]
alt = "Edit PDFs"
subtitle = "With over a dozen tools to help you redact, sign, read and manipulate PDFs, you will be sure to find what you are looking for."
title = "Edit PDFs to display/secure the information you want"
[login.slides.overview]
alt = "Stirling PDF overview"
subtitle = "A privacy-first cloud suite for PDFs that lets you convert, sign, redact, and manage documents, along with 50+ other powerful tools."
title = "Your one-stop-shop for all your PDF needs."
[login.slides.secure]
alt = "Secure PDFs"
subtitle = "Add passwords, redact content, and manage certificates with ease."
title = "Protect sensitive information in your PDFs"
[margin]
large = "Large"
medium = "Medium"
small = "Small"
xLarge = "Extra Large"
[MarkdownToPDF]
header = "Markdown To PDF"
tags = "markup,web-content,transformation,convert,md"
title = "Markdown To PDF"
[merge]
goToFileEditor = "Go to file editor"
submit = "Merge"
tags = "merge,Page operations,Back end,server side"
title = "Merge"
viewerModeHint = "Merge needs 2 or more files. Head to the file editor to add them."
[merge.error]
failed = "An error occurred while merging the PDFs."
[merge.generateTableOfContents]
label = "Generate table of contents in the merged file?"
[merge.generateTableOfContents.tooltip]
description = "Automatically creates a clickable table of contents in the merged PDF based on the original file names and page numbers."
title = "Generate Table of Contents"
[merge.removeDigitalSignature]
label = "Remove digital signature in the merged file?"
[merge.removeDigitalSignature.tooltip]
description = "Digital signatures will be invalidated when merging files. Check this to remove them from the final merged PDF."
title = "Remove Digital Signature"
[merge.sortBy]
ascending = "Ascending"
dateModified = "Date Modified"
descending = "Descending"
description = "Files will be merged in the order shown. Drag to reorder or sort below."
filename = "File Name"
label = "Sort By"
sort = "Sort"
[merge.tooltip.header]
title = "Merge Settings Overview"
[mobileScanner]
addToBatch = "Add to Batch"
back = "Back"
batchImages = "Batch"
camera = "Camera"
cameraAccessDenied = "Camera access denied. Please enable camera access."
cameraDescription = "Scan documents using your device camera with automatic edge detection"
capture = "Capture Photo"
chooseMethod = "Choose Upload Method"
chooseMethodDescription = "Select how you want to scan and upload documents"
clearBatch = "Clear"
edgeDetection = "Edge Detection"
fileDescription = "Upload existing photos or documents from your device"
fileUpload = "File Upload"
flash = "Flash"
flashlight = "Flashlight"
httpsRequired = "Camera access requires HTTPS or localhost. Please use HTTPS or access via localhost."
noSession = "Invalid Session"
noSessionMessage = "Please scan a valid QR code to access this page."
processing = "Processing..."
retake = "Retake"
selectFilesPrompt = "Select files to upload"
selectImage = "Select Image"
sessionExpired = "This session has expired. Please refresh and try again."
sessionInvalid = "Session Error"
sessionNotFound = "Session not found. Please refresh and try again."
sessionValidationError = "Unable to verify session. Please try again."
title = "Mobile Scanner"
upload = "Upload"
uploadAll = "Upload All"
uploadFailed = "Upload failed. Please try again."
uploading = "Uploading..."
uploadSuccess = "Upload Successful!"
uploadSuccessMessage = "Your images have been transferred."
validating = "Validating session..."
[mobileUpload]
description = "Scan to upload photos. Images auto-convert to PDF."
descriptionNoConvert = "Scan to upload photos from your mobile device."
error = "Connection Error"
expiryWarning = "Session Expiring Soon"
expiryWarningMessage = "This QR code will expire in {{seconds}} seconds. A new code will be generated automatically."
filesReceived_one = "{{count}} file received"
filesReceived_other = "{{count}} files received"
instructions = "Scan with your phone camera. Images convert to PDF automatically."
instructionsNoConvert = "Scan with your phone camera to upload files."
pollingError = "Error checking for files"
sessionCreateError = "Failed to create session"
title = "Upload from Mobile"
[multiTool]
tags = "Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move,delete,migrate,divide"
title = "PDF Multi Tool"
[navbar]
search = "Search"
[oauth.error]
message = "Authentication was not successful. You can close this window and try again."
title = "Authentication Failed"
[oauth.success]
message = "You can close this window and return to Stirling PDF."
title = "Authentication Successful"
[oauthConsent]
approve = "Allow access"
approving = "Allowing..."
decisionFailed = "Could not submit your decision. Please try again."
deny = "Deny"
denying = "Denying..."
loadFailed = "This authorization request is invalid or has expired. Close this tab and try connecting again from the app."
loading = "Loading authorization request..."
missingId = "Missing authorization request. Start the connection from your app and try again."
redirecting = "Returning you to the app..."
requesting = "{{app}} wants to access your Stirling PDF account"
scopesIntro = "This will allow {{app}} to:"
signedInAs = "Signed in as {{name}}"
signInButton = "Sign in to continue"
signInPrompt = "Sign in to your Stirling PDF account to continue connecting the app."
title = "Authorize access"
unknownApp = "A third-party application"
[oauthConsent.access]
actAsYou = "Act as you - everything {{app}} does runs under your account and counts towards your usage"
tools = "Use your Stirling PDF tools on your behalf - convert, edit, sign, secure and process your documents"
[oauthConsent.scope]
email = "See your email address"
openid = "Confirm your identity"
phone = "See your phone number"
profile = "See your basic profile information"
[ocr]
desc = "Cleanup scans and detects text from images within a PDF and re-adds it as text."
tags = "recognition,text,image,scan,read,identify,detection,editable"
title = "OCR / Scan Cleanup"
[ocr.error]
failed = "OCR operation failed"
[ocr.languagePicker]
additionalLanguages = "Looking for additional languages?"
loading = "Loading available languages..."
viewSetupGuide = "View setup guide →"
[ocr.operation]
submit = "Process OCR and Review"
[ocr.results]
title = "OCR Results"
[ocr.settings]
title = "Settings"
[ocr.settings.advancedOptions]
clean = "Clean input file"
cleanFinal = "Clean final output"
deskew = "Deskew pages"
label = "Processing Options"
sidecar = "Create a text file"
[ocr.settings.compatibilityMode]
label = "Compatibility Mode"
[ocr.settings.languages]
label = "Languages"
placeholder = "Select languages"
[ocr.settings.ocrMode]
auto = "Auto (skip text layers)"
force = "Force (re-OCR all, replace text)"
label = "OCR Mode"
strict = "Strict (abort if text found)"
[ocr.tooltip.advanced.clean]
text = "Preprocesses the input by removing noise, enhancing contrast, and optimizing the image for better OCR recognition before processing."
title = "Clean Input File"
[ocr.tooltip.advanced.cleanFinal]
text = "Post-processes the final PDF by removing OCR artifacts and optimizing the text layer for better readability and smaller file size."
title = "Clean Final Output"
[ocr.tooltip.advanced.compatibility]
text = "Uses OCR 'sandwich PDF' mode: results in larger files, but more reliable with certain languages and older PDF software. By default we use hOCR for smaller, modern PDFs."
title = "Compatibility Mode"
[ocr.tooltip.advanced.deskew]
text = "Automatically corrects skewed or tilted pages to improve OCR accuracy. Useful for scanned documents that weren't perfectly aligned."
title = "Deskew Pages"
[ocr.tooltip.advanced.header]
title = "Advanced OCR Processing"
[ocr.tooltip.advanced.sidecar]
text = "Generates a separate .txt file alongside the PDF containing all extracted text content for easy access and processing."
title = "Create Text File"
[ocr.tooltip.header]
title = "OCR Settings Overview"
[ocr.tooltip.languages]
text = "Improve OCR accuracy by specifying the expected languages. Choose one or more languages to guide detection."
title = "Languages"
[ocr.tooltip.mode]
bullet1 = "Auto skips pages that already contain text layers."
bullet2 = "Force re-OCRs every page and replaces all the text."
bullet3 = "Strict halts if any selectable text is found."
text = "Optical Character Recognition (OCR) helps you turn scanned or screenshotted pages into text you can search, copy, or highlight."
title = "OCR Mode"
[ocr.tooltip.output]
bullet1 = "Searchable PDF embeds text behind the original image."
bullet2 = "HOCR XML returns a structured machine-readable file."
bullet3 = "Plain-text sidecar creates a separate .txt file with raw content."
text = "Decide how you want the text output formatted:"
title = "Output"
[onboarding]
activeFiles = "The <strong>Active Files</strong> view shows all of the PDFs you have loaded into the tool."
allTools = "This is the <strong>Tools</strong> panel, where you can browse and select from all available PDF tools."
close = "Close"
cropSettings = "Now that we've selected the file we want crop, we can configure the Crop tool to choose the area that we want to crop the PDF to."
fileCheckbox = "Files on the workbench are selected for processing. You can select multiple files for batch operations using the left files sidebar."
fileReplacement = "The modified file will replace the original file in the Workbench automatically, allowing you to easily run it through more tools."
filesButton = "The <strong>Files</strong> button on the Quick Access bar allows you to upload PDFs to use the tools on."
fileSources = "You can upload new files or access recent files from here. For the tour, we'll just use a sample file."
finish = "Finish"
next = "Next"
pinButton = "You can use the <strong>Pin</strong> button if you'd rather your files stay active after running tools on them."
results = "After the tool has finished running, the <strong>Review</strong> step will show a preview of the results in this panel, and allow you to undo the operation or download the file. "
runButton = "Once the tool has been configured, this button allows you to run the tool on all the selected PDFs."
selectCropTool = "Let's select the <strong>Crop</strong> tool to demonstrate how to use one of the tools."
stepOf = "Step {{current}} of {{total}}"
toolInterface = "This is the <strong>Crop</strong> tool interface. As you can see, there's not much there because we haven't added any PDF files to work with yet."
workbench = "This is the <strong>Workbench</strong> - the main area where you view and edit your PDFs."
wrapUp = "You're all set! You can replay this tour anytime - just open <strong>Settings</strong> and find it here in the <strong>Tours</strong> section under Help."
[onboarding.buttons]
back = "Back"
download = "Download →"
next = "Next →"
showMeAround = "Show me around"
skipForNow = "Skip for now"
skipTheTour = "Skip the tour"
[onboarding.checklist]
dismiss = "Dismiss"
title = "Set up Stirling PDF"
[onboarding.checklist.downloadDesktop]
description = "Run Stirling natively on your machine"
title = "Download Stirling for Desktop"
[onboarding.checklist.inviteTeam]
description = "Collaborate with your team"
title = "Invite team members"
[onboarding.checklist.shareAnalytics]
description = "Help improve Stirling"
title = "Share anonymous usage data"
[onboarding.checklist.takeTour]
description = "See how Stirling works in a quick walkthrough"
title = "Take the tour"
[onboarding.desktopInstall]
body = "Stirling works best as a desktop app. You can use it offline, access documents faster, and make edits locally on your computer."
selectOs = "Select operating system"
title = "Download"
titleWithOs = "Download for {{osLabel}}"
[onboarding.mfa]
authenticationCode = "Authentication code"
description = "Secure your account by linking an authenticator app. Scan the QR code or enter the setup key, then confirm the 6-digit code to finish."
enable = "Enable MFA"
enableError = "Unable to enable two-factor authentication. Check the code and try again."
enterCode = "Enter the 6-digit code from your app."
enterCodeError = "Enter the authentication code to continue."
logout = "Logout"
openAuthenticator = "Open Google Authenticator, Authy, or 1Password."
qrCodeLoading = "Generating your QR code…"
regenerateQrCode = "Regenerate QR code"
scanQrCode = "Scan the QR code or enter the setup key below."
setupError = "Unable to start two-factor setup. Please try again."
setupKey = "Setup key (manual entry)"
stepByStep = "Step-by-step"
success = "MFA has been enabled. You can now continue."
title = "Multi-Factor Authentication Setup"
[onboarding.planOverview]
adminBodyLoginDisabled = "Once you enable login mode, you can manage users, configure settings, and monitor server health. The first <strong>{{freeTierLimit}}</strong> people on your server get to use Stirling free of charge."
adminBodyLoginEnabled = "As an admin, you can manage users, configure settings, and monitor server health. The first <strong>{{freeTierLimit}}</strong> people on your server get to use Stirling free of charge."
adminTitle = "Admin Overview"
userBody = "Invite teammates, assign roles, and keep your documents organized in one secure workspace. Enable login mode whenever you're ready to grow beyond solo use."
userTitle = "Plan Overview"
[onboarding.processorIntro]
body = "Stirling now runs <strong>Policies</strong> — automated rules that classify, secure, and process every document as it arrives. Set them up and monitor runs in the <strong>Processor</strong>."
cta = "Check out the Processor"
title = "Check out the Stirling Processor"
[onboarding.saas.freeEditor]
freeLine = "The editor is now <free>completely free</free>."
premium = "We've added loads of new features, including <strong>Policies</strong> and <strong>Agent Chat</strong>."
title = "Welcome to Stirling"
[onboarding.saas.team]
addButton = "Add"
createBody = "Work on documents together: teammates share files, automations and your plan. Add the first member by email to create your team."
createTitle = "Create your team"
inviteBody = "Everyone on your team shares files, automations and your plan. Add teammates by email and they'll get an invite."
inviteTitle = "Invite members to your team"
[onboarding.saas.usage]
body = "Automations, AI and API requests draw from your free allowance. Manual editing never counts against it."
title = "Your free Processor allowance"
[onboarding.securityCheck]
message = "The application has undergone significant changes recently. Your server admin's attention may be required. Please confirm your role to continue."
roleAdmin = "Admin"
rolePlaceholder = "Confirm your role"
roleUser = "User"
[onboarding.serverLicense]
freeBody = "Our <strong>Open-Core</strong> licensing permits up to <strong>{{freeTierLimit}}</strong> users for free per server. To scale uninterrupted, we recommend the Stirling Server plan - <strong>unlimited seats</strong> and <strong>SSO support</strong> for $99/server/mo."
freeTitle = "Server License"
overLimitBody = "Our licensing permits up to <strong>{{freeTierLimit}}</strong> users for free per server. You have <strong>{{overLimitUserCopy}}</strong> Stirling users. To continue uninterrupted, upgrade to the Stirling Server plan - <strong>unlimited seats</strong>, PDF text editing, and full admin control for $99/server/mo."
overLimitTitle = "Server License Needed"
seePlans = "See Plans →"
upgrade = "Upgrade now →"
[onboarding.tourOverview]
body = "Stirling PDF V2 ships with dozens of tools and a refreshed layout. Take a quick tour to see what changed and where to find the features you need."
title = "Tour Overview"
[onboarding.welcomeSlide]
body = "Stirling PDF is now ready for teams of all sizes. This update includes a new layout, powerful new admin capabilities, and our most requested feature - <strong>Edit Text</strong>."
title = "Welcome to Stirling"
[onboarding.whatsNew]
activeFilesView = "Use Active Files to see everything you have open and pick what to work on."
fileUpload = "Use the <strong>Files</strong> button to upload or pick a recent PDF. We will load a sample so you can see the workspace."
leftPanel = "The left <strong>Tools</strong> panel lists everything you can do. Browse categories or search to find a tool quickly."
pageEditorView = "Switch to the Page Editor to reorder, rotate, or delete pages."
quickAccess = "Start at the <strong>Quick Access</strong> rail to jump between Reader, Automate, your files, and all the tours."
topBar = "The top bar lets you swap between <strong>Viewer</strong>, <strong>Page Editor</strong>, and <strong>Active Files</strong>."
wrapUp = "That is what is new in V2. Open the <strong>Tours</strong> menu anytime to replay this, the Tools tour, or the Admin tour."
[overlay-pdfs]
desc = "Overlay one PDF on top of another"
submit = "Submit"
tags = "Overlay"
title = "Overlay PDFs"
[overlay-pdfs.counts]
item = "Count for file"
label = "Overlay Counts (for Fixed Repeat Mode)"
noFiles = "Add overlay files to configure counts"
[overlay-pdfs.error]
failed = "An error occurred while overlaying PDFs."
[overlay-pdfs.mode]
fixedRepeat = "Fixed Repeat Overlay"
interleaved = "Interleaved Overlay"
label = "Select Overlay Mode"
sequential = "Sequential Overlay"
[overlay-pdfs.overlayFiles]
addMore = "Add more PDFs..."
label = "Select Overlay PDF Files"
placeholder = "Choose PDF(s)..."
[overlay-pdfs.position]
background = "Background"
foreground = "Foreground"
label = "Select Overlay Position"
[overlay-pdfs.results]
title = "Overlay Results"
[overlay-pdfs.settings]
title = "Settings"
[overlay-pdfs.tooltip.counts]
text = "Provide a positive number for each overlay file showing how many pages to take before moving to the next. Required when mode is Fixed Repeat."
title = "Counts (Fixed Repeat only)"
[overlay-pdfs.tooltip.description]
text = "Combine a base PDF with one or more overlay PDFs. Overlays can be applied page-by-page in different modes and placed in the foreground or background."
title = "Description"
[overlay-pdfs.tooltip.header]
title = "Overlay PDFs Overview"
[overlay-pdfs.tooltip.mode]
fixedRepeat = "Fixed Repeat Overlay: Take a set number of pages from each overlay before moving to the next. Use Counts to set the numbers."
interleaved = "Interleaved Overlay: Take one page from each overlay in turn."
sequential = "Sequential Overlay: Use pages from the first overlay PDF until it ends, then move to the next."
text = "Choose how to distribute overlay pages across the base PDF pages."
title = "Overlay Mode"
[overlay-pdfs.tooltip.overlayFiles]
text = "Select one or more PDFs to overlay on the base. The order of these files affects how pages are applied in Sequential and Fixed Repeat modes."
title = "Overlay Files"
[overlay-pdfs.tooltip.position]
text = "Foreground places the overlay on top of the page. Background places it behind."
title = "Overlay Position"
[pageEdit]
deselectAll = "None"
selectAll = "Check All"
[pageEditor]
title = "Page Editor"
[pageEditor.emptyState]
body = "Add files to start editing pages"
title = "No PDF files loaded"
[pageEditor.toolbar]
delete = "Delete Selected"
redo = "Redo"
rotateLeft = "Rotate Selected Left"
rotateRight = "Rotate Selected Right"
undo = "Undo"
[pageExtracter]
title = "Extract Pages"
[pageLayout]
addBorder = "Add Borders"
borderWidth = "Border Thickness"
bottom = "Bottom Margin"
cols = "Columns"
colsPlaceholder = "Enter columns"
innerMargin = "Inner Margin"
left = "Left Margin"
pagesPerSheet = "Pages per sheet:"
right = "Right Margin"
rows = "Rows"
rowsPlaceholder = "Enter rows"
submit = "Submit"
tags = "merge,composite,single-view,organize"
title = "Multi Page Layout"
top = "Top Margin"
[pageLayout.advanced.tooltip.arrangement]
bullet1 = "By Rows: Fill each row first."
bullet2 = "By Columns: Fill each column first."
text = "Controls whether pages fill the grid row-by-row or column-by-column."
title = "Page Arrangement"
[pageLayout.advanced.tooltip.header]
title = "Advanced Layout Options"
[pageLayout.advanced.tooltip.orientation]
text = "Choose the final sheet direction. Portrait works better for tall content, while landscape fits wider layouts."
title = "Orientation"
[pageLayout.advanced.tooltip.readingDirection]
bullet1 = "LTR: Left to right order."
bullet2 = "RTL: Right to left order."
text = "Sets horizontal ordering in the grid, useful for left-to-right and right-to-left document conventions."
title = "Reading Direction"
[pageLayout.arrangement]
byColumns = "By Columns"
byRows = "By Rows"
label = "Page arrangement:"
[pageLayout.desc]
16 = "Place 16 pages on a single sheet (4 × 4 grid)."
2 = "Place 2 pages side-by-side on a single sheet."
4 = "Place 4 pages on a single sheet (2 × 2 grid)."
9 = "Place 9 pages on a single sheet (3 × 3 grid)."
[pageLayout.error]
failed = "An error occurred while creating the multi-page layout."
innerMarginTooLarge = "Inner margin is too large for the selected layout."
outerHorizontalMarginsTooLarge = "Left/Right margins are too large for this page size."
outerVerticalMarginsTooLarge = "Top/Bottom margins are too large for this page size."
[pageLayout.margins]
borderThicknessPlaceholder = "Enter border thickness"
bottomPlaceholder = "Enter bottom margin"
innerPlaceholder = "Enter inner margin"
leftPlaceholder = "Enter left margin"
rightPlaceholder = "Enter right margin"
topPlaceholder = "Enter top margin"
[pageLayout.marginsBorders.tooltip.borders]
text = "Enable borders to draw lines around each placed page. This can help visual separation or trimming."
title = "Add Borders"
[pageLayout.marginsBorders.tooltip.borderWidth]
text = "Border thickness is only applied when borders are enabled. Higher values produce thicker lines."
title = "Border Thickness"
[pageLayout.marginsBorders.tooltip.header]
title = "Margins and Borders"
[pageLayout.marginsBorders.tooltip.innerMargin]
text = "Inner margin adds spacing between cells in the page grid to improve separation and readability."
title = "Inner Margin"
[pageLayout.marginsBorders.tooltip.margins]
text = "Use top, bottom, left, and right margins to control spacing around the full sheet output."
title = "Margins"
[pageLayout.mode]
custom = "Custom"
default = "Default"
label = "Mode:"
[pageLayout.orientation]
label = "Orientation:"
landscape = "Landscape"
portrait = "Portrait"
[pageLayout.readingDirection]
label = "Reading Direction:"
ltr = "Left to Right"
rtl = "Right to Left"
[pageLayout.tooltip.header]
title = "Page Layout Guide"
[pageLayout.tooltip.mode]
bullet1 = "Default: Pick a preset and the grid is calculated automatically."
bullet2 = "Custom: Set rows and columns manually."
text = "Choose how the grid is configured:"
title = "Mode"
[pageLayout.tooltip.overview]
text = "Fit multiple pages onto a single sheet for handouts or to save paper."
title = "What is Page Layout?"
[pageLayout.tooltip.pagesPerSheet]
text = "Choose how many pages per sheet (e.g. 4 → 2×2, 9 → 3×3)."
title = "Pages per Sheet (Default Mode)"
[pageLayout.tooltip.rowsCols]
text = "Set exact grid dimensions. Total pages per sheet = rows × columns."
title = "Rows & Columns (Custom Mode)"
[pageRemover]
title = "Page Remover"
[pageSelection.tooltip]
description = "Choose which pages to use for the operation. Supports single pages, ranges, formulas, and the all keyword."
[pageSelection.tooltip.complex]
bullet1 = "<strong>1,3-5,8,2n</strong> → pages 1, 35, 8, plus evens"
bullet2 = "<strong>10-,2n-1</strong> → from page 10 to end + odd pages"
description = "Mix different types."
title = "Complex Combinations"
[pageSelection.tooltip.header]
title = "Page Selection Guide"
[pageSelection.tooltip.individual]
bullet1 = "<strong>1,3,5</strong> → selects pages 1, 3, 5"
bullet2 = "<strong>2,7,12</strong> → selects pages 2, 7, 12"
description = "Enter numbers separated by commas."
title = "Individual Pages"
[pageSelection.tooltip.mathematical]
bullet1 = "<strong>2n</strong> → all even pages (2, 4, 6…)"
bullet2 = "<strong>2n-1</strong> → all odd pages (1, 3, 5…)"
bullet3 = "<strong>3n</strong> → every 3rd page (3, 6, 9…)"
bullet4 = "<strong>4n-1</strong> → pages 3, 7, 11, 15…"
description = "Use n in formulas for patterns."
title = "Mathematical Functions"
[pageSelection.tooltip.ranges]
bullet1 = "<strong>3-6</strong> → selects pages 36"
bullet2 = "<strong>10-15</strong> → selects pages 1015"
bullet3 = "<strong>5-</strong> → selects pages 5 to end"
description = "Use - for consecutive pages."
title = "Page Ranges"
[pageSelection.tooltip.special]
bullet1 = "<strong>all</strong> → selects all pages"
title = "Special Keywords"
[payg.activity]
docs = "docs"
empty = "No billable activity yet this period."
subtitle = "Only AI and automation draw from your budget. Everyday tools are free and aren't listed here."
title = "Recent billable activity"
[payg.cap]
amount = "Cap amount"
custom = "Custom"
docsEstimate = "≈ {{docs}} processed PDFs / month"
docsRate = "at {{rate}} / PDF"
noCapDesc = "Usage is billed without an upper limit. You can re-enable a cap at any time."
noCapLabel = "No cap"
noneShort = "No cap"
perMonth = "/ month"
save = "Update cap"
subtitle = "Set your maximum spend. We convert this to PDFs using the current price tier."
title = "Monthly spending cap"
[payg.checkout]
connecting = "Connecting to Stripe…"
errorTitle = "Stripe error"
[payg.checkout.error]
startFailed = "Couldn't start checkout session"
[payg.checkout.mock]
backend = "Backend is in mock mode; no real Stripe session was created."
continue = "Continue with mock subscription"
noKey = "VITE_STRIPE_PUBLISHABLE_KEY is unset. Real iframe mounts here once configured."
title = "Stripe Embedded Checkout (mock mode)"
[payg.confirm]
body = "Your team can now run automation, AI, and API operations beyond your 500 free PDFs."
capValue = "{{symbol}}{{amount}} / month"
noCap = "No cap"
note = "You can change your cap, cancel, or open the Stripe customer portal any time from this page."
summaryLabel = "Monthly ceiling"
title = "Welcome to the Processor plan"
[payg.docHelp]
billable = "Only automation runs, AI tools, and API calls count. Manual tools in the editor are always free."
chains = "Running the same file through several steps of one automation counts it once, not once per step."
perFile = "Each file you process counts as one PDF. Very long or very large files can count as more than one."
refunds = "If a job fails on its first step, the PDF is credited back automatically."
toggle = "What counts as a PDF?"
[payg.error]
body = "We couldn't reach the billing service. Refresh the page to try again."
title = "Couldn't load your plan"
[payg.free.cta]
benefit1Body = "chain tools, schedule runs, batch process"
benefit1Title = "Automation pipelines"
benefit2Body = "summarize, classify, redact, AI-OCR"
benefit2Title = "AI tools"
benefit3Body = "call any Stirling endpoint programmatically"
benefit3Title = "API access"
button = "Turn on Processor →"
reassurance = "No minimum · Set a $0 cap to test · Cancel anytime"
subtitle = "Keep going past your 500 free PDFs with automation, AI, and the API. Set a monthly ceiling, so you stay in control."
title = "Turn on the Processor plan"
[payg.free.editor]
eyebrow = "Editor plan · Always free"
[payg.free.header]
freeBody = "View, edit, merge, split, sign, watermark, compress, convert and manual OCR — as much as you want, no matter where you trigger it."
freeTitle = "Unlimited PDF editing"
[payg.free.hero]
capSuffix = "/ {{limit}} free PDFs"
metaCategories = "Automation · AI · API requests"
[payg.free.member]
ownerOnly = "Only your team owner can turn on Processor. Manual tools stay free for you to use as much as you like."
[payg.free.proc]
eyebrow = "Processor plan · metered"
[payg.free.state]
approachingLimit = "Approaching limit"
limitReached = "Limit reached"
plentyLeft = "Plenty left"
[payg.gates]
ai = "AI tools (AI Create, suggestions, AI-OCR)"
automation = "Automations & pipelines"
client = "Browser-only tools (viewer, page editor, file management)"
offsite = "Server tools (compress, OCR, convert, watermark…)"
pauses = "pauses at cap"
title = "What happens when the cap is reached"
[payg.header]
eyebrow = "Processor plan · {{start}} {{end}}"
freeBody = "View, edit, merge, split, sign, watermark, compress, convert and manual OCR — as much as you want, no matter where you trigger it."
freeLabel = "Always free"
freeTitle = "Unlimited PDF editing"
meterBody = "{{limit}} free PDFs to start, then billed per PDF up to your cap."
meterLabel = "Metered"
meterTitle = "Automation · AI · API"
[payg.member]
askLeader = "Only your team owner can change the cap."
[payg.members]
docs = "PDFs"
subtitle = "Billable PDFs each teammate has processed this period."
title = "Team member usage"
[payg.role]
leader = "Team owner"
member = "Member"
[payg.signupRequired]
body = "Stirling PDF gives every signed-up account 500 free operations, enough to keep most workflows humming without paying a cent. You're currently using Stirling as a guest, which doesn't include billable tools like AI, automations, or hosted processing."
cancel = "Not now"
cta = "Sign up free"
subtext = "Creating an account is free and takes a few seconds. No credit card required."
title = "Sign up to use {{category}}"
[payg.signupRequired.category]
ai = "AI features"
api = "this tool"
automation = "automations"
default = "this feature"
[payg.spendCapMeter]
capSuffix = "/ {{amount}} cap"
metaCategories = "Automation · AI · API spend"
resets = "Resets each billing period"
[payg.state]
degraded = "Cap reached"
full = "Healthy"
warned = "Approaching cap"
[payg.stripe]
open = "Open billing portal"
subtitle = "Receipts, invoices, payment method, billing currency."
title = "Manage billing in Stripe"
[payg.stripe.toast.unavailable]
body = "Billing portal isn't available right now. Try again in a moment."
title = "Billing portal unavailable"
[payg.upgrade]
backAria = "Back"
closeAria = "Close"
[payg.upgrade.button]
cancel = "Cancel"
continue = "Continue →"
finish = "Finish"
[payg.upgrade.cap]
help = "We'll never charge above this. Set $0 if you want to keep everything free while testing."
title = "Set your monthly spend ceiling"
usdNote = "Estimated in USD. You can adjust your cap any time after subscribing, in your own currency."
[payg.upgrade.checkout]
capValue = "{{symbol}}{{amount}} / month"
edit = "Edit"
help = "Stripe handles your card details. Stirling never sees them."
loading = "Loading checkout…"
noCap = "No cap"
title = "Add your payment method"
[payg.upgrade.help]
aiBody = "summarize, classify, redact, AI-OCR"
aiTitle = "AI tools"
apiBody = "programmatic access to any Stirling endpoint"
apiTitle = "API calls"
automationBody = "chained tools or scheduled runs that don't need clicks"
automationTitle = "Automation pipelines"
footnote = "Manual tools (viewing, editing, merging, splitting, watermarking, compressing, manual OCR) are always free, even past 500. The distinction is the type of work, not where you click."
title = "What we count toward billing"
[payg.upgrade.promise]
body = "You only pay for automation pipelines, AI tools, and API calls, the work that goes beyond a single click. Edit, merge, split, sign, compress as much as you want, no charge."
highlight = "Manual tools stay free, always."
[payg.upgrade.steps]
cap = "Set monthly ceiling"
payment = "Add payment method"
[payg.upgrade.title]
confirm = "You're subscribed"
default = "Upgrade to Processor plan"
[payg.usage]
breakdown = "AI {{ai}} • Automation {{automation}} • API {{api}}"
capLine = "{{cap}}/mo cap"
estBill = "≈ {{amount}} so far this period"
firstFree = "First {{free}} free"
noCap = "No monthly cap"
ofLimitProcessed = "/ {{limit}} PDFs processed"
processed = "PDFs processed"
resetsIn = "Resets in {{days}} days"
resetsTomorrow = "Resets tomorrow"
thisPeriod = "This billing period"
[payment]
canCloseWindow = "You can now close this window."
error = "Payment Error"
generatingLicense = "Generating your license key..."
licenseActivated = "License activated! Your license key has been saved. A confirmation email has been sent to your registered email address."
licenseDelayed = "Payment successful! Your license is being generated. You will receive an email with your license key shortly. If you don't receive it within 10 minutes, please contact support."
licenseDelayedMessage = "Your license key is being generated. Please check your email shortly or contact support."
licenseInstructions = "This has been added to your installation. You will receive a copy in your email as well."
licenseKey = "Your License Key"
licensePollingError = "Payment successful but we couldn't retrieve your license key automatically. Please check your email or contact support with your payment confirmation."
licenseRetrievalError = "Payment successful but license retrieval failed. You will receive your license key via email. Please contact support if you don't receive it within 10 minutes."
licenseSaveError = "Failed to save license key. Please contact support with your license key to complete activation."
monthly = "Monthly"
paymentCanceled = "Payment was canceled. No charges were made."
perMonth = "/month"
preparing = "Preparing your checkout..."
redirecting = "Redirecting to secure checkout..."
success = "Payment Successful!"
successMessage = "Your subscription has been activated successfully. You will receive a confirmation email shortly."
syncError = "Payment successful but license sync failed. Your license will be updated shortly. Please contact support if issues persist."
syncingLicense = "Syncing your upgraded license..."
upgradeComplete = "Upgrade Complete"
upgradeCompleteMessage = "Your subscription has been upgraded successfully. Your existing license key has been updated."
upgradeSuccess = "Payment successful! Your subscription has been upgraded. The license has been updated on your server. You will receive a confirmation email shortly."
upgradeTitle = "Upgrade to {{planName}}"
yearly = "Yearly"
[payment.emailStage]
continue = "Continue"
description = "We'll use this to send your license key and receipts."
emailLabel = "Email Address"
emailPlaceholder = "your@email.com"
modalTitle = "Get Started - {{planName}}"
[payment.paymentStage]
modalTitle = "Complete Payment - {{planName}}"
[payment.planStage]
billedYearly = "Billed yearly at {{currency}}{{amount}}"
modalTitle = "Select Billing Period - {{planName}}"
savePercent = "Save {{percent}}%"
savingsAmount = "You save {{amount}}"
selectMonthly = "Select Monthly"
selectYearly = "Select Yearly"
[pdfCommentAgent]
submit = "Generate comments"
[pdfCommentAgent.error]
emptyPrompt = "Please describe what the AI should comment on"
failed = "Failed to generate comments"
tooLong = "Prompt is too long (maximum {{max}} characters)"
[pdfCommentAgent.prompt]
label = "What should the AI comment on?"
placeholder = "e.g. Flag any ambiguous dates and suggest clarifications"
[pdfCommentAgent.results]
title = "Commented PDF"
[pdfCommentAgent.settings]
title = "Comment instructions"
[pdfOrganiser]
placeholder = "(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)"
tags = "duplex,even,odd,sort,move"
title = "Page Organizer"
[pdfOrganiser.mode]
1 = "Custom Page Order"
10 = "Odd-Even Merge"
11 = "Duplicate all pages"
2 = "Reverse Order"
3 = "Duplex Sort"
4 = "Booklet Sort"
5 = "Side Stitch Booklet Sort"
6 = "Odd-Even Split"
7 = "Remove First"
8 = "Remove Last"
9 = "Remove First and Last"
_value = "Organization mode"
[pdfOrganiser.mode.desc]
BOOKLET_SORT = "Arrange pages for booklet printing (last, first, second, second last, …)."
CUSTOM = "Use a custom sequence of page numbers or expressions to define a new order."
DUPLEX_SORT = "Interleave fronts then backs as if a duplex scanner scanned all fronts, then all backs (1, n, 2, n-1, …)."
DUPLICATE = "Duplicate each page according to the custom order count (e.g., 4 duplicates each page 4×)."
ODD_EVEN_MERGE = "Merge two PDFs by alternating pages: odd from the first, even from the second."
ODD_EVEN_SPLIT = "Split the document into two outputs: all odd pages and all even pages."
REMOVE_FIRST = "Remove the first page from the document."
REMOVE_FIRST_AND_LAST = "Remove both the first and last pages from the document."
REMOVE_LAST = "Remove the last page from the document."
REVERSE_ORDER = "Flip the document so the last page becomes first and so on."
SIDE_STITCH_BOOKLET_SORT = "Arrange pages for sidestitch booklet printing (optimized for binding on the side)."
[pdfTextEditor]
conversionFailed = "Failed to convert PDF. Please try again."
converting = "Converting PDF to editable format..."
currentFile = "Current file: {{name}}"
imageLabel = "Placed image"
noTextOnPage = "No editable text was detected on this page."
pagePreviewAlt = "Page preview"
pageSummary = "Page {{number}} of {{total}}"
tags = "edit text,modify text,change text,edit content,update text,rewrite,correct,amend,redline,revise,text editor,content editor"
title = "PDF Text Editor"
viewLabel = "PDF Editor"
[pdfTextEditor.actions]
applyChanges = "Apply Changes"
clearText = "Clear text"
downloadCopy = "Download Copy"
moreOptions = "More options"
reset = "Reset Changes"
[pdfTextEditor.badges]
earlyAccess = "Early Access"
modified = "Edited"
[pdfTextEditor.empty]
dropzone = "Drag and drop a PDF here, or click to browse"
dropzoneWithFiles = "Select a file from the Files tab, or drag and drop a PDF here, or click to browse"
title = "No document loaded"
[pdfTextEditor.errors]
invalidJson = "Unable to read the JSON file. Ensure it was generated by the PDF to JSON tool."
pdfConversion = "Unable to convert the edited JSON back into a PDF."
[pdfTextEditor.fontAnalysis]
allFonts = "All fonts"
currentPageFonts = "Fonts on this page"
details = "Font Details"
embedded = "Embedded"
fallback = "fallback"
infoMessage = "Font reproduction information available."
missing = "missing"
perfect = "perfect"
perfectMessage = "All fonts can be reproduced perfectly."
subset = "subset"
suggestions = "Notes"
type = "Type"
warningMessage = "Some fonts may not render correctly."
warnings = "Warnings"
webFormat = "Web Format"
[pdfTextEditor.groupingMode]
auto = "Auto"
paragraph = "Paragraph"
singleLine = "Single Line"
[pdfTextEditor.manual]
expandWidth = "Expand to page edge"
merge = "Merge selection"
mergeTooltip = "Merge selected boxes"
resetWidth = "Reset width"
resizeHandle = "Adjust text width"
ungroup = "Ungroup selection"
ungroupTooltip = "Split paragraph back into lines"
widthMenu = "Width options"
[pdfTextEditor.modeChange]
cancel = "Cancel"
confirm = "Reset and Change Mode"
title = "Confirm Mode Change"
warning = "Changing the text grouping mode will reset all unsaved changes. Are you sure you want to continue?"
[pdfTextEditor.options.advanced]
title = "Advanced Settings"
[pdfTextEditor.options.autoScaleText]
description = "Automatically scales text horizontally to fit within its original bounding box when font rendering differs from PDF."
title = "Auto-scale text to fit boxes"
[pdfTextEditor.options.forceSingleElement]
description = "When enabled, the editor exports each edited text box as one PDF text element to avoid overlapping glyphs or mixed fonts."
title = "Lock edited text to a single PDF element"
[pdfTextEditor.options.groupingMode]
autoDescription = "Automatically detects page type and groups text appropriately."
paragraphDescription = "Groups aligned lines into multi-line paragraph text boxes."
singleLineDescription = "Keeps each PDF text line as a separate text box."
title = "Text Grouping Mode"
[pdfTextEditor.pageType]
paragraph = "Paragraph page"
sparse = "Sparse text"
[pdfTextEditor.stages]
processing = "Processing"
uploading = "Uploading"
[pdfTextEditor.tooltip.alpha]
text = "This alpha viewer is still evolving-certain fonts, colors, transparency effects, and layout details may shift slightly. Please double-check the generated PDF before sharing."
title = "Alpha Viewer"
[pdfTextEditor.tooltip.header]
title = "Preview Limitations"
[pdfTextEditor.tooltip.previewVariance]
text = "Some visuals (such as table borders, shapes, or annotation appearances) may not display exactly in the preview. The exported PDF keeps the original drawing commands whenever possible."
title = "Preview Variance"
[pdfTextEditor.tooltip.textFocus]
text = "This workspace focuses on editing text and repositioning embedded images. Complex page artwork, form widgets, and layered graphics are preserved for export but are not fully editable here."
title = "Text and Image Focus"
[pdfTextEditor.welcomeBanner]
bestFor = "Works Best With:"
bestFor1 = "Simple PDFs containing primarily text and images"
bestFor2 = "Documents with standard paragraph formatting"
bestFor3 = "Letters, essays, reports, and basic documents"
dontShowAgain = "Don't show again"
experimental = "This is an experimental feature in active development. Expect some instability and issues during use."
feedback = "This is an early access feature. Please report any issues you encounter to help us improve!"
gotIt = "Got it"
howItWorks = "This tool converts your PDF to an editable format where you can modify text content and reposition images. Changes are saved back as a new PDF."
issue1 = "Text color is not currently preserved (will be added soon)"
issue2 = "Paragraph mode has more alignment and spacing issues - Single Line mode recommended"
issue3 = "The preview display differs from the exported PDF - exported PDFs are closer to the original"
issue4 = "Rotated text alignment may need manual adjustment"
issue5 = "Transparency and layering effects may vary from original"
knownIssues = "Known Issues (Being Fixed):"
limitation1 = "Font rendering may differ slightly from the original PDF"
limitation2 = "Complex graphics, form fields, and annotations are preserved but not editable"
limitation3 = "Large files may take time to convert and process"
limitations = "Current Limitations:"
notIdealFor = "Not Ideal For:"
notIdealFor1 = "PDFs with special formatting like bullet points, tables, or multi-column layouts"
notIdealFor2 = "Magazines, brochures, or heavily designed documents"
notIdealFor3 = "Instruction manuals with complex layouts"
title = "Welcome to PDF Text Editor (Early Access)"
[PDFToCSV]
header = "PDF to CSV"
title = "PDF to CSV"
[PDFToHTML]
header = "PDF to HTML"
tags = "web content,browser friendly"
title = "PDF to HTML"
[pdfToImage]
tags = "conversion,img,jpg,picture,photo"
title = "PDF to Image"
[PDFToMarkdown]
header = "PDF To Markdown"
tags = "markup,web-content,transformation,convert,md"
title = "PDF To Markdown"
[pdfToPDFA]
header = "PDF To PDF/A"
tags = "archive,long-term,standard,conversion,storage,preservation"
title = "PDF To PDF/A"
[pdfToPDFX]
tags = "print,standard,conversion,production,prepress,archive"
title = "PDF To PDF/X"
[PDFToPresentation]
header = "PDF to Presentation"
tags = "slides,show,office,microsoft"
title = "PDF to Presentation"
[PdfToSinglePage]
tags = "single page"
[pdfToSinglePage]
description = "This tool will merge all pages of your PDF into one large single page. The width will remain the same as the original pages, but the height will be the sum of all page heights."
submit = "Convert To Single Page"
tags = "combine,merge,single,single page,one page,merge to single,combine all,stitch pages,concatenate vertical,long page,poster"
title = "PDF To Single Page"
[pdfToSinglePage.error]
failed = "An error occurred while converting to single page."
[pdfToSinglePage.results]
title = "Single Page Results"
[PDFToText]
header = "PDF to RTF (Text)"
tags = "richformat,richtextformat,rich text format"
title = "PDF to RTF (Text)"
[PDFToWord]
header = "PDF to Word"
tags = "doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile"
title = "PDF to Word"
[PDFToXLSX]
header = "PDF to Excel"
tags = "spreadsheet,excel,xlsx,table,extract,convert"
title = "PDF to Excel (XLSX)"
[PDFToXML]
header = "PDF to XML"
tags = "data-extraction,structured-content,interop,transformation,convert"
title = "PDF to XML"
[permissions]
tags = "read,write,edit,print"
title = "Change Permissions"
[pipeline]
tags = "automate,sequence,scripted,batch-process"
title = "Pipeline"
[plan]
contact = "Contact Us"
current = "Current Plan"
featureComparison = "Feature Comparison"
from = "From"
hideComparison = "Hide Feature Comparison"
licensedSeats = "Licensed: {{count}} seats"
manage = "Manage"
perMonth = "/month"
perSeat = "/seat"
popular = "Popular"
selectPlan = "Select Plan"
showComparison = "Compare All Features"
upgrade = "Upgrade"
withServer = "+ Server Plan"
[plan.api]
large = "5,000 Credits"
medium = "1,000 Credits"
small = "500 Credits"
xsmall = "100 Credits"
[plan.availablePlans]
subtitle = "Choose the plan that fits your needs"
title = "Available Plans"
[plan.enterprise]
highlight1 = "Custom pricing"
highlight2 = "Dedicated support"
highlight3 = "Latest features"
name = "Enterprise"
requiresServer = "Requires Server"
requiresServerMessage = "Please upgrade to the Server plan first before upgrading to Enterprise."
[plan.feature]
api = "API Access"
automation = "Automate tool workflows"
customPricing = "Custom Pricing"
fileSize = "File Size Limit"
pdfTools = "Basic PDF Tools"
priority = "Priority Support"
title = "Feature"
[plan.features]
allPdfOperations = "All PDF operations"
auditing = "Auditing"
communitySupport = "Community support"
customPdfMetadata = "Custom PDF metadata"
editingTextInPdfs = "Editing text in pdfs"
externalDatabase = "External Database"
googleDriveIntegration = "Google drive integration"
prometheusSupport = "Prometheus Support"
regularUpdates = "Regular updates"
saml = "SAML"
secureLoginSupport = "Secure Login Support"
selfHostedDeployment = "Self-hosted deployment"
sso = "SSO"
unlimitedUsers = "Unlimited users"
upToFiveUsers = "Up to 5 users"
upToFiveUsersLowercase = "up to 5 users"
usageTracking = "Usage tracking"
usersLimitedToSeats = "Users limited to seats"
[plan.free]
forever = "Forever free"
highlight1 = "Limited Tool Usage Per week"
highlight2 = "Access to all tools"
highlight3 = "Community support"
included = "Included"
name = "Free"
[plan.freeLimit]
cta = "View Processor Plan"
dismiss = "Maybe Later"
message = "That's your whole free allowance for automation, AI and the API. Seriously impressive! Keep the momentum going for just pennies a day."
title = "Woah, {{total}} PDFs Processed!"
[plan.highlights]
advancedIntegrations = "Advanced integrations"
allBasicFeatures = "All basic features"
cancelAnytime = "Cancel anytime"
customPdfMetadata = "Custom PDF metadata"
editingTextInPdfsCaps = "Editing text in PDFs"
enterpriseFeatures = "Enterprise features (SAML, Auditing)"
perSeatLicensing = "Per-seat licensing"
saveWithAnnualBilling = "Save with annual billing"
selfHosted = "Self-hosted"
selfHostedOnInfrastructure = "Self-hosted on your infrastructure"
ssoOAuth = "SSO (OAuth2/OIDC)"
unlimitedUsers = "Unlimited users"
upToFiveUsers = "Up to 5 users"
usageTrackingPrometheus = "Usage tracking & Prometheus"
[plan.licenseWarning]
body = "You have {{total}} users but the free tier only supports {{limit}} per server. Upgrade to keep Stirling PDF running smoothly."
cta = "See plans"
overLimit = "more than {{limit}}"
title = "Free self-hosted limit reached"
[plan.period]
month = "month"
[plan.pro]
highlight1 = "Unlimited Tool Usage"
highlight2 = "Advanced PDF tools"
highlight3 = "No watermarks"
name = "Pro"
[plan.spendCap]
cta = "View Spending Limit"
dismiss = "Not Now"
message = "You've made the most of this month's cap. That's a load of automation, AI and API work! Bump it up whenever you like to keep going."
title = "You're on a Roll!"
[plan.static]
activateLicense = "Activate Your License"
contactToUpgrade = "Contact us to upgrade or customize your plan"
getLicense = "Get Server License"
monthlyBilling = "Monthly Billing"
selectPeriod = "Select Billing Period"
upgradeToEnterprise = "Upgrade to Enterprise"
upTo = "Up to"
yearlyBilling = "Yearly Billing"
[plan.static.billingPortal]
message = "You will need to verify your email address in the Stripe billing portal. Check your email for a login link."
title = "Email Verification Required"
[plan.static.licenseActivation]
activate = "Activate License"
checkoutOpened = "Checkout Opened in New Tab"
doLater = "I'll do this later"
enterKey = "Enter your license key below to activate your plan:"
instructions = "Complete your purchase in the Stripe tab. Once your payment is complete, you will receive an email with your license key."
keyDescription = "Paste the license key from your email"
success = "License Activated!"
successMessage = "Your license has been successfully activated. You can now close this window."
[policies.activity]
outputsUnavailable = "Policy outputs are no longer available to download."
partialOutputsUnavailable = "Some policy outputs are no longer available to download."
runNotFound = "The enforcement run could no longer be found."
timedOut = "Enforcement timed out before the run could finish."
[policies.enforcement]
applying = "Applying {{names}}"
applyingProgress = "Applying {{names}} ({{done}} of {{total}})"
exportFailureBody = "Security policies couldn't be applied. Files were exported as-is."
exportFailureTitle = "Exported without enforcement"
failureBody = "{{failures}} of {{total}} file(s) couldn't be processed and were exported as-is."
failureTitle = "Exported without full enforcement"
printPolicyAppliedBody = "This PDF was updated to meet a policy. Review the changes, then print again."
printPolicyAppliedTitle = "Policy applied before printing"
successTitle = "{{names}} applied"
summaryMore = "{{first}}, {{second}} and {{more}} more"
summaryTwo = "{{first}} and {{second}}"
[policies.labels]
add = "Add"
addPlaceholder = "Add a label…"
customNote = "Customized for your team."
defaultNote = "Using the built-in default, shared with your team."
duplicate = "\"{{name}}\" already exists."
edit = "Edit labels"
empty = "No labels yet."
export = "Export JSON"
iconAria = "Choose an icon for {{name}}"
import = "Import JSON"
importError = "Couldn't import that file."
managedNote = "Team labels are managed by your team leader."
modalSubtitle = "Shared with your whole team. The classifier picks the labels that fit each document."
modalTitle = "Classification labels"
pickIcon = "Use {{label}} icon"
removeAria = "Remove {{name}}"
resetToDefault = "Reset to default"
saveForTeam = "Save for team"
saving = "Saving…"
sectionLabel = "Classification labels"
startFromScratch = "Start from scratch"
teamCount = "team labels"
tooLong = "Labels can be at most {{max}} characters."
ungrouped = "Ungrouped"
view = "View labels"
[policies.pii]
account = "Account numbers (labelled)"
card = "Credit / debit cards"
email = "Email addresses"
fieldLabel = "PII to redact"
iban = "IBANs"
phone = "Phone numbers"
placeholder = "Select PII types"
routing = "US routing numbers (ABA)"
ssn = "Social Security numbers"
[policy]
badgeEnforcing = "{{name}} enforcing..."
badgeRan = "{{name}} policy ran on this file"
blockingAction = "{{action}} blocked while enforcing policy, please wait..."
dismiss = "Dismiss overlay"
enforcingTitle = "Enforcing policy..."
viewAnyway = "View file (policy still enforcing)"
[policyOption]
autoRedactPhi = "Auto-redact PHI"
blockExport = "Block export"
ccpa = "CCPA"
contracts = "Contracts"
documents = "Documents"
fedramp = "FedRAMP"
financialReports = "Financial reports"
flagForReview = "Flag for review"
gdpr = "GDPR"
hipaa = "HIPAA"
hold = "Hold"
hrRecords = "HR records"
indefinite = "Indefinite"
insurance = "Insurance"
invoices = "Invoices"
iso27001 = "ISO 27001"
legalFilings = "Legal filings"
medicalPhi = "Medical / PHI"
never = "Never"
ninetyDays = "90 days"
oneYear = "1 year"
p60 = "60%"
p70 = "70%"
p80 = "80%"
p90 = "90%"
p95 = "95%"
pciDss = "PCI DSS"
quarantineDocument = "Quarantine document"
routeToBucket = "Route to bucket"
s3Bucket = "S3 bucket"
sevenYears = "7 years"
sharePoint = "SharePoint"
soc2 = "SOC 2"
taxDocuments = "Tax documents"
thirtyDays = "30 days"
threeYears = "3 years"
webhook = "Webhook"
[portal]
comingSoon = "Coming soon"
[portal.accountLink.card]
billingNote = "Unattended processing bills against your org wallet."
eyebrow = "Account link"
linkButton = "Link your Stirling account"
linked = "Linked"
linkedAs = "Linked as {{name}}."
linkedGeneric = "This instance is linked."
notLinked = "Not linked"
title = "Link this org to its Stirling account"
unlink = "Unlink"
[portal.accountLink.card.error]
title = "Couldn't link"
[portal.accountLink.card.loginNotConfigured]
after = "to enable account linking against the hosted Stirling account. In dev you can simulate sign-in from the link dialog."
before = "Set"
title = "SaaS login not configured"
[portal.accountLink.gate]
action = "Link account"
description = "Link this org's Stirling account to use billable features."
title = "Link to unlock"
titleFeature = "Link to unlock {{feature}}"
[portal.accountLink.instances]
active = "Active"
revoke = "Revoke"
revoked = "Revoked"
unnamed = "Unnamed instance"
[portal.accountLink.instances.columns]
instance = "Instance"
lastSeen = "Last seen"
linked = "Linked"
status = "Status"
[portal.accountLink.instances.empty]
description = "Link this org's account, then register your self-hosted instances to see them here."
title = "No linked instances"
[portal.accountLink.instances.time]
daysAgo_one = "{{count}}d ago"
daysAgo_other = "{{count}}d ago"
hoursAgo_one = "{{count}}h ago"
hoursAgo_other = "{{count}}h ago"
justNow = "just now"
minutesAgo_one = "{{count}}m ago"
minutesAgo_other = "{{count}}m ago"
never = "never"
[portal.accountLink.modal]
linkSubtitle = "Sign in to the account this server should bill against."
linkTitle = "Link your Stirling account"
reauthSubtitle = "Your session expired — sign back in to your Stirling account. Your instance stays linked."
reauthTitle = "Sign in again"
simulateSignIn = "Simulate sign-in (dev)"
[portal.accountLink.modal.loginNotConfigured]
after = "to enable in-app linking against the hosted Stirling account."
and = "and"
before = "Set"
title = "SaaS login not configured"
[portal.accountLink.panel]
instancesSub = "Every self-hosted instance registered to this org. Revoke a credential to immediately cut off its unattended access."
instancesTitle = "Linked instances"
revokeError = "Couldn't revoke instance"
sub = "Link this self-hosted org to its Stirling account so unattended processing bills against your org wallet."
[portal.accountLink.panel.loadError]
forbidden = "Only the team owner can view the org's linked instances."
generic = "Couldn't load the team's linked instances. Try again in a moment."
title = "Couldn't load linked instances"
[portal.accountLink.state]
free = "Editor plan"
subscribed = "Processor plan"
unlinked = "Not linked"
[portal.agentBuilder]
bootstrapFromDocument = "Bootstrap from document"
sectionsAriaLabel = "Agent builder sections"
selectorAriaLabel = "Agents"
subtitle = "Design, test and ship the AI agents that classify, extract from and route your documents. Define scenarios, fence tool access, run a golden set, and publish a version."
title = "Agent Builder"
[portal.agentBuilder.bootstrap]
cancel = "Cancel"
dropzoneText = "Choose a sample document (PDF or image)"
lead = "Drop a sample document and we'll propose scenarios and an extraction schema you can refine. Nothing is published until you review it."
submit = "Bootstrap agent"
subtitle = "Seed a new agent from one representative file"
title = "Bootstrap from a document"
[portal.agentBuilder.empty]
description = "Bootstrap an agent from a sample document to seed its scenarios and extraction schema, then refine and publish."
title = "No agents yet"
[portal.agentBuilder.evals]
casesPassing = "Cases passing"
columnCase = "Eval case"
columnLatency = "Latency"
columnResult = "Result"
fail = "fail"
goldenSetPassRate = "Golden-set pass rate"
latencyMs = "{{ms}} ms"
notRun = "not run"
pass = "pass"
passRate = "Pass rate"
runEvals = "Run evals"
[portal.agentBuilder.evals.empty]
description = "Evals turn your scenarios into a repeatable golden set. Upgrade to capture pass-rate over time and gate publishes on it."
title = "No golden set yet"
[portal.agentBuilder.kpi]
acrossGoldenSets = "across golden sets"
activeAgents = "Active agents"
avgPassRate = "Avg eval pass rate"
fleetWide = "fleet-wide"
latestPublished = "Latest published"
scenarios = "Scenarios"
testCases = "test cases"
totalDescription_one = "{{count}} total"
totalDescription_other = "{{count}} total"
[portal.agentBuilder.scenarios]
add = "Add"
addScenario = "Add scenario"
enable = "Enable"
expectationLabel = "Expected behaviour"
expectationPlaceholder = "What the agent should do"
inEval = "in eval"
mute = "Mute"
muted = "muted"
nameLabel = "Name"
namePlaceholder = "e.g. Compliance escalation"
[portal.agentBuilder.status]
draft = "Draft"
published = "Published"
[portal.agentBuilder.tabs]
evals = "Evals"
scenarios = "Scenarios"
tools = "Tools"
versions = "Versions"
[portal.agentBuilder.tools]
broadAccess = "Broad access"
deniedHint = "Selected tools are blocked. Everything else stays callable."
deniedTools = "Denied tools"
governanceGate = "Tool governance is available on the Enterprise plan."
restricted = "Restricted"
restrictedAccess = "Restricted tool access"
restrictedDescription = "Allow every tool except the ones you deny below."
[portal.agentBuilder.versions]
current = "current"
historyGate = "Full version history and rollback are available on the Enterprise plan."
publish = "Publish"
rollBack = "Roll back"
[portal.assistant]
close = "Close assistant"
error = "Couldn't reach the assistant."
errorWithDetail = "Couldn't reach the assistant: {{detail}}"
inputAriaLabel = "Ask the assistant"
inputPlaceholder = "Ask about Stirling…"
open = "Open assistant"
send = "Send"
title = "Assistant"
tryAsking = "Try asking"
typing = "Typing"
[portal.auth]
loading = "Loading"
redirectingToEditor = "Redirecting to the editor..."
[portal.billing.checkout]
noClientSecret = "Edge function returned no client_secret."
stepCount = "Step {{step}} of 2"
subtitle = "Add a card to keep going past your free Editor-plan grant. Stripe handles the rest."
title = "Add a payment method"
[portal.billing.checkout.activationSlow]
body = "Your payment succeeded, but activation is taking a little longer than usual. It'll switch on automatically - close this and it'll appear here shortly."
close = "Close"
title = "Almost there"
[portal.billing.checkout.cap]
back = "Back"
continue = "Continue to payment"
error = "Couldn't set your spend limit"
finePrint = "Invoices post on the 1st. Cancel anytime and revert to the Editor plan; your policies and history stay intact."
note = "Processing pauses if you reach it. You're never billed past this, and you can change it any time."
subtitle = "You're billed only for PDFs you process past your first 500 free, never for seats — so your ceiling is yours from day one."
title = "Set your spend limit"
[portal.billing.checkout.card]
fields = "Card number · MM / YY · CVC · ZIP"
label = "Card details"
note = "Card details collected by Stripe. Stirling never stores PAN or CVC."
[portal.billing.checkout.error]
title = "Couldn't start checkout"
[portal.billing.checkout.finalizing]
body = "Your payment went through. We're switching on metered processing across your linked instances - this usually takes a few seconds."
hint = "Please keep this window open."
title = "Activating your Processor plan..."
[portal.billing.enterpriseUpsell]
cta = "Explore Enterprise"
description = "Committed volume discounts, air-gapped deployment, custom MSA and security reviews, and 3rd-party distributor partnerships."
eyebrow = "Volume discount · 1M+ PDFs"
title = "Stirling Enterprise"
[portal.billing.freeEditors]
activeThisMonth = "Active this month"
cost = "Cost"
editorsDeployed = "Editors deployed"
inviteTeammates = "Invite teammates"
pdfsEdited = "PDFs edited"
subtitle = "Deploy anywhere, for your whole team."
title = "Free PDF Editors"
[portal.billing.freePlan]
checkoutErrorTitle = "Couldn't start checkout"
currentPlan = "Current plan"
freeForever = "Free forever"
noTeamResolved = "No team is resolved on your wallet yet — refresh and try again."
ownerOnly = "Only the team owner can switch on the Processor plan."
planName = "Editor"
ssoIncluded = "SSO included"
switchOnProcessor = "Switch on the Processor →"
unlimitedUsers = "Unlimited users"
[portal.billing.invoices]
columnAmount = "Amount"
columnDate = "Date"
columnDescription = "Description"
columnPdfsProcessed = "PDFs processed"
columnStatus = "Status"
descriptionFallback = "Invoice"
downloadAriaLabel = "Download invoice {{number}} as PDF"
emptyDescription = "Once your team subscribes and the first cycle closes, your invoices appear here."
emptyTitle = "No invoices yet"
fetchLimitNote_one = "Showing your {{count}} most recent invoices. Older invoices are in the Stripe portal."
fetchLimitNote_other = "Showing your {{count}} most recent invoices. Older invoices are in the Stripe portal."
loadError = "Couldn't load invoices: {{error}}"
pdfLink = "PDF ↓"
showAll_one = "Show all {{count}}"
showAll_other = "Show all {{count}}"
showFewer_one = "Show fewer (top {{count}})"
showFewer_other = "Show fewer (top {{count}})"
showMostRecent_one = "Show {{count}} most recent"
showMostRecent_other = "Show {{count}} most recent"
title = "Invoice history"
viewAriaLabel = "View invoice {{number}} in Stripe"
viewLink = "View ↗"
[portal.billing.linkPrompt]
cta = "Link Stirling account"
description = "Manual PDF editing — view, sign, merge, split, watermark, compress, convert, manual OCR — is always free, linked or not. Link to claim 500 free PDFs of metered processing (automation, AI, and the API); when you need more, turn on the Processor plan and only pay for what you use."
title = "Link your Stirling account"
[portal.billing.paymentMethod]
billedMonthly = "Billed monthly"
cardEnding = "{{brand}} ending {{last4}}"
cardFallback = "Card"
expiresBilledMonthly = "Expires {{expiry}} · billed monthly"
eyebrow = "Payment method"
managedSub = "Your card and billing details are kept securely in Stripe's customer portal."
managedTitle = "Managed in Stripe"
update = "Update"
[portal.billing.pdfsProcessed]
emptyPeriod = "No processing yet this period."
eyebrow = "PDFs processed this period"
legendValue_one = "{{formatted}} PDFs"
legendValue_other = "{{formatted}} PDFs"
segbarAriaLabel = "PDFs split by category"
segmentAgentsDesc = "AI agent actions"
segmentAgentsLabel = "Agents"
segmentApiDesc = "Direct API requests"
segmentApiLabel = "API"
segmentAutomationDesc = "Automations & pipelines"
segmentAutomationLabel = "Automation"
sizeMultiplier = "{{formatted}} PDFs used a size multiplier"
summary = "{{unique}} unique · {{units}} meter units · {{avg}} avg per PDF"
summaryNoRate = "{{unique}} unique · {{units}} meter units"
unit = "PDFs"
[portal.billing.spendLimit]
adjustLimit = "Adjust limit"
cancel = "Cancel"
capControlNote = "Changes apply immediately — raise or lower the ceiling any time."
capSuffix = "/ month"
capSuffixWithDocs = "/ month · ≈ {{documents}} documents"
displaySub = "You're only billed for what you process automatically — never past the ceiling."
editTitle = "Set your monthly ceiling"
eyebrow = "Spend limit"
guardrailBody = "a hard ceiling — you're never billed past it. At the cap, metered processing pauses (unlimited PDF editing keeps working) until you raise it or the cycle resets. Nothing is lost."
guardrailLabel = "Your guardrail:"
noCap = "no cap"
pctUsed = "{{pct}}% used"
remaining = "{{amount}} remaining"
save = "Save limit"
saveError = "Couldn't save limit"
thisPeriodUncapped = "{{amount}} this period · uncapped"
usedThisMonth = "{{amount}} used this month"
useSuggested = "Use suggested · {{amount}} / month"
[portal.billing.spendLimit.projection]
body_one = "At {{rate}}/day you reach the cap in ~{{count}} day (~{{monthEnd}} month-end). Suggested limit ~{{suggested}}."
body_other = "At {{rate}}/day you reach the cap in ~{{count}} days (~{{monthEnd}} month-end). Suggested limit ~{{suggested}}."
label = "Projected to exceed."
[portal.billing.spendThisMonth]
eyebrow = "Spend this month"
freeRemaining_one = "{{formatted}} free PDF remaining"
freeRemaining_other = "{{formatted}} free PDFs remaining"
processed_one = "{{formattedCount}} PDF processed."
processed_other = "{{formattedCount}} PDFs processed."
processedWithRate_one = "{{formattedCount}} PDF processed, at {{rate}} each."
processedWithRate_other = "{{formattedCount}} PDFs processed, at {{rate}} each."
[portal.billing.subscribedPlan.capWarn]
approachingBody = "Raise it now so automated processing never pauses."
approachingTitle = "You're at {{pct}}% of your monthly spend limit"
raiseLimit = "Raise limit"
reachedBody = "Metered processing is paused until you raise the limit or the cycle resets. Unlimited PDF editing keeps working."
reachedTitle = "Monthly spend limit reached"
[portal.billing.subscribedPlan.portalError]
title = "Couldn't open Stripe portal"
[portal.billing.walletMeter]
capSuffix_one = "of {{allowance}} free PDFs used"
capSuffix_other = "of {{allowance}} free PDFs used"
eyebrow = "Processor trial"
statusLabel_one = "{{remaining}} left"
statusLabel_other = "{{remaining}} left"
sub = "Use the PDF Editor for free. Pay to process PDFs automatically."
title_one = "Process {{allowance}} PDFs free"
title_other = "Process {{allowance}} PDFs free"
titleWithRate_one = "Process {{allowance}} PDFs free, then {{rate}}/PDF"
titleWithRate_other = "Process {{allowance}} PDFs free, then {{rate}}/PDF"
[portal.catalogue.card]
lockedAriaLabel = "Locked"
openAriaLabel = "Open {{name}} component"
[portal.catalogue.detail]
addToProject = "Add to project"
ariaLabel = "Component detail"
tabsAriaLabel = "Component detail sections"
upgradeToUnlock = "Upgrade to unlock"
[portal.catalogue.detail.code]
install = "Install"
usage = "Usage"
[portal.catalogue.detail.locked]
description = "{{name}} is included from the {{plan}}. Upgrade to embed it."
title = "Not available on your plan"
[portal.catalogue.detail.preview]
badge = "Live preview"
note = "Interactive sandbox renders here"
[portal.catalogue.detail.pricing]
note = "Metered per {{unit}}. Usage beyond the monthly free quota is billed to your account and itemised under Usage & Billing."
[portal.catalogue.detail.stats]
billedOn = "Billed on"
embeds30d = "Embeds (30d)"
freeQuota = "Free quota"
freeQuotaValue = "{{amount}} / mo"
maturity = "Maturity"
none = "None"
perAction = "Per action"
price = "Price"
[portal.catalogue.detail.tabs]
code = "Code"
overview = "Overview"
pricing = "Pricing"
props = "Props / API"
[portal.catalogue.props]
optional = "optional"
required = "required"
[portal.catalogue.props.columns]
description = "Description"
name = "Prop"
required = "Required"
type = "Type"
[portal.catalogue.summary]
componentsGa = "Components GA"
componentSpendMtd = "Component spend (MTD)"
embedsThisMonth = "Embeds this month"
inBeta = "In beta"
[portal.components.billingUnit]
approval = "approval"
check = "check"
event = "event"
render = "render"
review = "review"
session = "session"
signature = "signature"
[portal.components.maturity]
beta = "Beta"
ga = "GA"
[portal.componentsView]
subtitle = "Embeddable SDK widgets you drop into your own app — a viewer, an e-sign flow, an AI review panel. Each is metered per action. Click a card for install, usage and props."
title = "Components"
[portal.componentsView.empty]
description = "The component catalogue could not be loaded. Try again shortly."
title = "No components available"
[portal.componentsView.lockedBanner]
description = "GA components are available on Pay-as-you-go; a few Beta components are enterprise-only. Locked cards show an upgrade nudge."
title = "Some components need a paid plan"
[portal.connections]
createTitle = "New S3 connection"
delete = "Delete"
edit = "Edit"
editTitle = "Edit S3 connection"
subtitle = "Reusable S3 credentials that sources and pipeline outputs connect to."
[portal.connections.actions]
new = "New connection"
[portal.connections.empty]
description = "Add an S3 connection to reuse the same bucket and credentials across sources and pipeline outputs."
title = "No connections yet"
[portal.connections.picker]
cancel = "Cancel"
createNew = "New connection..."
placeholder = "Select a connection"
save = "Save connection"
[portal.connections.s3.fields]
name = "Connection name"
namePlaceholder = "e.g. Claims bucket"
[portal.connections.table]
bucket = "Bucket"
name = "Name"
region = "Region"
[portal.docs.authentication]
codeCaption = "every request"
eyebrow = "GETTING STARTED"
lead = "All requests authenticate with a bearer token. Keys are scoped per environment and never expire unless rotated."
liveKey = "Production keys — billed, rate-limited per your plan."
testKey = "Sandbox keys — free, return synthetic fixtures."
title = "Authentication"
[portal.docs.components]
codeCaption = "embed the viewer"
eyebrow = "COMPONENTS"
lead = "Embeddable UI for review queues and document inspection. Bring your own styles or use the shipped theme."
title = "Drop-in viewers"
[portal.docs.endpoints]
eyebrow = "API REFERENCE"
fieldCount_one = "{{count}} field"
fieldCount_other = "{{count}} fields"
filterAll = "All"
filterAriaLabel = "Filter endpoints by vertical"
lead = "Every document type is a typed endpoint. POST a file, receive schema-validated JSON. Filter by vertical below."
title = "Endpoints"
[portal.docs.errors]
codeCaption = "422 Unprocessable Entity"
eyebrow = "API REFERENCE"
lead = "Errors return a stable machine-readable code plus a human message. The 4xx body always includes a request_id for support."
title = "Errors"
[portal.docs.nav]
ariaLabel = "Documentation"
[portal.docs.nav.empty]
description = "The documentation index could not be loaded."
title = "Docs unavailable"
[portal.docs.quickstart]
eyebrow = "GETTING STARTED"
lead = "Send your first document to a typed endpoint and get structured JSON back in three steps. No model training, no prompt engineering."
title = "Quickstart"
[portal.docs.quickstart.callout]
bodyAfterLink = "for copy-paste recipes."
bodyBeforeLink = "wire the same call into a pipeline to chain validation, redaction, and delivery — or expose it to an agent over MCP. See"
label = "Next:"
link = "Playbooks"
[portal.docs.quickstart.step1]
body = "Create a scoped key from the Infrastructure tab. Keys carry rate limits and an optional IP allowlist. Export it into your shell:"
title = "Issue an API key"
[portal.docs.quickstart.step2]
body = "POST a file to any typed endpoint. The endpoint determines the schema you get back — here, the invoice extractor."
snippetCaption = "extract an invoice"
title = "Send a document"
[portal.docs.quickstart.step3]
body = "Every response is validated against the endpoint schema, with a confidence score and per-field provenance."
codeCaption = "200 OK"
title = "Read the structured result"
[portal.docs.rateLimits]
burst = "Burst"
codeCaption = "429 Too Many Requests"
concurrency = "Concurrency"
eyebrow = "GETTING STARTED"
lead = "Limits scale with your plan. A 429 response includes a Retry-After header; the SDKs back off automatically."
requestsPerMinute = "Requests / minute"
title = "Rate limits & quotas"
[portal.docs.recipes]
cloneButton = "Clone recipe"
eyebrow = "PLAYBOOKS"
lead = "End-to-end patterns that chain sources, operations, and destinations. Each maps to a pipeline you can clone."
title = "Recipes"
[portal.docs.sdks]
eyebrow = "SDKS"
lead = "First-party clients with typed responses, automatic retries, and streaming uploads. All track the same endpoint catalogue."
title = "Official SDKs"
[portal.docs.sdks.status]
beta = "Beta"
deprecated = "Deprecated"
[portal.docs.skills]
eyebrow = "SKILLS"
lead = "Bundled, named capabilities your agent invokes as a single tool. Each skill is a deterministic op chain with evals attached."
title = "Agent skills"
[portal.docs.webhooks]
codeCaption = "document.processed"
eyebrow = "API REFERENCE"
lead = "Subscribe to document.processed, pipeline.completed, and quota.threshold events. Payloads are signed with HMAC-SHA256."
title = "Webhooks"
[portal.docs.webhooks.callout]
afterHelper = "helper."
beforeHelper = "header against your signing secret before trusting a payload. SDKs ship a"
beforeSignature = "Verify the"
[portal.documents]
exportCsv = "Export CSV"
search = "Search by filename, ID..."
subtitle = "Every document your org has processed, with its full processing record. Content access is request-gated."
title = "Documents"
[portal.documents.audit]
approved = "Approved"
archived = "Archived"
elevation = "Elevation"
empty = "No events recorded yet."
extracted = "Processed"
flagged = "Needs Review"
ingested = "Ingested"
reviewed = "In Review"
[portal.documents.drawer]
sectionsAriaLabel = "Document detail sections"
[portal.documents.drawer.tabs]
audit = "Audit"
extractions = "Extractions"
overview = "Overview"
[portal.documents.elevation]
requestAccess = "Request access"
[portal.documents.elevation.active]
description = "Temporary grant — access is logged and time-boxed."
descriptionFourEyes = "Temporary grant — a peer reviewer was notified (four-eyes)."
title = "Access expires in {{time}}"
[portal.documents.elevation.gated]
description = "Content is gated by zero-standing-access. Requesting starts a time-boxed grant."
descriptionFourEyes = "Content is gated by zero-standing-access. Requesting starts a time-boxed grant and notifies a peer reviewer (four-eyes)."
title = "Sensitive document"
[portal.documents.extractions]
empty = "No fields were extracted from this document."
masked = "Extracted fields are hidden. Request timed access to view this document's content."
[portal.documents.extractions.columns]
confidence = "Confidence"
field = "Field"
value = "Value"
[portal.documents.filters]
all = "All"
ariaLabel = "Filter documents by status"
flagged = "Flagged"
inReview = "In review"
processed = "Processed"
[portal.documents.overview]
action = "Pipeline / Action"
product = "Product"
received = "Time"
status = "Status"
type = "Type"
user = "User"
[portal.documents.queue.empty]
connectSource = "Connect a source"
createPipeline = "Create a pipeline"
description = "As sources feed documents into your pipelines they'll appear here for review."
title = "No documents in the queue"
[portal.documents.status]
error = "Error"
flagged = "Needs Review"
inReview = "In Review"
processed = "Processed"
[portal.documents.table]
auto = "Auto"
editorAction = "Editor"
empty = "No documents match this filter."
rowActions = "Row actions"
sensitiveLabel = "Sensitive"
sensitiveTitle = "Sensitive — access required"
[portal.documents.table.columns]
action = "Pipeline / Action"
document = "Document"
product = "Product"
status = "Status"
time = "Time"
user = "User"
[portal.editorAdmin]
subtitle = "Deploy the Stirling PDF Editor, pair self-hosted instances to your org, and operate the running fleet — targets, health, credentials, and offline activation in one place."
title = "Editor deployment"
[portal.editorAdmin.health.columns]
activeUsers = "Active users"
host = "Host"
lastSeen = "Last seen"
region = "Region"
status = "Status"
version = "Version"
[portal.editorAdmin.health.empty]
description = "Deploy a target and pair it to see live instance health here."
title = "No instances reporting"
[portal.editorAdmin.offlineActivation]
enterpriseTag = "Enterprise"
generateButton = "Generate offline bundle"
lockCopy = "Offline and on-prem activation is part of Enterprise."
subtitle = "Generate a signed activation bundle for an offline or on-prem install with no outbound network path. Transfer it to the instance and apply it during first-run setup."
talkToSales = "Talk to sales"
title = "Air-gapped activation"
[portal.editorAdmin.offlineActivation.readyBanner]
description = "{{file}} is signed and ready to transfer. It activates one instance and expires in 14 days."
title = "Bundle ready"
[portal.editorAdmin.pairing]
generated = "Generated ✓"
generateNewCode = "Generate new code"
lockCopy = "IaC provisioning is part of Enterprise."
rotate = "Rotate"
talkToSales = "Talk to sales"
[portal.editorAdmin.sections.health]
sub = "Every Editor instance reporting in — version, region, status, last seen, and active users."
title = "Instance health"
[portal.editorAdmin.sections.pairing]
sub = "Connect a self-hosted editor to this org. Generate a token, hand off a short code, or wire it through IaC."
title = "Pairing"
[portal.editorAdmin.sections.targets]
sub = "Where the Editor runs. Copy a snippet to stand up a self-hosted instance, or use Managed Cloud with no ops."
title = "Deployment targets"
[portal.editorAdmin.serviceToken]
currentToken = "Current token"
lastRotated = "Last rotated"
rotateButton = "Rotate service token"
subtitle = "Instances authenticate to the org with this credential. Rotate it on a schedule or immediately after a suspected leak."
title = "Service token"
[portal.editorAdmin.serviceToken.rotatedBanner]
description = "A new token was issued. Update each self-hosted instance's STIRLING_SERVICE_TOKEN within the 24h grace window or they'll drop offline."
title = "Rotate running instances"
[portal.editorAdmin.status]
degraded = "Degraded"
healthy = "Healthy"
offline = "Offline"
pairing = "Pairing"
[portal.editorAdmin.targets]
instanceCount_one = "{{count}} instance"
instanceCount_other = "{{count}} instances"
talkToSales = "Talk to sales"
upgradePlan = "Upgrade plan"
[portal.editorAdmin.targets.lock]
enterprise = "On-prem and Kubernetes self-hosting are part of Enterprise."
paid = "Self-hosting with Docker and Kubernetes unlocks on a paid plan."
[portal.editorAdmin.targets.state]
available = "Available"
locked = "Locked"
running = "Running"
[portal.errorBoundary]
description = "This view hit an unexpected error. Try again, or pick another section from the sidebar."
retry = "Try again"
title = "Something went wrong on this page"
[portal.home.download]
back = "Back"
body = "Download the desktop app or self-host the server."
done = "Done"
guide = "Open the {{name}} guide"
openInBrowser = "Open in browser instead"
sectionDesktop = "Desktop app"
sectionSelfHosted = "Self-hosted"
title = "Install the Stirling PDF Editor"
[portal.home.download.docker]
detailBody = "Run the official image on your server."
note = "Opens at :8080. Default login: admin / stirling."
tagline = "Run the server in a container"
title = "Docker"
variantFat = "Fat"
variantLite = "Ultra-Lite"
variantStandard = "Standard"
[portal.home.download.kubernetes]
detailBody = "Install the official Helm chart."
note = "Add a PVC for /configs to persist settings."
tagline = "Deploy to a cluster with Helm"
title = "Kubernetes"
[portal.home.download.linux]
detailBody = "Native builds for your distribution."
guideBtn = "View Linux install options"
note = "AppImage, .deb and .rpm builds are available for common distros."
tagline = "Native desktop app for your distro"
title = "Linux"
[portal.home.download.mac]
altLabel = "Or via Homebrew"
detailBody = "Run the installer, or use Homebrew."
downloadBtn = "Download for macOS"
tagline = "Native app for Apple silicon and Intel"
title = "macOS"
[portal.home.download.manual]
detailBody = "Run the .jar on a bare metal server."
downloadBtn = "Download the .jar"
note = "Requires Java 21+. Opens at :8080; default login admin / stirling."
runLabel = "Then run it"
tagline = "Run the .jar on a bare metal server"
title = "Manual server setup"
[portal.home.download.windows]
altLabel = "Or via winget"
detailBody = "Run the installer, or use a package manager."
downloadBtn = "Download installer"
tagline = "Native app for Microsoft Windows"
title = "Windows"
[portal.home.editor]
activeUsers = "{{n}} active"
install = "Install the editor"
invite = "Invite teammates"
name = "Stirling PDF Editor"
open = "Open in browser"
updated = "updated {{time}}"
[portal.home.editor.target]
cloud = "Managed Cloud"
docker = "Self-hosted · Docker"
kubernetes = "Self-hosted · Kubernetes"
[portal.home.greeting]
afternoon = "Good afternoon"
evening = "Good evening"
morning = "Good morning"
[portal.home.onboarding.enterprise]
body = "Org-wide SSO + SCIM + RBAC, committed volume pricing, and air-gapped deployment."
cta = "Start Trial"
ctaQuote = "Get Quote"
lead = "For 250+ employees."
tag = "Enterprise"
[portal.home.onboarding.steps.editor]
blurb = "Install the desktop app or self-host"
title = "Download the editor"
[portal.home.onboarding.steps.invite]
blurb = "Bring your team into the secure workspace"
title = "Invite teammates"
[portal.home.onboarding.steps.policies]
blurb = "{{active}} active · {{recommended}} recommended"
title = "Confirm your policies"
[portal.home.quickActions]
subtitle = "Top tasks for today"
title = "Quick actions"
[portal.home.quickActions.buildPipeline]
blurb = "3-step composer over the typed op library"
title = "Build a pipeline"
[portal.home.quickActions.connectSource]
blurb = "S3, agents, webhooks, watched folders"
title = "Connect a source"
[portal.home.quickActions.issueApiKey]
blurb = "Scoped key with rate limits and IP allowlist"
title = "Issue an API key"
[portal.infrastructure]
manageEditorDeployment = "Manage Editor deployment"
sectionsAriaLabel = "Infrastructure sections"
subtitle = "Deployments, credentials, security posture, storage, and the audit trail for your Stirling workspace."
title = "Infrastructure"
# Fixed-enum label maps rendered via t(MAP[value]) in the infrastructure tabs.
[portal.infrastructure.apiKeyPermission]
admin = "Admin"
read = "Read"
write = "Write"
[portal.infrastructure.apiKeys]
createKey = "Create key"
heading = "API keys"
subheading = "Scoped credentials with per-key rate limits, permissions, and IP allowlists."
[portal.infrastructure.apiKeys.card]
allowedIps = "Allowed IPs"
anyIp = "Any IP (no allowlist)"
created = "Created"
lastUsed = "Last used"
permissions = "Permissions"
rateLimit = "Rate limit"
rateLimitValue = "{{value}} req/min"
usageMonth = "Usage this month"
usageToday = "Usage today"
[portal.infrastructure.apiKeys.empty]
description = "Create a scoped key to start calling the Stirling API."
title = "No API keys yet"
[portal.infrastructure.attestationLabel]
attested = "Attested"
inScope = "In scope"
notApplicable = "N/A"
[portal.infrastructure.audit]
filterAriaLabel = "Filter audit events by category"
heading = "Audit logs"
latencyValue = "{{value}} ms"
noEventsInCategory = "No events in this category."
subheading = "Every authentication, configuration, and processing event across your workspace."
[portal.infrastructure.audit.columns]
actor = "Actor"
event = "Event"
latency = "Latency"
status = "Status"
target = "Resource"
timestamp = "Timestamp"
[portal.infrastructure.audit.empty]
description = "Workspace activity will appear here as it happens."
title = "No audit events"
[portal.infrastructure.audit.export]
cancel = "Cancel"
error = "Export failed. Please try again."
exportButton = "Export"
exporting = "Exporting…"
fieldsLegend = "Columns"
format = "Format"
open = "Export"
subtitle = "Download audit events as CSV or JSON. Choose which columns to include."
title = "Export audit log"
[portal.infrastructure.audit.export.fields]
date = "Date"
documentName = "Document name"
ipAddress = "IP address"
outcome = "Outcome"
tool = "Tool"
username = "Username"
[portal.infrastructure.audit.filters]
all = "All"
auth = "Auth"
config = "Config"
elevation = "Elevation"
policy = "Policy"
processing = "Processing"
security = "Security"
[portal.infrastructure.audit.forbidden]
description = "The audit log is available to team leads and admins. Ask your team lead or an admin for access."
title = "You don't have access"
[portal.infrastructure.audit.metrics]
config = "Config"
policy = "Policy"
processing = "Processing"
totalEvents = "Total events · 24h"
[portal.infrastructure.auditCatLabel]
auth = "Auth"
config = "Config"
elevation = "Elevation"
policy = "Policy"
processing = "Processing"
security = "Security"
[portal.infrastructure.auditStatusLabel]
danger = "Error"
info = "Info"
success = "Success"
warning = "Warning"
[portal.infrastructure.certLabel]
certified = "Certified"
inProgress = "In progress"
notStarted = "Not started"
[portal.infrastructure.createKey]
cancel = "Cancel"
createKey = "Create key"
done = "Done"
ipAllowlistHelper = "Comma-separated CIDR ranges. Leave blank to allow any IP."
ipAllowlistLabel = "IP allowlist"
keyNameLabel = "Key name"
keyNamePlaceholder = "e.g. Production · ingest"
permissionsLabel = "Permissions"
secretKeyCaption = "Secret key"
secretWarning = "Store this in a secrets manager. Stirling only ever stores a hash — there is no way to recover it later."
subtitle = "Scope the key to the minimum it needs. You can rotate or revoke at any time."
subtitleCreated = "Copy this secret now — it won't be shown again."
title = "Create API key"
titleCreated = "Key created"
[portal.infrastructure.deployLabel]
live = "Live"
queued = "Queued"
rolledBack = "Rolled back"
rolling = "Rolling out"
[portal.infrastructure.deployments]
msValue = "{{value}} ms"
throughputValue = "{{value}}/min"
[portal.infrastructure.deployments.deployColumns]
deployedBy = "Deployed by"
environment = "Environment"
product = "Product"
status = "Status"
version = "Version"
when = "When"
[portal.infrastructure.deployments.recent]
heading = "Recent deployments"
subheading = "The latest rollouts across products and environments."
[portal.infrastructure.deployments.regionColumns]
instances = "Instances"
latency = "Latency"
load = "Load"
p99 = "P99"
region = "Region"
status = "Status"
throughput = "Throughput"
uptime = "Uptime"
version = "Version"
[portal.infrastructure.deployments.regions]
heading = "Regions"
subheading = "Live health for every deployed Stirling region — latency, load, and rollout version."
[portal.infrastructure.deployments.regions.empty]
description = "Deployed regions appear here once your workspace is provisioned."
title = "No regions deployed"
[portal.infrastructure.keyLabel]
active = "Active"
revoked = "Revoked"
rotateSoon = "Rotate soon"
[portal.infrastructure.modelLabel]
active = "Active"
degraded = "Degraded"
disabled = "Disabled"
[portal.infrastructure.models]
heading = "Models"
msValue = "{{value}} ms"
subheading = "The model catalogue and routing that powers document processing across your workspace."
[portal.infrastructure.models.byom]
description = "Register an on-prem or self-hosted model and pin it to a region for data-residency-bound processing."
title = "Bring your own model"
[portal.infrastructure.models.catalogue]
heading = "Catalogue"
sub = "Managed models available to your workspace, with live latency and cost."
subEnterprise = "Managed, bring-your-own, and on-prem models — with per-region pinning available."
[portal.infrastructure.models.catalogue.empty]
description = "Models in your workspace's catalogue appear here."
title = "No models available"
[portal.infrastructure.models.columns]
cost = "Cost"
latency = "Latency"
load = "Load"
model = "Model"
status = "Status"
type = "Type"
version = "Version"
[portal.infrastructure.models.cost]
perCall = "{{price}}/call"
perThousand = "{{price}}/1k"
[portal.infrastructure.models.metrics]
activeModels = "Active models"
avgLatency = "Avg latency"
included = "Included"
monthlySpend = "Monthly model spend"
[portal.infrastructure.models.routing]
empty = "No routing rules configured."
heading = "Routing rules"
sub = "Which model handles each operation. The default applies when no narrower rule matches."
subLocked = "Route operations to specific models — available on paid plans."
[portal.infrastructure.models.routing.lockedBanner]
description = "Upgrade to Pro to control which model handles each operation and document type."
title = "Model routing is a paid feature"
[portal.infrastructure.models.routingColumns]
default = "Default"
docType = "Document type"
modelForAria = "Model for {{operation}}"
operation = "Operation"
routedTo = "Routed to"
[portal.infrastructure.modelTypeLabel]
classification = "Classification"
extraction = "Extraction"
llm = "LLM"
ocr = "OCR"
[portal.infrastructure.regionLabel]
degraded = "Degraded"
down = "Down"
healthy = "Healthy"
[portal.infrastructure.security.access.byok]
description = "Supply a key from your own KMS. Stirling encrypts with it but can still read."
label = "Bring your own key (BYOK)"
[portal.infrastructure.security.access.hyok]
description = "Keys never leave your KMS. Stirling holds only ciphertext."
label = "Hold your own key (HYOK)"
[portal.infrastructure.security.access.stirling]
description = "Stirling manages encryption keys. Simplest — zero key ops on your side."
label = "Stirling-held keys"
[portal.infrastructure.security.accessPolicy]
heading = "Document access policy"
subheading = "Controls who can decrypt processed documents at rest."
[portal.infrastructure.security.attestations]
heading = "Compliance attestations"
noReport = "No report available"
subheading = "Framework-by-framework audit posture, with reports available on attested controls."
viewReport = "View report →"
[portal.infrastructure.security.compliance]
heading = "Compliance"
subheading = "Attestations and certifications covering the Stirling platform."
[portal.infrastructure.security.empty]
description = "Your workspace's security configuration will appear here."
title = "Security posture unavailable"
[portal.infrastructure.security.hyokBanner]
description = "With HYOK, encryption keys never leave your KMS. Stirling stores and processes only ciphertext you can revoke at any time."
title = "Stirling cannot decrypt your documents"
[portal.infrastructure.security.ipAllowlist]
empty = "No IP ranges configured — all IPs allowed."
heading = "IP allowlist"
sub = "API access is restricted to these CIDR ranges."
subLocked = "Restrict API access to known IP ranges — available on paid plans."
[portal.infrastructure.security.ipAllowlist.lockedBanner]
description = "Upgrade to Pro to restrict API access to specific networks."
title = "IP allowlisting is a paid feature"
[portal.infrastructure.security.ipColumns]
added = "Added"
addedBy = "Added by"
cidr = "CIDR"
label = "Label"
[portal.infrastructure.security.keyManagement]
algorithm = "Algorithm"
heading = "Encryption key management"
keyId = "Key identifier"
lastRotated = "Last rotated"
rotateKey = "Rotate key"
rotationPolicy = "Rotation policy"
subheading = "Custody of the keys that encrypt documents at rest — who can decrypt, and how keys rotate."
[portal.infrastructure.security.managedBanner]
description = "Bring-your-own-key (BYOK) and hold-your-own-key (HYOK) custody are available on Enterprise. Upgrade to supply keys from your own KMS."
title = "Keys are managed by Stirling on your plan"
[portal.infrastructure.security.residency.apac]
description = "ap-southeast-1"
label = "Asia Pacific"
[portal.infrastructure.security.residency.eu]
description = "eu-west-1 · GDPR data boundary"
label = "European Union"
[portal.infrastructure.security.residency.us]
description = "us-east-1 · us-west-2"
label = "United States"
[portal.infrastructure.security.residencyHeader]
heading = "Data residency"
subheading = "Where documents are stored and processed."
[portal.infrastructure.storage]
gbValue = "{{value}} GB"
percentUsed = "{{value}} used"
[portal.infrastructure.storage.empty]
description = "Connected storage and usage appear here."
title = "No storage configured"
[portal.infrastructure.storage.lifecycle]
active = "Active"
activeRange = "0{{value}}d"
archived = "Archived"
coldStorage = "cold storage"
deleted = "Deleted"
never = "never"
purged = "purged"
[portal.infrastructure.storage.providers]
connect = "Connect"
connected = "Connected"
heading = "Connected providers"
subheading = "Where processed artifacts are written."
[portal.infrastructure.storage.retention]
heading = "Retention"
subheading = "How long artifacts are kept before lifecycle deletion."
windowLabel = "Default retention window"
[portal.infrastructure.storage.retentionOption]
days_one = "{{count}} day"
days_other = "{{count}} days"
never = "Never delete"
[portal.infrastructure.storage.totalUsage]
heading = "Total usage"
progressLabel = "Storage used"
subheading = "Storage consumed across all connected providers."
[portal.infrastructure.tabs]
apiKeys = "API Keys"
audit = "Audit Logs"
deployments = "Deployments"
models = "Models"
security = "Security"
storage = "Storage"
[portal.nav]
agent-builder = "Agent Builder"
components = "Components"
docs = "Developer Docs"
documents = "Documents"
editor = "Editor"
home = "Home"
infrastructure = "Infrastructure"
pipelines = "Pipelines"
policies = "Policies"
procurement = "Procurement"
settings = "Settings"
sources = "Sources"
usage = "Usage & Billing"
users = "Users"
[portal.pipelines]
subtitle = "Every automated document pipeline on the backend: an ordered chain of operations over a set of sources, run on a trigger. Click a row for its steps and sources."
title = "Pipelines"
[portal.pipelines.actions]
newPipeline = "New pipeline"
[portal.pipelines.builder]
addStep = "Add tool"
back = "Back to pipelines"
discard = "Discard changes"
enabled = "Enabled"
keepEditing = "Keep editing"
needsUpload = "Needs an uploaded file"
noToolMatches = "No tools match your search."
pipelineSettings = "Pipeline settings"
searchTools = "Search tools"
selectToolBody = "Add a tool to build your pipeline."
selectToolTitle = "No tools yet"
toolSettings = "Tool settings"
unknownStep = "Unrecognized operation, kept as-is."
unsavedBody = "You have unsaved changes. Save them before leaving, or discard them?"
unsavedTitle = "Unsaved changes"
uploadUnsupported = "Uploaded files aren't supported in pipelines yet, so these steps can't be saved: {{tools}}."
usesDefaults = "Runs with default settings"
[portal.pipelines.composer]
addTool = "Add tool"
cancel = "Cancel"
chainEmpty = "Add a tool to start building your pipeline."
create = "Create pipeline"
directory = "Output folder"
directoryHelp = "Absolute path on the server. Must be within the configured allowed folders."
editingUnsupported = "Displaying these tool params for editing is not supported yet."
moveDown = "Move down"
moveUp = "Move up"
name = "Name"
namePlaceholder = "e.g. Redaction sweep"
noSources = "No sources connected yet. The pipeline can still run on files supplied to it directly."
noToolSettings = "This tool has no configurable settings."
operations_one = "Operation ({{count}})"
operations_other = "Operations ({{count}})"
output = "Output"
removeStep = "Remove operation"
s3PrefixHelp = "Outputs are uploaded under this key prefix."
save = "Save changes"
scheduleEvery = "Run every"
sources = "Sources"
sourcesLoading = "Loading sources..."
trigger = "Trigger"
triggerManual = "Manual only"
[portal.pipelines.composer.unit]
days = "days"
hours = "hours"
minutes = "minutes"
[portal.pipelines.delete]
body = "Delete \"{{name}}\"? This can't be undone."
cancel = "Cancel"
confirm = "Delete"
title = "Delete pipeline?"
[portal.pipelines.detail]
clearHistory = "Clear history"
delete = "Delete pipeline"
run = "Run now"
[portal.pipelines.empty]
action = "Create a pipeline"
connectSource = "Connect a source"
description = "Create your first pipeline: pick the sources it runs over, chain the operations, and choose where output goes."
title = "No pipelines yet"
[portal.pipelines.kpi]
active = "Active"
paused = "Paused"
total = "Pipelines"
[portal.pipelines.output]
folder = "Write to folder"
inline = "Return files"
s3 = "Write to Amazon S3"
[portal.pipelines.run]
allProcessed_one = "Nothing to run: the source's {{count}} document has already been processed."
allProcessed_other = "Nothing to run: all {{count}} documents in the sources have already been processed."
completed_one = "Run completed."
completed_other = "All {{count}} runs completed."
empty = "Nothing to run: the sources had no documents to process."
failed = "Run failed: {{error}}"
historyCleared = "History cleared. The next run reprocesses everything currently in the sources."
inFlight = "Nothing new to run: documents are still being processed from an earlier run."
parked_one = "Nothing to run: {{count}} document failed previously and is parked. Fix the cause, then clear history to retry it."
parked_other = "Nothing to run: {{count}} documents failed previously and are parked. Fix the cause, then clear history to retry them."
running = "Run started; still in progress."
timeout = "Run is taking longer than expected; it may still finish in the background."
[portal.pipelines.status]
active = "Active"
paused = "Paused"
[portal.pipelines.table]
name = "Pipeline"
sources = "Sources"
status = "Status"
steps = "Steps"
[portal.pipelines.trigger]
folder-watch = "Folder watch"
manual = "Manual"
schedule = "Scheduled"
[portal.policies]
defaultName = "{{category}} Policy"
subtitle = "Standing automations that enforce a tool pipeline on every document. Each policy fires on upload or export, runs its tool chain, and saves the enforced version alongside the original."
title = "Policies"
[portal.policies.card]
comingSoon = "Upgrade to Enterprise"
notSetUp = "Not set up"
[portal.policies.categories.compliance]
desc = "Enforce HIPAA, GDPR, SOC 2, or FedRAMP requirements on every document."
label = "Compliance"
[portal.policies.categories.ingestion]
desc = "Classify documents, extract structured data, enforce naming conventions, and normalize pages."
label = "Ingestion"
[portal.policies.categories.retention]
desc = "Set how long documents are kept, when to archive, and when to delete."
label = "Retention"
[portal.policies.categories.routing]
desc = "Auto-route documents to the right team, folder, or system."
label = "Routing"
[portal.policies.categories.security]
desc = "Detect PII, redact, strip active content, and watermark documents."
label = "Security"
[portal.policies.config]
scopeAll = "All documents"
[portal.policies.config.compliance]
summary = "Validates documents against regulatory frameworks before they leave the system."
[portal.policies.config.compliance.fields]
accessLog = "Access log"
auditTrail = "Audit trail"
frameworks = "Frameworks"
onViolation = "When non-compliant"
[portal.policies.config.compliance.rules]
0 = "Framework scan"
1 = "Enforce action"
2 = "Audit trail"
[portal.policies.config.ingestion]
summary = "Classifies documents, extracts structured data, enforces naming, and normalizes pages."
[portal.policies.config.ingestion.fields]
belowThreshold = "Below threshold"
minConfidence = "Min confidence"
[portal.policies.config.ingestion.rules]
0 = "Classify"
1 = "Extract"
2 = "Name"
3 = "Normalize"
[portal.policies.config.retention]
summary = "Enforces how long documents are kept, when to archive, and when to delete."
[portal.policies.config.retention.fields]
archiveAfter = "Archive after"
immutableHold = "Immutable hold"
keepFor = "Keep for"
[portal.policies.config.retention.rules]
0 = "Retention hold"
1 = "Auto-archive"
2 = "Deletion block"
[portal.policies.config.routing]
summary = "Routes documents to the right destination based on type and classification."
[portal.policies.config.routing.fields]
destination = "Destination"
notify = "Notify on route"
webhookUrl = "Webhook URL"
[portal.policies.config.routing.rules]
0 = "Auto-classify"
1 = "Route to folder"
2 = "Webhook notify"
[portal.policies.config.security]
summary = "Detects and redacts PII, strips active content (JavaScript), and watermarks documents."
[portal.policies.config.security.rules]
0 = "Redact PII"
1 = "Remove JavaScript"
2 = "Watermark"
[portal.policies.detail]
enforces = "Enforces"
onEveryExport = "On every export"
onEveryUpload = "On every upload"
outputAsNewFile = "as a new file"
outputAsNewVersion = "as a new version"
recentActivity = "Recent activity"
retry = "Retry"
showLess = "Show less"
showMore = "Show more"
sources = "Sources"
[portal.policies.detail.actions]
clearHistory = "Clear processed history"
delete = "Delete"
editSettings = "Edit settings"
pause = "Pause"
resume = "Resume"
runNow = "Run now"
[portal.policies.detail.clearHistory]
body = "This policy will forget every file it has already processed and reprocess everything currently in its sources on the next run. The files themselves are not changed. This cannot be undone."
cancel = "Cancel"
confirm = "Clear history"
title = "Clear processed history?"
[portal.policies.detail.emptyActivity]
description = "Documents will appear here once this policy runs."
title = "No activity yet"
[portal.policies.endpoints]
addWatermark = "Watermark"
autoRedact = "Redact PII"
compressPdf = "Compress"
flatten = "Flatten"
ocrPdf = "OCR"
sanitizePdf = "Remove JavaScript"
[portal.policies.offline]
description = "Your policies are saved and will appear once the connection is restored."
retry = "Retry"
title = "Backend unavailable"
[portal.policies.stats]
activeFor = "Active"
dataProcessed = "Data processed"
docsEnforced = "Docs enforced"
[portal.policies.status]
active = "Active"
paused = "Paused"
[portal.policies.summary.active]
description = "Enforcing on upload/export"
label = "Active policies"
[portal.policies.summary.categories]
description = "Available to configure"
label = "Categories"
[portal.policies.summary.docsEnforced]
description = "Across active policies"
label = "Docs enforced"
[portal.policies.summary.paused]
description = "Configured but not firing"
label = "Paused"
[portal.policies.wizard.actions]
back = "Back"
cancel = "Cancel"
continue = "Continue"
enablePolicy = "Enable policy"
saveChanges = "Save changes"
[portal.policies.wizard.capability.compress]
desc = "Compresses the document to a smaller file size."
label = "Reduce file size"
[portal.policies.wizard.capability.flatten]
desc = "Merges form fields and annotations into the page so they can't be edited."
label = "Flatten the document"
[portal.policies.wizard.capability.ocr]
desc = "Runs OCR so scanned pages become selectable, searchable text."
label = "Make text searchable"
[portal.policies.wizard.capability.redact]
desc = "Finds and blacks out sensitive details — like Social Security and card numbers — so they can't be read."
label = "Redact sensitive information"
[portal.policies.wizard.capability.sanitize]
desc = "Removes hidden JavaScript so nothing can run automatically when the document is opened."
label = "Strip active content"
[portal.policies.wizard.capability.watermark]
desc = "Stamps a visible mark (e.g. “Confidential”) across every page."
label = "Apply a watermark"
[portal.policies.wizard.errors]
noTools = "Enable at least one tool in the workflow first."
saveFailed = "Couldn't save the policy. Please try again."
[portal.policies.wizard.output]
heading = "Output & run"
[portal.policies.wizard.output.filenameRule]
autoNumber = "Auto-number"
label = "Filename rule"
placeholder = "Text to add (optional)"
prefix = "Prefix"
suffix = "Suffix"
[portal.policies.wizard.output.outputAs]
label = "Output as"
newFile = "New file"
newVersion = "New version"
[portal.policies.wizard.output.runOn]
export = "Export"
helper = "When the policy fires: on upload, or before export."
label = "Run on"
upload = "Upload"
[portal.policies.wizard.settings]
heading = "Settings"
[portal.policies.wizard.sources]
heading = "Sources"
loading = "Loading sources…"
[portal.policies.wizard.tabs]
ariaLabel = "Setup steps"
settings = "Settings"
workflow = "Actions"
[portal.policies.wizard.title]
edit = "Edit {{category}} policy"
setUp = "Set up {{category}} policy"
[portal.policies.wizard.workflow]
description = "Choose what this policy does to every document it processes."
[portal.policySummary]
activeSummary = "{{active}} / {{total}} active"
noRule = "No rule enforced yet"
subtitle = "Standing automations every document passes through, regardless of which pipeline handles it."
title = "What runs on your PDFs"
[portal.policySummary.action]
comingSoon = "Upgrade to Enterprise"
configure = "Configure"
setUp = "Set up"
[portal.policySummary.column]
activeRule = "Active rule"
policy = "Policy"
status = "Status"
[portal.policySummary.empty]
description = "Once policies are configured, the categories appear here."
title = "No policies yet"
[portal.policySummary.state]
active = "Active"
off = "Off"
soon = "Soon"
[portal.processingStatus]
managePlan = "Manage plan"
volumeSuffix = "PDFs processed · last 30 days"
[portal.procurement]
subtitle = "Get your team evaluated, contracted, and onboarded. Every document in one place."
title = "Procurement"
[portal.procurement.action]
download = "Download"
pay = "Pay now"
request = "Request"
sign = "Review & sign"
upload = "Upload"
[portal.procurement.agreement]
agreeCta = "Agree & subscribe"
confirm = "I have read and agree to the Stirling Enterprise Agreement."
eyebrow = "Agreement"
intro = "One combined agreement covers your deal: Master Service Agreement, Order Form, EULA, and Data Processing Agreement. Review it, then agree to accept the quote into a committed subscription."
title = "Review your enterprise agreement"
[portal.procurement.builder]
addons = "Add-ons"
addressLine1 = "Address line 1"
addressLine1Placeholder = "500 Howard St"
addressLine2 = "Address line 2"
addressLine2Placeholder = "Suite, floor, building"
back = "Back"
businessName = "Business name"
businessNamePlaceholder = "Your company"
city = "City"
cityPlaceholder = "San Francisco"
contactEmail = "Contact email"
contactEmailPlaceholder = "jane@acme.com"
contactName = "Contact name"
contactNamePlaceholder = "Jane Doe"
continue = "Continue"
eula = "I have read and agree to the Stirling Enterprise EULA. It governs the agreement generated from this quote."
generate = "Generate quote"
included = "Included"
indemnification = "IP indemnification"
indemnificationSub = "We defend qualifying IP claims, per the EULA"
pdfSize = "PDF size"
poNumber = "PO number"
poNumberPlaceholder = "Optional"
postalCode = "Postal code"
postalCodePlaceholder = "94105"
posture = "Governance"
posture_count = "~{{count}} policies"
posture_essentials = "Essentials"
posture_essentialsSub = "Classification + Sharing — the defaults"
posture_governed = "Governed"
posture_governedSub = "Adds Security and Routing"
posture_regulated = "Regulated"
posture_regulatedSub = "Every category — Compliance, Retention, Ingestion"
qbr = "Quarterly business reviews"
qbrSub = "Your SE reviews usage and roadmap each quarter"
region = "State / region"
regionPlaceholder = "California"
running = "{{annual}} / yr · {{years}}-yr {{tcv}}"
s1Sub = "Your team, and the PDFs you expect to run each year."
# Step 1 — volume
s1Title = "How much will you process?"
s2Sub = "Longer terms discount the rate; your service level sets support."
# Step 2 — commitment & service
s2Title = "Commitment and service"
s3Sub = "For the quote and the agreement it generates."
# Step 3 — details
s3Title = "Your details"
serviceLevel = "Service level"
size_compact = "Compact"
size_compactSub = "Mostly text, under 1 MB"
size_heavy = "Heavy"
size_heavySub = "Scanned or image-heavy, 5 MB+"
size_standard = "Standard"
size_standardSub = "Mixed text and images, 1 to 5 MB"
slDedicated = "Dedicated"
slDedicatedSub = "4 business hours · dedicated SE / CSM · +$30,000/yr"
slPriority = "Priority"
slPrioritySub = "Same business day · named CSM · included"
slStandard = "Standard"
slStandardSub = "Next business day · shared CSM · included"
stepOf = "Step {{n}} of {{total}}"
taxId = "VAT / Tax ID"
taxIdPlaceholder = "Optional"
term = "Term"
termDiscount = "{{pct}}% multi-year commitment discount applied"
title = "Build your quote"
training = "Onboarding & training"
trainingSub = "Live sessions to get your team running"
users = "Total users"
usersPlaceholder = "e.g. 250"
volEstimated = "Estimated from {{count}} users (~2,000 PDFs each, including automation). Edit if you know better."
volManual = "Using your figure. Re-estimate from your team size any time."
volNoUsers = "Not sure? Enter your team size and we'll estimate it."
volume = "Annual PDF volume"
volumePlaceholder = "e.g. 1,000,000"
years_one = "{{count}} year"
years_other = "{{count}} years"
[portal.procurement.docs]
count_one = "{{count}} doc"
count_other = "{{count}} docs"
done = "Done"
here = "You're here"
hide = "Hide"
optional = "Optional"
paidAddon = "Paid add-on"
show = "Show"
subtitle = "Everything you need at each step of the journey, surfaced as the deal moves through it."
supportingSubtitle = "SOC 2, security reviews, tax forms and more, ready when your security or procurement team asks. Some carry a one-time fee."
supportingTitle = "Supporting your evaluation"
title = "Documents"
upcoming = "Upcoming"
[portal.procurement.error]
title = "Something went wrong"
[portal.procurement.hero]
company = "Your enterprise deal"
ctaLive = "You're live"
ctaPayment = "Add payment"
ctaQuote = "Review your quote"
ctaTrial = "Build your quote"
eyebrow = "Enterprise procurement"
inviteTeammates = "Invite teammates"
licenseKey = "Licence key"
nextStep = "Next step: {{action}}"
notStarted = "Not started"
open = "Open procurement"
scheduleCall = "Schedule a call"
setup1Sub = "Invite your teammates"
setup1Title = "Deploy the PDF Editor"
setup2Sub = "Turn on processing across editors and other sources"
setup2Title = "Connect the PDF Processor"
setup3Sub = "Turn on Security, Compliance, Routing, or Retention when you need them"
setup3Title = "Add recommended policies"
[portal.procurement.journey]
daysLeft_one = "{{count}} day left"
daysLeft_other = "{{count}} days left"
engineerLabel = "Your solutions engineer"
eyebrow = "Your rollout"
live = "You're live on Stirling Enterprise"
nextStep = "Next step: {{action}}"
subtitle = "Your solutions engineer is on every step. One next action at a time; the full checklist is below."
title = "From trial to live, one guided path"
trialTitle = "Enterprise trial"
[portal.procurement.journeySteps.agreement]
blurb = "One signature covers MSA, order form, EULA and DPA."
gatingAction = "Review and sign your agreement"
label = "Agreement"
[portal.procurement.journeySteps.implementation]
blurb = "Provision your workspace and run the go-live playbook."
gatingAction = "Provisioning your workspace"
label = "Implementation"
[portal.procurement.journeySteps.payment]
blurb = "Pay by card, bank transfer, or against a purchase order."
gatingAction = "Confirm payment"
label = "Payment"
[portal.procurement.journeySteps.quote]
blurb = "Review committed-volume pricing and contract term."
gatingAction = "Accept your quote"
label = "Quote"
[portal.procurement.journeySteps.trial]
blurb = "Evaluate Stirling against your documents and workflows."
gatingAction = "Build your quote"
label = "Trial"
[portal.procurement.license]
copied = "Copied"
copy = "Copy key"
downloadError = "Could not generate the offline licence file just yet — please try again in a moment."
downloadOffline = "Download offline licence (.lic)"
hint = "Paste this key into a self-hosted instance to activate it, or keep it for your records. Keep it safe."
label = "Your licence key"
subtitle = "Activate a self-hosted instance with this key, or keep it for your records."
title = "Your licence key"
trialFileHint = "This is your trial licence file. Once your agreement is in place, come back and download it again — unlike the online licence key, the .lic file won't update on its own."
[portal.procurement.link]
cta = "Link account"
description = "Procurement runs on your linked Stirling account: it's how we provision the trial, price your quote, and start billing. Link an account to start."
eyebrow = "Enterprise"
title = "Link your account to begin"
[portal.procurement.live]
description = "Your subscription is active and your licence is issued. Your team is provisioned and billing has started."
eyebrow = "Live"
title = "You're live on Stirling Enterprise"
[portal.procurement.locked]
description = "Trial keys, committed-volume quotes, the one-signature agreement, payment, and your document ledger all live here once you start an enterprise evaluation."
eyebrow = "Enterprise only"
talkToSales = "Talk to sales"
title = "The procurement track opens with Enterprise"
[portal.procurement.milestone]
download = "Download PDF"
downloadError = "Could not download the quote PDF just yet — please try again in a moment."
edit = "Edit quote"
[portal.procurement.modal]
cancel = "Cancel"
chooseFile = "Choose file"
close = "Close"
downloadBody = "Your download will begin shortly."
downloadCta = "Download"
downloadTitle = "Download"
noFile = "No file selected"
payBody = "Pay your committed contract by card or bank transfer through Stripe. Your workspace provisions as soon as payment clears."
payCta = "Continue to Stripe"
payTitle = "Confirm payment"
requestBodyFree = "We generate this on demand. Confirm and your solutions engineer will send it across shortly."
requestBodyPaid = "This is a paid add-on. Confirm and your solutions engineer will scope it and send the paperwork."
requestCta = "Request"
requestTitle = "Request this document"
signBody = "Opens the Stirling Enterprise Agreement for e-signature: one signature covers the MSA, order form, EULA and DPA. We countersign automatically and you advance to payment."
signCta = "Open for signature"
signTitle = "Review and sign your agreement"
uploadBody = "Send us your PO and we invoice against it on your terms. Drag in the PDF or pick a file below."
uploadCta = "Upload purchase order"
uploadTitle = "Upload your purchase order"
[portal.procurement.payment]
description = "Your quote is accepted and your licence is already active — your team can start right away. Pay the first invoice when you're ready; you can pay or download it here, no email needed."
downloadInvoice = "Download invoice"
title = "Subscription created"
viewInvoice = "View & pay invoice"
[portal.procurement.schedule]
fallback = "Couldn't load the scheduler."
fallbackLink = "Open scheduling in a new tab"
subtitle = "Your solutions engineer will walk your team through the rollout. Pick a time that suits you."
title = "Schedule a call"
[portal.procurement.setup]
airgap = "Air-gapped"
airgapSub = "Fully offline, isolated network. Includes a downloadable licence file."
cloud = "Cloud"
cloudSub = "Fully managed by Stirling. Nothing for you to run."
deployment = "Where will you run Stirling?"
seats = "Team size"
seatsHint = "Roughly how many people will use it. You can refine this when you build your quote."
seatsPlaceholder = "e.g. 250"
selfhost = "Self-hosted"
selfhostSub = "Run it in your own cloud or data centre."
start = "Start trial"
subtitle = "Tell us how you plan to run Stirling so we can tailor your trial and quote. No card required."
title = "Set up your trial"
[portal.procurement.status]
action = "Action needed"
available = "Available"
complete = "Complete"
pending = "Pending"
request = "On request"
[portal.procurement.trial]
body = "Extending adds 7 days and notifies your solutions engineer."
bodyMaxed = "You have used all your extensions — talk to your solutions engineer if you need more time."
cancel = "Cancel trial"
extend = "Extend 7 days"
maxed = "Maxed out"
subtitle = "Your free trial runs through {{date}}. No card required."
title = "Enterprise trial"
[portal.procurement.upsell]
homeBadge = "Enterprise"
homeBody = "Committed volume pricing, org-wide SSO + SCIM + RBAC, 90-day immutable audit, and a dedicated SE."
homeCta = "Start Trial →"
homeHeadline = "Process millions of PDFs."
[portal.recentActivity]
title = "Recent activity"
viewAll = "View all"
[portal.recentActivity.empty]
description = "Pipeline runs, deploys and agent events will appear here."
title = "Nothing here yet"
[portal.search]
ariaLabel = "Search"
placeholder = "Search Stirling — endpoints, pipelines, docs…"
[portal.search.empty]
noActionsDescription = "Quick actions will appear here once they're available."
noActionsTitle = "No quick actions"
noMatches = "No matches for \"{{query}}\""
noMatchesDescription = "Try a different keyword or browse the catalogue."
[portal.settings.groups]
admin = "Admin"
[portal.settings.sections]
account-link = "Account link"
[portal.shell.sidebar]
appEditor = "Editor"
appProcessor = "Processor"
brandSuffix = "Stirling Processor"
linkAccount = "Link Stirling account"
primaryNav = "Primary navigation"
switchApp = "Switch app"
[portal.sources]
subtitle = "Reusable input connections that feed documents into Stirling. Configure a source once, then reference it from any number of pipelines."
title = "Sources"
[portal.sources.actions]
agentBuilder = "Agent Builder"
connectSource = "Connect source"
[portal.sources.builder]
back = "Back to sources"
cancel = "Cancel"
create = "Create source"
createTitle = "Connect a source"
delete = "Delete"
editTitle = "Edit source"
enabled = "Enabled"
save = "Save changes"
[portal.sources.delete]
body = "Delete \"{{name}}\"? This can't be undone. Policies that reference it would need to be updated."
cancel = "Cancel"
confirm = "Delete"
title = "Delete source?"
[portal.sources.empty]
description = "Connect a folder (and, soon, cloud storage) so your policies have somewhere to pull documents from."
title = "No sources connected yet"
[portal.sources.kpi]
inUse = "In use"
total = "Connections"
unused = "Unused"
[portal.sources.status]
active = "Active"
disabled = "Disabled"
unused = "Unused"
[portal.sources.table]
documents = "Documents"
source = "Source"
status = "Status"
usedBy = "Policies"
[portal.sources.tabs]
connections = "Connections"
sources = "Sources"
[portal.sources.types.editor]
description = "Documents your team has processed in the editor, across policy and AI runs."
label = "Editor"
noPolicies = "No policies run from the editor yet."
[portal.sources.types.folder]
description = "Watch a directory on the server for new documents."
label = "Folder"
[portal.sources.types.folder.fields.directory]
helperText = "Absolute path Stirling watches for files to process."
label = "Directory path"
placeholder = "/data/incoming"
[portal.sources.types.folder.fields.identity]
helperText = "Content check reads each changed file, so renames and touches that don't alter content are not reprocessed."
label = "Change detection"
[portal.sources.types.folder.fields.identity.options]
hash = "Size, date and content check"
stat = "Size and date modified"
[portal.sources.types.folder.fields.mode]
label = "Read mode"
[portal.sources.types.folder.fields.mode.options]
consume = "Consume: process each file once"
snapshot = "Snapshot: re-read the folder every run"
[portal.sources.types.folder.fields.recursive]
label = "Folder depth"
[portal.sources.types.folder.fields.recursive.options]
all = "Include subfolders"
top = "Top level only"
[portal.sources.types.s3]
description = "Pull documents from an Amazon S3 or S3-compatible bucket."
label = "Amazon S3"
[portal.sources.types.s3.fields.accessKeyId]
label = "Access key ID"
[portal.sources.types.s3.fields.bucket]
label = "Bucket"
placeholder = "my-company-inbox"
[portal.sources.types.s3.fields.connection]
helperText = "The stored connection holding the bucket and credentials. Reused by every source and pipeline output that references it."
label = "Connection"
[portal.sources.types.s3.fields.endpoint]
helperText = "Leave blank for Amazon S3. Set to use an S3-compatible service such as MinIO."
label = "Custom endpoint"
placeholder = "https://s3.example.com"
[portal.sources.types.s3.fields.mode]
helperText = "Consume removes each object from the bucket once every policy has processed it."
label = "Read mode"
[portal.sources.types.s3.fields.mode.options]
consume = "Consume: process each object once"
snapshot = "Snapshot: re-read the bucket every run"
[portal.sources.types.s3.fields.prefix]
helperText = "Only objects whose keys start with this prefix are processed."
label = "Key prefix"
placeholder = "incoming/"
[portal.sources.types.s3.fields.region]
label = "Region"
placeholder = "us-east-1"
[portal.sources.types.s3.fields.secretAccessKey]
label = "Secret access key"
[portal.sources.types.unknown]
label = "Source"
[portal.sources.wizard]
name = "Name"
namePlaceholder = "e.g. Claims intake"
type = "Type"
[portal.tier]
enterprise = "Enterprise plan"
free = "Editor plan"
pro = "Processor plan"
[portal.usage]
managePayment = "Manage Payment"
subtitle = "Consumption, invoices, and plan management for every PDF Stirling has billed, in one console."
title = "Usage & billing"
[portal.usage.error]
loadWallet = "Couldn't load wallet"
openStripePortal = "Couldn't open Stripe portal"
walletUnavailable = "Wallet unavailable: {{status}} {{statusText}}"
[portal.usage.sessionExpired]
action = "Sign in again"
body = "Your Stirling account session has expired. Sign in again to view billing — your instance stays linked."
title = "Session expired"
[portal.users]
title = "Users"
[portal.users.roles.admin]
label = "Admin (Org owner)"
summary = "Full governance over the workspace, settings and members."
[portal.users.roles.admin.permissions]
0 = "Manage users, teams and roles"
1 = "Manage all integrations incl. S3 connections"
2 = "Grant or revoke portal access"
3 = "Everything Team Owner can do"
[portal.users.roles.guest]
label = "Guest"
summary = "Limited or web-only access; cannot hold personal configs."
[portal.users.roles.guest.permissions]
0 = "Web-only / demo usage"
1 = "No API keys or integrations"
2 = "No portal access"
3 = "Read-only where shared"
[portal.users.roles.member]
label = "Member"
summary = "Regular user — works with shared resources and their own configs."
[portal.users.roles.member.permissions]
0 = "Use the editor and shared integrations"
1 = "Create personal API & MCP configs"
2 = "See team configs shared with them"
3 = "No S3 or workspace management"
[portal.users.roles.team_owner]
label = "Team owner"
summary = "Owns a team — manages its members' resources and shared configs."
[portal.users.roles.team_owner.permissions]
0 = "Create & manage the team's S3 connections"
1 = "Manage team-owned integration configs"
2 = "Portal access via the default policy"
3 = "Everything Member can do"
[portal.users.seats]
limited = "{{used}} / {{limit}}"
unlimited = "{{used}} · Unlimited"
[portal.welcome]
ariaLabel = "Welcome to Stirling PDF"
install = "Install the editor"
invite = "Invite teammates"
openInBrowser = "Open in browser"
productName = "PDF Editor"
stats = "30M downloads · 60+ PDF operations · Free forever"
[printFile]
title = "Print File"
[provider.googledrive]
name = "Google Drive"
scope = "File Import"
[provider.googledrive.apiKey]
description = "Google API Key for Google Picker API from Google Cloud Console"
label = "API Key"
[provider.googledrive.appId]
description = "Google Drive App ID from Google Cloud Console"
label = "App ID"
[provider.googledrive.clientId]
description = "Google OAuth 2.0 Client ID from Google Cloud Console"
label = "Client ID"
[provider.googledrive.enabled]
description = "Allow users to import files directly from Google Drive"
label = "Enable Google Drive File Picker"
[provider.oauth2.generic]
name = "Generic OAuth2"
scope = "SSO"
[provider.oauth2.generic.autoCreateUser]
description = "Automatically create user accounts on first OAuth2 login"
label = "Auto Create Users"
[provider.oauth2.generic.blockRegistration]
description = "Prevent new user registration via OAuth2"
label = "Block Registration"
[provider.oauth2.generic.clientId]
description = "The OAuth2 client ID from your provider"
label = "Client ID"
[provider.oauth2.generic.clientSecret]
description = "The OAuth2 client secret from your provider"
label = "Client Secret"
[provider.oauth2.generic.enabled]
description = "Enable authentication using a custom OAuth2 provider"
label = "Enable Generic OAuth2"
[provider.oauth2.generic.issuer]
description = "Provider that supports OpenID Connect Discovery (/.well-known/openid-configuration)"
label = "Issuer URL"
[provider.oauth2.generic.provider]
description = "The name of your OAuth2 provider (e.g., Azure AD, Okta)"
label = "Provider Name"
[provider.oauth2.generic.scopes]
description = "Comma-separated OAuth2 scopes"
label = "Scopes"
[provider.oauth2.generic.useAsUsername]
description = "Field to use as username"
label = "Use as Username"
[provider.oauth2.github]
scope = "Sign-in authentication"
[provider.oauth2.github.clientId]
description = "The OAuth2 client ID from GitHub Developer Settings"
label = "Client ID"
[provider.oauth2.github.clientSecret]
description = "The OAuth2 client secret from GitHub Developer Settings"
label = "Client Secret"
[provider.oauth2.github.scopes]
description = "Comma-separated OAuth2 scopes"
label = "Scopes"
[provider.oauth2.github.useAsUsername]
description = "Field to use as username (email, login, name)"
label = "Use as Username"
[provider.oauth2.google]
scope = "Sign-in authentication"
[provider.oauth2.google.clientId]
description = "The OAuth2 client ID from Google Cloud Console"
label = "Client ID"
[provider.oauth2.google.clientSecret]
description = "The OAuth2 client secret from Google Cloud Console"
label = "Client Secret"
[provider.oauth2.google.scopes]
description = "Comma-separated OAuth2 scopes"
label = "Scopes"
[provider.oauth2.google.useAsUsername]
description = "Field to use as username (email, name, given_name, family_name)"
label = "Use as Username"
[provider.oauth2.keycloak]
scope = "SSO"
[provider.oauth2.keycloak.clientId]
description = "The OAuth2 client ID from Keycloak"
label = "Client ID"
[provider.oauth2.keycloak.clientSecret]
description = "The OAuth2 client secret from Keycloak"
label = "Client Secret"
[provider.oauth2.keycloak.issuer]
description = "URL of the Keycloak realm's OpenID Connect Discovery endpoint"
label = "Issuer URL"
[provider.oauth2.keycloak.scopes]
description = "Comma-separated OAuth2 scopes"
label = "Scopes"
[provider.oauth2.keycloak.useAsUsername]
description = "Field to use as username (email, name, given_name, family_name, preferred_username)"
label = "Use as Username"
[provider.saml2]
name = "SAML2"
scope = "SSO (SAML)"
[provider.saml2.autoCreateUser]
description = "Automatically create user accounts on first SAML2 login"
label = "Auto Create Users"
[provider.saml2.blockRegistration]
description = "Prevent new user registration via SAML2"
label = "Block Registration"
[provider.saml2.enabled]
description = "Enable SAML2 authentication (Enterprise only)"
label = "Enable SAML2"
[provider.saml2.idpCert]
description = "The certificate path (e.g., classpath:okta.cert)"
label = "IDP Certificate"
[provider.saml2.idpIssuer]
description = "The ID of your provider"
label = "IDP Issuer"
[provider.saml2.idpMetadataUri]
description = "The URI for your provider's metadata"
label = "IDP Metadata URI"
[provider.saml2.idpSingleLoginUrl]
description = "The URL for initiating SSO"
label = "IDP Single Login URL"
[provider.saml2.idpSingleLogoutUrl]
description = "The URL for initiating SLO"
label = "IDP Single Logout URL"
[provider.saml2.privateKey]
description = "Your private key path"
label = "Private Key"
[provider.saml2.provider]
description = "The name of your SAML2 provider"
label = "Provider Name"
[provider.saml2.registrationId]
description = "The name of your Service Provider (SP) app name"
label = "Registration ID"
[provider.saml2.spCert]
description = "Your signing certificate path"
label = "SP Certificate"
[provider.smtp]
name = "SMTP Mail"
scope = "Email Notifications"
[provider.smtp.enabled]
description = "Enable email notifications and SMTP functionality"
label = "Enable Mail"
[provider.smtp.from]
description = "The email address to use as the sender"
label = "From Address"
[provider.smtp.host]
description = "The hostname or IP address of your SMTP server"
label = "SMTP Host"
[provider.smtp.password]
description = "Password for SMTP authentication"
label = "SMTP Password"
[provider.smtp.port]
description = "The port number for SMTP connection (typically 25, 465, or 587)"
label = "SMTP Port"
[provider.smtp.username]
description = "Username for SMTP authentication"
label = "SMTP Username"
[quickAccess]
allTools = "Tools"
automate = "Automate"
config = "Config"
files = "Files"
[read]
tags = "view,open,display,read,viewer,PDF viewer,PDF reader,open PDF,view PDF,display PDF,preview,browse"
[redact]
submit = "Redact"
tags = "Redact,Hide,black out,black,marker,hidden,auto redact,manual redact"
title = "Redact"
[redact.auto]
colorLabel = "Box Color"
convertPDFToImageLabel = "Convert PDF to PDF-Image"
customPaddingLabel = "Custom Extra Padding"
useRegexLabel = "Use Regex"
wholeWordSearchLabel = "Whole Word Search"
[redact.auto.settings]
advancedTitle = "Advanced"
title = "Redaction Settings"
[redact.auto.wordsToRedact]
add = "Add"
examples = "Examples: Confidential, Top-Secret"
placeholder = "Enter a word"
title = "Words to Redact"
[redact.error]
failed = "An error occurred while redacting the PDF."
[redact.manual]
apply = "Apply"
applyWarning = "⚠️ Permanent application, cannot be undone and the data underneath will be deleted"
colorLabel = "Redaction Color"
controlsTitle = "Manual Redaction Controls"
instructions = "Select text or draw areas on the PDF to mark content for redaction."
title = "Redaction Tools"
[redact.modeSelector]
automatic = "Automatic"
automaticDisabledTooltip = "Select files in the file manager to redact multiple files at once"
manual = "Manual"
mode = "Mode"
title = "Redaction Method"
[redact.tooltip.advanced.color]
text = "Customize the appearance of redaction boxes. Black is standard, but you can choose any color. Padding adds extra space around the found text."
title = "Box Color & Padding"
[redact.tooltip.advanced.convert]
text = "Converts the PDF to an image-based PDF after redaction. This ensures text behind redaction boxes is completely removed and unrecoverable."
title = "Convert to PDF-Image"
[redact.tooltip.advanced.header]
title = "Advanced Redaction Settings"
[redact.tooltip.advanced.regex]
bullet1 = "Example: \\d{4}-\\d{2}-\\d{2} to match any dates in YYYY-MM-DD format"
bullet2 = "Use with caution - test thoroughly"
text = "Enable regular expressions for advanced pattern matching. Useful for finding phone numbers, emails, or complex patterns."
title = "Use Regex"
[redact.tooltip.advanced.wholeWord]
text = "Only match complete words, not partial matches. 'John' won't match 'Johnson' when enabled."
title = "Whole Word Search"
[redact.tooltip.manual.apply]
bullet1 = "Mark as many areas as needed before applying"
bullet2 = "All pending redactions are applied at once"
bullet3 = "Redactions cannot be undone after applying"
text = "After marking content, click 'Apply' to permanently redact all marked areas. The pending count shows how many redactions are ready to be applied."
title = "Apply Redactions"
[redact.tooltip.manual.header]
title = "Manual Redaction Controls"
[redact.tooltip.manual.markArea]
text = "Draw rectangular areas on the PDF to mark regions for redaction. Useful for redacting images, signatures, or irregular shapes."
title = "Mark Area Tool"
[redact.tooltip.manual.markText]
text = "Select text directly on the PDF to mark it for redaction. Click and drag to highlight specific text that you want to redact."
title = "Mark Text Tool"
[redact.tooltip.mode.automatic]
text = "Automatically finds and redacts specified text throughout the document. Perfect for removing consistent sensitive information like names, addresses, or confidential markers."
title = "Automatic Redaction"
[redact.tooltip.mode.header]
title = "Redaction Method"
[redact.tooltip.mode.manual]
text = "Click and drag to manually select specific areas to redact. Gives you precise control over what gets redacted. (Coming soon)"
title = "Manual Redaction"
[redact.tooltip.words]
bullet1 = "Add one word at a time"
bullet2 = "Press Enter or click 'Add Another' to add"
bullet3 = "Click × to remove words"
[redact.tooltip.words.description]
text = "Enter words or phrases to find and redact in your document. Each word will be searched for separately."
title = "Text Matching"
[redact.tooltip.words.examples]
text = "Typical words to redact include: bank details, email addresses, or specific names."
title = "Common Examples"
[redact.tooltip.words.header]
title = "Words to Redact"
[releases]
title = "Release Notes"
[removeAnnotations]
submit = "Remove"
tags = "comments,highlight,notes,markup,remove"
title = "Remove Annotations"
[removeAnnotations.error]
failed = "An error occurred while removing annotations from the PDF."
[removeAnnotations.info]
description = "This tool will remove all annotations (comments, highlights, notes, etc.) from your PDF documents."
[removeAnnotations.settings]
title = "Settings"
[removeAnnotations.tooltip.description]
title = "What it does"
[removeAnnotations.tooltip.header]
title = "About Remove Annotations"
[removeBlanks]
submit = "Remove blank pages"
tags = "delete,clean,empty,remove blank,delete blank pages,empty pages,white pages,remove empty,clean up,cleanup blank"
title = "Remove Blanks"
[removeBlanks.error]
failed = "Failed to remove blank pages"
[removeBlanks.includeBlankPages]
label = "Include detected blank pages"
[removeBlanks.results]
title = "Removed Blank Pages"
[removeBlanks.settings]
title = "Settings"
[removeBlanks.threshold]
label = "Pixel Whiteness Threshold"
[removeBlanks.tooltip.header]
title = "Remove Blank Pages Settings"
[removeBlanks.tooltip.includeBlankPages]
bullet1 = "Useful for reviewing what was removed"
bullet2 = "Helps verify the detection accuracy"
bullet3 = "Can be disabled to reduce output file size"
text = "When enabled, creates a separate PDF containing all the blank pages that were detected and removed from the original document."
title = "Include Detected Blank Pages"
[removeBlanks.tooltip.threshold]
bullet1 = "0 = Pure black (most restrictive)"
bullet2 = "128 = Medium gray"
bullet3 = "255 = Pure white (least restrictive)"
text = "Controls how white a pixel must be to be considered 'white'. This helps determine what counts as a blank area on the page."
title = "Pixel Whiteness Threshold"
[removeBlanks.tooltip.whitePercent]
bullet1 = "Lower values (e.g., 80%) = More pages removed"
bullet2 = "Higher values (e.g., 95%) = Only very blank pages removed"
bullet3 = "Use higher values for documents with light backgrounds"
text = "Sets the minimum percentage of white pixels required for a page to be considered blank and removed."
title = "White Percentage Threshold"
[removeBlanks.whitePercent]
label = "White Percentage Threshold"
[removeCertSign]
description = "This tool will remove digital certificate signatures from your PDF document."
submit = "Remove Signature"
tags = "authenticate,PEM,P12,official,decrypt"
title = "Remove Certificate Signature"
[removeCertSign.error]
failed = "An error occurred while removing certificate signatures."
[removeCertSign.results]
title = "Certificate Removal Results"
[removeImage]
submit = "Remove image"
tags = "remove,delete,clean,remove image,delete image,strip images,remove pictures,delete photos,clean images,reduce size,remove graphics"
title = "Remove image"
[removeImage.error]
failed = "Failed to remove images from the PDF."
[removeImage.results]
title = "Remove Images Results"
[removeImagePdf]
tags = "Remove Image,Page operations,Back end,server side"
[removePages]
submit = "Remove Pages"
tags = "Remove pages,delete pages"
title = "Remove Pages"
[removePages.error]
failed = "An error occurred while removing pages."
[removePages.pageNumbers]
error = "Invalid page number format. Use numbers, ranges (1-5), or mathematical expressions (2n+1)"
label = "Pages to Remove"
placeholder = "e.g., 1,3,5-8,10"
[removePages.results]
title = "Page Removal Results"
[removePages.settings]
title = "Settings"
[removePages.tooltip.examples]
bullet1 = "Remove first page: 1"
bullet2 = "Remove last 3 pages: -3"
bullet3 = "Remove every other page: 2n"
bullet4 = "Remove specific scattered pages: 1,5,10,15"
text = "Here are some common page selection patterns:"
title = "Common Examples"
[removePages.tooltip.header]
title = "Remove Pages Settings"
[removePages.tooltip.pageNumbers]
bullet1 = "Individual pages: 1,3,5 (removes pages 1, 3, and 5)"
bullet2 = "Page ranges: 1-5,10-15 (removes pages 1-5 and 10-15)"
bullet3 = "Mathematical: 2n+1 (removes odd pages)"
bullet4 = "Open ranges: 5- (removes from page 5 to end)"
text = "Specify which pages to remove from your PDF. You can select individual pages, ranges, or use mathematical expressions."
title = "Page Selection"
[removePassword]
desc = "Remove password protection from your PDF document."
submit = "Remove Password"
tags = "secure,Decrypt,security,unpassword,delete password"
title = "Remove Password"
[removePassword.error]
failed = "An error occurred while removing the password from the PDF."
[removePassword.password]
label = "Current Password"
placeholder = "Enter current password"
stepTitle = "Remove Password"
[removePassword.results]
title = "Decrypted PDFs"
[removePassword.tooltip]
description = "Removing password protection requires the password that was used to encrypt the PDF. This will decrypt the document, making it accessible without a password."
[reorganizePages]
submit = "Reorganize Pages"
tags = "rearrange,reorder,organize,reorganize,move pages,page order,sort pages,arrange pages,shuffle,resequence"
[reorganizePages.error]
failed = "Failed to reorganize pages"
[reorganizePages.results]
title = "Pages Reorganized"
[reorganizePages.settings]
title = "Settings"
[repair]
description = "This tool will attempt to repair corrupted or damaged PDF files. No additional settings are required."
submit = "Repair"
tags = "fix,restore,correction,recover"
title = "Repair"
[repair.error]
failed = "An error occurred while repairing the PDF."
[repair.results]
title = "Repair Results"
[replace-color]
submit = "Replace"
title = "Replace-Invert-Color"
[replace-color.selectText]
1 = "Replace or invert color options"
10 = "Choose text Color"
11 = "Choose background Color"
5 = "High contrast color options"
6 = "White text on black background"
7 = "Black text on white background"
8 = "Yellow text on black background"
9 = "Green text on black background"
[replaceColor]
tags = "Replace Color,Page operations,Back end,server side"
[replaceColor.error]
failed = "An error occurred while processing the color replacement."
[replaceColor.labels]
colourOperation = "Color operation"
settings = "Settings"
[replaceColor.options]
cmyk = "Convert to CMYK"
custom = "Custom"
highContrast = "High contrast"
invertAll = "Invert all colors"
[replaceColor.tooltip.cmyk]
text = "Convert the PDF from RGB color space to CMYK color space, optimized for professional printing. This process converts colors to the Cyan, Magenta, Yellow, Black model used by printers."
title = "Convert to CMYK"
[replaceColor.tooltip.custom]
bullet1 = "Text color - Choose the color for text elements"
bullet2 = "Background color - Set the background color for the document"
text = "Define your own text and background colors using the color pickers. Perfect for creating branded documents or specific accessibility requirements."
title = "Custom Colors"
[replaceColor.tooltip.description]
text = "Transform PDF colors to improve readability and accessibility. Choose from high contrast presets, invert all colors, or create custom color schemes."
title = "Description"
[replaceColor.tooltip.header]
title = "Replace & Invert Color Settings Overview"
[replaceColor.tooltip.highContrast]
bullet1 = "White text on black background - Classic dark mode"
bullet2 = "Black text on white background - Standard high contrast"
bullet3 = "Yellow text on black background - High visibility option"
bullet4 = "Green text on black background - Alternative high contrast"
text = "Apply predefined high contrast color combinations designed for better readability and accessibility compliance."
title = "High Contrast"
[replaceColor.tooltip.invertAll]
text = "Completely invert all colors in the PDF, creating a negative-like effect. Useful for creating dark mode versions of documents or reducing eye strain in low-light conditions."
title = "Invert All Colors"
[rotate]
rotateLeft = "Rotate Counterclockwise"
rotateRight = "Rotate Clockwise"
selectRotation = "Select Rotation Angle (Clockwise)"
submit = "Apply Rotation"
tags = "turn,flip,orient,rotate,orientation,landscape,portrait,90 degrees,180 degrees,clockwise,counterclockwise,counter-clockwise,fix orientation"
title = "Rotate PDF"
[rotate.error]
failed = "An error occurred while rotating the PDF."
[rotate.preview]
title = "Rotation Preview"
[rotate.tooltip.controls]
text = "Use the rotation buttons to adjust orientation. Left button rotates counterclockwise, right button rotates clockwise. Each click rotates by 90 degrees."
title = "Controls"
[rotate.tooltip.description]
text = "Rotate your PDF pages clockwise or counterclockwise in 90-degree increments. All pages in the PDF will be rotated. The preview shows how your document will look after rotation."
[rotate.tooltip.header]
title = "Rotate Settings Overview"
[sanitize]
desc = "Remove potentially harmful elements from PDF files."
sanitizationResults = "Sanitization Results"
submit = "Sanitize PDF"
tags = "clean,purge,remove,sanitize,remove scripts,remove javascript,remove metadata,strip metadata,security,clean document,remove hidden data,privacy"
title = "Sanitize"
[sanitize.error]
failed = "An error occurred while sanitizing the PDF."
[sanitize.options]
note = "Select the elements you want to remove from the PDF. At least one option must be selected."
title = "Sanitization Options"
[sanitize.options.removeEmbeddedFiles]
desc = "Remove any files embedded within the PDF"
label = "Remove Embedded Files"
[sanitize.options.removeFonts]
desc = "Remove embedded fonts from the PDF"
label = "Remove Fonts"
[sanitize.options.removeJavaScript]
desc = "Remove JavaScript actions and scripts from the PDF"
label = "Remove JavaScript"
[sanitize.options.removeLinks]
desc = "Remove external links and launch actions from the PDF"
label = "Remove Links"
[sanitize.options.removeMetadata]
desc = "Remove document information metadata (title, author, etc.)"
label = "Remove Document Metadata"
[sanitize.options.removeXMPMetadata]
desc = "Remove XMP metadata from the PDF"
label = "Remove XMP Metadata"
[sanitize.steps]
settings = "Settings"
[sanitizePdf]
tags = "clean,secure,safe,remove-threats"
[sanitizePDF]
title = "Sanitize PDF"
[scalePages]
tags = "resize,adjust,scale,page size,resize page,scale page,change size,adjust size,enlarge,shrink page,fit to page,A4,letter size"
title = "Adjust page-scale"
[scannerEffect]
tags = "scan,simulate,create,fake scan,look scanned,scanner effect,make look scanned,photocopy effect,simulate scanner,realistic scan"
[ScannerImageSplit.selectText]
1 = "Angle Threshold:"
10 = "Extra padding (in pixels) around each saved photo so edges aren't cut."
2 = "Tilt (in degrees) needed before we auto-straighten a photo."
3 = "Tolerance:"
4 = "How closely a color must match the page background to count as background. Higher = looser, lower = stricter."
5 = "Minimum Area:"
6 = "Smallest photo size (in pixels²) we'll keep to avoid tiny fragments."
7 = "Minimum Contour Area:"
8 = "Smallest edge/shape we consider when finding photos (filters dust and specks)."
9 = "Border Size:"
[scannerImageSplit]
submit = "Extract Image Scans"
tags = "separate,auto-detect,scans,multi-photo,organize"
title = "Extracted Images"
[scannerImageSplit.error]
failed = "An error occurred while extracting image scans."
[scannerImageSplit.tooltip]
headsUp = "Heads-up"
headsUpDesc = "Overlapping photos or backgrounds very close in color to the photos can reduce accuracy-try a lighter or darker background and leave more space."
problem1 = "Photos not detected → increase Tolerance to 30-50"
problem2 = "Too many false detections → increase Minimum Area to 15,000-20,000"
problem3 = "Crops are too tight → increase Border Size to 5-10"
problem4 = "Tilted photos not straightened → lower Angle Threshold to ~5°"
problem5 = "Dust/noise boxes → increase Minimum Contour Area to 1000-2000"
quickFixes = "Quick fixes"
setupTips = "Setup tips"
tip1 = "Use a plain, light background"
tip2 = "Leave a small gap (≈1 cm) between photos"
tip3 = "Scan at 300-600 DPI"
tip4 = "Clean the scanner glass"
title = "Photo Splitter"
useCase1 = "Scan whole album pages in one go"
useCase2 = "Split flatbed batches into separate files"
useCase3 = "Break collages into individual photos"
useCase4 = "Pull photos from documents"
whatThisDoes = "What this does"
whatThisDoesDesc = "Automatically finds and extracts each photo from a scanned page or composite image-no manual cropping."
whenToUse = "When to use"
[search]
noResults = "No results found"
placeholder = "Enter search term..."
searching = "Searching..."
title = "Search PDF"
[selfHosted.offline]
hideTools = "Hide unavailable tools ▴"
messageNoFallback = "Tools are unavailable until your server comes back online."
messageWithFallback = "Some tools require a server connection."
showTools = "View unavailable tools ▾"
title = "Your Stirling-PDF server is unreachable"
toolNotAvailableLocally = "Your Stirling-PDF server is offline and \"{{endpoint}}\" is not available on the local backend."
[session]
expired = "Your session has expired. Please refresh the page and try again."
[sessionManagement.tooltip]
header = "Managing Signing Sessions"
[sessionManagement.tooltip.addParticipants]
bullet1 = "New participants added to the end of signing order"
bullet2 = "Cannot add participants after session is finalized"
bullet3 = "Each participant receives a notification when it's their turn"
description = "You can add more participants to an active session at any time before finalization."
title = "Adding Participants"
[sessionManagement.tooltip.finalization]
bullet1 = "<b>Full finalization</b>: All participants have signed"
bullet2 = "<b>Partial finalization</b>: Some participants haven't signed yet"
bullet3 = "Unsigned participants will be excluded from the final document"
bullet4 = "Once finalized, you can load the signed PDF into active files"
description = "Finalization combines all signatures into a single signed PDF. This action cannot be undone."
title = "Session Finalization"
[sessionManagement.tooltip.participantRemoval]
bullet1 = "Cannot remove participants who have already signed"
bullet2 = "Removed participants no longer receive notifications"
bullet3 = "Signing order adjusts automatically"
description = "Participants can be removed from sessions before they sign."
title = "Removing Participants"
[sessionManagement.tooltip.signatureOrder]
bullet1 = "Each signature is applied sequentially to the PDF"
bullet2 = "Later signers can see earlier signatures"
bullet3 = "Critical for approval workflows and legal chains of custody"
description = "The order you specify when creating the session determines who signs first."
title = "Signature Order"
[settings]
close = "Close"
[settings.configuration]
advanced = "Advanced"
database = "Database"
endpoints = "Endpoints"
features = "Features"
mcp = "MCP Server"
storageSharing = "File Storage & Sharing"
systemSettings = "System Settings"
title = "Configuration"
[settings.connection]
localDescription = "You are using the local backend without an account. Some tools requiring cloud processing or a self-hosted server are unavailable."
logout = "Log Out"
server = "Server"
signIn = "Sign In"
title = "Connection Mode"
user = "Logged in as"
[settings.connection.mode]
local = "Local Only"
saas = "Stirling Cloud"
selfhosted = "Self-Hosted"
[settings.developer]
apiKeys = "API Keys"
title = "Developer"
[settings.general]
autoUnzip = "Auto-unzip API responses"
autoUnzipDescription = "Automatically extract files from ZIP responses"
autoUnzipFileLimit = "Auto-unzip file limit"
autoUnzipFileLimitDescription = "Maximum number of files to extract from ZIP"
autoUnzipFileLimitTooltip = "Only unzip if the ZIP contains this many files or fewer. Set higher to extract larger ZIPs."
autoUnzipTooltip = "Automatically extract ZIP files returned from API operations. Disable to keep ZIP files intact. This does not affect automation workflows."
defaultPdfEditor = "Default PDF editor"
defaultPdfEditorActive = "Stirling PDF is your default PDF editor"
defaultPdfEditorChecking = "Checking..."
defaultPdfEditorInactive = "Another application is set as default"
defaultPdfEditorSet = "Already Default"
defaultStartupView = "Default view on launch"
defaultStartupViewDescription = "Choose which view is active when the app starts"
defaultToolPickerMode = "Default tool picker mode"
defaultToolPickerModeDescription = "Choose whether the tool picker opens in fullscreen or sidebar by default"
defaultViewerZoom = "Default reader zoom"
defaultViewerZoomDescription = "Set the default zoom level when opening PDFs in the reader"
description = "Configure general application preferences."
hideUnavailableConversions = "Hide unavailable conversions"
hideUnavailableConversionsDescription = "Remove disabled conversion options in the Convert tool instead of showing them grayed out."
hideUnavailableTools = "Hide unavailable tools"
hideUnavailableToolsDescription = "Remove tools that have been disabled by your server instead of showing them grayed out."
language = "Language"
languageDescription = "Choose the display language"
logout = "Log out"
setAsDefault = "Set as Default"
theme = "Theme"
themeDark = "Dark"
themeDescription = "Choose light, dark, or follow your system"
themeLight = "Light"
themeSystem = "System"
title = "General"
user = "User"
[settings.general.enableFeatures]
action = "Configure"
and = "and"
benefit = "Enables user roles, team collaboration, admin controls, and enterprise features."
dismiss = "Dismiss"
intro = "Enable user authentication, team management, and workspace features for your organization."
learnMore = "Learn more in documentation"
title = "For System Administrators"
[settings.general.loginLanding]
description = "Choose which app opens when you sign in to Stirling Cloud."
editor = "Editor"
processor = "Processor"
title = "After signing in"
[settings.general.mode]
fullscreen = "Fullscreen"
sidebar = "Sidebar"
[settings.general.startupView]
automate = "Automate"
read = "Reader"
tools = "Tools"
[settings.general.updates]
checkForUpdates = "Check for Updates"
currentBackendVersion = "Current Backend Version"
currentFrontendVersion = "Current Frontend Version"
description = "Check for updates and view version information"
latestVersion = "Latest Version"
managedByAdmin = "Managed by administrator"
modeAuto = "Install updates automatically"
modeDisabled = "Don't check for updates"
modePrompt = "Ask me before installing updates"
serverNeedsUpdate = "Server needs to be updated by administrator"
title = "Software Updates"
updateBehavior = "Update behavior"
updateBehaviorDescription = "Choose whether to prompt before installing updates, install them automatically, or skip update checks entirely."
updateBehaviorError = "Could not change update behavior"
updateBehaviorErrorLocked = "This setting is locked by your administrator."
updateBehaviorLockedDescription = "Your administrator has configured how Stirling-PDF handles updates on this machine. Contact them to change this."
updateBehaviorSaved = "Update behavior saved."
versionMismatch = "Warning: A mismatch has been detected between the client version and the AppConfig version. Using different versions can lead to compatibility issues, errors, and security risks. Please ensure that server and client are using the same version."
viewDetails = "View Details"
[settings.general.versionInfo]
description = "Desktop and server version details"
desktop = "Desktop Version"
server = "Server Version"
title = "Version Information"
[settings.general.zoomLevel]
auto = "Auto"
fitPage = "Fit page"
fitWidth = "Fit width"
[settings.help]
label = "Tours"
title = "Help"
[settings.help.adminTour]
description = "Explore team management, system settings, and enterprise features."
start = "Start"
title = "Admin Tour"
[settings.help.toolsTour]
description = "Walk through uploading files, picking a tool, and reviewing results."
start = "Start"
title = "Tools Tour"
[settings.hotkeys]
capturing = "Press keys… (Esc to cancel)"
change = "Change shortcut"
customBadge = "Custom"
defaultLabel = "Default: {{shortcut}}"
description = "Customize keyboard shortcuts for quick tool access. Click \"Change shortcut\" and press a new key combination. Press Esc to cancel."
errorConflict = "Shortcut already used by {{tool}}."
none = "Not assigned"
noShortcut = "No shortcut set"
reset = "Reset"
searchPlaceholder = "Search tools..."
shortcut = "Shortcut"
title = "Keyboard Shortcuts"
[settings.hotkeys.errorModifier]
mac = "Include ⌘ (Command), ⌥ (Option), or another modifier in your shortcut."
windows = "Include Ctrl, Alt, or another modifier in your shortcut."
[settings.legal]
label = "Legal"
title = "Legal"
[settings.legal.cookiePreferences]
description = "Review or change your cookie consent choices."
manage = "Manage"
[settings.legal.documents]
description = "Policies and legal information for this service."
title = "Legal Documents"
[settings.licenses]
backendDescription = "Licenses for backend dependencies bundled with this server."
backendLabel = "Backend Licenses"
backendTitle = "Backend 3rd Party Licenses"
empty = "No dependencies found."
frontendDescription = "Licenses for frontend dependencies bundled into the release build."
frontendLabel = "Frontend Licenses"
frontendTitle = "Frontend 3rd Party Licenses"
license = "License"
listDescription = "The list is shown directly in the UI from the release bundle or backend endpoint."
listTitle = "Bundled dependencies"
loadError = "Failed to load third-party licenses"
module = "Module"
version = "Version"
[settings.licensingAnalytics]
audit = "Audit"
plan = "Plan"
title = "Licensing & Analytics"
usageAnalytics = "Usage Analytics"
[settings.planBilling]
currentPlan = "Current Plan"
loading = "Loading billing information..."
notAvailable = "Plan & Billing is only available when connected to Stirling Cloud (SaaS mode)."
title = "Plan & Billing"
[settings.planBilling.billing]
manageBilling = "Manage Billing"
nextBillingDate = "Next billing date"
overageCost = "Current overage cost: {{amount}} ({{credits}} credits)"
[settings.planBilling.credits]
estimatedCost = "Estimated cost: {{amount}}"
freeTierInfo = "Free plan includes {{freeCredits}} credits per month. Upgrade to Team for {{teamCredits}} credits/month and pay-as-you-go overage billing."
included = "{{count}} credits/month (included)"
noOverage = "No overage charges this month. You're using your included {{count}} credits."
overage = "+ {{count}} overage"
overageInfo = "Overage credits are billed at {{price}} per credit. You'll only pay for what you use beyond your monthly allowance."
title = "Credit Usage"
[settings.planBilling.errors]
fetchFailed = "Unable to fetch billing data"
retry = "Retry"
[settings.planBilling.status]
active = "Active"
canceled = "Canceled"
pastDue = "Past Due"
trial = "Trial"
[settings.planBilling.team]
managedByTeam = "Managed by team"
memberCount_one = "{{count}} team member"
memberCount_other = "{{count}} team members"
memberCount_zero = "no team members"
[settings.planBilling.tier]
enterprise = "Enterprise"
enterpriseDescription = "Custom enterprise features and support"
free = "Free"
freeDescription = "50 credits per month"
team = "Team"
teamBadge = "Team"
teamDescription = "500 credits/month included, automatic overage billing for uninterrupted service"
teamTooltipCredits = "Team plan includes {{credits}} credits/month."
teamTooltipFineprint = "Only pay for what you use beyond included credits."
teamTooltipOverage = "Automatic overage billing at {{price}}/credit ensures uninterrupted service."
[settings.planBilling.trial]
daysRemaining = "{{days}} days remaining"
daysRemainingFull = "Your trial ends in {{days}} days"
endDate = "Expires: {{date}}"
endsOn = "Trial ends"
title = "Free Trial Active"
[settings.planBilling.upgrade]
cta = "Upgrade to Team"
featureApi = "API access for automation"
featureCredits = "{{teamCredits}} credits per month (vs {{freeCredits}} on Free)"
featureMembers = "Unlimited team members"
featureSupport = "Priority support"
featureThroughput = "Faster processing throughput"
opensInBrowser = "Opens in browser to complete upgrade"
subtitle = "Upgrade to Team for:"
title = "Upgrade Your Plan"
[settings.policiesPrivacy]
legal = "Legal"
privacy = "Privacy"
title = "Policies & Privacy"
[settings.preferences]
title = "Preferences"
[settings.search]
placeholder = "Search settings pages..."
[settings.security]
description = "Update your password to keep your account secure."
title = "Security"
[settings.security.password]
confirm = "Confirm new password"
confirmPlaceholder = "Re-enter your new password"
current = "Current password"
currentPlaceholder = "Enter your current password"
error = "Unable to update password. Please verify your current password and try again."
mismatch = "New passwords do not match."
new = "New password"
newPlaceholder = "Enter a new password"
required = "All fields are required."
ssoDisabled = "Password changes are managed by your identity provider."
subtitle = "Change your password. You will be logged out after updating."
success = "Password updated successfully. Please sign in again."
update = "Update password"
[settings.securityAuth]
connections = "Connections"
security = "Security"
telegram = "Telegram"
title = "Security & Authentication"
[settings.signOut]
confirm = "Are you sure you want to sign out?"
submit = "Sign out"
title = "Sign out"
[settings.team]
title = "Team"
[settings.tooltips]
enableLoginFirst = "Enable login mode first"
requiresEnterprise = "Requires Enterprise license"
[settings.workspace]
people = "People"
teams = "Teams"
title = "Workspace"
[setup.login]
connectingTo = "Connecting to:"
oauthPending = "Opening browser for authentication..."
orContinueWith = "Or continue with email"
skipSignIn = "Continue without signing in"
sso = "Single Sign-On"
submit = "Login"
[setup.login.error]
emptyEmail = "Please enter your email"
emptyPassword = "Please enter your password"
emptyUsername = "Please enter your username"
oauthFailed = "OAuth login failed. Please try again."
[setup.saas]
title = "Sign in to Stirling"
[setup.selfhosted]
changeServerLocked = "Your organization has restricted this app to a specific server"
link = "or connect to a self-hosted account"
subtitle = "Enter your server credentials"
switchToLocal = "Use local tools instead"
title = "Sign in to Server"
[setup.selfhosted.unreachable]
changeServer = "Connect to a different server"
continueOffline = "Use local tools instead"
message = "Could not reach {{url}}. Check that the server is running and accessible."
retry = "Retry"
title = "Cannot connect to server"
[setup.server]
subtitle = "Enter your self-hosted server URL"
testing = "Testing connection..."
title = "Connect to Server"
useLast = "Last used server: {{serverUrl}}"
[setup.server.error]
configFetch = "Failed to fetch server configuration (status {{status}})"
configFetchError = "Failed to fetch server configuration: {{error}}"
emptyUrl = "Please enter a server URL"
invalidUrl = "Invalid URL format. Please enter a valid URL like https://your-server.com"
testFailed = "Connection test failed"
unreachable = "Could not connect to server"
[setup.server.error.securityDisabled]
body = "This server does not have login enabled. To connect to this server, you must enable authentication:"
step1 = "Set DOCKER_ENABLE_SECURITY=true in your environment"
step2 = "Or set security.enableLogin=true in settings.yml"
step3 = "Restart the server"
title = "Login Not Enabled"
[setup.server.url]
description = "Enter the full URL of your self-hosted Stirling PDF server"
label = "Server URL"
[sharedSign]
backToSessions = "Back to sessions"
createdOn = "Created {{date}}"
disabledBody = "Collaborative signing isn't enabled on this server."
disabledTitle = "Not enabled"
due = "Due {{date}}"
filterDeclined = "Declined"
filterMine = "Mine"
filterOverdue = "Overdue"
filterSigned = "Signed"
fromOwner = "From {{owner}}"
newRequest = "Request signatures"
signedCount = "{{signed}}/{{total}} signed"
[sharedSign.empty]
active = "No pending sign requests or active sessions"
completed = "No completed sessions"
[sharedSign.tab]
active = "Active"
completed = "Completed"
[showJS]
done = "JavaScript extracted"
processing = "Extracting JavaScript..."
results = "Result"
submit = "Show"
tags = "JS"
title = "Show Javascript"
[showJS.view]
title = "Extracted JavaScript"
[sign]
activate = "Activate Signature Placement"
add = "Add"
addToAll = "Add to all pages"
applySignatures = "Apply Signatures"
clear = "Clear"
deactivate = "Stop Placing Signatures"
delete = "Delete"
first = "First page"
header = "Sign PDFs"
last = "Last page"
maintainRatio = "Toggle maintain aspect ratio"
next = "Next page"
noSavedSigs = "No saved signatures found"
personalSigs = "Personal Signatures"
previous = "Previous page"
redo = "Redo"
save = "Save Signature"
sharedSigningOpen = "Open shared signing"
sharedSigningRequest = "Request signatures"
sharedSigningStepDesc = "Send this document to others to sign instead of signing it yourself."
sharedSigs = "Shared Signatures"
submit = "Sign Document"
tags = "signature,autograph,e-sign,electronic signature,digital signature,sign document,approval,signoff,authorize,endorse,ink signature,handwriting"
title = "Sign"
undo = "Undo"
updateAndPlace = "Update and Place"
upload = "Upload Image"
[sign.canvas]
clear = "Clear canvas"
clickToOpen = "Click to open the drawing canvas"
colorLabel = "Color"
colorPickerTitle = "Choose stroke color"
heading = "Draw your signature"
modalTitle = "Draw your signature"
penSizeLabel = "Pen size"
penSizePlaceholder = "Size"
[sign.draw]
clear = "Clear"
title = "Draw your signature"
[sign.error]
failed = "An error occurred while signing the PDF."
[sign.image]
backgroundRemovalFailedMessage = "Could not remove the background from the image. Using original image instead."
backgroundRemovalFailedTitle = "Background removal failed"
hint = "Upload a PNG or JPG image of your signature"
label = "Upload signature image"
placeholder = "Select image file"
processing = "Processing image..."
removeBackground = "Remove white background (make transparent)"
[sign.instructions]
canvas = "After drawing your signature in the canvas, close the modal then click anywhere on the PDF to place it."
image = "After uploading your signature image above, click anywhere on the PDF to place it."
noSignature = "Create a signature above to enable placement tools."
paused = "Placement paused"
resumeHint = "Resume placement to click and add your signature."
saved = "Select a saved signature above, then click anywhere on the PDF to place it."
text = "After entering your name above, click anywhere on the PDF to place your signature."
title = "How to add signature"
[sign.mode]
move = "Move Signature"
pause = "Pause placement"
place = "Place Signature"
resume = "Resume placement"
[sign.results]
title = "Signature Results"
[sign.saved]
carouselPosition = "{{current}} of {{total}}"
defaultCanvasLabel = "Drawing signature"
defaultImageLabel = "Uploaded signature"
defaultLabel = "Signature"
defaultTextLabel = "Typed signature"
delete = "Remove"
description = "Reuse saved signatures at any time."
emptyDescription = "Draw, upload, or type a signature above, then use \"Save to library\" to keep up to {{max}} favorites ready to use."
emptyTitle = "No saved signatures yet"
heading = "Saved signatures"
label = "Label"
limitDescription = "Remove a saved signature before adding new ones (max {{max}})."
limitTitle = "Limit reached"
next = "Next"
noChanges = "Current signature is already saved."
personalDescription = "Only you can see these signatures."
personalHeading = "Personal Signatures"
prev = "Previous"
saveButton = "Save signature"
savePersonal = "Save Personal"
saveShared = "Save Shared"
saveUnavailable = "Create a signature first to save it."
sharedDescription = "All users can see and use these signatures."
sharedHeading = "Shared Signatures"
tempStorageDescription = "Signatures are stored in your browser only. They will be lost if you clear browser data or switch browsers."
tempStorageTitle = "Temporary browser storage"
use = "Use signature"
[sign.saved.status]
saved = "Saved"
[sign.saved.type]
canvas = "Drawing"
image = "Upload"
text = "Text"
[sign.step]
createDesc = "Choose how you want to create the signature"
place = "Place & save"
placeDesc = "Position the signature on your PDF"
[sign.steps]
configure = "Configure Signature"
[sign.text]
colorLabel = "Text color"
fontLabel = "Font"
fontSizeLabel = "Font size"
fontSizePlaceholder = "Type or select font size (8-200)"
name = "Text"
placeholder = "Enter text"
[sign.type]
canvas = "Canvas"
draw = "Draw"
image = "Image"
saved = "Saved"
text = "Text"
title = "Signature Type"
[signatureSettings.tooltip]
header = "Signature Appearance Settings"
[signatureSettings.tooltip.location]
bullet1 = "Examples: \"New York, USA\", \"London Office\", \"Remote\""
bullet2 = "Not the same as page position"
bullet3 = "May be required for certain legal jurisdictions"
description = "Optional geographic location where the signature was applied. Stored in certificate metadata."
title = "Signature Location"
[signatureSettings.tooltip.logo]
bullet1 = "Displayed alongside signature and text"
bullet2 = "Supports PNG, JPG formats"
bullet3 = "Enhances professional appearance"
description = "Add a company logo to visible signatures for branding and authenticity."
title = "Company Logo"
[signatureSettings.tooltip.reason]
bullet1 = "Examples: \"Approval\", \"Contract Agreement\", \"Review Complete\""
bullet2 = "Visible in PDF signature properties"
bullet3 = "Useful for audit trails and compliance"
description = "Optional text explaining why the document is being signed. Stored in certificate metadata."
title = "Signature Reason"
[signatureSettings.tooltip.visibility]
bullet1 = "<b>Visible</b>: Signature appears on PDF with custom appearance"
bullet2 = "<b>Invisible</b>: Certificate embedded without visual mark"
bullet3 = "Invisible signatures still provide cryptographic validation"
description = "Controls whether the signature is visible on the document or embedded invisibly."
title = "Signature Visibility"
[signRequest]
declined = "Sign request declined"
fetchFailed = "Failed to load sign request"
signed = "Document signed successfully"
[signSession]
created = "Signing request sent"
createFailed = "Failed to create signing request"
[signup]
accountCreatedSuccessfully = "Account created successfully! You can now sign in."
alreadyHaveAccount = "I already have an account"
checkEmailConfirmation = "Check your email for a confirmation link to complete your registration."
confirmPassword = "Confirm password"
confirmPasswordPlaceholder = "Confirm password"
confirmPasswordRequired = "Please confirm your password"
creatingAccount = "Creating Account..."
email = "Email"
emailRequired = "Email is required"
enterEmail = "Enter your email"
enterName = "Enter your name"
enterPassword = "Enter your password"
invalidEmail = "Please enter a valid email address"
name = "Name"
nameRequired = "Name is required"
or = "or"
password = "Password"
passwordRequired = "Password is required"
passwordsDoNotMatch = "Passwords do not match"
passwordTooShort = "Password must be at least 6 characters long"
pleaseFillAllFields = "Please fill in all fields"
signUp = "Sign Up"
signUpWith = "Sign up with"
skip = "Skip"
subtitle = "Join Stirling PDF to get started"
title = "Create an account"
unexpectedError = "Unexpected error: {{message}}"
[sizes]
large = "Large"
medium = "Medium"
small = "Small"
x-large = "X-Large"
[split]
resultsTitle = "Split Results"
selectMethod = "Select a split method"
splitPages = "Enter pages to split on:"
submit = "Split"
tags = "divide,separate,break,split,extract pages,separate pages,divide document,break apart,separate files,unbind,split by page,divide by chapter"
title = "Split PDF"
[split.error]
failed = "An error occurred while splitting the PDF."
[split.methods.byChapters]
name = "Chapters"
tooltip = "Uses PDF bookmarks to determine split points"
[split.methods.byDocCount]
name = "Document Count"
tooltip = "Enter how many files you want to create"
[split.methods.byPageCount]
name = "Page Count"
tooltip = "Enter the number of pages for each split file"
[split.methods.byPageDivider]
name = "Page Divider"
tooltip = "Use QR code divider sheets between documents when scanning"
[split.methods.byPages]
name = "Page Numbers"
tooltip = "Enter page numbers separated by commas or ranges with hyphens"
[split.methods.byPoster]
name = "Printable Chunks"
tooltip = "Divide oversized pages into smaller chunks suitable for printing on standard paper (A4, Letter, etc.)"
[split.methods.bySections]
name = "Sections"
tooltip = "Split each page into horizontal and vertical sections"
[split.methods.bySize]
name = "File Size"
tooltip = "Specify maximum file size (e.g. 10MB, 500KB)"
[split.methods.prefix]
splitAt = "Split at"
splitBy = "Split by"
splitInto = "Split into"
[split.methodSelection.tooltip]
bullet1 = "Click on a method card to select it"
bullet2 = "Hover over each card to see a quick description"
bullet3 = "The settings step will appear after you select a method"
bullet4 = "You can change methods at any time before processing"
title = "Choose Your Split Method"
[split.methodSelection.tooltip.header]
text = "Choose how you want to split your PDF document. Each method is optimized for different use cases and document types."
title = "Split Method Selection"
[split.poster]
rightToLeft = "Split right-to-left"
[split.poster.pageSize]
description = "Size of output pages for printing"
label = "Target Page Size"
[split.poster.xFactor]
description = "Number of columns to split each page into"
label = "Horizontal Divisions"
[split.poster.yFactor]
description = "Number of rows to split each page into"
label = "Vertical Divisions"
[split.settings]
selectMethodFirst = "Please select a split method first"
[split.steps]
chooseMethod = "Choose Method"
settings = "Settings"
[split.tooltip.byChapters]
bullet1 = "Bookmark Level: Which level to split on (1=top level)"
bullet2 = "Include Metadata: Preserve document properties"
bullet3 = "Allow Duplicates: Handle repeated bookmark names"
text = "Use PDF bookmarks to automatically split at chapter boundaries. Requires PDFs with bookmark structure."
title = "Split by Chapters"
[split.tooltip.byDocCount]
bullet1 = "Enter the number of output files you want"
bullet2 = "Pages are distributed as evenly as possible"
bullet3 = "Useful when you need a specific number of files"
text = "Create a specific number of output files by evenly distributing pages across them."
title = "Split by Document Count"
[split.tooltip.byPageCount]
bullet1 = "Enter the number of pages per output file"
bullet2 = "Last file may have fewer pages if not evenly divisible"
bullet3 = "Useful for batch processing workflows"
text = "Create multiple PDFs with a specific number of pages each. Perfect for creating uniform document chunks."
title = "Split by Page Count"
[split.tooltip.byPageDivider]
bullet1 = "Print divider sheets from the download link"
bullet2 = "Insert divider sheets between your documents"
bullet3 = "Scan all documents together as one PDF"
bullet4 = "Upload - divider pages are automatically detected and removed"
bullet5 = "Enable Duplex Mode if scanning both sides of divider sheets"
text = "Automatically split scanned documents using physical divider sheets with QR codes. Perfect for processing multiple documents scanned together."
title = "Split by Page Divider"
[split.tooltip.byPages]
bullet1 = "Single split points: 3,7 (splits after pages 3 and 7)"
bullet2 = "Range split points: 3-8 (splits before page 3 and after page 8)"
bullet3 = "Mixed: 2,5-10,15 (splits after page 2, before page 5, after page 10, and after page 15)"
text = "Split your PDF at specific page numbers. Using 'n' splits after page n. Using 'n-m' splits before page n and after page m."
title = "Split at Page Numbers"
[split.tooltip.byPoster]
bullet1 = "Target Page Size: Choose output paper size (A4, Letter, etc.)"
bullet2 = "Horizontal/Vertical Divisions: Grid size for splitting"
bullet3 = "Right-to-Left: Reverse column order for RTL layouts"
bullet4 = "Print and assemble the pieces to create your poster"
text = "Split large PDF pages into smaller printable chunks suitable for standard paper sizes. Perfect for creating poster prints from oversized pages."
title = "Split for Poster Print"
[split.tooltip.bySections]
bullet1 = "Horizontal: Number of rows to create"
bullet2 = "Vertical: Number of columns to create"
bullet3 = "Merge: Combine all sections into one PDF"
text = "Divide each page into a grid of sections. Useful for splitting documents with multiple columns or extracting specific areas."
title = "Split by Grid Sections"
[split.tooltip.bySize]
bullet1 = "Use MB for larger files (e.g., 10MB)"
bullet2 = "Use KB for smaller files (e.g., 500KB)"
bullet3 = "System will split at page boundaries"
text = "Create multiple PDFs that don't exceed a specified file size. Ideal for file size limitations or email attachments."
title = "Split by File Size"
[split.value.docCount]
label = "Number of Files"
placeholder = "e.g. 3, 5"
[split.value.fileSize]
label = "File Size"
placeholder = "e.g. 10MB, 500KB"
[split.value.pageCount]
label = "Pages per File"
placeholder = "e.g. 5, 10"
[split-by-sections]
merge = "Merge Into One PDF"
tags = "Section Split, Divide, Customize"
title = "Split PDF by Sections"
[split-by-sections.customPages]
label = "Custom Page Numbers"
placeholder = "e.g. 2,4,6"
[split-by-sections.horizontal]
label = "Horizontal Divisions"
placeholder = "Enter number of horizontal divisions"
[split-by-sections.splitMode]
custom = "Custom pages"
description = "Choose how to split the pages"
label = "Split Mode"
splitAll = "Split all pages"
splitAllExceptFirst = "Split all except first"
splitAllExceptFirstAndLast = "Split all except first and last"
splitAllExceptLast = "Split all except last"
[split-by-sections.vertical]
label = "Vertical Divisions"
placeholder = "Enter number of vertical divisions"
[split-by-size-or-count]
title = "Split PDF by Size or Count"
[split-by-size-or-count.value]
label = "Enter Value"
placeholder = "Enter size (e.g., 2MB or 3KB) or count (e.g., 5)"
[splitByChapters]
allowDuplicates = "Allow Duplicates"
bookmarkLevel = "Bookmark Level"
includeMetadata = "Include Metadata"
title = "Split PDF by Chapters"
[splitPdfByChapters]
tags = "split,chapters,bookmarks,organize"
[storageShare]
accessDenied = "You do not have access to this shared file. Ask the owner to share it with you."
accessDeniedBody = "You do not have access to this file. Ask the owner to share it with you."
accessDeniedTitle = "No access"
accessed = "Accessed"
accessFailed = "Unable to load activity."
accessLimitedCommenter = "Comment access is coming soon. Ask the owner for editor access if you need to download."
accessLimitedTitle = "Limited access"
accessLimitedViewer = "This link is view-only. Ask the owner for editor access if you need to download."
addUser = "Add"
bulkDescription = "Create one link to share all checked files with signed-in users."
bulkTitle = "Share checked files"
commenterHint = "Commenting is coming soon."
copied = "Link copied to clipboard"
copy = "Copy"
copyFailed = "Copy failed"
copyLink = "Copy share link"
createdAt = "Created"
description = "Create a share link for this file. Signed-in users with the link can access it."
download = "Download"
downloaded = "Downloaded"
downloadFailed = "Unable to download this file."
downloadsCount = "Downloads: {{count}}"
emailWarningBody = "This looks like an email address. If this person is not already a Stirling PDF user, they will not be able to access the file."
emailWarningConfirm = "Share anyway"
emailWarningTitle = "Email address"
errorTitle = "Share failed"
expiredBody = "This share link is invalid or has expired."
expiredTitle = "Link expired"
failure = "Unable to generate a share link. Please try again."
fileCount_one = "{{count}} file"
fileCount_other = "{{count}} files"
fileLabel = "File"
generate = "Generate Link"
generated = "Share link generated"
goToLogin = "Go to login"
hideActivity = "Hide activity"
invalidUsername = "Enter a valid username or email address."
lastAccessed = "Last accessed"
linkAccessTitle = "Share link access"
linkLabel = "Share link"
linksDisabled = "Share links are disabled."
linksDisabledBody = "Share links are disabled by your server settings."
loadFailed = "Unable to open shared file."
loading = "Loading share link..."
loginPrompt = "Sign in to access this shared file."
loginRequired = "Login required"
manage = "Manage sharing"
manageDescription = "Create and manage links to share this file."
manageLoadFailed = "Unable to load share links."
manageTitle = "Manage Sharing"
noActivity = "No activity yet."
noLinks = "No active share links yet."
noSharedUsers = "No users have access yet."
openInApp = "Open in Stirling PDF"
ownerLabel = "Owner"
ownerUnknown = "Unknown"
removeLink = "Remove link"
removeUser = "Remove"
requiresLogin = "This shared file requires login."
revoked = "Share link removed"
revokeFailed = "Unable to remove the share link."
roleCommenter = "Commenter"
roleEditor = "Editor"
roleLabel = "Role"
roleViewer = "Viewer"
saveAndShare = "Save to server & share"
saveFailed = "Failed to save the file to the server. Please try again."
saveFailedTitle = "Couldn't save to server"
saveFirstBody = "Sharing works on files saved to the server. We'll save it to your files, then continue to sharing."
saveFirstHeading = "Save this file to the server to share it"
saveFirstTitle = "Share file"
sharedUsersTitle = "Shared users"
shareHeading = "Shared file"
sharingDisabled = "Sharing is disabled."
sharingDisabledBody = "Sharing has been disabled by your server settings."
title = "Share File"
titleDefault = "Shared file"
tryAgain = "Please try again later."
unknownUser = "Unknown user"
userAdded = "User added to shared list."
userAddFailed = "Unable to share with that user."
usernameLabel = "Username or email"
usernamePlaceholder = "Enter a username or email"
userRemoved = "User removed from shared list."
userRemoveFailed = "Unable to remove that user."
viewActivity = "View activity"
viewed = "Viewed"
viewsCount = "Views: {{count}}"
[storageUpload]
bulkDescription = "This uploads the checked files to your server storage."
bulkTitle = "Upload checked files"
description = "This uploads the current file to server storage for your own access."
errorTitle = "Upload failed"
failure = "Upload failed. Please check your login and storage settings."
featureDisabled = "Saving to the server isn't enabled on this server."
fileCount_one = "{{count}} file"
fileCount_other = "{{count}} files"
fileLabel = "File"
hint = "Public links and access modes are controlled by your server settings."
more = " +{{count}} more"
success = "Uploaded to server"
title = "Upload to Server"
updateButton = "Update on Server"
uploadButton = "Upload to Server"
[survey]
title = "Stirling-PDF Survey"
[swagger]
clickHere = "click here"
fallback = "If it didn't open automatically,"
opening = "Opening Swagger UI in a new tab..."
tags = "api,documentation,swagger,endpoints,development"
title = "API Documentation"
[tableExtraxt]
tags = "CSV,Table Extraction,extract,convert"
[team]
cancelInviteError = "Failed to cancel invitation"
confirmCancelInvite = "Are you sure you want to cancel this invitation?"
confirmLeave = "Are you sure you want to leave this team?"
confirmLeaveLeader = "As a team leader, leaving will remove you from the team. Are you sure?"
confirmRemove = "Are you sure you want to remove this member?"
editName = "Edit team name"
inviteCancelled = "Invitation canceled"
inviteError = "Failed to send invitation"
inviteSent = "Invitation sent successfully"
leader = "Leader"
leaveButton = "Leave Team"
leaveError = "Failed to leave team"
leaveSuccess = "Successfully left team"
loading = "Loading team information..."
memberCount_one = "{{count}} member"
memberCount_other = "{{count}} members"
memberCount_zero = "no members"
memberRemoved = "Member removed successfully"
namePlaceholder = "Enter team name"
personal = "Personal"
removeError = "Failed to remove member"
renameCancel = "Cancel rename"
renameError = "Failed to rename team"
renameSubmit = "Save team name"
renameSuccess = "Team renamed successfully"
[team.invitationBanner]
acceptButton = "Accept"
message = "has invited you to join"
rejectButton = "Decline"
[team.invite]
cancelLabel = "Cancel"
invalidEmail = "Invalid email address"
placeholder = "Enter email address"
sendButton = "Send Invitation"
title = "Invite Team Member"
[team.members]
actions = "Member actions"
emailColumn = "Email"
empty = "No team members yet"
nameColumn = "Name"
pending = "Pending"
remove = "Remove"
roleColumn = "Role"
title = "Team Members"
[textAlign]
center = "Center"
left = "Left"
right = "Right"
[textInput]
clear = "Clear input"
[time.relative]
daysAgo = "{{count}}d ago"
hoursAgo = "{{count}}h ago"
justNow = "just now"
minutesAgo = "{{count}}m ago"
[timestampPdf]
desc = "Add an RFC 3161 document timestamp to your PDF using a trusted Time Stamp Authority (TSA) server."
results = "Timestamp Results"
submit = "Apply Timestamp"
tags = "timestamp,RFC 3161,TSA,time stamp authority,document timestamp,proof of existence,timestamp token,trusted timestamp,sign timestamp,notarize"
title = "Timestamp PDF"
[timestampPdf.error]
failed = "An error occurred while timestamping the PDF."
[timestampPdf.options]
note = "Only a SHA-256 hash of your document is sent to the TSA server; the PDF file itself is never sent to the TSA server."
title = "Timestamp Server (TSA)"
[timestampPdf.options.tsaUrl]
desc = "Pick a trusted Time Stamp Authority"
label = "Select a TSA server"
[timestampPdf.steps]
settings = "Settings"
[toast]
dismiss = "Dismiss"
toggleDetails = "Toggle details"
[tool]
endpointUnavailable = "This tool is unavailable on your server."
endpointUnavailableClickable = "Not available in this mode. Click to sign in."
filesLoading = "Files are still loading, please wait."
filesLoadingProgress = "{{loaded}} / {{total}} files loading..."
invalidParams = "Fill in the required settings."
noFiles = "Add a file to get started."
scopeFiles = "files"
scopeThisFile = "this file"
selectFilesHint = "Select files in Active Files to run this tool"
singleFileScope = "Only applying to: {{fileName}}"
viewerMode = "Switch to the file editor to add multiple files."
[toolPanel]
alpha = "Alpha"
backToAllTools = "Back to all tools"
collapse = "Collapse panel"
expand = "Expand panel"
goBack = "Go back"
placeholder = "Choose a tool to get started"
premiumFeature = "Premium feature:"
toolsHeader = "Tools"
viewAllTools = "View all tools"
[toolPanel.fullscreen]
comingSoon = "Coming soon:"
favorite = "Add to favorites"
favorites = "Favorites"
heading = "All tools (fullscreen view)"
noResults = "Try adjusting your search or toggle descriptions to find what you need."
recommended = "Recommended"
selfHostedOffline = "Requires your Stirling-PDF server (currently offline):"
showDetails = "Show Details"
unavailable = "Disabled by server administrator:"
unavailableDependency = "Unavailable - required tool missing on server:"
unfavorite = "Remove from favorites"
[toolPanel.modePrompt]
chooseFullscreen = "Use fullscreen mode"
chooseSidebar = "Use sidebar mode"
description = "Preview both layouts and decide how you want to explore Stirling PDF tools."
dismiss = "Maybe later"
fullscreenDescription = "Browse every tool in a catalog that covers the workspace until you pick one."
fullscreenTitle = "Fullscreen mode - (legacy)"
recommended = "Recommended"
sidebarDescription = "Keep tools alongside your workspace for quick switching."
sidebarTitle = "Sidebar mode"
title = "Choose how you browse tools"
[toolPicker]
allTools = "ALL TOOLS"
noToolsFound = "No tools found"
quickAccess = "QUICK ACCESS"
searchPlaceholder = "Search tools..."
[toolPicker.categories]
advancedTools = "Advanced Tools"
recommendedTools = "Recommended Tools"
standardTools = "Standard Tools"
[toolPicker.subcategories]
advancedFormatting = "Advanced Formatting"
automation = "Automation"
developerTools = "Developer Tools"
documentReview = "Document Review"
documentSecurity = "Document Security"
extraction = "Extraction"
general = "General"
pageFormatting = "Page Formatting"
removal = "Removal"
signing = "Signing"
verification = "Verification"
[tools]
noSearchResults = "No tools found"
noTools = "No tools available"
[tooltip]
close = "Close tooltip"
[unlockPDFForms]
description = "This tool will remove read-only restrictions from PDF form fields, making them editable and fillable."
submit = "Unlock Forms"
tags = "remove,delete,form,field,readonly"
title = "Remove Read-Only from Form Fields"
[unlockPDFForms.error]
failed = "An error occurred while unlocking PDF forms."
[unlockPDFForms.results]
title = "Unlocked Forms Results"
[update]
allReleases = "All Releases"
breaking = "Breaking"
breakingChanges = "Breaking Changes"
breakingChangesDefault = "This version contains breaking changes."
close = "Close"
closeModal = "Close update modal"
current = "Current Version"
defaultRecommendation = "This update contains important fixes and improvements."
downloadLatest = "Download Latest"
later = "Later"
latest = "Latest Version"
loadingDetailedInfo = "Loading detailed information..."
migrationGuide = "Migration Guide"
migrationGuides = "Migration Guides"
migrationGuidesDesc = "Review important changes before updating."
modalSubtitle = "A new version of Stirling PDF is ready to install."
modalTitle = "Update Available"
notes = "Notes"
releaseNotes = "Release Notes"
showLess = "Show fewer versions"
showMore = "Show all {{count}} versions"
stable = "STABLE"
updateAvailable = "Update Available"
urgentUpdateAvailable = "Urgent Update"
version = "Version"
versionHistory = "Version History"
viewGuide = "View Guide"
whatsNewIn = "What's new in"
[update.priority]
low = "Low"
minor = "Minor"
normal = "Normal"
urgent = "Urgent"
[upgradeBanner]
attentionBody = "Your admin needs to sign in to see more info. Please contact them immediately."
attentionBodyAdmin = "Review the license requirements to keep this server compliant."
attentionTitle = "This server needs admin attention"
message = "Get the most out of Stirling PDF with unlimited users and advanced features"
seeInfo = "See info"
title = "Upgrade to Server Plan"
upgradeButton = "Upgrade Now"
[URLToPDF]
tags = "web-capture,save-page,web-to-doc,archive"
title = "URL To PDF"
[usage]
aboutUsageAnalytics = "About Usage Analytics"
configureSettings = "Configure Analytics Settings"
error = "Error loading usage statistics"
noData = "No data available"
noDataMessage = "No usage statistics are currently available."
usageAnalyticsExplanation = "Usage analytics track endpoint requests and tool usage patterns. Combined with the Audit Logging dashboard, you get complete visibility into system activity, performance, and security events."
viewAuditLogs = "View Audit Logs"
[usage.chart]
title = "Endpoint Usage Chart"
[usage.controls]
all = "All"
dataTypeLabel = "Data Type:"
refresh = "Refresh"
top10 = "Top 10"
top20 = "Top 20"
[usage.controls.dataType]
all = "All"
api = "API"
ui = "UI"
[usage.showing]
all = "All"
top10 = "Top 10"
top20 = "Top 20"
[usage.stats]
selectedVisits = "Selected Visits"
showing = "Showing"
totalEndpoints = "Total Endpoints"
totalVisits = "Total Visits"
[usage.table]
endpoint = "Endpoint"
noData = "No data available"
percentage = "Percentage"
title = "Detailed Statistics"
unknownEndpoint = "Unknown endpoint"
visits = "Visits"
[users]
lastActive = "Last active"
learnMore = "Learn more about roles and access."
locked = "Locked"
roleFor = "Role for {{name}}"
rowActions = "Actions for {{name}}"
showAll = "Show all {{count}}"
showLess = "Show less"
subtitle2 = "Your people, teams, and access levels."
suspended = "Suspended"
teamActions = "Team actions"
title = "Users"
you = "(you)"
[users.action]
cancelInvite = "Cancel invitation"
deleteTeam = "Delete team"
disableMfa = "Reset MFA"
move = "Move to team"
reinstate = "Reinstate"
remove = "Remove from org"
removeTeam = "Remove from team"
rename = "Rename team"
resetPw = "Reset password"
suspend = "Suspend"
unlock = "Unlock account"
[users.activity]
daysAgo = "{{count}}d ago"
hoursAgo = "{{count}}h ago"
justNow = "Just now"
minutesAgo = "{{count}}m ago"
monthsAgo_one = "{{count}} month ago"
monthsAgo_other = "{{count}} months ago"
never = "Never"
weeksAgo_one = "{{count}} week ago"
weeksAgo_other = "{{count}} weeks ago"
yearsAgo_one = "{{count}} year ago"
yearsAgo_other = "{{count}} years ago"
[users.cap]
addProcessor = "+ Processor"
approver = "Approves policy"
editor = "Editor"
processor = "Processor"
[users.confirm]
cancelInviteBody = "Cancel the invitation to {{email}}? They won't be able to join with the current link."
cancelInviteTitle = "Cancel invitation"
deleteTeamBody = "Delete the {{name}} team? The team must be empty first - move its members to another team, and it can't still own any integration configs."
deleteTeamTitle = "Delete team"
disableMfaBody = "Remove {{name}}'s MFA enrolment? They'll set it up again on next login if required."
disableMfaTitle = "Reset MFA"
removeBody = "Permanently remove {{name}} from the organization? This cannot be undone."
removeTeamBody = "Remove {{name}} from the team? They keep their account but lose access to this team's resources."
removeTitle = "Remove member"
[users.empty]
description = "Invite your team to start collaborating."
title = "No members yet"
[users.group]
addToTeam = "Add to team"
guestCount = "{{count}} guest"
guests = "Guests"
guestsDesc = "External collaborators, scoped to what you shared. Editor only."
ledBy = "led by {{owner}}"
org = "Organization"
orgDesc = "Owners with org-wide authority and policy approval"
owners = "{{count}} owner"
team = "{{name}} team"
teamMeta = "{{count}} people"
[users.invite]
access = "Access"
action = "Invite people"
authOauth = "OAuth2 / SSO"
authSaml = "SAML 2.0"
authType = "Sign-in method"
authWeb = "Password"
create = "Create account"
createSubtitle = "Create a self-hosted account with a password or SSO."
createTitle = "Create account"
editorDesc = "Edit PDFs in the Stirling PDF Editor. Everyone gets this."
email = "Email address"
emailError = "Enter a valid email address"
emailPlaceholder2 = "name@company.com"
forceChange = "Require a password change on first login"
forceMfa = "Require MFA setup on first login"
method = "How to add them"
methodDirect = "Create account directly"
methodEmail = "Invite by email"
password = "Password"
passwordError = "Password must be at least 8 characters"
processorDeferred = "Invite sent, but Processor access couldn't be granted yet - set it from the roster once they've joined."
processorDesc = "The governance surface, run pipelines, agents, and the API."
role = "Role"
send2 = "Send invite"
subtitle2 = "They'll get an email to join your Stirling workspace."
team = "Team"
title = "Invite people"
username = "Username"
usernameError = "Username must be at least 3 characters"
usernamePlaceholder = "jsmith"
[users.invites]
by = "Invited by {{who}}"
cancel = "Cancel"
count = "{{count}} pending"
desc = "Invited people who haven't joined yet. They hold a seat until they accept."
expiresInDays_one = "Expires in {{count}} day"
expiresInDays_other = "Expires in {{count}} days"
expiresToday = "Expires today"
title = "Pending invitations"
[users.loadError]
description = "Something went wrong reaching the backend, or you don't have access. Try again."
title = "Couldn't load members"
[users.moveTeam]
apply = "Move"
team = "Team"
title = "Move to team"
[users.newTeam]
action = "+ New team"
create = "Create team"
emailError = "Enter a valid email address"
name = "Team name"
namePlaceholder = "e.g. Finance"
nameRequired = "Team name is required"
owner = "Team Owner"
ownerFailed = "Team created, but the owner couldn't be invited. Assign one from the roster."
ownerHelper = "Every team has a leader. They'll be invited as Team Owner, with the Processor on, and can add the rest. You can reassign later."
ownerPlaceholder = "owner@company.com"
subtitle = "Group people under a Team Owner who manages their access."
title = "New team"
[users.renameTeam]
apply = "Rename"
name = "Team name"
title = "Rename team"
[users.resetPw]
apply = "Reset password"
confirm = "Confirm password"
copied = "Copied to clipboard"
copyHint = "Copy this now - it won't be shown again."
email = "Email the user about the reset"
forceChange = "Require a password change on next login"
generate = "Generate a secure password"
includePw = "Include the new password in the email"
mismatch = "Passwords do not match"
newPassword = "New password"
regen = "Regenerate"
title = "Reset password"
tooShort = "Password must be at least 8 characters"
[users.role]
guest = "Guest"
member = "Member"
orgOwner = "Org Owner"
teamOwner = "Team Owner"
[users.team]
grantProcessor = "Grant Processor to team"
revokeProcessor = "Revoke Processor from team"
[validateSignature]
date = "Date"
downloadCsv = "Download CSV"
downloadJson = "Download JSON"
downloadPdf = "Download PDF Report"
finalizing = "Preparing downloads..."
location = "Location"
noResults = "Run the validation to generate a report."
noSignatures = "No digital signatures found in this document"
noSignaturesShort = "No signatures"
processing = "Validating signatures..."
reason = "Reason"
results = "Validation Results"
selectCustomCert = "Custom Certificate File X.509 (Optional)"
signatureDate = "Signature Date"
signer = "Signer"
submit = "Validate Signatures"
tags = "signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate"
title = "Validate PDF Signatures"
totalSignatures = "Total Signatures"
[validateSignature.cert]
algorithm = "Algorithm"
bits = "bits"
details = "Certificate Details"
issuer = "Issuer"
keySize = "Key Size"
keyUsage = "Key Usage"
selfSigned = "Self-Signed"
serialNumber = "Serial Number"
subject = "Subject"
validFrom = "Valid From"
validUntil = "Valid Until"
version = "Version"
[validateSignature.downloadType]
csv = "CSV"
json = "JSON"
pdf = "PDF"
[validateSignature.error]
allFailed = "Unable to validate the selected files."
partial = "Some files could not be validated."
reportGeneration = "Could not generate the PDF report. JSON and CSV are available."
unexpected = "Unexpected error during validation."
[validateSignature.issue]
certExpired = "Certificate expired"
certRevocationUnknown = "Certificate revocation status unknown"
certRevoked = "Certificate revoked"
chainInvalid = "Certificate chain invalid"
documentModified = "Document modified after signing - content was added outside the signed area"
revocationNotChecked = "Revocation was not checked"
selfSigned = "Self-signed - signer identity not verified"
signatureInvalid = "Signature cryptographic check failed"
trustInvalid = "Certificate not trusted"
[validateSignature.report]
continued = "Continued"
downloads = "Downloads"
entryLabel = "Signature Summary"
filesEvaluated_one = "{{count}} file evaluated"
filesEvaluated_other = "{{count}} files evaluated"
footer = "Validated via Stirling PDF"
generatedAt = "Generated"
noPdf = "PDF report will be available after a successful validation."
page = "Page"
shortTitle = "Signature Summary"
signatureCountLabel_one = "{{count}} signature"
signatureCountLabel_other = "{{count}} signatures"
signaturesFound_one = "{{count}} signature detected"
signaturesFound_other = "{{count}} signatures detected"
signaturesInvalid = "{{count}} invalid"
signaturesUnverified_one = "{{count}} needs review"
signaturesUnverified_other = "{{count}} need review"
signaturesValid = "{{count}} fully valid"
title = "Signature Validation Report"
[validateSignature.report.fields]
created = "Created"
fileSize = "File Size"
signatureCount = "Total Signatures"
signatureDate = "Signature Date"
[validateSignature.settings]
certHint = "Upload a trusted X.509 certificate to validate against a custom trust source."
title = "Validation Settings"
[validateSignature.signature]
_value = "Signature"
[validateSignature.status]
complete = "Validation complete"
invalid = "Invalid"
untrustedShort = "Unverified"
valid = "Valid"
validUntrusted = "Valid, signer not verified"
[viewer]
cannotPreviewFile = "Cannot Preview File"
copyText = "Copy"
disableColorFilter = "Disable Color Filter"
dualPageView = "Dual Page View"
enableDarkFilter = "Enable Dark Filter"
enableSepiaFilter = "Enable Sepia Filter"
firstPage = "First Page"
lastPage = "Last Page"
moreOptions = "More"
nextPage = "Next Page"
onlyPdfSupported = "This file format is not supported for preview."
pageNavigation = "Page navigation"
previousPage = "Previous Page"
saveChangesErrorBody = "The document could not be saved. Try again."
saveChangesErrorTitle = "Could not save changes"
singlePageView = "Single Page View"
unknownFile = "Unknown file"
view = "View"
zoom = "Zoom"
zoomIn = "Zoom In"
zoomOut = "Zoom Out"
[viewer.attachments]
addAttachment = "Add attachment"
close = "Close attachments"
closeSidebar = "Close attachments sidebar"
download = "Download attachment"
empty = "No attachments in this document"
loading = "Loading attachments..."
noDocument = "Open a PDF to view its attachments."
noMatch = "No attachments match your search"
noSupport = "Attachment support is unavailable for this viewer."
retry = "Retry"
searchPlaceholder = "Search attachments"
title = "Attachments"
[viewer.bookmarks]
bookmarkTitle = "Bookmark title"
bookmarkTitleRequired = "Bookmark title is required"
closeSidebar = "Close bookmarks sidebar"
collapseAll = "Collapse all bookmarks"
expandAll = "Expand all bookmarks"
searchPlaceholder = "Search bookmarks"
[viewer.comments]
addComment = "Add comment"
addCommentPlaceholder = "Add comment..."
addLink = "Add link"
addReplyPlaceholder = "Add reply..."
cancelClearAll = "Cancel"
clearAll = "Clear all comments"
clearAllDescription = "This removes comments and replies from the sidebar while keeping any attached annotations in the document."
clearAllTitle = "Clear all comments?"
close = "Close comments"
closeSidebar = "Close comments sidebar"
deleteAnnotationAndComment = "Delete annotation & comment"
deleteDescription = "This annotation has a comment attached. You can remove just the comment from the sidebar while keeping the annotation, or delete everything."
deleteTitle = "Remove annotation from comments?"
goToLink = "Go to link"
hint = "Place comments with the Comment, Insert Text, or Replace Text tools. They will appear here by page."
locateAnnotation = "Locate in document"
moreActions = "More actions"
nComments_one = "{{count}} comment"
nComments_other = "{{count}} comments"
pageLabel = "Page {{page}}"
placingHint = "Click a page to place… (cancel)"
removeCommentOnly = "Remove comment only"
saveReply = "Save reply"
title = "Comments"
typeComment = "Comment"
typeInsertText = "Insert Text"
typeReplaceText = "Replace Text"
viewComment = "View comment"
[viewer.error]
noFileProvided = "Error: No file provided to viewer"
[viewer.formBar]
apply = "Apply Changes"
dismiss = "Dismiss"
download = "Download PDF"
hasFieldsDesc = "This PDF contains fillable fields"
title = "Form Fields"
unsavedBadge = "Unsaved"
unsavedDesc = "You have unsaved changes"
[viewer.layers]
closeSidebar = "Close layers sidebar"
hideAll = "Hide all layers"
showAll = "Show all layers"
[viewer.link]
delete = "Delete link"
[viewer.nonPdf]
columnDefault = "Column {{index}}"
convertToPdf = "Convert to PDF"
csvStats = "{{rows}} rows · {{columns}} columns · {{size}}"
emptyFile = "Empty file"
htmlPreview = "HTML preview"
htmlPreviewWarning = "HTML preview - external resources may not load · {{size}}"
invalidJson = "Invalid JSON - showing raw content"
lineNumbers = "Line numbers"
loading = "Loading..."
renderMarkdown = "Render markdown"
sortedBy = "Sorted by: {{column}}"
textStats = "{{lines}} lines · {{size}}"
[viewer.redaction]
removeMark = "Remove this mark"
[viewer.search]
clear = "Clear search"
close = "Close search"
next = "Next result"
previous = "Previous result"
resultsOf = "of {{total}}"
[viewer.signature]
delete = "Delete signature"
[viewer.thumbnails]
closeSidebar = "Close thumbnails sidebar"
[viewPdf]
tags = "view,read,annotate,text,image,highlight,edit"
title = "View/Edit PDF"
[warning]
tooltipTitle = "Warning"
[watchedFolders]
alreadyInFolder = "Already in this folder"
defaultFolderWarning = "This is a default folder and will be recreated on next reload."
deleteConfirmBody = "This will remove the folder and its run history. Files already downloaded are not affected."
deleteConfirmTitle = "Delete folder?"
folderNotFound = "Folder not found"
newFolder = "New folder"
noFolders = "No watched folders yet"
sidebarTitle = "Watched Folders"
title = "Watched Folders"
[watchedFolders.actions]
back = "Back"
collapse = "Collapse"
dismiss = "Dismiss"
download = "Download"
downloadInput = "Download input"
downloadOutput = "Download output"
expand = "Expand"
retry = "Retry"
[watchedFolders.card]
delete = "Delete folder"
edit = "Edit folder"
[watchedFolders.home]
addAnother = "Add another Watched Folder"
addAnotherDesc = "Automatically process files with a new pipeline"
create = "Create your first Watched Folder"
deleteFolder = "Delete folder"
editFolder = "Edit folder"
empty = "No watched folders yet"
emptyDesc = "Set up a Watched Folder once. Drop PDFs in and they're automatically compressed, OCR'd, split, merged — whatever your pipeline does."
emptyTitle = "Automate your PDF workflows"
file = "file"
files = "files"
pause = "Pause"
resume = "Resume"
[watchedFolders.howItWorks]
step1Desc = "Drag PDFs onto any Watched Folder card — or send them from your file list"
step1Title = "Drop files"
step2Desc = "Your configured tools process each file automatically"
step2Title = "Pipeline runs"
step3Desc = "Download processed files from inside the folder"
step3Title = "Output ready"
title = "How Watched Folders work"
[watchedFolders.modal]
advanced = "Advanced"
automation = "Automation"
automationNameFallback = "Watched Folder automation"
automationRequired = "Add at least one configured step before saving."
autoNumber = "Auto-number"
autoNumberExample = "e.g. document.pdf → document (1).pdf"
autoScanHelp = "New PDF files in this folder are processed automatically every 10 seconds."
changeFolder = "Change"
chooseFolder = "Choose"
clearFolder = "Clear"
color = "Accent color"
createFolder = "Create Folder"
createTitle = "New Watched Folder"
editTitle = "Edit Watched Folder"
inputFolder = "Input folder"
inputFolderNotChosen = "No folder chosen — required for auto-scan"
inputSource = "Input source"
inputSourceBrowser = "Browser — drop files here"
inputSourceLocal = "Local folder (auto-scan)"
inputSourceLocalUnsupported = "Local folder (auto-scan) — Chrome/Edge only"
localOutputFolder = "Local output folder"
maxRetries = "Max retries"
name = "Folder name"
namePlaceholder = "My Watched Folder"
nameRequired = "Folder name is required"
nameTooLong = "Folder name must be 50 characters or less"
outputFolderNotSet = "Not set — outputs stay in app"
outputFolderUnsupported = "Not supported in this browser"
outputModeNewDesc = "Output is saved as a new separate file"
outputModeVersion = "Replace original?"
outputModeVersionDesc = "Output becomes a new version of the input file rather than a separate file"
outputName = "Output filename prefix"
outputNamePrefix = "Filename prefix"
outputNameSuffix = "Suffix"
positionPrefix = "Prefix"
positionSuffix = "Suffix"
replaceOriginal = "Replace original file"
retryDelay = "Delay (minutes)"
saveChanges = "Save Changes"
saveFailed = "Failed to save folder. Please try again."
sectionFolder = "Folder"
sectionSourceOutput = "Source & Output"
sectionSteps = "Steps"
[watchedFolders.status]
active = "Active"
done = "Done"
paused = "Paused"
processing = "Processing"
[watchedFolders.time]
daysAgo = "{{count}}d ago"
hoursAgo = "{{count}}h ago"
justNow = "just now"
minutesAgo = "{{count}}m ago"
[watchedFolders.workbench]
activity = "Activity"
addFiles = "Add files"
allTime = "All time"
cancel = "Cancel"
chartTooltipComplete = "{{count}} complete"
chartTooltipFailed = "{{count}} failed"
clearSelection = "Clear selection"
countProcessing = "{{count}} processing"
countQueued = "{{count}} queued"
countSelected = "{{count}} selected"
dataSaved = "Saved"
dayRunning = "day running"
daysRunning = "days running"
delete = "Delete"
deleteConfirmBody = "Remove notifications only clears the activity log. Delete outputs also removes the processed files from storage. Your original input files are never touched."
deleteOutputs = "Delete outputs"
directionIn = "in"
directionOut = "out"
dropToProcess = "Drop to process"
export = "Export"
exportSeparately = "Export separately"
exportZip = "Export zip"
failed = "Failed"
filesProcessedOverTime = "Files processed over time"
filterAll = "All"
filterPending = "Pending"
inputs = "Inputs"
inputSize = "Input size"
legendComplete = "Complete"
noActivity = "No activity yet — drop a PDF to start"
noActivityMatch = "No matching activity"
noInputFolder = "No input folder — edit to configure"
outputs = "Outputs"
pause = "Pause"
preview = "Preview"
previewInput = "Preview input"
previewLoadFailed = "Could not load file preview."
previewOutput = "Preview output"
queued = "Queued"
queuedWaiting = "Queued — waiting to run"
removeEntries = "Remove {{count}} entries"
removeEntry = "Remove entry"
removeNotificationsOnly = "Remove notifications only"
resume = "Resume"
retryAll = "Retry all"
retryIn = "retry in {{count}}m"
retryingSoon = "retrying…"
retryMixedConfirm = "Some selected files have already completed and will be skipped. Only failed files will be retried. Continue?"
running = "Running"
search = "Search…"
selectAll = "Select all {{count}}"
sortNameAsc = "A → Z"
sortNameDesc = "Z → A"
sortNewest = "Newest"
sortOldest = "Oldest"
watching = "Watching: {{name}}"
[watermark]
desc = "Add text or image watermarks to PDF files"
submit = "Add Watermark"
tags = "stamp,mark,overlay,watermark,branding,logo,confidential,draft,copyright,trademark,text overlay,image overlay,background text"
title = "Add Watermark"
[watermark.error]
failed = "An error occurred while adding watermark to the PDF."
[watermark.results]
title = "Watermark Results"
[watermark.settings]
alphabet = "Font/Language"
color = "Watermark Color"
convertToImage = "Flatten PDF pages to images"
opacity = "Opacity (%)"
rotation = "Rotation (degrees)"
size = "Size"
[watermark.settings.image]
choose = "Choose Image"
[watermark.settings.spacing]
height = "Height Spacing"
horizontal = "Horizontal Spacing"
vertical = "Vertical Spacing"
width = "Width Spacing"
[watermark.settings.text]
placeholder = "Enter watermark text"
[watermark.steps]
file = "Watermark File"
formatting = "Formatting"
textStyle = "Style"
type = "Watermark Type"
wording = "Wording"
[watermark.tooltip.appearance]
bullet1 = "Rotation: -360° to 360° for angled watermarks"
bullet2 = "Opacity: 0-100% for transparency control"
bullet3 = "Lower opacity creates subtle watermarks"
text = "Control how your watermark looks and blends with the document."
title = "Appearance Settings"
[watermark.tooltip.file.header]
title = "Image Upload"
[watermark.tooltip.file.recommendations]
bullet1 = "Use logos or stamps with transparent backgrounds"
bullet2 = "Simple designs work better than complex images"
bullet3 = "Consider the final document size when choosing resolution"
text = "Tips for optimal image watermark results."
title = "Best Practices"
[watermark.tooltip.file.upload]
bullet1 = "Supports common formats: PNG, JPG, GIF, BMP"
bullet2 = "PNG with transparency works best"
bullet3 = "Higher resolution images maintain quality better"
text = "Upload an image file to use as your watermark."
title = "Image Selection"
[watermark.tooltip.formatting.header]
title = "Formatting & Layout"
[watermark.tooltip.formatting.security]
bullet1 = "Prevents text selection and copying"
bullet2 = "Makes watermarks harder to remove"
bullet3 = "Results in larger file sizes"
bullet4 = "Best for sensitive or copyrighted content"
text = "Convert the final PDF to an image-based format for enhanced security."
title = "Security Option"
[watermark.tooltip.formatting.size]
bullet1 = "Larger sizes create more prominent watermarks"
text = "Adjust the size of your watermark (text or image)."
title = "Size Control"
[watermark.tooltip.language]
text = "Choose the appropriate language setting to ensure proper font rendering for your text."
title = "Language Support"
[watermark.tooltip.spacing]
bullet1 = "Width spacing: Horizontal distance between watermarks"
bullet2 = "Height spacing: Vertical distance between watermarks"
bullet3 = "Higher values create more spread out patterns"
text = "Adjust the spacing between repeated watermarks across the page."
title = "Spacing Control"
[watermark.tooltip.textStyle.color]
bullet1 = "Light gray (#d3d3d3) for subtle watermarks"
bullet2 = "Black or dark colors for high contrast"
bullet3 = "Custom colors for branding purposes"
text = "Choose a color that provides good contrast with your document content."
title = "Color Selection"
[watermark.tooltip.textStyle.header]
title = "Text Style"
[watermark.tooltip.type.description]
text = "Select between text or image watermarks based on your needs."
title = "Choose Your Watermark"
[watermark.tooltip.type.header]
title = "Watermark Type Selection"
[watermark.tooltip.type.image]
bullet1 = "Upload any image format"
bullet2 = "Maintains image quality"
bullet3 = "Perfect for logos and stamps"
text = "Use logos, stamps, or any image as a watermark. Great for branding and visual identification."
title = "Image Watermarks"
[watermark.tooltip.type.text]
bullet1 = "Customizable fonts and languages"
bullet2 = "Adjustable colors and transparency"
bullet3 = "Ideal for legal or branding text"
text = "Perfect for adding copyright notices, company names, or confidentiality labels. Supports multiple languages and custom colors."
title = "Text Watermarks"
[watermark.tooltip.wording.header]
title = "Text Content"
[watermark.tooltip.wording.text]
bullet1 = "Keep it concise for better readability"
bullet2 = "Common examples: 'CONFIDENTIAL', 'DRAFT', company name"
bullet3 = "Emoji characters are not supported and will be filtered out"
text = "Enter the text that will appear as your watermark across the document."
title = "Watermark Text"
[watermark.type]
1 = "Text"
2 = "Image"
[watermark.watermarkType]
image = "Image"
text = "Text"
[wetSignature.tooltip]
header = "Signature Creation Methods"
[wetSignature.tooltip.draw]
bullet1 = "Customize pen color and thickness"
bullet2 = "Clear and redraw until satisfied"
bullet3 = "Works on touch devices (tablets, phones)"
description = "Create a handwritten signature using your mouse or touchscreen. Best for personal, authentic signatures."
title = "Draw Signature"
[wetSignature.tooltip.type]
bullet1 = "Choose from multiple fonts"
bullet2 = "Customize text size and color"
bullet3 = "Perfect for standardized signatures"
description = "Generate a signature from typed text. Fast and consistent, suitable for business documents."
title = "Type Signature"
[wetSignature.tooltip.upload]
bullet1 = "Supports PNG, JPG, and other image formats"
bullet2 = "Transparent backgrounds recommended for best results"
bullet3 = "Image will be resized to fit signature area"
description = "Upload a pre-created signature image. Ideal if you have a scanned signature or company logo."
title = "Upload Signature Image"
[workbenchBar]
activeFiles = "Active Files"
annotations = "Annotations"
applyRedactionsFirst = "Apply redactions first"
closeAll = "Close All Files"
closePdf = "Close PDF"
deleteSelected = "Delete Selected Pages"
deselectAll = "Deselect All"
downloadAll = "Download All"
exitRedaction = "Exit Redaction Mode"
exportAll = "Export PDF"
exportSelected = "Export Selected Pages"
formFill = "Fill Form"
multiTool = "Multi-Tool"
panMode = "Pan Mode"
print = "Print PDF"
readAloud = "Read Aloud"
readAloudLanguage = "Language"
readAloudSpeed = "Speed"
redact = "Redact"
rotateLeft = "Rotate Left"
rotateRight = "Rotate Right"
ruler = "Ruler / Measure"
save = "Save"
saveAll = "Save All"
saveAs = "Save As"
saveChanges = "Save Changes"
search = "Search PDF"
selectAll = "Select All"
selectByNumber = "Select by Page Numbers"
selectLanguage = "Select language"
share = "Share"
toggleAnnotations = "Toggle Annotations Visibility"
toggleAttachments = "Toggle Attachments"
toggleBookmarks = "Toggle Bookmarks"
toggleComments = "Comments"
toggleLayers = "Toggle Layers"
toggleSidebar = "Toggle Sidebar"
viewer = "Viewer"
[workflow.participant]
accessExpired = "Your access to this document has expired."
certificateFile = "Certificate File"
certificateFilePlaceholder = "Select certificate file"
certificatePassword = "Certificate Password"
certificateType = "Certificate Type"
certTypeJks = "JKS Keystore"
certTypeP12 = "P12/PKCS12 Certificate"
certTypeServer = "Server Certificate (if available)"
completedDeclined = "You have declined this document."
completedSigned = "You have signed this document."
decline = "Decline"
downloadDocument = "Download Document"
dueDate = "Due Date: {{date}}"
errorTitle = "Error"
from = "From: {{name}}"
loadingSession = "Loading session..."
location = "Location"
locationPlaceholder = "e.g., San Francisco, CA"
pageNumber = "Page Number (optional)"
reason = "Reason"
reasonPlaceholder = "e.g., Document approval"
sessionNotFound = "Session not found or access denied."
signDocument = "Sign Document"
statusDeclined = "Declined"
statusNotified = "Notified"
statusPending = "Pending"
statusSigned = "Signed"
statusViewed = "Viewed"
submitSignature = "Submit Signature"
[workspace]
title = "Workspace"
[workspace.people]
active = "Active"
activeSession = "Active session"
addMembers = "Add Members"
admin = "Admin"
confirmDelete = "Are you sure you want to delete this user? This action cannot be undone."
confirmUnlock = "Are you sure you want to unlock this user account?"
deleteUser = "Delete User"
deleteUserError = "Failed to delete user"
deleteUserSuccess = "User deleted successfully"
description = "Manage workspace members and their permissions"
disable = "Disable"
disabled = "Disabled"
editRole = "Edit Role"
enable = "Enable"
loading = "Loading people..."
locked = "locked"
lockedBadge = "Locked"
loginRequired = "Enable login mode first"
memberActions = "Member actions"
noMembersFound = "No members found"
role = "Role"
searchMembers = "Search members..."
team = "Team"
title = "People"
unlockAccount = "Unlock Account"
unlockUserError = "Failed to unlock user account"
unlockUserSuccess = "User account unlocked successfully"
user = "User"
userInfo = "User info"
[workspace.people.actions]
upgrade = "Upgrade"
[workspace.people.addMember]
authType = "Authentication Type"
error = "Failed to create user"
forceMFA = "Force MFA setup on next login"
forcePasswordChange = "Force password change on first login"
password = "Password"
passwordPlaceholder = "Enter password"
passwordRequired = "Password is required"
role = "Role"
submit = "Add Member"
success = "User created successfully"
team = "Team (Optional)"
teamPlaceholder = "Select a team"
username = "Username (Email)"
usernamePlaceholder = "user@example.com"
usernameRequired = "Username and password are required"
[workspace.people.authType]
oauth = "OAuth2"
password = "Password"
saml = "SAML2"
ssoDescription = "User will authenticate via SSO provider"
[workspace.people.changePassword]
action = "Change password"
confirmPassword = "Confirm password"
confirmPlaceholder = "Re-enter the new password"
copiedToClipboard = "Password copied to clipboard"
copyFailed = "Failed to copy password"
copyTooltip = "Copy to clipboard"
emailUnavailable = "This user's email is not a valid email address. Notifications are disabled."
error = "Failed to update password"
forcePasswordChange = "Force user to change password on next login"
generatedPreview = "Generated password:"
generateRandom = "Generate secure password"
includePassword = "Include the new password in the email"
newPassword = "New password"
notifyOnly = "An email will be sent without the password, letting the user know an admin changed it."
passwordMismatch = "Passwords do not match"
passwordRequired = "Please enter a new password"
placeholder = "Enter a new password"
sendEmail = "Email the user about this change"
smtpDisabled = "Email notifications require SMTP to be enabled in settings."
submit = "Update password"
subtitle = "Update the password for"
success = "Password updated successfully"
title = "Change password"
[workspace.people.editMember]
editing = "Editing: <0>{{username}}</0>"
error = "Failed to update user"
role = "Role"
submit = "Update User"
success = "User updated successfully"
team = "Team (Optional)"
teamPlaceholder = "Select a team"
title = "Edit User"
[workspace.people.emailInvite]
allFailed = "Failed to invite users"
emails = "Email Addresses"
emailsPlaceholder = "user1@example.com, user2@example.com"
emailsRequired = "At least one email address is required"
error = "Failed to send invites"
partialFailure = "Some invites failed"
submit = "Send Invites"
success = "user(s) invited successfully"
[workspace.people.inviteLink]
copied = "Link copied to clipboard"
email = "Email Address"
emailDescription = "Optional - leave blank for a general invite link that can be used by anyone"
emailPlaceholder = "user@example.com (optional)"
emailSent = "Invite link generated and sent via email"
error = "Failed to generate invite link"
expiryHours = "Expiry Hours"
generate = "Generate Link"
generated = "Invite Link Generated"
sendEmail = "Send invite link via email"
sendEmailDescription = "If enabled, the invite link will be sent to the specified email address"
submit = "Generate Invite Link"
[workspace.people.inviteMembers]
label = "Invite Members"
subtitle = "Type or paste in emails below, separated by commas. Your workspace will be billed by members."
[workspace.people.inviteMode]
email = "Email"
emailDisabled = "Email invites require SMTP configuration and mail.enableInvites=true in settings"
link = "Link"
username = "Username"
[workspace.people.license]
currentUsage = "Currently using {{current}} of {{max}} user licenses"
fromLicense = "from license"
grandfathered = "Grandfathered"
grandfatheredShort = "{{count}} grandfathered"
slotsAvailable_one = "{{count}} user slot available"
slotsAvailable_other = "{{count}} user slots available"
slotsAvailable_zero = "No slots available"
users_one = "user"
users_other = "users"
[workspace.people.mfa]
adminDisableError = "Failed to disable MFA for user"
adminDisableSuccess = "MFA disabled successfully for user"
disableByAdmin = "Disable MFA"
[workspace.people.roleDescriptions]
admin = "Can manage settings and invite users, with full administrative access."
currentRole = "Current assigned role."
user = "Can view and edit shared files, but cannot manage workspace settings or users."
[workspace.people.toggleEnabled]
error = "Failed to update user status"
success = "User status updated successfully"
[workspace.teams]
addMember = "Add Member"
backToTeams = "Back to Teams"
cannotAddToInternal = "Cannot add members to the Internal team"
cannotDeleteInternal = "Cannot delete the Internal team"
cannotRenameInternal = "Cannot rename the Internal team"
confirmDelete = "Are you sure you want to delete this team? This team must be empty to delete."
confirmRemove = "Remove user from this team?"
createNewTeam = "Create New Team"
deleteTeamLabel = "Delete Team"
description = "Manage teams and organize workspace members"
loadError = "Failed to load team details"
loading = "Loading teams..."
loadingDetails = "Loading team details..."
memberCount_one = "{{count}} member"
memberCount_other = "{{count}} members"
memberCount_zero = "no members"
noMembers = "No members in this team"
noTeamsFound = "No teams found"
removeMember = "Remove from team"
removeMemberError = "Failed to remove user from team"
removeMemberSuccess = "User removed from team"
renameTeamLabel = "Rename Team"
system = "System"
teamActions = "Team actions"
teamName = "Team Name"
teamNotFound = "Team not found"
title = "Teams"
totalMembers = "Total Members"
viewTeam = "View Team"
[workspace.teams.addMemberToTeam]
addingTo = "Adding to"
currentlyIn = "currently in"
error = "Failed to add member to team"
selectUser = "Select User"
selectUserPlaceholder = "Choose a user"
selectUserRequired = "Please select a user"
submit = "Add Member"
success = "Member added to team successfully"
title = "Add Member to Team"
userRequired = "Please select a user"
willBeMoved = "Note: This user will be moved from their current team to this team."
[workspace.teams.changeTeam]
changing = "Moving"
error = "Failed to change team"
label = "Change Team"
selectTeam = "Select Team"
selectTeamPlaceholder = "Choose a team"
selectTeamRequired = "Please select a team"
submit = "Change Team"
success = "Team changed successfully"
title = "Change Team"
[workspace.teams.createTeam]
error = "Failed to create team"
nameRequired = "Team name is required"
submit = "Create Team"
success = "Team created successfully"
teamName = "Team Name"
teamNamePlaceholder = "Enter team name"
title = "Create New Team"
[workspace.teams.deleteTeam]
error = "Failed to delete team. Make sure the team is empty."
success = "Team deleted successfully"
[workspace.teams.renameTeam]
error = "Failed to rename team"
nameRequired = "Team name is required"
newTeamName = "New Team Name"
newTeamNamePlaceholder = "Enter new team name"
renaming = "Renaming:"
submit = "Rename Team"
success = "Team renamed successfully"
title = "Rename Team"
[zipWarning]
cancel = "Cancel"
confirm = "Extract"
message_one = "This ZIP contains {{count}} file. Extract anyway?"
message_other = "This ZIP contains {{count}} files. Extract anyway?"
title = "Large ZIP File"