mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2026-09-02 21:03:34 +03:00
🌐 Sync Translations + Update README Progress Table (#7583)
### Description of Changes This Pull Request was automatically generated to synchronize updates to translation files and documentation. Below are the details of the changes made: #### **1. Synchronization of Translation Files** - Updated translation files (`frontend/editor/public/locales/*/translation.toml`) to reflect changes in the reference file `en-US/translation.toml`. - Ensured consistency and synchronization across all supported language files. - Highlighted any missing or incomplete translations. - **Format**: TOML #### **2. Update README.md** - Generated the translation progress table in `README.md` using `counter_translation_v3.py`. - Added a summary of the current translation status for all supported languages. - Included up-to-date statistics on translation coverage. #### **Why these changes are necessary** - Keeps translation files aligned with the latest reference updates. - Ensures the documentation reflects the current translation progress. --- Auto-generated by [create-pull-request][1]. [1]: https://github.com/peter-evans/create-pull-request Co-authored-by: stirlingbot[bot] <195170888+stirlingbot[bot]@users.noreply.github.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,6 @@
|
||||
alphabet = "Alphabet"
|
||||
apply = "Apply"
|
||||
applyAndContinue = "Save & Leave"
|
||||
areYouSure = "Are you sure you want to leave?"
|
||||
back = "Back"
|
||||
black = "Black"
|
||||
blue = "Blue"
|
||||
@@ -106,6 +105,7 @@ undoSuccess = "Operation undone successfully"
|
||||
unknown = "Unknown"
|
||||
unpin = "Unpin File (replace after tool run)"
|
||||
unsavedChanges = "You have unsaved changes to your PDF."
|
||||
unsavedChangesBody = "You have unsaved changes to your PDF. Are you sure you want to leave?"
|
||||
unsavedChangesTitle = "Unsaved Changes"
|
||||
unsupported = "Unsupported"
|
||||
username = "Username"
|
||||
@@ -1879,6 +1879,9 @@ width = "Width"
|
||||
[app]
|
||||
description = "The Free Adobe Acrobat alternative (10M+ Downloads)"
|
||||
|
||||
[appBanner]
|
||||
dismiss = "Dismiss"
|
||||
|
||||
[attachments]
|
||||
convertToPdfA3b = "Convert to PDF/A-3b"
|
||||
convertToPdfA3bDescription = "Creates an archival PDF with embedded attachments"
|
||||
@@ -2933,12 +2936,16 @@ text = "To make these permissions unchangeable, use the Add Password tool to set
|
||||
[chat.actions]
|
||||
copy = "Copy message"
|
||||
|
||||
[chat.emptyState]
|
||||
text = "Ask a question about your documents or get help with PDF tools."
|
||||
|
||||
[chat.fab]
|
||||
close = "Close chat"
|
||||
open = "Open Stirling AI assistant"
|
||||
|
||||
[chat.header]
|
||||
agentMenu = "Stirling agent options"
|
||||
assistant = "AI Assistant"
|
||||
clearChat = "Clear chat"
|
||||
|
||||
[chat.input]
|
||||
@@ -3006,6 +3013,7 @@ saturation = "Saturation and brightness"
|
||||
title = "Choose colour"
|
||||
|
||||
[common]
|
||||
actions = "Actions"
|
||||
back = "Back"
|
||||
cancel = "Cancel"
|
||||
close = "Close"
|
||||
@@ -3016,10 +3024,12 @@ continue = "Continue"
|
||||
copied = "Copied!"
|
||||
copy = "Copy"
|
||||
done = "Done"
|
||||
enterValue = "Enter value"
|
||||
error = "Error"
|
||||
expand = "Expand"
|
||||
loading = "Loading..."
|
||||
next = "Next"
|
||||
open = "Open"
|
||||
preview = "Preview"
|
||||
previous = "Previous"
|
||||
refresh = "Refresh"
|
||||
@@ -3392,6 +3402,24 @@ pdfOptions = "PDF Options"
|
||||
pdfToCbr = "PDF → CBR"
|
||||
pdfToCbz = "PDF → CBZ"
|
||||
pdfToEpub = "PDF → EPUB"
|
||||
pdfUaAltTextNotice = "Images need a written description before a document can be certified. Descriptions are never generated automatically, because an invented one passes the checker while telling a screen-reader user nothing. Any image left without one is reported, and the file comes back tagged but not certified."
|
||||
pdfUaAltTextScanFailed = "The images could not be listed. Convert anyway and the response reports what is missing."
|
||||
pdfUaAltTextSingleFileOnly = "Descriptions belong to one document: an image is identified by its position, which is a different image in every file. Convert these {{fileCount}} files to tag them, then convert one at a time to describe its images."
|
||||
pdfUaEmbedFonts = "Embed missing fonts"
|
||||
pdfUaEmbedFontsHelp = "PDF/UA requires every font to be embedded. Turning this off is faster but usually prevents conformance."
|
||||
pdfUaFigureLabel = "Page {{page}} {{kind}}"
|
||||
pdfUaFigurePlaceholder = "What this image tells the reader"
|
||||
pdfUaFindImages = "Find images needing a description"
|
||||
pdfUaLanguage = "Document language"
|
||||
pdfUaLanguageHelp = "A BCP-47 tag such as en-GB. Used only when the document does not already declare its own language."
|
||||
pdfUaNoImagesNeedingText = "No image is missing a description."
|
||||
pdfUaOptions = "PDF/UA Options"
|
||||
pdfUaOverrideLanguage = "Replace the document's own language"
|
||||
pdfUaOverrideLanguageHelp = "Only tick this if the language above is right and the document's own is wrong. Relabelling a document into a language it is not written in makes a screen reader unintelligible."
|
||||
pdfUaProfile = "Conformance level"
|
||||
pdfUaSignatureWarning = "This PDF is digitally signed. Tagging rewrites the page content the signature covers, so the signature will stop verifying. Convert first, then re-sign."
|
||||
pdfUaTitle = "Document title"
|
||||
pdfUaTitleHelp = "Shown by a reader instead of the filename. Left blank, the first heading is used."
|
||||
selectSourceFormatFirst = "Choose a source format first"
|
||||
settings = "Settings"
|
||||
single = "Single"
|
||||
@@ -3570,7 +3598,11 @@ tags = "automation,folder,scanning,watch folder,hot folder,automatic processing,
|
||||
tags = "SSO,single sign-on,authentication,SAML,OAuth,OIDC,login,enterprise,identity provider,IdP"
|
||||
|
||||
[dropdownList]
|
||||
noItems = "No items available"
|
||||
noResults = "No results found"
|
||||
searchPlaceholder = "Search..."
|
||||
selectLanguages = "Select languages"
|
||||
selectOption = "Select an option"
|
||||
|
||||
[editableSecretField]
|
||||
edit = "Edit"
|
||||
@@ -3881,8 +3913,12 @@ addFiles = "Add files"
|
||||
addingFiles = "Adding files…"
|
||||
collapse = "Collapse sidebar"
|
||||
customizeGroups = "Customise groups"
|
||||
dataLostBody = "This browser lost this file's contents. Upload it again to keep working with it."
|
||||
dataLostTitle = "File data is unavailable"
|
||||
downloadFailed = "Download failed"
|
||||
dropHint = "Open files to get started"
|
||||
dropToAdd = "Drop files to add"
|
||||
duplicateFailed = "Could not duplicate file"
|
||||
expand = "Expand sidebar"
|
||||
googleDrive = "Google Drive"
|
||||
googleDriveDisabled = "Google Drive is not configured"
|
||||
@@ -3899,9 +3935,13 @@ viewAll = "View all {{count}} files"
|
||||
|
||||
[fileSidebar.fileItem]
|
||||
closeViewer = "Close viewer"
|
||||
dataLost = "Data lost"
|
||||
dataLostTooltip = "This browser lost this file's contents. Upload it again to keep working with it."
|
||||
delete = "Delete"
|
||||
duplicate = "Duplicate"
|
||||
moreActions = "More actions"
|
||||
openInViewer = "Open in viewer"
|
||||
rename = "Rename"
|
||||
savedToServer = "Saved to server"
|
||||
updateOnServer = "Update on server"
|
||||
uploadToServer = "Upload to server"
|
||||
@@ -3913,6 +3953,14 @@ reset = "Reset to defaults"
|
||||
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"
|
||||
|
||||
[fileSidebar.rename]
|
||||
cancel = "Cancel"
|
||||
error = "Could not rename the file."
|
||||
illegalCharacters = "A file name can't contain \\ / : * ? \" < > |"
|
||||
label = "File name"
|
||||
save = "Rename"
|
||||
title = "Rename file"
|
||||
|
||||
[filesPage]
|
||||
addToWorkspace = "Add to workspace"
|
||||
addToWorkspaceCount = "Add {{count}} to workspace"
|
||||
@@ -3954,6 +4002,7 @@ 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 organise them into a folder."
|
||||
duplicate = "Duplicate"
|
||||
file = "File"
|
||||
fileInfo = "File info"
|
||||
fileMenu = "File actions"
|
||||
@@ -4069,6 +4118,8 @@ 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}}"
|
||||
downloadFailed = "Could not download the file."
|
||||
duplicateFailed = "Could not duplicate the file."
|
||||
folderAppearanceFailed = "Could not update folder appearance."
|
||||
folderAppearanceFailedDetail = "Could not update folder appearance: {{message}}"
|
||||
moveFilesFailed = "Could not move files."
|
||||
@@ -4253,9 +4304,14 @@ issues = "GitHub"
|
||||
|
||||
[formFill]
|
||||
allSaved = "All saved"
|
||||
analyzingFields = "Analysing form fields..."
|
||||
extractCsvError = "Failed to extract CSV"
|
||||
extractXlsxError = "Failed to extract XLSX"
|
||||
filled = "filled"
|
||||
flattenAfterFilling = "Flatten after filling"
|
||||
noFields = "No fillable form fields found in this PDF."
|
||||
placeholderEnter = "Enter"
|
||||
placeholderSelect = "Select"
|
||||
requiredAbbreviation = "req"
|
||||
requiredFieldsError = "Please fill in all required fields"
|
||||
rescanFields = "Re-scan fields"
|
||||
@@ -4807,9 +4863,6 @@ title = "Image to PDF"
|
||||
[imageToPdf]
|
||||
tags = "conversion,img,jpg,picture,photo"
|
||||
|
||||
[infoBanner]
|
||||
dismiss = "Dismiss"
|
||||
|
||||
[invite]
|
||||
acceptError = "Failed to create account"
|
||||
accountFor = "Creating account for"
|
||||
@@ -4991,6 +5044,34 @@ uploadSuccess = "Upload Successful!"
|
||||
uploadSuccessMessage = "Your images have been transferred."
|
||||
validating = "Validating session..."
|
||||
|
||||
[mobileSign]
|
||||
clear = "Clear"
|
||||
invalidSession = "Session expired"
|
||||
invalidSessionMessage = "This QR code is no longer valid. Open the Sign tool on your computer and scan the new code."
|
||||
penSizeLabel = "Pen size"
|
||||
send = "Send to computer"
|
||||
sendAnother = "Send another signature"
|
||||
sendError = "Could not send the signature. Check the connection and try again."
|
||||
sentMessage = "Signature sent to your computer. You can send another or close this page."
|
||||
tabsLabel = "Signature source"
|
||||
undo = "Undo"
|
||||
validating = "Checking session…"
|
||||
|
||||
[mobileSign.photo]
|
||||
fromGallery = "From gallery"
|
||||
hint = "Photograph a signature on white paper, or choose an existing image."
|
||||
invalidType = "Please choose an image file."
|
||||
takePhoto = "Take a photo"
|
||||
|
||||
[mobileSign.tab]
|
||||
draw = "Draw"
|
||||
photo = "Photo"
|
||||
type = "Type"
|
||||
|
||||
[mobileSign.type]
|
||||
placeholder = "Your name"
|
||||
previewPlaceholder = "Signature preview"
|
||||
|
||||
[mobileUpload]
|
||||
description = "Scan to upload photos. Images auto-convert to PDF."
|
||||
descriptionNoConvert = "Scan to upload photos from your mobile device."
|
||||
@@ -5009,6 +5090,14 @@ title = "Upload from Mobile"
|
||||
tags = "Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move,delete,migrate,divide"
|
||||
title = "PDF Multi Tool"
|
||||
|
||||
[navFooter]
|
||||
openEditor = "Open PDF Editor"
|
||||
openProcessor = "Open PDF Processor"
|
||||
|
||||
[navFooter.credits]
|
||||
count = "{{remaining}} of {{total}}"
|
||||
label = "Free credits"
|
||||
|
||||
[oauth.error]
|
||||
message = "Authentication was not successful. You can close this window and try again."
|
||||
title = "Authentication Failed"
|
||||
@@ -5982,6 +6071,11 @@ header = "PDF To PDF/A"
|
||||
tags = "archive,long-term,standard,conversion,storage,preservation"
|
||||
title = "PDF To PDF/A"
|
||||
|
||||
[pdfToPDFUA]
|
||||
header = "PDF To PDF/UA"
|
||||
tags = "accessibility,accessible,tagged,screen reader,wcag,eaa,section 508,conversion"
|
||||
title = "PDF To PDF/UA"
|
||||
|
||||
[pdfToPDFX]
|
||||
tags = "print,standard,conversion,production,prepress,archive"
|
||||
title = "PDF To PDF/X"
|
||||
@@ -6293,7 +6387,6 @@ revoked = "Revoked"
|
||||
unnamed = "Unnamed instance"
|
||||
|
||||
[portal.accountLink.instances.columns]
|
||||
actions = "Actions"
|
||||
instance = "Instance"
|
||||
lastSeen = "Last seen"
|
||||
linked = "Linked"
|
||||
@@ -6888,6 +6981,32 @@ label = "Jira"
|
||||
description = "Email a document or a notification when a policy runs."
|
||||
label = "Mailgun"
|
||||
|
||||
[portal.connections.types.n8n]
|
||||
baseUrlPlaceholder = "https://your-n8n/webhook/9f2c-..."
|
||||
description = "Hand documents to an n8n workflow, and take back whatever it produces."
|
||||
label = "n8n"
|
||||
|
||||
[portal.connections.types.n8n.fields.authType]
|
||||
helperText = "Match the Authentication set on the n8n Webhook node."
|
||||
label = "Webhook authentication"
|
||||
|
||||
[portal.connections.types.n8n.fields.authType.options.basic]
|
||||
label = "Basic auth"
|
||||
|
||||
[portal.connections.types.n8n.fields.authType.options.header]
|
||||
label = "Header auth"
|
||||
|
||||
[portal.connections.types.n8n.fields.authType.options.none]
|
||||
label = "None"
|
||||
|
||||
[portal.connections.types.n8n.fields.headerName]
|
||||
helperText = "The header name from the n8n credential, not its value."
|
||||
label = "Header name"
|
||||
placeholder = "X-N8N-Key"
|
||||
|
||||
[portal.connections.types.n8n.fields.token]
|
||||
label = "Header value"
|
||||
|
||||
[portal.connections.types.nextcloud]
|
||||
baseUrlPlaceholder = "https://your-server/remote.php/dav"
|
||||
description = "File processed documents into Nextcloud."
|
||||
@@ -7190,12 +7309,11 @@ editorAction = "Editor"
|
||||
empty = "No documents match this filter."
|
||||
rowActions = "Row actions"
|
||||
sensitiveLabel = "Sensitive"
|
||||
sensitiveTitle = "Sensitive — access required"
|
||||
|
||||
[portal.documents.table.columns]
|
||||
action = "Pipeline / Action"
|
||||
actions = "Actions"
|
||||
document = "Document"
|
||||
labels = "Labels"
|
||||
product = "Product"
|
||||
status = "Status"
|
||||
time = "Time"
|
||||
@@ -7211,6 +7329,7 @@ host = "Host"
|
||||
lastSeen = "Last seen"
|
||||
region = "Region"
|
||||
status = "Status"
|
||||
target = "Target"
|
||||
version = "Version"
|
||||
|
||||
[portal.editorAdmin.health.empty]
|
||||
@@ -7285,6 +7404,56 @@ description = "This view hit an unexpected error. Try again, or pick another sec
|
||||
retry = "Try again"
|
||||
title = "Something went wrong on this page"
|
||||
|
||||
[portal.failures]
|
||||
fromSource = "From source {{source}}"
|
||||
occurrences = "{{count}} occurrences"
|
||||
reportedBy = "Hit by {{actor}}"
|
||||
runReference = "Run {{runId}}"
|
||||
subtitle = "Failures recorded from your policy runs and your team's editors, with the actions you can take."
|
||||
title = "Failures"
|
||||
|
||||
[portal.failures.action]
|
||||
acknowledge = "Acknowledge"
|
||||
confirm = "Are you sure?"
|
||||
dismiss = "Dismiss"
|
||||
dismissSkipFile = "Skip this file"
|
||||
|
||||
[portal.failures.debug]
|
||||
copyJson = "Copy JSON"
|
||||
dismissAll = "Dismiss all ({{total}})"
|
||||
dismissing = "Dismissing..."
|
||||
hideJson = "Hide raw JSON ({{total}})"
|
||||
refresh = "Refresh failures"
|
||||
showJson = "Show raw JSON ({{total}})"
|
||||
|
||||
[portal.failures.disabled]
|
||||
closed = "This failure is already closed."
|
||||
unavailable = "Not available for this failure."
|
||||
|
||||
[portal.failures.empty]
|
||||
description = "Policy runs that fail will appear here with the actions you can take."
|
||||
title = "No failures recorded"
|
||||
|
||||
[portal.failures.kind.inputPasswordProtected]
|
||||
description = "The pipeline could not open the document because it is password-protected. Unlock it and run it again, or skip this file."
|
||||
title = "Password-protected document"
|
||||
|
||||
[portal.failures.kind.unknown]
|
||||
description = "This run failed for a reason Stirling does not yet recognise. The raw message is shown below."
|
||||
title = "Unrecognised failure"
|
||||
|
||||
[portal.failures.origin]
|
||||
pipeline = "Pipeline"
|
||||
policy = "Policy"
|
||||
tool = "Tool run"
|
||||
|
||||
[portal.failures.stage]
|
||||
blocked = "Blocked"
|
||||
input = "Input"
|
||||
internal = "Internal"
|
||||
never_ran = "Never ran"
|
||||
output = "Output"
|
||||
|
||||
[portal.home.download]
|
||||
back = "Back"
|
||||
body = "Download the desktop app or self-host the server."
|
||||
@@ -7391,11 +7560,6 @@ cancel = "Cancel"
|
||||
confirm = "Revoke key"
|
||||
title = "Revoke API key"
|
||||
|
||||
[portal.infrastructure.attestationLabel]
|
||||
attested = "Attested"
|
||||
inScope = "In scope"
|
||||
notApplicable = "N/A"
|
||||
|
||||
[portal.infrastructure.audit]
|
||||
filterAriaLabel = "Filter audit events by category"
|
||||
heading = "Audit logs"
|
||||
@@ -7467,11 +7631,6 @@ 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"
|
||||
@@ -7485,240 +7644,10 @@ 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]
|
||||
loadAria = "Load for {{name}}"
|
||||
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"
|
||||
|
||||
[portal.infrastructure.modelLabel]
|
||||
active = "Active"
|
||||
degraded = "Degraded"
|
||||
disabled = "Disabled"
|
||||
|
||||
[portal.infrastructure.models]
|
||||
heading = "Models"
|
||||
loadAria = "Load for {{name}}"
|
||||
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 artefacts are written."
|
||||
|
||||
[portal.infrastructure.storage.retention]
|
||||
heading = "Retention"
|
||||
subheading = "How long artefacts 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"
|
||||
@@ -7728,11 +7657,9 @@ security = "Security"
|
||||
storage = "Storage"
|
||||
|
||||
[portal.integrations]
|
||||
addAnother = "Add another"
|
||||
availableHeading = "Available"
|
||||
comingSoonHeading = "Coming soon"
|
||||
connect = "Connect"
|
||||
connectedHeading = "Connected"
|
||||
connectionCount_one = "{{count}} connection"
|
||||
connectionCount_other = "{{count}} connections"
|
||||
customApi = "Custom API"
|
||||
@@ -7750,6 +7677,10 @@ security = "Security"
|
||||
signing = "Signing"
|
||||
storage = "Storage"
|
||||
|
||||
[portal.integrations.noResults]
|
||||
description = "No integrations match your filters. Try a different category or search."
|
||||
title = "No matches"
|
||||
|
||||
[portal.integrations.status]
|
||||
connected = "Connected"
|
||||
|
||||
@@ -7780,7 +7711,6 @@ integrations = "Integrations"
|
||||
pipelines = "Pipelines"
|
||||
policies = "Policies"
|
||||
procurement = "Procurement"
|
||||
settings = "Settings"
|
||||
sources = "Sources"
|
||||
usage = "Usage & Billing"
|
||||
users = "Users"
|
||||
@@ -7797,7 +7727,7 @@ title = "Pipelines"
|
||||
newPipeline = "New pipeline"
|
||||
|
||||
[portal.pipelines.builder]
|
||||
addStep = "Add tool"
|
||||
activate = "Activate"
|
||||
back = "Back to pipelines"
|
||||
cannotFollow = "Can't take {{produced}}"
|
||||
chooseAccount = "Choose an account"
|
||||
@@ -7805,28 +7735,38 @@ chooseDestination = "Choose a destination"
|
||||
chooseOperation = "Choose what this step does"
|
||||
chooseSource = "Choose a source"
|
||||
discard = "Discard changes"
|
||||
enabled = "Enabled"
|
||||
inputs = "Input"
|
||||
inputSource = "Input source"
|
||||
inputTrigger = "Trigger"
|
||||
keepEditing = "Keep editing"
|
||||
moreActions = "More actions"
|
||||
needsConfiguring = "Needs setting up"
|
||||
needsUpload = "Needs an uploaded file"
|
||||
noSources = "No sources connected yet. Create one to use it as an input."
|
||||
needsDestination = "No destination chosen"
|
||||
needsSource = "No source chosen"
|
||||
noToolMatches = "No tools match your search."
|
||||
pipelineSettings = "Pipeline settings"
|
||||
pause = "Pause"
|
||||
rename = "Rename pipeline"
|
||||
searchTools = "Search tools"
|
||||
selectToolBody = "Add a tool to build your pipeline."
|
||||
selectToolTitle = "No tools yet"
|
||||
sendToSystem = "Send to another system"
|
||||
stepsIncompatible = "These steps can't run on what their prior step produces: {{tools}}."
|
||||
stepsNeedSetup = "These steps still need setting up before saving: {{tools}}."
|
||||
toolSettings = "Tool settings"
|
||||
supportingFiles = "Supporting files"
|
||||
testRun = "Test with a file"
|
||||
unknownStep = "Unrecognised 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"
|
||||
viewDefinition = "View definition"
|
||||
|
||||
[portal.pipelines.builder.blocker]
|
||||
destination = "Choose a destination"
|
||||
heading = "To create this pipeline:"
|
||||
incompatible = "Fix steps that can't run in order: {{tools}}"
|
||||
name = "Give the pipeline a name"
|
||||
saveHeading = "To save your changes:"
|
||||
schedule = "Set how often it runs"
|
||||
setup = "Finish setting up: {{tools}}"
|
||||
source = "Choose an input source"
|
||||
|
||||
[portal.pipelines.builder.diagnostic]
|
||||
fan-in = "Combines every file from the previous step"
|
||||
@@ -7838,31 +7778,36 @@ undeclared-operation = "Can't check what this step accepts"
|
||||
|
||||
[portal.pipelines.composer]
|
||||
addTool = "Add tool"
|
||||
cancel = "Cancel"
|
||||
chainEmpty = "Add a tool to start building your pipeline."
|
||||
create = "Create pipeline"
|
||||
createPaused = "Create paused"
|
||||
editingUnsupported = "Displaying these tool params for editing is not supported yet."
|
||||
moveDown = "Move down"
|
||||
moveUp = "Move up"
|
||||
editSource = "Edit source"
|
||||
name = "Name"
|
||||
namePlaceholder = "e.g. Redaction sweep"
|
||||
noToolSettings = "This tool has no configurable settings."
|
||||
operations_one = "Operation ({{count}})"
|
||||
operations_other = "Operations ({{count}})"
|
||||
output = "Output"
|
||||
removeStep = "Remove operation"
|
||||
save = "Save changes"
|
||||
scheduleEvery = "Run every"
|
||||
sources = "Sources"
|
||||
sourcesLoading = "Loading sources..."
|
||||
trigger = "Trigger"
|
||||
triggerManual = "Manual only"
|
||||
|
||||
[portal.pipelines.composer.runsEvery]
|
||||
days_one = "Runs every day"
|
||||
days_other = "Runs every {{count}} days"
|
||||
hours_one = "Runs every hour"
|
||||
hours_other = "Runs every {{count}} hours"
|
||||
minutes_one = "Runs every minute"
|
||||
minutes_other = "Runs every {{count}} minutes"
|
||||
|
||||
[portal.pipelines.composer.unit]
|
||||
days = "days"
|
||||
hours = "hours"
|
||||
minutes = "minutes"
|
||||
|
||||
[portal.pipelines.definition]
|
||||
subtitle = "The pipeline as it would be saved."
|
||||
title = "Definition"
|
||||
|
||||
[portal.pipelines.delete]
|
||||
body = "Delete \"{{name}}\"? This can't be undone."
|
||||
cancel = "Cancel"
|
||||
@@ -7880,6 +7825,37 @@ 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.graph]
|
||||
addFirstTool = "Add a tool"
|
||||
dragHint = "Drop on a line to move it"
|
||||
insertHere = "Add a tool here"
|
||||
removeNode = "Remove {{name}}"
|
||||
showError = "Show why {{name}} failed"
|
||||
|
||||
[portal.pipelines.graph.add]
|
||||
input = "Add a source"
|
||||
output = "Add a destination"
|
||||
|
||||
[portal.pipelines.graph.run]
|
||||
done = "Done"
|
||||
failed = "Failed"
|
||||
running = "Running"
|
||||
|
||||
[portal.pipelines.inspector]
|
||||
multipleBody = "Drag any of them onto a line to move them together, or press Delete to remove them."
|
||||
multipleSelected_one = "{{count}} step selected"
|
||||
multipleSelected_other = "{{count}} steps selected"
|
||||
noSelectionBody = "Pick a node in the graph to change what it does."
|
||||
noSelectionTitle = "Nothing selected"
|
||||
|
||||
[portal.pipelines.inspector.status]
|
||||
completed_one = "Finished the only step"
|
||||
completed_other = "Finished all {{count}} steps"
|
||||
failed_one = "Failed on the only step"
|
||||
failed_other = "Failed after {{done}} of {{count}} steps"
|
||||
running_one = "Running the only step"
|
||||
running_other = "Running step {{done}} of {{count}}"
|
||||
|
||||
[portal.pipelines.kpi]
|
||||
active = "Active"
|
||||
paused = "Paused"
|
||||
@@ -7892,7 +7868,6 @@ 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."
|
||||
@@ -7905,10 +7880,10 @@ paused = "Paused"
|
||||
|
||||
[portal.pipelines.table]
|
||||
name = "Pipeline"
|
||||
open = "Open"
|
||||
sources = "Sources"
|
||||
status = "Status"
|
||||
steps = "Steps"
|
||||
trigger = "Trigger"
|
||||
|
||||
[portal.pipelines.trigger]
|
||||
folder-watch = "Folder watch"
|
||||
@@ -8223,6 +8198,24 @@ label = "Attach to a Jira issue"
|
||||
description = "Sends the processed document as an attachment."
|
||||
label = "Email the document (Mailgun)"
|
||||
|
||||
[portal.policies.operations.n8nGate]
|
||||
description = "Your workflow decides whether the run carries on."
|
||||
label = "Ask an n8n workflow to approve"
|
||||
note = "The workflow must reply with {\"approved\": true}. Anything else — including a timeout — stops the run and parks the document."
|
||||
|
||||
[portal.policies.operations.n8nNotify]
|
||||
description = "Sends the run's details, not the document."
|
||||
label = "Tell an n8n workflow"
|
||||
|
||||
[portal.policies.operations.n8nSend]
|
||||
description = "Sends the document and the run's details to your workflow."
|
||||
label = "Send the document to n8n"
|
||||
|
||||
[portal.policies.operations.n8nTransform]
|
||||
description = "Your workflow processes the document and the file it returns replaces it."
|
||||
label = "Process the document in n8n"
|
||||
note = "Set the Webhook node to respond \"Using Respond to Webhook Node\", and return a file. On the default \"Immediately\" setting n8n replies with an acknowledgement, and that would replace the document."
|
||||
|
||||
[portal.policies.operations.nextcloudUpload]
|
||||
description = "Writes the processed document into a folder."
|
||||
label = "Upload to Nextcloud"
|
||||
@@ -8747,10 +8740,6 @@ 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"
|
||||
@@ -8787,9 +8776,9 @@ unused = "Unused"
|
||||
|
||||
[portal.sources.table]
|
||||
documents = "Documents"
|
||||
open = "Open"
|
||||
source = "Source"
|
||||
status = "Status"
|
||||
type = "Type"
|
||||
usedBy = "Policies"
|
||||
|
||||
[portal.sources.types.box]
|
||||
@@ -10130,6 +10119,7 @@ last = "Last page"
|
||||
maintainRatio = "Toggle maintain aspect ratio"
|
||||
next = "Next page"
|
||||
noSavedSigs = "No saved signatures found"
|
||||
penSizePlaceholder = "Type or select pen size (1-200)"
|
||||
personalSigs = "Personal Signatures"
|
||||
previous = "Previous page"
|
||||
redo = "Redo"
|
||||
@@ -10168,6 +10158,7 @@ backgroundRemovalFailedTitle = "Background removal failed"
|
||||
hint = "Upload a PNG or JPG image of your signature"
|
||||
label = "Upload signature image"
|
||||
placeholder = "Select image file"
|
||||
previewAlt = "Current image signature"
|
||||
processing = "Processing image..."
|
||||
removeBackground = "Remove white background (make transparent)"
|
||||
|
||||
@@ -10181,6 +10172,17 @@ saved = "Select a saved signature above, then click anywhere on the PDF to place
|
||||
text = "After entering your name above, click anywhere on the PDF to place your signature."
|
||||
title = "How to add signature"
|
||||
|
||||
[sign.mobile]
|
||||
createFromPhone = "Mobile upload"
|
||||
description = "Scan this QR code with your phone or tablet, draw your signature, and it will appear here automatically."
|
||||
error = "Connection Error"
|
||||
expiryWarning = "QR Code Expiring Soon"
|
||||
expiryWarningMessage = "This QR code will expire in {{seconds}} seconds. A new code will be generated automatically."
|
||||
instructions = "Open the camera app on your phone and scan this code. Keep this window open while you draw."
|
||||
pollingError = "Error checking for the signature"
|
||||
sessionCreateError = "Failed to create session"
|
||||
title = "Draw on your phone"
|
||||
|
||||
[sign.mode]
|
||||
move = "Move Signature"
|
||||
pause = "Pause placement"
|
||||
@@ -10840,6 +10842,9 @@ removal = "Removal"
|
||||
signing = "Signing"
|
||||
verification = "Verification"
|
||||
|
||||
[toolRenderer]
|
||||
notFound = "Tool not found: {{tool}}"
|
||||
|
||||
[tools]
|
||||
noSearchResults = "No tools found"
|
||||
noTools = "No tools available"
|
||||
@@ -10997,6 +11002,13 @@ approver = "Approves policy"
|
||||
editor = "Editor"
|
||||
processor = "Processor"
|
||||
|
||||
[users.columns]
|
||||
capabilities = "Capabilities"
|
||||
email = "Email"
|
||||
person = "Person"
|
||||
role = "Role"
|
||||
status = "Status"
|
||||
|
||||
[users.confirm]
|
||||
cancelInviteBody = "Cancel the invitation to {{email}}? They won't be able to join with the current link."
|
||||
cancelInviteTitle = "Cancel invitation"
|
||||
@@ -11016,10 +11028,8 @@ title = "No members yet"
|
||||
addToTeam = "Add to team"
|
||||
guestCount = "{{count}} guest"
|
||||
guests = "Guests"
|
||||
guestsDesc = "External collaborators, scoped to what you shared. Editor only."
|
||||
ledBy = "led by {{owner}}"
|
||||
org = "Organisation"
|
||||
orgDesc = "Owners with org-wide authority and policy approval"
|
||||
owners = "{{count}} owner"
|
||||
team = "{{name}} team"
|
||||
teamMeta = "{{count}} people"
|
||||
@@ -11059,13 +11069,15 @@ 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.invites.columns]
|
||||
expires = "Expires"
|
||||
invitee = "Invitee"
|
||||
|
||||
[users.loadError]
|
||||
description = "Something went wrong reaching the back end, or you don't have access. Try again."
|
||||
title = "Couldn't load members"
|
||||
@@ -11255,12 +11267,15 @@ searchPlaceholder = "Search attachments"
|
||||
title = "Attachments"
|
||||
|
||||
[viewer.bookmarks]
|
||||
addBookmark = "Add bookmark"
|
||||
bookmarkTitle = "Bookmark title"
|
||||
bookmarkTitleRequired = "Bookmark title is required"
|
||||
closeSidebar = "Close bookmarks sidebar"
|
||||
collapseAll = "Collapse all bookmarks"
|
||||
empty = "No bookmarks in this document"
|
||||
expandAll = "Expand all bookmarks"
|
||||
searchPlaceholder = "Search bookmarks"
|
||||
title = "Bookmarks"
|
||||
|
||||
[viewer.comments]
|
||||
addComment = "Add comment"
|
||||
@@ -11282,10 +11297,12 @@ locateAnnotation = "Locate in document"
|
||||
moreActions = "More actions"
|
||||
nComments_one = "{{count}} comment"
|
||||
nComments_other = "{{count}} comments"
|
||||
noMatch = "No comments match your search"
|
||||
pageLabel = "Page {{page}}"
|
||||
placingHint = "Click a page to place… (cancel)"
|
||||
removeCommentOnly = "Remove comment only"
|
||||
saveReply = "Save reply"
|
||||
searchPlaceholder = "Search comments"
|
||||
title = "Comments"
|
||||
typeComment = "Comment"
|
||||
typeInsertText = "Insert Text"
|
||||
@@ -11308,6 +11325,7 @@ unsavedDesc = "You have unsaved changes"
|
||||
closeSidebar = "Close layers sidebar"
|
||||
hideAll = "Hide all layers"
|
||||
showAll = "Show all layers"
|
||||
title = "Layers"
|
||||
|
||||
[viewer.link]
|
||||
delete = "Delete link"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user